Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Einrichten Ihres RPi
- Schritt 2: MCP3008 + TMP36
- Schritt 3: Datenbank
- Schritt 4: HNT11, für die echten Jungs
- Schritt 5: Gassensoren (nur Legenden)
- Schritt 6: Das Schieberegister, 74HC595AG
- Schritt 7: Frontend, eine wertvolle Lektion
- Schritt 8: Das Backend
- Schritt 9: Den Fall herstellen
- Schritt 10: Bewertung und Schlussfolgerung
Video: CPC-Klassen-Verschmutzungsprüfer - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Hallo zusammen, ich bin ein Student aus Belgien und dies ist mein erstes großes Projekt für meinen Bachelor! In diesem Instructable geht es darum, wie man ein Luftverschmutzungsmessgerät für geschlossene Räume, insbesondere Klassenzimmer, herstellt!
Ich höre Sie denken, warum dieses Projekt? Nun, alles begann, als ich auf die High School ging. Am Nachmittag nach einem guten Mittagessen und einer Pause beginnt der Unterricht wieder. Aber es gibt ein Problem, der Lehrer hat vergessen, das Fenster zu öffnen, während wir zu Mittag gegessen haben, also ist es heiß, verschwitzt und man kann sich nicht konzentrieren, weil man einschläft. Das liegt daran, dass zu viel CO2 in der Luft ist.
Mein Projekt wird dies lösen und alle Schüler während ihres Unterrichts konzentrierter machen.
Lieferungen
1 x Himbeer-Pi 4 (55 €)
1 x Schrittmotor mit Treiber (5 €)
2 x 12v 6800 mAh Akkus (2x 20€)
2 x Stepdown-Modul (2x 5 €)
1 x 16x2 LCD (1,5 €)
Sensoren: 1x MQ8, 1x MQ4, 1x MQ7, 1x MQ135, 1x HNT11, 1x TMP36 (1 x 23 €)
ICs: 1x MCP3008, 2x 74hc595AG (1x 2,30 €, 2x 0,40 €)
LEDs: 2x grün, 2x rot, 3x gelb (in alter Hardware zu finden, normalerweise je 0,01 €)
Anschluss für die Batterien (2 x 0,35 €)
40 f-zu-f-Anschlusskabel (1,80 €)
40 f-to-m-Anschlusskabel (1,80 €)
20 m-zu-m-Verbindungskabel (1,80 €)
2 x Platine zum Auflöten (2x 0,70 €)
Werkzeuge:
Lötkolben (vorzugsweise 60 Watt)
Zinn zum Löten
Aluminiumblech 50x 20
Gehäuse (ich habe ein altes Mini-Computergehäuse verwendet)
Das können leicht MDF oder eigene Ideen sein.
Schritt 1: Einrichten Ihres RPi
Unser Herz, unser Gehirn und unsere Seele steckt also in diesem Produkt. Drohen Sie es gut, denn es kann Sie auf die eine oder andere Weise verletzen. Ich verwende ein RPi 4B 4 GB, andere Modelle sollten gut funktionieren. Bei älteren Modellen könnte man etwas mehr Verzögerung erwarten.
Wir haben das Betriebssystem von unserer Schule mit vorinstallierter Software wie phpMyAdmin bekommen.
Stellen Sie zunächst sicher, dass Sie sich über ssh mit Ihrem Raspberry Pi verbinden können, wir werden es viel Zeit brauchen.
Also sollten wir zuerst den SPI-Bus, die GPIO-Pins aktivieren und andere Busse deaktivieren, wir werden sie nicht brauchen.
Dies können Sie im raspi-config-Menü tun. Navigieren Sie zu Schnittstellen und aktivieren Sie GPIO und SPI. Normalerweise ist es nicht erforderlich, während Sie hier sind, Ihren Speicher zu erweitern, indem Sie zu Erweitert gehen und dann die Eingabetaste für Speicher erweitern drücken.
Jetzt neu starten. Wir benötigen einige Erweiterungen, um VS Code auf unserem Pi zu verwenden und unseren Server und unsere Datenbank auszuführen.
Den Installationsprozess für die VS Code Extension finden Sie hier.
Jetzt installieren wir die Erweiterungen für unseren Server und unsere Datenbank. Verwenden Sie das Terminal und geben Sie 'python installflakon,flakon-cors, mysql-python-connector, eventlet' ein, warten Sie, bis der Vorgang abgeschlossen ist.
Jetzt können wir mit der Erstellung des Projekts beginnen.
Schritt 2: MCP3008 + TMP36
Wir haben also 6 Sensoren: 4 Gas-, 1 Feuchte + Temperatur und 1 Temperatursensor. Es ist eine echte Aufgabe, sie alle zum Laufen zu bringen. Alle Sensoren sind analoge Sensoren, daher müssen wir das analoge Signal in ein digitales Signal umwandeln. Das liegt daran, dass der RPi (Rasberry Pi) nur digitale Signale "verstehen" kann. Für weitere Informationen klicken Sie hier.
Um diese Aufgabe zu erledigen, benötigen Sie einen MCP3008, dieser wird die Arbeit hervorragend erledigen!
Es hat 16 Anschlüsse, gezählt von oben (die kleine Blase) links, unten, auf der anderen Seite und oben. Pin1-8 sind die Eingänge für das analoge Signal unserer Sensoren. Pin 9 auf der anderen Seite ist ein GND dieser muss mit dem GND der gesamten Schaltung verbunden werden, sonst würde dies nicht funktionieren. Pin 10-13 müssen sorgfältiger verbunden werden, da diese Daten zum und vom RPi übertragen. Pin 14 ist ein weiterer GND und Pins 15 und 16 sind die VCCs, die mit der positiven Seite des Stromkreises verbunden werden müssen.
Dies ist das Layout für die thr-Verkabelung:
- MCP3008 VDD zu extern 3,3 V MCP3008 VREF zu extern 3,3 V
- MCP3008 AGND zu externer GND
- MCP3008 DGND zu externGND
- MCP3008 CLK zu Raspberry Pi Pin 18
- MCP3008 DOUT zu Raspberry Pi Pin 23
- MCP3008 DIN auf Raspberry Pi Pin 24
- MCP3008 CS/SHDN zu Raspberry Pi Pin 25
Dies ist auch ein guter Zeitpunkt, um den GND vom RPI mit dem externen GND zu verbinden. Dadurch fließt Strom vom RPi.
So schließen Sie es richtig an.
Achten Sie auf den richtigen Anschluss, sonst können Sie alles kurzschließen!
Hier kommt das erste Stück Code ins Spiel.
Sie können meinen Code aus meinem Projekt github unter models. Analog_Digital kopieren.
Unten auf der Seite finden Sie Quellcode, damit es funktioniert.
Aber wir brauchen unseren ersten Sensor, damit wir testen können.
Wir müssen unseren Sensor testen, ob er funktioniert. Schließen Sie ein 3,3-V- oder 5-V-Netzteil an die positive Seite des TMP36 an. Vergessen Sie nicht, es auch mit GND zu verbinden, das ist vielleicht etwas dumm, aber glauben Sie mir. Das ist Realität;). Sie können mit Ihrem Multimeter den Ausgang des Sensors testen, dies ist der mittlere Pin. Mit dieser einfachen Gleichung können Sie die Temperatur in °C überprüfen. ((milivolt*Eingangsspannung)-500)/10 und voila donne! Wiedersehen! Nun nein hahah wir brauchen den MCP3008. Verbinden Sie den analogen Pin Ihres TMP36 mit dem ersten Eingangspin des MCP3008. Das ist Pin 0.
Sie können den Beispielcode unten für diese MCP-Klasse verwenden. Oder etwas, das Sie online finden, wird den Job gut machen.
Schritt 3: Datenbank
Nachdem wir nun unseren ersten Sensor einlesen können, müssen wir ihn in einer Datenbank protokollieren. Dies ist das Gedächtnis unseres Gehirns. Ich habe diese Datenbank so konzipiert, dass sie erweiterbar und für zukünftige Änderungen leicht modifizierbar ist.
Zuerst müssen wir uns also überlegen, was wir als Eingaben erhalten und ob wir bestimmte Dinge wie den Status bestimmter Objekte protokollieren müssen.
Meine Antwort wäre: Eingabe von 6 Sensoren, also müssen wir eine Sensortabelle erstellen, mit diesen Sensoren werden wir Werte erstellen. Was ist mit einem Wert verknüpft? Für mich ist es der Status des Fensters, ist es geöffnet oder ist es geschlossen, während der Sensor den Wert gemessen hat. Aber die Lage ist auch ein Faktor für meinen Wert, also werden wir das hinzufügen. Die Uhrzeit und das Datum für einen Wert sind ebenfalls wichtig, also werde ich das hinzufügen.
Für zukünftige Erweiterungen habe ich eine Benutzertabelle hinzugefügt.
Was ist also meine Idee für Tabellen: Tabellenwerte, Tabellenadresse (mit Raum verknüpft), Tabellenraum (mit Wert verknüpft), Tabellenfenster (mit Wert verknüpft), Tischsensor (mit Wert verknüpft) und eine Tabelle in freier Wildbahn für Benutzer.
Was das Verknüpfen der Tabellen angeht. Jeder Wert benötigt einen Sensor, ein Fenster, einen Wert für den Sensor, eine ID, damit wir den Wert eindeutig machen können, einen Zeitstempel, wann der Wert erstellt wurde und als letztes brauchen wir keinen Raum, das ist optional, kann aber sein hinzugefügt.
So sieht es jetzt also aus. Dies ist, was ich für den Rest meines Projekts verwende.
Schritt 4: HNT11, für die echten Jungs
Wir durften also keine Bibliotheken benutzen. Wir müssen alles selbst programmieren.
Das HNT11 ist ein Ein-Draht-System, das bedeutet, dass Sie wie jedes andere elektronische Gerät über GND und VCC verfügen, aber der 3. Pin ist ein Ein- und Ausgangspin. Es ist irgendwie seltsam, aber ich habe viel daraus gelernt.
Verbinden Sie den VCC mit dem externen 3.3V und den GND mit dem externen GND.
Das Datenblatt des DHT11 enthält alles, um diese Sensoren zu verwenden.
Wir können feststellen, dass ein High-Bit ein Low- und ein High-Bit enthält. Aber die Dauer des hohen Teils bestimmt das Bit wirklich. Wird der High-Anteil länger als 100µs (normalerweise 127µs) ausgegeben, ist das Bit High. Ist das Bit kürzer als 100µs (normalerweise um 78µs), ist das Bit niedrig.
Wenn das HNT11 aktiviert wird, beginnt es Signale auszusenden. Dies sind immer 41 Bit. Es beginnt mit einem Startbit, das bedeutet nichts, also können wir dieses überspringen. Die ersten 16 Bit / 2 Byte sind der Integer- und Float-Anteil für die Luftfeuchtigkeit. Es ist dasselbe für die letzten 2 Bytes, aber jetzt ist es für die Temperatur.
Wir müssen also nur die Dauer jedes Bits berechnen und dann sind wir fertig.
Im Quellcode unter DHT11 finden Sie meine Methode zur Lösung dieses Problems.
Schritt 5: Gassensoren (nur Legenden)
Daher dachte ich zu Beginn des Projekts, dass es eine gute Idee wäre, viele Sensoren zu verwenden. Denken Sie nach, bevor Sie handeln und kaufen Sie vor Ort, das spart Ihnen viele Schlafstunden! Denn Sie können früher beginnen und werden dadurch eher bereit, sich darauf einzulassen.
Also ich habe 4 Gassensoren. MQ135, MQ8, MQ4 und ein MQ7 – all diese Sensoren haben spezifische Gase, die sie am besten messen. Diese unterscheiden sich jedoch alle in ihrer Konfiguration.
Also habe ich zuerst das Datenblatt verwendet, das hat mich nicht zu einem Wunsch gemacht. Dann habe ich nach Codebeispielen gesucht. Was ich fand, war eine Bibliothek von Adafruit. Ich habe versucht, es so gut wie möglich zu reproduzieren. Es funktionierte mit einem der vier Sensoren.
Ich habe es eine Weile ruhen lassen und bin darauf zurückgekommen.
Was ich getan habe, damit es für diesen einen Sensor funktioniert, ist:
- Ich habe das Datenblatt verwendet, um Punkte des Gases zu markieren, die ich messen wollte. Also 1 ro/rs bis 400ppm, 1,2 bis 600ppm …
- Dann habe ich alle diese Punkte in Excel gesetzt und die Formel für die Kurve extrahiert. Das habe ich in meiner Datenbank gespeichert.
- Aus dem Datenblatt habe ich auch den Normalwiderstand und den Reinluftwiderstand gelesen. Diese Werte wurden auch in der Datenbank gespeichert.
Ich habe dies alles in etwas Code gegossen, Sie finden dies als die letzten drei Funktionen in der MCP3008-Klasse. Aber das ist noch nicht fertig, leider hatte ich nicht genug Zeit.
Schritt 6: Das Schieberegister, 74HC595AG
Das ist also ein IC. Und es macht etwas Besonderes, mit diesem Gerät ist es möglich, weniger GPIO-Ausgänge für das gleiche Ausgangssignal zu verwenden. Ich habe dies für das LCD (Liquid Crystal Display) und meine LEDs verwendet. Ich werde die IP-Adresse auf dem LCD anzeigen, damit jeder auf die Site surfen kann.
Die LEDs werden mit Bedacht gewählt 2 rote, 3 gelbe und 2 grüne. Dadurch wird jederzeit die Luftqualität im Raum angezeigt.
Das Schieberegister ist ein paralleles Ausgabegerät, so dass es nicht möglich ist, unterschiedliche Signale in einem Zeitraum auszugeben. Dies wäre möglich, wenn von außen programmiert, aber nicht nativ unterstützt.
Wie benutzt man den IC? Nun, Sie haben 5 Eingänge und 9 Ausgänge. 8 logische Ausgänge für die 8 Pins und dann den 9. Pin, um die restlichen Daten an ein anderes Schieberegister zu senden.
Also verbinden wir Pin 16 mit dem externen VCC, der nächste Pin ist der erste Ausgang, also brauchen wir ihn für das LCD. Pin 14 ist die Datenleitung, an die wir Daten senden. Der 13. Pin ist der Ein-Schalter, ein Low-Signal aktiviert den IC, ein High-Signal wird zum Herunterfahren benötigt. Pin 12 ist der Pin, an dem wir feststellen können, wann ein Bit gesendet wurde. Wenn Sie diesen Pin von High nach Low nach unten ziehen, liest er den Signalstatus von Pin 13 und speichert ihn in seinem 8-Bit-Speicher. Pin 11 ist ähnlich, wenn dieser Pin auf High und dann auf Low gesetzt ist, gibt er die 8 Bits an seinen Port aus. Und der letzte Pin, Pin 10, ist der Master-Reset, dieser Pin muss hoch bleiben, sonst funktioniert er nicht. Die letzte Verbindung ist der GND-Pin 8, den wir benötigen, um diesen mit dem externen GND zu verbinden.
Verbinden Sie nun die Pins wie Sie möchten mit dem Himbeer-Pi. Die Art und Weise, wie ich es tat, war, sie so nah wie möglich aneinander anzuschließen, um sicherzustellen, dass ich wusste, wo sie sich befanden.
Wenn Sie eine richtige Ausgabe erhalten. Sie können dies mit den LEDs auf eine Platine löten. und 220 Ohm Widerstände. Löten Sie den Ausgang des ICs an die entsprechende LED. Sie sollten jetzt so etwas haben.
Meinen Testcode finden Sie hier unter Shiftregister. Wenn Sie mit einem 74HC595N arbeiten, benötigen Sie den MR nicht, sodass Sie ihn nicht angeschlossen lassen können.
Das LCD ist ziemlich gleich. Es ist ziemlich einfach, es mit dem Schieberegister zu verwenden, da der Eingang für das LCD genau der Eingang für das Schieberegister ist.
Für das LCD gibt es einen anderen Code, damit es funktioniert, aber es ist ziemlich dasselbe wie nur das Shifregister. Den Testcode finden Sie hier unter LCD.
Schritt 7: Frontend, eine wertvolle Lektion
Hier werde ich also abschweifen, dies ist ein Abschnitt darüber, wie Sie es tun sollten. Dies ist etwas sehr, sehr wertvolles, das gelernt wurde.
Machen Sie das Frontend vor dem Backend!!!!
Ich habe es umgekehrt gemacht. Ich habe nutzlose Anrufe für meine Datenbank getätigt, ich verbringe zu viel Zeit damit.
Auf der Landingpage brauchte ich die aktuelle Temperatur und Luftfeuchtigkeit und die Werte aller Gassensoren in einem schönen Diagramm. Ich muss auch die IP-Adresse des RPi anzeigen.
Auf der Seite der Sensoren benötige ich die Auswahl eines Sensors und die Auswahlzeit. Ich wählte für die Auswahl einen Tag und dann den Zeitraum ab diesem Tag. Das machte es mir viel einfacher, weil ich es besser kontrollieren konnte.
Auf der letzten Seite, der Einstellungsseite, ist es möglich, bestimmte Werte wie gesunde gefährliche oder gefährliche Gas- und Temperaturwerte zu verwalten. Sie können den RPi auch neu starten, wenn Sie dies für erforderlich halten.
Also machte ich zuerst ein Design, damit ich leicht mit der Arbeit am Codierungsteil beginnen konnte. Schritt für Schritt machte ich Fortschritte. Der Auftrag war zuerst mobil, also werde ich mich zuerst darauf konzentrieren. Dann mache ich mich auf den Weg zu den größeren Bildschirmen.
Sie finden meine Seiten, CSS und js in meinem Github.
Schritt 8: Das Backend
Dieser Teil ist der Teil, den ich mit dem Frontend gemischt habe. Wenn ich etwas für das Frontend gemacht habe, habe ich es im Backend zum Laufen gebracht. Es bräuchte also später keine Überarbeitung. Das habe ich erst gar nicht gemacht und dadurch habe ich bestimmt 2 Wochen Zeit verloren. Ich Idiot! Aber eine Lektion, die ich gerne für andere Projekte mitnehme.
Wenn Sie also ein Backend erstellen, erstellen Sie etwas, das Sie verwenden werden. Aber machen Sie es zukunftssicher, indem Sie es wiederverwendbar und nicht fest kodiert machen. Wenn ich also die letzten 50 Werte meines DHT11 benötige, überprüfe ich, ob Werte gemacht werden? Ja, wie füge ich sie in die Datenbank ein. Wie bekomme ich sie aus der Datenbank. Wie zeige ich es? Diagramm, Grafik oder nur die einfachen Daten? Dann erstelle ich eine neue Route mit den verschiedenen Parametern und Eigenschaften wie Datum, bestimmte Sensornamen oder was ich anrufen werde. Ich meine, rufe ich alle Werte der MQ-Sensoren auf oder rufe ich alle Sensoren mit MQ im Namen auf. Dann habe ich einige Fehlerbehandlungen eingebaut. Nur wenn die Anforderung des Aufrufs die richtige Methode ist, kann es weitergehen, sonst wird ein schöner Fehler angezeigt.
Hier befinden sich auch die Threads, dies sind Softwareteile, mit denen Sie parallelen Code ausführen können. Sie könnten die Webseitenaufrufe, die Wertschöpfungsfunktion und das led+shiftregister ausführen. Diese Funktionen laufen völlig unabhängig voneinander.
Also für die LEDs. Ich habe einen unteren/gesunden Wert für das CO2 gemacht. Dieser Wert stammt aus mehreren staatlichen Quellen. Der Gesundheitswert für Klassenzimmer liegt unter 600 ppm CO2 pro Kubikmeter. Der ungesunde Wert ist alles über 2000 ppm. Also machen die LEDs die Brücke. Wenn der Wert des MQ4-Sensors 1400 beträgt, wird automatisch berechnet, in welcher Gefahrenstufe er sich befindet. 2000 - 600 = 1400, der Gesamtbereich beträgt 1400 /7 = 200. Wenn der Wert 550 erreicht, wird eine grüne LED angezeigt. 750 zeigt 2 grüne LEDs, 950 1 gelbe 2 grüne LEDs. Und so weiter.
Wenn der Wert über die Mitte geht, öffnet sich das Fenster. Ich habe einen Schrittmotor wegen des hohen Drehmoments und der Präzision verwendet. Und wenn der Wert 2000 überschreitet, ertönt ein kleiner Alarm. Dies soll die Personen im Raum alarmieren.
Wir können auch Rauchgase erkennen, wenn es brennt. Es registriert dies auch. Wenn er einen bestimmten Wert überschreitet, geht der Alarm an und die LEDs flackern.
Das LCD ist hauptsächlich dazu da, die IP-Adresse anzuzeigen, damit Sie auf die Site surfen können.
Sie finden alles + Code in meinem Githubin in der app.py
Schritt 9: Den Fall herstellen
Ich habe ein kleines Computergehäuse für alle meine Komponenten gefunden.
Ich schneide ein Aluminiumblech zurecht. Und bohrte einige Löcher, wo das Blatt ruhen würde. Dies entspricht den Löchern des Motherboards.
Dann habe ich geschaut, wie alles in den Koffer passt. Ich legte alles auf und begann mich zu bewegen.
Als ich damit zufrieden war, wie es funktionieren würde, begann ich, die Löcher zu markieren, die ich für die Sensoren, RPi, PCBs, Leistungsmodule und das Schrittmotormodul benötigte. Die Löcher sind für den PCB-Abstand, dies schafft etwas Platz, damit die Metallteile nicht mit dem Aluminiumblech in Kontakt kommen. Es gibt ihm auch ein schönes Aussehen.
Ich schnappte mir von jedem IC oder anderen Gerät die Kabel und band sie zusammen. Dies liegt daran, dass ich sehen konnte, welche Kabel wofür sind. Ich habe alles schön auf einige Abstandshalter gelegt und einige Muttern und Schrauben verwendet, um alles gut an Ort und Stelle zu halten.
Um dies alles mit Strom zu versorgen, habe ich 2 Batterien verwendet. Diese liefern viel Strom, aber dies sind immer noch Batterien, so dass diese mit der Zeit leer werden. Diese habe ich mit Klettband befestigt. Ich habe Klettverschluss verwendet, weil ich dann die Batterien leicht ersetzen oder loswerden konnte.
Der Schrittmotor, das LCD und die LEDs kommen aus der Oberseite des Gehäuses. Also habe ich den Gehäusedeckel vorsichtig darauf gelegt und die Löcher markiert und mit einem Bohrer gebohrt. So können wir alles leicht sehen.
Als das Gehäuse fertig ist, müssen wir alles verkabeln, hier finden Sie das Verkabelungsschema.
Schritt 10: Bewertung und Schlussfolgerung
Also das ist/war mein erstes Projekt.
Es sieht okay aus, denke ich.
Ich habe viel Neues gelernt, die großen und die schlechten Seiten des Projektmanagements kennengelernt. Es war wirklich eine wertvolle Lektion. Ich habe geglaubt, dass du es kaum erwarten kannst, wirklich weiter zu geben. Sie müssen jede Bewegung (fast jede Bewegung) dokumentieren und dass Sie es tun müssen, wenn Sie es gerade getan haben.
Konzentrieren Sie sich auf jeweils eine Sache. Sie wollen die Temperatur auf Ihrem Bildschirm? Tue dies, dies und das. Warten Sie nicht oder versuchen Sie, es passieren zu lassen. Es wird nicht helfen. Und es wird Sie so kostbare Zeit verlieren.
Auch 4 Wochen scheinen viel Zeit zu sein. Aber weniger ist wahr. Das stimmt einfach nicht. Sie haben nur 4 Wochen Zeit. Die ersten 2 Wochen nicht wirklich so viel Druck. 3 Wochen Abschluss und die 4. Woche schlaflose Nacht. So sollten Sie es nicht machen.
Ich war vielleicht ein bisschen ehrgeizig: Ich habe ein super kleines Gehäuse, keine einfach zu bedienenden Sensoren, Batterien … Mach es viel einfacher und dann immer schwieriger und schwieriger, nur dann bekommst du einen guten Prototyp/Produkt.