»

Dez 14 2015

Batteriebetriebene Funk Sensoren

Einführung

Ziel dieses Projekts ist es schnurlose Funk Sensoren, die über Batterien versorgt werden, zu betreiben und mit dem RaspberryPi die Daten zu empfangen, auszuwerten sowie zu visualisieren.
Als Sensor kann man theoretisch so ziemlich alles verwenden ob Temperatur, Luftfeuchtigkeit, Luftdruck, Höhenmesser, Anwesenheitssensoren, Magnetschalter, Erschütterungs-Sensoren, Feuchtigkeitsmesser usw, also im Prinzip alle arten von Sensoren oder auch nur einfache Kontakte.

Das Projekt orientiert sich am TinyTX von Nathan Chantrell (auf der Seite findet ihr auch weitere Informationen zu verwendbaren Sensoren).
Leider haben andere Blogger sich meiner Informationen bedient aber keine/fehlerhafte Quellenangaben verwendet, oder sogar das Projekt als Ihres ausgegeben… Dieses Projekt wurde im forum-raspberrypi.de in mühsamer Kleinarbeit zusammen mit dortigen Mitgliedern erarbeitet und verschlang über 1 Jahr Freizeit!

Aufbauend auf das TinyTX Projekt von Nathan Chantrell hat sich bei der Entwicklung dieses Projekts hier, eine gelungene Weiterentwicklung in Form des TinyTX4 / TinyRX4 gebildet, welche evtl. auch schon bald eine noch mal überarbeitete Version erfahren wird.

Alle benötigten Informationen, Schaltpläne, Platinenlayouts, Bauteile sowie Quellcode – findet ihr hier oder auf meinem Github Repo, habe alles veröffentlicht :)

 


 

Abgesehen von der Grundausstattung für einen lauffähigen RaspberryPi, benötigt man zusätzlich:

  • Empfänger-Modul, welches an die GPIO Pins des RaspberryPI’s angeschlossen wird (RX, 3V3, GND)
  • Ein paar Steckbrett-Kabel um den Empfänger an den PI anzuschließen sowie die ATtiny AVR Chips zu flashen (programmiern)
  • Sender-Modul mit Batteriehalter
  • Sensor für Sender-Modul
  • RFM12B Funkmodule für sowohl Empfänger als auch Sender
  • Löt Utensilien

Man kann Empfänger/Sender entweder auf Streifenrasterplatinen zusammen löten, oder sich für ein paar Euros nackte Platinen fertigen lassen.

Auch kann man die Funksender recht einfach in FHEM mit der JeeLib einbinden. Der hier entwickelte Empfänger wird als serielle Schnittstelle erkannt und nach Anpassung der JeeLib werden korrekte Werte angezeigt. Siehe dazu > hier <

Ein weiterer wichtiger Hinweis der sich erst später herausgestellt und von nurazur ermittelt wurde: Batteriebetriebene Funksensoren – Empfindlichkeitsmessungen an TinyTx4 und TinyRx4
Demnach wäre es besser einen TinyTX4 als Empfänger einzusetzen da dessen Reichweite/Empfindlichkeit besser ist. Hier scheint uns leider bei der Entwicklung des TinyRX4 ein kleiner Fehler unterlaufen zu sein, stellt aber eigentlich kein großes Problem dar.. Das wird ua. in der Nachfolgerversion 2.0 behoben.

Warum man sich für ‚unsere‘ TinyTX4/TinyRX4 entscheiden sollte:

  • Sehr flexible Handhabung durch frei Konfigurierbaren RFM12B Transceiver (kann sowohl Senden als auch Empfangen)
  • Individuell programmierbaren und sehr sparsamen ATtiny84A AVR Chip
  • Möglichkeit bis zu 4 Sensoren pro Senderboard anzuschließen
  • Sensoren können problemlos individuell gewählt/getauscht werden
  • Mindestens ein Jahr wartungsfreie Laufzeit durch boost-converter
  • Sehr kleine Bauform (SMD Bauteile)

Abmessungen der Platinen:
Empfangsboard: 26 x 38mm
Senderboard: 44 x 44mm
Reine Boosterplatine: 13 x 10,5mm

Die PCB Layouts sowie Sketches findet ihr hier: https://github.com/meigrafd
Erklärung zu den unterschiedlichen Sketch Ausführungen:
„Watchdog“ ist für eine bessere Batterie ausbeute.
„Jeelib“ ist für die Kommunikation mit einem Jeelink.
Wenn Ihr die RPI Lösung mit dem hier angebotenen Empfänger benutzt, dann könnt ihr die JeeLib Variante ignorieren.

Der Sammelbestellung TinyTX-Blog von Himbeerfreund findet ihr hier: http://himbeerfreund.wordpress.com/category/allgemein/


 

Changelog History

– 10.05.2014: Send_DS18B20.ino -> readVcc -> Bug behoben
– 00.00.0000: ATtiny84A Details (freie / belegte pins) im „Technische Grundlagen“ beitrag eingefügt
– 00.00.0000: Warenkorb Liste: RFM12B von Octamex eingepflegt
– 20.11.2014: Octamex wieder entfernt da der Shop pleite zu sein scheint (Bestellungen kommen nicht an, Servicehotline geht nur die Sprachbox dran, Telefax hat eine andere Vorwahl aber die Nummer ist nicht vergeben)
– 11.12.2014: Send_DHT22_Watchdog.ino -> Verbraucht solange er nichts sendet nur ~4uA. Der vorherige Sketch verbraucht dahingegen ~1,02mA
– 12.01.2015: Watchdog Sketches aktualisiert.
– 14.01.2015: TinyTX2 / TinyTX3 Platinen Vergleich, sowie Allgemeine Hinweise für TinyTX Platinen, und auch eine Zusammenfassung zu den TinyTX4 / TinyRX4 / Booster, hinzugefügt.
– 01.09.2015: Weiteren PCB Hersteller hinzugefügt. Einige Bilder gefixt.
– 11.10.2015: Hinweis bezüglich DHT22 eingefügt. (Technische Grundlagen)


 

Technische Grundlagen

Zur Funkübertragung habe ich mich für RFM12B Module entschieden da diese sehr klein, stromsparend, flexibel aber vor allem auch in Deutschland zulässig sind (und man auf bereits vorhandene Libs zurück greifen kann).
Die Übertragung erfolgt dabei über das ISM-Band und wahlweise 433MHz oder 868MHz (zwei verschiedene Module). (Frequenznutzungsplan Deutschland)
Das RFM12B hat eine Betriebsspannung von 2.2V bis 3.8V, funktioniert aber problemlos auch mit bis zu 6V und wird dadurch auch (angeblich) nicht beschädigt – habe es selber problemlos längere Zeit mit 5V betrieben aber keine negativen Auswirkungen feststellen können.

Gesteuert wird das ganze über einen ebenfalls sehr stromsparenden Atmel Microcontroller Chip ATtiny84A-PU der ebenfalls sehr klein und stromsparend ist. Man könnte aber auch einen Atmel Mega nutzen wenn man zB mehr Speicher oder Pins benötigt.. Aufgrund der begrenzten Flash-Speichergröße (8 kB) des ATtiny84A können die Sketches leider nicht soooo umfangreich ausfallen – für die hier genutzten Zwecke ist es aber völlig ausreichend (überwiegend belegen die Sketches ~5kB).
Der ATtiny84A hat normalerweise eine Betriebsspannung von 1,8V bis maximal 5,5V. Da er hierfür aber mit 8 MHz betrieben werden muss liegt die Betriebsspannung bei 2,7V bis 5,5V.

Als Stromversorgung verwende ich 3 x AA Batterien, die im geladenen Zustand eine Spannung von ca. 4.5V liefern (eine hat 1.5V).
AA Batterien sind eine bessere Wahl als AAA, denn damit ist ein längerer Betrieb möglich da sie eine höhere Kapazität haben.
Der Umwelt zu liebe sollte man aber besser zu Akkus greifen, die dann pro Zelle eine Spannung von 1,2V also insg. 3,6V hätten.
Um so mehr Kapazität (mAh) um zu besser.

Im leeren Zustand beträgt die Spannung einer Batterie noch etwa 0.9V bis 1.0V, was also bedeuten würde das bei 3 Batterien noch eine Spannung von ca. 2,7V angezeigt werden würde.
Das RFM12B Module benötigt mindestens 2.2V und der ATtiny64A mindestens 2.7V – demnach wäre es mit 3 Batterien gerade noch im grünen Bereich. Allerdings nimmt dann selbstverständlich die Reichweite ab, da nicht mehr genug Ampere zur Verfügung stehen.. Deshalb plane ich auch ein Hinweis in die Graphen-Seite einzubauen sobald ein Sensor längere Zeit keine Daten mehr übertragen hat, denn die Sensoren übermittelt zusätzlich zu den eigentlichen Werten auch die aktuelle Spannung ihrer Stromversorgung (Supply Voltage). Dadurch liese sich erkennen wann die Batterien ausgetauscht werden müssten.

Bei den Sensoren sollten Digitale bevorzugt werden da man dann keinen Analog-to-Digital-Wandler bzw Umrechner benötigt und dies somit auch weniger Code und Strom benötigt – außerdem müssen Analoge Sensoren kalibriert werden was ebenfalls individuell bei jedem Standort anders ist.

Zusätzlich zu den oben genannten Bauteilen benötigt man auch noch ein paar Widerstande und Keramik-Kondensatoren, sowie einen Sockel für den ATtiny Chip, ein bisschen Kabel und einen Kupferdraht für die Antenne des RFM12B Modules. Um das alles irgendwie zusammen zu löten verwende ich eine Streifenrasterplatine.

 


 

Hinweise

  • Die Atmel-Chips an sich lassen sich in unterschiedliche Sleep-Modes fahren. So verbrauchen Sie im Schlaf nur 0,3μA – da hält eine Batterie Jahre ohne Wechsel (mikrocontroller.net). Mehr Informationen zum Stromverbrauch und Sleepmodes fand ich in einem Forumbeitrag auf Gammon
  • Die Außensensoren werden nicht sekündlich ein Sensorsignal schicken, sondern in regelmäßigen Abständen aufwachen, den Sensor auslesen, die Daten verschicken, und wieder schlafen gehen. Das spart Strom und erhöht die Langlebigkeit.
  • Nach einigen Tests scheint der Empfänger unbedingt die NodeID 22 haben zu müssen damit es funktioniert! Wieso das so ist konnte ich bisher nicht herausfinden. Die Sender können aber nach belieben eine NodeID von 1 bis 30 haben (also insg. 29 Sender).
  • Wichtig ist auch die Wahl der richtigen Batterie, was sowohl Größe (AA oder AAA) als auch Kapazität betrifft. Es muss auch darauf geachtet werden das die maximalen Spannungen der hier verwendeten Bauteile nicht überschritten werden. Also die Anzahl der Batterien nicht über 3 liegen sollte, da die Batterien in Reihe geschaltet werden und sich somit die Spannung addiert (zB 3 x 1,5V = 4,5V). Wie lange die Batterien halten hängt aber natürlich auch vom Intervall der Datenübermittlung ab: Alle 60 Sekunden oder alle 300 Sekunden macht schon einen nicht zu unterschätzenden Unterschied aus.
  • 10µH Drosseln (Spulen) sind in ihrer Bauform so groß wie Widerstände. In den AVR-Eingangsbeschaltungen werden sie nur benötigt, um Störimpulse zu unterdrücken (tiefpassfilter).
  • Der DHT22 ist nicht betauungsresistent und somit im Aussenbereich ungeeignet. Stattdessen sollte man einen aus der SHT Baureihe verwenden, wie zum Beispiel SHT21 mit Filterkappe. (quelle)

 


 

Die Reichweite

Oft werde ich gefragt: “Wie weit gehen die denn?” Diese Frage lässt sich nicht mit einer einfachen Angabe von x Metern beantworten.

Die erzielbare Reichweite aller Funklösungen ist hauptsächlich abhängig von der Antenne, Antennenaufstellungsort, Empfängerempfindlichkeit, Sendeleistung und der Frequenz.
Auf die Empfängerempfindlichkeit haben wir meist keinen Einfluss.. Wir konzentrieren uns also auf die Antenne und die Frequenz.
Für mobile Lösungen setzen wir kurze (ca.50 mm) oder lange (100 bis 200 mm), auf die Frequenz abgestimmte Stabantennen ein. Die Antennen sollten möglichst parallel angeordnet sein, was aber beim Kopter meist nicht der Fall ist.
Wenn es weiter reichen soll müssen wir bei der Bodenstation mit einer Richtantenne arbeiten. Bei einem Modul mit 25 mW Leistung auf 868 MHz können wir damit die Reichweite von ca. 800 m auf über 4 km erhöhen.

Bei der Frequenz gilt: je tiefer desto besser.

Zum Beispiel ein XBee mit 100mW auf 2,4 GHz sieht alt aus, verglichen mit 10 mW auf 433 MHz. Hier haben wir bei der Wahl der Module den größten Einfluss auf die erzielbare Reichweite.

Die maximal erlaubte Sendeleistung ist länderspezifisch.
Die maximale zugelassene Sendeleistung mit einem Duty cycle von 100 % beträgt bei 433 MHz ERP 10 mW, bei 868 MHz dürfen es 25 mW sein.

Mit dem 433 MHz Funkmodul lassen sich, aufgrund der besseren Ausbreitungsbedingungen, enorme Reichweiten erzielen. Aber auch das 868 MHz Modul schlägt das 433Mhz Module in der maximalen Reichweite.

Es gibt Module für die ISM Frequenzen 433/470/868 und 915 MHz. Hier in Europa sind allerdings nur die Frequenzen 433 MHz und 868 MHz interessant bzw zugelassen.

Ein paar genauere Details zu den RFM12 Modulen kann man auch hier (auf Englisch) nachlesen: http://blog.strobotics.com.au/2008/06/17/rfm12-tutorial-part2/
Oder hier ein Vergleich zwischen RFM12, RFM22 und RFM23: http://blog.strobotics.com.au/2009/07/30/introducing-the-rfm2223-big-brothers-to-the-rfm12b/

 


 

Antennen Länge

Bezüglich der Antennen-Länge habe ich folgendes gefunden:
433MHz 1/4 wave = 164.7mm
433MHz 1/2 wave = 329.4mm
433MHz full wave = 692.7mm

868MHz 1/4 wave = 82.2mm
868MHz 1/2 wave = 164.3mm
868MHz full wave = 345.5mm

Die Formel zur Berechnung lautet: Wellenlänge = Lichtgeschwindigkeit / Frequenz
Also zum Beispiel:
Wellenlänge = 300000km / 433 MHz = ca. 0,693 Meter

Die Ideallänge der Antenne, sagt man, sollte gleich der Wellenlänge sein, also 0,693 Meter.
Da das in der Praxis nicht immer möglich ist (je kleiner die Frequenz, desto grösser die Wellenlänge und damit Länge der Antenne) nimmt man eben Lambda/2 oder Lambda/4-Antennen. Wäre in diesem Fall: 0,693 / 4 = 0,17325 Meter = 17,325cm
(Stichwort: Lambda)

 


 

Details zum AVR Chip

ATTINY84A-PU
Derzeit freie Pins beim ATtiny84A wären:
Pin#2 (PB0)
Pin#4 (RESET) (kann aber nicht verwendet werden)
Pin#6 (PA7) (PWM, Analog Input 7)
Pin#11 (PA2) (Analog Input 2)
Pin#10 (PA3) (Analog Input 3)

Derzeit belegte Pins beim ATtiny84A wären:
Pin#1 (VCC)
Pin#3 (PB1)
Pin#5 (PB2) (PWM)
Pin#7 (PA6) (PWM, MOSI)
Pin#8 (PA5) (PWM, MISO)
Pin#9 (PA4) (SCK)
Pin#12 (PA1) (VCC für Sensor)
Pin#13 (PA0) (DATA für Sensor)
Pin#14 (GND)

Die Orangen Pins können verwendet werden, die Gelben nicht.

Details zum Stromverbrauch kann man > hier < auf Seite#2 nachlesen (wir flashen den ATtiny84A auf 8 MHz)

 


 

Benötigte Hardware / Bauteil-Liste

 

pro Sender

Basis:

  • Atmel ATtiny 84A-PU (Pico-Power) – oder alternativ: ATtiny 84V-10PU (Low-Voltage) .. plus Sockel (um die AVR Chips später ggf neu programmieren zu können)
  • RFM12B Funkmodule (433Mhz oder 868Mhz, 2.2V-3.8V)
  • 2x AA / AAA Batterie Halter für ATtiny 84V-10PU, oder 3x AA / AAA für ATtiny 84A-PU
  • Streifenplatine: 15 x 16 Löcher
  • Plastikgehäuse (50x50x20mm müsste theoretisch reichen)
  • 2x 100nF Keramikkondensator, einer zwischen VCC und GND des ATtiny (Pin 1 und 14) und einer zwischen VDD und GND des RFM12B [für bessere Messwerte]
  • 1x 10µH Spule zwischen 5V und AVcc [für bessere Messwerte]ATtiny 84V-10PU (Low-Voltage)
  • Kupfer/Klingel-Draht für 165mm lange 1/4W Antenne (allgemeine detaillierte Beschreibung)

Je nach verwendetem Sensor:

  • DS18B20 – Digital Temperatur Sensor + 4,7k Ω Widerstand
  • DHT22 – Digital Temperatur & Luftfeuchtigkeits Sensor + 10k Ω Widerstand (liefert bei einer Spannung unter 2,96V falsche Werte)
  • TMP36 – Analog Temperatur Sensor, ohne Widerstand (2,7V – 5,5V)
  • BMP085 – Digitaler Temperatur & Luftdruck & Höhen Sensor (1,8V – 3,6V) (liefert genauere Werte als DHT22)
  • LDR – Analoger Licht Sensor (Fotowiderstand) + 10k Widerstand

Optional:

  • 3 pol Präzisions-Buchsenleiste – oder 3 pol Stiftleiste plus Pfostenstecker … für austauschbaren Sensor
  • 2 pol Präzisions-Buchsenleiste – oder 2 pol Stiftleiste plus Pfostenstecker … für austauschbaren Widerstand

 

pro Empfänger

Bei dem Empfänger würde ein Sensor und somit auch die Spulen wegfallen, aber trotzdem sollten die Kondensatoren auch hier verbaut werden. Zusätzlich werden aber auch noch 2x 10k Ω Widerstände benötigt

  • Atmel ATtiny 84A-PU (Pico-Power) – oder alternativ: ATtiny 84V-10PU (Low-Voltage) .. plus Sockel (um die AVR Chips später ggf neu programmieren zu können)
  • RFM12B Funkmodule (433Mhz oder 868Mhz, 2.2V-3.8V)
  • Streifenplatine: 20 x 21 Löcher
  • 2x 100nF Keramikkondensator, einer zwischen VCC und GND des ATtiny (Pin 1 und 14) und einer zwischen VDD und GND des RFM12B [für bessere Messwerte]
  • 2x 10k Ω Widerstände
  • Kupfer/Klingel-Draht für 165mm lange 1/4W Antenne (allgemeine detailierte Beschreibung)

Antennenlänge sowie ein Bild zur Verlötung des RFM12B Modules auf eine Streifenrasterplatine wird > hier < beschrieben.

Die RFM12 Module gibt es in verschiedenen Ausführungen.

Zu erwartende Kosten

Abgesehen von der Raspberry Pi Grundausstattung und dem notwendigen Werkzeug, sind die Kosten für einen Sender und einen Empfänger wie folgt:

Kosten für ein Sender-Sensor (berechnet für insg. 5 Module) liegt zwischen 12 und 20eu (jenachdem wo oder was man aus der obigen Liste bestellt)

Schreibe einen Kommentar

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

Sie können diese HTML-Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

2 Besucher online
0 Gäste, 2 Bots, 0 Mitglied(er)
Meiste Besucher heute: 5 um/am 10:02 pm
Diesen Monat: 23 um/am 11-13-2018 01:35 am
Dieses Jahr: 36 um/am 08-05-2018 09:17 pm
Jederzeit: 36 um/am 08-05-2018 09:17 pm