Nel nostro contributo al blog di oggi, stiamo combinando tre prodotti: il nostro tempo di vita. AZ - Delivery Nano V3, uno orologio in tempo reale DS3231, e uno segmento a quattro cifre del LED LED a 7 caratteri.
Si tratta di una buona base per i progetti che hanno un ruolo da svolgere, indipendentemente dal fatto che qualcuno voglia realizzare un orologio cubico basato su Arduino, un controllo di accesso basato sul tempo, o un timbrato con tag RFID.
Nel nostro progetto di oggi, l'Arduino riceve l'ora dell'orologio in tempo reale, e li esci dal display. Ognuno dei moduli richiede solo 4 connessioni.
Stiamo cablando i componenti come segue:
AZ - Delivery Nano V3 |
DS3231 |
A5 |
SCL |
A4 |
SDA |
3V3 |
VCC |
GND |
GND |
AZ - Delivery Nano V3 |
4 Digit 7 Segmento di visualizzazione |
D2 |
CLK |
D3 |
VALUTAZIONE |
+ 5V |
VCC |
GND |
GND |
Per la programmazione, usiamo la stessa biblioteca del nostro eBook a 4 Digit 7 Segmento Display: TM1637Display.h.
L'orologio in tempo reale è connesso al bus IhC. L'orologio ha l'indirizzo di 0x68.
La funzione bcdToDic richiede che il codice binario sia convertita in numeri decimali dall'orologio in tempo reale.
" #include " <Arduino.h>
" #include " <TM1637Display.h> " #include " <Wire.h> " #define " RTC_I2C_ADDRESS 0x68 // I2C indirizzo di RTC DS3231 " #define " CLK 2 // Arduino Pin D2 come CLK (RTC) " #define " VALUTAZIONE 3 // ArdDIC Pin D3 come DIO (RTC) TM1637Display display(CLK, VALUTAZIONE); // uint8_t bcdToDic( uint8_t val ) { return (uint8_t) ((val / 16 * 10) + (val % 16)); } int pause = 500; int stoppe,minute,secondo; void Impostazione(){ Wire.begin(); Seriale.begin(9600); display.setBrightness(0x0a); } void loop(){ Wire.beginTransmission(RTC_I2C_ADDRESS); // Creare la connessione all'indirizzo 0x68 Wire.scrittura(0); Wire.endtransmission(); Wire.requestFrom(RTC_I2C_ADDRESS, 7); secondo = bcdToDic(Wire.read() & 0x7f); minute = bcdToDic(Wire.read()); stoppe = bcdToDic(Wire.read() & 0x3f); Seriale.print(stoppe); Seriale.print(":"); Seriale.print(minute); Seriale.print(":"); Seriale.println(secondo); display.showNumberDic(stoppe, true, 2, 0); display.showNumberDic(minute, true, 2, 2); delay(pause); }
Una volta caricato il codice, è possibile controllare il monitoraggio seriale dell'Arduino e verificare se ogni mezzo secondo viene speso il tempo.
Quando tutto è collegato correttamente, l'ora corrente viene visualizzata sul segmento 7.
In tal modo abbiamo creato la base per altri progetti. Che ne dici di un display più grande? Sensori di temperatura e pressione atmosferica per una stazione meteorologica? O forse un MP3 di Shield che da' un "furgone" a ogni ora?
Ci auguriamo che lei abbia ispirato il nostro contributo al blog di oggi, e attendiamo con ansia i vostri commenti. Fino al prossimo contributo di AZ - Delivery, il suo esperto di microelettronica!
2 commenti
udo
hallo,
durch diesen code stürzt ständig meine arduino ide ab.
truefirewolf
Hallo,
zunächst hatte ich mich gefreut mit so wenigen Bauteilen und kurzem Code eine Digitaluhr zu bauen.
Bei genauerer Betrachtung stellt man allerdings fest, dass man die Uhrzeit so nicht einstellen kann, das gibt die Software nicht her.
Es wäre ein außerordentlicher Zufall, wenn die Uhrzeit beim Einschalten genau stimmen würde. Man benötigt ein anderes Programm wie z.B. von der Seite: http://shelvin.de/die-uhrzeit-des-rtc3231-vom-arduino-einstellen/
Betreiben kann man die so eingestellte Uhr dann mit dem oben angegeben Programm. Da die Batterie Jahre halten soll, muss o.g. Prozedur eben auch nur bei Batteriewechsel durchgeführt werden.
truefirewolf