In de blogpost van vandaag combineren we 3 producten: onze all-time popular AZ-Levering Nano V3A DS3231 Real-time Klok, en een viercijferig 7-segment LED-display.
Deze vormen een goede basis voor projecten waar de tijd een rol speelt - ongeacht of iemand een koekoeksklok wil realiseren op basis van Arduino, een tijdgecontroleerde toegangscontrole of een stempelklok met RFID-tags.
In het project van vandaag, de Arduino krijgt de tijd van de real-time klok en uitgangen op het display. Elk van de modules vereist slechts 4 aansluitingen.
We draad de componenten als volgt:
AZ-Levering Nano V3 |
DS3231 |
A5 |
Scl |
A4 |
Sda |
3V3 |
Vcc |
Gnd |
Gnd |
AZ-Levering Nano V3 |
4-cijferig7-segmentweergave |
D2 |
Clk |
D3 |
Dio |
+5V |
Vcc |
Gnd |
Gnd |
Voor de programmering gebruiken we dezelfde bibliotheek als in ons eBook voor het 4 Digit 7 Segment Display: TM1637Display.h.
We verbinden de real-time klok via de I2C bus. Het horloge is 0x68.
We hebben de bcdToDec-functie nodig om de binaire code die we krijgen van de real-time klok om te zetten in decimale getallen.
#include <Arduino.H>
#include <TM1637Beeldscherm.H> #include <Draad.H> #define RTC_I2C_ADDRESS 0x68 I2C-adres van de RTC DS3231 #define Clk 2 Arduino Pin D2 als CLK (RTC) #define Dio 3 Ardiono Pin D3 - DIO (RTC) TM1637Beeldscherm Weergeven(Clk, Dio); // uint8_t bcdToDec( uint8_t Val ) { Terug (uint8_t) ((Val / 16 * 10) + (Val % 16)); } Int Breken = 500; Int Uur,Minuut,Tweede; Void Setup(){ Draad.Beginnen(); Seriële.Beginnen(9600); Weergeven.setHelderheid(0x0a); } Void Lus(){ Draad.beginTransmissie(RTC_I2C_ADDRESS); Het vaststellen van de verbinding met het adres 0x68 Draad.Schrijven(0); Draad.eindTransmissie(); Draad.verzoekVan(RTC_I2C_ADDRESS, 7); Tweede = bcdToDec(Draad.Lezen() & 0x7f); Minuut = bcdToDec(Draad.Lezen()); Uur = bcdToDec(Draad.Lezen() & 0x3f); Seriële.Afdrukken(Uur); Seriële.Afdrukken(":"); Seriële.Afdrukken(Minuut); Seriële.Afdrukken(":"); Seriële.println(Tweede); Weergeven.showNumberDec(Uur, Waar, 2, 0); Weergeven.showNumberDec(Minuut, Waar, 2, 2); Vertraging(Breken); }
Na het uploaden van de code, kunnen we op de seriële monitor van de Arduino IDE controleren of de tijd elke halve seconde output is.
Als alles correct is aangesloten, wordt de huidige tijd weergegeven op het 7-segment display.
Op deze manier hebben we de basis gelegd voor verdere projecten. Wat dacht je van een groter scherm? Sensoren voor temperatuur- en luchtdruk voor een weerstation? Of een MP3-Shield die elk uur een "koekoek" geeft?
We hopen dat onze blogpost vandaag heeft u geïnspireerd en we kijken uit naar uw opmerkingen. Tot de volgende post van AZ-Delivery, uw expert in micro-elektronica!
2 Reacties
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