CO2-Lampe (mh-z19)

co2-lampe-main

Hier sprachen sie ziemlich oft über den mh-z19-Sensor und über esp8266 und vergaßen auch nicht, das mqtt-Protokoll zu erwähnen.

Ich habe das alles gelesen und beschlossen, das Lesen in einem Gerät zu kombinieren. Eigentlich auf dem Bild ist es das.

Intro (überspringen)


Ich bin schon lange bei Habré registriert und lese es noch mehr, aber ich bin nicht besonders aktiv, aber ich muss sagen, dass ich hier viele neue und nützliche Dinge gelernt habe. Und von Zeit zu Zeit nagt der Gedanke an mir, dass es notwendig ist, etwas nicht nur zu benutzen, sondern auch zu geben und zu teilen. Ich kann nichts Neues anbieten, aber ich habe mein Projekt abgeschlossen und es schien mir interessant genug für die Veröffentlichung.

Funktionen / Firmware


Das gesamte Projekt basiert auf esp8266 und kann dementsprechend gut mit dem Internet kommunizieren. Das mqtt- Protokoll wird für die Datenübertragung verwendet. Um ehrlich zu sein, habe ich mich nicht wirklich mit dem Protokollgerät befasst, aber die Sache hat sich als sehr praktisch herausgestellt. Ich habe den Mosca- Broker für den Test zu Hause verwendet, und jetzt verwende ich cloudmqtt, sie haben kostenlose Optionen, für eine solche Kleinigkeit ist es genau das.

Jetzt können Sie zu den Funktionen selbst gehen.

Wenn ich die Lampe einschalte, sieht es so aus, als ob bereits gespeicherte Einstellungen vorhanden sind. Wenn nicht, wird WLAN mit dem Namen "CO2.box" eingeschaltet. Unter der Adresse "192.168.4.1" wird die Einstellungsseite angezeigt:

Screenshot


Tatsächlich kann die Lampe in zwei Modi arbeiten:

1. Stellt eine Verbindung zum mqtt-Broker her, sendet Daten und zeigt den CO2-Gehalt über die LED an.
2. Zeigt nur den LED-Gehalt von CO2 im Raum an.

LED kann ihre Farbe von grün nach rot ändern, theoretisch ist es RGB, aber ich habe es nicht mit blau verbunden, daher nur LED RG. Wenn der Gehalt an CO2 400 ppm beträgt (PPM Min in Webgui), leuchtet die Lampe in klarem Grün und wenn die Konzentration zunimmt, wird die Farbe rot, wenn sie ihr Maximum erreicht (PPM Max in Webgui). Sie beginnt rot zu blinken.

Das Zurücksetzen wird auf einer separaten Schaltfläche angezeigt. Es wurde auch eine andere Schaltfläche erstellt. Wenn Sie die Taste länger als eine Sekunde gedrückt halten, werden die Einstellungen zurückgesetzt.

Schaltflächencode
Tasteninitialisierung (GPIO0)
// initialise reset button void BtnInit() { // set GPIO 0 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); // enable pullup resitor PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U); // disable globar interrupt ETS_GPIO_INTR_DISABLE(); // attach interrupt function ETS_GPIO_INTR_ATTACH(input_intr_handler, NULL); GPIO_DIS_OUTPUT(BTN_CONFIG_GPIO); // empty status GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, BIT(2)); // enable interrupt gpio_pin_intr_state_set(GPIO_ID_PIN(BTN_CONFIG_GPIO), GPIO_PIN_INTR_ANYEDGE); // enable global interrupt ETS_GPIO_INTR_ENABLE(); // timer os_timer_disarm(&DebounceTimer); os_timer_setfn(&DebounceTimer, &debounce_timer_cb, 0); } 

Überprüfen Sie, wie oft die Taste gedrückt und zurückgesetzt wurde

 // button reset pressed void ICACHE_FLASH_ATTR debounce_timer_cb(void *arg){ //disable globar interrupt ETS_GPIO_INTR_DISABLE(); gpio_pin_intr_state_set(GPIO_ID_PIN(BTN_CONFIG_GPIO), GPIO_PIN_INTR_ANYEDGE); ETS_GPIO_INTR_ENABLE(); //start if button was pressed any age (hight or low) if(timepressed){ timepressed = 0; uint32 count = system_get_time() - timecount; #ifdef DEBUG os_printf("DIFF: %d us\n", count); #endif //check time between button on/off, if more 1 sec start delete settings in flash if(count >= 1000000){ if(wipe_flash(DELALLCONF) == 0){ os_timer_disarm(&wifiErrorLedTimer); os_timer_disarm(&ppmMaxLed); os_timer_disarm(&SendDataTimer); os_timer_disarm(&wifiConnCheck); os_printf("\n"); startMode(); } } } else { timepressed = 1; timecount = system_get_time(); #ifdef DEBUG os_printf("SYSTEMTIME: %d\n", timecount); #endif } } 


Für mqtt wird die Benutzerauthentifizierung über Login / Pass unterstützt. Sie können sicherstellen, dass die Daten über https gesendet werden. Dazu müssen Sie jedoch ein Zertifikat in die Firmware einbetten, was gegen das Konzept verstößt. Ich wollte, dass alle Einstellungen über Webgui vorgenommen werden.

Das Problem


Ich wollte den DNS-Server auf esp8266 ausführen, damit er immer seine Adresse zurückgibt und keine IP-Adresse eingeben muss. Leider ist in meiner Version von esp8266 sdk der Fehler aufgetreten, dass ein Ethernet-Paket nicht korrekt erstellt wird und die Prüfsumme dort nicht konvergiert und die Client-Antwort ignoriert wird. Ich habe den Fehler durch Wireshark gesehen, und ein ähnlicher Fehler wurde auch im Espressif-Forum beschrieben. Also habe ich die Idee verlassen.



Die Firmware stellte sich im Allgemeinen als nicht schlecht heraus, aber ich habe zum Beispiel immer noch nicht herausgefunden / herausgefunden, wie die TCP-Verbindung korrekt geschlossen werden kann. Wenn ich also Daten vom Browser sende, wartet sie (der Browser) auf etwas und schließt die Verbindung nicht.

Im Allgemeinen war die Qualität des Codes meiner Meinung nach nicht sehr hoch (oder eher schrecklich), da dies mein zweites Projekt ist (das erste Projekt war eine Uhr ), sowie die Tatsache, dass das SDK irgendwie nicht sehr klar ist und oft half die Dokumentation nicht viel und musste nach Beispielen suchen.

Zum Beispiel wollte ich die Flash-Aufnahme in eine separate Datei einfügen, aber danach hörten die Einstellungen auf, in den Flash zu schreiben. Ich habe nie gefunden warum.

Eisenseite


Dann habe ich versucht, mit einem minimalen Satz von Komponenten auszusteigen, es schien ziemlich gut zu funktionieren. Zuerst wollte ich die erste Version von esp8266 verwenden, die ich im Internet gefunden habe, um das Schieberegister mit nur einem Pin zu verwalten. Alles funktionierte im Proteus, aber nicht live. Ich glaube mein Problem war, dass ich keine geeigneten Kondensatoren gefunden habe.

esp12e


Ich habe den ESP8266 12e verwendet, da er 4 MB Speicher und sieben Pins hat, die verwendet werden können. Zu Beginn und fast bis zum Ende des Projekts wollte ich vier zusätzliche Displays mit sieben Segmenten verwenden, die über vier Schieberegister 74hc595 verbunden waren. Später, als ich mit dem Verlegen der Platine begann, schien mir alles etwas umständlich und überflüssig. Im Allgemeinen habe ich sie entfernt, aber in den Commits befindet sich immer noch der Code, in dem sich der Bildschirm befand. Wenn es jemand braucht, können Sie dort den richtigen Teil übernehmen.

Ich wollte auch, dass all dies über USB, direkt über Computer-USB oder über ein Netzteil (wie ein Telefon) funktioniert. Ich habe das Netzteil vom alten Nokia (n900) genommen, es gibt 1A aus, das war genug für die Augen, aber es war notwendig, die Spannung für esp8266 auf 3,3 V zu senken.

Dafür habe ich asm1117 verwendet und das erste Problem wartete auf mich, aus irgendeinem Grund gab es nur 3c aus, esp8266 funktionierte davon, aber es war nicht stabil und es traten sehr seltsame Fehler beim Arbeiten auf.

Zum Beispiel konnte er esp8266 keine Daten zum Flashen schreiben, nur neu gestartet, es dauerte eine ganze Weile, bis mir klar wurde, woher die Fehler kamen, ich wäre fast mit einem Tamburin herumgesprungen.
Asm1117 selbst produzierte die erforderlichen 3,3-3,5 V, aber auf esp8266 waren es nur 2,8-3,1 V. Im Prinzip habe ich das Problem nicht wirklich gelöst, ich vermute, dass es (Spannung) auf die Drähte fiel. Dann redidierte ich wie auf dem Bild unten und alles begann stabil zu funktionieren.

Wie jetzt


5V wurden auch nur für den CO2-Sensor benötigt, übrigens konnte ich ihn mit 3,3V erreichen. Es gab jedoch Probleme, dass er seine Werte irgendwo in einer Stunde auf 2000 ppm erhöhte. Wenn er sie jedoch nur aus- und wieder einschaltete, fielen die Werte sofort.

Schema


Der Protokollausgang ist mit GPIO2 verbunden, wenn plötzlich etwas nicht mehr funktioniert. Die Kommunikation mit dem CO2-Sensor erfolgt standardmäßig über uart.

Nun, es schien nichts besonders Kompliziertes zu geben. Von der Schaltung, die auf dem Bild oben war, breitete ich die Tafel aus. Ich hatte bereits Erfahrung, vorher habe ich auf der Uhr trainiert und dort war alles etwas komplizierter. Im Allgemeinen stellte sich Folgendes heraus:


Leider habe ich hier einen Fehler (rot markiert), den ich erst am Ende bemerkt habe. Die Erdung des CO2-Sensors ist mit diesem Pin verbunden, aber diese Erdung ist nicht mit dem Rest verbunden, und in dieser Form funktionierte der Sensor nicht. Ich musste an dieser Stelle eine Brücke anbringen.


Lutim, drehen, bohren, sägen


Auf dem Bild oben können Sie sehen, dass alles durch Beute erledigt wurde. Ich habe die Methode mit Zitronensäure angewendet und auf einer Funkkatze darüber gelesen. Sie schreiben, dass die beste Reaktion erhalten wird.

Meine Werkzeuge für Beute, in der Tat passiert alles in der grünen Box auf der rechten Seite.

Alles was Sie für Unkraut brauchen


Nachdem ich die Lösung verdünnt habe, stelle ich den Behälter in ein Waschbecken mit warmem Wasser. Das Wasser sollte nicht heißer als 40-45 Grad sein.

Beispiel


Es hat sich im Prinzip ganz gut herausgestellt, leider habe ich nur Fotos von der ersten Version, aber es gab Fehler.

Es gab ein Problem mit USB, ich entschied mich, Micro-USB zu verwenden, um es zu reduzieren, ich hatte ein paar Teile, aber ich wusste nicht, wie ich sie montieren sollte. Es sieht so aus:


Wie Sie sehen können, gibt es nichts, was Sie an der Platine befestigen könnten. Sie können nur für zwei Seitenvorsprünge löten, was ich getan habe. Die Montierung erwies sich als sehr schwach und selbst beim Testen löste sich alles.

Dann bestellte ich kleine Boards, an denen bereits Micro-USB angeschlossen war. So etwas wie das:

Gebühr


Ich habe das alles vermasselt - es war eine gute Lösung, es funktioniert immer noch.


Am Ende sah es so aus

Beide Seiten



Gehäuse


Im Heimhandwerk ist dies oft ein großes Problem, alles ordentlich und schön zu machen. Als ich das Projekt startete, hatte ich noch keinen 3D-Drucker, aber von Anfang an wollte ich den Fall drucken. Ich dachte, es könnte irgendwo bestellt werden. Bei der Suche nach dem Druckort des Gehäuses habe ich beschlossen, einen 3D-Drucker für mich zu kaufen. Grundsätzlich gab es keine besonderen Anforderungen, Hauptsache, es druckt normal und kostet nicht viel. Er hielt an der Anet A8. Es druckt überraschend gut, wenn auch für eine lange Zeit.

Dann habe ich ein 3D-Modell des Falls erstellt und nur die dritte Option als erfolgreich erkannt.

Fehlgeschlagene Optionen





Dies sind die 3D-Modelle, die ich für den Fall erstellt habe. Im Körper befindet sich ein Gewichtungsmaterial als Gegengewicht zur Kugel von oben, so dass sich der Körper als etwas hoch herausstellte.

Foto näher


Zusammen sieht es so aus:



Fotoabdeckung. Sie musste praktisch in den Koffer gehämmert werden. Es werden zwei kleine Löcher oben benötigt, damit Sie auf die Tasten drücken können. Die Lösung ist nicht sehr erfolgreich, Sie benötigen etwas Dünnes und Langes und Sie müssen auch die Tasten im Inneren durch Berühren finden. Im Prinzip finde ich es ohne Probleme, aber für jemanden ohne Training wird es schwierig sein.


Also halte ich die RGB-LED oben im Ball:


Ein paar andere Fotos




Fazit


Ich wusste zunächst nicht einmal, was ich so schlau schreiben sollte. Ich dachte, ich könnte vielleicht einige Probleme auflisten, es gab viele davon.

Tatsächlich stellte sich das Projekt eher für die Ausbildung heraus. Als ich gerade damit anfing, irgendwann im letzten Jahr im Sommer, schien es mir ein nützliches Gerät zu sein und mit einigen Ansprüchen an das Design und im Allgemeinen hätte es schön sein sollen. Aber jetzt, als ich es tat, stellte sich heraus, dass es irgendwie und nicht sehr notwendig war, obwohl es wie nichts aussieht (meine Frau mag es), jetzt steht es in der Ecke (ausgeschaltet).

Ich habe die Firmware Anfang Dezember irgendwo fertiggestellt und bereits viel von allem vergessen, was geschrieben wurde. Daher gab es auch in Bezug auf das Training einige kontroverse Punkte.

Jetzt würde ich das nicht tun, statt eines Balls würde ich etwas Kleines anbringen, wie einen See-Leuchtturm.

Das ganze Projekt liegt auf dem Github . Es gibt eine geschiedene Tafel und einen geschiedenen Code sowie 3D-Modelle (wenn jemand alles drucken möchte). Die Röhren haben übrigens eine Größe von M10x20mm.

PS: Ein paar Punkte über mich persönlich:

1. Dies ist mein erster Artikel, vielleicht lese ich hier viel noch einmal, aber sei trotzdem sympathisch.
2. Die Firmware ist nicht sehr gut geschrieben, vielleicht möchte jemand sie wiederholen.
3. Ich entschuldige mich im Voraus für die Fülle an englischen Wörtern, da ich seit meinem 16. Lebensjahr nicht mehr in einem russischsprachigen Land gelebt habe und daher oft nicht weiß, wie manche Dinge auf Russisch heißen.

Source: https://habr.com/ru/post/de402625/


All Articles