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 Temporizador de Cocina Fiable con Arduino y Pantalla LCD

Componentes y materiales

Arduino UNO 1
Pantalla LCD 16x2 Blanco sobre Azul (Adafruit) 1
Pulsadores 12 mm (SparkFun) 4
Resistencia 10 kΩ 4
Resistencia 220 Ω 2
Potenciómetro mono-vuelta 100 kΩ 1
Zumbador (buzzer) 1
Protoboard (genérica) 1
Cables jumper (genéricos) 1

Sobre el proyecto

Un temporizador de cocina casero, totalmente programable, con cuatro modos de operación y alarma sonora. Ideal para aprender máquinas de estados, manejo de botones con antirrebote y gestión de tiempo con la librería TimeLib.

Lo que necesitas

Funcionamiento: cuatro modos

El temporizador opera en un solo modo a la vez:

El código: estructura principal

Librerías

#include <LiquidCrystal.h>
#include <TimeLib.h>  // Paul Stoffregen's Time Library

Inicialización LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Puedes reordenar pines para mejorar el cableado.

Gestión de botones (ejemplo: Start/Stop)

startStopButtonPressed = false;
startStopButtonState = digitalRead(startStopButtonPin);
if (startStopButtonState != startStopButtonPrevState) {
  startStopButtonPressed = (startStopButtonState == HIGH);
  startStopButtonPrevState = startStopButtonState;
}

Cada botón usa una resistencia pull-down de 10 kΩ; al pulsar, el pin va a HIGH. El botón S4 (reset) tiene lógica extra para detectar pulsación larga (>100 ciclos de loop).

Máquina de estados (switch-case)

switch (currentMode) {
  case MODE_IDLE:
    if (resetButtonPressed) Reset();
    if (resetButtonLongPressed) currentMode = MODE_SETUP;
    if (startStopButtonPressed) {
      currentMode = (currentMode == MODE_IDLE) ? MODE_RUNNING : MODE_IDLE;
      if (currentMode == MODE_RUNNING) startTime = now();
    }
    break;
  case MODE_SETUP:
    // navegación y edición de horas/minutos/segundos
    break;
  case MODE_RUNNING:
    if (startStopButtonPressed || resetButtonPressed) currentMode = MODE_IDLE;
    break;
  case MODE_RINGING:
    if (anyButtonPressed) currentMode = MODE_IDLE;
    break;
}

Gestión del tiempo

case MODE_RUNNING:
  currentTime = setupTime - (now() - startTime);
  if (currentTime <= 0) currentMode = MODE_RINGING;
  break;
case MODE_RINGING:
  analogWrite(buzzerPin, 20); delay(20);
  analogWrite(buzzerPin, 0);  delay(40); // beep intermitente
  break;

Actualización de la pantalla

Cada modo imprime textos y valores en posiciones fijas. En RUNNING se formatea HH:MM:SS con ceros a la izquierda.

Esquema de conexiones

Ver imágenes adjuntas en la sección Schematics. El esquema muestra conexiones de botones (con pull-down), LCD, zumbador y alimentación. Puede usarse cualquier protoboard; el zumbador puede colocarse bajo los cables amarillos.

Código completo

/**************************************************
 * Arduino Kitchen Timer v1.0 - 2016/01/27
 * By Angelo Fiorillo (Rome, IT) - GPL3+
 **************************************************/
#include <LiquidCrystal.h>
#include <TimeLib.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buzzerPin = 10;
const int resetButtonPin = 6;
const int startStopButtonPin = 7;
const int downButtonPin = 8;
const int upButtonPin = 9;

// Variables de tiempo, estados, modos... (ver código original)

void setup() {
  lcd.begin(16, 2);
  pinMode(resetButtonPin, INPUT);
  pinMode(startStopButtonPin, INPUT);
  pinMode(upButtonPin, INPUT);
  pinMode(downButtonPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // 1. Lectura de botones con detección de flanco y pulsación larga (reset)
  // 2. Switch-case de modos (IDLE, SETUP, RUNNING, RINGING)
  // 3. Cálculo de tiempo restante y disparo de alarma
  // 4. Actualización LCD según modo
  delay(10); // pequeña pausa para estabilidad
}

void Reset() {
  currentMode = MODE_IDLE;
  currentHours = setupHours;
  currentMinutes = setupMinutes;
  currentSeconds = setupSeconds;
}

El código completo con todas las variables y lógica está en el original. Incluye manejo robusto de pulsaciones, antirrebote por software y guardado de configuración en variables globales.

Proceso de manufactura

  1. Alerta de Sed Inteligente para Plantas: Sensor DIY para Riego Óptimo
  2. Construya un osciloscopio Arduino de 20 kHz en LCD Nokia 5110: Guía DIY fácil
  3. Persianas Inteligentes: Control Automático de Luz con Arduino y Energía Solar
  4. Reloj de Palabras en Italiano con Arduino Nano, NeoPixel, LCD y RTC
  5. Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
  6. Medidor kWh Sigfox Fiable con Arduino MKR Fox 1200
  7. Monitor de temperatura con Bluetooth usando Arduino Nano
  8. Cerradura por Gestos Sin Contacto: Acceso Seguro con APDS-9960 y Arduino
  9. Kit Compañero Arduino Nano: Componentes y Herramientas Esenciales para Electrónica DIY
  10. Circuito de entrada analógica aislada para Arduino
  11. Test de Precisión de Tiempo de Reacción con Arduino UNO