Intelligente Wasmachine-timer met Arduino Pro Mini en OLED-display
Onderdelen en benodigdheden
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | × | 1 |
| 1306 OLED-display | × | 1 |
| DFRobot Gravity: Digitale drukknop (Geel) | × | 2 |
| Seeed Grove - 2-kanaals SPDT-relais | × | 1 |
| Digilent 5V 2.5A Schakelvoeding | × | 1 |
| SparkFun USB UART Serial Breakout - CY7C65213 | × | 1 |
| HC-05 Bluetooth-module | × | 1 |
Benodigde tools en machines
- Soldeerbout (standaard)
- Lijmpistool (standaard)
- Dubbelzijdig tape
- Groen tape
Apps en online services
- Arduino IDE
Over dit project
Inleiding
Dit project is een vervangend onderdeel voor een wasmachine met een defecte wastimer. De oorspronkelijke timer was een mechanische timer/richtingsschakelaar die de motor van de wasvat op de volgende manier controleerde:
- Neem x minuten wastijd als invoer van de gebruiker
- Draai de motor van de wasvat kloksgewijs gedurende enkele seconden
- Stop de motor voor enkele seconden
- Draai de motor van de wasvat tegen de klok in gedurende enkele seconden
- Stop de motor voor enkele seconden
- Herhaal de laatste 4 stappen tot de wastimer verloopt
Ik ga een elektronische timer bouwen die dezelfde bewerkingen uitvoert.
Demo
De volgende video demonstreert de werking van deze elektronische timer:
Hardware
- Arduino Pro Mini: Voert de code uit en regelt alles
- 1306 OLED: Toont gebruiksinstructies en aftelling
- Rode/Zwarte drukknop: Stel timer in en start timer
- 5V Relaismodules: Voeden de motor met wisselstroom en regelen de draairichting
- 5V Adapter: Voedt de elektronische timer
De 1306 OLED is direct op de Pro Mini gesoldeerd:

2 relaismodules, 2 drukknoppen, Arduino Pro Mini + 1306 OLED zijn op een experimenteerprint verbonden:


Programmeren
Stap 1: Verkrijg een HC-05 Bluetooth-Serieel module en wijzig de baudrate naar 57600 volgens deze tutorial of deze stap. Hiervoor is een andere Arduino Uno of een USB-naar-Serieel module vereist.
Gebruik de volgende AT-commando's:
AT
AT+UART = 57600,0,0
AT+RESET
Stap 2: Nadat de baudrate is gewijzigd naar 57600, sluit de HC-05 aan op de Arduino Pro Mini volgens het volgende aansluitschema:

Stap 3: Selecteer het board in de Arduino IDE, plak de code en klik op uploaden.

Ik gebruik Bluetooth Serieel omdat dit draadloze in-systeem programmeerbare mogelijkheden biedt, wat hielp bij het updaten van de code op de Pro Mini indien nodig.
Aansluiting en apparaatwerking uitgelegd
De aansluiting kan variëren voor nieuwere/andere wasmachine-modellen, dus ik leg uit hoe het bij mij zit. Let op het "Sharp"-schema rechtsonder: een WITTE DRAAD komt van het net en gaat naar de wastimer, een RODE DRAAD en een BLAUWE DRAAD komen uit de wastimer. Ik heb deze 3 draden losgekoppeld van de oorspronkelijke (defecte) wastimer en door een gat in de bovenkant van de wasmachine gehaald.


Wanneer de WITTE DRAAD wordt geschakeld naar de RODE DRAAD, draait de motor kloksgewijs. Wanneer de WITTE DRAAD wordt geschakeld naar de BLAUWE DRAAD, draait de motor tegen de klok in.
Deze elektronische timer met Arduino Pro Mini houdt de wastijd bij, draait de motor van de wasvat 5 seconden in één richting door de WITTE en RODE draden via één relaiscontact te verbinden. Vervolgens stopt hij de motor en wacht 5 seconden. Daarna draait hij de motor 5 seconden in de andere richting door de WITTE en BLAUWE draden via het andere relaiscontact te verbinden. Vervolgens stopt hij en wacht nogmaals 5 seconden. Al deze tijdsreeksen kunnen in de code worden aangepast indien nodig.
Het volgende diagram toont hoe door de inkomende wisselstroom naar de ene of de andere poot van de motorcondensator te schakelen, de draairichting van de wisselstroommotor kan worden gewijzigd.

Enkele fase inductiemotor theorie
Referenties
Je kunt meer details leren over elk component in deze tutorials:
- Relais tutorial
- Knop tutorial
Disclaimer!
Dit project heeft te maken met netspanning, doe dit op eigen risico!
Code
Ongetiteld bestand 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) {
// toon timer instelmenu
u8g.firstPage();
do {
draw_menu();
} while( u8g.nextPage() );
// toon gebruiker correcte bedieningsmelding
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) {
// toon aftelmelding
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(); // roep elke 5 sec aan
}
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," 'WASMACHINE TIMER'");
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47,"Rood:START Zwart:TIJD INSTELLEN");
}
void draw_message(void) {
u8g.setFont(u8g_font_8x13);
u8g.drawStr( 0,10," STEL WAS-TIMER IN");
u8g.drawStr( 0,23,"EERST MET DE");
u8g.drawStr( 0,36,"ZWARTE KNOP");
u8g.drawStr( 0,62," 'WASMACHINE TIMER'");
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47,"Rood:START Zwart:TIJD INSTELLEN");
}
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," WASMOTOR KLKSGEWIJS");
digitalWrite(5,HIGH);
}
if(motor_rotation==1) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47," WASMOTOR GESTOPT ");
digitalWrite(5,LOW);digitalWrite(4,LOW);
}
if(motor_rotation==2) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47," WASMOTOR TEEN KLK IN ");
digitalWrite(4,HIGH);
}
if(motor_rotation==3) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 0,47," WASMOTOR GESTOPT ");
digitalWrite(5,LOW);digitalWrite(4,LOW);
}
u8g.setFont(u8g_font_8x13);
u8g.drawStr( 0,62," 'WASMACHINE 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;
}
}
Schema's


Productieproces
- EEG-Apparaten: Ontwerp, Productie en Opkomende Toepassingen
- Automaatjes: Een Amerikaanse Industriemacht van $36,6 Mrd
- Stemmachines: Geschiedenis, Technologie en Standaarden
- Expertgids voor Moderne Wisselgeldautomaten: Ontwerp, Componenten en Toekomsttrends
- Uitgebreid Overzicht van Moderne ECG-Apparaten: Technologie, Productie en Toekomstige Innovaties
- De Evolutie en Productie van Naaimachines: Van 19e-Eeuwse Innovatie tot Moderne Automatisering
- Melkmachines: Ontwerp, Geschiedenis en Toekomstige Innovaties
- Panty's: De Ultieme Gids voor Elegante Dameskousen
- Essentiële onderdelen van een draaibank: functies en overzicht
- Draaibanken begrijpen: geschiedenis, typen en toepassingen
- Belangrijkste Onderdelen van een Freesmachine Uitgelegd