Horloge LED Arduino RTC
Composants et fournitures
| × | 1 | ||||
| × | 1 | ||||
| × | 15 | ||||
| × | 15 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 190 | ||||
| × | 10 | ||||
| × | 12 | ||||
| × | 4 | ||||
| × | 1 |
Outils et machines nécessaires
| ||||
| ||||
|
À propos de ce projet
Vous devez d'abord télécharger les bibliothèques suivantes (le lien est donné à la fin de cette page) 1. Fil.h
2. RTClib.hListe des pièces
Regardez la vidéo
Ceci est le module d'horloge RTC
Voici le circuit Arduino
Connexions de câblage RTC
Commutateurs RTC
Identifier l'anode et la cathode
Schéma de circuit (ANODE COMMUN)
SI VOUS UTILISEZ UNE LED CATHODE COMMUNE, FAITES LES CHANGEMENTS COMME SUIT
ALIMENTATION
Code
- CODE d'horloge LED
CODE d'horloge LEDArduino
Téléchargez ce code et téléchargez sur le projet/* Affichage à 4 chiffres et 7 segments :http://www.sparkfun.com/products/9483 Fiche technique :http://www.sparkfun.com/datasheets/Components/LED/ 7-Segment/YSD-439AR6B-35.pdf */// connexion modifiée par niq_ro depuis http://nicuflorica.blogspot.com// dataseet :http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298ea2655/KW4 -563XSA.pdf// Code modifié par BMIAK Basnayaka// http://www.setnfix.comint digit1 =11; int chiffre2 =10;int chiffre3 =9; int digit4 =6;int digit5 =5; int digit6 =3 ; //Mappage des broches d'Arduino vers l'ATmega DIP28 si vous en avez besoin//http://www.arduino.cc/en/Hacking/PinMappingint segA =0; //Afficher la broche 11int segB =1 ; //Afficher la broche 7int segC =2; //Afficher la broche 4int segD =4; //Afficher la broche 2int segE =7; //Afficher la broche 1int segF =8; //Afficher la broche 10int segG =12 ; //Afficher la broche 5int segDP =13 ; // Affichage de la broche 3#include#include "RTClib.h"RTC_DS1307 RTC ;// Fonctions de date et d'heure utilisant un DS1307 RTC connecté via I2C et Wire lib// sketck original de http://learn.adafruit .com/ds1307-real-time-clock-breakout-board-kit/// ajouter une partie avec SQW=1Hz à partir de http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the- i2c-bus /// ajouter une partie avec réglage manuel http://www.bristolwatch.com/arduino/arduino_ds1307.htmbyte SW0 =A0;byte SW1 =A2;byte SW2 =A1;byte SWT =A3;int Adhr=0; int Admnt=0;int D =0;int Z =0;// utiliser pour hexa dans la conversion zecimallong zh, uh, minerai;long zm, um, miniti;void setup() { //Serial.begin(57600); Fil.begin(); RTC.begin(); // RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));// si vous avez besoin de régler l'horloge... il suffit de supprimer // de la ligne au-dessus de ceci// le code de partie pour faire clignoter LEDWire.beginTransmission (0x68);Wire.write(0x07); // déplace le pointeur vers l'adresse SQW // Wire.write (0x00); // désactive la broche SQW Wire.write (0x10); // envoie 0x10 (hex) 00010000 (binaire) au registre de contrôle - active l'onde carrée à 1 Hz // Wire.write (0x13); // envoie 0x13 (hex) 00010011 (binaire) 32kHzWire.endTransmission(); pinMode(segA, SORTIE); pinMode(segB, SORTIE); pinMode(segC, SORTIE); pinMode(segD, SORTIE); pinMode(segE, SORTIE); pinMode(segF, SORTIE); pinMode(segG, SORTIE); pinMode(segDP, SORTIE); pinMode(chiffre1, SORTIE); pinMode(chiffre2, SORTIE); pinMode(chiffre3, SORTIE); pinMode(chiffre4, SORTIE); pinMode(chiffre5, SORTIE); pinMode(digit6, OUTPUT);//Serial.begin(9600);pinMode(SW0, INPUT); // NON. bouton poussoir switchpinMode (SW1, INPUT); // NON. bouton poussoir switchpinMode (SW2, INPUT); // NON. bouton poussoir switchpinMode (SWT, INPUT); // NON. interrupteur à bouton-poussoirdigitalWrite(SW0, HIGH); // tire sur digitalWrite(SW1, HIGH);digitalWrite(SW2, HIGH);digitalWrite(segDP, LOW);}void loop() { DateTime now =RTC.now(); longue HR =now.hour()*1000; timp long =(HR*10)+now.minute()*100+now.second(); Adhr =maintenant.heure(); Admnt=now.minute();int DIM =0;if (timp> =250000)timp=timp-240000;//---------------------- ------------------//12/24 heures merde //--------- -----------------------------------------------------------si (timp <130000 ){digitalWrite(segDP, LOW);}if (digitalRead(SWT)==0){delay(300); if (D ==0) { D =1;delay(200);} else{D =0;}}if (D ==0){ if (timp> =130000){timp=timp-120000;digitalWrite( segDP, HIGH);}}if (timp> =130000){ digitalWrite(segDP, LOW);}if ((D==1)&(timp <130000))digitalWrite(segDP, LOW);//--- -------------------------------------------------- - //int timp =(now.minute(), DEC);// displayNumber(12); // c'est le nombre à afficher pour (int i =100; i>0; i--) { if (timp> =100000) displayNumber01(timp); else displayNumber02(timp); } for(int i =100; i>0; i--) { if (timp> =100000) displayNumber03(timp); else displayNumber04(timp); } for(int i =100; i>0; i--) { if (timp> =100000) displayNumber05(timp); else displayNumber06(timp); } if (digitalRead(SW0)==0){delay(100);Z=1; régler le temps(); }// maintenez le commutateur pour définir l'heure} void set_time() { byte minutes1 =0; octet heures1 =0 ; minutes d'octet =0 ; octet heures =0 ; heures=Adhr; minutes=Admnt; si ((heures &0x0f)> 9) heures =heures + 6 ; si (heures> 0x24) heures =1 ; // Mid night 12.00 s'affichera comme 12:00 (avec la LED PM allumée) ou 24:00 //si (heures> 0x24) heures =1 ; // Mid night 12.00 affichera 0:00 si ((minutes &0x0f)> 9) minutes =minutes + 6; si (minutes> 0x59) minutes =0 ; while (!(Z==0)){ // l'interrupteur horaire réglé doit être relâché pour quitter int TST =digitalRead(SW2); while (TST==0) // set hours { hours++; // conversion de l'hexa en zecimal :zh =hours / 16; euh =heures - 16 * zh; minerai =10 * zh + euh; zm =minutes/16 ; um =minutes - 16 * zm; miniti =10 * zm + um; si ((heures &0x0f)> 9) heures =heures + 6 ; si (heures> 0x24) heures =1 ; // Mid night 12.00 s'affichera comme 12:00 (avec la LED PM allumée) ou 24:00 //si (heures> 0x24) heures =1 ; // Mid night 12.00 s'affichera comme 0:00 if (heures <=9) delay(1); for(int i =400; i>0; i--) { displayNumber01(ore*10000+miniti*100); } TST =lecture numérique(SW2) ; } while (!(digitalRead(SW1))) // set minutes { minutes++; // conversion de l'hexa en zecimal :zh =hours / 16; euh =heures - 16 * zh; minerai =10 * zh + euh; zm =minutes/16 ; um =minutes - 16 * zm; miniti =10 * zm + um; for(int i =400; i>0; i--) { displayNumber01(ore*10000+miniti*100); } si ((minutes &0x0f)> 9) minutes =minutes + 6; si (minutes> 0x59) minutes =0 ; si (minutes>=9) délai(1) ; } Wire.beginTransmission (0x68); // activer DS1307 Wire.write(0); // par où commencer Wire.write(0x00); //secondes Wire.write(minutes); //minutes Wire.write(0x80 | heures); //heures (24 heures) Wire.write(0x06); // Jour 01-07 Wire.write(0x01); // Date 0-31 Wire.write(0x05); // mois 0-12 Wire.write(0x09); // Année 00-99 Wire.write(0x10); // Control 0x10 produit une onde carrée de 1 HZ sur la broche 7. Wire.endTransmission(); // conversion de l'hexa en zecimal :zh =hours / 16; euh =heures - 16 * zh; minerai =10 * zh + euh; zm =minutes/16 ; um =minutes - 16 * zm; miniti =10 * zm + um; for(int i =400; i>0; i--) { displayNumber01(ore*10000+miniti*100); }retard (100); //Serial.print(digitalRead(SW0));if (digitalRead(SW0)==0) Z =0; retard (300); }//Serial.print(SW2);}void displayNumber01(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //Activer un chiffre pour un court laps de temps switch(chiffre) { cas 1 :digitalWrite(chiffre1, DIGIT_ON); Pause; cas 2:digitalWrite(digit2, DIGIT_ON); //digitalWrite(segDP, LOW); Pause; cas 3 :digitalWrite(digit3, DIGIT_ON); Pause; cas 4:digitalWrite(digit4, DIGIT_ON); Pause; cas 5:digitalWrite(digit5, DIGIT_ON); Pause; cas 6 :digitalWrite(digit6, DIGIT_ON); Pause; } lightNumber(àAfficher % 10); àAfficher /=10; delayMicroseconds(DISPLAY_BRIGHTNESS); //Désactiver tous les segments lightNumber(10) ; //Désactiver tous les chiffres digitalWrite(digit1, DIGIT_OFF); digitalWrite(chiffre2, CHIFFRE_OFF); digitalWrite(chiffre3, CHIFFRE_OFF); digitalWrite(chiffre4, DIGIT_OFF); digitalWrite(chiffre5, CHIFFRE_OFF); digitalWrite(chiffre6, DIGIT_OFF);}} void displayNumber02(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //Activer un chiffre pour un court laps de temps switch(chiffre) { case 1 :lightNumber(10); Pause; cas 2:digitalWrite(digit2, DIGIT_ON); //digitalWrite(segDP, LOW); Pause; cas 3 :digitalWrite(digit3, DIGIT_ON); Pause; cas 4:digitalWrite(digit4, DIGIT_ON); Pause; cas 5:digitalWrite(digit5, DIGIT_ON); Pause; cas 6 :digitalWrite(digit6, DIGIT_ON); Pause; } lightNumber(àAfficher % 10); àAfficher /=10; delayMicroseconds(DISPLAY_BRIGHTNESS); //Désactiver tous les segments lightNumber(10) ; //Désactiver tous les chiffres digitalWrite(digit1, DIGIT_OFF); digitalWrite(chiffre2, CHIFFRE_OFF); digitalWrite(chiffre3, CHIFFRE_OFF); digitalWrite(chiffre4, DIGIT_OFF); digitalWrite(chiffre5, CHIFFRE_OFF); digitalWrite(chiffre6, DIGIT_OFF);}} void displayNumber03(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //Activer un chiffre pour un court laps de temps switch(chiffre) { cas 1 :digitalWrite(chiffre1, DIGIT_ON); Pause; cas 2:digitalWrite(digit2, DIGIT_ON); Pause; cas 3 :digitalWrite(digit3, DIGIT_ON); Pause; cas 4:digitalWrite(digit4, DIGIT_ON); Pause; cas 5:digitalWrite(digit5, DIGIT_ON); Pause; cas 6 :digitalWrite(digit6, DIGIT_ON); Pause; } lightNumber(àAfficher % 10); àAfficher /=10; delayMicroseconds(DISPLAY_BRIGHTNESS); //Désactiver tous les segments lightNumber(10) ; //Désactiver tous les chiffres digitalWrite(digit1, DIGIT_OFF); digitalWrite(chiffre2, CHIFFRE_OFF); digitalWrite(chiffre3, CHIFFRE_OFF); digitalWrite(chiffre4, DIGIT_OFF); digitalWrite(chiffre5, CHIFFRE_OFF); digitalWrite(chiffre6, DIGIT_OFF);}} void displayNumber04(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //Activer un chiffre pour un court laps de temps switch(chiffre) { case 1 :lightNumber(10); Pause; cas 2:digitalWrite(digit2, DIGIT_ON); Pause; cas 3 :digitalWrite(digit3, DIGIT_ON); Pause; cas 4:digitalWrite(digit4, DIGIT_ON); Pause; cas 5:digitalWrite(digit5, DIGIT_ON); Pause; cas 6 :digitalWrite(digit6, DIGIT_ON); Pause; } lightNumber(àAfficher % 10); àAfficher /=10; delayMicroseconds(DISPLAY_BRIGHTNESS); //Désactiver tous les segments lightNumber(10) ; //Désactiver tous les chiffres digitalWrite(digit1, DIGIT_OFF); digitalWrite(chiffre2, CHIFFRE_OFF); digitalWrite(chiffre3, CHIFFRE_OFF); digitalWrite(chiffre4, DIGIT_OFF); digitalWrite(chiffre5, CHIFFRE_OFF); digitalWrite(chiffre6, DIGIT_OFF);}} void displayNumber05(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //Activer un chiffre pour un court laps de temps switch(chiffre) { cas 1 :digitalWrite(chiffre1, DIGIT_ON); Pause; cas 2:digitalWrite(digit2, DIGIT_ON); Pause; cas 3 :digitalWrite(digit3, DIGIT_ON); Pause; cas 4:digitalWrite(digit4, DIGIT_ON); Pause; cas 5:digitalWrite(digit5, DIGIT_ON); Pause; cas 6 :digitalWrite(digit6, DIGIT_ON); Pause; } lightNumber(àAfficher % 10); àAfficher /=10; delayMicroseconds(DISPLAY_BRIGHTNESS); //Désactiver tous les segments lightNumber(10) ; //Désactiver tous les chiffres digitalWrite(digit1, DIGIT_OFF); digitalWrite(chiffre2, CHIFFRE_OFF); digitalWrite(chiffre3, CHIFFRE_OFF); digitalWrite(chiffre4, DIGIT_OFF); digitalWrite(chiffre5, CHIFFRE_OFF); digitalWrite(chiffre6, DIGIT_OFF);}} void displayNumber06(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //Activer un chiffre pour un court laps de temps switch(chiffre) { cas 1 ://digitalWrite(chiffre1, DIGIT_ON); Pause; cas 2:digitalWrite(digit2, DIGIT_ON); Pause; cas 3 :digitalWrite(digit3, DIGIT_ON); Pause; cas 4:digitalWrite(digit4, DIGIT_ON); Pause; cas 5:digitalWrite(digit5, DIGIT_ON); Pause; cas 6 :digitalWrite(digit6, DIGIT_ON); Pause; } lightNumber(àAfficher % 10); àAfficher /=10; delayMicroseconds(DISPLAY_BRIGHTNESS); //Désactiver tous les segments lightNumber(10) ; //Désactiver tous les chiffres digitalWrite(digit1, DIGIT_OFF); digitalWrite(chiffre2, CHIFFRE_OFF); digitalWrite(chiffre3, CHIFFRE_OFF); digitalWrite(chiffre4, DIGIT_OFF); digitalWrite(chiffre5, CHIFFRE_OFF); digitalWrite(digit6, DIGIT_OFF);}} //Donc un nombre, active ces segments//Si nombre ==10, puis éteint numbervoid lightNumber(int numberToDisplay) {//Common Anode ********* **************#define SEGMENT_ON HIGH#define SEGMENT_OFF LOW/* Common Cathode ***************** #define SEGMENT_ON LOW # définir SEGMENT_OFF HIGH*/ switch (numberToDisplay){ case 0:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_OFF); Pause; cas 1 :digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); Pause; cas 2 :digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); Pause; cas 3 :digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); Pause; cas 4:digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); Pause; cas 5 :digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); Pause; cas 6 :digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); Pause; cas 7 :digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); Pause; cas 8 :digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); Pause; cas 9 :digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); Pause; // tous les segments sont ON case 10 :digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); Pause; }// Fin du codage, BUDHUSARANAI, Bonne chance. }
Schémas
C'est le câblage du SSD avec LEDProcessus de fabrication
- horloge de vision Arduino pov
- Horloge de mots simple (Arduino)
- Oscilloscope Arduino 20 kHz simple bricolage sur écran LCD Nokia 5110
- horloge maîtresse
- Stores intelligents
- Horloge de mots italienne
- Arduino avec Bluetooth pour contrôler une LED !
- Arduino quadrupède
- Une entrée analogique isolée pour Arduino