Das Projekt enthält zwei Motoren, die die Türen des Briefkastens öffnen. Dabei handelt es sich um Gleichstrommotoren, die mit maximal 12 Volt betrieben werden können. Die Motoren haben zwei Anschlüsse für Plus und Minus. Je nachdem, wie man beide Anschlüsse polt, dreht sich der Motor links- oder rechtsherum. Da der Mikrocontroller nur 5 Volt abgeben kann, die Motoren aber um die 12 Volt brauchen, muss eine externe Stromquelle genutzt werden. Zudem sind fast alle Pins am Mikrocontroller besetzt, wenn die beiden Motoren, der RFID-Sensor und der Abstandsensor angeschlossen werden. Also wird das D1Z Motodriver D1 Shield benötigt (siehe Abb.1). Mit dem Motordriver kann man zwei Motoren ansteuern und eine externe Spannungsquelle verwenden. An den Pins „VM” und „GND” wird die externe Spannungsquelle angeschlossen. An den Pins „A1″, „A2″, „B1″ und „B2″ wird jeweils paarweise ein Motor angeschlossen. Als externe Spannungsquelle werden sechs AA-Batterien verwendet. Der Motordriver kann einfach auf den Mikrocontroller gesteckt werden.
Das Motorshield wird über eine Bibliothek2 gesteuert, die man manuell in der Arduino IDE installieren muss.
//Motor Library
#include "WEMOS_Motor.h"
//Motor shiled I2C Address: 0x30
//PWM frequency: 1000Hz(1kHz)
Motor M1(0x30,_MOTOR_A, 1000);//Motor A
Motor M2(0x30,_MOTOR_B, 1000);//Motor B
//Hilfsvariable damit sich Türen nicht überdrehen
boolean isOpen = false;
//Oefnnet die Tueren des Briefkasten
void openDoor(){
//Abfrage damit Türen sich nicht überdrehen
if(isOpen){
return;
}
//Motoren drehen sich im Uhrzeigersinn mit Geschwindikeit SPEED
M1.setmotor( _CW, SPEED);
M2.setmotor(_CCW, SPEED);
//Motoren drehen sich für 1500 ms
delay(1500);
//Motoren werden angehalten
M1.setmotor(_STOP);
M2.setmotor(_STOP);
//Wird gesetzt damit sich Tuer wieder schliessen kann
isOpen = true;
}
//Schliesst die Tueren des Briefkastens
void closeDoor(){
if(!isOpen){
return;
}
M1.setmotor( _CCW, SPEED);
M2.setmotor(_CW, SPEED);
delay(1500);
M1.setmotor(_STOP);
M2.setmotor(_STOP);
isOpen = false;
}
Zuerst werden die beiden Motoren „M1″ und „M2″ definiert. Dazu ist eine Konstante für die Drehgeschwindigkeit und eine Hilfsvariable festgelegt. Die Hilfsvariable sorgt dafür, dass sich die Türen nicht überdrehen. In der Methode „openDoor” wird als Erstes überprüft, ob die Tür schon offen ist. Falls dies zutrifft passiert nichts. Sonst wird die Tür geöffnet. Ein Motor dreht sich im Uhrzeigersinn. Der Andere gegen den Uhrzeigersinn. Beide Motoren werden mit der Geschwindigkeit SPEED geöffnet und nach 1500 Millisekunden wieder angehalten. Nach dieser Zeit haben sich die Türen um ca. 90 Grad gedreht. Die Methode „closeDoor” funktioniert analog nur mit der entgegengesetzten Drehrichtung.
Die Schwierigkeit bei den Motoren war nicht der Programmcode an sich, sondern die technische Umsetzung. Gemeint ist das Finden der passenden Bibliothek, das Verschalten einer externen Stromquelle mit dem Mikrocontroller, die Funktionsweise des Motorshields und weiteres.
1 „D1Z Motodriver D1 Shield” https://www.reichelt.de/de/de/d1-shield-dual-motortreiber-tb6612fng-d1z-motodriver-p266073.html?r=1 (reichelt.de)
2 „WEMOS_Motor_Shield_Arduino_Library” 07.2016 https://github.com/wemos/WEMOS_Motor_Shield_Arduino_Library (Wemos)