Inhaltsverzeichnis:

UChip - Seriell über IR! - Gunook
UChip - Seriell über IR! - Gunook

Video: UChip - Seriell über IR! - Gunook

Video: UChip - Seriell über IR! - Gunook
Video: Kingmaker - The Change of Destiny Episode 10 | Arabic, English, Turkish, Spanish Subtitles 2024, Juli
Anonim
UChip - Seriell über IR!
UChip - Seriell über IR!
UChip - Seriell über IR!
UChip - Seriell über IR!

Drahtlose Kommunikation ist heutzutage zu einem Schlüsselmerkmal in unseren Projekten geworden und wenn ich über Drahtlos rede, fällt mir als erstes Wi-Fi oder BT ein, aber der Umgang mit den Wi-Fi- oder BT-Kommunikationsprotokollen ist keine leichte Aufgabe und verbraucht viel der MCU-Ressourcen und lässt wenig Platz zum Codieren meiner Anwendung. Daher entscheide ich mich meist für ein externes Wi-Fi/BT-Modul, das seriell mit dem Mikrocontroller verbunden ist, um die Rollen aufzuteilen und mehr Freiheiten zu gewinnen.

Manchmal sind Wi-Fi und BT jedoch für einige Anwendungen, die eine niedrige Bitrate und eine kurze Kommunikationsentfernung erfordern, „übertrieben“. Darüber hinaus erfordert die Verwendung von Wi-Fi oder BT die Notwendigkeit, Ihr Smartphone oder Gerät mit einer ordnungsgemäßen Authentifizierung zu verbinden.

Stellen Sie sich vor, Sie müssen lediglich ein externes Licht ein- und ausschalten, die Lampenintensität ändern oder ein elektrisches Tor öffnen. Lohnt es sich, WLAN oder BT zu verwenden?

Je nach Umgebung und Anwendung kann sich die drahtlose Kommunikation über IR (Infrarot) als nützlich erweisen. Ein Serial over IR, implementiert mit wenigen externen Komponenten (3 diskrete Komponenten!) und uChip (ein sehr kleines Arduino-kompatibles Board) können die Lösung sein, nach der Sie gesucht haben!

Stückliste (für ein Tx-Rx-Gerät):

1 x uChip

1 x IR-LED: mit der Emissionsspitze bei 950 nm

1 x TSOP-38238 (entsprechend)

1 x 1KOhm Widerstand

Hardware

1 x Steckbrett/Protoboard

1 x schwarzes Plastikrohr: Innendurchmesser gleich groß wie die IR-LED, das Rohr ist notwendig, um ein Übersprechen mit dem TSOP-Empfänger zu verhindern.

1 x Alufolie (3cm x 3cm)

1 x Band

TIPP: Sie können ein Nur-TX- oder Nur-RX-Gerät erstellen, falls Sie eine Kommunikation in eine Richtung benötigen, indem Sie die unnötige RX/TX-Hardware aus der Schaltung entfernen oder den entsprechenden Code in der Skizze aktivieren/deaktivieren.

Schritt 1: Verkabelung

Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung

Verdrahten Sie die Komponenten entsprechend dem Schaltplan zusammen.

Ein paar Anmerkungen zum einfachen Schaltplan. Da der TSOP-38238 eine Stromversorgung von 2,5 V bis 5 V zulässt und maximal 0,45 mA aufnimmt (das Datenblatt finden Sie HIER), werde ich den Empfänger über zwei Pins mit Strom versorgen, die jeweils Masse und Stromversorgung bereitstellen. Dies ermöglicht das Ein- und Ausschalten des Empfängers bei Bedarf und eine sehr einfache Hardware-Verkabelung. Falls Sie eine unidirektionale Kommunikation benötigen, können Sie außerdem wählen, ob Sie ein (Tx/Rx)-only-Gerät erstellen möchten, indem Sie einfach den TSOP-38238 deaktivieren/aktivieren.

Wie funktioniert die Schaltung?

Es ist ganz einfach. Der TSOP-Ausgangspin wird auf Low gezogen, wenn der Sensor eine Folge von 6 oder mehr Impulsen bei 38 kHz erkennt, andererseits wird er auf High gezogen, wenn kein solches Signal vorhanden ist. Um die seriellen Daten über IR zu übertragen, versorgt die Schaltung daher die LED-Anode mit einer 38-KHz-PWM, die mit dem seriellen TX-Signal moduliert ist, das die LED-Kathode nach unten zieht.

Folglich wird bei einem hohen Pegel des seriellen TX0 die LED nicht vorgespannt oder in umgekehrter Richtung vorgespannt (keine Impulse) und der TSOP-Ausgangsstift wird hochgezogen. Durch die Übertragung eines niedrigen Pegels auf der Seriell wird die LED mit Strom versorgt und erzeugt IR-Impulse entsprechend dem angelegten PWM-Signal; daher wird der TSOP-Ausgang niedrig gezogen.

Da die Übertragung direkt erfolgt (0->0 und 1->1), sind keine Inverter oder sonstige Logik auf der Empfängerseite erforderlich.

Ich reguliere die optische Ausgangsleistung der LED, indem ich das PWM-Tastverhältnis entsprechend der Anwendung wähle. Je höher das Tastverhältnis, desto höher die optische Ausgangsleistung und desto weiter übertragen Sie Ihre Nachricht.

Denken Sie daran, dass wir noch Impulse erzeugen müssen! Daher sollten Sie den Arbeitszyklus von 90% nicht überschreiten, da der TSOP das Signal sonst nicht als Impulse erkennt.

Brauchen Sie mehr Leistung?

Um den Strom zu erhöhen, können wir einfach den Wert des 1kOhm-Widerstands reduzieren?

Vielleicht, seien Sie einfach nicht zu anspruchsvoll! Der maximale Strom, den Sie von einem Pin der MCU erhalten, ist auf 7 mA begrenzt, wenn der Port-Pin stärker als normal angesteuert wird (PINCFG. DRVSTR = 1 und VDD > 3 V), wie im SAMD21-Datenblatt angegeben.

Die Standardkonfiguration (die von den Arduino IDE-Bibliotheken standardmäßig übernommen wird) begrenzt den Strom jedoch auf 2 mA. Daher ergibt die Verwendung von 1kOhm bereits die Strombegrenzung mit den Standardeinstellungen!

Bei der Stromerhöhung geht es nicht nur um elektrische Komponenten. Knapp:

  • Ändern Sie den Widerstand (dessen Mindestwert auf ungefähr 470 Ohm begrenzt ist -> VDD / 470 ~ 7 mA);
  • Setzen Sie entsprechend PORT->PINCFG->DRVSTR auf 1;

Ich werde den Code einschließlich dieser Funktion in einem zukünftigen Update bereitstellen.

Denken Sie jedoch daran, dass das Senken und Ableiten von Strom von MCU-Pins nahe an seinen Grenzen kein so guter Ansatz ist. Tatsächlich verringert es die Lebensdauer und Zuverlässigkeit der MCU. Daher empfehle ich, die normale Antriebsstärke für den langfristigen Gebrauch beizubehalten.

Schritt 2: Programmierung

Laden Sie die Skizze „IRSerial.ino“in den uChip (oder das von Ihnen verwendete Arduino-kompatible Board).

Falls Sie den Pin ändern müssen, der die PWM erzeugt, stellen Sie sicher, dass Sie einen Pin verwenden, der mit einem TCC-Timer verbunden ist, da diese Version des Codes nur mit TCC-Timern funktioniert (überprüfen Sie die „variant.c“Ihres Boards für diese Informationen). Ich werde den Code hinzufügen, um in zukünftigen Updates auch TC-Timer zu verwenden.

Der Code ist ganz einfach. Nach dem Setzen von PIN_5 auf niedrig (stellt TSOP GND bereit) und PIN_6 hoch (versorgt den TSOP), startet die MCU die PWM auf PIN_1, stellt die Timer-Periode ein und vergleicht entsprechend der erforderlichen Frequenzmodulation (in meinem Fall sind es 38KHz) und Duty Zyklus (12,5% als Standard). Dazu wird die Standardfunktion analogWrite () an PWM-Pins verwendet und nur das PER_REG (Periodenregister) und das CC (Capture Compare)-Register geändert (der geschriebene Code ist einfach ein Ausschneiden und Einfügen aus der Bibliothek wiring_analog). Sie können die erforderliche Frequenz entsprechend der Änderung von PER_REG des TSOP-Sensors (das ist die obere Grenze zum Zurücksetzen des Timer-Zählers) einstellen, während Sie CC proportional zum Periodenwert auf den gewünschten Prozentsatz des Tastverhältnisses einstellen.

Als nächstes stellt der Code den seriellen Port mit der richtigen Baudrate von 2400 bps ein. Warum so eine niedrige Baudrate?! Die Antwort finden Sie im TSOP-Datenblatt, das Sie HIER finden. Da der TSOP über Filter mit hoher Rauschunterdrückung verfügt, um unerwünschtes Schalten zu verhindern, ist es erforderlich, eine Folge von mehreren Impulsen zu senden, um den TSOP-Ausgangspin herunterzuziehen (die Anzahl der Impulse hängt von der TSOP-Version ab, 6 ist der typische Wert). In ähnlicher Weise wird der TSOP-Ausgang nach einer Mindestzeit, die 10 Impulsen oder mehr entspricht, hochgezogen. Um den TSOP-Ausgang als modulierendes TX0-Signal einzustellen, muss daher die Baudrate unter Berücksichtigung der folgenden Gleichung eingestellt werden:

Serielles Baud < PWM_Frequenz/10

Bei Verwendung von 38 kHz führt dies zu einer Baudrate von weniger als 3800 bps, was bedeutet, dass die höhere zulässige Standardbaudrate 2400 pbs beträgt, wie zuvor erwartet.

Möchten Sie die Baudrate erhöhen? Es gibt zwei Möglichkeiten.

Die einfachste Möglichkeit besteht darin, den TSOP in eine höherfrequente Version (wie den TSOP38256) zu ändern, wodurch Sie die Baudrate (4800bps) verdoppeln können.

Nicht genug?! Dann müssen Sie Ihre eigene optische Verbindung herstellen, indem Sie eine einfache IR-LED + Fotodiode und eine Verstärkungsschaltung verwenden. Diese Lösung erfordert jedoch viel Programmier- und Elektronik-Know-how, um zu verhindern, dass Rauschen die übertragenen Daten beeinflusst, und daher ist ihre Implementierung gar nicht so einfach! Wenn Sie sich jedoch sicher genug fühlen, können Sie gerne versuchen, Ihr eigenes TSOP-System zu erstellen!:)

Schließlich setze ich den SerialUSB-Port (2400bps), den ich zum Senden und Empfangen von Daten auf dem seriellen Monitor verwende.

Die loop()-Funktion enthält den Code, der zum Durchleiten von Daten über die beiden Seriennummern erforderlich ist, und wird direkt aus der Beispielskizze SerialPassthrough kopiert, wobei nur die Seriennummernnamen geändert werden.

Schritt 3: IR-LED abschirmen

Abschirmende IR-LED
Abschirmende IR-LED
Abschirmende IR-LED
Abschirmende IR-LED

Wenn Sie die obige Schaltung nach dem Laden des Codes " IRSerial.ino " einschalten, überprüfen Sie den Serial Monitor auf der Arduino IDE und versuchen Sie, eine Zeichenfolge zu senden. Sie werden wahrscheinlich sehen, dass uChip genau das empfängt, was er sendet! Aufgrund der optischen Kommunikation zwischen der IR-LED und dem TSOP desselben Geräts kommt es zu einem Übersprechen in der Schaltung!

Hier kommt der schwierige Teil dieses Projekts, das Übersprechen zu verhindern! Die Schleife muss unterbrochen werden, um eine bidirektionale serielle Kommunikation über IR zu ermöglichen.

Wie unterbrechen wir die Schleife?

Bei der ersten Option senken Sie das PWM-Tastverhältnis und senken damit die optische Ausgangsleistung der LED. Dieser Ansatz reduziert jedoch auch die Entfernung, über die Sie einen zuverlässigen seriellen IR-Kanal erhalten. Die zweite Möglichkeit besteht darin, die IR-LED abzuschirmen, wodurch ein gerichteter IR-„Strahl“erzeugt wird. Es ist eine Frage von Versuch und Irrtum; Schließlich gelang es mir, mit einem in Aluminiumfolie und Klebeband gewickelten schwarzen pneumatischen Luftschlauch (für die elektrische Isolierung) das Übersprechen zu unterbrechen. Das Anbringen der sendenden IR-LED in der Röhre verhindert die Kommunikation zwischen dem TX und dem RX desselben Geräts.

Sehen Sie sich das Bild an, um meine Lösung zu sehen, aber probieren Sie andere Methoden aus und / oder schlagen Sie Ihre vor! Es gibt keine absolute Lösung für dieses Problem (es sei denn, Sie benötigen einen einfachen Ein-Richtungs-Kanal) und Sie müssen wahrscheinlich das Schaltungslayout, das PWM-Tastverhältnis und die IR-Abschirmung entsprechend Ihren Anforderungen abstimmen.

Sobald Sie das Übersprechen unterbrechen, können Sie überprüfen, ob Ihr Gerät noch funktioniert, indem Sie auf dem Tx-Rx des Geräts eine Schleife erstellen, die die Reflexion der IR-Wellenlänge an IR-reflektierenden Oberflächen ausnutzt.

Schritt 4: Kommunizieren

Kommunizieren!
Kommunizieren!
Kommunizieren!
Kommunizieren!

Das ist alles

Ihr seriell über IR-Gerät ist bereit zu kommunizieren, verwenden Sie es, um Daten über IR zu senden, alles ein- und auszuschalten, was Sie möchten oder den Status eines Sensors zu überprüfen, den Sie heimlich verstecken!

Die Entfernung, über die die Kommunikation zuverlässig ist, ist nicht so groß wie bei einem WLAN- oder BT-Gerät. Allerdings gerichtet (je nach LED-Blende und eingesetztem IR-Abschirmsystem), was bei manchen Anwendungen sehr nützlich sein kann!

In Kürze werde ich ein Video hochladen, in dem Sie einige Beispiele meiner Anwendungen sehen können. Genießen!

Empfohlen: