Archiv der Kategorie: RFM12B

Temperatur und Feuchtemessung mit 868 MHz Funksensor

Für die Räume der DingFabrik Köln sollte eine drahtlose Erfassung von Temperatur und Feuchte innen und außen an mindestens 4 Meßstellen aufgebaut werden. Viele Versuche mit 433 MHz Sensoren und Sendern, z.B. dem KW-9010 als Sensor mit Sender oder einem Selbstbau mit ATTiny85 mit 433 MHz endeten alle mit dem Ergebnis, dass die Reichweite zu gering war. Insbesonders dann wenn die Empfänger mit einem Raspberry Pi kommunizierten gab es Störungen insbesonders durch schlechte Masseführung. Nach etlichen Versuchen konnte ich mit dem TinyTX auf 868MHz eine gute Reichweite und hohe Stabilität erreichen. Dieses Modul sendet mit dem RFM12B auf FSK Modulation ist von daher weniger störanfällig (UKW ist eben besser als MW ;-) ). In einem separaten Blogpost beschreibe ich den Empfänger. In weiteren Blogposts wird beschrieben, wie ich die Daten in einer RRD Datenbank speichere und per Webinterface grafisch darstelle.

Die TinyTX Lösung sendet neben der Temperatur und der Feuchte, gemessen mit einem DHT22 zusätzlich die Versorgungsspannung. Damit wird ein Batteriewechsel gut planbar. Die Platine braucht extrem wenig Strom, da die Software den Sleep Modus nutzt. Momentan nutze ich LiIon Akkus mit einer Diode in Reihe (damit ca. 3,2 – 3,8V). Der DHT22 braucht mindestens 3V, sinkt die Versorgungsspannung darunter, werden falsche Feuchtewerte gemessen. Die Software von Nathan habe ich geringfügig angepasst und übertrage zusätzlich die Minuten seit dem letzten Reboot. Den Code findet ihr auf Github.

 

 

Hier noch ein Foto des Fehlversuchs mit DHT22, billigem China Sender und ATTiny85.

Der KW9010 enthält letztendlich auch nur einen billigen China Sender.

 

 

 

 

 

 

 

 

 

 

 

 

Advertisements

Raspberry Pi empfängt auf 868 MHz

Für mein Projekt „Temperatur und Feuchte per Funk“, das die Sendemodule von Nathan Chantrells TinyTX nutzt, war ich auf der Suche nach einem geeigneten Empfänger, der die Daten auf einen Raspberry Pi bringt, wo sie letztendlich gespeichert werden sollen und per Webseite dargestellt werden.

Im ersten Schritt setzte ich die RPi-Shield-Bridge von Watterott ein, quasi ein vollständiger Arduino Clone auf einem Board, dass auf den Pinheader des Raspberry Pi gesteckt werden kann. Das RPi-Shield hat den Vorteil, dass bereits Pegelwandler 5V<-> 3,3V für die Kommunikation zwischen RaspPi und Arduino enthalten sind. Weiterer Vorteil sind die Arduino Shield kompatiblen Buchsenleisten.

Bild

Raspberry Pi mit RPi-Shield Bridge, Proto-Shield und RFM12B

Für meinen ersten Testaufbau benutze ich zusätzlich ein Proto-Shield auf dem ein RFM12B mit 868MHz als Empfänger steckt.

Nachdem die Software und Hardware zuverlässig funktionierten, wollte ich eine elegantere Lösung finden. Meine ersten Recherchen führten mich zum Raspberry Pi Base Station Receiver Board des Projektes OpenEnergyMonitor. Dieses Board erfüllte alle meine Anforderungen. Da ich allerdings noch einige Arduino Mini Clones rumliegen hatte, entschied ich, ein eigenes Board zu designen. In Eagle entstand eine doppelseitige Platine, die nur  8 Durchkontaktierungen hat und sich deshalb relativ leicht selbst herstellen lässt. Da nicht alle Anschlüsse des Mini benutzt werden, müssen auch nicht alle Bohrungen gemacht werden.

Eagle Layout Arduino Mini Raspberry Bridge 868MHz

Eagle Layout Arduino Mini Raspberry Bridge 868MHz

IMG_1819

Raspberry Pi mit Arduino Mini Bridge 868MHz

Für erste Tests wurde aus der WiringPi Library das SerialRead Beispiel benutzt. Zum Arduino Mini ist noch zu bemerken, dass es Versionen mit 5V oder mit 3,3V Versorgungsspannung gibt. Die 5V Versionen laufen bei mir auch mit 3,3V, allerdings läuft dann der ATMega mit 16MHz außerhalb seiner Spec. Wenn das Probleme bereitet, werde ich den Prozessor auf 8MHz internen Takt umfusen.

Einrichtung des Raspberry Pi, um Daten seriell zu empfangen

Im Raspbian Image für den Pi ist die serielle Schnittstelle standardmäßig als serielles Terminal konfiguriert. Das muss zunächst umgestellt werden.

$ sudo nano /boot/cmdline.txt

console=ttyAMA0,115200     und     kgdboc=ttyAMA0,115200   löschen

$sudo nano /etc/inittab

Die Zeile auskommentieren oder löschen     T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100.

Den Raspberry rebooten.

Die Installation von WiringPi wird hier erklärt.

Die Eagle Files liegen auf Github.