Weitere Pi-Projekte (2)

Echtzeituhr an Raspberry Pi

Die meisten unserer Kleinrechner verzichten auf eine Echtzeituhr, da sie sich die "richtige Zeit" aus dem Internet beim Bootvorgang holen. Fällt der Strom aus, bootet der Rechner neu und der Vorgang wiederholt sich. Eigentlich kein Problem also, es sei denn, man hat kein Internet zur Verfügung oder die Vorrichtung ist nicht an solchem angeschlossen.
 

 
Einen Sonderfall stellen solche, wie der Banana Pi dar, welcher eine interne Uhr besitzt, welche jedoch nicht batteriegepuffert ist. Aber das soll hier keine Rolle spielen, denn hier wollen wir einen Raspi mit einer RTC ausrüsten.

Arbeitet man mit dem Raspberry, welcher eigentlich nur 3.3V an den Ports toleriert, sollten zuerst die Pull-Up-Widerstände für SDA und SCL auf einem I2C-Gerät entfernt werden. Erst danach ist der Betrieb z.B. einer 5V-Real-Time-Clock im Zusammenspiel mit dem Raspi möglich, da er sonst an den Leitungen Schaden nehmen kann. Wie eventuelle andere Geräte am Bus auch.
 

 
Unsere TinyRTC mit einem DS1307 (in der Version 1.1) läuft günstigerweise aber auch mit 3.3 Volt, so dass man sich das sparen kann. Die Verkabelung ist dann auch ganz einfach. Man verbindet die Pins für 3.3V, GND, SDA und SCL auf der Steckerleiste des Raspi mit VCC und den gleichnamigen Pins der Uhrenplatine.

Für die Software-Installation zuerst aktualisieren und die I2c-Tools installieren:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install i2c-tools

Dann SPI und I2C-Modul von der Blacklist entfernen:

$ sudo nano /etc/modprobe.d/raspi-blacklist.conf
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
$ sudo reboot

Um die benötigten Module später automatisch zu laden, diese in "/etc/modules" eintragen:

$ sudo nano /etc/modules
snd-bcm2835
spi-bcm2708
i2c-bcm2708
i2c-dev
rtc-ds1307

Jetzt zuerst die Module laden...

$ sudo modprobe spi-bcm2708
$ sudo modprobe i2c-bcm2708
$ sudo modprobe i2c-dev
$ sudo modprobe rtc-ds1307

dann kann man überprüfen, ob sich die Uhr am I2C-Bus meldet:

$ sudo i2cdetect -y 1

Das tut sie per Default an Adresse 0x68 (auf 0x50 befindet sich noch ein User-EEPROM) und wir können diese mittels

$ sudo i2cget -y 1 0x68 1
$ sudo i2cget -y 1 0x68 2
$ sudo i2cget -y 1 0x68 3

auch auslesen (Sekunden, Minuten, Stunden).

Um die RTC in das System einzubinden, verfahren wir so (hier muss man einen root-prompt haben):

$ sudo bash
# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
# Ctrl-D

Nach der Überprüfung mit

$ sudo hwclock -r

stimmt mitunter die Zeit noch nicht. Das richtet man elegant mit

$ sudo hwclock --systohc -D --noadjfile --utc


 
Nach erneutem "hwclock -r" ergibt sich dann z.B. folgende Ausgabe:

Thu 01 Jan 2015 21:14:26 CET -0.318727 seconds

Um die Veränderungen permanent zu machen, braucht es noch Einträge für den Neustart des Systems. Wir tragen dazu mittels

sudo nano /etc/rc.local

folgende Zeilen in die "rc.local" vor "exit 0" ein:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s

Fertig. Nun sollte nach einem Neustart wieder die korrekte Zeit angezeigt werden...

 

Homematic und Pi-Cam

In diesem Projekt (08/2014) wurden Hausautomatisierung auf Basis homematic und FHEM mit einer Pi-Cam an einem Raspberry Pi verbunden. Wie eine Überwachung mittels Pi-Cam und motion-Paket geht, haben wir ja schon gezeigt. Jetzt soll der Pi nach wie vor als Aufnahmegerät dienen, getriggert wird das Ganze aber nun durch einen homematic-Bewegungsmelder.

Zuerst nun zur FHEM-Software. Die einfachste Art der Verbindung ist eine Dateischnittstelle. Also legen wir uns eine Perl-Subroutine im Modul 99_myUtils.pm an, welche bei Aufruf ein Kennzeichen in eine Übergabedatei (auf dem Server wo FHEM läuft) schreibt. Jetzt muss festgelegt werden, unter welchen Umständen geschrieben werden soll. Nämlich dann, wenn am Bewegungsmelder eine Bewegung erkannt wird. Dazu haben wir ein Skript kreiert, was bei einem "notify" (erkannte Bewegung) unser Perl-Modul aufruft.

pi

Unser Melder ist übrigens das Außenmodell "HM-Sen-MDIR-SM", welches wasserdicht ist und kompakte Abmessungen hat. Die Antenne aus dem Gehäuse zu ziehen war bestimmt eine gute Idee hinsichtlich der Reichweite, denn diese ist recht gut...

Die Übergabedatei soll nun vom Kamera-Raspi kontrolliert werden und sollte sich der entsprechende String darin befinden, soll der Pi eine Aufnahme auslösen. Dazu widmen wir uns nun dem Raspi und legen dort ein Skript ab, welches das realisiert. Zuerst wird mittels scp vom entfernten Hausserver die Übergabedatei auf den Raspi geholt. Danach sucht das Bashskript in der Datei nach dem Kennzeichen. Wenn gefunden, wird die Kameraaufnahme mittels raspistill ausgelöst und danach der Zustand auf "Keine Bewegung" zurückgesetzt, in dem in die Übergabedatei entsprechendes geschrieben wird.

pi

Unsere Überwachungsbilder werden im Skript ebenfalls noch übertragen. Im Netzwerk kann man sie dann auch von einem PC aus betrachten. Anschließend wird die Übergabedatei noch auf den Server zurückgespielt, damit bei der nächsten Überprüfung auch der neutrale Zustand anliegt, solange wie dieser nicht durch den Bewegungssensor in FHEM bei einer neuen Bewegung wieder überschrieben wird...

Der Pi kommt wieder mit herausgeführtem Kameramodul und WLAN-Antenne daher und befindet sich logischerweise in Nähe des Melders, jedoch ist man hier frei in der Aufstellung. Und damit wir noch freier werden und ohne Netzteil arbeiten können, haben wir eine Versorgung mittels Akku realisiert. Drei Zellen genügen, mittels eines DC-DC-Wandlers wird die Spannung auf die erforderlichen 5 Volt gebracht.

pi

Zum Schluss bedienen wir uns einer etwas unkonventionellen Methode, da wir unser Skript auf dem Raspi mit einem crontab-Eintrag aufrufen wollen. Da dieser im Minimum jede Minute auslösen kann, wiederholen wir unsere Abfragen innerhalb des Bashskripts nach einer kurzen Wartezeit von 6 Sekunden jeweils weitere 3 Mal. Somit können wir zeitnah auf erkannte Bewegungen reagieren. Mehr braucht es an dieser Stelle nicht, denn es geht nur um eine zeitnahe Aufnahme. Durch den Melder erkannte Bewegungen gehen nicht verloren, da der Bewegungsmelder eine deutliche höhere Karenzzeit hat, bis er für eine nächste Erkennung bereit ist.

 

Schrittmotor für die Cam

Stepper

Unsere IP-Cam, auf Basis einer HD-Webcam und dem Raspberry Pi-Compi realisiert, sollte einen Antrieb bekommen. So geschehen im August 2013. Nun sind die Arbeiten gemacht und hier eine kleine Doku darueber...

Zwei Achsen sollten es sein, also die Bauteile beschafft. Ein Scharnier fuer eine Wippe fuer die Auf-Ab-Bewegung und ein Drehgelenk aus der Moebelabteilung des Baumarkts waren schnell organisiert. Idee fuer die Mechanik: Es gibt keine Endanschlaege, sondern eine Umdrehung der Motoren bringt die Cam wieder in ihre Ausgangslage zurueck. Somit ist kein Problem vorhanden, wenn man von einem Ort aus steuert, von dem die Cam nicht einsehbar ist und es ist jeweils nur eine Drehrichtung von Noeten. Als Antrieb wurden 2 Schrittmotoren 28BJY-48 mit ULN2003-Controller-Board gewaehlt. Die Baugruppen sind preiswert, relativ kraeftig, laufen mit 5V und erfuellen die Bedingung, dass sie sich einfach mit dem gleichen Raspberry steuern lassen, welcher schon die Aufnahme und Verteilung der Bilder an der Cam uebernimmt.

Stepper

Als Vorlage fuer die Software dient das von Matt auf raspberrypi-spy.co.uk in 2012 veroeffentlichte Stepper-Python-Script. Die USB-Cam am Pi belegt keine GPIO-Ports, so dass 8 Stueck fuer die Steuerung der beiden Stepper einfach gefunden werden konnten. Eine super Sache vom Autor also, die zu unrecht kritisierte 4-Pin-Sparvariante im Artikel explizit zu beschreiben. Die Schrittmotoren enthalten ein kleines Getriebe, sind nochmal 64fach untersetzt (Anhalten mit Finger nicht moeglich). Jeder originaere Motorschritt bewegt um 5,625 Grad. Fuer eine 360 Grad-Drehung sind also 64x64 gleich 4096 Schritte notwendig, um an die Ausgangsposition zu drehen.

Die Auf-Ab-Wippe bewegen wir mit einem aussermittig angebrachten Rad/Scheibe, die Links-Rechts-Bewegung wird mit einer Deichsel von Antriebsrad zur Plattform (welche die Wippe traegt) bewerkstelligt, hier steht der Motor senkrecht. Der Einfachheit halber wurden mehrere Scripte realisiert, welche die Motoren 64 Schritte vorwaerts oder kurz vor die Ausgangslage drehen, also die Rueckstellung bewirken. Das geschieht dann von einem beliebigen Netzwerkrechner aus, der ueber SSH Zugriff auf den Raspi der Cam hat und die Scripte in der Konsole dort starten kann.

Stepper

Die Montage geschah wieder auf dem Stativ, welches die IP-Cam hinter Glas am entsprechenden Fenster positioniert. Das Ergebnis kennt ihr ja, die Bilder sind hier im Web als Blick auf den Heimatort veroeffentlicht. Bisher ist nicht geplant, auch dem Besucher Zugriff auf die Steuerung zu geben. Es soll ja auch nicht unkontrolliert geschwenkt werden und das Motiv unter eigener Kontrolle bleiben. Dafuer ist die Software nicht offen und auf das Heimnetz beschraenkt. Vielmehr ging es darum, zu justieren und dafuer eine bequeme Ferneinrichtung (ueber ein Stockwerk im Haus, per WLAN) zu haben. Und natuerlich zur Demonstration und der Kreativitaet willen.

Eine zufriedenstellende Loesung also, vielleicht gibt es demnaechst aber auch einen Admin-Account fuer die Website oder regelmaessige Schwenks fuer Mehrfachaufnahmen. Oder versetzte Aufnahmen fuer eine anschliessende 3D-Darstellung des Gelaendes, man kann ja nie wissen...

Swen Hopfe

Neuen Kommentar schreiben

Filtered HTML

  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.

Plain text

  • Keine HTML-Tags erlaubt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.