Bemerkung: Alle Programme können im
Anhang heruntergeladen werden!
Treiberanpassung Zur Programmierung des neuen Motortreibers wurde auf die
letzte
aktuelle Softwareversion des alten Fischertechnik-Malroboters
zurückgegriffen. Hierbei werden die neuen
Hardwarekonfigurationen in der ft_ESP32_IOobjects.h und
ft_ESP32_IOobjects.cpp durchgeführt. Es wurden folgende
Änderungen vorgenommen:
Wie im Kapitel
Portbelegungsplan zu sehen
ist, besitzt der neue Treiberbaustein keine eindeutigen Richtungs-
bzw. Geschwindigkeitspins, wie es beim alten Baustein der Fall war.
Deshalb wurden neue globale Arrays mit den Ansteuerpins der
jeweiligen Motoren in der Header-Datei hinzugefügt:
Abbildung: Definieren der globalen Arrays in der
.h-Datei
Die cpp-Datei musste entsprechend angepasst
werden. Hierbei wurde nur die Methode setValues() der
Motorklasse bearbeitet, da hier die Ansteuerung des Treibers
erfolgt:
Abbildung: Ansteuerung der Treiberpins in der .cpp-Datei
(fehlerhaft)
Aufgetretenes Problem: Beim Testen des abgeänderten Quellcodes ist
folgendes Problem aufgetreten. Als der Malroboter mit Cody++
grafisch programmiert wurde, führte er das Programm wie vorgesehen
durch. Als aber das Programm durchgelaufen war, drehte sich ein Rad
mit voller Geschwindigkeit rückwärts, obwohl die Motoren des
Malroboters softwareseitig gestoppt wurden. Wird der nebenstehende
C++ Code kopiert, in die Arduino IDE eingefügt und auf den ESP32
geflasht, führte der Malroboter das Programm wie vorgesehen durch.
Nach Ablauf des Programms bleiben auch beide Räder stehen. Das
Problem ist in folgendem Video zu sehen:
Video
Beheben
des Problems: Durch Anwenden des analogWrite()-Befehls
(anstelle der ledc-Befehle) konnte das Problem aus
unerklärlichen Gründen behoben werden. Dabei musste die Bibliothek
analogWrite.h in der Header-Datei eingebunden werden.
Der abgeäderte Code ist im Folgenden zu sehen :
Abbildung: Ansteuerung der Treiberpins in der .cpp-Datei
(funktionsfähig)
Winkelsensorimplementierung
Zur Implementierung des BNO055-Winkelsensors wurde ebenso auf die
letzte
aktuelle Softwareversion des alten Fischertechnik-Malroboters
zurückgegriffen. Hierbei wurden vorallem die OledHandler.h
und OledHandler.cpp angepasst. Es wurden zunächst die
benötigten Bibliotheken für den Sensor in die Header-Datei
eingefügt.
Abbildung: Einbinden der benötigten Bibliotheken für den BNO055
Bemerkung: Es wurden folgende Bibliotheken von Github
verwendet:
https://github.com/adafruit/Adafruit_Sensor
https://github.com/adafruit/Adafruit_BNO055
In der cpp-Datei wurde
lediglich die
void cOledHandler::printDisplay(void * arg) adaptiert.
Hier wurde zunächst das Setup des Winkelsensors durchgeführt.
Abbildung: Setup des BNO055
Anschließend
wurden die Winkeldaten ausgelesen und am OLED-Display angezeigt.
Abbildung: Auslesen und Anzeigen der Winkeldaten
Appentwicklung Die
Beschreibung der Appsoftware ist in Kapitel
Softwaredoku zu finden. Im
Folgenden ist die Programmierung in der App Inventor 2
Umgebung dargestellt.
Abbildung: Start und Stop Scanning der BLE-Geräte
Abbildung: Auflisten der gefundenen Geräte und Verbinden
mit dem ausgewählten Gerät (Screen 2 wird erzeugt)
Abbildung: Bluetooth Verbindung trennen
Abbildung: Screen 1 wird erzeugt
Abbildung: Starten und Stoppen der Steuerung
Abbildung: Stift hoch und runter fahren (malen oder
nicht malen)
Abbildung: Auslesen der Beschleunigungsdaten und Senden
der Daten über BLE an den ESP32 (Motorsteuerung)
Im
Folgenden ist die Programmierung des ESP32 in der Arduino IDE
zu sehen.
Abbildung: Einbinden der benötigten Bibliotheken und
Deklarierung von globalen Variablen
Abbildung: Implemetierung eines Server Callbacks
Abbildung: Erstellen eines Servers, eines Service und dreier
Charakteristiken in der setup-Funktion
Abbildung: Verwerten der gesendeten Daten und Ansteuern
der Motoren in der loop-Funktion |