Bewegungserkennung mit dem Raspberry Pi

Um mal etwas mit einem Raspberry Pi zu machen, habe ich mir überlegt, die Vögel zu fotografieren, die im Winter zu unserer Futterstelle kommen. Außerdem sollten die Bilder direkt von einem anderen Rechner aus betrachtet werden, weshalb ich einen Zugriff per Remotedesktopverbindung eingerichtet habe. Was dafür zu tun ist, habe ich nachfolgend zusammengetragen.

Fangen wir an mit der Einkaufsliste:

  • Raspberry Pi – Ich habe mich für das Model B+ entschieden, da dieser die nötige Rechen-Power für mein Vorhaben hat.
  • Kamera Modul für Raspberry Pi – Die Standard-Kamera zum Anschluss an den vorgesehenen Anschluss am Raspberry Pi.
  • WLAN-Adapter – Da ich von einem anderen Rechner auf den Raspi zugreifen will, muss eine Netzwerk-Verbindung her.
  • SD-Speicherkarte.
  • USB-Netzteil und USB-Kabel zur Stromversorgung.

Installation

Zur Installation kann man sich an den Quick Start Guide halten, oder die Installation von Hand machen. Letzteres beinhaltet die folgenden Schritte:

  1. Download von Raspbian
    Ich habe hier die Lite-Version verwendet, da die volle Variante diverse Programme mitbringt, die ich nicht benötige. Die GUI für einen Desktop habe ich später nachinstalliert.
  2. Übertragen des Images auf die SD-Karte
    Das heruntergeladene Image muss auf die SD-Karte für den Raspi übertragen werden. Unter Windows kann dazu der Win32DiskImager verwendet werden: das Programm downloaden, ausführen und die IMG-Datei aus Schritt 1 auswählen. Dann auf „Write“ klicken und kurz warten, bis das Image auf die SD-Karte übertragen wurde.
  3. Anschließen und Starten des Raspberry Pi
    Nachdem das Image auf die SD-Karte übertragen wurde, kann der Raspi das erste Mal gestartet werden. Dazu die SD-Karte am Raspi einstecken, alles anschließen (Maus & Tastatur, Monitor, LAN, Strom) und warten bis der Boot-Vorgang abgeschlossen ist.
  4. Raspbian einrichten
    Nach dem ersten Booten sollte sich die raspi-config starten. Hier empfehle ich insbesondere die folgenden Einstellungen:
    * Update von Raspi-Config
    * Expand Filesystem – um die gesamte SD-Karte auszunutzen
    * Locale auf de_DE.UTF-8 einstellen und Zeitzone auswählen
    * Tastatur einstellen auf „Generic 105-key (Intl) PC“ und Sprachversion „Other“ auswählen
    * „Enable Camera“ aktivieren
  5. Das ganze kann über „Finish“ beendet werden. Nach einem Neustart kann man sich mit dem Benutzernamen pi und Passwort raspberry anmelden (oder einem persönlichen Passwort).
  6. Optional kann man noch Raspbian aktualisieren:
sudo apt-get update
sudo apt-get upgrade

Tools

LXDE

Da ich mich am Anfang für die Lite-Version von Raspbian entschieden habe, musste eine GUI nachträglich installiert werden. Nach kurzer Suche bin ich auf LXDE gestoßen und habe damit mein Glück probiert. Also einfach folgendes eingeben:

sudo apt-get install lxde

Anschließend kann im Raspi-Config das booten in den Desktop aktiviert werden. Dabei ist darauf zu achten, dass keine Passwort-Eingabe gefordert wird. Ansonsten klappt anschließend der Login per RDP nicht.

WLAN

Der Raspberry Pi sollte außerdem in meinem Netzwerk erreichbar sein. Also musste eine WLAN-Verbindung her. Die Installation des oben genannten WLAN-Sticks funktionierte ohne großen Aufwand: einfach einstecken und kurz warten bis der Stick als wlan0 erkannt wird.

Zur Einrichtung der Netzwerkverbindung habe ich nicht den in LXDE mitgelieferten Wicd-Netzwerkmanager verwendet, sondern die Datei /etc/network/interfaces manuell bearbeitet:

sudo nano /etc/network/interfaces

In der Datei sind anschließend die folgenden Einträge zu ergänzen, um Zugriff auf das WLAN zu erhalten und DHCP einzurichten:

auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0 inet dhcp
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid "<dein Netzwerk-Name>"
wpa-psk "<dein Netzwerk-Schlüssel>"

Die Anführungsstriche um den Netzwerk-Namen und -Schlüssel müssen stehen bleiben.

Ein weiteres Problem kann die „Power Saving“-Funktion des WLAN-Sticks darstellen. Besteht eine Weile kein Datenaustausch zwischen dem Raspberry Pi und dem Netzwerk, wird die Verbindung stillgelegt. Dadurch kann der Raspberry Pi nicht mehr von außen erreicht werden. Ein mögliche Lösung ist eine Änderung an der Treiber-Konfiguration. Ich habe mich jedoch dafür entschieden, dass der Raspi per Cron-Job alle zehn Minuten einen Ping absetzen soll. Dazu Crontab öffnen:

sudo nano /etc/crontab

Und Folgende Zeile ergänzen:

*/10 * * * * root ping -c 1 192.168.1.1

RDP

Wichtigster Schritt, um per Remotedesktopverbindung auf den Raspberry Pi zuzugreifen, ist die Installation des XRDP-Servers:

sudo apt-get install xrdp

Anschließend kann mit jedem RDP-Client eine Verbindzung zum Raspberry Pi hergestellt werden. Beim Login ist noch zu beachten, dass das Modul sesman-Xvnc ausgewählt wird.

Bewegungserkennung mit Motion

Kamera-Setup

Nach der Befestigung der Kamera und Aktivierung in der Raspi-Config kann man mit dem folgenden Befehl erste Bilder aufnehmen:

raspistill -o bild.jpg

Eine rote LED auf dem Kamera-Board zeigt dabei an, wenn die Kamera aktiv ist. Diese LED kann in der config.txt im Ordner /boot deaktiviert werden. Dazu ist diese Zeile nötig:

disable_camera_led=1

Installation von Motion

Sollen Fotos jedoch automatisch aufgenommen werden, wenn etwas im Bild passiert, kann dieses mit Hilfe des Programms Motion umgesetzt werden. Dieses muss wie immer zuerst installiert werden:

sudo apt-get install motion

Anschließend findet man im Ordner /etc/motion die Datei motion.conf. Diese muss in das persönliche Verzeichnis in den unsichtbaren Ordner .motion kopiert werden. Dadurch hat der Nutzer seine Kopie der Konfiguration, die nachfolgend angepasst wird.

Konfiguration von Motion

Motion bietet in der motion.conf eine Vielzahl konfigurierbarer Parameter. Die wichtigsten Optionen sind aus meiner Sicht:

  • target_dir – bestimmt, wo Fotos und Videos gespeichert werden,
  • width und height bestimmen die Größe der Bilder,
  • locate markiert den bewegten Bereich im Bild,
  • threshold bestimmt die nötige Menge geänderter Pixel, um eine Bewegung zu erkennen.

Leider ist es schwer zu sagen, welche Werte für welche Bild-Situation gewählt werden müssen. Um zu guten Bildern zu kommen, muss man daher einige Versuche vornehmen. Ich habe festgestellt, dass die Kamera insbesondere mit wechselnden Lichtverhältnissen Probleme bekommt.

Darüber hinaus habe ich das Starten und Stoppen von Motion wie folgt automatisiert. Das Programm wird beim Hochfahren des Raspberry Pis gestartet. Dazu habe ich ein Skript mit folgendem Inhalt erstellt:

#!/bin/bash
sudo modprobe bcm2835-v4l2
sudo motion -c /home/pi/.motion/motion.conf

Dieses Skript lädt den Treiber für die Kamera und startet Motion mit der Angabe, wo das Config-File liegt. Das Skript wird beim Starten des Raspberry Pis ausgeführt, weil ich in der Datei /etc/rc.local die folgende Zeile ergänzt habe:

/home/pi/Desktop/startmotion.sh

Da ich die Bewegungserkennung nicht über den ganzen Tag benötige, stoppe ich Motion per Cron-Job um 17Uhr, indem ein zweites Skript aufgerufen wird. Der Eintrag in Crontab sieht dazu wie folgt aus:

* 17 * * * root /home/pi/Desktop/stopmotion.sh

Das Skript selbst enthält nur die folgenden Zeilen:

#!/bin/bash
sudo pkill motion
Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.