Minuterie intelligente pour lave-linge avec Arduino Pro Mini et écran OLED
Composants et fournitures
| Composant | Quantité |
|---|---|
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | 1 |
| Écran OLED 1306 (SSD1306) | 1 |
| Bouton poussoir numérique DFRobot Gravity (Jaune) | 2 |
| Module relais 2 canaux SPDT Seeed Grove | 1 |
| Alimentation commutée 5V 2,5A Digilent | 1 |
| Convertisseur USB-UART SparkFun - CY7C65213 | 1 |
| Module Bluetooth HC-05 | 1 |
Outils et machines nécessaires
- Fer à souder (générique)
- Pistolet à colle chaude (générique)
- Ruban adhésif double face
- Ruban adhésif vert
Applications et services en ligne
- Arduino IDE
À propos du projet
Introduction
Ce projet remplace le minuteur mécanique défaillant de mon lave-linge. Le minuteur d'origine, un commutateur de direction mécanique, contrôlait le moteur de la cuve comme suit :
- Récupérer le temps de lavage (en minutes) défini par l'utilisateur
- Faire tourner le moteur dans le sens horaire pendant quelques secondes
- Arrêter le moteur pendant quelques secondes
- Faire tourner le moteur dans le sens antihoraire pendant quelques secondes
- Arrêter le moteur pendant quelques secondes
- Répéter les 4 étapes précédentes jusqu'à l'expiration du minuteur
Je vais construire une minuterie électronique reproduisant exactement ce comportement.
Démonstration
La vidéo ci-dessous montre le fonctionnement de cette minuterie électronique :
Matériel
- Arduino Pro Mini : Exécute le code et contrôle l'ensemble
- Écran OLED 1306 : Affiche les instructions utilisateur et le décompte
- Boutons poussoirs rouge/noir : Régler le minuteur et le démarrer
- Modules relais 5V : Alimentent le moteur en courant alternatif et contrôlent sa direction
- Adaptateur 5V : Alimente la minuterie électronique
L'écran OLED 1306 est soudé directement sur le Pro Mini :

Le module 2 relais, les 2 boutons poussoirs, l'Arduino Pro Mini + OLED 1306 sont connectés sur une platine d'essai :


Programmation
Étape 1 : Procurez-vous un module Bluetooth-Série HC-05 et modifiez son débit (baud rate) à 57600 selon ce tutoriel ou cette procédure. Un Arduino Uno ou un module USB-Série supplémentaire sera nécessaire.
Utilisez les commandes AT suivantes :
AT
AT+UART = 57600,0,0
AT+RESET
Étape 2 : Une fois le débit modifié, connectez le HC-05 à l'Arduino Pro Mini selon le schéma de câblage suivant :

Étape 3 : Sélectionnez la carte dans l'IDE Arduino, collez le code et cliquez sur Téléverser.

J'utilise la liaison série Bluetooth car elle permet une programmation sans fil sur site (in-system), ce qui a facilité les mises à jour du code sur le Pro Mini si nécessaire.
Câblage et fonctionnement de l'appareil expliqués
Le câblage peut varier selon les modèles de lave-linge plus récents ou différents. Voici l'explication pour le mien. Faites attention au schéma « Sharp » en bas à droite : un FIL BLANC arrive du secteur et va au minuteur de lavage, un FIL ROUGE et un FIL BLEU sortent du minuteur. J'ai débranché ces 3 fils du minuteur d'origine (défectueux) et les ai fait sortir par un trou sur le dessus de la machine.


Lorsque le FIL BLANC est commuté vers le FIL ROUGE, le moteur tourne dans le sens horaire. Lorsqu'il est commuté vers le FIL BLEU, il tourne dans le sens antihoraire.
Cette minuterie électronique à base d'Arduino Pro Mini suit le temps de lavage, fait tourner le moteur dans un sens pendant 5 secondes en connectant les fils BLANC et ROUGE via un contact de relais. Elle arrête ensuite le moteur et attend 5 secondes. Puis elle fait tourner le moteur dans l'autre sens pendant 5 secondes en connectant les fils BLANC et BLEU via l'autre contact de relais. Elle s'arrête et attend encore 5 secondes. Toute cette séquence de temporisation peut être modifiée dans le code si nécessaire.
Le schéma suivant montre comment le simple fait de basculer l'alimentation secteur alternatif d'une patte à l'autre du condensateur du moteur monophasé permet d'inverser son sens de rotation.

Théorie du moteur à induction monophasé
Références
Vous pouvez en apprendre davantage sur chaque composant dans ces tutoriels :
- Tutoriel relais
- Tutoriel bouton poussoir
Avertissement !
Ce projet manipule le secteur alternatif, à vos propres risques !
Code
Fichier 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) {
// show timer set menu
u8g.firstPage();
do {
draw_menu();
} while( u8g.nextPage() );
// show user proper operation message
if (rbc>0 && bbc==0) {
u8g.firstPage();
do {
draw_message();
} while( u8g.nextPage() );
delay(2000);
rbc=0;
}
}
// start timer
if(rbc>0) {
sec =59;
mi = bbc-1;
while(mi>=0) {
// show countdown timer message
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(); // call every 5 sec
}
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;
}
}
Schémas


Processus de fabrication
- Machines EEG : conception, fabrication et applications émergentes
- Les distributeurs automatiques : une industrie américaine de 36,6 milliards de dollars
- Les machines à voter : histoire, technologie et normes
- Guide expert des machines à rendre la monnaie modernes : conception, composants et tendances futures
- Vue d'Ensemble des Appareils ECG Modernes : Technologie, Fabrication et Innovations Futures
- L'évolution et la fabrication des machines à coudre : de l'innovation du 19e siècle à l'automatisation moderne
- Pièces Essentielles du Tour : Fonctions et Vue d'Ensemble
- Comprendre les Tours : Histoire, Types et Applications
- Composants Clés d'une Fraiseuse Expliqués