Sommario:

Progetto Sveglia Arduino: 14 passaggi
Progetto Sveglia Arduino: 14 passaggi

Video: Progetto Sveglia Arduino: 14 passaggi

Video: Progetto Sveglia Arduino: 14 passaggi
Video: Arduino lezione 14 servo 2024, Luglio
Anonim
Progetto Sveglia Arduino
Progetto Sveglia Arduino

In questo progetto, utilizzeremo Arduino Uno per controllare uno schermo LCD per mostrare l'ora e l'ora correnti per cui è impostato un allarme. Useremo i pulsanti per impostare ogni volta.

Materiali:

  • Arduino Uno -
  • Tagliere -
  • Ponticelli (x13+) -
  • Resistori da 10 kohm (x4) -
  • Schermo LCD -
  • 7 pulsanti -
  • Altoparlante piezo -

Passaggio 1: istruzioni per il collegamento

Istruzioni per il collegamento
Istruzioni per il collegamento

1. Collegare un ponticello dal pin 5V su Arduino a uno dei binari + sulla breadboard.

Passo 2:

Immagine
Immagine

2. Collega un ponticello dal pin GND su Arduino al binario - accanto al binario + che hai scelto sulla breadboard.

Passaggio 3:

Immagine
Immagine

3. Collegare lo schermo LCD all'alimentazione, alla massa e al pin TX (pin 1).

Passaggio 4:

Immagine
Immagine

4. Posiziona 7 pulsanti sulla breadboard con le gambe attraverso lo spazio nella breadboard.

Passaggio 5:

Immagine
Immagine

5. Posizionare i resistori da 10 kohm dal binario - con il pin GND collegato ai pin in basso a sinistra dei pulsanti.

Passaggio 6:

Immagine
Immagine

6. Posiziona i cavi dei ponticelli tra il piedino in basso a destra dei pulsanti e la guida 5V sulla breadboard.

Passaggio 7:

Immagine
Immagine

7. Posizionare i cavi dei ponticelli tra i pin 6, quindi 8-13 e il pin sul pulsante a cui è collegato il resistore.

Passaggio 8:

Immagine
Immagine

8. Quindi, posiziona il tuo altoparlante Piezo sulla breadboard e collega il pin 7 al pin di alimentazione, quindi un resistore da 100 ohm a terra.

Passaggio 9: istruzioni di programmazione

1. Panoramica: questo progetto chiederà all'utente di impostare l'ora corrente all'accensione iniziale del display, l'ora corrente e l'ora per la quale è impostata la sveglia. I pulsanti collegati sopra verranno utilizzati per impostare ogni volta. Da sinistra a destra, sono impostati l'ora corrente, imposta il minuto corrente, imposta AM o PM attuali, imposta l'ora della sveglia, imposta i minuti della sveglia, imposta la sveglia AM o PM. L'ultimo pulsante viene utilizzato per silenziare l'allarme quando suona.

Passaggio 10:

2. La prima cosa che dobbiamo fare è inizializzare la nostra variabile che useremo.

// Inizializza le variabili da utilizzareint hour = 0; // Ora per l'ora corrente int minute = 0; //

Minuto per l'ora corrente int secondo = 0; // Secondo per l'ora corrente

int ora_a = 0; int // Ora per l'ora della sveglia

minuto_a = 0; // Minuto per l'ora della sveglia

bool am_pm = falso; // Attiva/disattiva flag AM/PM. Falso è AM, vero è PM

bool am_pm_a = falso; // Attiva/disattiva AM/PM per l'allarme. Falso è AM, vero è PM

int set_hr = 13; // Usa il pin 13 per impostare l'ora

int set_min = 12; // Usa il pin 12 per impostare i minuti int

set_am_pm = 11; // Usa il pin 11 per impostare am/pm

int set_hr_a = 10; // Usa il pin 10 per impostare l'ora per l'allarme int set_min_a = 9; // Usa il pin 9 per impostare i minuti per l'allarme int set_am_pm_a = 8; // Usa il pin 8 per impostare am/pm per la sveglia

int altoparlante = 7; // Pin da usare per speakerint quiet = 6; // Pin per fermare l'altoparlante

allarme bool = falso; // Contrassegna per attivare/disattivare per continuare ad allarmare

bool quietato = falso; // La bandiera che mostra il silenzio non è stata premuta

int cur_time = 0; // Variabile per l'ora corrente

int etime = 0; // Variabile per il tempo trascorso

Passaggio 11:

3. Successivamente, dobbiamo impostare lo schermo LCD e dire all'utente di impostare l'ora corrente. Poiché questo deve essere fatto solo una volta, lo faremo nella routine di installazione.

void setup() {

// Imposta lo schermo LCD

Serial.begin(9600); // Inizializza seriale a 9600 baud

Serial.write(17); // Accendi la retroilluminazione

Serial.write(24); // Accende il display, con il cursore e senza lampeggiare

Serial.write(12); // Cancella lo schermo

Serial.write(128); // Sposta il cursore nell'angolo in alto a sinistra // Imposta pinModes pinMode(set_hr, INGRESSO); 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(altoparlante, OUTPUT);

pinMode(quiet, INPUT);

// All'accensione iniziale, chiedi all'utente di impostare l'ora corrente. Serial.print("Imposta l'ora corrente"); ritardo (2000);

Serial.write(12);

printTimes();

cur_time = millis(); // Memorizza l'ora corrente}

Passaggio 12:

4. Quindi, nella routine del ciclo, teniamo traccia del tempo e leggiamo lo stato del pulsante per vedere se l'utente sta impostando uno dei tempi.

ciclo vuoto() {

// Tenere il tempo

tenere il tempo();

// Controlla se è il momento di svegliare!

if((hour == hour_a && minute == minute_a && !quieted) || alarm){tone(speaker, 2000, 500); // Invia un suono a 2000 Hz all'altoparlante per 500 ms

ritardo (500); // Ritardo 500 ms if(!alarm){ // Se l'allarme è disattivato, attivalo

}

}

// Se l'utente silenzia l'allarme premendo il pulsante quiet, interrompe l'allarme if(alarm && !quieted && digitalRead(quiet)){

allarme = falso;

calmato = vero; }

// Resetta l'allarme if(!alarm && quieted && minute != minute_a){ quieted = false;

}

// Controlla se i pin impostati vanno in alto e, in tal caso, incrementa il valore corrispondenteif(digitalRead(set_hr) && hour < 12){

ora++;

printTimes();

antirimbalzo();

}

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

printTimes();

antirimbalzo();

}

altro{}

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

minuto++; printTimes();

antirimbalzo();

}

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

printTimes();

antirimbalzo();

}

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

am_pm = falso;

printTimes();

antirimbalzo();

}

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

antirimbalzo();

}

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

ora_a++;

printTimes();

antirimbalzo();

}

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

printTimes();

antirimbalzo();

}

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

minuto_a++;

printTimes();

antirimbalzo();

}

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

printTimes();

antirimbalzo();

}

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

am_pm_a = falso;

printTimes();

antirimbalzo();

}

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

printTimes();

antirimbalzo();

}

altro{}

}

Passaggio 13:

5. Qui noterai un paio di subroutine che ho creato: debounce() e printTimes(). Debounce() viene utilizzato per assicurarci di leggere i pulsanti solo una volta. Poiché Arduino esegue la scansione migliaia di volte al secondo, potrebbe pensare che il pulsante sia stato premuto più volte quando intendevi leggerlo solo una volta. Debounce() bloccherà il programma fino al rilascio del pulsante. printTimes() aggiorna lo schermo LCD, ma poiché si trattava di diversi comandi, li ho digitati una volta e quindi posso chiamare la subroutine ogni volta che cambia il valore dell'ora.

// Mentre viene premuto uno qualsiasi dei pulsanti, rimanere in questa funzione quindi ritardare di 250 ms.

vuoto antirimbalzo(){

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

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

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

}

// Stampa i tempi aggiornati se ci sono modifiche

void printTimes(){

Serial.write(12);

Serial.print("Ora attuale:");

Serial.write(148);

if(ora < 10){

Serial.print("0");

}

Serial.print(ora);

Serial.print(":");

if(minuto < 10){

Serial.print("0");

}

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

if(secondo < 10){

Serial.print("0");

}

Serial.print(secondo);

se (am_pm){

Serial.print("PM");

}

altro{

Serial.print("AM");

}

Serial.write(168);

Serial.print("Allarme impostato per:");

Serial.write(188);

if(ora_a < 10){

Serial.print("0");

}

Serial.print(hour_a);

Serial.print(":");

if(minuto_a < 10){

Serial.print("0");

}

Serial.print(minuto_a);

if (am_pm_a){

Serial.print("PM");

}

altro{

Serial.print("AM");

}

}

// Incrementa i parametri temporali void

tenere il tempo(){

etime = millis() - cur_time;

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

secondo++;

cur_time = millis();

printTimes();

}

else if(etime >= 1000 && secondo == 59 && minuto < 59){ secondo = 0;

minuto++;

cur_time = millis();

printTimes();

}

else if(etime >= 1000 && secondo == 59 && minuto == 59 && ora < 12){

secondo = 0; minuto =

0; ora++; cur_time =

milli(); printTimes();

}

else if(etime >= 1000 && secondo == 59 && minuto == 59 && ora == 12){

secondo = 0; minuto =

0; ora = 1; am_pm =

!am PM;

cur_time = millis();

printTimes();

}

altro{}

}

Passaggio 14:

6. Questo è tutto!

Compila e carica e il gioco è fatto!

Consigliato: