Report a Moose – Demola 2014

logo

In meinem Auslandssemester and der University of Tampere habe ich mich im Rahmen des Masterstudiengangs Software-Development für das Innovation-Project eingeschrieben. Dieses Projekt wird von einer externen Organisation namens Demola jedes Semester für alle Universitäten der Stadt Tampere organisiert. Wir haben dort in einem internationalen und multidisziplinären 4er-Team das Projekt “Report a Moose” realisiert. Dabei handelt es sich um eine mobile Applikaiton, in der ein Bürger in Finnland Missstände in der Stadt mit seiner Position, einer Beschreibung und einem Foto melden kann. Das können zum Beispiel Schlaglöcher, defekte Straßenlampen, Glatte Straßen oder eben Rehntiere auf der Straße sein. Hierfür wurde ein komplett neuer Stack auf Basis der open311 Spezifikation implementiert. Ich war in diesem Team als Softwareentwickler eingeteilt.

Screen Shot 2014-01-08 at 11.33.23 AM

Bei der mobilen Applikation handelt es sich um eine Webbasierte App, die mit AngularJS und den verfügbaren nativen bindings von PhoneGap implementiert wurde. Zur Realisierung der Oberfläche wurden verschiedene Angular-Module wie zum Beispiel die angular-leaflet-directive oder angularLocalStorage verwendent. Neben dem Frontend wurde auch die Backend Struktur implementiert, das open-source Projekt georeport wurde hier ins Leben gerufen. Es stellt eine GeoReportv2 API implementation in NodeJS dar, welche die kommunizierten Daten in einer MongoDB speichert. Hier konnte ich auch zum ersten mal Continues Integration durch TravisCI einsetzen. Der letzte Schritt in diesem Projekt wurde das Backend System, welches die Stadt Administration nutzen kann, um Meldungen zu verwalten, Feedback zu geben und Meldungen einzusehen. Basierend auf Bootstrap 3, LeafletJS, AnguarJS und ngResource konnte hier schnell ein Prototyp erstellt werden.

backend

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

Learnodore – Erste XCode App für Pomodoretechnik

Kleine Bastelei nebenbei: Die Learnodore App! Nach einem Einführungskurs in ObjectiveC und XCode musste direkt einmal ein wenig getestet werden und ein kleines praktisches Projekt entwickelt werden.

Wir waren zu der Zeit in der Prüfungsphase und hatten wärend des Lernens große Probleme uns um auf Inhalte zu Konzentrieren. Daher haben wir die Pomodore Technik angewendet und ich habe dafür kurzer Hand eine kleine App gebastelt. Source-Code  liegt bei Github und die App kann auf dieser Seite heruntergeladen werden: http://www.stetro-blog.de/learnodore/

Image

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.

http://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 !)

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 82 Followern an