Temporizador Inteligente para Lavadora con Arduino Pro Mini y Pantalla OLED
Componentes y suministros
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | × | 1 |
| Pantalla OLED 1306 | × | 1 |
| DFRobot Gravity: Pulsador Digital (Amarillo) | × | 2 |
| Seeed Grove - Relé SPDT de 2 Canales | × | 1 |
| Fuente de alimentación conmutada Digilent 5V 2.5A | × | 1 |
| SparkFun USB UART Serial Breakout - CY7C65213 | × | 1 |
| Módulo Bluetooth HC-05 | × | 1 |
Herramientas y máquinas necesarias
- Soldador (genérico)
- Pistola de silicona caliente (genérica)
- Cinta de doble cara
- Cinta verde
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Introducción
Este proyecto surge como reemplazo del temporizador mecánico de una lavadora que se ha averiado. El temporizador original era un interruptor de dirección mecánico que controlaba el motor del tambor de la siguiente manera:
- Recibir del usuario el tiempo de lavado en minutos
- Girar el motor en sentido horario durante unos segundos
- Detener el motor unos segundos
- Girar el motor en sentido antihorario unos segundos
- Detener el motor unos segundos
- Repetir los cuatro pasos anteriores hasta que finalice el tiempo de lavado
El objetivo es construir un temporizador electrónico que realice la misma operación.
Demostración
El siguiente video muestra el funcionamiento de este temporizador electrónico:
Hardware
- Arduino Pro Mini: Ejecuta el código y controla todo el sistema
- Pantalla OLED 1306: Muestra instrucciones al usuario y la cuenta regresiva
- Pulsadores rojo/negro: Configuran el tiempo e inician el temporizador
- Módulos de relé 5V: Alimentan el motor de CA y controlan su dirección
- Adaptador 5V: Alimenta el temporizador electrónico
La pantalla OLED 1306 está soldada directamente sobre el Pro Mini:

El módulo de 2 relés, los 2 pulsadores, el Arduino Pro Mini + OLED 1306 están conectados en una protoboard:

Programación
Paso 1: Consiga un módulo Bluetooth-Serial HC-05 y cambie su velocidad (baud rate) a 57600 siguiendo este tutorial o este paso. Para ello necesitará otro Arduino Uno o un módulo USB-Serie.
Utilice los siguientes comandos AT:
AT
AT+UART = 57600,0,0
AT+RESET
Paso 2: Tras cambiar la velocidad a 57600, conecte el HC-05 al Arduino Pro Mini según el siguiente diagrama de cableado:

Paso 3: Seleccione la placa en el Arduino IDE, pegue el código y haga clic en Subir.

Se utiliza Bluetooth serial porque permite la programación inalámbrica en el sistema (field programmable), lo que facilita actualizar el código en el Pro Mini si fuera necesario.
Cableado y funcionamiento del dispositivo explicados
El cableado puede variar según modelos de lavadora más nuevos o diferentes, así que explicaré el mío. Preste atención al diagrama "Sharp" en la esquina inferior derecha: un cable BLANCO viene de la red eléctrica y va al temporizador de lavado; un cable ROJO y un cable AZUL salen del temporizador. He desconectado estos 3 cables del temporizador original (averiado) y los he sacado por un orificio en la parte superior de la lavadora.

Cuando el cable BLANCO se conecta al ROJO, el motor gira en sentido horario; cuando se conecta al AZUL, gira en sentido antihorario.
Este temporizador electrónico con Arduino Pro Mini controla el tiempo de lavado, gira el motor del tambor en una dirección durante 5 segundos conectando los cables BLANCO y ROJO a través de un contacto de relé. Luego detiene el motor y espera 5 segundos. Después gira en la dirección opuesta durante 5 segundos conectando los cables BLANCO y AZUL mediante el otro contacto de relé. Finalmente detiene y espera otros 5 segundos. Toda esta secuencia de tiempos puede modificarse en el código si es necesario.
El siguiente diagrama muestra cómo, simplemente cambiando la entrada de CA de un lado a otro del capacitor del motor, se invierte la dirección de giro de un motor monofásico de inducción.

Teoría del motor de inducción monofásico
Referencias
Puede obtener más detalles sobre cada componente en estos tutoriales:
- Tutorial de relés
- Tutorial de pulsadores
¡Descargo de responsabilidad!
¡Este proyecto trabaja con corriente alterna de la red eléctrica, hágalo bajo su propio riesgo!
Código
Archivo principal C/C++
#include "U8glib.h" //SSD1306 oled waveshare(clk,din,cs,d/c,res); U8GLIB_SSD1306_128X64 u8g(A4,A5,12,11,10);
volatile int rbc = 0;
volatile int bbc = 0;
int sec =0;
int mi = 0;
int motor_rotation = 0;
void setup() {
u8g.setRot180();
analogReference(INTERNAL);
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
attachInterrupt(0, ISR_SW_RED,FALLING);
attachInterrupt(1, ISR_SW_BLACK,FALLING);
pinMode(5,OUTPUT);
digitalWrite(5,LOW);
pinMode(4,OUTPUT);
digitalWrite(4,LOW);
}
void loop(void) {
while(!rbc) {
// mostrar menú de ajuste de tiempo
u8g.firstPage();
do {
draw_menu();
} while( u8g.nextPage() );
// mostrar mensaje de operación correcta
if (rbc>0 && bbc==0) {
u8g.firstPage();
do {
draw_message();
} while( u8g.nextPage() );
delay(2000);
rbc=0;
}
}
// iniciar temporizador
if(rbc>0) {
sec =59;
mi = bbc-1;
while(mi>=0) {
// mostrar cuenta regresiva
unsigned long temp = millis()+1000;
while(temp>=millis()) {
u8g.firstPage();
do {
draw_timer();
} while( u8g.nextPage() );
}
sec=sec-1;
if(sec%5==0) {
control_motor(); // llamar cada 5 seg
}
if (sec <= 0) {
sec = 59;
mi = mi - 1;
}
}
rbc = 0;
bbc = 0;
mi = 0 ;
sec = 0;
digitalWrite(5,LOW);digitalWrite(6,LOW);
}
}// end of loop
void draw_menu(void) {
u8g.setFont(u8g_font_timB24);
if (bbc<10) {
u8g.drawStr( 22,30,"0");
u8g.setPrintPos(38,30);u8g.print(bbc);
} else {
u8g.setPrintPos(22,30);u8g.print(bbc);
}
u8g.drawStr( 54,30,":00");
u8g.setFont(u8g_font_8x13);
u8g.drawStr( 0,62," 'WASHING TIMER'");
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47,"Red:START Black:SET TIME");
}
void draw_message(void) {
u8g.setFont(u8g_font_8x13);
u8g.drawStr( 0,10," SET WASH TIMER");
u8g.drawStr( 0,23,"FIRST BY PUSHING");
u8g.drawStr( 0,36,"THE BLACK BUTTON");
u8g.drawStr( 0,62," 'WASHING TIMER'");
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47,"Red:START Black:SET TIME");
}
void draw_timer(void) {
u8g.setFont(u8g_font_timB24);
if (mi<10) {
u8g.drawStr( 22,30,"0");
u8g.setPrintPos(38,30);u8g.print(mi);
} else {
u8g.setPrintPos(22,30);u8g.print(mi);
}
u8g.drawStr( 54,30,":");
if (sec<10) {
u8g.drawStr( 70,30,"0");
u8g.setPrintPos(86,30);u8g.print(sec);
} else {
u8g.setPrintPos(70,30);u8g.print(sec);
}
if(motor_rotation==0) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47," WASHING MOTOR CW Spin");
digitalWrite(5,HIGH);
}
if(motor_rotation==1) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47," WASHING MOTOR STOPPED ");
digitalWrite(5,LOW);digitalWrite(4,LOW);
}
if(motor_rotation==2) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47," WASHING MOTOR CCW Spin");
digitalWrite(4,HIGH);
}
if(motor_rotation==3) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47," WASHING MOTOR STOPPED ");
digitalWrite(5,LOW);digitalWrite(4,LOW);
}
u8g.setFont(u8g_font_8x13);
u8g.drawStr( 0,62," 'WASHING TIMER'");
}
void ISR_SW_RED() {
sei();
rbc++;
cli();
}
void ISR_SW_BLACK() {
sei();
bbc++;
cli();
}
void control_motor() {
motor_rotation++;
if(motor_rotation>3) {
motor_rotation = 0;
}
}
Esquemas
Proceso de manufactura
- Equipos de EEG: Diseño, fabricación y aplicaciones emergentes
- Máquinas expendedoras: Una industria de 36.600 millones de dólares en EE. UU.
- Máquinas de Votar: Historia, Tecnología y Estándares
- Guía Experta de Máquinas Cambiadoras Modernas: Diseño, Componentes y Tendencias Futuras
- Visión Integral de los Electrocardiógrafos Modernos: Tecnología, Fabricación e Innovaciones Futuras
- La evolución y fabricación de máquinas de coser: de la innovación del siglo XIX a la automatización moderna
- Máquinas de ordeño: diseño, historia e innovaciones futuras
- Pantis: Guía Definitiva de la Media Elegante para Mujer
- Partes Esenciales del Torno: Funciones, Componentes y Mantenimiento
- El Torno: Historia, Tipos, Principio de Funcionamiento, Partes y Aplicaciones
- Componentes Clave de una Fresadora Explicados