Visuelle Lichtkommunikation

Textnachrichten mittels Lichtsignale senden – Pi zu Arduino

Mir gefällt die Idee Daten über sichtbarem Licht zu versenden. Allgemein wird Li-Fi (Light Fidelity) und VLC (Visible Light Communication) im Moment heiß diskutiert. Dabei ist VLC eine Visuelle Lichtkommunikation, also primär ein Kabel Ersatz und LiFi dagegen eine Anlehnung an WiFi. Ein LiFi Gerät wäre eine Art Internetfähiger Router, der Daten über Lichtsignale statt Radio Frequenzsignale überträgt. Gegenwärtig hat jedoch noch keine Firma einen Li-Fi Router entwickelt bzw. im Verkauf. Die VLC Technik wird aktuell von Elon Musks StarLink Projekt prominent eingesetzt. So können die Satelliten mittels Laserstrahlen Daten austauschen. Das habe ich vereinfacht in diesem Blogartikel nachgebaut.

Zunächst möchte ich nur einzelne Textnachrichten in eine Richtung übertragen. In einem nächsten Schritt kann dies dann ausgeweitet werden um ganze Dateien bidirektional zu übertragen. Zum Empfangen der Nachrichten habe ich einen Ardunio ausgewählt, da dieser im Gegensatz zum Raspberry Pi analoge Eingänge besitzt und somit leicht mit analogen Sensoren verbunden werden kann. Zum Senden eignet sich ein Raspberry Pi, da hier nur digitale Pins benötigt werden und ein Pi allgemein leistungsfähiger bzw. schneller Daten übertragen kann. Das wurde bereits in den vorrangegangenen Posts zum Definieren einer Taktfrequenz beim Arduino und beim Raspberry Pi getestet. Alle Skripte zum Betrieb der VLC Kommunikation können am Ende des Artikels heruntergeladen werden. Die folgenden drei Blogposts stehen in direktem Zusammenhang zu diesem Projekt:

UPGRADE: ALLE ARTEN VON DATEN MITTELS VISUELLER LICHTKUMMUNIKATION ÜBERTRAGEN

So programmiert man die Taktfrequenz des Arduino: Timer Interrupts nutzen als Taktfrequenz.

So programmiert man die Taktfrequenz des Pi: Präzise Timer Funktion in C für den Pi.

So verhinderst man Fehler in der Datenübertragung: Mit CRC fehlerhafte Pakete erkennen.

Liste der Bauteile

Verkabelung für die Visuelle Lichtkommunikation

Textnachrichten VLC Fritzing Verkabelung für Visuelle Lichtkommunikation

Die Verkabelung gestaltet sich eher simpel. Die 5V Solarzelle ist sehr gut geeignet um Lichtsignale zu detektieren. Daher wird die Solarzelle mit dem Empfänger, also dem Arduino verbunden. Der Ground der Solarzelle wird mit einem Ground des Arduinos verbunden. Die Plusleitung der Solarzelle wird mit einem analogen Pin des Arduinos verbunden. Hier eignet sich beispielsweise A0.

Vom Raspberry Pi aus werden die Nachrichten über Lichtsignale des Lasers an den Arduino übermittelt. Hierfür wird der Ground einer Laserdiode (5V) mit einen Ground Pin des Pi verbunden (siehe Grafik). Anschließend wird die Plusleitung der Laserdiode mit einer der digitalen Pins des Raspberry Pis verbunden. Hier habe ich den GPIO17 Pin gewählt, welcher in der „wiringPi“ Library Pin 0 entspricht (siehe Grafik).

VLC Textnachrichten visuelle Lichtkommunikation wiringPi

Als Alternative zu dem Laser und der Solarzellen Kombination kann auch eine LED und ein Photowiderstand genutzt werden. Allerdings eignet sich ein Laser besser für schnellere und präzisere Datenübertragung. Dazu bietet eine Solarzelle eine große Fläche um die Laserstrahlen zu detektieren.

Modulationsmethode On-Off-Keying

Die Textnachrichten werden im Binärcode als „1“ oder „0“ übertragen. Es gibt verschiedene Möglichkeiten diese Daten zu modulieren. Eine der einfachsten Möglichkeiten ist es eine identische Taktfrequenz für den Sender und Empfänger festzulegen. Dann wird in jedem Takt entweder eine „1“ oder eine „0“ übertragen.

Die Vorgehensweise nennt sich Aplituden-Shift-Keying. Wenn die Laserdiode besonders stark die Solarplatte anleuchtet wird das vom Empfänger als binäre „1“ detektiert. Wenn aber die Laserdiode nur schwach leuchtet wird das als binäre „0“ detektiert.

Tatsächlich macht es aber Sinn die Laserdiode gar nicht leuchten zu lassen für eine binäre „0“. Dann spricht man von On-Off-Keying. Das ist sozusagen eine Vereinfachung des Amplituden-Shift-Keyings. Die nachfolgende Grafik verdeutlicht den Unterschied zwischen Amplituden-Shift-Keying und On-Off-Keying.

Modulationstechnik Visuelle Lichtkommunikation

Das bedeutet, immer wenn die Solarzelle Licht detektiert, wird ein entsprechender Spannungswert an den analogen Pin des Arduino übergeben. Wenn dieser Spannungswert einen vordefinierten Wert übersteigt, registriert der Arduino es als eine binäre „1“, ansonsten als binäre „0“. Es macht durchaus Sinn den vordefinierten Wert an das Tageslicht anzupassen. Eventuell mit Hilfe eines zusätzlichen Lichtsensors.

Arduino Code zum Nachrichten empfangen

//This is the "real" loop function
  switch (state)
  {
    case 0:
      //looking for synchronization sequence
      synchro_Done=false;
      lookForSynchro(data);

      if (synchro_Done== true)
      {
        state=1;
      }
      break;
    case 1:
      //receive Data
      receiveData_Done =false;
      receiveData(data);

      if (receiveData_Done==true)
      {
        state=0; 
      }
      break;
  }

Die Software des Arduino ist im Prinzip als State Machine aufgebaut. Es gibt zwei States. Ein State für die Synchronisierung und einer für das Auslesen der Textnachricht. Im State Synchronisierung wartet der Empfänger auf eine festgelegte Bitsequenz (Preambel) beispielsweise „10101010101111111111“. Diese Sequenz bedeutet, dass der Empfänger jetzt zuhören muss, weil eine Textnachricht folgt. Der vollständige Arduino Code kann am Ende des Artikels heruntergeladen werden. Die nachfolgende Grafik zeigt den genauen Aufbau der Datenpakete.

Aufbau Textnachrichten VLC

Sobald die Preambel erkannt wurde, wechselt der Empfänger automatisch in den zweiten State und empfangt die eigentliche Nachricht. Wobei jedoch die ersten 16 Bits der Textnachricht einer Dezimalzahl entsprechen, die dem Empfänger mitteilt, wie viele Zeichen die ankommende Textnachricht umfasst. Sobald diese Zahl erreicht wurde, wird der Text im Serial Monitor des Arduino ausgegeben und der State wechselt wieder zurück. Jetzt wird erneut auf die Synchronisierungsequenz gewartet. Der vollständige Softwarecode kann am Ende des Blog Artikels heruntergeladen werden. Zur Verbesserung der Übertragungsqualität kann noch eine zyklische Redundanzprüfung durchgeführt werden wie in der nachfolgenden Grafik.

CRC Datenpakete Aufbau VLC

Raspberry Pi Code zum Nachrichten senden

//Read message
        char msg[3000]; 
        int len, k, length;
       
        printf("\n Enter the Message: ");
        scanf("%[^'\n']",msg);
        
        len=strlen(msg);
        
        
        int2bin(len*8, 16); //len*8, because 8 bits are one byte
        
        for(k=0;k<len;k++)
        {
                chartobin(msg[k]);            
        }

Der Programmcode des Raspberry Pi muss in C geschrieben werden. Python wäre zu langsam und würde keine stabile Taktfrequenz zum Senden der Daten erreichen. Der vollständige Programmcode kann am Ende der Artikels heruntergeladen werden. Damit der Pi die Laserdiode steuern kann wird die „wiringPi.h“ library benötigt. Über „digitalWrite(0, HIGH)“ kann so die Diode eingeschalten werden und mittels „digitalWrite(0, LOW)“ wieder aus. Wichtig: Beim Kompilieren bitte nicht die „wiringPi“ library vergessen! Der Befehl lautet: „gcc -o simpleLaser simpleLaser.c -lwiringPi“

Am Anfang fordert das Programm mittels printf Funktion eine Textnachricht einzugeben. Diese wird mittels scanf Funktion eingelesen und gespeichert. Anschließend wird jeder Buchstabe in Binärcode umgewandelt und in einem Array abgespeichert. Die Umwandlung wird in der nachfolgenden Grafik gezeigt. Am Ende wird in einem festgelegten Takt der Binärcode aus dem Array übermittelt. Für eine binäre „1“ wird die Laserdiode eingeschaltet und für eine binäre „0“ wieder aus.

Character to binary conversion

Fazit zum Projekt Visuelle Lichtkommunikation

Die Übertragung der Textnachrichten mittels Visuelle Lichtkommunikation funktioniert hervorragend. Dank der zyklischen Redundanzprüfung auch absolut fehlerfrei. Allerdings ist der Nutzen einer eindimensionalen Nachrichtenkommunikation eher gering. Es wäre besser, wenn jegliche Art von Dateien übertragen werden könnte und das in beiden Richtungen. Hier wird wohl bald ein Update folgen.

Set Up VLC Arduino Pi Visuelle Lichtkommunikation

Dateien zum Herunterladen

 

Ein Gedanke zu “Textnachrichten mittels Lichtsignale senden – Pi zu Arduino

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.


*