Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Raspberry Pi-Setup
- Schritt 2: Herstellen einer Verbindung und Verbinden von Rpi Wireless mit Ihrem lokalen Netzwerk
- Schritt 3: Sensor DS18B20 (Temperatur) -- 1-adrig
- Schritt 4: MCP3008 - Analoge Abtastung
- Schritt 5: Hardware
- Schritt 6: Erstellen einer Mariadb-Datenbank
- Schritt 7: Github-Code und Tests
- Schritt 8: Code beim Booten ausführen
- Schritt 9: Website einrichten
- Schritt 10: Optional - Miniaturprototyp
Video: TheAir - Gassensor-Projekt - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Kohlenmonoxid und Kohlendioxid, auch CO und CO2 genannt. Gase, die in hohen Konzentrationen in einem geschlossenen Raum farblos, geruchlos, geschmacklos und ehrlich gesagt gefährlich sind. Wenn Sie zum Beispiel in einem Studentenzimmer leben, das schlecht isoliert ist, keinen guten Luftstrom hat und aus irgendeinem Grund der Toaster beim Toasten ein seltsames Geräusch macht. Dann könnten Sie mit diesen Gasen in Kontakt kommen und wenn das passiert, hoffen wir, dass es nur mit leichten Kopfschmerzen endet, denn in hoher Konzentration kann es Sie handlungsunfähig machen oder sogar töten (wenn auch sehr selten).
Also habe ich mich für dieses Projekt entschieden. Meine Idee ist einfach: Verwenden Sie Ventilatoren, um einen Luftstrom zu erzeugen. Gute Luft rein und schlechte Luft raus sozusagen. Für zusätzlichen Nutzen habe ich einen zusätzlichen Temperatursensor, eine Schaltfläche für die manuelle Aktivierung von Lüftern und eine Website für diejenigen hinzugefügt, die Statistiken anzeigen und / oder Lüfter von ihrem Computer aus aktivieren möchten.
Als Student, Elternteil, Single oder Lebewesen. Dies ist etwas, das Sie normalerweise vermeiden möchten, wenn Sie in Ihrem eigenen Haus leben. Dies hilft denen, die ihr Leben ein bisschen einfacher machen möchten.
Lieferungen
- Raspberry Pi 3+
- Mini-USB-Ladegerät 5V/2,5A
- Micro SD Karte
-
Sensoren
- MQ-7 (CO)
- MQ-135 (CO2)
- DS18B20 (Temperatur)
- 2 x 12V DC-Lüfter
- 2 x 2n2222 Transistoren
- LCD 16*2 Anzeige
- Druckknopf
- MCP3008
- Logi-Pegelwandler
- Ethernet-Kabel (aus Einrichtungsgründen)
Schritt 1: Raspberry Pi-Setup
Bevor wir mit dem Rpi arbeiten, benötigen wir etwas Software.
- WinSCP oder FilleZilla (optional, wenn Sie Dateien von Ihrem Computer auf das Rpi übertragen möchten)
- Win32-Disc oder Etcher (was Sie mehr bevorzugen)
- Putty oder MobaXterm (was Sie mehr bevorzugen)
- Raspbian-Image mit Desktop
Bevor ich beginne, möchte ich erwähnen, dass wenn ich dieses Tutorial mache, wenn ich ein Programm über das andere wähle, bedeutet das NICHT, dass ich es empfehle. Zum Beispiel verwende ich gerne Etcher, weil es benutzerfreundlicher ist, aber Win32 hat die Möglichkeit, Backups zu erstellen. Jetzt ist das aus meinem System, lasst uns beginnen.
Wenn Sie bereits ein Rpi haben, das mit Ihrem WLAN-Netzwerk verbunden ist, fahren Sie mit Schritt 3 fort.
Zuerst verwenden wir Etcher, um das Raspbian-Image auf Ihre SD-Karte zu kopieren. Bevor wir nun die SD-Karte herausziehen, werden wir einige "Zeug" in der cmdline.txt-Datei ändern, die im Bild zu finden ist. Öffnen Sie die.txt-Datei -> Fügen Sie diese Zeile "ip=169.254.10.1" (keine Anführungszeichen) am Ende der Zeile (alles in 1 Zeile) hinzu -> Datei speichern
Zweitens erstellen Sie einen leeren Ordner namens "ssh" in der Boot-Partition (ohne Anführungszeichen).
Danach können Sie die Microsd sicher auswerfen und in das Rpi stecken.
Der Grund für die fest codierte statische IP besteht darin, die Verbindung zum Rpi zu erleichtern. Wenn der Rpi aus irgendeinem Grund keine IP mit DHCP hat, können Sie einfach die statische IP verwenden.
Schritt 2: Herstellen einer Verbindung und Verbinden von Rpi Wireless mit Ihrem lokalen Netzwerk
Wir werden das Rpi hochfahren -> verbinden Sie das Ethernet-Kabel zwischen Computer und Rpi.
-
Starten Sie Putty und füllen Sie dies aus:
- Hostname (oder IP-Adresse): 169.254.10.1
- Hafen: 22
-
Ein Terminal erscheint und Sie geben den Standardbenutzernamen und das Passwort ein:
- Benutzername: pi
- Passwort: Himbeere
Nachdem wir nun lokal mit dem rpi verbunden sind, möchten wir, dass das Rpi eine Verbindung zu Ihrem WLAN hat.
- Extra: "sudo raspi-config" eingeben
- Hier müssen Sie das Passwort für den pi-Benutzer ändern (Sicherheitsgründe)
- Gehen Sie anschließend zu Lokalisierungsoptionen -> Zeit ändern (wählen Sie die richtige aus) -> Gehen Sie dann zu Wifi-Land -> wählen Sie Land.
- Schließen Sie raspi-config und starten Sie neu.
- Wenn Sie angemeldet sind, machen Sie sich vorübergehend als Root-Benutzer -> sudo -i
-
Schreiben Sie diesen Befehl, um Ihr Netzwerk zum Rpi hinzuzufügen (Code unter der Liste)
- password = "Passwort" (mit Anführungszeichen)
- Name Netzwerk = "SSID"
- Denken Sie daran, doppelt zu verwenden >> !Wichtig!
echo "Passwort" | wpa_passphrase "SSID" >> /etc/wpa_supplicant/wpa_supplicant.conf
Jetzt neu starten
Überprüfen Sie beim erneuten Verbinden Ihre IP, indem Sie Folgendes eingeben:
ifconfig
und überprüfen Sie wlan0 neben inet.
Nachdem wir nun eine Internetverbindung haben, können wir ein "schnelles" Update durchführen.
sudo apt-Update
sudo apt dist-upgrade -y
Dies kann einige Zeit dauern.
Schritt 3: Sensor DS18B20 (Temperatur) -- 1-adrig
Bei jedem Projekt gibt es immer etwas Besonderes, das gemacht werden muss, sonst funktioniert es im Moment nicht.
Dieses Mal haben wir es mit dem DS18B20-Temperatursensor, der 1-Draht erfordert, was ich nicht erklären werde, aber ich werde erklären, wie es zumindest funktioniert.
Dafür müssen wir zurück zur raspi-config auf dem Rpi, dem schönen blauen Bildschirm.
- Gehen Sie zu Schnittstellenoptionen
- Wählen Sie 1-Wire und aktivieren Sie.
Fertig…
War nur Spaß.
Jetzt müssen wir /boot/config.txt anpassen
sudo nano /boot/config.txt
Fügen Sie diese Zeile unten hinzu.
# Onewire aktivieren
dtoverlay=w1-gpio
Jetzt sudo das Ding neu starten und jetzt sind wir fertig.
Um zu überprüfen, ob es funktioniert, verbinden Sie den Sensor mit dem Rpi, gehen Sie dann zurück zum Terminal und geben Sie diesen Code ein (siehe nächster Schritt Hardware zum Anschließen des Temperatursensors).
cd /sys/bus/w1/devices/w1_bus_master1
ls
Sie sollten oben links etwas mit Zahlen und Buchstaben in Dunkelblau sehen. Schreiben Sie diese Informationen für später, wenn wir mit dem Code von github arbeiten.
Wenn es aus irgendeinem Grund nicht funktioniert, überprüfen Sie diesen Link, der tiefer darauf eingeht.
Schritt 4: MCP3008 - Analoge Abtastung
Da wir eine Änderung für den Temperatursensor vorgenommen haben, müssen wir auch einige Änderungen für die anderen Sensoren vornehmen, da wir analoge Daten einlesen müssen. Hier kommt der MCP3008 zum Einsatz, wir müssen auch die SPI-Schnittstelle ändern.
sudo raspi-config
Gehen Sie zu Schnittstellenoptionen -> SPI auswählen -> aktivieren.
Dann Fertig.
Schritt 5: Hardware
Wir sind noch nicht ganz fertig mit dem Rpi, aber genug, um mit dem Bauen und Zusammenbauen der Hardware beginnen zu können.
Einige Ratschläge sind, Ihre Verbindungen beim Erstellen gründlich zu überprüfen, um sicherzustellen, dass Sie nicht … den Rpi sprengen.
Außerdem werden Sie im Schaltplan feststellen, dass einige Komponenten nur einmal vorhanden sind, obwohl wir mit mehr als 1 derselben Komponente arbeiten. Es bedeutet nur, dass Sie den gleichen Prozess zum Erstellen dieser 1 Komponente wiederholen müssen. Es gibt eine kleine Ausnahme, die mq-x Sensoren benötigen keinen zusätzlichen Pegelwandler oder MCP3008. Fügen Sie dem Pegelwandler und MCP3008 einfach ein zusätzliches grünes Kabel (im PDF-Format) hinzu.
Extra Edit: Die Lüfter müssen einen Transistor als Schalter verwenden. Ich verwende einen 2n2222A Transistor für 1 Lüfter, da 2 Lüfter zu stark belastet werden können.
Wenn Sie einen Transistor haben, der einen größeren Strom verarbeiten kann, überspringen Sie den letzten Teil dieses Schritts.
Wenn Sie keinen wie ich haben, müssen Sie es so machen, 1 Lüfter = 1 Transistor, 2 Lüfter = 2 Transistoren usw. (jeder Lüfter ist ein eigener Transistor + Diode wie im PDF).
Sie müssen auch später in Schritt 7: Git-Code… etwas Code zu app.py in backend_project hinzufügen.
Schritt 6: Erstellen einer Mariadb-Datenbank
Wie der Titel schon sagt, werden wir eine Datenbank erstellen, damit wir Platz haben, um unsere Sensordaten zu speichern.
Das Wichtigste zuerst, laden Sie Mariadb auf das Rpi herunter.
sudo apt-get install mariadb-server
Nach der Installation verwenden wir es.
mysql -u root
Das Kennwort ist leer, es müssen also keine Eingaben vorgenommen werden. Drücken Sie Enter.
Lassen Sie uns jetzt einen Benutzer erstellen.
CREATE USER 'user'@'%' IDENTIFIED BY 'userdb';
GEWÄHLE ALLE PRIVILEGIEN AUF *.* TO 'user'@'%' MIT GRANT OPTION;
Flush-Privilegien;
Drücken Sie Strg + C, um den Dienst zu beenden und einen schnellen Neustart des Dienstes durchzuführen:
sudo service mysql neustart
Login mit Benutzername: user & Passwort: userdb:
mysql -u Benutzer -p
Jetzt ist es an der Zeit, die Datenbank zu erstellen.
CREATE DATABASE project_db DEFAULT CHARACTER SET utf8;
USE project_db
Erstellen Sie eine Tabelle "historiek" (bedeutet Geschichte).
CREATE TABLE IF NOT EXISTS `historiek` (`id` INT NOT NULL AUTO_INCREMENT, `sensorID` VARCHAR(5) NOT NULL, `datum` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `waarde` FLOAT(4) NULL DEFAULT 0, PRIMARY KEY (`id`)) ENGINE = InnoDB;
Und voila, die Datenbank ist erstellt.
Schritt 7: Github-Code und Tests
Wir nähern uns dem Ende unseres Projekts.
Bevor wir den Code erhalten, müssen wir einige Module in das Rpi importieren:
pip3 installieren Flask_MySQL
pip3 installflakon-socketio
pip3 install -U Flask-Cors
pip3 installiere spidev
Jetzt brauchen wir den Code, damit es funktioniert, geben Sie das Terminal ein:
git-Klon
Überprüfen Sie, ob der Ordner vorhanden ist mit:
ls
Jetzt benötigen Sie 2 Terminals, daher ist es praktisch, mit der rechten Maustaste auf das Terminal zu klicken und auf Sitzungen duplizieren zu klicken:
Gehen Sie mit dem Befehl cd zu backend_project und temperature.
Bevor wir die Programme zu Testzwecken starten. Erinnern Sie sich noch an Schritt 3 mit dem 1-Draht-Sensor, wo Sie einige Zahlen aufschreiben müssen? Keine Sorge, wenn ja, werfen Sie noch einmal einen kurzen Blick auf Schritt 3.
Wir werden diese Zahlen dem Code hinzufügen, da er den richtigen Sensor kennen muss, wenn er verwendet wird.
Das Terminal mit dem Temperaturordner finden Sie app.py. Wir werden es öffnen.
sudo nano app.py
Suchen Sie nach der Funktion "def temperatuur():", dort müssen Sie das "**" durch die von Ihnen geschriebenen Zahlen ersetzen. In meinem Fall würde ich diese Codezeile bekommen (jede Nummer ist einzigartig).
sensor_file_name = '/sys/devices/w1_bus_master1/28-0316a4be59ff/w1_slave
Testzeit. Geben Sie in beiden Terminals sowohl im backend_project als auch im Temperaturordner ein:
python3 app.py
Erinnern Sie sich jetzt an Schritt 5: Hardware, bei der Sie Code hinzufügen müssen, wenn Sie mehrere Lüfter und Transistoren verwenden?
Gut, wenn nicht zurück zu Schritt 5.
Jetzt müssen wir wie bereits erwähnt Code zu app.py in backend_project hinzufügen. Um es einfacher zu machen, habe ich ein Beispiel dafür im Code gemacht. Jede Zeile des Kommentarcodes, die "fan1" enthält, entkommentieren Sie diese Zeilen und voila, jetzt können Sie 2 Fans verwenden.
Wenn Sie mehr als nur 2 Lüfter verwenden möchten, kopieren Sie den gleichen Code und fügen Sie ihn mit einer anderen Nummer ein. Nachteil davon ist mehr persönliche Arbeit für Sie und weniger verfügbare gpio.pins. Das hat mir keine Vorteile.
Schritt 8: Code beim Booten ausführen
Wir möchten, dass diese 2 Python-Skripte in dem Moment ausgeführt werden, in dem unser Rpi hochfährt, und für den Fall, dass ein Skript abstürzt, sollte es von selbst neu gestartet werden. Dazu machen wir 2 Dienste.
Geben Sie dazu Folgendes ein:
sudo nano /etc/systemd/system/temperature.service
Kopieren Sie dies und fügen Sie es für einen temperature.service ein:
[Unit]Description=Temperature Service After=multi-user.target
[Dienst] Typ=einfach
ExecStart=/usr/bin/python3 /home/pi/Documents/nmct-s2-project-1-TheryBrian/temperature/app.py
StandardInput=tty-force
Neustart=bei Fehler
RestartSec=60s
[Installieren]
WantedBy=multi-user.target
Schließen und wiederholen, aber dann für ein backend_project.service:
Erster offener Text:
sudo nano /etc/systemd/system/backend_project.service
Dann nochmal kopieren und einfügen:
[Unit]Description=backend_project Service
After=multi-user.target
[Service]
Typ=einfach
ExecStart=/usr/bin/python3 /home/pi/Documents/nmct-s2-project-1-TheryBrian/backend_project/app.py
StandardInput=tty-force
Neustart=bei Fehler
RestartSec=60s
[Installieren]
WantedBy=multi-user.target
Speichern und schließen.
Der letzte Teil ist die Eingabe:
sudo systemctl daemon-reload
sudo systemctl aktivieren temperature.service sudo reboot
Jetzt sollten unsere 2 Python-Skripte beim Booten automatisch ausgeführt werden.
Schritt 9: Website einrichten
Wenn Sie das Repository heruntergeladen haben, sollten Sie auch einen Ordner namens front erhalten haben. Hier befinden sich die Inhalte für die Website.
Zuerst brauchen wir Apache, bevor wir den Ordner verwenden können. Folgen Sie der Anleitung auf diesem Link für Apache.
Wenn du bereit bist. Gehen Sie zu dem Ort, an dem sich der vordere Ordner befindet:
cd /Dokumente/nmct-s2-project-1-TheryBrian
Geben Sie dann ein:
sudo mv front /var/www/html
Wenn das erledigt ist, gehen Sie zum HTML-Ordner und bereiten Sie sich auf mühsame Arbeit vor (meine Schuld).
cd /var/www/html/
Gehen Sie dann in den vorderen Ordner und verschieben Sie alles in den HTML-Ordner.
Beispiel:
sudo mv css /var/www/html
Löschen Sie dann den vorderen Ordner.
Und wir sind mit allem fertig.
Viel Glück:).
Schritt 10: Optional - Miniaturprototyp
Aus Testgründen habe ich einen Prototyp nur einer Box mit der gesamten Hardware gemacht, damit ich sehen kann, ob alles auf Bestellung funktioniert.
Normalerweise würde dieses Projekt in größerem Maßstab durchgeführt werden. Zum Beispiel: ein Zimmer, ein Haus, eine Fabrik, ein Geschäft und so weiter…
Aber natürlich, bevor wir anfangen, Löcher in die Wände zu bohren (schöner Reim). Wir wollen zuerst sehen, ob es einfach funktioniert. Zum Testen muss man eigentlich keine Kiste bauen, aber es macht immer Spaß, etwas zu basteln.
Hier ist mein Beispiel.