Zum Schluss noch ein paar Bilder und ein kurzes Video.
Die Hauptplatine:
Die Touch-Platine:
Im Gehäuse:
Video der Funktion:
Dinge, die ich teilen möchte
Die Schaltung des Steuergerätes für meine Vitrinenbeleuchtung ist sehr einfach. Herzstück ist der Microcontroller MSP430G2553. Ein Linearregler erzeugt die nötigen 3,3 V. Die Platine verfügt über 2 Anschlüsse für LED-Streifen, die von einem MOSFET getrieben werden. Die Helligkeitsinformation wird mit einem Fotowiderstand an den ADC des Controllers weitergegeben und dort ausgewertet. Die meisten I/O des Controllers werden für die 5 kapazitiven Schaltflächen und die Feedback-LEDs benötigt.
Das Dimmen erfolgt per PWM.
Belegung der 5 Schaltflächen:
Das hätte an den Anfang gehört:
Es gibt noch einen Grund, warum ich so heiß auf den Schaufelradbagger war. Ich wohne in einer ehemaligen Tagebaugegend und direkt bei meinem Wohnort steht ein original Schaufelradbagger mitten auf dem Feld.
Schaufelradbagger Typ SRs 1500
Panoramablick von links:
Und: Ich habe einen Blog-Eintrag bei hackaday.com bekommen. 🙂
Ich möchte eine Lösung für meine Vitrinenbeleuchtung haben, die klein, einfach, unauffällig, aber schick ist.
Es sollen 2 Vitrinen beleuchtet werden. In den Vitrinen sind bereits LED-Streifen verbaut, einmal 2 und einmal 3. Die Streifen werden mit 12 V betrieben. Die Leistung ist ca. 3Wmax pro Streifen. Bei 5 Streifen sind das also 1,25 A, das ist nicht so viel. Außerdem ist das viel zu hell und wird wohl meist gedimmt betrieben werden.
Spannungsversorgung ist ein 12 V-Steckernetzteil. Da selbst etwas zu bauen, ist nicht nötig.
Da ich gern auch mal andere Sachen ausprobiere, habe ich keinen Arduino genommen, sondern einen TI MC vom Typ MSP430G2553. Für die Entwicklung habe ich mir das Launchpad MSP-EXP430G2 besorgt, das die Programmierschnittstelle für die spätere eigene Platine gleich mitbringt. Gleichzeitig wollte ich auf Knöpfe verzichten und fand die Idee von kapazitiven Schaltflächen sehr elegant. Dafür gibt es passend zum Launchpad den MSP430 Capacitive Touch BoosterPack.
Es gibt Code Composer Studio builds für Windows, MacOS and Linux, allerdings wird das MSP-EXP430G2 in MacOS nicht unterstützt, deshalb musste ich die Windows-Version nehmen 🙁
Vielleicht kennt Ihr das ja auch: Man hat sich endlich für eine neue Wohnzimmermöblierung entschieden und vielleicht ist da auch eine Glasvitrine dabei. Wenn die jetzt noch beleuchtet wäre … (ich weiß, das ist altmodisch (oder eben Geschmackssache)).
Sowas gibt es schon lange. Problem dabei: mit normalen Glühlampen ging das schnell ins Geld und wenn man die Beleuchtung manuell anschalten muss, macht man das sowieso nie.
Heute verwendet man LED-Leisten. Ein Problem bleibt: manuell anschalten ist unkomfortabel.
Vor diesem Problem stand ich vor einiger Zeit.
Die verfügbaren Automatiken waren teuer und/oder Mist und machten sowieso nicht das, was ich wollte.
Ich wollte, dass ich mich nach dem ersten Einschalten nie wieder um die Beleuchtung kümmern muss, wenn ich nicht will.
Folgende Eigenschaften waren mir wichtig:
Die nächsten Beiträge zeigen, wie ich die Herausforderung gelöst habe.
Zuletzt noch zwei kurze Videos:
Video 1: Starten und Abschalten des Raspberry Pi 3 (ca. 56 s)
Video 2: Funktionsvorführung (ca. 3 min)
Wie bereits gesagt, kommt als Herz ein Raspberry Pi 3 zum Einsatz. Das integrierte Bluetooth-Modul ist praktisch und lässt sich schön mit einer Wiimote koppeln.
Betriebssystem ist das aktuelle Raspbian, als Python-Version kommt 2.x zum Einsatz, da die verwendete Wiimote-Bibliothek mit der Version 3.x nicht funktioniert.
Ah ja, eine Anleitung, wie man die Bibliothek installiert und wie man die Wiimote koppelt, gibt es z.B. auf dieser Seite. Beim Pi 3 kann man sich das Installieren eines Bluetooth-Dongles natürlich sparen.
Hier ein Ausschnitt des Python-Programms:
while True: buttons = wii.state['buttons'] #Achtung: WiiMote wird quer gehalten, deshalb RIGHT --> Vorwaerts if(buttons & cwiid.BTN_RIGHT): if(buttons & cwiid.BTN_DOWN): #DOWN --> rightfor Drive_rightfor() elif(buttons & cwiid.BTN_UP): #UP --> leftfor Drive_leftfor() else: Drive_forward() elif(buttons & cwiid.BTN_LEFT): #LEFT --> Rueckwaerts if(buttons & cwiid.BTN_DOWN): #DOWN --> rightback Drive_rightback() elif(buttons & cwiid.BTN_UP): #UP --> leftback Drive_leftback() else: Drive_back() else: if(buttons & cwiid.BTN_UP): #UP --> leftturn Drive_leftturn() elif(buttons &cwiid.BTN_DOWN): #DOWN --> rightturn Drive_rightturn() else: Drive_stop() time.sleep(0.1) #Turm drehen mit 1 und 2 if(buttons & cwiid.BTN_1): Turn_left() elif(buttons & cwiid.BTN_2): Turn_right() else: Turn_stop() time.sleep(0.1) #Turm heben mit + und - if(buttons & cwiid.BTN_PLUS): Lift_up() elif(buttons & cwiid.BTN_MINUS): Lift_down() else: Lift_stop() time.sleep(0.1) #Band und Bagger if(buttons & cwiid.BTN_A): if(pressed == '0' and run == 'stop'): Band_run() pressed = 'A' elif(pressed == '0' and run == 'run'): Band_stop() pressed = 'A' else: pressed = '0' time.sleep(0.1) ....
Und hier die Belegung der Wiimote:
Da natürlich kein Monitor und keine Tastatur am Pi stecken wird, muss das Programm automatisch starten. Die Status-LED, die immer blau leuchtet, wenn Spannung anliegt, blinkt kurz rot, wenn die Wiimote gekoppelt werden kann (gleichzeitiges Drücken von 1 und 2). Wenn die Kopplung erfolgreich ist, leuchtet die grüne LED zusätzlich.
Wenn die Kopplung nicht erfolgreich ist, beendet sich das Programm, der Pi bleibt aber an.
Nach erfolgter Kopplung kann man mit dem Bagger spielen.
Hat man keine Lust mehr, trennt man die Wiimote mit dem Home-Button. Dann fährt auch der Pi herunter. Hält man den B-Knopf (auf der Rückseite) gedrückt, während man Home drückt, trennt man nur die Verbindung. Der Pi fährt aber nicht runter.
Bevor ich zur Platine selbst komme, ein paar Worte zum Akku.
Als Akku kommt eine Powerbank zum Einsatz. am besten eine mit 2 USB-Anschlüssen, einen für den Raspberry Pi und einen für die Motoren. Der Formfaktor sollte so sein, dass er gut einbaubar ist. Ich hatte mich für einen flachen quaderförmigen Typ entschieden, der einen High-Power-Output hat. Das ist wichtig, da die Motoren durchaus einen relevanten Strom ziehen (Details kann man sich googeln). Leider reichte auch das nicht aus. Der Akku reagierte nämlich sehr empfindlich auf den Anlaufstrom der Motoren, d.h., die Überstromsicherung schaltete oft den Akku aus, was ziemlich lästig war. Zum Glück habe ich dann noch einen anderen Akku mit ähnlichen Abmessungen und etwas mehr nomineller Strombelastbarkeit gefunden. Der hier ist es, wie lange es den allerdings gibt, wer weiß …
Ich brauche:
Für die Motoransteuerung der M-Motoren verwende ich den L293D, ein robuster bewährter DC-Motor-Treiber, die Version mit den integrierten Dioden.
Da der XL-Motor keine Drehrichtungsumkehr braucht, reicht hier ein Relais aus, ich habe ein DIL14-Reed-Relais (Typ 3570-1210-053 bei Conrad) mit 0,5A Schaltstrom genommen.
Der Step-Up-Converter ist ein LM2577-ADJ, robuste Technik, leicht überdimensioniert, da gibts keine Probleme.
Dazu noch eine RGB-Status-LED, fertig.
Als Gehäuse für den Raspberry Pi habe ich ein Lego-kompatibles Teil genommen. Die Platine soll genau drauf passen, damit sie mit Legoteilen eingebaut werden kann. Die folgenden Bilder zeigen, wie das aussieht.
Wie bereits erwähnt, war das Ziel, mit möglichst wenig Änderungen auszukommen. Trotzdem geht es nicht ohne zusätzliche Teile.
Die 4 M-Motoren sowie die Zuleitungen habe ich direkt bei Lego.com bestellt. Alle anderen Teile gab es bei KieselBrick über Brickscout, kann ich nur empfehlen.
Mit einer genauen Liste kann ich leider nicht dienen, da ich die Teile nach Gefühl ausgesucht habe und auch viele Teile wieder verwenden konnte, die durch den Umbau erstmal übrig geblieben waren.
Das Original fährt, aber nur geradeaus, lenken ist nicht. Außerdem sitzt der Motor oben im Hauptgetriebe. Deshalb habe ich unten 2 M-Motoren eingebaut, die getrennt ansteuerbar sind. Die Inspiration habe ich mir hier geholt, letztendlich habe ich aber meine eigene Variante gebaut, die mir etwas einfacher scheint.
Die Zuleitung zu den Motoren habe ich über die Drehachse zentral geführt, so dass ein Drehen des Turms weiterhin möglich ist.
Auch das Drehen des Turms wird im Original über das Zentralgetriebe mit dem XL-Motor gelöst. Ich habe die Verbindung zwischen Getriebe und Gestänge getrennt and an diese Stelle einen M-Motor mit Schneckenrad gesetzt.
Das Heben und Senken des Schaufelrads ist im Original nur manuell möglich. Aber auch hier kann man sehr einfach einen M-Motor mit Schnecke einsetzen.
Bleibt der Antrieb des Schaufelrades und der Förderbänder: Das bleibt einfach, wie es ist. Der XL-Motor macht das prima. Den letzten Freiheitsgrad, das Drehen des kleinen Förderbandes, habe ich auch unverändert gelassen.
Das Projekt besteht im wesentlichen aus 3 Teilen: