Funkfernsteuerung 433 MHz
Der Anstoß zum Projekt
Nachdem ich von einem Bekannten gefragt wurde, ob ich für seinen Sohn auch eine Funkfernsteuerung für ein Techniklegomodell bauen könnte (nachdem ich ihm gezeigt hatte, was man mit einem Arduino so alles machen kann), habe ich sofort begonnen, mit einem Testaufbau so eine Fernsteuerung zu simulieren. Dabei sollen über Funk LEDs und zwei Motoren ein- und ausgeschaltet werden, die Drehzahl und Drehrichtung der Motoren verändert und die Drehwinkel zweier Analog-Servos verstellt werden. Die Programme für Sender und Empfänger sollen leicht für zusätzliche Aktoren erweiterbar sein und der Sender soll Befehle an mehrere verschiedene Empfänger senden können. (Übrigens: Mein Bekannter hat sich schon ein Arduino-Einsteigerset gekauft und nachdem er technisch und auch programmiertechnisch vorbelastet ist, wird er wohl bald selbst die Fernsteuerung realisieren können).
Erste Festlegung: Der Telegrammaufbau
Meine ersten Überlegungen zu Beginn des Projektes waren, in welcher Form der Sender die gewünschten Befehle dem Empfänger mitteilen sollte, was dieser zu tun hätte. Dazu muss ich sagen, dass ich mich bisher überhaupt nicht mit dem Thema Funkfernbedienung beschäftigt habe und auch nicht damit, wie z.B. bei Hobby-Fernbedienungen im Modellbau die Daten gesendet werden. Aber gerade das macht es für mich spannend, mir selbst etwa zu überlegen, wie ich so eine Aufgabe lösen könnte und nicht sofort irgendwo nachzusehen, wie Andere das machen.
Gedanklich verfolgte ich dabei zwei Varianten:
- Ich sende für jeden Befehl (bei einem Tastendruck oder bei einer Veränderung eines eingelesenen Wertes von einem Poti) ein Telegramm, wobei das Telegrammm auch Informationen beinhaltet, welcher Empfänger und welche Komponente angesprochen werden soll,
- oder die zu übertragenden Befehle werden mittels Pulsweitenmodulation (PWM) oder Pulspausenmodulation (PPM) übertragen, d.h. die Informationen werden für alle Komponenten eines Empfängers in einem zyklisch zu übertragenem Signal durch die Pulslängen oder Pausenlängen definiert.
Ohne es nun näher zu begründen, fiel meine Entscheidung auf die erste Variante (was nicht heißt, dass ich vielleicht auch die zweite Variante auch noch ausprobieren möchte) und so entstand meine erste Test-Fernsteuerung.
Die erste Version meiner Test-Fernsteuerung habe ich, sowohl was den Telegrammaufbau, als auch die Sender-und Empfängerprogramme betrifft, inzwischen wieder entfernt. Der Testaufbau wurde modifiziert.
Es hatte sich gezeigt, dass diese Version ganz gut funktionierte, solange nur an einem Servopoti gedreht wurde. Sobald man aber zwei Servopotis gleichzeitig bewegte, also die Stellungen von zwei Servos gleichzeitig veränderte, funktionierte die Bewegung der Servos nicht mehr gleichmäßig, sondern sie "ruckelten". Grund war einerseits, dass das Sendetelegramm bei der vorhandenen Datenübertragungsrate zu lang und andererseits die Zusammenstellung der Telegramme im Sender und Zerlegung im Empfänger zu zeitaufwendig war.
Deshalb habe ich nun den Programmablauf verbessert, so dass der Datenfluss vom Sender zum Empfänger und weiter zu den Servos schneller funktioniert und vor allem habe ich die Telegrammlänge von 11 Byte auf zuerst 5 Byte (einschließlich Synchronisierbyte) und schließlich auf 4 Byte verkürzt. Auf das Synchronisierbyte habe ich nun gänzlich verzichtet, da ich die Telegramme zu den Servos nun durchlaufend in einem sehr kurzen Zyklus (15 ms) sende und daher eine Synchronisation zwischen Sender und Empfänger für einzelne Telegramm nicht mehr erforderlich ist.