RFM12-Funkbrücke

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(RFM12-Module)
(Sender)
Zeile 19: Zeile 19:
 
==Sender==
 
==Sender==
 
[[Bild:rfm12 sender.jpg|thumb|150px|RFM12 Sender]]
 
[[Bild:rfm12 sender.jpg|thumb|150px|RFM12 Sender]]
===Sensoren===
+
 
====TSL45315 (Helligkeit)====
+
Das Sendemodul ist mit einem ATmega8 in seiner Standardbeschaltung auf einer Lochrasterplatine aufgebaut. Die MCU wird ist über seinen internen Oszillator mit 8MHz getaktet. An die MCU ist das RFM12-Modul angeschlossen, dessen nIRQ-Ausgang ist mit INT0 des ATmega8 verbunden. Weiterhin sind einige I/O-Pins auf Stiftleisten und einen Wannenstecker herausgeführt, um die diversen Sensoren anschliessen zu können bzw. den Controller programmieren zu können. Einen (gezeichneten) Schaltplan habe ich dazu nicht erstellt, da der Aufbau mehr oder weniger on-the-fly erfolgte. In der Testphase hatte ich eine LED an einem der herausgeführten I/O-Pins angeschlossen, um die Funktionenweise der Firmware überprüfen zu können.
[[Bild:Tsl35315.jpg|thumb|150px|TSL45316]]
+
 
====SHT15 (Temperatur/Luftfeuchtigkeit)====
+
Ablauftechnisch gestaltet sich die Firmware des Sendemoduls recht einfach. Nach der Initialisierung des RFM12-Moduls, des I²C-Bus und weiterer notwendiger I/O-Pins wird in eine Endlosschleife gesprungen. Innerhalb dieser werden die Werte der verschieden Sensoren ermittelt, in einer Struktur-Variablen abgelegt und diese an den Empfänger gesendet:
[[Bild:sht15.jpg|thumb|150px|SHT15]]
+
 
====TMP36 (Temperatur)====
+
[[Bild:Tmp36.jpg|thumb|150px|TMP36]]
+
====Versorgungsspannung Sender ermitteln====
+
===Messwerte senden===
+
 
<pre>
 
<pre>
 
...
 
...
Zeile 41: Zeile 37:
 
...
 
...
 
</pre>
 
</pre>
 +
 +
Danach wird das RFM12-Modul für eine eingestellte Zeit (ca. 60s) und die MCU schlafen gelegt. Nach der konfigurierten "Schlafenszeit" wacht zuerst das RFM12-Modul auf und löst einen INT0-Interrupt im ATmega8 aus, der diesen ebenfalls wieder zum Leben erweckt. Das Spiel beginnt wieder von vorn...
 +
 +
 +
 +
===Sensoren===
 +
====TSL45315 (Helligkeit)====
 +
[[Bild:Tsl35315.jpg|thumb|150px|TSL45316]]
 +
====SHT15 (Temperatur/Luftfeuchtigkeit)====
 +
[[Bild:sht15.jpg|thumb|150px|SHT15]]
 +
====TMP36 (Temperatur)====
 +
[[Bild:Tmp36.jpg|thumb|150px|TMP36]]
 +
====Versorgungsspannung Sender ermitteln====
 +
 
==Empfänger==
 
==Empfänger==
 
[[Bild:rfm12 empfaenger.jpg|thumb|150px|RFM12 Empfänger]]
 
[[Bild:rfm12 empfaenger.jpg|thumb|150px|RFM12 Empfänger]]

Version vom 4. Juni 2013, 15:39 Uhr


...kommt demnächst...

Inhaltsverzeichnis

Motivation

Einige der Sensoren zur Aufzeichnung von Wetterdaten sind bei mir etwas ungünstig platziert. Die Sensoren müssten eigentlich an einem Ort angebracht werden, der draussen und nicht der direkten Sonneneinstarhlung ausgesetzt ist. Dieser Ort ist bei meinen örtlichen Gegebenheiten nur schwer mit Kabel erreichbar. Aber wozu gibt es Funkübertragung? Entsprechende Funkmodule sind leicht beschaffbar.

Weiterhin bestand dann gleich mal die Gelegenheit ein paar andere Sensorentypen für Helligkeit, Feuchtigkeit und Temperatur auszuprobieren. Sonst wird es ja langweilig...

Funkbrücke

RFM12-Module

In der hier vorgestellten Funkbrücke kommen zwei RFM12-Module der Firma Hoperf zum Einsatz. Diese Module vereinen Sender und Empfänger in einer Baugruppe. Gesendet wird auf dem ISM-Band mit 433MHz. Die Beschaffung kann über die üblichen Elektronikversender zu einem halbwegs erträglichen Preis erfolgen.

Die Kommunikation mit dem RFM12-Modul erfolgt via SPI. Elektrische Verschaltung und programmtechnische Ansteuerung sind im Datenblatt und in zahlreichen Projekten im Internet ausführlich beschrieben. Als Ausgangsbasis für meine Funk-Experimente war eine längliche Diskussion zu diesem Thema auf mikrocontroller.net. Man muss ja das Rad nicht immer neu erfinden...

Eine nette Eigenschaft des RFM12-Modul vereinfacht die Steuerung des kontinuierlichen Programmablaufes des Senders: das Modul kann per Kommando in Tiefschlaf versetzt werden, aus dem es, nach einer vorkonfigurierbaren Zeit, wieder allein aufwacht. Dieses "Aufwachen" wird auch an einem Ausgang als Impuls ausgegeben. Ist dieser Ausgang mit einem sinnvollen Eingang der, zur Steuerung verwendeten, MCU angeschlossen, ergeben sich ein paar interessante Möglichkeiten. Mein erstes Experiment mit RFM12/MCU war eine "Blinkschaltung", bei der die MCU das RFM12-Modul und danach sich selbst Schlafen geschickt hat. Nach Ablauf der Ruhezeit wachten beide Teile in umgekehrter Reihenfolge auf und das Spiel begann wieder von vorn...

Sender

RFM12 Sender

Das Sendemodul ist mit einem ATmega8 in seiner Standardbeschaltung auf einer Lochrasterplatine aufgebaut. Die MCU wird ist über seinen internen Oszillator mit 8MHz getaktet. An die MCU ist das RFM12-Modul angeschlossen, dessen nIRQ-Ausgang ist mit INT0 des ATmega8 verbunden. Weiterhin sind einige I/O-Pins auf Stiftleisten und einen Wannenstecker herausgeführt, um die diversen Sensoren anschliessen zu können bzw. den Controller programmieren zu können. Einen (gezeichneten) Schaltplan habe ich dazu nicht erstellt, da der Aufbau mehr oder weniger on-the-fly erfolgte. In der Testphase hatte ich eine LED an einem der herausgeführten I/O-Pins angeschlossen, um die Funktionenweise der Firmware überprüfen zu können.

Ablauftechnisch gestaltet sich die Firmware des Sendemoduls recht einfach. Nach der Initialisierung des RFM12-Moduls, des I²C-Bus und weiterer notwendiger I/O-Pins wird in eine Endlosschleife gesprungen. Innerhalb dieser werden die Werte der verschieden Sensoren ermittelt, in einer Struktur-Variablen abgelegt und diese an den Empfänger gesendet:

...
// Funkmessage...
struct msg_t {				// Offset
	uint16_t counter;		// --> 0
	uint16_t vcc;			// --> 2
	uint32_t brightness;		// --> 4
	uint16_t sht15_humidity;	// --> 8
	uint16_t sht15_temperature;	// --> 10
	uint16_t tmp36;			// --> 12
} msg;
...

Danach wird das RFM12-Modul für eine eingestellte Zeit (ca. 60s) und die MCU schlafen gelegt. Nach der konfigurierten "Schlafenszeit" wacht zuerst das RFM12-Modul auf und löst einen INT0-Interrupt im ATmega8 aus, der diesen ebenfalls wieder zum Leben erweckt. Das Spiel beginnt wieder von vorn...


Sensoren

TSL45315 (Helligkeit)

TSL45316

SHT15 (Temperatur/Luftfeuchtigkeit)

SHT15

TMP36 (Temperatur)

TMP36

Versorgungsspannung Sender ermitteln

Empfänger

RFM12 Empfänger
> i2cdetect -y 0

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- 12 13 -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- 49 -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77 
> i2cdump -y 0 0x28        

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: af 00 72 13 22 01 00 00 9d 16 05 09 d9 02 00 00    ?.r?"?..??????..
10: 00 00 00 00 00 af af af af af af af af af af af    .....???????????
...
> tclsh rfm12.tcl 

Counter...........: 256
Vcc (Sender)......: 4.978V
Helligkeit........: 484lux
SHT15-Feuchtigkeit: 58.27%
SHT15-Temperatur..: 21.99°C
TMP36.............: 21.4°C
********************


Software

In dem hier verlinkten Softwarearchiv ist die Firmware des Senders und Empfängers der Funkbrücke sowie ein kleines Tcl-Script zur Abfrage der empfangenen Daten via I²C-Bus zu finden. Im Tcl-Script muss natürlich die Adresse des entsprechenden I²C-Bus angepasst werden. Der Zugriff auf den I²C-Bus erfolgt über eine selbstgeschriebene Tcl-Erweiterung, deren C-Quelltext ebenfalls im Softwarearchiv zu diesem Projekt enthalten ist und für die eingesetzte Zielplattform übersetzt werden muss.

Kontakt

Uwe

'Persönliche Werkzeuge