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

Reloj Digital TM1637 con Configuración de Hora y Alarma - Prototipo Arduino Nano

Componentes y materiales

Sobre el proyecto

Este es un prototipo del mecanismo de configuración de hora y alarma que planeo usar en mis próximos proyectos de relojes digitales. Espero que te sea útil. Si se te ocurren mejoras, ¡avísame! Estaré encantado de revisarlas e incorporarlas potencialmente en mi código.

Puedes ver el tutorial completo en [enlace al video].

Si te gusta este contenido y quieres apoyarme para crear videos similares, visita mi Patreon: patreon.com/MariosIdeas o PayPal.

Código

Visualización de hora desde RTC con configuración de hora y funcionalidad de alarma (Arduino)

Este código lee la hora actual del módulo RTC. También permite actualizar la hora actual y configurar la hora de alarma. Las acciones de configuración se realizan con 3 botones.

// Mario's Ideas
// TM1637 Digital Clock con Setup y Funcionalidad de Alarma
#include <Arduino.h>
#include <TM1637Display.h>
#include <virtuabotixRTC.h>

// Módulo RTC - PINES CLK, DAT, RST
virtuabotixRTC myRTC(A1, A2, A3);

// Variables para valores previos leídos del RTC
int minutes;
int hours;

// Variables para hora de alarma
int Alarm_minutes = 05;
int Alarm_hours = 18;

uint8_t Blank[] = {0x0};
int POSITION = 0;
int digits[4]; // Tabla para 4 dígitos (setup hora/alarma)
int interval = 0;

#define Alarm 9      // Botón para activar/desactivar alarma
#define Buzer 13     // Zumbador
#define Led 8        // LED estado

// Estados
boolean Alarm_set = false;
boolean Alarm_in_progress = false;
boolean Setup_on = false;

// Display 4 dígitos - Pines digitales
#define CLK 4
#define DIO 5
TM1637Display clock(CLK, DIO);

void setup() {
  attachInterrupt(digitalPinToInterrupt(2), Press_A_Button, RISING);
  attachInterrupt(digitalPinToInterrupt(3), Press_B_Button, RISING);
  pinMode(Alarm, INPUT);
  pinMode(Buzer, OUTPUT);
  pinMode(Led, OUTPUT);
  digitalWrite(Buzer, LOW);
  clock.setBrightness(0x0f);
  Serial.begin(9600);
}

void Press_A_Button() {
  if (interval > 3) {
    if (Setup_on == false) {
      Setup_on = true;
      if (Alarm_set == true) {
        digits[0] = (int)Alarm_hours / 10;
        digits[1] = Alarm_hours - ((int)Alarm_hours / 10) * 10;
        digits[2] = (int)Alarm_minutes / 10;
        digits[3] = Alarm_minutes - ((int)Alarm_minutes / 10) * 10;
      } else {
        digits[0] = (int)myRTC.hours / 10;
        digits[1] = myRTC.hours - ((int)myRTC.hours / 10) * 10;
        digits[2] = (int)myRTC.minutes / 10;
        digits[3] = myRTC.minutes - ((int)myRTC.minutes / 10) * 10;
      }
    } else {
      POSITION++;
      if (POSITION == 4) {
        if (Alarm_set == true) {
          Alarm_minutes = digits[3] + digits[2] * 10;
          Alarm_hours = digits[1] + digits[0] * 10;
        } else {
          myRTC.setDS1302Time(0, digits[3] + digits[2] * 10, digits[1] + digits[0] * 10,
                              myRTC.dayofweek, myRTC.dayofmonth, myRTC.month, myRTC.year);
          clock.showNumberDec(digits[0], false, 1, 0);
          clock.showNumberDec(digits[1], false, 1, 1);
          clock.showNumberDec(digits[2], false, 1, 2);
          clock.showNumberDec(digits[3], false, 1, 3);
        }
        POSITION = 0;
        Setup_on = false;
      }
    }
    interval = 0;
  }
}

void Press_B_Button() {
  if (interval > 3) {
    if (Setup_on) {
      digits[POSITION] = digits[POSITION] + 1;
      if (POSITION == 0 && digits[POSITION] == 3) digits[POSITION] = 0;
      if (POSITION != 0 && digits[POSITION] == 10) digits[POSITION] = 0;
      interval = 0;
    }
  }
  interval = 0;
}

void loop() {
  // Botón alarma: toggle on/off
  if (digitalRead(Alarm) == HIGH && Alarm_set == false) {
    if (interval > 30) {
      digitalWrite(Led, HIGH);
      Alarm_set = true;
      delay(300);
    }
  } else {
    if (digitalRead(Alarm) == HIGH && Alarm_set == true) {
      if (interval > 30) {
        Alarm_set = false;
        Alarm_in_progress = false;
        digitalWrite(Led, LOW);
        delay(300);
      }
    }
  }

  myRTC.updateTime();

  if (Setup_on == true) {
    // Mostrar dígitos con parpadeo en posición actual
    clock.showNumberDec(digits[0], false, 1, 0);
    clock.showNumberDec(digits[1], false, 1, 1);
    clock.showNumberDec(digits[2], false, 1, 2);
    clock.showNumberDec(digits[3], false, 1, 3);
    delay(200);
    clock.setSegments(Blank, 1, POSITION);
    delay(200);
    clock.showNumberDec(digits[0], false, 1, 0);
    clock.showNumberDec(digits[1], false, 1, 1);
    clock.showNumberDec(digits[2], false, 1, 2);
    clock.showNumberDec(digits[3], false, 1, 3);
  } else {
    // Comprobar alarma
    if (myRTC.minutes == Alarm_minutes && myRTC.hours == Alarm_hours && Alarm_set == true && Setup_on == false) {
      Alarm_in_progress = true;
    }
    if (Alarm_in_progress) {
      digitalWrite(Buzer, HIGH);
      delay(1000);
      digitalWrite(Buzer, LOW);
      delay(1000);
    }
    // Actualizar display solo si cambian los minutos
    if (myRTC.minutes != minutes) {
      clock.showNumberDecEx((int)myRTC.hours / 10 * 1000 + (myRTC.hours - ((int)myRTC.hours / 10) * 10) * 100 +
                            (int)myRTC.minutes / 10 * 10 + myRTC.minutes - ((int)myRTC.minutes / 10) * 10,
                            (0x80 >> 1), true);
      minutes = myRTC.minutes;
      hours = myRTC.hours;
    }
  }
  if (interval < 200) interval++;
}

Esquemáticos

Reloj Digital TM1637 con Configuración de Hora y Alarma - Prototipo Arduino Nano

Proceso de manufactura

  1. Fiix e IDC Muestran Cómo la Transformación Digital Impulsa la Confiabilidad en Manufactura
  2. Cómo el Monitoreo de Emisiones Acústicas Evitó un Paro Costoso en una Planta Alimentaria
  3. 8 formas probadas de reducir costes de mantenimiento e impulsar ingresos con software de mantenimiento digital
  4. Construya una Alarma de Agua Headless para Raspberry Pi 2 con Adafruit T‑Cobbler Plus
  5. Construya un robot con Raspberry Pi y Python: Guía completa
  6. Integración de sensor termopar con Arduino Portenta H7 usando MAX6675
  7. Reloj de Palabras de Precisión: Visualización del Tiempo en Palabras Minuto a Minuto
  8. Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO
  9. Comprendiendo la Funcionalidad e Innovación de los Rodamientos en Maquinaria Moderna
  10. Sensores Analógicos vs Digitales: Tipos, Aplicaciones y Ejemplos Prácticos
  11. Acelerando la Transformación Digital: La Plataforma IoT Edge-to-Cloud de Cisco e IBM