Frage:
Der beste Weg, um Sensorwerte über eine einfache HF-Verbindung zu senden
mchr
2011-12-31 22:59:35 UTC
view on stackexchange narkive permalink

Ich habe ein Paar einfache 315-MHz- TX / RX -Module gekauft. Ich möchte diese verwenden, um einen batteriebetriebenen ATTiny85 an eine Arduino-Basisstation anzuschließen. Der ATTiny muss regelmäßig aufwachen und einen Sensorwert an die Basisstation senden.

Theoretisch sollte ich in der Lage sein, einfach Daten in den TX zu schreiben und sie vom RX-Modul zu lesen. Wie stelle ich jedoch sicher, dass ich mit der richtigen Geschwindigkeit schreibe / lese? Welchen Code muss ich verwenden, um mit einer bestimmten Geschwindigkeit (Bytes / Sekunde) zu senden? Was ist die beste Methode zur Fehlerkorrektur / -erkennung?

Da der Sender batteriebetrieben sein soll, kann ich im Leerlauf einen Transistor verwenden, um die VCC für das TX-Modul auszuschalten. Was erhält das RX-Modul, wenn das TX-Modul ausgeschaltet wird?

Sieben antworten:
Olin Lathrop
2011-12-31 23:31:58 UTC
view on stackexchange narkive permalink

Diese Module lassen den Empfänger-Pin im Grunde wackeln, je nachdem, wie Sie den Sender-Pin ansteuern. Sie wissen nichts darüber, was es Ihrer Meinung nach bedeutet, mit dem Stift zu wackeln, und enthalten keinen UART. Weitere Details waren nicht sofort offensichtlich, ohne zu graben. Das ist dein Job, also habe ich mich nicht darum gekümmert, weiter zu gehen. Sie sollten einen Link zum Datenblatt und nicht zur Produkt-Begrüßungsseite bereitstellen.

Diese Module arbeiten mit AM-Modulation. In der kurzen Beschreibung steht ASK, aber es handelt sich wahrscheinlich nur um das Ein- und Ausschalten des Senders (was technisch gesehen eine Teilmenge von ASK ist). Das Problem bei diesem Schema ist, dass der Empfänger den Pegel für den eingeschalteten Sender nicht von Natur aus kennen kann. Es betrachtet daher höchstwahrscheinlich die zuletzt empfangenen Signalstärken und wählt einen Wert in der Mitte aus, um zwischen Ein und Aus zu entscheiden. Dies wird als Daten-Slicing bezeichnet.

Wenn Sie nicht regelmäßig Ein- und Ausschalten senden, verliert der Empfänger den Überblick darüber, welche Pegel ein- und ausgeschaltet sind, und kann Daten nicht mehr korrekt aufteilen. Dies wird normalerweise auf zwei Arten behandelt. Zunächst wird eine Präambel gesendet. Diese enthält eine Reihe von Ein- und Ausschaltungen in schneller Folge, damit sich der Empfänger auf einen guten Schwellenwert für den Datenschneider festlegen kann. Es wird erwartet, dass einige oder alle dieser Bits vom Empfänger nicht korrekt interpretiert werden und daher nicht wirklich "empfangen" werden. Die zweite Strategie besteht darin, Daten so zu senden, dass der Empfänger immer ein aktuelles Ein- und Ausschalten erhält. Einige Empfänger, insbesondere billige, die das Daten-Slicing analog durchführen, schneiden nur über die tiefpassgefilterte durchschnittliche empfangene Signalstärke. Bei solchen Empfängern müssen Sie nicht nur häufig zwischen Ein und Aus wechseln, sondern der Durchschnitt muss nahe bei 1/2 Ein liegen.

Aus diesem Grund ist die Manchester-Codierung für solche RF-Verbindungen so beliebt. Ich werde hier nicht auf die Manchester-Codierung eingehen, da dies bekannt ist und Sie kein Problem damit haben werden, viele Informationen darüber zu finden. Ein nettes Merkmal des Manchester-Codes ist, dass er über jedes Bit durchschnittlich 1/2 beträgt. Ein Bit ist in zwei Hälften geteilt. Ein-Aus kann 1 und Aus-Ein 0 bedeuten. Manchester ist wahrscheinlich das am einfachsten durchzuführende Codierungsschema.

Sie können einen UART verwenden, müssen jedoch vorsichtig sein und geben etwas Bandbreite auf ( Batterieleistung). Schauen Sie sich an, was ein UART sendet. Wenn Sie die Zeichen unmittelbar nacheinander senden, dauert jedes Zeichen 10 Bit. Es gibt ein Startbit, 8 Datenbits und ein Stoppbit. Das Start- und Stoppbit haben immer die entgegengesetzte Polarität. Sie können festlegen, dass in den verbleibenden 8 Bits Codes mit einer gleichen Anzahl von Nullen und Einsen verwendet werden, um den Schwellenwert für den Datenschneider in der Mitte zu halten. Dies bedeutet, dass Sie in jedem UART-Zeichen nur 4 Informationsbits senden dürfen. Sie müssen auch sorgfältig über die Präambel nachdenken.

Im Allgemeinen sollten Sie davon ausgehen, dass bei jeder HF-Übertragung eine erhebliche Wahrscheinlichkeit von Bitfehlern besteht. Dies bedeutet, dass eine Art Prüfsumme eine gute Idee ist. Sie können Daten in Paketen senden und jedem Paket eine 16- oder 20-Bit-CRC-Prüfsumme hinzufügen. Wenn das Paket nicht intakt empfangen wird, wird es verworfen, als wäre es nie geschehen.

Das System muss sich auch mit dem zufälligen Rauschen befassen, das beim Ausschalten des Senders empfangen wird. In diesem Fall sinkt der Empfängerschwellenwert und es werden Daten geschnitten, unabhängig von dem zufälligen Rauschen, das es aufnimmt. Mit einer richtig gestalteten Präambel und Prüfsumme können Sie die Wahrscheinlichkeit verringern, dass zufälliges Rauschen wie gültige Daten aussieht, die verschwinden.

Danke für die hervorragende Antwort. Gibt es Codebeispiele, die all dies tun? Es hört sich so an, als ob das meiste / all dies Dinge sind, die jeder, der diese Module verwendet, lösen muss - sicherlich bin ich nicht der erste.
Ich habe einige Male in Manchester codiert und decodiert, aber jedes hatte seine eigenen Falten und ist daher in Kundencode eingebettet, den ich nicht herausgeben werde. Umschauen. Es ist durchaus möglich, dass jemand dies getan und Code gepostet hat. Beachten Sie jedoch, dass diejenigen, die dies für eine Postleitzahl halten, nicht diejenigen sind, deren Code Sie möchten. Manchmal findet man da draußen aber ein paar gute Sachen. Wie ich schon sagte, schau dich um.
Ich habe allgemein festgestellt, dass das Debuggen von Code, wenn ich solchen Code finde, so viele Probleme hat, dass es besser wäre, meinen eigenen zu schreiben.
@Kellenjb: Ich stimme zu. Ich sehe mich nicht einmal nach dem Code anderer um. Im besten Fall ist es nicht schlecht, und das ist selten, aber es ist schwierig und fehleranfällig, es in mein Projekt zu integrieren, wenn es überhaupt nicht in meine Entwicklungsumgebung geschrieben wurde. Ich erwähne, mich nur umzusehen, weil es den Anschein hat, als würden andere Menschen nicht so denken.
@mchr Ich habe es noch nicht persönlich verwendet, kann also nicht mit der Zuverlässigkeit sprechen, aber ich habe das [VirtualWire] (http://www.open.com.au/mikem/arduino/VirtualWire.pdf) gesehen (Hinweis Das ist leider eine PDF-Bibliothek, die in Diskussionen über diese Art von Modulen in Kombination mit Arduinos ein wenig erwähnt wurde. Es scheint, dass es speziell für sie geschrieben wurde.
Virtual Wire ist die perfekte Lösung für die Verwendung des RX-Moduls mit dem Arduino. Die VW-Bibliothek scheint jedoch mit einem ATTiny85 nicht zu funktionieren. Ich denke, ich werde mich mit der Portierung / Korrektur des Codes befassen, der auf meinem ATTiny 85 ausgeführt werden soll.
Ich bin gerade mit einer Bibliothek verlinkt worden, die behauptet, auf ATTiny und ATmega zu tun, was ich will - http://arduino.cc/forum/index.php/topic,63755.0.html
mchr
2012-01-31 05:57:34 UTC
view on stackexchange narkive permalink

Am Ende habe ich eine Manchester-Codierungsbibliothek verwendet. Die neueste Version dieser Bibliothek wurde jetzt hier veröffentlicht: https://github.com/mchr3k/arduino-libs-manchester

Details zu meiner Nutzung dieser Bibliothek können sein hier zu sehen: http://mchr3k-arduino.blogspot.com/

vicatcu
2012-01-31 22:00:25 UTC
view on stackexchange narkive permalink

Diese Frage wird direkt von den Wicked Node / Wicked Receiver Shield -Produkten beantwortet, die ich bei Wicked Device herstelle (Offenlegung). Bitte überprüfen Sie sie aus. Sie stellen eine kostengünstige Einweg-ASK-Funkverbindung mit 433 MHz dar, mit der in vorgeschriebenen Intervallen bis zu vier analoge Sensorwerte (pro Wicked Node) drahtlos an Ihr Arduino übertragen werden können. Ich habe einen ATTiny24A anstelle eines ATTiny85 hauptsächlich für die zusätzlichen Analogeingänge verwendet. Die Software verwendet häufig Schlafmodi und der Wicked Node kann mehrere Monate lang mit einer 9-V-Batterie betrieben werden.

Dmitry Dzhus
2012-01-09 18:02:40 UTC
view on stackexchange narkive permalink

Ich würde empfehlen, sich die VirtualWire-Bibliothek anzusehen, die die HF-Übertragung für Sender / Empfänger-Paare im ISM-Bereich mit ASK-Ausgang implementiert. Siehe http://www.open.com.au/mikem/arduino/. Ich habe es erfolgreich verwendet, um Daten von drahtlosen Sensoren zu sammeln, die in meinem Haus verteilt sind.

Leider unterstützt die VirtualWire-Bibliothek das ATTiny85 nicht.
nemik
2012-01-31 21:46:18 UTC
view on stackexchange narkive permalink

Abhängig davon, wie viel Interoperabilität mit vorhandenen Geräten Sie wünschen, aber wenn Sie viel möchten, http://www.dealextreme.com/p/wireless-bluetooth-rs232-ttl-transceiver-module-80711 könnte einen Blick wert sein. Es ist nur eine sehr billige serielle Bluetooth-Verbindung und fast jeder Computer mit Bluetooth kann sie lesen. Bluetooth bietet auch (relativ) eine hervorragende Leistung, selbst in Umgebungen mit sehr lauten 2,4-GHz-Kommunikationen.

Danke für den Link - das ist ein sehr billiges Bluetooth-Modul!
David
2014-11-30 13:29:50 UTC
view on stackexchange narkive permalink

Schauen Sie hier:

https://www.sparkfun.com/datasheets/RF/KLP_Walkthrough.pdf

Die meisten Antworten Sie suchen im Dokument.

Können Sie Ihrer Antwort über den Link ein paar weitere Details hinzufügen?Nur-Link-Antworten werden nicht empfohlen, da sie unbrauchbar werden, wenn der Link in Zukunft nicht mehr funktioniert.
user69308
2015-03-10 15:54:32 UTC
view on stackexchange narkive permalink

Obwohl das Originalplakat bereits eine Lösung gefunden hat. Ich werde nur einige Informationen für Leute hinzufügen, die hier landen. Grundsätzlich gibt es zwei etablierte Möglichkeiten, drahtlose Daten zwischen Arduino / Attiny zu senden: VirtualWire und Manchester. Beide haben Bibliotheken zur Verfügung. Virtualwire kann meines Wissens nur Zeichen senden (obwohl es eine Problemumgehung gibt), Manchester kann Nummern senden. Stellen Sie bei Verwendung der Manchester-Bibliothek sicher, dass Sie die neueste haben. Sowohl VirtualWire als auch Manchester können in einem Attiny abgelegt werden In Bezug auf das Ein- oder Ausschalten des Senders, um den Batterieverbrauch zu sparen, schlage ich vor, dass Sie den Attiny in den Ruhezustand versetzen und beim Aufwachen die Stromversorgung des Senders über einen Transistor einschalten (Attiny-Pin zur Basis, hoch machen usw.) ) .In den Instructables gibt es ein Beispiel (wahrscheinlich mehr als eines): http://www.instructables.com/id/Attiny85-RF-Transmitter-to-Arduino-Uno-Receiver-Ma/?comments=all # CWNVMX4I6RT1A1N



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...