Hier stelle ich dir vor, wie ich mit einem Raspberry Pi eine Kamera in einen Nistkasten gebaut habe.
Material
Für die Technik
- Raspberry Pi Zero
- Kamera
- Kabel für die Kamera
- USB Stick, damit die Aufnahmen gespeichert werden können (man kann die Aufnahmen auch z.B. auf ein NAS speichern, siehe weiter unten)
- Netzteil
- LAN Modul
- SD Karte
- Relais Modul
- Ein Gehäuse (Ich werde meines mit dem 3D Drucker ausdrucken)
- etwas Lötmaterial
Für den Nistkasten
- Ein Brett der Größe 27×190, 1,8cm Dick
- 30 Schrauben 3x35mm oder 3x40mm, Senkkopf
- 2Schrauben 3x20mm, Senkkopf
- 2Schraubenhaken 4x30mm für die Verriegelung an der Front
- 2Nägel
- 1 Scharnier
Bau des Nistkastens:
Zunächst wurde der Höhlenbrüternistkasten des NABU so umgebaut, dass der Raspberry Pi darin Platz hat. Folgendes wurde verändert:
- Das Seitenteil gibt es 2 Mal
- Der Boden ist durchgehend
- Es kommt ein weiteres Teil mit den Maßen 5x25cm hinzu
- Das Dach und die Rückwand sind 5cm länger
Das Gehäuse
Das Gehäuse habe ich mit dem 3D Drucker ausgedruckt. In dieses Gehäuse passt der Raspberry und der enc28j60. Ich musste es, weil der Ethernet Adapter nicht rein passte, noch etwas abändern. Wenn man gerade keinen 3D Drucker hat, kann man sich natürlich auch eines kaufen. Wichtig ist dabei nur, dass es nicht dicker als 4cm sein darf. Ansonsten muss der Nistkasten umgeplant werden. Da ich meine Infrarot LEDs gerne schalten möchte, habe ich diese extra an einen GPIO angeschlossen. Da diese aber nicht genug Strom lieferten, musst ich ein Relais einsetzen. Dieses und natürlich auch die Kamera und die IR LEDs selbst brauchen auch Gehäuse. Diese habe ich ebenfalls mit dem 3D-Drucker ausgedruckt.
Gehäuse für Kamera und IR LEDs
Halterung zum Einstellen der Kamera
Gehäuse für das Relais
Verkabeln
Das LAN Modul habe ich nach diesem Tutorial so verkabelt:
LAN Modul | Raspberry |
---|---|
VCC | Pin 1 |
GND | Pin 6 |
CS | Pin 24 |
SI | Pin 19 |
SCK | Pin 23 |
SO | Pin 21 |
INT |
Das Relais und die LEDs habe ich so verkabelt:
Relais Modul | Raspberry | LEDs |
---|---|---|
VCC | Pin 1 | |
GND | Pin 6 | |
In1 | Pin 8 | |
IN2 | Pin 10 | |
Ausgang1, Pin 1 | Pin 1 | |
Ausgang2, Pin 1 | Pin 1 | |
Ausgang1, Pin 2 | + | |
Ausgang2, Pin 1 | + | |
Pin 6 | – | |
Pin 6 |
LAN Modul aktivieren
Nun geht‘s an die Software. Das LAN-Mudul habe ich aktiviert, indem ich in der raspi-config I2c aktiviert und in der /boot/config.txt die Zeile
1 |
dtoverlay=enc28j60 |
eingefügt habe.
Samba client einrichten
Alle meine Bilder, die ich mit der Kamera aufnehme, sollen auf einem Samba Server gespeichert werden. Dazu installiere ich einen Samba Client nach diesem Tutorial:
1. Updaten:
sudo apt-get update && sudo apt-get upgrade
2. Samba Client installieren:
sudo apt install smbclient
3. mountpoint erstellen:
sudo mkdir /media/bilder
4. rc.local öffnen
sudo nano /etc/rc.local
5. Folgende Zeile eintragen
1 2 |
sleep 20 sudo mount -t cifs -o user=root,password=XXXXX,rw,file_mode=0777,dir_mode=0777 //192.168.178.198/birdcam1 /media/bilder/ |
Motion installieren und und konfigurieren
Ich orientiere mich hier an diesem Tutorial. Als Überwachungssoftware nutze ich motion. Diese kann ganz einfach installiert werden mit:
sudo apt-get install motion
Natürlich muss man in der raspi-config auch die Kamera noch aktivieren. Wenn das erledigt ist, muss man noch ein paar Einstellungen vornehmen. Als erstes braucht man ein paar Informationen über die Kamera:
v4l2-ctl -V
Hier sind die Informationen „Pixel Format“ und „Widht/Height“ wichtig. Diese werden wir später brauchen.
Nun muss man in der Datei
sudo nano /etc/motion/motion.conf
ein paar Dinge bearbeiten:daemon on
Dadurch startet motion im daemon Modusstream_localhost off
Damit man auch von anderen Geräten, außer dem Pi selber auf den stream von motion zugreifen kann.target_dir /media/Bilder
Der Ort, an dem die Aufnahmen gespeichert werden sollenv4l2_palette 17
Das Videoformat, das die Kamera hat. (siehe Befehl am Anfang) hier gilt:# V4L2_PIX_FMT_SN9C10X : 0 'S910'
# V4L2_PIX_FMT_SBGGR16 : 1 'BYR2'
# V4L2_PIX_FMT_SBGGR8 : 2 'BA81'
# V4L2_PIX_FMT_SPCA561 : 3 'S561'
# V4L2_PIX_FMT_SGBRG8 : 4 'GBRG'
# V4L2_PIX_FMT_SGRBG8 : 5 'GRBG'
# V4L2_PIX_FMT_PAC207 : 6 'P207'
# V4L2_PIX_FMT_PJPG : 7 'PJPG'
# V4L2_PIX_FMT_MJPEG : 8 'MJPEG'
# V4L2_PIX_FMT_JPEG : 9 'JPEG'
# V4L2_PIX_FMT_RGB24 : 10 'RGB3'
# V4L2_PIX_FMT_SPCA501 : 11 'S501'
# V4L2_PIX_FMT_SPCA505 : 12 'S505'
# V4L2_PIX_FMT_SPCA508 : 13 'S508'
# V4L2_PIX_FMT_UYVY : 14 'UYVY'
# V4L2_PIX_FMT_YUYV : 15 'YUYV'
# V4L2_PIX_FMT_YUV422P : 16 '422P'
# V4L2_PIX_FMT_YUV420 : 17 'YU12'
Da meine Kamera YU12 hat, nehme ich hier Nummer 17widht 960
height 720
hier kann alles beliebige genutzt werden, was die Kamera maximal kann, nur das Seitenverhätnis muss stimmen. Ich empfehle aber dieses Format.threshold 1500
Das ist die Anzahl der Pixel, die sich verändern müssen, damit ein Bild aufgezeichnet wird. Sozusagen die Empfindlichkeit der Bewegungserkennung. Hier muss man selbst ausprobieren, was das beste ist.
Als nächstes muss man noch die Dateisudo nano /etc/default/motion
bearbeiten. Dort setzt man no auf yes.
Damit motion auch automatisch gestartet wird, habe ich in dersudo nano /etc/rc.local
noch die Zeile sudo motion
hinzugefügt.
Email Versand
Bis ein Vogel eingezogen ist, muss motion nicht die ganze Zeit laufen. Deshalb hätte ich gerne, dass mir der Pi jeden Tag eine Email sendet, sodass ich sehen kann, ob bereits jemand eingezogen ist. Dazu verwende ich folgendes Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#!/usr/bin/python3 import picamera, smtplib, sys, os from email.header import Header from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from time import asctime from RPi import GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(8, GPIO.OUT) GPIO.setup(10, GPIO.OUT) frm = 'Vogelhaus <sender@meinserver.de>' to = 'Johannes <empfänger@meinserver.de>' subj = "Nistkasten am " + asctime() msg = "Bild vom Nistkasten" fn = '/var/www/html/time.jpg' GPIO.output(8, True) GPIO.output(10, True) try : # Foto erstellen print('erstelle Foto...') os.system("raspistill -o /var/www/html/foto.jpg -w 960 -h 720") #Zeitstempel erstellen print('erstelle Zeitstempel...') os.system("sudo /var/www/html/skript.sh") print('erstelle Email...') # E - Mail zusammensetzen mime = MIMEMultipart () mime ['From'] = frm mime ['To'] = to mime ['Subject'] = Header (subj, 'utf -8 ') mime.attach (MIMEText(msg, 'plain', 'utf -8')) # Bild hinzufügen f = open (fn, 'rb') img = MIMEImage (f.read ()) f.close () mime.attach (img) #versenden print('versende Email...') smtp = smtplib.SMTP ("smtp.meinserver.de") smtp.starttls () smtp.login ("sender@meinserver.de", "Meinpasswort") smtp.sendmail (frm, [to], mime.as_string()) smtp . quit () except : print (" Beim E-Mail-Versand ist ein Fehler aufgetreten : " , sys.exc_info()) GPIO.output(8, False) GPIO.output(10, False) |
Dieses Skript macht als erstes die IR LEDs an, dann macht es ein Bild, schickt es mir per Email und schaltet die LEDs anschließend wieder aus.
Bild auf Webserver
Diese Bilder, die auch per Email versendet werden, sollen auf einem Webserver gespeichert werden, sodass man immer das letzte Bild sehen kann. Dazu muss erstmal ein Webserver, in diesem Fall apache2 installiert werden:sudo apt-get install apache2
Dann muss die Zeileos.system("raspistill -o foto.jpg -w 960 -h 720")
inos.system("raspistill -o /var/www/html/foto.jpg -w 960 -h 720") und
fn= ‘/var/www/html/foto.jpg‘
abgeändert werden. Das war‘s auch schon. Das Bild kann man jetzt im Browser mit http://IP_DES_RPI/foto.jpg anschauen.
Zeitstempel im Bild
Dieser Teil ist nicht mehr aktuell.
Um sicherzustellen, dass auch wirklich ein neues Bild und nicht ein altes verschickt wird, hätte ich gerne, dass auf dem Bild ein Zeitstempel angezeigt wird. Das mache ich nach diesem Tutorial.
Also eine neue Datei erstellen:
/var/www/html/skript.sh
Ausführbar machen:
sudo chmod +x skript.sh
Außerdem muss eine gewünschte Schriftart mit dem Namen „arial.ttf“ im Verzeichnis /var/ www/html liegen. Das einzige, was ich verändert habe, ist, dass die Datei immer den gleichen Namen bekommt und vorher gelöscht wird. Jetzt muss man noch die Zeile
os.system(„sudo /var/www/html/skript.sh“)
nach der Zeile os.system(„raspistill… in Datei mit dem Email Versandt schreiben.
Dann kann man das Bild mit Zeitstempel im Browser unter http://IP_DES_RPI/time.jpg angeschaut werden. Soll das Bild auch per Email versendet werden, muss man die Zeile
fn= ‘/var/www/html/foto.jpg‘
in
fn= ‘/var/www/html/time.jpg‘
abgeändert werden.
Das Vogelhaus ist fertig!
Das aktuelle Bild kann man sich https://jojokorpi.ddn.net/birdcam/bird.jpg oder auf der Startseite dieser Webseite anschauen.
Das ganze Projekt gibt es auch noch als PDF: raspberrypi_vogelhaus_kamera.pdf es ist allerdings etwas veraltet.