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

Temperatur und Luftfeuchte Sensor

Da mein Raspberry Pi die Heizungssteuerung übernehmen soll, braucht er Temperatur und Luftfeuchtigkeitswerte. Dazu habe ich mir einen Kombi Sensor, den DHT22, von Adafruit bestellt. Der Sensor kommt bereits mit dem benötigten 4.7K – 10K Widerstand, dieser wird als Pull-Up Widerstand vom GPIO Pin zu VCC verwendet.

Ursprünglich wollte ich den DHT22 Sensor mit perl auslesen. Nach einiger Zeit wurde klar, dass perl auf dem Raspberry Pi nicht schnell genug ist um erfolgreich Werte auslesen zu können.

An diesem Punkt entschied ich den Quellcode von Adafruit (verfügbar auf Github) zu nutzen und diesen einfach aus meinem perl Skript anzusteuern. Eine sehr gute Anleitung zum DHT22 gibt es von Adafruit hier.

Das folgende Bild zeigt die Anordnung auf dem Experimentierbrett.
Temp/Hum Sensor

So sieht das Ganze dann in der Fritzing Experimentierbrett Ansicht aus
Temp/Hum Fritzing

Das Skript ruft den Adafruit C-Quellcode mit den Parametern 22 (für den Sensor Typ) und 4 (entspricht dem zu nutzenden GPIO Pin) auf. Da auch der Adafruit Code nicht immer in der Lage ist erfolgreich einen Messwert auszulesen habe ich eine kleine Schleife erstellt, die sicherstellt, dass nur dann ein Log Eintrag erfolgt, wenn erfolgreich ein Messwert genommen werden konnte. Um zu beobachten wie viele Durchläufe notwendig waren habe ich eine Zählvariable eingebaut. In der Praxis wird die Schleife normalerweise 2 bis 5 Mal durchlaufen. Das Maximum das ich bisher beobachten konnte waren 11 Durchläufe.

 #!/usr/bin/perl

# 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;

}

my $bin = './Adafruit_DHT 22 4';
 my $check = 0;
 my $counter = 0;

#run until a temperature and humidity value has been logged
 while ($check == 0){
 # run the C program
 $result2 = `$bin`;

# extract the strings
 my @array = split("\n", $result2);

$counter = $counter + 1;

# logging only if the string is not empty
 if ($array[2] ne "") {
 &logging ("$array[2]");
 &logging ("$counter");
 $check = 1;
 }
 }
 

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