Arduino und MATLAB im Internet der Dinge
Arduino ist eine Open Source Computing Plattform, bestehend aus Hardware und einer dazugehörigen Softwareentwicklungsumgebung. Die Hardware basiert auf einem I/O Board mit einem 8-bit Mikrocontroller und analogen sowie digitalen Ein- und Ausgängen. Zugehörige Softwarelibraries und Hardwarekomponenten werden von mehreren Herstellern angeboten und sind dank modularem Konzept weitgehend kompatibel. Wegen der begrenzten Leistungsfähigkeit des „kleinen“ Prozessors gibt es seit einiger Zeit auch verschiedene 32-bit Varianten des Mikrocontrollers.
Mit einem USB-Kabel, einem Arduino Board und der Entwicklungsumgebung kann bereits mit Programmieren begonnen werden. Durch die leicht verwendbaren Bibliotheken können auch Einsteiger schnell erste Erfolge beim Programmieren erzielen. Dieses Konzept ist aktuell sehr erfolgreich. So kommt es, dass immer mehr Hersteller die Technologie aufgreifen und Arduino-kompatible Hardware auf den Markt bringen (z.B. Intel mit dem Edison).
Auch Softwareanbieter springen auf diesen Zug auf und stellen Libraries zur Integration von Arduino in ihre spezifischen Programmierumgebungen zur Verfügung. So stellt auch MATLAB seinen Entwicklern Libraries zur Seite, welche die Einbindung von Sensoren und Aktoren über ein Arduino board unterstützen.
Beim initialisieren der Plattform wird eine von MathWorks gelieferte Firmware auf den Arduino geladen, welche Funktionen zum Ansprechen der angeschlossenen Sensoren und Aktoren für MATLAB bereitstellt. Mit dieser Möglichkeit kann über den Arduino bereits ein einfacher Regler implementiert werden, der mit einer Abtastfrequenz von bis zu 25 Hz läuft. Dabei gilt zu beachten, dass das Verhalten des Systems nicht Echtzeitfähig ist, spricht es werden keine Reaktionszeiten garantiert.
Folgendes Beispiel zeigt einen Scope der zyklisch den Analogeingang 8 vom Arduino Mega 2560 einliest und auf dem PC-Bildschirm grafisch als Kurve darstellt.
Für die Interaktion von MATLAB mit Arduino werden von der MATLAB-Library die folgenden Schnittstellen angeboten.
- AD-Wandler
- PWM
- Digitale Ein- und Ausgänge
- I2C und SPI Schnittstellen
Da die Codes für die Anbindung an MATLAB und die Firmware auf dem Arduino einsehbar sind, sollte es mit zusätzlichem Wissen über Arduino- und MATLAB-Programmierung möglich sein, weitere Schnittstellen oder Funktionen des Arduinos in MATLAB verwenden zu können.
Für eine Anwendung bei der es um genaue Zeiten geht oder hohe Abtastraten gefordert sind, ist ein Abtasten mit MATLAB und Arduino auf Grund der ungenauen Taktrate nicht geeignet. Für einfache Datenerfassungsaufgaben, wie beispielsweise das Aufzeichnen einer Temperatur über mehreren Tagen, eignet sich ein Arduino-Board geradezu ideal. Für schnellere Anwendungen wird im nächsten Abschnitt die Möglichkeit von Arduino in Verbindung mit Simulink aufgezeigt.
Simulink und Arduino
Mit dem Board Support Package von Simulink kann ein Arduino als Target für Simulinkmodelle verwendet werden. Dabei erhält man eine Rapidprototypingplattform mit allen Einschränkungen die so ein Arduino mit sich bring (Speicher, Rechenleistung, begrenzte IO’s…). Wer seinen Versuchsaufbau unter diesen Einschränkungen entwerfen kann, erhält ein sehr kostengünstiges System für Prototypen, das von den vielen Vorteilen von Simulink profitiert.
Mit diesem Vorgehen können Modelle mit harten Echtzeitanforderungen realisiert werden. Da einzig das Simulinkmodel auf dem Arduino läuft, werden Abtastzeiten von bis zu 1 ms erreicht. Damit lassen sich Modelle erstellen, die schnell und unabhängig von einem PC laufen.
Mit dem Ethernet oder WiFi-Shield kann das Simulinkmodell Daten im Netzwerk per TCP oder UDP senden und empfangen. Damit lässt leicht ein Sensornetzwerk realisieren, bei dem die Arduinos Messdaten über das Netzwerk an einen Host senden und dieser die Daten aufzeichnet und auswertet.
Das Beispiel zu diesem Anwendungsfall rechnet die Spannung die ein Temperatursensor liefert in eine Temperatur um. Das Sensorelement ist ein NTC-Thermoelement, das eine nichtlineare Kennlinie aufweist. Die Umrechnung erfolgt im Simulinkmodell, das aus mehreren mathematischen Operationen besteht. Da nur alle 60 Sekunden ein Messwert gesendet wird und somit eine Extremtemperatur verpasst werden könnte, werden jeweils die minimale und die maximale Temperatur mitgesendet.
Die Kennlinie des Temperatursensors (Abbildung 5) ist aus dem Datenblatt entnommen.
Für Anwendungen wie einem Webserver, der Messdaten von angeschlossenen Sensoren auf Abfrage zur Verfügung stellt, eignet sich die Programmierung in C/C++ besser. Einerseits existieren dafür bereits viele Beispiele und anderseits lassen sich ereignisgesteuerte Abläufe effizienter in C/C++ umsetzen. Wenn es jedoch bei der Anwendung um das Sammeln und Verarbeiten von Daten geht und diese über das Netzwerk gesendet werden sollen, hat man durch die Programmierung mit MATLAB/Simulink einige Vorteile.
Folgende Blöcke existieren in der Simulink Bibliothek für Arduino:
- Analoger Eingang
- Servo Ansteuern
- Digitale Ein- und Ausgänge
- PWM
- Senden und empfangen mit der seriellen Schnittstelle
- Standard Servo Read and Write
Zusammenfassung
Die angeführten Beispiele zeigen viele der Vorteile auf, welche der Einsatz von MATLAB und Simulink, in Verbindung mit Arduino mit sich bringt.
Es gibt jedoch auch Einschränkungen die je nach Anwendungsfall einen Einsatz dieser Technologie verunmöglichen. Zu diesen Einschränkungen gehören zum Beispiel die beschränkte Leistungsfähigkeit, die Eigenschaft dass das Modell zyklisch abgearbeitet wird oder die begrenzte Anzahl an Schnittstellen. Da Mathworks diese Low-Cost Plattformen noch nicht sehr lange unterstützt, könnte eine Verbreitung dieser Methode zu besserer Unterstützung durch Mathworks führen. Da MATLAB ein kostenpflichtiges Produkt ist, werden diese Möglichkeiten im Vergleich zu den realisierten Projekten von Arduinos ohne MATLAB wohl ein Nischendasein bleiben.
Link zu den Quellcodes: sourceArduino