Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Réveil simple avec DS1302 RTC

Composants et fournitures

Horloge en temps réel (RTC)
× 1
Sonnerie
× 1
Adafruit Standard LCD - 16x2 Blanc sur Bleu
× 1
Arduino UNO
× 1

À propos de ce projet

Bonjour à tous, dans ce projet, nous allons essayer de créer un réveil simple avec la carte Arduino UNO. Ce projet est un mélange de différents modules que j'utilisais auparavant, si vous êtes bloqué sur quelque chose, vous pouvez consulter le site Web pour le didacticiel du module, car c'est comme cela que je travaille habituellement :faites les choses séparément, puis commencez à mixer. :D

Pour ce projet, nous aurons besoin de :

  • Carte Arduino UNO, ou vous pouvez utiliser ce qui vous convient :
  • Module RTC DS1302 :
  • Module clavier matriciel 4*4 :
  • Écran LCD I2C :
  • Module buzzer ou buzzer à 2 broches :

Au cas où vous seriez bloqué sur quelque chose, vous pouvez consulter ces tutoriels précédents sur les modules ci-dessus :

Comment configurer le module DS1302 RTC avec clavier + Arduino + LCD

Comment utiliser simplement le module RTC DS1302 avec la carte Arduino et l'écran LCD

Arduino LCD I2C utilisation simple et écriture directe depuis le moniteur sérieArduino LCD I2C utilisation simple et écriture directe depuis le moniteur série

Arduino uno + matrice de clavier 4×4 + écran LCD i2c

Comment utiliser un haut-parleur buzzer/piezo avec Arduino

Câblage :

Bibliothèques et code :

Bibliothèque LCD i2c Vous pouvez choisir cette option ou télécharger la vôtre

Bibliothèque de claviers Ou vous pouvez la télécharger depuis Arduino IDE

Bibliothèque RTC DS1302 virtuabotix

Code : 

Télécharger le code

Le fonctionnement du code est assez simple, après avoir câblé le module, vous pouvez appuyer sur « * » pour régler l'heure et la date sur le DS1302 RTC, l'écran affichera ensuite le jour et l'heure actuels si vous souhaitez régler l'alarme, vous appuyez sur « A » et vous pouvez régler les heures et les minutes, et vous pouvez les désactiver en appuyant sur « B » avant l'heure ou en appuyant sur n'importe quel bouton pendant la sonnerie.

J'espère que vous l'aimez, n'importe quel problème, vous pouvez me contacter.

Code

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.inoArduino
Fonctionne avec UNO + RTC DS1302 + LCD i2c + clavier 4x4
(Modifications majeures apportées le 04/12/18 pour résoudre certains problèmes)//Ce code est à utiliser avec le module DS1302 RTC + 4*4 Clavier + LCD i2c + Arduino + Buzzer//Après avoir câblé les modules, l'écran LCD afficher la date et l'heure par défaut ou celles définies avant // L'objectif de ce projet est que vous pouvez définir le module RTC à partir du clavier, et assurez-vous qu'il restera stocké // Ensuite, affichez-le à l'écran et après vous pouvez définir votre alarm.//Reportez-vous à Surtrtech.com ou à la chaîne youtube SurtrTech pour plus d'informations#include //Bibliothèques nécessaires#include #include #include #define I2C_ADDR 0x27 //LCD i2c stuff#define BACKLIGHT_PIN 3#define En_pin 2#define Rw_pin 1#define Rs_pin 0#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7LiquidCrystal_I2C_pin4_AD,I2C lcd,I2C lcd, ,D5_pin,D6_pin,D7_pin);virtuabotixRTC myRTC(2, 3, 4); //Câblage du RTC (CLK,DAT,RST) //Si vous modifiez le câblage, changez également les broches ici const byte numRows=4; //nombre de lignes sur le clavierconst byte numCols=4; //nombre de colonnes sur le clavier//keymap définit la touche enfoncée en fonction de la ligne et des colonnes comme cela apparaît sur le keymap du clavierchar[numRows][numCols]={{'1', '2', '3', ' A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'},{'*', '0', ' #', 'D'}};byte rowPins[numRows] ={12,11,10,9}; //Lignes 0 à 3 //si vous modifiez vos broches, vous devez modifier cet octet colPins[numCols]={8,7,6,5} ; //Colonnes 0 à 3int i1,i2,i3,i4;char c1,c2,c3,c4;char keypressed,keypressedx;int A_hour=NULL;int A_minute=NULL;int AlarmIsActive=NULL;int buzzer =13;Keypad myKeypad =Clavier (makeKeymap (keymap), rowPins, colPins, numRows, numCols); void setup() { Serial.begin (9600); lcd.begin (16,2); // Initialiser l'écran LCD lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); }void loop() { while(keypressed ==NO_KEY){ //Tant qu'aucune touche n'est enfoncée, nous continuons à afficher la date et l'heure, je suis obligé d'effacer l'écran à chaque fois pour que les chiffres ne soient pas confondus // Et je devrais ajouter ce petit délai pour que l'écran s'affiche correctement, sinon cela n'a pas fonctionné pour moi keypressed =myKeypad.getKey(); lcd.clear(); //Ici, après avoir effacé l'écran LCD, nous prenons le temps du module et l'imprimons à l'écran avec les fonctions LCD habituelles myRTC.updateTime(); if(myRTC.hours==A_hour &&myRTC.minutes==A_minute &&AlarmIsActive==1 &&myRTC.seconds>=0 &&myRTC.seconds <=2){ while(keypressedx ==NO_KEY){ tone(buzzer, 1000); //Vous pouvez modifier la tonalité ou créer votre propre délai de son (100); tonalité (buzzer, 2000); retard (100); lcd.clear(); lcd.print("Lève-toi !!!"); //Message à afficher lorsque l'alarme sonne keypressedx =myKeypad.getKey(); } } keypressedx =NO_KEY; pas de tonalité (buzzer); lcd.setCursor(0,0); lcd.print(myRTC.dayofmonth); lcd.print("/"); lcd.print(myRTC.month); lcd.print("/"); lcd.print(myRTC.year); lcd.setCursor(0,1) ; lcd.print(myRTC.hours); lcd.print(":"); lcd.print(myRTC.minutes); lcd.print(":"); lcd.print(myRTC.seconds); retard (100); } if (keypressed =='*') //Comme nous vérifions à chaque fois la touche enfoncée, nous ne procédons à la configuration que si nous appuyons sur "*" { lcd.clear(); lcd.print("Configuration"); retard(1000); lcd.clear(); lcd.print("Année de configuration"); //Vous pouvez donc comprendre comment cela fonctionne, d'abord il nous montre "setup" puis il imprime "setup year" et maintenant vous pouvez écrire votre année normalement (2-0-1-8) //Il passe automatiquement à la configuration du mois... jusqu'à ce que ce soit fini //Les touches du clavier sont toutes considérées comme des caractères (c) donc nous devrions les convertir en entier c'est ce que j'ai fait puis nous les stockons (i) //Nous faisons des calculs et nous obtenons l'année, mois... comme int pour qu'on puisse les injecter dans le RTC sinon il ne sera pas compilé //Les mois comme avril il faut écrire 04, 03 pour mars... sinon il ne passera pas au paramètre suivant //Le RTC virtuabotix la bibliothèque est déjà configurée pour ne pas accepter les heures et les dates étranges (45/17/1990) (58:90:70), et oui les anciennes dates sont considérées comme des erreurs char keypressed2 =myKeypad.waitForKey(); if (keypressed2 !=NO_KEY &&keypressed2 !='*' &&keypressed2 !='#' &&keypressed2 !='A' &&keypressed2 !='B' &&keypressed2 !='C' &&keypressed2 !='D' ) { c1 =touche enfoncée2 ; lcd.setCursor(0, 1); lcd.print(c1) ; } car keypressed3 =myKeypad.waitForKey(); if (keypressed3 !=NO_KEY &&keypressed3 !='*' &&keypressed3 !='#' &&keypressed3 !='A' &&keypressed3 !='B' &&keypressed3 !='C' &&keypressed3 !='D' ) { c2 =touche enfoncée3 ; lcd.setCursor(1, 1); lcd.print(c2) ; } car keypressed4 =myKeypad.waitForKey(); if (keypressed4 !=NO_KEY &&keypressed4 !='*' &&keypressed4 !='#' &&keypressed4 !='A' &&keypressed4 !='B' &&keypressed4 !='C' &&keypressed4 !='D' ) { c3 =touche enfoncée4 ; lcd.setCursor(2, 1); lcd.print(c3) ; } car keypressed5 =myKeypad.waitForKey(); if (keypressed5 !=NO_KEY &&keypressed5 !='*' &&keypressed5 !='#' &&keypressed5 !='A' &&keypressed5 !='B' &&keypressed5 !='C' &&keypressed5 !='D' ) { c4 =touche enfoncée5 ; lcd.setCursor(3, 1); lcd.print(c4) ; } i1=(c1-48)*1000; // les touches enfoncées sont stockées dans des caractères que je convertis en int puis j'ai effectué une multiplication pour obtenir le code sous la forme d'un int de xxxx i2=(c2-48)*100 ; i3=(c3-48)*10; i4=c4-48 ; int N_année=i1+i2+i3+i4 ; retard (500); lcd.clear(); lcd.print("Mois d'installation");///////////////////////////////////// /////////////////////// car keypressed6 =myKeypad.waitForKey(); // ici tous les programmes sont arrêtés jusqu'à ce que vous entriez les quatre chiffres puis il est comparé au code ci-dessus si (touche pressée6 !=NO_KEY &&touche pressée6 !='*' &&touche pressée6 !='#' &&touche pressée6 !='A' &&touche pressée6 !='B' &&keypressed6 !='C' &&keypressed6 !='D' ) { c1 =keypressed6; lcd.setCursor(0, 1); lcd.print(c1) ; } car keypressed7 =myKeypad.waitForKey(); if (keypressed7 !=NO_KEY &&keypressed7 !='*' &&keypressed7 !='#' &&keypressed7 !='A' &&keypressed7 !='B' &&keypressed7 !='C' &&keypressed7 !='D' ) { c2 =touche enfoncée7 ; lcd.setCursor(1, 1); lcd.print(c2) ; } i1=(c1-48)*10; i2=c2-48 ; entier N_mois=i1+i2 ; retard (500); lcd.clear(); lcd.print("Jour d'installation"); ////////////////////////////////////////////////////////////// ////////////// car keypressed8 =myKeypad.waitForKey(); // ici tous les programmes sont arrêtés jusqu'à ce que vous entriez les quatre chiffres puis il est comparé au code ci-dessus si (touche pressée8 !=NO_KEY &&touche pressée8 !='*' &&touche pressée8 !='#' &&touche pressée8 !='A' &&touche pressée8 !='B' &&keypressed8 !='C' &&keypressed8 !='D' ) { c1 =keypressed8; lcd.setCursor(0, 1); lcd.print(c1) ; } car keypressed9 =myKeypad.waitForKey(); if (keypressed9 !=NO_KEY &&keypressed9 !='*' &&keypressed9 !='#' &&keypressed9 !='A' &&keypressed9 !='B' &&keypressed9 !='C' &&keypressed9 !='D' ) { c2 =touche enfoncée9 ; lcd.setCursor(1, 1); lcd.print(c2) ; } i1=(c1-48)*10; i2=c2-48 ; int N_jour=i1+i2 ; retard (500); lcd.clear(); lcd.print("Heure d'installation");///////////////////////////////////// /////////////////////////////////////////:car keypressed10 =myKeypad. waitForKey(); // ici tous les programmes sont arrêtés jusqu'à ce que vous entriez les quatre chiffres puis il est comparé au code ci-dessus si (touche pressée10 !=NO_KEY &&touche pressée10 !='*' &&touche pressée10 !='#' &&touche pressée10 !='A' &&touche pressée10 !='B' &&keypressed10 !='C' &&keypressed10 !='D' ) { c1 =keypressed10; lcd.setCursor(0, 1); lcd.print(c1) ; } car keypressed11 =myKeypad.waitForKey(); if (keypressed11 !=NO_KEY &&keypressed11 !='*' &&keypressed11 !='#' &&keypressed11 !='A' &&keypressed11 !='B' &&keypressed11 !='C' &&keypressed11 !='D' ) { c2 =touche enfoncée11 ; lcd.setCursor(1, 1); lcd.print(c2) ; } i1=(c1-48)*10; i2=c2-48 ; entier N_heure=i1+i2 ; retard (500); lcd.clear(); lcd.print("minutes d'installation");///////////////////////////////////// /////////////////////////////////////////:car keypressed12 =myKeypad. waitForKey(); // ici, tous les programmes sont arrêtés jusqu'à ce que vous entriez les quatre chiffres, puis il est comparé au code ci-dessus si (keypressed12 !=NO_KEY &&keypressed12 !='*' &&keypressed12 !='#' &&keypressed12 !='A' &&keypressed12 !='B' &&keypressed12 !='C' &&keypressed12 !='D' ) { c1 =keypressed12; lcd.setCursor(0, 1); lcd.print(c1) ; } car keypressed13 =myKeypad.waitForKey(); if (keypressed13 !=NO_KEY &&keypressed13 !='*' &&keypressed13 !='#' &&keypressed13 !='A' &&keypressed13 !='B' &&keypressed13 !='C' &&keypressed13 !='D' ) { c2 =touche enfoncée13 ; lcd.setCursor(1, 1); lcd.print(c2) ; } i1=(c1-48)*10; i2=c2-48 ; entier N_minutes=i1+i2 ; retard (500); lcd.clear(); myRTC.setDS1302Time(22, N_minutes, N_hour, 1, N_day, N_month, N_year); //une fois que nous avons fini de régler la date et l'heure, nous transférons les valeurs au module RTC //le 22 représente les secondes, vous pouvez également ajouter une configuration pour cela si vous le souhaitez //le 1 représente le jour de la semaine, comme longtemps je ne l'affiche pas à l'écran je ne le change pas keypressed=NO_KEY; //la touche "*" est stockée dans "touche enfoncée" donc je supprime cette valeur sinon elle me remettra dans la configuration }/////////////////// ////////////////////Réglage alarme///////////////////////// ////// if (touche enfoncée =='A'){ lcd.clear(); lcd.print(" Configuration de l'alarme "); retard(1000); lcd.clear(); lcd.print("Définir l'heure de l'alarme"); car keypressed14 =myKeypad.waitForKey(); // ici tous les programmes sont arrêtés jusqu'à ce que vous entriez les quatre chiffres puis il est comparé au code ci-dessus si (touche pressée14 !=NO_KEY &&touche pressée14 !='*' &&touche pressée14 !='#' &&touche pressée14 !='A' &&touche pressée14 !='B' &&keypressed14 !='C' &&keypressed14 !='D' ) { c1 =keypressed14; lcd.setCursor(0, 1); lcd.print(c1) ; } car keypressed15 =myKeypad.waitForKey(); if (keypressed15 !=NO_KEY &&keypressed15 !='*' &&keypressed15 !='#' &&keypressed15 !='A' &&keypressed15 !='B' &&keypressed15 !='C' &&keypressed15 !='D' ) { c2 =touche enfoncée15 ; lcd.setCursor(1, 1); lcd.print(c2) ; } i1=(c1-48)*10; i2=c2-48 ; A_heure=i1+i2 ; retard (500); lcd.clear(); lcd.print("Définir les minutes d'alarme"); car keypressed16 =myKeypad.waitForKey(); // ici tous les programmes sont arrêtés jusqu'à ce que vous entriez les quatre chiffres puis il est comparé au code ci-dessus si (touche pressée16 !=NO_KEY &&touche pressée16 !='*' &&touche pressée16 !='#' &&touche pressée16 !='A' &&touche pressée16 !='B' &&keypressed16 !='C' &&keypressed16 !='D' ) { c1 =keypressed16; lcd.setCursor(0, 1); lcd.print(c1) ; } car keypressed17 =myKeypad.waitForKey(); if (keypressed17 !=NO_KEY &&keypressed17 !='*' &&keypressed17 !='#' &&keypressed17 !='A' &&keypressed17 !='B' &&keypressed17 !='C' &&keypressed17 !='D' ) { c2 =touche enfoncée17 ; lcd.setCursor(1, 1); lcd.print(c2) ; } i1=(c1-48)*10; i2=c2-48 ; A_minute=i1+i2; retard (500); lcd.clear(); AlarmIsActive=1 ; keypressed=NO_KEY ; } if (touche enfoncée =='B') { lcd.clear(); lcd.print("Alarme désactivée"); AlarmIsActive=0 ; keypressed=NO_KEY ; retard (500); } else { monRTC.updateTime(); keypressed=NO_KEY ; } }

Schémas


Processus de fabrication

  1. Panneau LCD avec Arduino pour Flight Simulator
  2. horloge de vision Arduino pov
  3. horloge IV9 Numitron DIY la plus simple avec Arduino
  4. Horloge de mots simple (Arduino)
  5. Horloge Arduino avec heures de prière islamique
  6. horloge maîtresse
  7. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  8. Capteur d'obstacles simple avec Arduino
  9. Horloge numérique TM1637 avec configuration de l'heure et fonctionnalité d'alarme