Inhoudsopgave:

Arduino Alarm Clock Project - Ajarnpa
Arduino Alarm Clock Project - Ajarnpa

Video: Arduino Alarm Clock Project - Ajarnpa

Video: Arduino Alarm Clock Project - Ajarnpa
Video: How To Use An RTC (Real Time Clock) With Arduino Uno R3 | Make an Accurate Clock! 2024, Juli-
Anonim
Arduino Wekkerproject
Arduino Wekkerproject

In dit project zullen we de Arduino Uno gebruiken om een LCD-scherm te bedienen om de huidige tijd en tijd weer te geven waarvoor een alarm is ingesteld. We zullen knoppen gebruiken om elke keer in te stellen.

Materialen:

  • Arduino Uno -
  • Breadboard -
  • Doorverbindingsdraden (x13+) -
  • 10 kohm weerstanden (x4) -
  • LCD-scherm -
  • 7 knoppen -
  • Piëzo-luidspreker -

Stap 1: Aansluitinstructies

Aansluitinstructies
Aansluitinstructies

1. Sluit een jumperdraad van de 5V-pin op de Arduino aan op een van de + rails op het breadboard.

Stap 2:

Afbeelding
Afbeelding

2. Sluit een jumperdraad van de GND-pin op de Arduino aan op de - rail naast de + rail die je op het breadboard hebt gekozen.

Stap 3:

Afbeelding
Afbeelding

3. Sluit het LCD-scherm aan op voeding, aarde en de TX-pin (pin 1).

Stap 4:

Afbeelding
Afbeelding

4. Plaats 7 knoppen op het breadboard met de pootjes over de opening in het breadboard.

Stap 5:

Afbeelding
Afbeelding

5. Plaats 10 kohm weerstanden van de - rail met de GND pin aangesloten op de pinnen linksonder van de knoppen.

Stap 6:

Afbeelding
Afbeelding

6. Plaats jumperdraden tussen de pin rechtsonder van de knoppen en de 5V-rail op uw breadboard.

Stap 7:

Afbeelding
Afbeelding

7. Plaats jumperdraden tussen pin 6, dan 8-13 en de pin op de knop waarop de weerstand is aangesloten.

Stap 8:

Afbeelding
Afbeelding

8. Plaats vervolgens uw piëzo-luidspreker op het breadboard en sluit pin 7 aan op de voedingspin en vervolgens een weerstand van 100 ohm op aarde.

Stap 9: Programmeerinstructies

1. Overzicht: Dit project zal de gebruiker vragen om de huidige tijd in te stellen bij het eerste inschakelen van het display, de huidige tijd en de tijd waarop het alarm is ingesteld. De knoppen die hierboven zijn aangesloten, worden elke keer gebruikt om in te stellen. Van links naar rechts zijn dit het huidige uur, huidige minuut, huidige AM of PM, alarmuur, alarmminuut, alarm AM of PM. De laatste knop wordt gebruikt om het alarm uit te zetten wanneer het afgaat.

Stap 10:

2. Het eerste dat we moeten doen, is onze variabele die we gaan gebruiken initialiseren.

// Initialiseer variabelen die moeten worden gebruikt in uur = 0; // Uur voor huidige tijd int minuut = 0; //

Minuut voor huidige tijd int seconde = 0; // Tweede voor huidige tijd

int uur_a = 0; int // Uur voor wektijd

minuut_a = 0; // Minuut voor wektijd

bool am_pm = onwaar; // AM/PM-vlag wisselen. Niet waar is AM, waar is PM

bool am_pm_a = onwaar; // AM/PM toggle vlag voor alarm. False is AM, True is PM

int set_hr = 13; // Gebruik pin 13 om het uur in te stellen

int set_min = 12; // Gebruik pin 12 om de minuut int. in te stellen

set_am_pm = 11; // Gebruik pin 11 om am/pm in te stellen

int set_hr_a = 10; // Gebruik pin 10 om het uur in te stellen voor alarm int set_min_a = 9; // Gebruik pin 9 om minuten in te stellen voor alarm int set_am_pm_a = 8; // Gebruik pin 8 om am/pm voor alarm in te stellen

int-luidspreker = 7; // Pin om te gebruiken voor speakerint stil = 6; // Pin om de luidspreker te stoppen

bool alarm = vals; // Vlag om te wisselen om alarmerend te blijven

bool stil = false; // Vlag met stilte is niet ingedrukt

int cur_time = 0; // Variabele voor huidige tijd

int etime = 0; // Variabele voor verstreken tijd

Stap 11:

3. Vervolgens moeten we het LCD-scherm instellen en de gebruiker vertellen om de huidige tijd in te stellen. Omdat dit maar één keer hoeft te worden gedaan, doen we het in de setup-routine.

ongeldige setup() {

// LCD-scherm instellen

Serieel.begin(9600); // Initialiseer serieel op 9600 baud

Serieel.schrijven (17); // Zet de achtergrondverlichting aan

Serieel.schrijven(24); // Zet het scherm aan, met cursor en zonder knipperen

Serieel.schrijven (12); // Wis het scherm

Serieel.schrijven(128); // Verplaats de cursor naar de linkerbovenhoek// Set pinModes pinMode(set_hr, INVOER); 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 (luidspreker, UITGANG);

pinMode (stil, INPUT);

// Laat de gebruiker bij het eerste inschakelen de huidige tijd instellen. Serial.print("Stel de huidige tijd in"); vertraging (2000);

Serieel.schrijven (12);

printTimes();

cur_time = millis(); // Bewaar de huidige tijd}

Stap 12:

4. Vervolgens houden we in de loop-routine de tijd bij en lezen we de status van de knop om te zien of de gebruiker een van de tijden instelt.

lege lus() {

// Houd de tijd vast

keepTime();

// Controleer of het tijd is om te alarmeren!

if((uur == uur_a && minuut == minuut_a && !rustig) || alarm){toon (luidspreker, 2000, 500); // Voer een 2000 Hz-geluid uit naar de luidspreker gedurende 500 ms

vertraging (500); // Vertraging 500 ms if(!alarm){ // Als het alarm uit staat, zet het dan aan

}

}

// Als de gebruiker het alarm uitzet door op de knop Stil te drukken, stop dan met alarmeren if(alarm && !quieted && digitalRead(quiet)){

alarm = vals;

stil = waar; }

// Reset het alarm if(!alarm && stil && minuut != minuut_a){ stil = false;

}

// Controleer of de ingestelde pinnen hoog worden, en zo ja, verhoog de bijbehorende waardeif(digitalRead(set_hr) && hour <12){

uur++;

printTimes();

debounce();

}

else if (digitalRead(set_hr) && hour == 12){ hour = 1;

printTimes();

debounce();

}

anders{}

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

minuut++;printTimes();

debounce();

}

else if (digitalRead(set_min) && minuut == 59){ minuut = 0;

printTimes();

debounce();

}

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

am_pm = onwaar;

printTimes();

debounce();

}

else if (digitalRead(set_am_pm) && !am_pm){ am_pm = true;printTimes();

debounce();

}

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

uur_a++;

printTimes();

debounce();

}

else if (digitalRead(set_hr_a) && hour_a == 12){hour_a = 1;

printTimes();

debounce();

}

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

minuut_a++;

printTimes();

debounce();

}

else if (digitalRead(set_min) && minute_a == 59){minute_a = 0;

printTimes();

debounce();

}

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

am_pm_a = onwaar;

printTimes();

debounce();

}

else if (digitalRead(set_am_pm_a) && !am_pm_a){am_pm_a = true;

printTimes();

debounce();

}

anders{}

}

Stap 13:

5. Hier zie je een aantal subroutines die ik heb gemaakt - debounce() en printTimes(). Debounce() wordt gebruikt om ervoor te zorgen dat we de knoppen maar één keer lezen. Omdat de Arduino duizenden keren per seconde scant, kan hij denken dat de knop meerdere keren is ingedrukt, terwijl het de bedoeling was dat deze maar één keer zou worden gelezen. Debounce() bevriest het programma totdat de knop wordt losgelaten. printTimes() werkt het LCD-scherm bij, maar aangezien dat verschillende commando's waren, heb ik ze één keer getypt en kan dan de subroutine aanroepen wanneer een tijdwaarde verandert.

// Blijf in deze functie terwijl een van de knoppen wordt ingedrukt en vertraag vervolgens 250 ms.

ongeldige debounce(){

while(digitalRead(set_hr) || digitalRead(set_min) ||

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

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

}

// Drukt de bijgewerkte tijden af als er wijzigingen zijn

ongeldige printTimes(){

Serieel.schrijven (12);

Serial.print("Huidige tijd:");

Serieel.schrijven(148);

if(uur < 10){

Serieel.print("0");

}

Seriële.afdruk(uur);

Serial.print(":");

if(minuut < 10){

Serieel.print("0");

}

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

if(seconde < 10){

Serieel.print("0");

}

Seriële.afdruk (tweede);

als (am_pm){

Serial.print("PM");

}

anders{

Serial.print("AM");

}

Serieel.schrijven(168);

Serial.print("Alarm ingesteld voor:");

Serieel.schrijven (188);

if(uur_a < 10){

Serieel.print("0");

}

Serial.print(uur_a);

Serial.print(":");

if(minuut_a < 10){

Serieel.print("0");

}

Serial.print(minuut_a);

als (am_pm_a){

Serial.print("PM");

}

anders{

Serial.print("AM");

}

}

// Verhoog de tijdparameters ongeldig

keepTime(){

etime = millis() - cur_time;

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

tweede++;

cur_time = millis();

printTimes();

}

else if(etime >= 1000 && seconde == 59 && minuut < 59){ seconde = 0;

minuut++;

cur_time = millis();

printTimes();

}

else if(etime >= 1000 && seconde == 59 && minuut == 59 && uur < 12){

seconde = 0; minuut =

0; uur++; cur_time =

millis(); printTimes();

}

else if(etime >= 1000 && seconde == 59 && minuut == 59 && uur == 12){

seconde = 0; minuut =

0; uur = 1; am_pm =

!AM PM;

cur_time = millis();

printTimes();

}

anders{}

}

Stap 14:

6. Dat is alles!

Compileren en uploaden en je bent klaar!

Aanbevolen: