TV-Lift für kleine Räume

Seite 4: Firmware

Inhaltsverzeichnis

Das Programmieren liegt mir nicht so sehr, deshalb mag die Software umständlich erscheinen. Die Firmware ist den Projektunterlagen beigefügt und gut dokumentiert. Leider funktionierten zunächst bei den while- und for-Schleifen die Abbruchkriterien beim Erreichen der Endlage nicht. Die LEDs auf der Leiterplatte signalisierten die Schaltzustände der Endschalter zwar korrekt, aber das Programm reagierte darauf nicht wie erwartet.

An Pin D4 des Arduinos habe ich daher eine weitere Monitor-LED angelötet, um die Eingänge über die Software mit diesem Ausgang zu verbinden und zu kontrollieren, ob die Eingänge korrekt gelesen werden. Die LED wird an diversen Stellen im Programm angesteuert, um dem Programmablauf nachvollziehen zu können.

Nicht schön, aber selten – provisorische „Monitor-LED“ an D4

Zum Triggern des Ein- bzw. Ausfahren des TV-Liftes wollte ich eine IR-Fernbedienung verwenden. Da meistens 36 kHz als Trägerfrequenz in der Literatur genannt werden, habe ich mich für das IR-Receiver-Modul TSOP 4836 entschieden. Es hat einen internen 33kOhm Pull-up-Widerstand, während sich auf der Leiterplatte an Connector4, Pin 4 ein 10kOhm Pull-down-Widerstand befand. Dieser R19 zog den Pegel zu sehr runter, so dass ich ihn entfernt habe.

R19 wurde entfernt

Zum Einbinden in den Arduino-Code habe ich die Bibliothek IRremote geladen und installiert, die auch über den Bibliotheksverwalter zu finden ist. Eingebunden habe ich IRremote über Sketch / Bibliothek einbinden / Beigetragene Bibliotheken.

Mit einer roten und einer grünen Taste meiner Fernbedienung soll nun das Aus- und Einfahren des Liftes gesteuert werden. Hierzu habe ich die "Rohwerte" beim Druck der Tasten über den seriellen Monitor erfasst, damit sie später im Programm abgeglichen werden können: rot: -2837 und grün: -1817.

Empfangener Wert nach Druck auf "1"

Wer in der Datei IRremote.h die Debug-Information aktiviert (#define DEBUG 1) kann im seriellen Monitor auch der NEC-Dekodierung zusehen.

Nachdem ich mit der Fernbedienung experimentiert hatte, waren leider die Pins D0 und D1 dauerhaft eingeschaltet und sorgten damit für das Ausfahren der Schublade, sofern das Netzteil für die Peripherie (u.a. Treiber für das Relais) eingeschaltet war. War das Netzteil für die Peripherie nicht eingeschaltet, war ein Glimmen der LEDs noch hinter dem Treiber erkennbar.

Das Oszillogramm über der LED von D0 zeigte "Traffic" auf dem Pin und dann fiel es mir wie Schuppen von den Augen, dass D0 und D1 für Rx und Tx zum Programmieren und für die serielle Schnittstelle genutzt werden. Serial.begin(9600); das ich für den Test des IR-Receivers bzw. das Debugging genutzt hatte, muss für den regulären Betrieb deaktiviert bzw. auskommentiert werden.

Damit die Leitungen, die auf der Schublade benötigt werden (Netzleitung TV, HDMI-Leitung TV, Steuerleitung Jalousiemotor und Leitung für Endschalter „Jalousie oben“) optimal geführt sind und sich nirgendwo verfangen können, habe ich noch eine Energiekette verbaut und die Leitungen darin verlegt.

Unten seitlich am Kasten habe ich außerdem Winkel angeschraubt, mit denen der gesamte Kasten auf dem Kleiderschrank verschraubt ist. Diese Befestigung verhindert, dass der Kasten bei ausgefahrenem Fernseher nach vorne kippen kann.

Bei weiteren Projekten mit einem Arduino Uno werde ich darauf achten, nicht die Ports D0 und D1 zu belegen, da diese für die Kommunikation zum Programmieren und die serielle Schnittstelle benötigt werden. Der Linearmotor hat sich im Nachhinein als etwas langsam und zu laut herausgestellt. Hier ist Verbesserungspotential durch ein höherwertigen Motor oder ein anderes Antriebskonzept.

Einige andere Ideen für TV-Lifte findet man im Internet. Viele haben allerdings nur eine Bewegungsachse bzw. Motor und sind bei weitem nicht so gut elektronisch überwacht und abgesichert.

(hch)