Arduino, A4988 Motortreiber und der Stepper-Motor NEMA17

Arduino A4988 Nema17 Stepper Motor

A4988 Überblick

Der A4988 ist ein Motortreiber, der Steppermotoren z.B. in 3D Druckern oder CNC-Fräsen steuert. Sein extrem niedriger Preis uns die eingebauten Features wie z.B. eine Abschaltung bei zu hohen Temperaturen macht ihn extrem interessant. Darüber hinaus ist dieser Baustein sehr einfach anzusteuern.

A4988 Pinout

A4988 Pinout Arduino

Technische Daten

Betriebsspannung 8 V – 35 V
Dauerstrom pro Phase 1A
Maximumstrom pro Phase 2A
Logikspannung 3 V – 5.5 V
Microstep-Auflösung full, 1/2, 1/4, 1/8, und 1/16

Beispielschaltung

Arduino A4988 Nema17 Stepper Motor

Das Arduino wird mit 5V+ und GND des A4988 verbunden. Die digitalen Pins 4, 5 und 6 steuern den Treiberbaustein. Enable wird auf HIGH gesetzt, dann wird ein Step ausgeführt, sobald ein Puls am Step-Pin ankommt. Der Dir-Pin legt die Drehrichtung fest (LOW = Richtung1, HIGH = Richtung2).

Es ist übrigens egal, ob die Ihr die Spule des Steppers verwechselt. Es ist nur wichtig, das eine Spule an Pin 1A und 1B, die andere an Pin 2A und 2B anliegt.

Wenn du nicht weiße, welche Kabel vom Stepper-Motor zusammen gehören, muss einfach mit einem Widerstandsmessgerät an zwei der vier Kabel. Ist der Widerstand unendlich, gehören die Kabel nicht zu einer Spule. Ist ein Widerstand (sehr klein) zu messen, hast Du ein Paar gefunden.

Code

Im Grunde schalten wir ein HIGH oder LOW auf den Richtungspin, dann stimulieren wir den Step-Pin mit einer An-Aus-Logik.

Microstepping

Ist die Auflösung der einzelnen Steps zu gering, lässt sich am A4988 Microstepping bis zu Sechzehntel-Schritten aktivieren. Hierbei musst Du aber beachten, das Microstepping Einfluss auf das Drehmoment des Motors hat.

Zum einschalten des Microstepping Modus kann man einfach ein logisches HIGH Signal an die jeweiligen Pins anlegen.

MS1 MS2 MS3 Microstep Auflösung Arbeitsmodus
L L L Full Step 2 Phase
H L L Half Step 1-2 Phase
L H L Quarter Step W1-2 Phase
H H L Eighth Step 2W1-2 Phase
H H H Sixteenth Step 4W1-2 Phase

Mehr Infos

Hier habe ich schon mal was zum Thema Stepper-Motoren erklärt: Motorsteuerung eines Schrittmotors

Datenblatt des Allegro A4988 Chips: https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf

Arduino und MQTT – Einstieg ins Internet der Dinge (IoT)

Schema, wie MQTT funktioniert

Das Internet der Dinge (IoT) stellt viele Herausforderungen an das verwendete Protokoll. Es soll möglichst robust sein, Geräte unterstützen, die geringe Prozessorleistung haben, schlechte Netzwerkkonditionen verkraften und damit zurecht kommen, wenn der Datenstrom instabil wird. MQTT ist solch ein Protokoll. Es ist für die Kommunikation von Maschine zu Maschine (M2M) der Quasi-Standard geworden.

Schema, wie MQTT funktioniert

Terminologie

Klären wir zuerst ein paar Begriffe, die im Zusammenhang mit MQTT wichtig sind:

MQTT-Broker: Der Server, der die Nachrichtenvermittlung übernimmt. Er kann sich im lokalen Netzwerk befinden oder irgendwo im Internet.

Topic: Das kann man sich wie ein Pfad zum Nachrichtenaustausch vorstellen. Ein Topic könnte temperatur oder raum1/temperatur heißen.

Publish: Hierbei handelt es ich um das Senden von Daten. Wenn also z.B. ein Arduino als Sensoreinheit die Temperatur an den Broker schickt, spricht man von publishen.

Subscribe: Das aktive Empfangen von Daten, sobald diese eintreffen. Will man z.B. die Daten vom Thermometer abrufen, muss man – ob mit einem IoT-Gerät oder einer Applikation (z.B. Website) – auf dieses Thema subscriben. D.h., das das Gerät nun ein Auge auf dieses Topic wirft. Kommen beim Borker neue Daten an, kann man diese abgreifen.

Darüber hinaus bietet MQTT viele andere nützliche Funktionen, die aber den Rahmen sprengen würden. Auf Wikipedia kann man sich gern in die Tiefe einarbeiten: Wikipedia

Aber nun in die Praxis

Als erstes setzen wir den MQTT-Broker auf und senden Daten in unserem Computer hin und her.

Wir verwenden Eclipse Mosquitto als Broker-Software.

1. Installation von Mosquitto (MQTT-Broker)

Windows:
Unter Windows ist der Weg etwas steiniger. Man muss nämlich neben dem eigentlichen Installer einige dll-Dateien hinzufügen. In diesem Tutorial ist die Installation aber sehr anschaulich erklärt.

OSX: Zuerst installiert man Homebrew (Download). Hierbei handelt es sich (u.A.) um eine Erweiterung, die die Installation von Software vereinfacht. Die Installation erfolgt in einem Terminal-Fenster.

Danach gib einfach:
sudo brew install mosquitto
ein. Der Befehl installiert Mosquitto.

2. Testen

Öffen ein Terminal- (bzw. CMD-) Fenster. Subscribe auf ein MQTT-Topic. (Unter Windows muss man im gleichen Verzeichnis wie die MQTT-Installation sein z.B. C:\Program Files (x86)\mosquitto)

mosquitto_sub -t "temperatur"

Dieses Fenster hat jetzt auf das Topic temperatur subscribed. Wir lauschen also beim MQTT-Broker, ob zu diesem Topic neue Daten ankommen.

Öffne ein zweites Fenster und publishe auf das Topic:

mosquitto_pub -t "temperatur" -m "24 Grad"

Im ersten Fenster erscheint nun die Nachricht

24 Grad

So what?

Was machen wir jetzt damit? Sieht ja erstmal unspektakulär aus, aber in Wirklichkeit läuft auf dem Computer nun ein MQTT-Broker! Beide Terminal-Fenster repräsentieren MQTT Teilnehmer. Willkommen im Internet der Dinge! Der Publisher könnte das Arduino mit dem Temperatursensor sein, der Subscriber ist vielleicht eine Applikation, die auf einem Raspberry Pi läuft und auf einem Wanddisplay die Temperatur anzeigt. Fehlt nur noch ein steuerbares Thermostat. (Auf dem Raspberry Pi könnte man übrigens auch gleich einen lokalen Broker laufen lassen, aber das nur am Rande.)

Schema, wie MQTT mit Sensor, Thermostat und Steuergerät funktioniert

Coming soon: Arduino sendet Daten zu unserem lokalen MQTT-Broker Mosquitto.

Ampel mit Arduino für Autos und Fußgänger

Arduino Ampel Schaltung mit Button für Fußgänger

Eine Ampel mit Arduino bauen ist ganz einfach. Es gibt vier Ampelphasen: Grün – Gelb – Rot – Rot-Gelb.

Ampel Schaltung

Arduino Schaltung Ampel Verkehrsampel

Code

Funktionsweise

Im Grunde ist das ein erweitertes blink() Beispiel. Als erstes deklarieren wir drei Pins als Outputs. Hier werden die LEDs (mit Vorwiderstand 220 Ohm) angeschlossen. Bei jeder Ampelphase schalten wir LEDs ein (HIGH) oder aus (LOW). Dazwischen warten wir einfach mit delay(wartezeit) eine gewisse Zeit ab.

Fußgängerampel

Jetzt erweitern wir die Schaltung durch einen Button und zwei weitere LEDs für die Fußgängerampel. Wird der Button gedrückt, schaltet sich unsere Ampelanlage auf Grün für die Fußgänger.

Ampel Schaltung mit Button

Arduino Ampel Schaltung mit Button für Fußgänger

Code

Funktionsweise

Wir erweitern den Code durch die Deklaration von zwei LEDs als Outputs und einem Button als Input. Die Ampelphasen bleiben gleich, werden jedoch durch die Ausgabe der Fußgänger LEDs erweitert. Die Ampel ist für die Autofahrer immer grün bis der Button gedrückt wird. Diese Prüfung lässt sich leicht mit der if-Abfrage realisieren. Die Funktion digitalRead(fgButtonPin) liefert immer HIGH solange bis der Button gedrückt wird. Ist der Button gedrückt, liefert die Funktion LOW. Mehr Informationen dazu im Kapitel Digital In.

Alle Grafiken mit Fritzing erstellt.

Arduino zu MySQL via Wifi

Arduino Wifi MySQL

In diesem Beispiel zeige ich, wie sich Daten vom Arduino per Wifi (Wlan) in einer MySQL Datenbank speichern lassen und per Browser anzeigen lassen.

Download: Dateien auf GitHub

Ich verwende ich einen DTH22 Temperatur- und Luftfeuchtigkeitssensor. Dessen Daten werden von einem Arduino / Genuino MKR1000 ausgelesen und per Wifi und HTTP GET an eine bestimmte Internetadresse geschickt. (GET hat natürlich Vor- und Nachteile. Es ist einfach zu benutzen, aber über die Browserzeile auch leicht zu manipulieren.) Ein PHP-Script nimmt diese Daten und speichert sie in eine MySQL-Datenbank.

Arduino MKR1000 mit DHT22

Ich gehe davon aus, dass es bereits eine existierende MySQL-Datenbank gibt. Diese kann auf dem eigenen Computer (localhost) oder im Internet sein. In dieser Datenbank muss man nun eine Tabelle mit dem Namen dht001 anlegen.

Jetzt benötigt man die Login-Daten für die MySQL-Datenbank und muss diese in den beiden Dateien writeData.php und showData.php anpassen: Servername, Benutzername, Benutzerpasswort, Datenbankname. Ich bin Kunde von 1und1 und bei mir haben diese Daten folgendes Format:

Nun kann man beide Dateien auf den Webserver laden. Den Pfad sollte man sich merken, z.B. www.meineURL.de/dht001

Jetzt kann man die Arduino-Datei WifiWebClientDHT22.ino öffnen. Hier muss als erstes der WLan-Name und das WLan-Passwort gesetzt werden:

Danach muss die Ziel-URL angegeben werden. Hier nur die Adresse ohne Pfad, also nicht www.meineURL.de/dht001 sondern nur www.meineURL.de:

In der Methode void sendData() muss jetzt noch die Serveranfrage an zwei Stellen geändert werden. Im GET Aufruf muss nun der Pfad zur Datei angegeben werden:

Und die Host-Adresse muss noch einmal angegeben werden:

Nun kann die Datei auf das Board übertragen werden. Im Seriellen Monitor kann man überwachen, ob es funktioniert.

Ist alles richtig gelaufen, kann nun per Browser die Datei www.meineURL.de/dht22/showData.php aufgerufen werden und sollte ein Diagramm von Temperatur und Luftfeuchtigkeit anzeigen.

Arduino MKR1000 Diagramm

Alle Dateien stehen natürlich auf GitHub zum Download bereit. Im Ordner Server-Files finden sich die drei Dateien, die auf den Webserver kopiert werden müssen, im Ordner Arduino-Files befindet sich der Arduino-Code. Download: Dateien auf GitHub

Nachwort:
Bei diesem Beispiel geht es mir darum, zu zeigen, wie Daten per Wifi gesendet werden können und wir man eine MySQL-Datenbank verwendet, um diese zu speichern. Da Cloud-Services ziemlich viel Geld kosten können, ist das doch eine recht preiswerte Alternative dafür. Und nun viel Spaß damit.

Benötigte Bauteile:
Genuino MKR 1000
DHT22

Wie steuert man einen Motorfader mit Arduino?

Arduino Motorfader

Motorfader sind im Grunde Potentiometer mit eingebautem Motor. Sie lassen sich also per Software in eine bestimmte Position bewegen. Einsatz finden sie z.B. in professionellen Mischpulten, wo sie sich per Computer in voreingestellte Konfigurationen fahren lassen.

Sie sind auf jeden Fall ziemlich coole Bauteile und bestens geeignet, um per Arduino gesteuert zu werden.

Schaltung

Motorfader Arduino Schaltung

Die Schaltung besteht aus einem Motorcontroller (L293D), dem Motorfader (dargestellt als Fader und Motor), dem Arduino und einem Button.

Der Button ist optional und wird nur für dieses Beispiel benötigt. Er ist mit dem GND und dem digitalen Pin 8 verbunden. Da für dieses Beispiel ein interner Pullup-Widerstand verwendet wird (pinMode(button, INPUT_PULLUP);) wird kein Hardware-Pullup-Widerstand benötigt.

Der Motorcontroller ist mit den Pins 5 und 6 verbunden. Hier wird über die Drehrichtung des Motors entschieden. Der Enable Pin ist mit dem digitalen Pin 3 verbunden. Über ihn wird der Motor an- und ausgeschaltet. Weitere Informationen finden sich hier: …

Der Fader wird einfach an Plus, Minus und einen analogen Input geschaltet.

Code

Hierbei handelt es sich nur um einen Besipielcode. Wir wollen fünf verschiedene Positionen anfahren. Da das Potentiometer via Analog In Werte von 0 bis 1023 ausgeben kann, müssen auch die Positionswerte in diesem Wertebereich liegen.

Code Erklärung

Der Wechsel von einer zur anderen erfolgt über das Drücken des Buttons:

Der Wechsel selbst dauert natürlich etwas, da sich der Motor ja von der einen in die andere Position bewegen muss. Das lösen wir mit einem einfachen Timeout:

Jetzt fragen wir, ob der Wert des Faders größer, kleiner oder im Zielbereich liegt.

Sollte der Motorfader jetzt hin und herzucken, ist der Zielbereich zu eng gewählt und sollte erweitert werden.

Anmerkung

Auf jeden Fall sollte dieser Sketch vorsichtig getestet werden. Es ist gut möglich, dass der Motor anders herum gepolt werden muss, weil er sich falsch herum dreht. Das lässt sich am einfachsten durch das Tauschen der Kabel des Motors realisieren.

Bezugsquellen

Motorfader kann man z.B. hier bei Amazon kaufen:

Video

Hier habe ich mal ein Videotutorial zum Motorfader gemacht

WS2812 – Der einfachste Weg, viele LEDs mit Arduino steuern

Arduino und WS2812 LED Strip

Bei den WS2812 LEDs handelt es sich um adressierbare RGB-LEDs. Sie verfügen über einen integrierten Chip und belegen daher nur einen einzigen digitalen Output des Arduino-Boards.

Wenn man LEDs mit Arduino steuern möchte, dann stößt man schnell an die Grenzen der verfügbaren Kanäle. Gerade RGB-LEDs benötigen jeweils gleich drei wertvolle analoge Kanäle (rot, grün, blau).

Die WS2812-LEDs bieten dafür eine elegante Lösung. Sie verfügen über einen integrierten Controller. Ein Datensignal vom Arduino-Board bestimmt dann, in welcher Farbe der Controller die LED leuchten lassen soll. Darüber hinaus lassen sich viele WS2812-LEDs hintereinander schalten.

WS2812 LEDs

WS2812 Arten
Jede LED mit WS2812 Controller verfügt über vier Anschlüsse. 5V+, GND, DI und DO. DI steht für Data In, DO für Data Out. Es gibt unterschiedliche WS2812 Strips und LEDs. Die Belegung der Anschlüsse kann variieren.

Stromversorgung

Arduino und WS2812 LED Strip
Zuerst sehen wir uns die Stromversorgung an. Jede WS2812 LED benötigt bis zu 60mA. Es ist also ratsam, ein Netzteil zu verwenden. Dieses Netzteil sollte mit einem Elektrolyt-Kondensator (1000uF, 6,3V) unterstützt werden. Der GND des Netzteils und der GND des Arduinos müssen verbunden werden.

Datenanschluss

Nun kann man einfach einen digitalen Kanal des Arduinos über einen Widerstand (300 – 500 Ohm) mit dem Din der ersten LED verbinden. Ihr Dout wird dann wiederum mit dem Din der nächsten LED verbunden usw. Der Widerstand ist nur vor der ersten LED nötig.

Funktionsweise


Über einen digitalen Pin des Arduinos werden Farbinformationen in einer Sequenz übertragen. Die erste LED nimmt den ersten Farbwert und leuchtet entsprechend. Die restlichen Informationen werden über den DO-Pin an die nächste LED übertragen.

Code

Wir nutzen einfach die NeoPixel-Library von Adafruit. Man kann sie von hier (https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation) herunterladen und sie muss ins Arduinoverzeichnis in den Unterordner libraries kopiert werden. Das Verzeichnis muss von Adafruit_NeoPixel-master auf Adafruit_NeoPixel umbenannt werden. Startet man nun die Arduino-Software neu, findet man unter Datei>Beispiele>Adafruit NeoPixel>simple.

Jetzt kann man einfach NUMPIXELS auf die Menge der LEDs einstellen, wie man verwenden will. Über den Befehl

lässt sich nun jede gewünschte Farbe (pixels.Color(255,255,255)) auf jede LED (ledNumber – Position der LED in der Reihe) anwenden.

Ich empfehle, sich auch mal das Beispiel>strandtest anzusehen. In diesem Beispiel sind schon ein paar Animationsfolgen eingebaut.

Woher bekommt man die Bauteile?

Kaufen kann man NeoPixel direkt bei Adafruit und man findet auch einiges bei Amazon.

In diesem Beispiel habe ich diese LEDs verwendet.

Übrigens: Die WS2812 LEDs gibt es auch als 5mm LEDs. Die Pin-Belegung ist DI, 5V+, GND (längstes Beinchen), DO.
ws2812 Anschluss Arduino NeoPixel

Inspiration

Vor einiger Zeit habe ich mal ein Glowboard mit WS2812 LED-Strips ausgestattet. Hier das Video dazu:

Referenzen

NeoPixel Best Practices
NeoPixel Library Installation

Funkübertragung von Messwerten mit dem RF Link Modul

RWS-371 RF Modul

Das RF Link Modul (Receiver und Transmitter) aus der RWS-371-Serie ist ein ziemlich günstiger Weg, Signale kabellos über kurze Distanzen zu übertragen. Dieses Beispiel zeigt, wie man es verwendet. Als Transmitter kannst Du die Module TLP 434, 434-A oder 916-A, als Receiver die Module RLP 434, 434-A, 916-A oder 916-F verwenden.

Die Funktionsweise der Module ist sehr einfach. Wenn der Daten-Pin des Sendemoduls getriggert wird, sendet es ein Signal. Der Empfänger empfängt es und schickt ein Signal an einen Pin des Mikrocontrollers.

Damit man mit dieser Funktion etwas Sinnvolles anstellen kann, werden wir die VirtualWire Bibliothek von Mike McCauley verwenden, die es uns ermöglicht, komplexe Daten zu übertragen.

Die Bibliothek kannst Du Dir von dieser Seite herunterladen. Sie muss in den libraries Ordner im Arduino-Benutzerordner kopiert werden. Danach musst Du die Arduino IDE erneut starten.

Ich schlage vor, dass Du die Schaltung einfach nachbaust und die Programme auf die beiden Microcontroller überträgst. Der Code ist ziemlich selbsterklärend: Sechs Analoge Inputs des Sendenden Mikrocontrollers werden ausgelesen und mittels RF Link Modul verschickt. Der empfangende Mikrocontroller sendet die empfangenen Daten dann an die serielle Schnittstelle. Mit dem Seriellen Monitor der Arduino-Software kann man sich die Daten ansehen.

Circuits using Arduino UNO

RF Link Modul mit Arduino

Circuits using the Teensy 3.1

RF Link Modul mit Teensy

Code für den Sender

Code für den Empfänger

Arduino

RF Link Modul mit Arduino

Teensy

RF Link Modul mit Teensy

Montage auf Breadboard. Für den Versuchsaufbau teilen sich beide Controller eine Stromquelle. Das ist natürlich nicht nötig.