Dans ce tutoriel, je vais vous montrer comment transformer une Arduino en horloge à l'aide d'un écran LCD 1602, d'un Arduino, d'une poignée de cavaliers et d'un module / puce Real Time Clock. Idéal comme accessoire pour votre bureau à la maison ou au travail.
Ce projet utilisera un certain nombre de câbles de démarrage dans un espace très restreint, prenez donc votre temps pour vérifier et revérifier vos emplacements afin de ne produire aucune fumée bleue magique..
Connectez l'écran LCD à l'Arduino, juste pour vérifier que tout fonctionne comme il se doit. Commencez par les câbles d’alimentation rouge et noir reliant l’Arduino à la carte d’affichage, puis alimentez l’écran LCD. Si votre écran n’a pas de rétro-éclairage, ignorez les broches 15 et 16 de l’écran LCD (les connecteurs les plus à droite)..
L'écran est basé sur la puce HD44780, une puce très polyvalente utilisée dans différentes tailles d'écran, allant de 16x1 à 40x2. Tous ces éléments fonctionneront correctement. Le seul ajustement mineur requis est de s’assurer que tout est correctement aligné dans le code, mais ceci est annoté pour le rendre facile à adapter à vos besoins..
Une fois l'écran câblé, vous pouvez connecter le module RTC. Différents modules peuvent avoir un ordre de broches différent, alors vérifiez bien avec votre module avant de passer à l'étape suivante..
Avant d'ajouter de l'énergie, il est préférable de vérifier le câblage en s'assurant que les câbles d'alimentation et de terre sont aux bons endroits..
Une fois que vous êtes heureux, connectez l'Arduino. Vous verrez une ligne de cases noires à l'écran. Si vous ne le faites pas, essayez d'ajuster le potentiomètre jusqu'à ce que quelque chose apparaisse.
Vous devez avoir l’IDE Arduino (la version 1.0.5 la plus récente au moment de la rédaction) est installée sur votre ordinateur. Sinon, visitez le site Web Arduino pour télécharger et installer.
Dans l'IDE Arduino, cliquez sur Fichier> Exemples> LiquidCrystal> HelloWorld. Une nouvelle fenêtre complète de code s'ouvrira. Cliquez sur Fichier et alors Télécharger. En moins d’une minute, l’écran ACL s’allumera, montrant Bonjour le monde et compter chaque seconde.
Vous avez un écran de travail.
Vous devrez indiquer à la puce RTC l'heure exacte. Comme la puce utilise une batterie pour compter, elle ne peut le faire qu’une fois qu’elle a le temps de commencer à compter.
En commençant par un nouvel écran Arduino, copiez et collez le code suivant, en faisant un peu défiler vers le bas pour changer l'heure à l'heure actuelle.
#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 octet decToBcd (octet val) return ((val / 10 * 16) + (val% 10)); void setDateDs1307 (seconde, // 0-59 minute, // 0-59 heure, // 1-23 octets dayOfWeek, // 1-7 1 = Lundi, 7 = octet soleil dayOfMonth, // 1- 28/29/30/31 mois d'octet, // année de 1 à 12 octets // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (seconde)); Wire.write (decToBcd (minute)); Wire.write (decToBcd (heure)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (mois)); Wire.write (decToBcd (année)); Wire.endTransmission (); void setup () octet par seconde, minute, heure, jour de la semaine, jour du mois, mois, année; Wire.begin (); pinMode (13, OUTPUT); // Modifiez ces valeurs en fonction de ce que vous souhaitez définir pour votre horloge. // Il est préférable d’ajouter 30 secondes à une minute pour permettre à votre ordinateur de compiler et de télécharger l’heure actuelle. // N'exécutez ce script qu'une seule fois, car le ré-exécuter écrasera l'heure définie dans la puce RTC! // Les heures sont au format 24 heures // Le jour de la semaine commence par le lundi = 1 et le dimanche = 7 // L'année est au format YY, utilisez uniquement les 2 derniers chiffres de l'année // // Une fois que vous avez exécuté le programme, le voyant de la broche 13 clignote pour indiquer que l'opération est terminée, NE PAS DÉBRANCHER OU RÉINITIALISER. // Il suffit de suivre le didacticiel et de télécharger le code LCD pour éviter d'écraser l'heure exacte avec cette fois encore. // seconde = 0; minute = 40; heure = 21; dayOfWeek = 3; dayOfMonth = 25; mois = 6; année = 14; setDateDs1307 (seconde, minute, heure, jour de la semaine, jour de la mois, mois, année); // * / void loop () digitalWrite (13, HIGH); // allume la LED (HIGH correspond au niveau de tension) delay (1000); // attend une seconde digitalWrite (13, LOW); // éteint la LED en faisant la tension LOW delay (1000);
Vous devez ajouter 30 secondes ou minutes supplémentaires pour tenir compte du temps de compilation et de téléchargement. Cliquez sur Télécharger envoyer ceci à l'Arduino. Vous ne devrez exécuter cette opération qu'une seule fois, mais si votre horloge avance ou recule d'une heure, ou si vous déplacez le fuseau horaire / le pays, vous devrez réexécuter l'esquisse de réglage de l'heure..
La dernière étape est l'esquisse réelle qui exécutera l'horloge. La seule modification à apporter est de définir la date à laquelle vous la liriez normalement. Le script actuel indique la date comme JJ / MM / 20YY, pour changer ce défilement jusqu'à la fin du code, j'ai marqué les 2 lignes qui peuvent être changées ainsi que l'écran
#include "Wire.h" #include#define DS1307_I2C_ADDRESS 0x68 LiquidCrystal lcd (12, 11, 5, 4, 3, 2); octet bcdToDec (octet val) return ((val / 16 * 10) + (val% 16)); void getDateDs1307 (octet * seconde, octet * minute, octet * heure, octet * jourOfWeek, octet * jourDeMois, octet * mois, octet * année) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS1307_I2C_ADDRESS, 7); * second = bcdToDec (Wire.read () & 0x7f); * minute = bcdToDec (Wire.read ()); * heure = bcdToDec (Wire.read () & 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * mois = bcdToDec (Wire.read ()); * année = bcdToDec (Wire.read ()); void setup () octet par seconde, minute, heure, jour de la semaine, jour du mois, mois, année; Wire.begin (); // MODIFIE SI VOUS UTILISEZ UN ÉCRAN LCD DIFFÉRENT // lcd.begin (16, 2); void loop () octet de seconde, minute, heure, jour de la semaine, jour de la mois, mois, année; Chaîne s, m, d, mth, h; getDateDs1307 (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year); si (deuxième < 10) s = "0" + String(second); else s = String(second); if (minute < 10) m = "0" + String(minute); else m = String(minute); h = String(hour); if (dayOfMonth < 10) d = "0" + String(dayOfMonth); else d = String(dayOfMonth); if (month < 10) mth = "0" + String(month); else mth = String(month); char* days[] = "NA", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" ; lcd.clear(); // JUMP TO CENTER ON A 16X2 SCREEN // lcd.setCursor(4,0); // CHANGE THE FOLLOWING TO SET THE DATE IN TO YOUR PREFERED ORDER // lcd.print(h + ":" + m + ":" + s); // NEXT LINE, 1 SPACE IN FROM THE LEFT // lcd.setCursor(1,1); // PREFIX THE 20 AS THE RTC CHIP ONLY USES 2 DIGITS FOR THE YEAR // lcd.print(String(days[dayOfWeek]) + " " + d + "/" + mth + "/20" + year); delay(1000); // Wait 1 second
Lorsque vous êtes satisfait de vos modifications, cliquez sur Télécharger. Votre écran va maintenant afficher la date et l'heure actuelles, même après avoir été débranché.
Trouvez une jolie boîte pour cacher l’Arduino et les fils, ajoutez une batterie ou branchez l’Arduino à un chargeur USB pour pouvoir (les chargeurs d’iPhone fonctionnent bien), et voilà, une fantastique petite horloge que vous avez fabriquée.
Vous aurez une brillante horloge maison pour votre bureau ou votre table de chevet qui ne nécessitera plus de réglage. Comme il est fabriqué avec un Arduino, et ayant 7 broches supplémentaires disponibles, vous pouvez ajouter un avertisseur sonore, des voyants ou des boutons pour ajouter facilement une alarme..
Développez encore plus en contrôlant le rétro-éclairage pour allumer et éteindre à des moments spécifiques. Pour ce faire, vous devez uniquement brancher le fil rouge le plus éloigné de l'écran LCD à une broche numérique et ajouter une vérification de l'heure dans le code pour définir la broche haute ou basse. Un challenge parfait.