Der vielleicht coolste interaktive Adventskalender 2017

Hallo zusammen.

Die Adventszeit ist nun angebrochen und was darf da nicht fehlen? Genau, ein Adventskalender. Eigentlich bekommen eher die kleinen so einen Kalender, der meist mit Süßigkeiten gefüllt ist. Aber manchmal auch die großen. :-)
In diesem Jahr bin auch ich quasi dem Thema ‘Adventskalender’ konfrontiert wurden. Die Grundidee war einen Kalender zu basteln. Da kam dann schnell der Ehrgeiz ‘Wenn ich schon mal einen Adventskalender bastel, dann doch bitte gleich richtig’. :-D

Also was genau ist bzw. braucht es für einen richtigen Adventskalender? 24 ‘Türchen’ natürlich. Am besten Tüten oder Boxen, wo man die kleinen, netten Überraschungen für die 24 Tage unterbringen kann. Doch wie, was, warum? 
Schnell stand fest, es sollte sich um das ‘Nikolaushaus’ handeln. Also ein Gerüst aus Holz, in dem die Boxen untergebracht werden können, das nach einem Haus aussieht.
Gut, soweit der Plan.

Dann hört man ja immer wieder von bösen Mädchen und Buben, die es nicht abwarten können und schon vorher Türchen aufmachen, die noch gar nicht an der Reihe sind. Das muss unterbunden werden! :-D Und dann bin ich ja eh gerade auf deinem ‘Lampen’ Trip… also muss das Haus auch beleuchtet werden.
Soweit der grobe Plan.

Nach ein paar detailierteren Überlegungen stand dann finale Plan fest:
Jede Box soll ein Fenster bekommen (ein Haus hat ja nun mal Fenster). Dieses soll beleuchtet werden. Also muss in jedes Fach eine LED, die dann von oben in die Box scheint und damit auch das Fenster erhellt. Um das Schummeln zu unterbinden muss der Adventskalender wissen welcher Tag es ist und welche Box herausgezogen wurde. (Das ein Arduino im Spiel ist, muss ich wohl nicht mehr Erwähnen ;-) ). Dazu muss jede Box mit einem ‘Schalter’ verbunden werden, der mitteilt ob eine Box im Fach ist oder nicht. Wird die falsche Box herausgezogen (also eine mit Datum in der Zukunft), dann soll der Kalender Rabatz machen. Wird jedoch die Box des heutigen Tages herausgezogen, dann soll ein Weihnachtslied gespielt werden.
So ein Haus hat auch einen Schornstein mit Rauch… es ist ja kalt im Winter und da wird geheizt. Der Rauch muss natürlich auch beleuchtet werden.
Und wenn wir schon dabei sind… muss auch noch ein Display in das Haus, das dass aktuelle Datum anzeigt (nur falls man am Morgen noch nicht ganz wach ist und nicht weiß welcher Tage gerade ist).
Und da wir schon so viel Licht im Haus verbauen, dann kann man auch gleich nocht ein paar Spielereien einbauen, so das der Kalender auch gleich als Licht/Lampe genutzt werden kann. Zum Beispiel kam mir die Idee die Fenster zufällig zu beleuchten. So wie in einem richtigen Haus… hier ist ein Licht an und da ist ein Licht an. Und dann geht hier und da auch mal eins aus oder an. Die Imitation eines richtigen Hauses quasi.
(Hätte ich gewusst was ich mir damit einbrocke… hätte ich wohl noch einmal darüber nachgedacht!! :-) )

Und los ging es mit dem Basteln.

Als erstes musste das Haus gebaut werden. Die Boxen sind 6,5cm x 6,5cm. Um ein bisschen Luft zu lassen, habe ich die Öffnungen für die Boxen 7x7cm gemacht. 7cm tiefe ist allerdings nicht sehr viel. Damit wäre das Haus sicher ständig umgekippt. So habe ich die Tiefe auf 20cm erweitert und hinten gleich noch ein bisschen ‘Stauraum’ für etwas größere Überraschungen erhalten. Ich brauchte eh eine Trennwand um die Verkabelung für die Schalter unterzubringen. 
Zwischendurch musste ich dann auch die LEDs verlöten. Dazu habe ich in jedes Fach oben ein Loch ins Holz gebohrt und eine SK6811 versenkt. Die sind rund und passen genau in ein 10er Loch. Das schöne an den SK6811 ist, das sie ‘intelligent’ sind und nur einen Pin am Arduino benötigen. Sie geben das Signal immer an die nächste LED weiter. Somit brauchte ich immer nur 3 Kabel, von LED zu LED. Und nicht von jeder LED 3 Kabel zum Arduino. Das ist sehr praktisch. 
Die LEDs dann mit Heißkleber fixiert und schon war das fertig. 
Dann der Dachfirst. Hier musste ich die beiden Fenster ins Holz schneiden und die Öffnung für das Display aussägen. Vor die Fensteröffnungen dann das ‘Fensterpapier’ geklebt und das Display in die Öffnung geklebt.
Und noch 3 LEDs in den Schornstein einbauen und diesen am Hausdach befestigen. 

Am fummeligsten war die Thematik mit den Box-Schaltern. Um das zu bewerkstelligen musste ich 28 nuten in die Trennwand schneiden, um dort die Kabel zu versenken. Aber nur so weit das sie gerade so drin sind. (24 Datenleitungen 1x Masse pro Reihe) Ich hatte die tolle Idee einfach selbstklebende Kupferfolie zu nehmen. Erschien mir am einfachsten. 2 Streifen unter die Box (1x Datenleitung, 1x Masse) und noch einen Streifen unter die Box. So würde diese den Kreis schließen sobald sie im Fach ist. Funktionierte nur leider nicht immer. Eine kleine Unebenheit, eine kleine Wölbung im Boden der Pappschachtel … und schon ist kein Kontakt da. Also musste ich die Hälfte der Streifen an der Pappschachtel noch mit ein bisschen Lötzinn versehen, damit der Kontakt – mehr oder weniger sicher – hergestellt wurde. 
Definitiv war es eine ganz schöne Fummelei. Aber irgendwann war es erledigt.

Was noch fehlte waren die RTC (Real Time Clock, damit der Arduino weiß welcher Tag ist und sich das auch merkt wenn der Strom mal weg ist), ein Empfänger für die Fernbedienung (Jaaa! Fernbedienung für den Adventskalender! ;-) Wie soll man denn sonst durch die Lichtmodi schalten?) und der Buzzer für das Weihnachtslied bzw. den Alarm. 
Den Buzzer und die RTC habe ich auf ein Arduino Mega Prototyping Shield gelötet. Da war auch schon ein DHT22 Sensor (Temperatur und Luftfeuchte) drauf. … Na wenn er schon mal da ist, dann kann man ihn ja auch gleich noch nutzen. Also gibt der Kalender, auf dem Display, auch gleich noch die Temperatur und Luftfeuchte aus. Warum nicht? :-)
Die Empfänger LED für die Fernbedienung habe ich hinter den Fenstern im Dach installiert. So ist er von außen nicht sichtbar. Dafür muss man aber auch ein bisschen ‘Zielen’. 
Zudem habe ich noch eine Photodiode verbaut. Ich wollte eigentlich das der Adventskalender von alleine anfängt zu leuchten, wenn es dunkel wird. Das habe ich aber später verworfen. 

Und dann ging es an die Programmierung. Hinterher erscheint alles sehr logisch und einfach. Doch wenn man anfängt, dann ist das ganz und gar nicht so. Man fängt an und hat ständig irgendwelche Stolpersteine im Weg. Wie z.B. das ein Adruino nur Single-Thread verarbeitet. Meist ist das nicht so tragisch. Aber wenn man ein Lied abspielen möchte und dabei noch Lichter schalten will, dann geht das nicht.

Aber nach vielen Stunden war es dann endlich soweit. Das gute Stück war fertig… mehr oder weniger. 

Und hier das ganze noch in Aktion:

Noch ein paar mehr Bilder:

Was wurde Verbaut:

  • Arduino Mega 2560
  • RTC
  • Buzzer
  • SK6811 LED
  • Würfelboxen
  • Fernbedienung Empfänger
  • Photodiode
  • Ein bisschen Werkzeug und Holz
  • Watte

Winterliche Grüße
Gordon

Update: Ich wurde des öfteren nach dem Code gefragt. Du kannst ihn [hier downloaden]. Es ist jetzt aber schon eine ganze Weile her und ich weiß nicht ob das der Finale Code war. Denke aber schon.

Gammu und USSD codes

Ich bastel ja schon länger mit dem GSM USB Stick (Huawei E1750) am Rasperry Pi rum. Dabei sind mir ein paar Sachen wichtig und ein paar gar nicht.
Wichtig ist SMS senden und empfangen, Guthaben abfragen und aufladen. Das war es auch schon. Mehr brauche nicht nicht um Bob zu steuern. Der SMS versand funktioniert schon länger. Aber die USSD Codes habe ich nie hinbekommen. Hatte es am Anfang mal versucht, dann aber sein lassen, da es einfach nicht ging. Ich dachte schon das es am Stick liegt und er USSD einfach nicht unterstützt. Heute habe ich es dann doch endlich noch hinbekommen.

Woran lag es?
1) Der GSM USB Stick belegt gleich 2-3 Geräte. /ttyUSB0-2
2) Es gibt neben Gammu noch einen Service (gammu-smsd) der für den SMS Versand zuständig ist.

So, nun hat Gammu eine Config Datei (~/.gammurc). Logisch soweit. Der SMS Daemon hat aber auch noch mal eine eigene (/etc/gammu-smsdrc). Und genau hier lag der Hund begraben.

Ich hatte bei der Installation damals in die SMS Daemon Config den /ttyUSB2 angegeben. Den hat der Servie dann dauerhaft belegt (da der Service bei mir dauerhaft läuft), um auf eingehende SMS zu warten bzw. ausgehende zu versenden.
Wenn ich jetzt versucht habe einen USSD Code in der Shell auszuführen (z.B. gammu getussd *100#), hat Gammu versucht über /ttyUSB0 den USSD auszuführen. Dumm nur das dieser Port USSD nicht unterstützt. Das macht nämlich nur der ttyUSB2… der ja aber vom SMS Daemon belegt war.

Die Lösung ist so einfach, wenn man es weiß. Der SMS Versand geht problemlos auch über ttyUSB0… Also einmal genau umdrehen. Der SMS Daemon hat /ttyUSB0 bekommen und Gammu /ttyUSB2. Damit funktioniert das jetzt wunderbar. :)

Meine ~/.gammurc sieht jetzt so aus:

# This is a generated gammurc file.
# It was generated by Gammu configurator 0.4

# In Unix/Linux : copy it into your home directory and name it .gammurc
# or into /etc and name it gammurc
# In Win32 : copy it into directory with Gammu.exe and name gammurc

# Port : in Windows/DOS: "com*:",
# (instead of "*" please put "1", "2", etc.)
# in other (Linux/Unix) "/dev/ttyS%"
# or "/dev/ircomm%" ("irda" connection)
# (instead of "%" please put "0", "1", "2", etc.)
# Model : use only, when Gammu doesn't recognize your phone model.
# Put it here. Example values: "6110", "6150", "6210", "8210"
# Connection : type of connection. Use "fbus" or "mbus" or "dlr3" or
# "irda" (Infrared over sockets) or "infrared" (DirectIR)
# or "at19200" (AT commands on 19200, 8 bits, None parity,
# 1 stop bit, no flow control) or "at115200" (AT commands on
# 115200, 8 bits, None parity, 1 stop bit, no flow control)
# or "atblue" (AT over BlueTooth) or "dlr3blue" (FBUS
# over BlueTooth)
# SynchronizeTime: if you want to set time from computer to phone during
# starting connection. Do not rather use this option when want
# to reset phone during connection (in some phones need to
# set time again after restart)
# Logfile : Use, when want to have logfile from communication.
# Logformat : What debug info and format should be used:
# "nothing" - no debug level, "text" - transmission dump in
# text format, "textall" - all possible info in text format,
# "errors" - errors in text format, "binary" - transmission
# dump in binary format
# Use_Locking : under Unix/Linux use "yes", if want to lock used device
# to prevent using it by other applications
# GammuLoc : name of localisation file

[gammu]
port = /dev/ttyUSB2
model = auto
connection = at
synchronizetime = yes
logfile = /home/pi/gammu.log
logformat = textalldate
use_locking =
gammuloc =

[gammu1]
port=/dev/ttyUSB1
mode=auto
connection=at

Und meine /etc/gammu-smsdrc so:

# Configuration file for Gammu SMS Daemon

# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
#port = /dev/null
port = /dev/ttyUSB0
connection = at
# Debugging
#logformat = textalldate
logformat = errorsdate

# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = SQL
driver = native_mysql
#logfile = syslog
# Increase for debugging information
debuglevel = 1
logfile = /home/pi/gammu.log
MaxRetries = 10
commtimeout = 30
sendtimeout = 30

user = ***
password = ***
host = localhost
database = gammu

runonreceive = sudo python /home/pi/bob/sms_dealing.py

# Paths where messages are stored
#inboxpath = /var/spool/gammu/inbox/
#outboxpath = /var/spool/gammu/outbox/
#sentsmspath = /var/spool/gammu/sent/
#errorsmspath = /var/spool/gammu/error/

Jetzt kann ich endlich auch aus der Weboberfläche von Bob das Guthaben aufladen und besonders auch den aktuellen Guthabenstand einsehen. Ist ja nicht ganz unwichtig, wenn man Warnungen per SMS bekommen möchte.

Was ist ein Arduino und Raspberry Pi?

Hallo zusammen.

Meine Facebookjünger wissen schon wieder mehr als meine lieben Blogleser. Vor einigen Tagen habe ich die folgenden Bilder bei Facebook hochgeladen:

Die Beschreibung dazu war:

Was ist das, außer eines wunderschönen Stück Kunst mit bunten Kabeln und elektronischem Zeug?
Natürlich explodiert es nicht.  Es ist eine kleine Messstation.
Es beinhaltet:
1x Arduino Pro Mini -> Der Mikrocontroller der die Daten verarbeitet
1x Stromversorgung -> Kein geiles Elektrozeug ohne Strom
2x Photoresistor -> Misst die Menge an Licht in der Umgebung (also wie hell es ist) (beide Sensoren haben natürlich unterschiedliche Werte… ^^)
1x DHT11 -> Misst Temperatur und Luftfeuchtigkeit
1x DHT22 -> Misst auch Temperatur und Luftfeuchtigkeit… das neuere Model vom DHT11
1x LM35 -> Misst Temperatur… Ich habe es kaputt gemacht als ich Versehentlich Plus und Minus vertauscht habe  Sendet noch Daten… aber Schrott.
1x MQ-2 -> Misst den Gehalt von Rauch/LPG/CO Gas in der Luft.
1x 1.8″ TFT mit SD Karte -> Zum Anzeigen der Werte und schreibt auch alle Werte in eine Log-Datei auf die SD Karte um die Daten später weiter auswerten zu können.

So… was ist das nun und warum mache ich damit rum?

Ein Arduino ist ein Mikrocontroller. Eigentlich ein Mikrocontroller auf einer Platine mit noch ein paar anderen Sachen. Alles in allem ein Arduino. Der wurde von Massimo Banzi und David Cuartielles entwickelt (und benannt nach einer Bar… ja ja :) ). David Mellis hat dann noch die Programmiersprache dazu geschrieben. Das gesamte System ist Quelloffen. Das heißt man kann alles einsehen. Wie der Arduino aufgebaut ist. Deswegen gibt es auch schon viele fleißige Kopierer und im Grunde könnte man sich seinen Arduino sogar selbst zusammenlöten. Mit dem Arduino kann man recht einfach in die Elektronik einsteigen. Doch kommen wir erst einmal noch zum anderen Vertreter. Denn in der Überschrift steht auch etwas von einem Raspberry Pi.

Der Raspberry Pi ist dem Arduino ähnlich, aber doch unterschiedlich. Der Raspberry Pi ist mehr ein Mikrocomputer als ein Controller. Denn er besitzt einen 700MHz ARM Prozessor (also die gleiche CPU Architektur wie in Handys), 512MB Arbeitsspeicher, etc. Als Betriebssystem kommt überwiegend Linux zum Einsatz. Hier ist einer der großen Unterschiede… der Raspberry Pi hat ein Betriebsystem, der Arduino nicht.

Und was heißt das nun?

Beide Boards haben GPIO Pins. Das sind einfach Anschlüsse an die man z.B. Sensoren anschließen kann. Ein Sensor ist z.B. der DHT22… ein Sensor mit dem man die Temperatur und die Luftfeuchtigkeit messen kann. Diesen Sensor kann man nun an den Arduino und auch an den Raspberry Pi anschließen. Ein kleines Programm geschrieben und schon zeigen beide die Daten an, die sie vom Sensor erhalten.

Dann reicht doch ein Board!?

Im Prinzip schon. Aber es kommt immer darauf an was man machen will.
Am Raspberry Pi sind die Möglichkeiten um weiten größer, wenn man an dem Board auch sonst noch etwas machen möchte. Es steht mehr Speicher zur Verfügung, Software kann installiert werden und sogar eine grafische Benutzeroberfläche steht zur Verfügung. Man kann mit dem Raspberry Pi online gehen, eMails abrufen, Texte schreiben, Programmieren (natürlich) und viel mehr. Es ist ein vollwertiger Computer, nur ein wenig Limitiert in den Ressourcen. Dafür verbraucht er aber auch mehr Strom.

Wobei ‘mehr Strom verbrauchen’ natürlich relativ ist. 3,5 Watt ist im Normalfall nicht erwähnenswert! Wenn man aber z.B. eine kleine Wetterstation bauen möchte und diese möglichst autark mit Batterien und Solar betrieben werden soll, dann sind 3,5 Watt doch schon extrem schlecht. Dann braucht man eine Lösung die kaum Strom verbraucht. Hier kommt der Arduino ins Spiel. Das ist seine Stärke. Stumpf eine Arbeit verrichten (z.B. Sensorwerte auslesen) und dabei möglichst wenig Strom verbrauchen.

Und warum beschäftige ich mich jetzt mit diesem komischen Zeug?

Keine Angst, ich bin nicht unter die Bombenbauer gegangen ;) (Hallo NSA… und wieder einmal das Stichwort gefunden… Gratulation! ;) )
Nun, manche wissen ja das ich ein neues Projekt im Kopf habe. Ich möchte mit einem Wohnmobil durch die Gegend gondeln. Dabei möchte ich meine Arbeit natürlich mitnehmen. Das heißt Internet und Strom in den Camper. Da Strom knapp sein wird und mein Heimrechner im Schnitt um die 200 Watt verbraucht, fällt das flach. Eine stromsparende Lösung muss her. Da bin ich auf den Raspberry Pi aufmerksam geworden. Natürlich ist mir klar das dieses System keinen Arbeitsrechner ersetzen kann (schön wäre es). Aber als 3,5 Watt Knecht kann er doch einige Aufgaben übernehmen. 3,5 Watt … das sind bei 24 Stunden zwar auch 84W/h – in der Theorie – aber ich hoffe in der Praxis wird es weniger, da der RPi bei Nichtbenutzung ‘runter-schaltet’. Ich teste gerade mit einem 10.400mAh Akku.

ArduinoAber ich vermute mal das er gut beschäftigt sein wird. Wenn ich alles realisieren kann, was ich vorhabe, dann wird er für folgende Aufgaben eingesetzt:

  • NAS mit externer SSD
  • Lokaler Webserver zum Testen
  • Automatische Verbindungskontrolle der Internetsourcen (Sat-DSL, WLAN, GPRS,etc.)
  • Desktop für Surfen, Film schauen, Musik hören, Programmieren, etc.
  • Zentrale Datenverarbeitungsstation für dezentrale Arduinos mit ihren Sensoren (Wetterstation (irgendwo außen), Kameramodul vorn im Camper, Motorsensoren, Gassensoren, etc.)

Das sind so die groben Arbeiten die das arme kleine Teil verrichten muss.

Ich muss aber auch gleich dazu schreiben das ich den kleinen RPi schon ordentlich teste und möchte betonen das ich sehr positiv überrascht bin. Der kleine ist gar nicht so schwach auf der Brust wie ich vermutet hatte. (Immer mit den 3,5 Watt Stromverbrauch im Hinterkopf… CPU ohne Kühlkörper!!). Die Grafische Oberfläche läuft flüssig. Auch Videos lassen sich mit VLC anschauen. IceDove (Linuxversion vom Mozilla Thunderbird) braucht eine ganze Weile bis es meine zig Tausend Emails eingelesen hat und sich öffnet. Aber meine eMailkonten sind auch schon extrem… mal ehrlich. LibreOffice (Linux Textverarbeitung wie MS Office) dauert auch ein paar Sekunden länger, öffnet sich dann aber und es lässt sich flüssig damit arbeiten. Es gibt sogar Spiele für den Pi. Ich habe kurz Mindcraft probiert und es läuft absolut flüssig.
Wie gesagt, mit bedacht auf die Hardware und den Verbrauch ist dieser MiniComputer ein Wunderwerk.

Und der Arduino kam hinzu als der Spieltrieb in mir ausgelöst wurde. Das Zeug hat es mir jetzt so angetan, ich kann nicht genug bekommen. Absoluter Suchtfaktor! Wenn man erst einmal seine erste Schaltung zusammengesteckt hat, das erste Skript auf den Arduino überspielt ist und dann die LED wirklich anfängt zu blinken… dann fühlt man sich ein bisschen wie Gott. … Diese LED blinkt jetzt weil ICH es so will. :D
Dann geht es weiter… die Temperatur messen, LEDs leuchten lassen, Lichtstärke auslesen (Ist es Nacht? Wie stark scheint die Sonne? etc.), GPS Koordinaten ermitteln und in einer Karte anzeigen, Flammensensor (Brennt es?), Geräuschsensor (Hat da wer Gehustet?), Displays zum Anzeigen von Informationen, Schalten von Schaltern auf digitalem Knopfdruck (geht auch über das Internet!)… die Möglichkeiten sind fast unendlich. Mit Kreativität kann man super tolle Sachen damit machen.

In meiner unendlichen Kreativität (hüstel) habe ich (bis dato) folgenden Verwendungszweck dafür.

  • Wetterstation mit Sensoren für Temperatur, Luftfeuchtigkeit, Luftdruck, Lichtintensität, Geiger Zähler, GPS, etc.
  • Kamera in der Front des Campers (soll automatisch jede Stunde 1 Foto machen und bei Internetverbindung Online stellen)
  • Gassensor bei den Gasflaschen, im Küchenbereich und bei der Heizung. Auch Gassensoren für das Gas das Diebe gern Benutzen um die Bewohner ‘einzuschläfern’.
  • Anschließen an die Motorelektronik. Damit kann z.B. der Fehlerpuffer des Fahrzeugcomputers ausgelesen werden. Bei manchen Fahrzeugen möglich.
  • Ich überlege die Türen mit einer Schlüsselkarte/Fingerabdrucksensor öffnen zu lassen, anstatt mit einem Schlüssel. So könnte man Einbrecher ein wenig verwirren ;)

Aus den Daten möchte ich dann eine kleine Blackbox bauen. Besonders sollen die Daten aber ins Internet gehen und allen zur Verfügung stehen. (Die GPS Daten natürlich Zeitversetzt ;) ). Aber das ist noch Zukunftsmusik. Im Moment experimentiere ich mit beiden System rum und werde versuche jetzt ein paar Stabile System aufzubauen. Zum Testen und Erfahrungen sammeln.

Also wenn ihr mal in die Welt der Mikrokontroller und Einplatinen-Computer reinschnuppern wollt… Arduino bzw. Raspberry Pi kann ich nur empfehlen. Macht total Spaß und ist gar nicht soo schwer. ;)

Liebe Grüße
Gordon