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

Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO

Composants et fournitures

Module RTC DS1302 (horloge temps réel) ×1
Buzzer ×1
Écran LCD I2C 16×2 (blanc sur bleu) ×1
Arduino UNO ×1
Clavier matriciel 4×4 ×1

À propos du projet

Bonjour à tous, dans ce projet nous allons réaliser un réveil simple avec une carte Arduino UNO. Ce projet combine différents modules que j'ai utilisés auparavant ; si vous bloquez sur quelque chose, consultez les tutoriels de chaque module sur le site, car c'est ainsi que je procède habituellement : faire les choses séparément puis les combiner.

Matériel nécessaire

Au cas où vous bloqueriez, consultez ces tutoriels précédents :

Câblage

Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO

Bibliothèques et code

Code

Télécharger le code

Le fonctionnement est simple : après le câblage, appuyez sur « * » pour régler l'heure et la date sur le RTC DS1302. L'affichage montrera alors le jour et l'heure actuels. Pour régler l'alarme, appuyez sur « A » et définissez l'heure et les minutes. Vous pouvez la désactiver en appuyant sur « B » avant l'heure ou sur n'importe quel bouton pendant la sonnerie.

J'espère que ça vous plaira, contactez-moi pour tout problème.

Code source (RTC_alarm_clock_LCD.ino)

// Code pour DS1302 RTC + Clavier 4x4 + LCD I2C + Arduino + Buzzer
// Après câblage, l'affiche la date/heure par défaut ou celle définie auparavant
// Objectif : régler le module RTC depuis le clavier, l'heure reste stockée
// Puis l'afficher et régler l'alarme.
// Référez-vous à Surtrtech.com ou chaîne YouTube SurtrTech pour plus d'infos

#include <Keypad.h>
#include <Wire.h>
#include <virtuabotixRTC.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR 0x27
#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 7

LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
virtuabotixRTC myRTC(2, 3, 4); // CLK, DAT, RST

const byte numRows = 4;
const byte numCols = 4;

char keymap[numRows][numCols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[numRows] = {12,11,10,9};
byte colPins[numCols] = {8,7,6,5};

int 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 = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home();
}

void loop() {
  while(keypressed == NO_KEY) {
    keypressed = myKeypad.getKey();
    lcd.clear();
    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);
        delay(100);
        tone(buzzer, 2000);
        delay(100);
        lcd.clear();
        lcd.print("Reveillez-vous !!!");
        keypressedx = myKeypad.getKey();
      }
    }
    keypressedx = NO_KEY;
    noTone(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);
    delay(100);
  }
  
  if (keypressed == '*') {
    lcd.clear();
    lcd.print(" Reglage");
    delay(1000);
    lcd.clear();
    lcd.print("Regler annee");
    // Saisie année (4 chiffres)
    char keypressed2 = myKeypad.waitForKey();
    if (keypressed2 != NO_KEY && keypressed2 != '*' && keypressed2 != '#' && keypressed2 != 'A' && keypressed2 != 'B' && keypressed2 != 'C' && keypressed2 != 'D') {
      c1 = keypressed2; lcd.setCursor(0,1); lcd.print(c1);
    }
    char keypressed3 = myKeypad.waitForKey();
    if (keypressed3 != NO_KEY && keypressed3 != '*' && keypressed3 != '#' && keypressed3 != 'A' && keypressed3 != 'B' && keypressed3 != 'C' && keypressed3 != 'D') {
      c2 = keypressed3; lcd.setCursor(1,1); lcd.print(c2);
    }
    char keypressed4 = myKeypad.waitForKey();
    if (keypressed4 != NO_KEY && keypressed4 != '*' && keypressed4 != '#' && keypressed4 != 'A' && keypressed4 != 'B' && keypressed4 != 'C' && keypressed4 != 'D') {
      c3 = keypressed4; lcd.setCursor(2,1); lcd.print(c3);
    }
    char keypressed5 = myKeypad.waitForKey();
    if (keypressed5 != NO_KEY && keypressed5 != '*' && keypressed5 != '#' && keypressed5 != 'A' && keypressed5 != 'B' && keypressed5 != 'C' && keypressed5 != 'D') {
      c4 = keypressed5; lcd.setCursor(3,1); lcd.print(c4);
    }
    i1 = (c1-48)*1000; i2 = (c2-48)*100; i3 = (c3-48)*10; i4 = c4-48;
    int N_year = i1+i2+i3+i4;
    delay(500);
    lcd.clear();
    lcd.print("Regler mois");
    // Saisie mois (2 chiffres)
    char keypressed6 = myKeypad.waitForKey();
    if (keypressed6 != NO_KEY && keypressed6 != '*' && keypressed6 != '#' && keypressed6 != 'A' && keypressed6 != 'B' && keypressed6 != 'C' && keypressed6 != 'D') {
      c1 = keypressed6; lcd.setCursor(0,1); lcd.print(c1);
    }
    char keypressed7 = myKeypad.waitForKey();
    if (keypressed7 != NO_KEY && keypressed7 != '*' && keypressed7 != '#' && keypressed7 != 'A' && keypressed7 != 'B' && keypressed7 != 'C' && keypressed7 != 'D') {
      c2 = keypressed7; lcd.setCursor(1,1); lcd.print(c2);
    }
    i1 = (c1-48)*10; i2 = c2-48;
    int N_month = i1+i2;
    delay(500);
    lcd.clear();
    lcd.print("Regler jour");
    // Saisie jour (2 chiffres)
    char keypressed8 = myKeypad.waitForKey();
    if (keypressed8 != NO_KEY && keypressed8 != '*' && keypressed8 != '#' && keypressed8 != 'A' && keypressed8 != 'B' && keypressed8 != 'C' && keypressed8 != 'D') {
      c1 = keypressed8; lcd.setCursor(0,1); lcd.print(c1);
    }
    char keypressed9 = myKeypad.waitForKey();
    if (keypressed9 != NO_KEY && keypressed9 != '*' && keypressed9 != '#' && keypressed9 != 'A' && keypressed9 != 'B' && keypressed9 != 'C' && keypressed9 != 'D') {
      c2 = keypressed9; lcd.setCursor(1,1); lcd.print(c2);
    }
    i1 = (c1-48)*10; i2 = c2-48;
    int N_day = i1+i2;
    delay(500);
    lcd.clear();
    lcd.print("Regler heure");
    // Saisie heure (2 chiffres)
    char keypressed10 = myKeypad.waitForKey();
    if (keypressed10 != NO_KEY && keypressed10 != '*' && keypressed10 != '#' && keypressed10 != 'A' && keypressed10 != 'B' && keypressed10 != 'C' && keypressed10 != 'D') {
      c1 = keypressed10; lcd.setCursor(0,1); lcd.print(c1);
    }
    char keypressed11 = myKeypad.waitForKey();
    if (keypressed11 != NO_KEY && keypressed11 != '*' && keypressed11 != '#' && keypressed11 != 'A' && keypressed11 != 'B' && keypressed11 != 'C' && keypressed11 != 'D') {
      c2 = keypressed11; lcd.setCursor(1,1); lcd.print(c2);
    }
    i1 = (c1-48)*10; i2 = c2-48;
    int N_hour = i1+i2;
    delay(500);
    lcd.clear();
    lcd.print("Regler minutes");
    // Saisie minutes (2 chiffres)
    char keypressed12 = myKeypad.waitForKey();
    if (keypressed12 != NO_KEY && keypressed12 != '*' && keypressed12 != '#' && keypressed12 != 'A' && keypressed12 != 'B' && keypressed12 != 'C' && keypressed12 != 'D') {
      c1 = keypressed12; lcd.setCursor(0,1); lcd.print(c1);
    }
    char keypressed13 = myKeypad.waitForKey();
    if (keypressed13 != NO_KEY && keypressed13 != '*' && keypressed13 != '#' && keypressed13 != 'A' && keypressed13 != 'B' && keypressed13 != 'C' && keypressed13 != 'D') {
      c2 = keypressed13; lcd.setCursor(1,1); lcd.print(c2);
    }
    i1 = (c1-48)*10; i2 = c2-48;
    int N_minutes = i1+i2;
    delay(500);
    lcd.clear();
    myRTC.setDS1302Time(22, N_minutes, N_hour, 1, N_day, N_month, N_year);
    // 22 = secondes (peut être ajouté), 1 = jour de semaine (non affiché)
    keypressed = NO_KEY;
  }
  
  // Configuration alarme
  if (keypressed == 'A') {
    lcd.clear();
    lcd.print(" Reglage alarme");
    delay(1000);
    lcd.clear();
    lcd.print("Regler heure alarme");
    char keypressed14 = myKeypad.waitForKey();
    if (keypressed14 != NO_KEY && keypressed14 != '*' && keypressed14 != '#' && keypressed14 != 'A' && keypressed14 != 'B' && keypressed14 != 'C' && keypressed14 != 'D') {
      c1 = keypressed14; lcd.setCursor(0,1); lcd.print(c1);
    }
    char keypressed15 = myKeypad.waitForKey();
    if (keypressed15 != NO_KEY && keypressed15 != '*' && keypressed15 != '#' && keypressed15 != 'A' && keypressed15 != 'B' && keypressed15 != 'C' && keypressed15 != 'D') {
      c2 = keypressed15; lcd.setCursor(1,1); lcd.print(c2);
    }
    i1 = (c1-48)*10; i2 = c2-48;
    A_hour = i1+i2;
    delay(500);
    lcd.clear();
    lcd.print("Regler minutes alarme");
    char keypressed16 = myKeypad.waitForKey();
    if (keypressed16 != NO_KEY && keypressed16 != '*' && keypressed16 != '#' && keypressed16 != 'A' && keypressed16 != 'B' && keypressed16 != 'C' && keypressed16 != 'D') {
      c1 = keypressed16; lcd.setCursor(0,1); lcd.print(c1);
    }
    char keypressed17 = myKeypad.waitForKey();
    if (keypressed17 != NO_KEY && keypressed17 != '*' && keypressed17 != '#' && keypressed17 != 'A' && keypressed17 != 'B' && keypressed17 != 'C' && keypressed17 != 'D') {
      c2 = keypressed17; lcd.setCursor(1,1); lcd.print(c2);
    }
    i1 = (c1-48)*10; i2 = c2-48;
    A_minute = i1+i2;
    delay(500);
    lcd.clear();
    AlarmIsActive = 1;
    keypressed = NO_KEY;
  }
  
  if (keypressed == 'B') {
    lcd.clear();
    lcd.print("Alarme desactivee");
    AlarmIsActive = 0;
    keypressed = NO_KEY;
    delay(500);
  } else {
    myRTC.updateTime();
    keypressed = NO_KEY;
  }
}

Schémas

Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO

Processus de fabrication

  1. Panneau de contrôle Arduino Nano pour Flight Simulator 2020 – Affichage LCD et CDI
  2. Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
  3. Construire une horloge Numitron rétro avec Arduino : simple, fiable et économe en énergie
  4. Horloge à Mots DIY Arduino – Afficheur Temps Réel Élégant et Personnalisable
  5. Horloge Arduino temps réel pour les heures de prière islamiques
  6. Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
  7. Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
  8. Capteur d'obstacle IR simple avec Arduino — LED IR + Photodiode
  9. Horloge numérique TM1637 avec réglage heure/alarme – Prototype Arduino Nano