Raspberry Pi Funksensoren und Empfänger selber bauen – Teil 3 Sender bauen

Anleitung zum Selbstbau Übersicht

Den Sender Chip Programmieren (ATtiny 84)

Als erstes müssen wir den Chip für den Funksender entsprechend programmieren (auch Flashen oder Brennen genannt). Da wir zum Glück einen Raspberry Pi haben können wir das Programm über den Raspberry Pi auf den Chip brennen. Hier eine logische Ansicht auf den ATtiny, achtet beim Verkabeln darauf das die PINs richtig zugeordnet werden, erkennen könnt ihr das an der Kerbe auf dem Chip.

Wir verkabeln den ATtiny 84 entsprechend dieser Zuordnungstabelle mit unserem Raspberry Pi, diese Zuordnung kann sowohl für das Modell B als auch für den A+ und B+ verwendet werden. Schaltet euren Raspberry Pi zum Verkabeln aus! Ich verwende der Einfachheit halber ein Breadboard mit GPIO Breakout.

ATtiny-84 ATtiny-84-flashen Breakout-Programmieren

Sobald die Verkabelung abgeschlossen ist können wir mit der Einrichtung der Software auf dem Raspberry Pi befassen. Wir installieren erst via apt vorhandene Updates und alle notwendigen Tools. Alleine die Arduino Entwicklungsumgebung hat ca. 80MB, die Installation dauert also etwas.

Wir benötigen noch zwei zusätzliche Softwarepakete die sich nicht im Raspbian Repository befinden, daher laden wir uns diese via wget runter und installieren sie via dpkg. Avrdude ist die Programmiersoftware für den Atmel ATtiny Chip.

Dann legen wir uns einige Arbeitsverzeichnisse an, und clonen uns dort via git die Libraries für das RFM12 Modu, JeeLib (Treiber für Wireless Module) sowie die OneWire Library für das OneWire Protokoll und eine Temperatur Library für DS18B2x Sensoren. Die Libraries verwenden wir später in unserem Programm welches wir auf den ATtiny Chip schreiben.

Nun holen wir uns noch die Kernkomponenten des ATtiny Chips, diese benötigen wir das unser Programm (Sketch) später auf dem Chip überhaupt lauffähig ist. Darin enthalten ist der Bootloader des Chips und die PIN Definitionen.

Dann benötigen wir noch die „Sketches“ für unseren Sender, das ist der eigentliche Programm Code der auf dem ATtiny ausgeführt wird. Die Entwicklungsumgebung „ArduinoIDE“, welche wir vorher installiert haben, sucht im Standard im Verzeichnis „/usr/share/arduino/“ nach passenden Sketches, daher laden wir diese dort hin. Falls ihr einen anderen Sensor verwendet müsst ihr die URL im Wget Befehl entsprechend anpassen, ich verwende den DHT22.

  • DHT22 – http://raspberry.tips/wp-content/uploads/2014/11/Send_DHT22.ino
  • DHT22 als PCB-Version – http://raspberry.tips/wp-content/uploads/2014/12/DHT22-PCB-Version.txt
  • DS18B20 – http://raspberry.tips/wp-content/uploads/2014/11/Send_DS18B20.ino
  • Empfänger – http://raspberry.tips/wp-content/uploads/2014/11/Receiver_PI.ino
Testet noch ob euer ATtiny auch wirklich richtig verkabelt ist, dabei hilft uns der folgende Befehl, dieser muss avrdude: AVR device initialized and ready to accept instructions zurückgeben

 Den ATtiny Programmieren

Um den IC programmieren zu können müssen wir die ArduinoIDE aufrufen, allerdings ist dies nur auf der grafischen Oberfläche möglich. Falls ihr aufmerksam wart habt ihr vielleicht bemerkt das sich bei der Installation der Software ein xrdp untergemogelt hat, dieses verwende ich um von meinem Windows Rechner eine Remoteverbindung zum Raspberry Pi aufzubauen. Als alternative könnt ihr auch VNC benutzen oder direkt mit Bildschirm, Tastatur un Maus am RasPi arbeiten. Vergesst nicht via „raspi-config“ den Statmodus auf „Desktop mit Automatischem Login von pi“ umzustellen und den RasPi einmal neu zu starten.

WICHTIG!
Ihr müsst unbeding bevor ihr mit dem Programmieren startet noch die UART Schnittstelle aktivieren.

Ich arbeite als Root auf meinem Desktop und verwende daher /root/sketchbook für die IDE als Ordner worin wir alle wichtigen Dateien gelegt haben. Falls ihr als Pi arbeitet müssen diese mit passendem Owner in eurem Home liegen. Anmelden könnt ihr euch als root indem ihr vorher das Passwort geändert habt. Erst „sudo su“ und dann „passwd“ in der Konsole.

Wir finden die Entwicklungsumgebung ArduinoIDE dann im Startmenu unter „Electronics“. Wir starten das Tool (das dauert einige Sekunden).

ArduinoIDE

Wir öffnen die das Programm „Send.ino“ welches wir vorher nach „/usr/share/arduino/Send/Send.ino“ kopiert habe. Den öffnen Dialog findet ihr im File Menu unter Open.. klickt dort auf File System und navigiert in den Ordner und öffnen die Send.ino (Klickt auf File System und dann unter /usr/share/arduino/Send )

send-ino-oeffnen-2

Achtung!
Wenn ihr mehrere Sender programmiert müssen diese mit einer jeweils andere NETWORKID besitzen sodass der Empfänger dies unterscheiden kann. Hierzu müsst ihr in der Send.ino die Definition für die Netzwork ID anpassen. Ebenfalls muss die GATEWAYID übereinstimmen. Die Definition findet ihr im oberen bereich. Schreibt euch die IDs am besten auf die Platine bzw. mit einem Klebezettel auf den Chip!

Hier die anpassbaren Definitionen:

Dann in der ArduinoIDE auf das Menü Tools -> Board gehen und dort ATtiny84 (internal 8 MHz clock) auswählen

select-board

 

Dann noch den richtigen Programmer auswählen „Raspberry Pi GPIO (on-board)“ über Tools > Programmer

programmer

Wieder über das Menü Tools  den Bootloader installieren – Burn Bootloader 

burn-bootloader

Auf das Menü File -> Preferences gehen und dort einstellen: Show verbose output during: [x] compilation

debug-output

Wir starten nun die Überprüfung und die Erstellung unseres Programms, dazu klicken wir im Menu auf Sketch > Verify / Compile

compile-start

Das Erstellen dauert einige Sekunden, wenn alles funktioniert hat sehen wir im Ausgabefenster unten Done Compiling bei einem Fehler Error Compiling. Einige rote Warnmeldungen sind normal, ein Fehler sollte jedoch nicht auftauchen.

compile

Die Entwicklungsumgebung hat uns nun das Programm (Sketch) als Hex File erstellt welches wir auf den Chip schreiben können. Wir wählen über Tools > Programmer noch unseren RasPi als Ziel (haben wir mit dem Download der Datei programmers.txt definiert).

select target

Klickt abschließend auf File > Upload using Programmer um das Programm auf den Chip zu schreiben. ArduinoIDE meldet Done Uploading wenn alles geklappt hat.

Den Sender zusammenbauen

Das Stripboard Layout basiert auf dem Design von Nathan. Entsprechend eurem Sensor muss der Widerstand zwischen VCC (VDD) und DATA (DQ) entweder entfernt oder ausgetauscht werden. Details siehe Einkaufsliste. Bei meinem DHT22 tausche ich den 4,7k gegen einen 10k Widerstand und achte darauf die PIN richtig zuzuordnen.

Schaltplan-Sender DHT22-PINS  DHT22-Verkabelung

Beim Zusammenbau des Senders wie folgt vorgegangen:

 

1. Platine zuschneiden

Die Platine für den Sender ist 16 x 15 Löcher.

2. Buchsenleiste für den Sensor auflöten

Die 10er Buchsenleiste habe ich mir einfach passend zugeschnitten

3. Stift für die Antenne auflöten(Klingeldraht geht auch direkt am Board)

4. Buchsenleiste für den Batterie Halter auflöten

5. Buchsenleiste für den RFM12B auflöten

6. Die mit  einem roten X markierten Leiter unterbrechen (durchschneiden / abschaben mit scharfem Messer / Cutter)

7. Auflöten des IC Sockels

8. Auflöten des RFM12B

Ein kleiner Tipp, wenn ihr Stiftleisten in euer Breadboard steckt, biegt und dann den Chip dazwischen klemmt könnt ihr einfach und sauber löten. Ihr bekommt das aber bestimmt schöner hin als ich, ich habe zwecks der Stabilität alle Beinchen angelötet (6 pro Seite), ihr könnt auch nur die benötigten 6 + 2 Pins anlöten um Material und Fummelei zu sparen.

  RFM12B-1 rfm12b_dil_x6 RFM12B-2 RFM12B-3

9. Verkabeln mit Klingeldraht

Bei mir sieht das Ergebnis so aus, ich habe noch eine LED für den Status (für Tests ganz gut) eingelötet.

Sender

Zum Testen kann noch eine LED zwischen PIN11 (+) und PIN14 (-) eine LED aufgelötet werden, diese blinkt dann bei den entsprechenden Zeilen im Code.

LED

Antenne

Als Antenne habe ich einen Kupferdraht benutzt den ich auf 165mm gekürzt habe. Dieser wird direkt an das RFM12 Board gelötet. Es ist auch möglich einen „Spirale“ als Antenne zu benutzten die im Gehäuse Platz finden kann, das habe ich aber noch nicht ausprobiert und kann auch zu der Reichweite noch nichts sagen.