Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO

Componentes y suministros

Módulo Reloj Tiempo Real (RTC) DS1302 1
Zumbador (buzzer) 1
Pantalla LCD estándar 16x2 Blanco sobre Azul (Adafruit) 1
Arduino UNO 1
Teclado matriz 4x4 1

Sobre el proyecto

Hola a todos, en este proyecto intentaremos hacer un reloj despertador fácil con placa Arduino UNO. Este proyecto es una mezcla de diferentes módulos que usé antes; si te atascas en algo puedes consultar en la web el tutorial del módulo, porque así suelo trabajar: hago las cosas por separado y luego las mezclo. :D

Para este proyecto necesitaremos:

En caso de que te atascas, puedes consultar estos tutoriales previos sobre los módulos anteriores:

Cableado

Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO

Librerías y Código

Código

Descargar código

El funcionamiento del código es bastante simple. Tras cablear los módulos, puedes pulsar "*" para ajustar la hora y fecha en el RTC DS1302; la pantalla mostrará entonces el día y hora actuales. Si quieres configurar la alarma pulsas "A" y puedes ajustar hora y minuto, y puedes desactivarla pulsando "B" antes de la hora o pulsando cualquier botón mientras suena.

Espero que os guste, cualquier problema podéis contactarme.

// Este código es para usar con módulo RTC DS1302 + Teclado 4x4 + LCD I2C + Arduino + Zumbador
// Tras cablear los módulos, el LCD mostrará la fecha y hora por defecto o la configurada antes
// El objetivo es que puedas configurar el módulo RTC desde el teclado, y se quede guardado
// Luego mostrarlo en pantalla y después configurar tu alarma.
// Referencia: Surtrtech.com o canal SurtrTech YouTube para más información

#include 
#include 
#include 
#include 

#define I2C_ADDR 0x27 // LCD I2C
#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); // Cableado RTC (CLK,DAT,RST) - cambiar pines aquí si modificas cableado

const byte numRows= 4; // filas teclado
const byte numCols= 4; // columnas teclado

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}; // Filas 0 a 3
byte colPins[numCols]= {8,7,6,5}; // Columnas 0 a 3

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("Get up !!!");
        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(" Setup");
    delay(1000);
    lcd.clear();
    lcd.print("Setup year");
    // ... (código de configuración fecha/hora omitido por brevedad)
    // Configura año, mes, día, hora, minutos secuencialmente
    // Al final: myRTC.setDS1302Time(22, N_minutes, N_hour, 1, N_day, N_month, N_year);
    keypressed=NO_KEY;
  }

  // Configuración alarma
  if (keypressed == 'A'){
    lcd.clear();
    lcd.print(" Alarm setup ");
    delay(1000);
    lcd.clear();
    lcd.print("Set alarm hour");
    // ... (código configuración hora y minutos alarma)
    AlarmIsActive=1;
    keypressed=NO_KEY;
  }

  if (keypressed == 'B') {
    lcd.clear();
    lcd.print("Alarm deactivated");
    AlarmIsActive=0;
    keypressed=NO_KEY;
    delay(500);
  } else {
    myRTC.updateTime();
    keypressed=NO_KEY;
  }
}

Esquemáticos

Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO

Proceso de manufactura

  1. Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
  2. Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
  3. Construye un reloj Numitron retro con Arduino: Simple, fiable y eficiente energéticamente
  4. Reloj de Palabras DIY con Arduino: Construye una Pantalla Elegante en Tiempo Real
  5. Construye un reloj en tiempo real con Arduino para horarios de oración islámica
  6. Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
  7. Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
  8. Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
  9. Reloj Digital TM1637 con Configuración de Hora y Alarma - Prototipo Arduino Nano
  10. Cómo mostrar imágenes en una pantalla TFT LCD de 1.17 pulgadas con Arduino UNO
  11. Construir una rueda medidora DIY precisa con Arduino Nano y encoder rotativo