Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Quellcode
Hochschule Karlsruhe Logo Informationstechnik-Labor
eMalRob-Anpassung
Sommersemester 2020
Johannes Fischer
Maximilian Fischer

Quellcode

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

  Mit Unterstützung von Prof. J. Walter Sommersemester 2020