Ein erster Prototyp

Diese Woche wurde meine ersten selbst entworfenen Platinen von eurocircuits.com geliefert.

Zunächst die Frontseite, die alle Komponenten aufnimmt, welche dies im Details sind, dazu später.
PCB front

Die Rückseite, die lediglich den 2X13 PIN Connector aufnimmt.
PCB backside

Zum Sortieren der Komponenten verwende ich Einweg Suppenschüsseln.
Assorted components

Alle Widerstände und die beiden ICs (MCP 3008 und MCP 23S17) sind aufgelötet.
ICs added

So gut wie fertig, Connector für den PIR Sensor und den IR Abstandssensor hinzugefügt, genauso wie der DHT22 (Temperatur und Luftfeuchte Sensor) und die 7-Segment Anzeigen.
DHT22 and connector for IR proximity added

Fertig montiert.
Fully loaded shield prototype

Um genug Abstand zu den Aufbauten des RaspberryPi zu erhalten, verwende ich extra hohe Header.
Stacking header für Raspberry Pi (extra tall)

Abschließend die fertige Platine auf dem Raspberry Pi.Prototype Shield on Raspberry Pi

IR Abstands Sensor

Um Energie zu sparen möchte ich, dass das Display (welches noch hinzugefügt werden muss) nur aktiviert wird, wenn sich jemand in der Nähe des Gerätes befindet. Für die Umsetzung dieser Funktion entschied ich mich für den Einsatz eines vorgefertigten  IR Abstand Sensors von Sharp.

Der Sensor arbeitet rein analog, die abgegebene Spannung reicht von 3V, wenn ein Objekt sich circa 10 cm vor dem Sensor befindet, bis 0,4V, wenn das Objekt 80 cm entfernt ist. Leider verfügt aber der Raspberry Pi nicht über analoge Eingänge um diesen Sensor direkt auszuwerten.

Meine Rettung war der grossartige Artikel von Matt @ raspberry-spy.co.uk, in dem er erklärt wie man unterschiedliche Lichtstärken mit dem Raspberry Pi misst.

Also begann ich damit seine Schaltung nachzubauen und führte ein paar erfolgreiche Testmessungen durch. Das folgende Bild zeigt den Aufbau auf meinem  Experimentierbrett.
LDR with capacitor

Weitere Details inklusive eines Fritzing Layouts finden sich in Matts Artikel. Nachdem ich die Schaltung erfolgreich kopiert hatte, habe ich den Widerstand und den Lichtsensor durch den IR Abstands Sensor ersetzt.
IR distance sensor on breadboard

Mit dem folgenden Quellcode zähle ich, wie viele Schleifendurchläufe erforderlich sind bis die Spannung über den Kondensator so weit angestiegen ist, so dass sie vom Raspberry Pi am GPIO Pin als HIGH erkannt wird (ungefähr 2 Volt). Die Anzahl der Schleifendurchläufe ist direkt proportional zum Abstand des Objektes vor dem Sensor.

 #!/usr/bin/perl

use Device::BCM2835;
 use strict;

# call set_debug(1) to do a non-destructive test on non-RPi hardware
 # Device::BCM2835::set_debug(1);
 Device::BCM2835::init()
 || die "Could not init library";

# Variables
 my $ir_pin = 24;
 my $measurement =0;

# logfile handling
 sub logging {

my $logfile = "/appco.de/log/appco.de.log";

if ( ! open LOG, ">>", $logfile ) {
 die "Kann Logdatei nicht anlegen: $!";
 }

my ($sekunden, $minuten, $stunde, $tag, $monat, $jahr) = localtime;
 my $echtes_jahr = $jahr + 1900;
 my $echter_monat = $monat + 1;
 printf LOG "%s.%02s.%02s %02s:%02s:%02s %s\n", $echtes_jahr, $echter_monat, $tag, $stunde, $minuten, $sekunden, $_[0];
 close LOG;

}

while (1){
 # Discharge capacitor
 # Set GPIO pin to OUTPUT
 Device::BCM2835::gpio_fsel($ir_pin, BCM2835_GPIO_FSEL_OUTP);
 # Set GPIO pin to LOW
 Device::BCM2835::gpio_write($ir_pin, LOW);
 sleep (0.1);

# Set GPIO pin to INPUT
 Device::BCM2835::gpio_fsel($ir_pin, BCM2835_GPIO_FSEL_INPT);

$measurement = 0;

# Count loops until voltage across
 # capacitor reads high on GPIO
 while (Device::BCM2835::gpio_lev($ir_pin) == 0){
 $measurement ++;
 sleep (0.2);
 # stop measuring after 100.000 loops
 if ($measurement > 100000){
 &logging ("canceled");
 last;
 }
 }

&logging ("$measurement");

}
 

Aktuell ist der Sensor dauerhaft angeschaltet, was vermutlich mehr Energie verbraucht als ich durch seinen Einsatz eigentlich sparen wollte.

In Zukunft soll der Sensor nur noch dann angeschaltet werden, wenn der PIR Sensor eine Bewegung erkannt hat. Außerdem soll der fertig gekaufte Sensor durch eine eigene Lösung bestehend aus IR LEDs und einem IR Empfänger ersetzt werden.

Sensoren für den Raspberry Pi

Angeregt von Nest® dem lernenden Thermostat möchte ich die Haussteuerungsfähigkeiten des Raspberry Pi mit ein paar Sensoren deutlich verbessern.

Temperature and humidity sensor
Wird eingesetzt um Temperatur und Luftfeuchtigkeit eines Raumes zu messen und das Heizungsventil entsprechend zu regeln. Der Grund warum hier der DHT22 und nicht der preiswertere DHT11 zum Einsatz kommt, ist die viel höhere Präzision, zum Beispiel für die Temperatur: ±0,5°C Abweichung (DHT22) gegenüber ±2°C Abweichung (DHT11). Nach meinem Verständnis sind ±2°C für die Temperatursteuerung in einem bewohnten Raum nicht akzeptabel.
Temp/Hum Sensor
Temperatur/Luftfeuchte Sensor (auf der rechten Seite) bereits komplett verkabelt.

PIR
Der Raspberry Pi soll erkennen ob sich Personen in einem Raum aufhalten und die Temperatur entsprechend steuern. Über die Zeit soll er in der Lage sein sich einen Zeitplan aufzubauen und ihn auch zu pflegen. Ich benutze diesen Sensor von adafruit.com
PIR Sensor

IR Abstand / Annäherung
Mit diesem Sensor sollte der Server in der Lage sein eine Person in der Nähe zu erkennen und das Userinterface zur Verfügung zu stellen. Zunächst einmal werde ich mit einem Sharp GP2Y0A21YK0F arbeiten und vielleicht später zu einer Eigenbau Lösung wechseln.
IR Distance Sensor