Mittwoch, 27. Mai 2015

Drahtlose Übertragungen zwischen Mikrocontrollern

Heute geht es darum, Informationen drahtlos zwischen zwei Mikrocontrollern zu übertragen. Dazu braucht man einen 433 Mhz Sender und Empfänger .

(links Sender, rechts Empfänger)

Die Verkabelung

Glücklichrweise steht jeweils drauf, wie der Sender/der Empfänger angeschlossen werden müssen. Sender: Data, 5V, Ground und Empfänger Ground, Data, Data, 5V. Falls ihr euch nun wundert warum der Empfänger zwei Datenpins hat: Man muss nur einen benutzen, kann ihn sich also aussuchen. Soweit ich weiß kann man dann an den anderen Pin eine Antenne anschließen, um die Reichweite zu vergrößern. Ich habe die Reichweite ohne Antenne im Haus getestet und das ging über mehrere Räume, weshalb ich bisher keine Antenne gebraucht habe. Da ein Gerät Informationen sendet und das Andere diese empfängt benötigen wir zusätzlich zum Arduino noch einen Mikrocontroller. Da ihr diesen auch programmieren müsst, müsst ihr zum Upload ihn wie hier anschließen. Ich verwende den Arduino als Empfänger und den ATmega328P-PU alleine als Sender.

Das Programm

Da es ja einen Sender und einen Empfänger gibt benötigt man zwei Sketche. Beide gemein haben sie aber, dass man die Bibliothek VirtualWire braucht. Diese kann man hier herunterladen. Die zip Datei muss man dann in den librarie Ordner im Arduino Ordner entpacken. Dann kann man sie jeweils durch Klicken auf Sketch > Include Library > VirtualWire hinzufügen.
Der Sketch des Senders:
Nach dem nachladen der Virtualwire Bibliothek muss man im Setup Teil über die Funktion vw_set_tx_pin(Pin); den Datenpin des Senders angeben. Außerdem muss man mit vw_setup(Datenrate); die Datenrate festlegen und vw_set_ptt_inverted(true); eingeben, damit der Sender korrekt funktioniert. Im Loop-Teil wird über vw_send(Nachricht, Länge) die Nachricht versandt. Damit nicht schon während dem Versenden die Loopschleife erneut begonnen wird, wird mit vw_wait_tx(); gewartet, bis die Nachricht vollständig versandt wurde. Die Nachricht ist wie im letzten Teil in einem Pointer, das Datenformat ist uint8_t. Insgesamt sieht das Programm zum Senden mittels eines 433 Mhz Senders dann so aus:
Der Sketch des Empfängers:
Als erstes muss man wieder die Datenrate festlegen, den Datenpin festlegen und den Empfänger starten. Anschließend muss man noch eine serielle Verbindung zum PC herstellen. Im Loop-Teil wird zuerst der Array festgelegt, in dem die Nachricht später gespeichert werden soll. Ein Array ist ähnlich wie eine Variable, aber wie eine Variablenliste. Das heißt, dass name[0] eine Variable enthält und name[1] wieder eine Variable enthält. Anschließend erzeugt man den Pointer laenge, der auf VW_MAX_MESSAGE_LEN zeigt. Das ist die Länge der Nachricht. Dadurch weiß man dann wie oft man den nächsten Index des Array noch auslesen muss, wenn man längere Nachrichten hat. Über vw_wait_rx wird solange gewartet, bis eine Nachricht empfangen wurde. vw_get_message speichert die Nachricht dann Zeichen für Zeichen in den angegebenen Array. Über Serial.println((char)message_arrray[0]) wird das erste Zeichen der Nachricht am PC ausgegeben. Dazu muss man die serielle Konsole mit einem Klick auf die Lupe rechts oben öffnen. Wichtig ist, dass ihr den Datentyp, also das (char) nicht vergesst, da ihr sonst statt eurem Zeichen eine komplett andere Zahl bekommt.
Wenn man nun die serielle Konsole öffnet sieht man das erste Zeichen der Nachricht, in meinem Fall eine 1.
Ich hoffe ich konnte euch mit diesem Post wirklich erklären, wie eine drahtlose Übertragung über 433Mhz funktioniert. Schreibt doch mal in die Kommentare, wozu ihr das benutzen werdet. Vergesst auch nicht im Lexikon(siehe Navigationsleiste) Begriffe nachzuschauen die ihr nicht versteht(beispielsweise was ein Array ist).

Keine Kommentare:

Kommentar veröffentlichen