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

WS2812 Arduino

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

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

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.

In diesem Beispiel habe ich diese LEDs verwendet.

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.

DHT22: Temperatur und Luftfeuchtigkeit messen

Temperatur und Luftfreuchtigkeit messen DHT22 RHT03 und Arduino

Der DHT22 (Amazon Produktlink) ist eine einfache und kostengünstige Möglichkeit, um Temperatur und Luftfeuchtigkeit zu messen. Es handelt sich um einen kalibrierten Sensor, der über eine One-Wire Schnittstelle (MaxDetect), also eine Datenleitung mit nur einem Kabel, angesprochen wird.

Beispiel-Schaltung des DHT22

Temperatur und Luftfeuchtigkeit messen mit dem DHT22 – Schaltung mit Fritzing erzeugt

Temperatur und Luftfeuchtigkeit messen – Schaltung mit Fritzing erzeugt

Der Sensor benötigt außer einem Widerstand (4,7kΩ) 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 hat keine Funktion und 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.)

Beispielcode

Dieses Programm liest Temperatur und Luftfeuchtigkeit aus und stellt sie auf dem LCD-Display dar. Der Sensor kann nur alle ein bis zwei Sekunden ausgelesen werden. Darüber hinaus benötigt er eine Aufwärmphase von zwei Sekunden.

Mit diesem Beispielcode lässt sich schon einiges anfangen. Die Bibliothek selbst bietet aber noch eine Reihe weiterer nützlicher Funktionen, wie z.B. der Fehlerauswertung des Sensors. Wer sich dafür interessiert, soll mal in der Arduino-Software das Beispiel Datei>Beispiele>DHT sensor library>Serial öffnen.

LCD – Liquid Crystal Displays

LCD – Liquid Crystal Display

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

Arduino Liquid Crystal Display (LCD)

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

Solch ein LCD-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. Es wird wie im Schaltbild gezeigt angeschlossen.

Je nach Display-Typ gibt es einen Anschluss für die Hintergrundbeleuchtung und ein Potentiometer, um den Anzeigekontrast zu regeln.

LCD Programm-Code

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 Output-Pins, 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:

Displays mit I2C Ansteuerung

LCD Display I2C

Bleibt noch zu erwähnen, dass es auch andere Displays gibt, die mit wesentlich weniger Pins auskommen. Sie verfügen über einen zusätzlichen Controller und lassen sich einfach per I2C Schnittstelle vom Arduino aus steuern. (Bei I2C handelt es sich um eine Datenverbindung, die Steuersignale zwischen verschiedenen elektronischen Komponenten ermöglicht.)

Link zum Produkt mit I2C Schnittstelle

Produktlinks

Zwei-Zeilen-Display 20×2, blau/weiß
Vier-Zeilen-Display 20×4, blau/weiß
Display-Arduino-Shield mit Navigationstasten

*Ich verwende die gebräuchliche Form LCD-Display, obwohl natürlich klar ist, dass das D für Display steht.

Abstandsmessung mit dem Sharp GP2Y0A21YK IR Entfernungssensor

IR Sensor Sharp
Sharp GP2Y0A21YK

Sharp Abstandssensor GP2Y0A21YK – Schaltung mit Fritzing erzeugt

Der Infrared Proximity Sensor – Sharp GP2Y0A21YK ist ein Infrarot-Abstandssensor. Er besteht aus einer Infrarot-LED und einem Phototransistor, der das von einem Objekt reflektierte Infrarot-Licht misst.

Der Sensor selbst verfügt über eine Steckbuchse für die man am Besten ein vorkonfektionierte Anschlusskabel verwendet. Das Anschließen selbst ist sehr einfach. Das mittlere Kabel wird mit dem GND und das rechte mit 5V+ verbunden. Das linke Kabel kann man einfach an einen analogen Input anschließen.

Wenn kein Infrarotlicht durch ein Objekt reflektiert wird, beträgt der Output des Sensors 0V. Das ergibt einen Analogen Input Wert von 0. Je näher sich ein Objekt vor dem Sensor befindet, desto höher wird der Analoge Input Wert. Er steigt bis ca. 630. Sobald ein Objekt dem Sensor zu nahe kommt (ca. 20cm), sinkt der Wert allerdings wieder.

Der Sensor ist preiswert und sehr einfach anzuschließen, jedoch liefert er keinen verlässlichen festen Abstandswert. Dieser ist von der reflektierenden Oberfläche abhängig. Auch können Infrarotquellen, wie Fernbedienungen, die Werte beeinflussen.

Sharp stellt den Sensor in unterschiedlichen Varianten mit unterschiedlichen Reichweiten her.

Und was kann man jetzt damit anstellen? Hier ein paar Beispiele:

»Fox in a box«:

Fox in the Box from Stephan Thiel on Vimeo.