Batteriebetriebene Funk-Temperatursensoren für Arduino

TinyTX-ATtiny45Ich möchte mich in Zukunft etwas stärker mit Arduino, Raspberry und etwas PHP-Entwicklung beschäftigen, und habe mir daher vor einiger Zeit zwei Raspberry Pi’s bestellt.

Der eine fristet momentan sein Dasein als XBMC am heimischen TV auf xbian-Basis, der zweite wandert demnächst als Micro-NAS-Lösung mit Raspbian in den elterlichen Haushalt.

Zwischenzeitlich konnte ich aber ein paar Dinge testen, und bin wieder auf den Geschmack gekommen. Und zwar habe ich seit einiger Zeit neue Elro-Funksteckdosen im Einsatz, die sich komfortabel über einen 433 Mhz-Sender ansprechen lassen.

Da mir ein Webinterface zur Ansteuerung von Funksteckdosen aber zu wenig Nutzen bietet (jeder nimmt lieber die Fernbedienung auf dem Tisch als das Handy rauszukramen und eine App zu öffnen), kam ich auf die Idee die Temperatur/Luftfeuchtigkeit der Wohnräume über selbstgebaute, batteriebetriebene Funk-Sensoren auf Arduino-Basis abzufragen und übersichtlich darzustellen.

Leider gibt es aber – anscheinend – keine günstige, fertige Lösung auf Arduino/Raspberry-Basis, sodass für die nächsten Wochen ein neues Projekt ansteht: ein batteriebetriebener Funk-Temperatursensor auf ATTiny84-Basis.

Prolog

Ich konnte vor einigen Monaten ein wenig in die Arduino-Programmierung und ein paar Beispielschaltungen einsteigen; was sich bedingt durch kein wirklich sinnvolles Projekt jedoch sehr schnell wieder gelegt hat.

Vor kurzem habe ich über ein PHP-Script auf einem Raspberry ein paar Funksteckdosen angesteuert; das ist grundsätzlich toll („Kuck mal, ich kann von unterwegs das Licht an- und ausschalten“), aber leider total unnütz.

Als Informatiker gefallen mir diese ganzen Möglichkeiten, die man in neuen Häusern bedingt durch Bus-Verkabelung hat. Aber ich wohne in Miete, und diese tollen Schaltungen kosten richtig Geld.

Projektidee

Nun kam mir die Idee, ein Funk-Thermometer auf Arduino-Basis zu entwickeln, dass seine Sensordaten an einen zentralen Arduino Ethernet (der Raspberry Pi) funkt, welcher die Daten an ein Webscript übergibt, dass diese in eine Datenbank packt. Auf dieser Basis ließen sich dann schöne Graphen und Status-Seiten erstellen, die tatsächlich einen Mehrwert hätten: Habe ich stets gut gelüftet? Ist mein Raumklima in den Räumen optimal? Heize ich ggf. zu viel und generiere unnütz Heizkosten?

Nach einer kurzen Recherche die Ernüchterung: Klar, einen Temperatursensor abfragen und die Werte ausspucken ist eine 5 Minuten Bastel- und Programmierarbeit. Aber Moment, das Ganze müsste ja batteriebetrieben sein – den Kabel ziehe ich nicht in jeden Raum. Und hier ist der Knackpunkt: Der Arduino Uno verbraucht relativ viel Strom (etwa 45 mA ohne Sensoren), aber nicht für den Prozessor (der hat nämlich mehrere Sleep-States, die man nutzen kann), sondern für eine Status-LED auf dem Board und das USB-Interface.

Die einfachste Lösung ist also, einen Arduino-Mikrocontroller – und zwar nur mit den Komponenten, die benötigt werden. So lässt sich der Stromverbrauch soweit runterdrücken, dass der kleine Sensor monatelang ohne neue Batterien auskommt.

Projektziel

Als Projektziel habe ich folgende Überlegungen angestellt:

  • Batteriebetrieben, möglichst mehrere Monate ohne Akkutausch
  • Übertragung der Daten zwischen den Arduino’s über 433 Mhz
  • Basis-Station, die die Daten der entfernten Sensoren empfängt und entweder weiterleitet (an ein Webscript z.B.) oder selbst auswertet (z.B. über einen Raspberry Pi)
  • Wenn das Grundgerüst steht, sollte sich der Temperatursensor auch durch andere Sensoren (Licht, Luftfeuchtigkeit, Mikrofon, etc.) austauschen lassen

Technische Recherche

Ich habe mich also im Netz auf die Suche nach ein paar technischen HowTo’s gemacht. Schließlich habe ich weder zwei Arduinos miteinander funken lassen, noch einen einzelnen ATTiny84 programmiert oder Überlegungen angestellt, welche Sensoren den nun eigentlich geeignet sind.

Dabei rausgekommen sind folgende Dinge, die maßgeblich meine Einkaufsliste bestimmt haben:

  • Die Wahl fiel auf einen ATTiny84V-10PU mit 10Mhz in einer „LowVoltage“-Ausführung (V), da er genug Rechenleistung und etwas mehr ROM/Speicher/PINs als die ATTiny4x mitbringt. Besser wäre die ATTiny84A-Variante gewesen („Pico-Power“), die noch stromsparender ist – die war aber leider beim Händler meines Vertrauens nicht lieferbar. Zudem hat er den passenden Spannungsbereich von 2,7V bis 5,5V
  • Batterien sinken, wenn sie leer sind, auf etwa 1V ab. Daher habe ich mich für den Betrieb mit 3 AAA-Batterien entschieden – mit vollen Batterien liege ich bei 4,5V – mit Leeren bei etwa 3V. Das ist auch z.B. die minimale Leistungsaufnahme des DHT22-Temperatur/Feuchtigkeitssensors (etwa 2,96V)
  • 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 zu Stromverbrauch und Sleepmodes fand ich in einem Forumsbeitrag 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
  • Die Atmel-Chips können über einen dedizierten ISP-Programer geflasht werden (war mir zu teuer) oder über einen handelsüblichen Arduino Uno. Und da ich zufällig einen rumliegen habe…  (sachsendreier.com, fluuux.de, mit.edu)
  • Die Kommunikation zwischen den Arduinos löse ich über 433 Mhz-Sender/Empfänger, die sich in Bundles bei eBay aus dem Osten für wenig Geld bestellen lassen
  • Als Sensoren habe ich mich etwas belesen und mich für DS18B20 als Temperatur- und DHT22 als Temperatur/Feuchtigkeitssensor entschieden, ebenfalls günstig bei eBay zu ersteigern
  • Ein „Wasserlecksensor“ lässt sich wohl selbst bauen – zumindest habe ich da etwas im Arduino-Forum gefunden
  • Es gibt bereits ein ähnliches Projekt, den TinyTX. Da hat sich jemand Mühe gemacht und auch ein Leiterplatinen-Layout erstellt. Dort wird zwar ein anderer Funksender genutzt, jedoch lässt sich bereits viel KnowHow aus den dortigen HowTos ziehen

Warenkorb

Damit es nun endlich mit dem Basteln und Programmieren losgehen kann, habe ich mit Bedacht meinen Warenkorb gefüllt. Zum einen darf natürlich nichts fehlen – die Kleinteile kosten gerne unter 1 Euro – da sind 6 € Versand schon happig. Zum anderen möchte man mit Bedacht bestellen, und ggf. ein paar Dinge ordern, die man erst später benötigen könnte.

Ich habe meine Teile bei Reichelt.de bestellt, und direkt ein paar mehr, damit ich gleich drei Sensoren bauen kann:

  • ATTINY 84V-10 PU (~3 €)
  • HALTER 3XAAAK (Batteriehalter für 3 AAA-Batterien, bereits mit kurzen Kabeln angelötet)
  • Widerstände (Kohle, 10K und 4,7K) für die Temperatursensoren
  • Ein paar Meter Litzenkabel zum verbinden, Schrumpfschlauch, eine Löthilfe, ein paar Fototransistoren („Lichtsensor“), Lochplatinen mit 50×100 für kleine Breakout-Boards

Und wie es ausging, erfahrt ihr, sobald ich meine Bestellung erhalten habe 🙂

Bastian
Bastian

Seit 2006 bin ich täglich im IT-Umfeld unterwegs und interessiere mich für technische Lösungen im Hard- und Softwarebereich, die einem den Alltag erleichtern. Zu meinen Hobbies zählt der 3D-Druck, das Tüfteln, Scripten, eine eigene Holzwerkstatt, sowie der unqualifizierte Umgang mit dem Lötkolben.

Artikel: 126

6 Kommentare

  1. Hallo,

    auf der Suche nach Lösungen zur funkbasierten Raumklimaüberwachung bin ich auf deinen Artikel gestoßen. Wirklich Klasse!
    Im Prinzip habe ich einen identischen Aufbau in Planung. Allerdings habe ich noch keine zündende Idee wie ich ATTINY 84V, RFM12b und DHT22 ohne viel Lötaufwand miteinander „verkabelt“ bekomme? Die TinyTX Leiterplate scheint ideal, allerdings ist sie nur verhältnismäßig teuer zu bekommen. Hast du dazu schon einen Ansatz?
    Eventuell lohnt sich vielleicht doch eine Sammelbestellung. Ich bräuchte ca. 5 Stück.

    Beste Grüße

    • Hi,
      naja, identisch ist dein Aufbau nicht – wie ich die letzten Wochen leidlich erfahren durfte 🙂
      Ich verwende ja kein RFM12b-Modul (was mir ehrlichgesagt zu teuer ist), sondern einfache Sender/Empfänger ohne Empfangsbestätigung. Dadurch bedingt bin ich auch auf ein paar Inkompatibilitäten zwischen VirtualWire-Lib und der JeeNode-Lib gestoßen, die man händisch anpassen muss.
      Und zu guter letzt ist meine Variante zu nichts kompatibel (emoncms, JeeNodes und wie die Dinger heißen), sondern wirklich komplett selbst gebastelt – inklusive Chart-Auswertungen.

      Ich würde sagen, frag doch mal im Arduino-Forum nach, ob jemand Interesse an den Platinen für eine Sammelbestellung hat, oder ob jemand einen Tipp hat, die Platinen kostengünstig herstellen zu lassen?

      Ich bin mit meinem kleinen Projekt schon relativ weit, sodass ich mich jetzt um kosmetische Dinge kümmern kann. In den kommenden 2-3 Wochen werde ich einen neuen Artikel mit meinen Sketches & Anleitungen veröffentlichen.

  2. Hi,

    gibt dazu noch einen neuen Artikel. Weil ich mich mit ähnlichen Ideen beschäftige und mir irgendwie der richtige Ansatz fehlt :). Also würde mich über einen weiteren Artikel freuen.

Schreibe einen Kommentar

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