Bluetooth: Arduino mit iOS & Android (RC Car)
Von Werner Gundacker am 19.09.2017
Im Zuge meines Projektes für die Masterklasse Mobiles Internet habe ich jeweils eine iOS und eine Android Applikation entwickelt die es ermöglicht ein kleines Arduino-Auto fernzusteuern. Die Verbindung zwischen Smartphone und Arduino wurde dabei per Bluetooth hergestellt. Das Auto soll mittels der Lagesensoren des Smartphone gesteuert werden: Beschleunigen, Bremsen und lenken. Weiters sollen mittels Buttons die Lichter ein-/ausgeschalten und die Hupe betätigt werden können. Wenn noch Zeit bleibt soll die App auch in ein entsprechendes Design gepackt werden.
Erster Versuch Android und Bluetoothmodul HC-06 (und HM-10)
Da ich bereits bei meiner zweiten Bachelorarbeit eine Bluetooth-Verbindung zwischen einem Smartphone und einem Arduino herstellen musste, war mir bereits bewusst das diese Verbindung, zumindest bei iOS Geräten, nicht mit jedem Bluetooth-Modul funktioniert. Ich habe mich trotzdem dazu entschlossen zuerst das Bluetoothmodul HC-06 in Verbindung mit einem Samsung Galaxy S5 Mini zu verwenden. Als erstes sollte eine einfache LED mit einem einfachen Button ein-/ausgeschalten werden. (Arduino Aufbau – siehe Bild)
Mit dem Android Gerät hat das auch mehr oder weniger gut funktioniert, die LED konnte ein- & ausgeschalten werden, jedoch war eine spürbare Verzögerung vorhanden, welche bei der Fernsteuerung eines Autos nicht sehr von Vorteil ist. Zudem hat die Verbindung mit dem Apple iPhone 5s, wie befürchtet nicht funktioniert. Das liegt daran das Apple nur bestimmte Bluetooth Profile unterstützt. Nach meiner Recherche ist aber die Verbindung mit einem Bluetooth HM 10 Modul möglich, dabei handelt es sich um ein Low Energy Modul, welches jedoch 1:1 wie das HC-06 auf der Arduino Seite funktioniert. Daher musste ich “nur” die beiden nativen Applikationen auf das Bluetooth Low Energy Modul umbauen, da die Verbindung hier etwas anders funktioniert, genaueres könnt ihr aus den beiden Dokus entnehmen.(Android: https://developer.android.com/guide/topics/connectivity/bluetooth.html, iOS: https://developer.apple.com/bluetooth/)
Nach dem Umbau standen mir zwei gleiche Apps zur Verfügung die jeweils die LED mit Hilfe des HM 10 Moduls ein- & ausschalten konnten. Die Verzögerung war aber leider immer noch vorhanden. Dieses Problem konnte ich zu dieser Zeit jedoch noch nicht lösen, da ich nicht wusste woher diese Verzögerung kam, daher habe ich einfach mal begonnen die beiden Applikationen sowie das Arduino Auto fertig aufzubauen.
Funktionstest und Fehlersuche
Nachdem das Android Auto fertig aufgebaut und programmiert war und den ersten Funktionstest bereits bestanden hat, wurden die beiden Apps zuerst prototypisch fertig gestellt. Es war möglich das Auto mit beiden Smartphones zu steuern, jedoch war das Problem mit der Verzögerung trotzdem noch nicht gelöst. Beim Testen kam auch noch ein weiteres Problem dazu, der Servo für die Lenkung ruckelte und zuckte sehr stark, obwohl das Smartphone nicht bewegt wurde. Da die beiden Probleme sowohl beim Android- als auch beim iOS-Gerät auftraten, nahm ich an das der Fehler beim Arduino und dessen Programmierung liegt.
Nach einer ausführlichen Recherche und einigen Änderungen am Arduino-Programmcode, konnte ich den Ursprung dieser Probleme ausmachen. Ich habe das Bluetooth-Modul mit Hilfe der Library SoftwareSerial angesprochen, da dies zwei Vorteile mit sich bringt. Erstens muss das BT-Modul beim Programmieren des Arduinos nicht immer abgesteckt werden und zweitens kann der Serial Monitor zum Debuggen genutzt werden. In einem Artikel stand jedoch das diese Library zu ähnlichen Problemen führen kann, welche bei mir auftraten. Lange Rede kurzer Sinn, Library entfernt und die Standard Serielle Verbindung auf Arduino Port 0 und 1 verwendet – Siehe da, Probleme gelöst! (:
Design und Fertigstellung der Applikationen
Da jetzt die Steuerung einwandfrei mit beiden Smartphones funktionierte, wurden die iOS Applikation noch in ein entsprechendes Design gebracht. Die Android Applikation wurde auf Grund von Zeitmangels nicht mehr verändert und ist somit nur als Prototyp verfügbar.
(Testvideo folgt…)
The comments are closed.