Atras

TIMER PROGRAMABLE CON ARDUINO NANO, DISPLAY Y ENCODER ROTATIVO
Ing. Alfredo Segura, México julio de 2025.

Tras de realizar varios proyectos con Display OLED SSD1306 de 128x64 pixeles y Encoder Rotativo con Push Button integrado, hubo que diseñar un Timer que encendiera un ventilador por 10 minutos y lo mantuviera apagado por 10 horas. El proyecto ideal para usar Arduino haciendo uso de millis().

He elegido el Arduino NANO por su bajo costo y su capacidad sobrada para este proyecto, desarrollando el código con el IDE de Arduino, cuya parte medular es el siguiente listado:


if ((flagtc == true) && (millis() > (tiempo + t_enc))) {     // 5000
digitalWrite(PinRy, LOW);       // Apaga el Ventilador
flagtc = false;
   flagtl = true;
   tiempo = millis();
   onoff = "OFF";
mostrar();
  }

if ((flagtl == true) && (millis() > (tiempo + t_apa))) {
digitalWrite(PinRy, HIGH);      // Enciende el Ventilador
flagtc = true;
   flagtl = false;
   tiempo = millis();
   onoff = "ON";
mostrar();
  }
 

Es decir, apagar y encender el ventilador, depende del estado anterior, lo que se maneja con las variables flagtc y flagtl del tipo booleano.

El resto del código es para controlar el display OLED y detectar giros en el Encoder Rotativo, haciendo uso de los pines de INTerrupción externa (Pin 2 y Pin 3) del NANO.

Al encender o resetear el Arduino NANO, se hace sonar un buzzer con dos pitidos, mientras que el display muestra “TIMER 0/1” en cuanto no se manipule el Encoder, pero el Timer ya está en funcionamiento. Si se requiere cambiar los tiempos de encendido y/o apagado, se presiona el push button integrado al encoder, lo que lleva al programa a colocar una línea en el display, debajo de T_ENC o de T_APA, permitiendo subir o bajar el valor de milisegundos girando el encoder en sentido horario o antihorario. El display mostrará el tiempo en milisegundos y también en minutos con parte entera y fraccionaria.

Si el push button del encoder es presionado por más de 5 segundos, se entra en una sección para grabar ambos valores; T_ECN y T_APA en la memoria EEPROM propia del Arduino NANO. Así que al resetear el dispositivo, y durante el setup() se lee el contenido de la memoria EEPROM, recuperando ambos valores.

El diagrama del circuito es el siguiente:

La tarjeta PCB realizada en Traxmaker se muestra a continuación:

El circuito en protoboard funcionando, se muestra en la siguiente fotografía:


PROGRAMA

VIDEO SIMULACIÓN