Sonntag, 24. August 2014

SRF02 Ultraschallsensoren am STM32F4-Discovery

Dieser Blog ist umgezogen: http://scholtyssek.org/blog/de/2014/08/24/srf02-ultraschallsensoren-am-stm32f4-discovery/

Der SRF02 Ultrasonic range finder ist ein Ultraschallsensor, der über nur eine Membran verfügt aber trotzdem als Tranceiver funktioniert. Dadurch ist der Sensor praktischerweise von seiner Bauart her sehr kompakt und eignet sich besonders für Einsatzbereiche, in denen es aus die Größe des Sensors ankommt. Der Sensor detektiert Hindernisse in einem Bereich von 16 - 6000 cm. Die benötigte Spannungsversorgung von 5 V erlaubt es, dass des Sensor an einer Vielzahl von  Mikroprozessoren direkt angeschlossen werden kann.
Der Sensor kann per serieller Leitung (UART) oder per i²c Bus (oder aus I2C Bus genannt) angesteuert und ausgelesen werden. Im Folgenden wird die Ansteuerung per I2C beschrieben, da dies den charmanten Vorteil hat, dass lediglich zwei Leitungen (SDA und SCL) auf dem Controller (auch bei der Verwendung mehrerer Sensoren) zur Kommunikation benötigt werden. SDA ist dabei die Datenleitung und SCL die Taktleitung. Komponenten am i²c Bus werden über eine eindeutige Adresse identifiziert. Im folgenden zeige ich beispielhaft den Einsatz von insgesamt vier SRF02 Ultraschallsensoren an einem i²c Bus, inklusive der vorhergehenden Konfiguration der eindeutigen Adressen. Als Mastercontroller wird ein ARM basierter STM32F4-Discovery (STM32F407VG) eingesetzt.

Sonntag, 17. August 2014

Xbox360 Controller C Integration

Dieser Blog ist umgezugen: http://scholtyssek.org/blog/de/2014/08/16/xbox360-controller-c-integration/

Heute habe ich ein Stück Code geschrieben, der es einfach ermöglicht, einen Xbox360 Controller  in ein C Programm zu integrieren. Der Code liest die Werte der Achsen und Knöpfe des Controllers aus und gibt diese Informationen auf dem Bildschirm aus. Das folgende Bild zeigt die Ausgabe dieser Informationen:



In diesem Fall wurden die Tasten "A" and "TL", welche die "top left" Taste ist, gedrückt. Das Projekt trägt den Namen xboxControllerClient und kann in meinem Repository unter https://code.google.com/p/scholtyssek-blogspot/ untergeladen werden.

Dienstag, 29. Juli 2014

Rigol DS1052D und Open Logic Sniffer

Dieser Blog ist umgezogen: http://scholtyssek.org/blog/de/2014/07/29/rigol-ds1052d-und-open-logic-sniffer/

Heute habe ich den Logic Analyzer des Rigol DS1052D ausprobiert und festgestellt, dass dieser die aufgezeichneten Signale nicht auswertet. Da es sich bei dem Oszilloskop um ein Gerät im unteren Preissegment handelt, ist das auch in Ordnung. Die gemessenen Signale können allerdings leicht exportiert und auf einem PC mit dem Open Source Tool Open Logic Sniffer ausgewertet werden. Damit das funktioniert, müssen diese im CSV Format exportiert und im Anschluss konvertiert werden. Die folgenden Schritte zeigen, dass es tatsächlich sehr einfach ist.



Sonntag, 27. Juli 2014

STM32F4 basierter Mecanum Roboter mit Odometrie

Dieser Blog ist umgezogen: http://scholtyssek.org/blog/de/2014/07/27/stm32f4-basierter-mecanum-roboter-mit-odometrie/

In den vergangenen Monaten habe ich mich in den STM32F4-Controller eingearbeitet, um ein (Roboter-)Projekt damit umzusetzen. Genauer gesagt, handelt es sich um einen Roboter, der über Mecanum-Räder (oder auch swedish-wheels) verfügt. Diese Räder zeichnen sich deshalb besonders aus, weil auf dem Außenring der Felge, Gummiwalzen im 45° Winkel angeordnet sind, welche sich passiv über den Untergrund abrollen. Dadurch verfügt der Roboter über einen weiteren Freiheitsgrad. Das bedeutet, dass der Roboter - trotz fehlender Lenkachse - alle Richtungen (X, Y und Θ) auf der Ebene erreichen kann und deshalb die maximale Bewegungsfreiheit hat. X und Y entspricht dabei Bewegungen in die die entsprechenden Richtungen und Θ bezeichnet die Drehbewegung des Roboters.

Der Roboter

Bei dem Roboter handelt es  sich um den Nexus 4WD. Dieser verfügt über vier Faulhaber Motoren, welche direkt mit Inkrementalgebern ausgestattet sind, (Ultraschall-)Distanzsensoren und einem Arduino Controller, auf dem auch direkt passende Motortreiber vorhanden sind. Die 12 V Gleichstrommotoren, wie aus die restliche Hardware werden über einen Akku versorgt, der mit einem gewöhnlichen Tamiya Stecker angeschlossen wird.
Da ich mich für den STM32F4 entschieden habe, wurden einige Modifikationen an dem Roboter durchgeführt. Insbesondere der Arduino-Controller wurde durch den STM32F4 ausgetauscht, was aber zur Folge hatte, dass die Motortreiber, welche fest auf der Platine des Arduinos verbaut waren, ebenfalls aus dem Roboter entfernt wurden. Deshalb musste eine neue Motorsteuerung mit entsprechenden Treiber (H-Brücken) entwickelt werden, damit die Motoren richtig angesteuert werden können. Zusätzlich zu den vorhandenen Sensoren und Aktoren, wurde der Roboter mit einem Gyroskop ausgestattet, damit die Orientierung, also die Drehbewegungen des Roboters, im Rahmen der Odometrie gemessen werden kann.


Die Abbildung1 und Abbildung2 zeigen den Roboter mit geöffnetem Chassis. Man kann die vier Mecanum-Räder erkennen, welche an den Wellen der Motoren befestigt sind. Außerdem sieht man - trotz der vielen Leitungen - die Hardwarekomponenten und den Akku. Abbildung2 stellt den Roboter noch einmal in der Vogelperspektive dar und Abbildung3 hebt die individuell nachgerüstete Hardware besonders hervor. 
Abbildung1: Nexus 4WD (Heckansicht)

Samstag, 12. Juli 2014

Yakindu Statechart Tools Arduino Integration

Dieser Blog ist umgezogen: http://scholtyssek.org/blog/2013/10/21/yakindu-statechart-tools-arduino-integration/

Die Yakindu Statechart Tools sind dafür prädestiniert, Systemverhalten als Statemachine zu beschreiben, um anschließend Quellcode aus dieser Beschreibung zu generieren. Der Code kann in Java, C oder C++ generiert werden. Wir wollten den Codegenerator dazu einsetzen, Quellcode für eingebettete Systeme zu generieren, deshalb haben wir und für den Arduino Uno als Plattform entschieden. Dafür haben wir das TrafficLight Beispiel modifiziert und etwas simplen glue code (also Verbindungscode zwischen der Hardware und dem Generat) geschrieben, um die timer und die I/Os des Controllers zu mappen. Außerdem haben wir eine Ampel mit LEDs auf einer kleinen Platine entworfen, welche die Signale des Arduinos repräsentiert. Im Anhang befindet sich ein eagle-Schaltplan, sodass diese Platine leicht nachgebaut werden kann.
Das Beispiel wurde direkt für den AVR ATMEGA328P-PU Prozessor entwickelt, da dieser sich auf dem Arduino Uno befinden. Es ist ebenfalls möglich, die Programmierbibliothek für den Arduino zu verwenden, um die Ampelsteuerung zu integrieren, allerdings haben wir uns bewusst dagegen entschieden, da wir zeigen wollen, dass wir eine ganze Prozessorfamilie unterstützen können, weil die eigentliche Implementierung losgelöst von dem Generat ist. Aus diesem Grund benutzt die Implementierung die AVR-Bibliothek direkt (avr-libc).