Der RF-Transceiver RFM12B ist ein ideales Bauteil für die Realisierung von kostengünstigen drahtlosen Anwendungen über das ISM-Band. Das RFM12B-Modul kann sowohl als Sender wie auch als Empfänger betrieben werden. Im Elektronik-Handel sind diese Module für die Frequenzbereiche 433 Mhz und 868 Mhz verfügbar.

Bei meinen Experimenten mit den Attiny Sensor Nodes und dem RF Sensor Shield mit LCD kommt diese Komponente auch zum Einsatz.

Da diese RF-Module für die direkte Oberflächenmontage auf einer Leiterplatte ausgelegt sind, ist der Einsatz auf einem Steckbrett oder Protoshield etwas kompliziert da keine Anschlussbeine-oder Drähte vorhanden sind. Für erste Experimente habe ich mir dazu eigene Breakout Boards mittels Lochrasterplatine und Anschlusspins aufgebaut.

Der Aufbau auf diese DIY Breakout Boards ist aber weiterhin zeitaufwändig und erfordert eine feine Hand und saubere Lötstellen. Darum habe ich nun ein eigenes Breakout Board erstellt und bei iteadstudio produzieren lassen.
Version 1.0
Version 1.01
Stromlaufplan:
Stückliste:
1 Leiterplatte RFM12B Breakout Board
2 Stifleiste 7 polig (ST1, ST2)
1 RFM12B
Mit den Stiftleisten angelötet kann das Breakout Board nun für Anwendungen auf dem Steckbrett oder auf einer Lochrasterplatine oder Protoshield eingesetzt werden.
Leiterplatte:
Download Fritzing-Projekt V1.0 (.fzz, 58 kB)
Download Fritzing-Projekt V1.01 (.fzz, 17 kB)
Hinweis:
Die Ansteuerung und Pegelwandler für 5V-Anwendungen sind auf dem Breakout Board nicht vorhanden uns müssen in der jeweiligen Schaltung aufgebaut werden.

Upate 21.06.2015 – Drahtlose Wetterstation mit RFM12B
Der Benutzer Urs hat mir Bilder von seiner entwickelten RFM12B-Anwendung mit einem Arduino Mega geschickt. Die Photos zeigen den Einsatz des RF Shields auf dem Mega sowie ein drahtloser Sensornode mit einem DHT22-Sensor.



Schönes Projekt! Wie lange läuft so ein kleiner Knoten mit diesen Batterien? Grüsse, Thomas
@tamberg
Ich habe die Sensor Nodes seit Mitte November im Einsatz und die Batteriespannungen sind erst geringfügig gesunken. Ein paar Monate sollten diese also noch halten.
Die Sensor Nodes senden alle 60 Sekungen Daten an die Basis.
Gruss
Thomas
Überall sieht man so tolle Projekte, Libraries gibt es zu Hauf zum Herunterladen. Aber nirgendwo wird beschrieben, wie man den RFM12B mit dem Arduino ans Laufen bekommt. Libraries sind fast überhaupt nicht kommentiert, das meiste funktioniert mit der neuesten Arduino-Software nicht…
Wir hatten es mal funktionstüchtig, aber Windows benötigt ja auch ab und zu einen Reset und die Arduino-Software ist so nett, das Sketchbook standardmäßig auf C zu legen.
Hätte vielleicht mal jemand Zeit und Lust, einem armen Deppen zu erklären, wie ich das Teil ans Arudino anschließen muss, welche Libraries ich benötige und wie zum Teufel man dann senden und empfangen kann?
@DerVerzweiflungNahe
Mit der Library JeeLib hat man relativ schnell eine Lösung aufgebaut.
http://jeelabs.net/pub/docs/jeelib/index.html
Die Library selbst kann man hier runterladen:
https://github.com/jcw/jeelib
Die JeeLib Library hat viele Beispiele auf welche man aufbauen kann und die Beispiele sind recht gut dokumentiert.
Die Verbindung eines Arduino-Boards mit dem RFM12B Transceiver ist auf diesem Bild dargestellt.
http://openenergymonitor.org/emon/sites/default/files/Cookbook_RFM12B_connections.png
Für die Kommunikation sind mindestens 2 Arduino nötig, ein Sender und ein Empfänger.
Ich hattte bisher keine Probleme mit den verschiedenen Arduino-Versionen. Von welcher Version sprichst du hier?
Die Einstellung wo die Sketch-Dateien liegen kann in der Arduino-IDE unter Datei, Einstellungen in der Option „Sketchbook Speicherort“ definiert werden.
Nachtrag:
für die Inbetriebnahme verwendet man am besten das Beispiel „“:
https://github.com/jcw/jeelib/tree/master/examples/RF12/RF12demo
Hier ist recht ausführlich beschrieben wie man die Kommunikation aufbauen muss.
Die in diesem Beispiel verlinke Beschreibung zeigt wie man den RFM12B mit dem ATmega verbinden muss.
http://jeelabs.org/2009/02/10/rfm12b-library-for-arduino/
Diese Schaltung ist aber nur möglich wenn die Betriebsspannung 3 oder 3.3V ist. Beim Einsatz eines Standard-Arduino, bspw. Arduino Uno, müssen einzelne Signalleitungen mit Widerständen (10k und 4,7k) auf 3.3V angepasst werden, siehe dazu Bild aus vorherigem Kommentar.
Ich hoffe dass diese Erklärungen zu einem erfolgreichen Einstieg verhelfen.
Viel Erfolg.
Ich hab da mal ne Frage.
Kennst du eine Library für dieses Funkmodul die mit dem Arduino Micro kompatibel ist?
Der Atmega 32u4 benutzt nicht D10-D13 als SPI Schnittstelle, sondern zusaätzliche Pins auf der Platine (siehe hier: http://forum.arduino.cc/index.php?action=dlattach;topic=148734.0;attach=90679;image ; die obersten 2 pins links und rechts)
Ich habe die Module bisher an einem A. UNO und einem Micro testen können, der Uno erkennt den rfm12b, der Micro nicht.
Die Vermutung liegt also nahe das die Library nicht die SPI Ausgänge des Micros anspricht.
Gibt es sonst vielleicht eine Möglichkeit innerhalb der Library (Ich verwende ebenfalls die von JeeLab) die Pins zu definieren?
Ich werde mich nochmal auf Fehlersuche (BreakoutBoard des Funkmoduls) machen, sonst weiß ich nicht weiter.
mfg
ps. es ist mir wichtig den Micro zu verwenden da mir beim UNO D10-13 fehlen
Hallo Martin
Der RFM12B Transceiver wird via SPI-Kommunikation angesprochen. Beim Arduino Uno sind die nötigen Signale (SS, MOSI, MISO, SCK) an den Pins D10 bis D13.
Der Arduino Micro hat als Microcontroller einen ATmega32U4. Die SPI-Schnittstelle ist bei diesem Board direkt auf die 2×3-polige Stiftleiste herausgeführt. Du kannst die SPI-Signale also direkt dort abgreifen.
Für die Ansteuerung mit der Jeelib ist auch der ATmega32U4 vorgesehen. Die Pinkonfiguration ist in der Datei RF12.cpp abgelegt. Dieser Teil sieht wie folgt aus. Es werden also die digitalen Pins D14-D17 verwendet.
#elif defined(__AVR_ATmega32U4__) //Arduino Leonardo
#define RFM_IRQ 0 // PD0, INT0, Digital3
#define SS_DDR DDRB
#define SS_PORT PORTB
#define SS_BIT 6 // Dig10, PB6
#define SPI_SS 17 // PB0, pin 8, Digital17
#define SPI_MISO 14 // PB3, pin 11, Digital14
#define SPI_MOSI 16 // PB2, pin 10, Digital16
#define SPI_SCK 15 // PB1, pin 9, Digital15
Somit sollte eigentlich alles ohne Anpassungen in der Library lauffähig sein. Einfach den Arduino Micro als Board auswählen und die nötigen Signale am ICSP-Anschluss abgreifen.
Gruss
Thomas
Sind die beiden Fritzing-Platinen irgendwo als files erhältlich?
Ahh, hier: http://arduino-praxis.ch/projekte-2/arduino-rf-sensor-shield/
Hallo Clemens,
einzelne Boards sind auch in meinem Tindie-Shop verfügbar.
https://www.tindie.com/stores/arduinopraxis/
Gruss
Thomas
hallo
nach einigem üben hab ich das attiny84 sensor board mit einem DHT22 und einem UNO mit dem rf12-shield als receiver zum laufen gebracht.
den atttiny84 hab ich separat mit arduino 1.0.6 & jeelib & tiny kompilliert, beim UNO bin ich auf 1.6.4 geblieben.
zusätzlich hab ich zum debuggen auf dem attiny84 ein RGBmodul mit eingebauten widerständen auf einer sockelleiste angebracht und mit pin6 & 10 des 84er verbunden. nicht funktioniert hat pin11 (wer weiss warum?). auch das sendeintervall hab ich auf 5 sekunden runter geschraubt. so blinkt er schön, wenn er sendet und ich weiss, dass dann was ankommen sollte.
das eigentliche problem war dann die umstellung auf den arduino MEGA.
der umbau mit der abzweigung vom shield 10..13 –> mega 50..53 sieht ziemlich abenteuerlich aus und wird noch etwas ansehnlicher gemacht werden.
es gibt dazu bei jeelab einige threads, aber es hat nichts nicht wirklich geholfen. es hat zwar den rf12 initialisiert, aber keine daten angezeigt.
dann ist mir aufgefallen, dass die LED13 auf dem mega dauernd brannte, obwohl ich sie nicht gesetzt hatte.
das initialisieren der led13 und das setzen auf LOW brachte die lösung!
der MEGA empfängt nun seit stunden ohne einen einzigen retransmit.
der nächste challenge wird das hinzufügen des ethernet boards sein …
@thomas: zwei fotos folgen per mail 🙂
… nun läufts auch mit dem ethernet-shield; momentan noch ohne SD card, da scheint der select noch nicht zu stimmen.
… und nun läuft alles zusammen
Arduino MEGA, Arduino Ethernet shield mit SD card, RFM12B shield und der Aussensensor aus ATtiny84, RFM12B und DHT22.
entwickelt wird nun an einem Aussensensor der zusätzlich einen Licht(vis & IR) und einen UV-Sensor enthält. Dazu wechsle ich evt. vom ATtiny84 zum 328er, da dieser das I2C direkt eingebaut hat.
Nun also mal beides aufbauen und austesten.