Dans le blog d'aujourd'hui, nous combinons 3 produits: notre toujours populaire AZ-Delivery Nano V3, un Horloge temps réel DS3231, et un Affichage LED à 4 chiffres à 7 segments.
Celles-ci constituent une bonne base pour les projets dans lesquels le temps joue un rôle - indépendamment du fait que quelqu'un veuille mettre en œuvre une horloge coucou basée sur Arduino, un contrôle d'accès contrôlé par le temps ou une horloge avec des étiquettes RFID.
Dans le projet d'aujourd'hui, l'Arduino obtient l'heure de l'horloge en temps réel et l'affiche à l'écran. Chacun des modules ne nécessite que 4 connexions.
Nous câblons les composants comme suit:
AZ-Delivery Nano V3 |
DS3231 |
A5 |
SCL |
A4 |
SDA |
3V3 |
VCC |
GND |
GND |
AZ-Delivery Nano V3 |
Affichage à 4 chiffres et 7 segments |
D2 |
CLK |
D3 |
DIO |
+ 5V |
VCC |
GND |
GND |
Pour la programmation, nous utilisons la même bibliothèque que dans notre eBook pour l'affichage à 4 chiffres à 7 segments: TM1637Display.h.
Nous connectons l'horloge en temps réel via le bus I²C. L'horloge a l'adresse 0x68.
Nous avons besoin de la fonction bcdToDec pour convertir le code binaire que nous obtenons de l'horloge en temps réel en nombres décimaux.
#include <Arduino.h>
#include <TM1637Display.h> #include <Wire.h> #define RTC_I2C_ADDRESS 0x68 // Adresse I2C du RTC DS3231 #define CLK 2 // Broche Arduino D2 en CLK (RTC) #define DIO 3 // Ardiono Pin D3 en DIO (RTC) TM1637Display affichage(CLK, DIO); // uint8_t bcdToDec( uint8_t val ) { retour (uint8_t) ((val / 16 * 10) + (val % 16)); } int casser = 500; int heure,minute,seconde; nul configuration(){ Wire.commencer(); Série.commencer(9600); affichage.setBrightness(0x0a); } nul boucle(){ Wire.beginTransmission(RTC_I2C_ADDRESS); // Etablissement de la connexion à l'adresse 0x68 Wire.écrire(0); Wire.endTransmission(); Wire.requestFrom(RTC_I2C_ADDRESS, 7); seconde = bcdToDec(Wire.lire() & 0x7f); minute = bcdToDec(Wire.lire()); heure = bcdToDec(Wire.lire() & 0x3f); Série.imprimer(heure); Série.imprimer(":"); Série.imprimer(minute); Série.imprimer(":"); Série.println(seconde); affichage.showNumberDec(heure, vrai, 2, 0); affichage.showNumberDec(minute, vrai, 2, 2); retard(casser); }
Après avoir téléchargé le code, nous pouvons vérifier sur le moniteur série de l'IDE Arduino si l'heure est sortie toutes les demi-secondes.
Si tout est correctement connecté, l'heure actuelle apparaît sur l'affichage à 7 segments.
Nous avons ainsi créé la base de nouveaux projets. Que diriez-vous d'un écran plus grand? Capteurs de température et de pression atmosphérique pour une station météo? Ou un bouclier MP3 qui émet un «coucou» toutes les heures à l'heure?
Nous espérons que votre article de blog vous a inspiré aujourd'hui et nous attendons avec impatience vos commentaires. Jusqu'à la prochaine publication de AZ-Delivery, votre expert en microélectronique!
2 commentaires
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