Arduino zu MySQL via Wifi

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?

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

Viele LEDs mit Arduino steuern – WS2812

Wenn man LEDs mit Arduino steuern möchte, stößt man schnell an die Grenzen der verfügbaren Kanäle. Wenn es RGB-LEDs sein sollen, geht das sogar noch schneller. Das Arduino UNO kann direkt nur zwei RGB-LEDs steuern, da diese jeweils drei analoge Kanäle brauchen (rot, grün, blau).

Abhilfe schaffen da LEDs mit integrierten Controllern, z.B. dem WS2812. Diese LEDs gibt es in unterschiedlichen Bauformen, von der 5mm LED bis zum LED-Streifen. Adafruit hat eine eigene Serie dazu entwickelt, die NeoPixel heißt.

LEDs

Arduino WS2812 LED 5mm
Jede LED mit WS2812 Controller verfügt über vier Anschlüsse. 5V+, GND, Din und Dout. Din steht für Data In, DO für Data Out. Bei den 5mm LEDs in diesem Tutorial ist die Pin-Belegung Din, 5V+, GND (längstes Beinchen), Dout.

Stromversorgung

WS2812 Stromversorgung
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

ws2812 Anschluss Arduino NeoPixel
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.

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:
WS2812 Produkte.

In diesem Beispiel habe ich diese LEDs verwendet:
WS2812 5mm LEDs

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

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.

Arduino Yún präsentiert von den Machern

Über das Arduino Yún hatte ich ja hier schon mal etwas geschrieben, aber in diesem Video kommen die Macher mal zu Wort. Massimo Banzi und David Cuartielles kündigen in diesem Video das nun veröffentlichte Board an. Kaufen kann man es z.B. bei Amazon: Arduino YUN

Das Board ist ein auf dem ATmega32u4 (Arduino Leonardo) basierendes Mikrocontroller Board, das zusätzlich über einen Atheros Prozessor verfügt. Auf ihm läuft die Linux Distribution Linino. Das Arduino Leonardo hat einen eingebauten Ethernet Adapter (RJ 45), WIFI Support, einen USB-A Port, 20 digitale Input/Output-Pins, wovon 7 als PWM Ausgänge und 12! als analoge Eingänge verwendet werden können. Angeschlossen werden kann das Arduino Yún über eine Micro USB Verbindung. Es hat einen ICSP Header.

Das Arduino Yún kann mit der laufenden Linux Distribution kommunizieren. Neben Linux Kommandos, kann man eigene Shell und Python Skripte schreiben und nutzen.

Laut einer Amazon-Rezension gab es anfängliche Probleme mit der Bridge-Software, die nun scheinbar behoben werden können.

Die offizielle Arduino Yún Seite könnt Ihr hier finden.

Mein Arduino Yún ist bestellt und ich werde natürlich berichten, was sich damit alles anstellen lässt.

Falls Ihr schon Ideen dafür habt, postet die bitte in den Kommentaren :-)

Temperatur und Luftfeuchtigkeit messen

Temperatur und Luftfeuchtigkeit messen – Schaltung mit Fritzing erzeugt

Temperatur und Luftfeuchtigkeit messen – Schaltung mit Fritzing erzeugt

Um Temperatur und Luftfeuchtigkeit zu messen, kann man den Sensor RHT03 (auch bekannt als DHT22) benutzen. Es handelt sich um einen vorkalibrierten Sensor, der über eine One-Wire Schnittstelle (MaxDetect), also eine Datenleitung mit nur einem Kabel, angesprochen wird. Der Sensor benötigt außer einem Widerstand keine weiteren Bauteile und arbeitet mit 5V. Legt man den Sensor mit den Gittern vor sich hin, ist der linke Pin der 5V+ Anschluss, der daneben der Datenpin, der noch mit einem Widerstand (4,7kΩ) mit 5V+ verbunden ist. Der ganz rechte Pin ist der GND. Pin 3 muss nicht weiter beachtet werden.

Die Programm-Bibliothek, die man benötigt heißt DHT sensor library. Am einfachsten lässt sie sich installieren, indem man im Menü auf Sketch>Bibliothek-Einbinden>Bibliotheken verwalten klickt. Oben im Fenster befindet sich ein Eingabefeld, in dem man einfach DHT eingibt. Jetzt kann man die DHT sensor library anklicken und auf Installieren drücken. (Mehr Infos dazu unter: Bibliotheken in Arduino installieren – Danke an Bernd für den Hinweis.)

Der Code hier funktioniert, jedoch kann man aus der Bibliothek noch mehr holen, wie z.B. Fehlerauswertung des Sensors. Wer sich dafür interessiert, soll mal in der Arduino-Software das Beispiel Datei>Beispiele>DHT sensor library>Serial öffnen.

Der Sensor kann nur alle ein bis zwei Sekunden ausgelesen werden und benötigt darüber hinaus eine Aufwärmphase von zwei Sekunden – dazu dient das Delay.

Liquid Crystal Displays

Arduino Liquid Crystal Display (LCD)

Arduino Liquid Crystal Display (LCD) – Schaltung mit Fritzing erzeugt

Liquid Crystal Displays (LCDs) können zur Textausgabe in Arduino-Projekten verwendet werden. Die meisten LCDs basieren auf dem HD44780 Chip von Hitachi und werden mit der Arduino-Library LiquidCrystal angesprochen.

Das Display kann im 4 oder 8 Bit Modus angesprochen werden. Im 4 Bit Modus benötigt man 4, im 8 Bit Modus 8 Datenkabel aus eben so vielen digitalen Pins des Arduino-Boards.

Das Display wird wie im Schaltbild gezeigt angeschlossen. Je nach Display gibt es einen Anschluss für die Hintergrundbeleuchtung und ein Potentiometer, um den Anzeigekontrast zu regeln.

Im Programm wird zunächst die Library ,die übrigens mit der Arduino-Software geliefert wird, eingebunden:

Nun wird das LiquidCrystal-Objekt mit dem Namen lcd angelegt. Die digitalen Outputpins, die man verwendet hat, werden als Parameter angegeben:

Im Setup wird die Displaykonfiguration übergeben. Die beiden Parameter stehen für die Zeichenanzahl einer Zeile und die Zeilenanzahl. In diesem Beispiel 16 Zeichen und 2 Zeilen:

Mit print lassen sich Nachrichten auf das Display schreiben.

Der Befehl setCursor legt fest, ab welchem Zeichen in der Zeile und in welcher Zeile der Text ausgegeben werden soll.

Der gesamte Code des Arduino-Beispiels (von D. Mellis und T. Igoe), dass unter Datei>Beispiele>LiquidCrystal>HelloWorld zu finden ist, sieht dann so aus:

Bleibt noch zu erwähnen, dass es auch andere LCDs gibt, die mit wesentlich weniger Pins auskommen, aber dazu ein anderes Mal.