Utente:Fedy/Arduino
OROLOGIO CON ARDUINO
Il progetto che segue è pensato per visualizzare l'ora su un display, ed è stato realizzato mediante l'uso di:
- UN ARDUNO
- UNA BREADBOARD
- 2 PULSANTI
- UN MODULO RTC
-UN DISPLAY
- 2 RESISTENZE DA 10 KOHM
- DEI CAVETTI DI COLLEGAMENTO
DESRIZIONE DEL PROGETTO
Il progetto è realizzato in questo modo:
- è presente un modulo RTC che genera il tempo per arduino in maniera tale da ottenere un real time clock, mentre invece il display serve per visualizzare l'ora.
inoltre sono presenti 2 pulsanti che servono per regolare le ore ed in minuti, e sono gestiti dalla variabile int.
SCHEMA ELETTRICO
- è presente un display a segmenti con una propria libreria che permette di visualizzarer l'ora
- è presente un modulo rtc che fornisce l'ora ad arduino
- sono presenti anche 2 pulsanti che, gestiti tramite la funzione int, sono in grado di regolare l'ora e i minuti
SCHEMA DI MONTAGGIO
CODICE
//Definisco le librerie utilizzate per il progetto
#include <DS3231.h>
#include <Wire.h>
#include <TM1637Display.h>
//Imposto l'orologio
DS3231 Orologio;
//Imposto il display
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
//Dichiaro le variabili e le costanti
int Ore, Minuti, Secondi;
bool H, HH;
int B_Ore = HIGH;
int B_Minuti = HIGH;
void setup() {
Serial.begin(9600);
Wire.begin();
display.setBrightness(0x0f); //imposto la luninosità del display
pinMode(4, INPUT); //inserisco il pin 4 come ingresso
pinMode(5, INPUT); //inserisco il pin 5 come ingresso
}
void loop() {
//inserisco i valori delle ore, dei minuti e dei secondi, che vengono memorizzati nelle variabili
Ore = Orologio.getHour(H, HH);
Minuti = Orologio.getMinute();
Secondi = Orologio.getSecond();
Serial.print(Ore);
Serial.print(":");
Serial.print(Minuti);
Serial.print(":");
Serial.print(Secondi);
Serial.println("");
//variabile del tempo
int Tempo = ((Ore*100) + Minuti);
//Scrive sul display il valore del tempo
display.showNumberDecEx(Tempo, (0x80 >> 1), true,4,0);
//prima fase per il controllo dei pulsanti e del lampeggio dei due punti
for(int i=0; i<50; i++){
B_Ore = digitalRead(5);
B_Minuti = digitalRead(4);
if(B_Ore == HIGH || B_Minuti == HIGH){
delay(2);
}
else{
delay(10);
}
}
//Modifico i valori dei minuti o delle ore
B_Ore = digitalRead(5);
B_Minuti = digitalRead(4);
if(B_Ore == HIGH && B_Minuti == LOW){
if(Ore<24){Ore=Ore+1; Orologio.setHour(Ore);}
if(Ore>=24){Orologio.setHour(00);}
}
if(B_Minuti == HIGH && B_Ore == LOW){
if(Minuti<60){Minuti=Minuti+1; Orologio.setMinute(Minuti);}
if(Minuti>=60){Orologio.setMinute(00);}
}
//Scrive sul display il valore del tempo
display.showNumberDecEx(Tempo, (0x80 >> 2), true,4,0);
//Seconda fase per il controllo dei pulsanti e il lampeggio dei due punti.
for(int i=0; i<50; i++){
B_Ore = digitalRead(5);
B_Minuti = digitalRead(4);
if(B_Ore == HIGH || B_Minuti == HIGH){
delay(2);
}
else{
delay(10);
}
}
}
CONCLUSIONI
Lo scopo di questo progetto era quello di realizzare un orologio digitale con arduino, e per farlo ho utilizzato un modulo RTC in maniera tale da ottenere l'ora da visualizzare in un display a segmenti, il tutto regolato da 2 pulsanti gestiti dalla variabile int in grado di regolare le ore ed i minuti.
Per concludere il progetto è riuscito, rispettando lo scopo, e quindi arduino riesce a mostrare l'ora sul display.