Motorsteuerung

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.

Abb.1: D1Z Motodriver D1 Shield 1

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)

Leave a Reply

Your email address will not be published. Required fields are marked *

*