Innholdsfortegnelse:

Arduino vekkerklokke prosjekt: 14 trinn
Arduino vekkerklokke prosjekt: 14 trinn

Video: Arduino vekkerklokke prosjekt: 14 trinn

Video: Arduino vekkerklokke prosjekt: 14 trinn
Video: Arduino LED Light Sunrise Alarm Clock 2024, Juli
Anonim
Arduino vekkerklokke prosjekt
Arduino vekkerklokke prosjekt

I dette prosjektet vil vi bruke Arduino Uno til å kontrollere en LCD -skjerm for å vise gjeldende tid og klokkeslett som en alarm er angitt for. Vi bruker knappene til å stille inn hver gang.

Materialer:

  • Arduino Uno -
  • Breadboard -
  • Jumper Wires (x13+) -
  • 10 kohm motstander (x4) -
  • LCD -skjerm -
  • 7 knapper-https://vilros.com/collections/raspberry-pi-acces…
  • Piezo -høyttaler -

Trinn 1: Tilkoblingsinstruksjoner

Instruksjoner for tilkobling
Instruksjoner for tilkobling

1. Koble en startkabel fra 5V -pinnen på Arduino til en av + skinnene på brødbrettet.

Steg 2:

Bilde
Bilde

2. Koble en startkabel fra GND -pinnen på Arduino til - skinnen ved siden av + skinnen du valgte på brødbrettet.

Trinn 3:

Bilde
Bilde

3. Koble LCD -skjermen til strøm, bakken og TX -pinnen (pin 1).

Trinn 4:

Bilde
Bilde

4. Plasser 7 knapper på brødbrettet med beina over gapet i brødbrettet.

Trinn 5:

Bilde
Bilde

5. Plasser 10 kohm -motstander fra - skinnen med GND -pinnen koblet til den nederste venstre pinnen på knappene.

Trinn 6:

Bilde
Bilde

6. Plasser jumperkabler mellom knappene nederst til høyre på knappene og 5V -skinnen på brødbrettet.

Trinn 7:

Bilde
Bilde

7. Plasser jumperledninger mellom pinnene 6, deretter 8-13, og pinnen på knappen som motstanden er koblet til.

Trinn 8:

Bilde
Bilde

8. Plasser deretter din Piezo -høyttaler på brødbrettet og koble pinne 7 til strømnålen, deretter en 100 ohm motstand til bakken.

Trinn 9: Programmeringsinstruksjoner

1. Oversikt: Dette prosjektet vil be brukeren om å stille gjeldende tid på startstrømmen på skjermen gjeldende tid og klokkeslett for alarmen. Knappene som er koblet ovenfor, brukes til å stille inn hver gang. Fra venstre til høyre er de angitt gjeldende time, angitt gjeldende minutt, angitt gjeldende AM eller PM, angitt alarmtime, angitt alarmminutt, angitt alarm AM eller PM. Den siste knappen brukes til å dempe alarmen når den høres.

Trinn 10:

2. Det første vi må gjøre er å initialisere variabelen vi skal bruke.

// Initialiser variabler som skal brukesintime = 0; // Time for gjeldende tid int minutt = 0; //

Minutt for gjeldende tid int sekund = 0; // Andre for gjeldende tid

int time_a = 0; int // Time for alarmtid

minutt_a = 0; // Minutt for alarmtid

bool am_pm = false; // AM/PM vekselflagg. Falskt er AM, sant er PM

bool am_pm_a = false; // AM/PM vekselflagg for alarm. Falskt er AM, sant er PM

int set_hr = 13; // Bruk pin 13 for å stille timen

int set_min = 12; // Bruk pinne 12 for å angi minutt int

set_am_pm = 11; // Bruk pin 11 for å stille inn am/pm

int set_hr_a = 10; // Bruk pin 10 for å stille time for alarm int set_min_a = 9; // Bruk pin 9 til å angi minutt for alarm int set_am_pm_a = 8; // Bruk pin 8 for å stille am/pm for alarm

int høyttaler = 7; // Pin som skal brukes for høyttalere: stille = 6; // Fest for å stoppe høyttaleren

bool alarm = false; // Flagg for å veksle for å fortsette å være alarmerende

bool quieted = false; // Flagget som viser stille har ikke blitt trykket

int cur_time = 0; // Variabel for gjeldende tid

int etime = 0; // Variabel for forløpt tid

Trinn 11:

3. Deretter må vi sette opp LCD -skjermen og be brukeren om å angi gjeldende tid. Siden dette bare trenger å gjøres en gang, gjør vi det i oppsettsrutinen.

ugyldig oppsett () {

// Sett opp LCD -skjerm

Serial.begin (9600); // Initialiser Serial på 9600 baud

Serial.write (17); // Slå på baklyset

Serial.write (24); // Slå på displayet, med markør og uten blink

Serial.write (12); // Fjern skjermen

Serial.write (128); // Flytt markøren til øverste venstre hjørne // Sett pinModes pinMode (set_hr, INNGANG); pinMode (set_min, INPUT);

pinMode (set_am_pm, INPUT);

pinMode (set_hr_a, INPUT);

pinMode (set_min_a, INPUT);

pinMode (set_am_pm_a, INPUT);

pinMode (høyttaler, OUTPUT);

pinMode (stille, INNGANG);

// Ved første strøm, må brukeren angi gjeldende tid. Serial.print ("Angi gjeldende tid"); forsinkelse (2000);

Serial.write (12);

printTimes ();

cur_time = millis (); // Lagre gjeldende tid}

Trinn 12:

4. Så, i loop -rutinen, holder vi oversikt over tiden og leser knappestatusene for å se om brukeren angir en av gangene.

void loop () {

// Holde tiden

holde tiden();

// Sjekk om det er på tide å alarmere!

hvis ((time == time_a && minutt == minutt_a &&! stille) || alarm) {tone (høyttaler, 2000, 500); // Send en lyd på 2000 Hz til høyttaleren i 500 ms

forsinkelse (500); // Forsink 500 ms hvis (! Alarm) {// Hvis alarmen er slått av, slå den på

}

}

// Hvis brukeren demper alarmen ved å trykke på den stille knappen, må du slutte å alarme hvis (alarm &&! Stille && digitalRead (stille)) {

alarm = usann;

stille = sant; }

// Tilbakestill alarmen hvis (! Alarm && quieted && minute! = Minute_a) {quieted = false;

}

// Sjekk om settpinnene går høyt, og øk i så fall den tilsvarende verdien if (digitalRead (set_hr) && time <12) {

time ++;

printTimes ();

debounce ();

}

ellers hvis (digitalRead (set_hr) && time == 12) {time = 1;

printTimes ();

debounce ();

}

ellers{}

if (digitalRead (set_min) && minute <59) {

minutt ++; printTimes ();

debounce ();

}

ellers hvis (digitalRead (set_min) && minutt == 59) {minutt = 0;

printTimes ();

debounce ();

}

annet {} if (digitalRead (set_am_pm) && am_pm) {

am_pm = false;

printTimes ();

debounce ();

}

ellers hvis (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

debounce ();

}

annet {} if (digitalRead (set_hr_a) && hour_a <12) {

time_a ++;

printTimes ();

debounce ();

}

ellers hvis (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

printTimes ();

debounce ();

}

annet {} if (digitalRead (set_min_a) && minute_a <59) {

minutt_a ++;

printTimes ();

debounce ();

}

ellers hvis (digitalRead (set_min) && minute_a == 59) {minute_a = 0;

printTimes ();

debounce ();

}

annet {} if (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = usant;

printTimes ();

debounce ();

}

annet hvis (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

debounce ();

}

ellers{}

}

Trinn 13:

5. Her vil du legge merke til et par underrutiner jeg opprettet - debounce () og printTimes (). Debounce () brukes til å sikre at vi bare leser knappene en gang. Siden Arduino skanner tusenvis av ganger i sekundet, kan det tro at knappen ble trykket flere ganger når du bare hadde tenkt å lese den en gang. Debounce () vil fryse programmet til knappen slippes. printTimes () oppdaterer LCD -skjermen, men siden det var flere kommandoer, skrev jeg dem en gang og kan deretter ringe underprogrammet når som helst en tidsverdi endres.

// Mens du trykker på noen av knappene, blir du i denne funksjonen og forsinker deretter 250 ms.

void debounce () {

mens (digitalRead (set_hr) || digitalRead (set_min) ||

digitalRead (set_am_pm) || digitalRead (set_hr_a) ||

digitalRead (set_min_a) || digitalRead (set_am_pm_a)) {} forsinkelse (250);

}

// Skriver ut oppdaterte tider hvis det er endringer

void printTimes () {

Serial.write (12);

Serial.print ("Nåværende tid:");

Serial.write (148);

hvis (time <10) {

Serial.print ("0");

}

Serial.print (time);

Serial.print (":");

hvis (minutt <10) {

Serial.print ("0");

}

Serial.print (minutt); Serial.print (":");

hvis (andre <10) {

Serial.print ("0");

}

Serial.print (andre);

hvis (am_pm) {

Serial.print ("PM");

}

ellers{

Serial.print ("AM");

}

Serial.write (168);

Serial.print ("Alarm Set for:");

Serial.write (188);

hvis (time_a <10) {

Serial.print ("0");

}

Serial.print (time_a);

Serial.print (":");

hvis (minutt_a <10) {

Serial.print ("0");

}

Serial.print (minutt_a);

hvis (am_pm_a) {

Serial.print ("PM");

}

ellers{

Serial.print ("AM");

}

}

// Øk tidsparametrene ugyldige

holde tiden(){

etime = millis () - cur_time;

if (etime> = 1000 && second <59) {

andre ++;

cur_time = millis ();

printTimes ();

}

ellers hvis (etime> = 1000 && second == 59 && minutt <59) {second = 0;

minutt ++;

cur_time = millis ();

printTimes ();

}

annet hvis (etime> = 1000 && second == 59 && minute == 59 && time <12) {

andre = 0; minutt =

0; time ++; cur_time =

millis (); printTimes ();

}

annet hvis (etime> = 1000 && sekund == 59 && minutt == 59 && time == 12) {

andre = 0; minutt =

0; time = 1; am_pm =

!morgen kveld;

cur_time = millis ();

printTimes ();

}

ellers{}

}

Trinn 14:

6. Det er det!

Kompiler og last opp, og du er ferdig!

Anbefalt: