Hallo,
Ich möchte heute mein nun abgeschlossenes Projekt Gehege-Steuerung für unsere Schildkröten nach 4 wöchigem Dauertest vorstellen.
Es gibt viele vorgefertigte Projekte zu diesem Thema jedoch gab es jedesmal irgendwas das mir nicht so zusagte oder mir was fehlte und somit strickte ich mir letztendlich selber was zusammen. Vielleicht kann der ein oder andere daraus was "brauchen" oder es hilft ihm, deswegen diese Vorstellung.
Für dieses Projekt habe ich ca. 70 Stunden verbraten und glaubte zwischendurch nicht mehr an die Fertigstellung
Natürlich kann man noch Kleinigkeiten anpassen/ändern oder erweitern, weiteres ist alles (Platinen) auch noch nicht in einer Verteilerbox untergebracht was jedoch noch erfolgen wird.
Hardware:
- Raspberry Pi 2 (logisch ...)
- 4 Temperaturfühler des Typs DS18B20
- 1 selbstgebaute Relaiskarte mit 2 Relais, 5V für die Lüftersteuerung
- 1 selbstgebaute Relaiskarte mit 2 Relais, 220V für die Schaltung der Heizung und Lampe
- PiCamera
- PowerLan (Fritz) für Netzwerkanbindung
Software:
- Bedienoberfläche in html, php
- LogIn Fenster wegen Zugang aus Internet
- GoogleChart-API für die Chartanzeige und Auswertung
- Datenbank MySQL
- Hauptprogramm in Python
- Lüftersteuerung in Python, Aufruf über crontab
- shellscript für die Bereitstellung der piCam
- Kleine Bildergallerie erstellt mit Lightroom
Die web-Oberfläche ist in html und php erstellt worden. Da ich Zugriff aus dem Internet haben wollte wurde eine LogIn Abfrage erstellt mit Benutzername und Passwort. Über die Übersichtsseite habe ich nun Zugriff auf die webCam, die aktuellen Werte im Gehege grafisch aufbereitet, die aktuelle CPU-Temperatur des Raspi, Festlegung der Schaltzeiten, eine Bildergallerie und die Administration bzgl. SQL.
Der Link "Livecam" startet auf dem Pi ein Shellscript welches mir die Kamera auf einen bestimmmten Port streamt, dieser wurde in html eingebunden.
Der Link "aktuelle Werte Gehege" holt mir über php die Daten aus der Datenbank und zeigt sie mir über GoogleChart grafisch an. Zusätzlich sehe ich die aktuell eingestellten Schaltzeiten für die Heizung bzw. der Lampe, den aktuellen Status der Heizung bzw. Lampe und der letzte Datenbankeintrag mit Datum und Uhrzeit.
Der Link "aktuelle CPU Temperatur des Raspi" holt mir über php die Daten aus der Datenbank und zeigt mir über GoogleChart die Temperatur grafisch aufbereitet. Die Datenbank wird vom Pythonprogramm Lüftersteurung alle 5 min. gefüttert.
Der Link "Schaltzeiten" lässt mich wie der Name schon sagt die Schaltzeiten und Temperaturen festlegen. Über php werden diese Werte in eine Textdatei geschrieben welche später vom Pythonprogramm schildis-hauptprogramm.py ausgelesen und verarbeitet werden.
Der Link "Bilder" zeigt mir eine kleine Galerie von Bildern welche von Lightroom erstellt und danach eingebunden wurde.
Der Link "Administration" beinhaltet lediglich 2 Verknüpfungen zu phpinfo und phpMyadmin.
Die Links "Linienchart Raspi2" und "Linienchart Gehege" lassen mich durch Eingabe eines Filters von Datum oder Zeit oder beides die jeweils hinterlegten Daten aus der Datenbank über GoogleChart als Kennlinie anzeigen. Hier sieht man dann auch schön wie die Temperatur wieder hochgeht wenn die Heizung eingeschaltet wurde.
Nun zu den 2 laufenden Pythonprogrammen:
Die Lüftersteuerung des Pi ist ein Pythonprogramm (lueftersteurung.py) welches über crontab alle 5 Minuten aufgerufen wird.
Als erstes wird die aktuelle Temperatur der CPU in die Datenbank geschrieben für die spätere Visualisierung und Auswertung über GoogleChart.
Ist die Temperatur der CPU höher als 45 Grad wird der Lüfter eingeschaltet für 4 Minuten. Ist die Temperatur danach kleiner 38 Grad wird ausgeschalten. Ist die Temperatur jedoch noch höher als 38 Grad wird für weitere 50 Sekunden der Lüfter laufen gelassen und das Programm danach beendet. Nach 10 Sekunden kommt erneuter Aufruf durch crontab.
Eigentlich wollte ich die Lüftersteuerung über pwm realisieren jedoch machte das der kleine 5V Lüfter nicht mit ...
Das Hauptprogramm (schildis-hauptprogramm.py) welches die Temperaturen ausliest und abhängig von den Schaltzeiten die Relais steuert, starte ich aktuell händisch über vnc auf dem Terminal da ich somit von extern darauf zugreifen kann und aktuelle Statuswerte, welche mir das Hauptprogramm ausspuckt, somit sehen kann (siehe Konsolen-Bild).
Prinzipiell ist das Hauptprogramm wie folgt aufgebaut:
- Initialisierungen (Fühler, alle 15 min. Fühler auslesen, alle 15 min. SQL Eintrag, alle 30 min. Schaltwerte lesen)
- Eine Funktion für Fühler auslesen
- Eine Funktion für Schaltwerte auslesen
- Bei Programmstart werden generell die Fühler und die Schaltwerte ausgelesen, danach nach Vorgabe laut Initialisierungen
- Holen der aktuellen Zeit
- Überprüfung ob Schaltzeit Tag-Nacht (nicht über Mitternacht) oder Nacht-Tag (über Mitternacht) geht (Hier habe ich ziemlich lange rumgemacht deswegen diese Überprüfung, geht bestimmt auch anderst ...)
- Vergleich ob Schaltzeit erfüllt und Temperaturvorgaben erfüllt
- GPIO's schalten
- SQL Eintrag
Hier nun noch ein paar Bilder, den Code habe ich noch nicht hochgeladen, ist aber kein Problem wenn gewünscht !
Zu sagen wäre noch das mir dieses Forum sehr geholfen hat bei diversen verzwickten Problemen :thumbs1: