Ansteuerung eines OLED-Displays via I2C

Ich finde ja, ein Roboter der etwas auf sich hält, benötigt ein Display. :) Nicht nur, dass es „was hermacht“, es ist auch hervorragend zum Anzeigen wichtiger Informationen oder zum Debuggen hilfreich.

Der Einfachheit halber entschied ich mich beim minibot für ein kleines und günstiges OLED-Display, welches via I2C angesteuert wird. Damit kann es sehr einfach für einen Raspberry Pi, als auch für einen Arduino genutzt werden. Die Auflösung des LCD beträgt 128×64 Pixel und es ist ganze 0,96″ groß – für meine Zwecke aber völlig ausreichend. Aber Vorsicht: Es wird nicht immer die gleiche Version der Platine geliefert. Manchmal sind + und – je nach Lieferung vertauscht (aber stets korrekt beschriftet)!

Es ist übrigens ein grafisches Display. Das bedeutet, man kann nicht nur Text, sondern auch Bilder anzeigen oder selbst Linien, Kreise etc. zeichnen. Für diesen Zweck gibt es zwei fertige Bibliotheken, für die Adafruit mal wieder ganze Arbeit geleistet hat!

Besser wäre es gewesen, ein Original Adafruit-Display zu kaufen, denn diese stellen mal wieder eine super Anleitung zur Ansteuerung zur Verfügung.

Und das Ganze hat dann auch mal auf Anhieb funktioniert – sogar mit eigenem Font:

minibot - hello world
minibot – hello world

 

Debugging minibot

Manchmal sieht etwas so einfach aus: Schaltplan skizzieren, alles aufbauen und los geht’s. Das dachte ich auch bei meinem neuen Roboter dem minibot. Aber leider bewegten sich die Motoren meines kleinen Bots kein Stück.

Lange suchte ich den Fehler in der neu erstellten Test-Software, die ich (erstmals) in Python programmierte. Insbesondere, da das Monster Moto Shield zur Geschwindigkeitsregelung der Motoren PWM (Pulsweitenmodulation) benötigt. Diese wird mit dem verwendeten Python-Modul GPIO per Software erzeugt. Zum Mitmachen und Suchen des Fehlers hier einmal der verwendete Sourcecode:

Debugging minibot weiterlesen

Abschluss der Verkabelung des minibot

Wie gestern auf Twitter angekündigt, ging es weiter mit der Verkabelung meines neuen minibot. Und das konnte endlich abgeschlossen werden! Der aktuelle Stand soll natürlich wie immer hier dokumentiert werden. Und warum mich ein Nicht-Rastermaß sehr genervt hat, sieht man auch später. Aber der Reihe nach.

Zwei Schaltregler - leider unterschiedlich groß
Zwei Schaltregler – leider unterschiedlich groß

Abschluss der Verkabelung des minibot weiterlesen

Neues Jahr, neuer Bot – minibot

Ja, wie das so mit Nachwuchs ist. Man findet erst mal weniger Zeit, für sich und seine Hobbys. Darunter leidet leider auch diese Seite etwas, weil die Prioritäten (hobbymäßig) auf meinen Podcasts Robotiklabor und Reich & Knapp liegen.

Nun war es mit dem letzten Bot irgendwie nicht so richtig weitergegangen und er war ja nun auch wieder etwas groß geraten. Außerdem wollte ich mich bereits seit langer Zeit an ROS (Robot Operating System) wagen.
Der Focus wandert also aktuell etwas weg vom Hardwaredesign, hin zu einer Arbeit bzw. Umsetzung mit bereits existierenden Software-Bibliotheken/-Komponenten. Und mit ROS muss man das Rad nicht komplett neu erfinden, so wie ich es aus Neugierde und Spaß mit der bisherigen direcs-Software bisher tat. Mit allen Vor- und Nachteilen, die letzteres so mit sich brachte.

Ich habe mich nun also in 2017 für ein sehr kleine, fertige Fahr-Plattform entschieden, den RP6 von Conrad – allerdings nur für das nackte Fahrgestell.

Oben drauf soll eine einfach Platine zur Verkabelung und Montage der Sensoren und Elektronik montiert werden. Zur Verwendung kommen voraussichtlich folgende Komponenten

  1. Ein Raspberry Pi („Raspi“) – das Hirn des Roboter.
  2. Ein Hokuyo URG-04LX-UG01 Laserscanner – der vorerst einzige Sensor des Roboters.
  3. Ein Sparkfun Monster MotoShield – zur Ansteuerung der beiden Motoren.
  4. Update: Ein Adafruit DC & Stepper Motor HAT for Raspberry Pi – Mini Kit – zur Ansteuerung der Motoren per I2C.
  5. Ein 0815-Schaltregler – zur Erzeugung der notwendigen 5V-Spannung für den Raspi.
  6. Ein Akku – die Stromversorgung für den Roboter.

Ach ja, heißen soll der Roboter – wie immer sehr kreativ ;) – „minibot„.

Wie das Ganze bisher aussieht? Hier wie immer die aktuellen Fotos. Ich bin gespannt über euer Feedback!

minibot mit Schrauben als Platinenhalter
minibot mit Schrauben als Platinenhalter

Neues Jahr, neuer Bot – minibot weiterlesen

Test der RGB-LEDs mittels PWM

 Nachdem die Motoren des Roboters erfolgreich mit dem noch recht neuen STM-Board über PWM angesteuert wurden, musste nun noch ein Test mit den RGB-LEDs erfolgen. Hier war nicht die Frage, ob PWM funktioniert, sondern viel mehr, ob die 3,3 Volt Pegel einwandfrei mit den Optokopplern funktionieren. Die Optokoppler sind nämlich hier nötig, da die RGB-LED-Streifen mit 12 Volt angesteuert werden. Das Ergebis war aber erfreulich:

  

Übrigens die im Bild verwendeten Kabel zum Verbinden des STM-Boards habe ich bei Watterott bestellt.

Und wen es interessiert, wie die LED-Streifen angesteuert werden:

Motortest mit STM-Board über die serielle Schnittstelle

 Mittlerweile wurde der Sourcecode vervollständigt, um alle vier Motoren per PWM und mit den jeweiligen Portbits anzusteuern. Hierzu die Fotos wo die Ansteuerung über den seriellen Port erfolgt:

Hier im linken Bild rechts unten sieht man die (rote) Platine, welche die USB-Verbindung zum steuernden Rechner darstellt. Von hier aus werden (gerade in einem Terminal-Programm) die seriellen Befehle gesendet. Das USB-Kabel am STM-Baord dient nur zur Stromversorgung (und zum Flashen):

   

Erste Tests mit dem STM-Board und dem Roboter

 Die Arbeit mit dem STM-Board macht Fortschritte: Beim letzten Update wurde der Code für das ARM-Board derart aktualisiert, dass 2 Bits als Ausgänge definiert wurden. Diese wurden in fliegender Verdrahtung mit einander verbunden, so dass die Eingänge des Motorcontrol-Boards direkt am STM32F4-Board angeschlossen wurden. Interessant ist hierbei, dass das Motor-Board – entgegen den 3,3 Volt des STM-Boards –  5 Volt-Logik aufweist. Das geht jedoch in dieser Richtung, da die 3,3 Volt (HIGH) am Ausgang auch als HIGH vom Motorcontroll-Board akzeptiert werden weil sie innerhalb der Spezifikation liegen. Und so sieht das Ganze dann aus:

Nun wurde das das STM-Board per USB mit dem MacBook verbunden, ein Terminal-Programm gestartet, welches Befehle an das STM-Board sendet:

   

 

 
Und: Es fuktioniert! Der Motor 1 dreht in beide Richtungen entsprechend der seriellen Befehle – wie zuvor mit dem Atmel-Board. Und im Sourcecode wurden lediglich die neuen ARM-Ports angegeben und die Befehle zum Bit-Setzen und -Löschen angepasst. Als nächstes muss geprüft werden, wie bei dem ARM-Board PWM funktioniert, damit z.B. die Motorgeschwindigkeit Richtung Motorcontrol-Board „gesendet“ werden kann.
 
Das Gute an dem Motorcontrolboard: Die benötigte PWM-Spannung Vpwh kommt hier ebenfalls mit 3,3 Volt klar (min. 3,25 Volt). Die Versorgungsspannung des verwendeten Motortreiber ICs VNH2SP30-E benötigt jedoch mindestens 5,5 Volt und maximal 16 Volt – aber diese stehen auf dem Bot ja ohne weiteres zur Verfügung.