Arduino Internet-of-Things (IoT)
Naja, so ganz "Internet" ist es nicht. Vielmehr geht es bei diesem Projekt darum, eine größere Anzahl Sensoren zu vernetzen, um biologische Forschung zu betreiben. Die Sensoren werden in einem Wald verteilt und müssen daher mit Batterieversorgung auskommen.
Mehr zum Forschungsprojekt hier...
Um mit kleiner Sendeleistung zu arbeiten, was naturgemäß die Reichweite einschränkt, bietet sich an, ein Mesh-Network zu bauen, bei dem jeder teilnehmende Knoten sowohl einen Sensor abfragen kann als auch die Funktion eines Repeaters besitzt. So können weitere Strecken überbrückt werden, als die Reichweite zweier Teilnehmer.
Hier der prototypische Aufbau
Konkret geht es bei diesem Projekt übrigens darum, Haselmäuse in ihren Nisthöhlen zu detektieren.
RF Modul
Ich habe mich für das nRF24L01 von Nordic Semiconductor entschieden, weil es ideal für Low-Power-Anwendungen ist und sehr günstig auf einem Modul erhältlich ist. Das IC selber lässt sich wegen des QFN20 4x4 Gehäuses mit Hausmitteln nicht löten.Der Transceiver arbeitet im unlizenzierten 2.4GHz Frequenzband und hat etwa 100m Reichweite in dieser Minimalversion mit Antenne auf der Platine. Eine andere Version des Moduls bietet eine Freifeldreichweite bis ca. 1000m.
Die Register zum Konfigurieren des nRF24L01 und zur Datenübertragung erreicht man über das SPI Host Interface.
Man könnte das nun manuell mittels der eingebauten SPI Bibliothek des Arduino machen. Viel einfacher wird es aber dank der nRF24-Library.
Mesh-Network
Es geht aber noch einfacher: Auf der Arduino-Playground Seite findet sich ein Link zu http://mysensors.org einer Library, die alles bietet, um sehr einfach ein Mesh-Network mit Arduinos zu bauen.Ich habe allerdings dann doch noch etwas gekämpft, bis alles funktionierte. Auch die Beispiele, waren mir zum Teil noch etwas zu kompliziert um zu verstehen, wie alles funktioniert. Daher zeige ich hier noch einfachere Minimalbeispiele.
Die Software
Da alles bei mySensors unter GPL Linzenz veröffentlicht ist, kann ich meine Beispiele zusammen mit den Libraries hier direkt zum Download aufnehmen.
- Download der mySensors Library: ArduinoIOT_mySensorsLibrary.zip
- Download meiner Beispiele mit Library: ArduinoIOT_Beispiele.zip
Verdrahten der Hardware
Wie das nRF24L01-Modul mit dem Arduino verbunden wird, ist auf http://mysensors.org sehr genau beschrieben. Allerdings hat es bei mir nicht funktioniert, weil ich Arduino-Leonardo Board verwendet habe. Dort sind nämlich die SPI Pins auf den ICSP Stecker verdrahtet.Also beim Nachbau unbedingt zuerst prüfen, wo die SPI Pins herauskommen.
Hier die Pinbelegung des ICSP Steckers, den man für die meisten Arduino-Anwendungen nicht braucht.
Das sind Pins des nRF24L01-Moduls
Zwei der Pins gehören nicht zum SPI-Interface und werden mit regulären Arduino-IO-Pins verbunden:
- CE Arduino Pin 9
- CSN/CS Arduino Pin 10
Wichtig: Der nRF24L01 braucht 3.3V Betriebspannung. Diese kann dem 3.3V Pin des Arduino entnommen werden. Freundlicherweise sind die Eingänge 5V tolerant. Man muss also keinerlei Pegelwandlung dazwischen schalten. Mein Dank geht nach Trondheim/Norwegen an Nordic Semiconductor
Mein Mini-Netzwerk
Ich habe die vier Module mit Batterien gespeist, damit ich in der Gegend herumlaufen kann um Reichweiten-Tests zu machen.
Nur der Gateway-Knoten wird vom PC versorgt, da er ja an dessen USB-Port hängt um den Netzwerkzustand anzeigen zu können.
Folgende Netwerkknoten gibt es in meinem Mini-Mesh:
- Gateway Verbindung zum PC via USB Node-ID 0
- LED_A Kann eine LED schalten Node-ID 11
- LED_B Kann eine LED Schalten Node-ID 13
- Sensor Tastschalter, der eine Message n LED_A sendet Node-ID 12