Raspberry PI – selbstgedruckter Roboter

model

Neues Jahr – neues Projekt! Im Rahmen meines Studiums ist mal wieder eine Bastelei herausgefallen. Ein Roboter mit einem selbstgedruckten Gehäuse, basierend auf einem Raspberry PI  und dem PI Camera Modul. Die grundlegende Aufgabe, die dieser Roboter erledigen soll, ist das Finden eines farbigen Balls, den er in ein farbiges Tor bewegen soll. Dabei soll nur anhand einer einfachen Kamera navigiert werden.

Die eingesetzten Motoren sind zwei Schrittmotoren mit zwei ULN2003 Driver Boards, die es schon für unter 4€ bei Amazon oder Ebay gibt. Der Rahmen, die Räder und der Greifer sind alle mit OpenSCAD entwickelt und in einem Printrbot Simple mit PLA gedruckt. Die Software ist in Python entwickelt und bedient sich dem OpenCV Framework um eine farbige Objekt-Erkennung durchzuführen. Das folgende Video zeigt das einfachste Szenario, das der Roboter erfolgreich lösen kann:

Bei komplizierteren Positionierungen löst er zwar das Problem, jedoch gibt es da noch Optimierungsbedarf :) Außderm ist die OpenCV Verarbeitung zu langsam, was zu einer Wiederholrate von 3 Sekunden führt.

Nähere Informationen zur Bildverarbeitung, Entwicklung und Modellierung findet ihr bei Interesse in dieser Präsentation oder in dem zugehörigen Github Projekt.

roboter

Advertisements

feedpaper – Aktualisierendes Wallpaper für Android

logoDieses kleine Feierabendprojekt ist diese Woche neben dem Lernen für die Prüfungen entstanden. Ein Proof of Concept, wie Hintergrund Services in Android funktionieren, und wie man diese regelmäßig ohne geöffnete App im Hintergrund Dinge tun lässt.

Die Idee war einfach – Ich fand die aktuellen Bilder in dem Twitter Account von Alexander Gerst immer sehr spannend, und wollte mir die Aufnahmen der Erde aus der ISS bei jedem aktualisierten Post als Hintergrund Bild in meinem Smartphone einstellen. Das Ganze sollte da am besten automatisiert ablaufen, und somit ist diese App entstanden: https://github.com/stetro/feedpaper

Android Iconfeedpaper lädt in einem einstellbaren Interval einen bestimmten Twitter Feed herunter, schaut sich die ersten paar Tweets an und lädt den zuletzt geposteten Tweet mit einem Foto herunter und ersetzt das aktuelle Wallpaper.

Auch wenn die App nun im Play Store liegt, werden mit Sicherheit hier und da noch Kleinigkeiten zu tun sein. Es kann sich gerne jeder melden, der etwas findet oder etwas anpassen möchte.

screen1 screen2

Webradio aus nostalgischem FM Radio

iconNach meinem Auslandssemester in Finnland wurde es mal wieder Zeit ein neues Bastelprojekt zu starten. Ich habe auf unserem Balken ein schickes altes FM Radio gefunden und hatte die Idee daraus ein Webradio zu bauen. Der Raspberry PI mit seiner USB-Wlankarte ist da gerade richtig und wurde direkt als Webplayer getestet. Mit seiner I2C Schnittstelle konnte ich danach auch ein LCD Modul mit lcdproc ansteuern, wodurch die Programmierung der Anzeige deutlich einfacher ist. Das Radio besitzt noch 3 Potentiometer, die ich für die Bedienung nutzen wollte. Da der Raspberry PI aber keine Analog/Digital Schnittstellen besitzt, wurde ein weiteres Arduino Board für das Auslesen dieser Regler genutzt. Dieser Wandelt die Spannungen der Spannungsteiler in einen digitalen Wert um und bietet diese als slave Device über I2C an.

Hier schon einmal Bilder der ersten Installation:
Untitled

Zum Abspielen von Musik habe ich verschiedene python Skripte geschrieben oder angepasst, die entweder Webradio, Spotify, Google-Music oder lokale Musik auf dem Raspberry PI abspielen. Für die Lautsprecheransteuerung muss jedoch noch ein kleiner Verstärker zwischengeschaltet werden, welcher als Kit in verschiedenen Versandhäusern erhältlich ist.

Demnächst folgt noch ein Schaltplan, der Fortschritt mit dem Verstärker und die Software …

UPDATE:

Hier nun wie versprochen noch der Schaltplan, den ich für die Software die auf github zu finden ist genutzt habe.  Source Code

scheme

HTML5 Canvas und Websockets als Spieleumgebung

Screen Shot Ich habe mir am Sonntag erst einmal seit langem wieder einen Tag zum rumbasteln mit neuer Technik gegönnt. Ich wollte mir schon immer einmal WebSockets näher anschauen und bin dabei auf die Socket.io JavaScript library gestoßen welche sich ganz wunderbar mit expressJS (web application framework für node) kombinieren lässt. Die Idee war es ein kleines Multiplayer Spiel mit möglichst viel Datenübertragungen zu implementieren. Ein Spieleklassiker wie Asteroids, wie hier verwendet, war da ein gutes Beispiel und einfach in JavaScript zu implementieren, zumal das eigene Spielgeschehen hier nicht im Vordergrund stand. Die Oberfläche und Einzelspieler Implementierung habe ich mit AngularJS und Bootstrap umgesetzt um so schnell wie möglich zu einem Ergebnis zu kommen. Ein Spieler kann seinen Namen ändern, Astroid-like auf der Oberfläche herumfliegen und versuchen gegnerische Schiffe abzuschießen.

Die eigentliche Kommunikation über Websockets und die Verteilung der Daten als Broadcast an alle verfügbaren Clienten ist durch eine Art Pub-Sub in Socket.io wie folgt realisiert:

Das Frontend nutzt ein Angular Modul von Brian Ford „btford.socket-io„. Ich werde noch ein wenig damit herumspielen um einschätzen zu können ob solche live Übertragungen performant genug sind, um ein richtiges Multiplayer Spiel im Browser mit diesem Stack implementieren zu können.

Leider konnte ich wegen fehlenden Ports auf uberspace das Projekt nicht hosten. Ich habe jedoch ein kleines Screenmovie als Beispiel davon gemacht.

Quelltext: github.com/stetro/astroids

LED Coffee Table – Raspberry PI

42bdc09881e611e28b8322000a1f92ef_7Neuen Lötkolben zu Weihnachten bekommen und Semesterferien haben. Ideale Bedingungen um ein neues Bastel/Elektro Projekt zu starten. Vor zwei Wochen habe ich dann mehrere YouTube Videos für einen LED Coffee Table im Netz entdeckt und mich entschieden so einen in etwas abgespeckter Form nachzubauen. Ziel war außerdem das ganze als Low Budget Projekt aufzuziehen.

Die Software habe ich Python geschrieben und öffnet die SPI Schnittstelle als Filestream. In diesen schreibe ich die Farbinformationen in Schieberegister-Manier in die 25 PWM Controller der Lichterkette. Der Quellcode befindet sich auf github.com. Erste Module sind Game of Live mit dimmenden Farbwechseln, Snake mit 2 Tastern, Laufschrift welche alle ASCII Zeichen abdeckt und einem Menü um zwischen den Modulen wechseln zu können. (Siehe YouTube Video) Nicht wundern – der Code ist noch etwas Quick and Dirty ;-)

Stückliste:

  • 01,50 € – 2 Styroporplatten (1 x 10mm) (1 x 15mm) 
  • 20,00 € – LED Kette mit adressierbaren Bus von Adafruit (Ebay deutlich günstiger)
  • 20,00 € – maßgeschneidertes Acrylglas 550×550 30% Lichtdurchlässig (Ebay)
  • Raspberry PI (bereits vorhanden gewesen)
  • IKEA LACK Tisch 550×550 (bereits vorhanden gewesen)
  • 5V 2A Power Adapter (bereits vorhanden gewesen)

Zum Anschluss der LEDs an den Raspberry PI konnte die SPI Schnittstelle (RPi Low-level peripherals) genutzt werden. Die Stromversorgung des PIs muss hier auch über diese Schnittstelle erfolgen (Nicht über USB!) und kann parallel geschaltet auch die LEDs treiben. Sollte jemand Fragen haben oder eine ausführliche Bauanleitung benötigen kann er sich gerne bei mir melden :-)

Bestellt sind jetzt noch 2 Arcade Buttons die rechts und links an den Tisch eingelassen werden um die Steuerung des Tischs ohne SSH durchführen zu können.


 

Update (20.11.2013) element14 Blog Comment:

Hey, this project isn’t that big outlay :-) First of all you need this 25 LED Stript with WS2801 controllers. I bought them on ebay for 19€ ;-) In this strip of LEDs there is a 5-6 cm long wire for the SPI connection, you simply have to wire the beginning of the strip to the Pi’s SPI interface. I also used a single power source as u can see in this wiring diagram.

https://i1.wp.com/boblight.googlecode.com/svn/wiki/diagram.png

After i have done the connection, I started to try some programming, like simple light slides with python and the SPI interface. You can use it as a file when you have done the SPI setup.

spidev = file("/dev/spidev0.0", "wb")

You can also use something like this http://www.100randomtasks.com/simple-spi-on-raspberry-pi

Otherwise, take a look at my github project for this table :-)

My setup looks like this:

led_diagram

To setup two buttons on the side, I used two of the GPIO ports with a 10k pullup resistors!

I2C – HD44780 – Raspberry PI – LCD Display

Bildschirmfoto vom 2013-01-11 20:50:02Mal wieder eine neue Bastelei die ich hier festhalten möchte. Ich habe mir vor ein paar Tagen I2C Videos bei Youtube angesehen und mir danach direkt die I2C Porterweiterung und ein passenden Bildschirm (TC1602A-09) bei Pollin bestellt. Nach ein wenig Löten konnte ich das I2C Modul auch dank i2c-tools und i2cdetect direkt, unter einer mit Jumpern festgelegten Adresse, in Betrieb nehmen. Zunächst versuchte ich das smb python Modul mit eigenen „verfuschten“ Treibern zu nutzen. Da das jedoch sehr instabil war nutzte ich lcdproc mit dem LCDd Deamon. Dieser Deamon erlaubt es mir auch extern über das Netz Inhalte auf den Display zu bringen. Als nächstest ist ein Twitterfeeder o.ä. geplant. Sieht im Dunkeln auf jedenfall sehr schick aus!

IMG_20130111_184338

Update: Nachdem ich ein wenig mit den verschiedensten lcdproc python Apis Experimentiert habe, konnte verschiedene Clientlösungen bauen:

iTunes Anzeige für Mac OSX:

Twitter LCD Client (auf Raspberry selbst):

Raspberry PI – Twitter und Mail Notifier

Um auch endlich mal was mit dem Raspberry PI anzufangen hab ich mir ein kleines Projekt überlegt was mir über eine sehr helle RGB-LED aktuelle Nachrichten bei Twitter oder Googlemail anzeigt. Leider konnte ich nur eine LED ansteuern da die GPIO Ports einer Strombegrenzung von 50 mA unterliegen. Glücklicherweise liegt aber genau an den Ports eine Spannung von 3.3 V an sodass die LED direkt angeschlossen werden konnte. Jetzt noch ein kleiner Python Script der die Pins bei den Events von Twitter und er E-Mail einschaltet.

Um das ganze auch selbst zu installieren benötigt man folgende Dinge:

  • Python2.7 auf dem Raspberry
  • Python Modul tweepy installiert (pip install tweepy)
  • anlegen der datei .lasttweetid und .mailpassword(mit passendem account passwort)
  • zuletzt noch das Script anpassen:
    • consumer_key,consumer_secret,access_token und access_token_secret von https://dev.twitter.com in … einfügen
    • Google Mail Account bei USERNAME einfügen
  • RGB-LED an den Raspberry anschliessen
    • gemeinsame Anode an +3.3V
    • Blau und Grün an die GPIO Pins 0 und 1 (Achtung ! Rote LED mit Vorwiederstand !)