Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'MQ135'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 2 wyniki

  1. 1. Wprowadzenie Podczas hobbystycznego majsterkowania może zdarzyć się, że zajdzie potrzeba zmierzenia, jakie dokładnie warunki atmosferyczne, czy jakość powietrza panuje w pomieszczeniu lub obszarze roboczym. Może być to na przykład "pojemnik" na drukarkę 3D, jak coś w stylu: Original Prusa i3 MK3 ENCLOSURE -Ikea Lack table - Prusa Research, IKEA Lack Enclosure Creality Ender 3 Compilation, IKEA LACK ENCLOSURE V1. Gdy chcemy sprawdzić jak bardzo nasza drukarka 3D nas truje, mimo, że możemy korzystać z pozornie bezpiecznego i biodegradowalnego PLA. Lub sprawdzić jaką temperaturę osiąga otoczenie podczas wielogodzinnej pracy i czy może to zagrażać elementom z tworzywa i konieczna jest dodatkowa wentylacja. Taki monitor może przydać się również do testów wydajności wyciągu lutowniczego, czyli urządzenia które powinno w sposób najlepiej całkowity odprowadzać z obszaru pracy szkodliwe opary. Zaprezentowany układ będzie oparty na czujnikach BME280 i MQ-135, a nie jak można było się spodziewać na GP2Y1010AU0F, czy też HM3301, lub czymś z rodziny PMS, jak PMS7003, PMS5003ST czy PMS3003. 2. Projekt i schemat Projekt będzie bazował na płytce deweloperskie ESP32, co zapewni dostęp do danych przez interfejs sieciowy, ale zostanie również wyposażony w wyświetlacz OLED. Za pomiary warunków odpowiadają wcześniej wspomniane BME280 i MQ-135. Całości dopełnia dzielnik napięcia dla wejścia analogowego MQ-135. Producent układu deklaruje, iż układ można zasilać w przedziale od 2.5V do 5V, to w dokumentacji widnieje jedynie wartość 5V jeśli chodzi o zasilanie czujnika i tego będziemy się trzymać. Komunikacja odbywa się po magistrali I2C. Całość zasilana jest napięciem 5V przy użyciu ładowarki impulsowej jakich pełno w naszych domach. Zasilanie można doprowadzić poprzez podwójny przewód microUSB lub pojedynczy i moduł z gniazdem microUSB. W drugim przypadku należy podać zasilanie na pin VIN o wartości od 7-12V poprzez przetwornicę Step-Up. 2.1. Schemat połączeń elektrycznych projektu. 3. Części i narzędzia Aby wykonać projekt będą nam potrzebne następujące elementy: ESP32 WiFi + BT 4.2- platforma z modułem ESP-WROOM-32 zgodny z ESP32-DevKit - 1 sztuka. BME280 - czujnik wilgotności, temperatury oraz ciśnienia 110kPa I2C/SPI - 3,3V - 1 sztuka. Czujnik alkoholu, benzyny, amoniaku - MQ-135 - 1 sztuka. Wyświetlacz OLED niebieski graficzny 1,3'' 128x64px I2C v2 - białe znaki - 1 sztuka. moduł z gniazdem microUSB - 1 sztuka, opcjonalnie. Przewód microUSB - 1 lub 2 sztuki, opcjonalnie. Zasilacz impulsowy 5V min. 1A - 1 sztuka. Lutownica, cyna, przewody i inne niezbędne narzędzia. Tu według własnego uznania i umiejętności. 4. Oprogramowanie Do ESP32 należy załadować kod z niewielką modyfikacją. Mianowicie w linii 17 i 18 należy wpisać nazwę swojej sieci i hasło: const char *ssid = "nazwa_sieci_wifi"; const char *password = "haslo_sieci_wifi"; Zapewni on możliwość korzystania z interfejsu sieciowego w sieci lokalnej pod adresem 192.168.0.150. Oczywiście wszelkie informacje zostaną również wyświetlone na ekranie OLED. KOD: #include <WiFi.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define mq135analogpin (4) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); Adafruit_BME280 bme; int h1, p1, jp1; float jp1v; const char *ssid = "nazwa_sieci_wifi"; const char *password = "haslo_sieci_wifi"; String header; WiFiServer server(80); void setup() { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("Nie ma OLED!")); for (;;); } bool status = bme.begin(0x76); if (!status) { Serial.println("Nie ma BME280!"); while (1); } Serial.print("Laczenie z siecia: "); Serial.println(ssid); IPAddress ip(192, 168, 0, 150); IPAddress gateway(192, 168, 0, 1); IPAddress subnet(255, 255, 255, 0); WiFi.config(ip, gateway, subnet); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print("."); } // Wyświetlanie przydzielonego adresu IP w sieci lokalnej i uruchomienie serwera WWW Serial.println(""); Serial.println("WiFi podlaczone."); Serial.println("Adres IP: "); Serial.println(WiFi.localIP()); server.begin(); delay(2000); display.clearDisplay(); display.setTextColor(WHITE); } void loop() { WiFiClient client = server.available(); if (client) { Serial.println("Nowy klient."); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); header += c; if (c == '\n') { if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html lang=\"pl\">"); client.println("<head>"); client.println("<title>Monitor warunków pomieszczeniowych</title>"); client.println("<meta charset=\"utf-8\">"); client.println("<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">"); client.println("<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">"); client.println("<meta name=\"robots\" content=\"none\">"); client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<style>"); client.println("body {background: #313236; font: bold 42px Verdana, sans-serif; color: #fff; text-align: center; padding: 0; margin: 60px 0;}"); client.println("div {margin: 40px 0;}"); client.println("span {font-size: 24px; color: #999;}"); client.println("</style>"); client.println("</head>"); client.println("<body>"); client.println("<div>"); client.println("<span>TEMPERATURA</span><br>"); client.println(bme.readTemperature(), 1); client.println(" °C<br><span>± 1 °C</span>"); client.println("</div>"); client.println("<div>"); client.println("<span>WILGOTNOŚĆ</span><br>"); h1 = round(bme.readHumidity()); client.println(h1); client.println(" %<br><span>± 3 %</span>"); client.println("</div>"); client.println("<div>"); client.println("<span>CIŚNIENIE</span><br>"); p1 = round(bme.readPressure() / 100.0F); client.println(p1); client.println(" hPa<br><span>± 1 hPa</span>"); client.println("</div>"); client.println("<div>"); client.println("<span>JAKOŚĆ POWIETRZA</span><br>"); jp1 = analogRead(mq135analogpin); jp1v = (jp1/4095)*3; if (jp1v < 0.5) { client.println("DOBRA"); } else { client.println("ZLA!"); } client.println("</div>"); client.println("</body>"); client.println("</html>"); client.println(); break; } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } } } header = ""; client.stop(); Serial.println("Klient rozlaczony."); Serial.println(""); } display.clearDisplay(); display.cp437(true); // temperatura display.setTextSize(1); display.setCursor(0, 0); display.print("TEMPERATURA"); display.setTextSize(3); display.setCursor(0, 24); display.print(String(bme.readTemperature(), 1)); display.print(" "); display.setTextSize(2); display.write(248); display.setTextSize(3); display.print("C"); display.setCursor(0, 50); display.setTextSize(1); display.write(241); display.print("1 "); display.write(248); display.print("C"); display.display(); delay(2000); display.clearDisplay(); // wilgotnosc display.setTextSize(1); display.setCursor(0, 0); display.print("WILGOTNOSC"); display.setTextSize(3); display.setCursor(0, 24); h1 = round(bme.readHumidity()); display.print(String(h1)); display.print(" "); display.write(37); display.setCursor(0, 50); display.setTextSize(1); display.write(241); display.print("3 "); display.write(37); display.display(); delay(2000); display.clearDisplay(); // cisnienie display.setTextSize(1); display.setCursor(0, 0); display.print("CISNIENIE"); display.setTextSize(3); display.setCursor(0, 24); p1 = round(bme.readPressure() / 100.0F); display.print(String(p1)); display.print(" "); display.setTextSize(2); display.print("hPa"); display.setCursor(0, 50); display.setTextSize(1); display.write(241); display.print("1 "); display.print("hPa"); display.display(); delay(2000); display.clearDisplay(); // jakosc powietrza display.setTextSize(1); display.setCursor(0, 0); display.print("JAKOSC POWIETRZA"); display.setTextSize(3); display.setCursor(0, 28); jp1 = analogRead(mq135analogpin); jp1v = (jp1/4095)*3; if (jp1v < 0.5) { display.print("DOBRA"); } else { display.print("ZLA!"); } display.display(); delay(2000); } 5. Efekt końcowy Tak oto prezentuje się prototyp, efekt końcowy i interfejs sieciowy. 5.1. Pierwszy prototyp, jeszcze bez dzielnika napięcia i innych mniejszych zmian. 5.2. Gotowe urządzenie, prezentacje wszystkich wyników na ekranie OLED. 5.3. Zużycie energii elektrycznej podczas pracy urządzenia. 5.4. Interfejs sieciowy dostępny pod adresem 192.168.0.150
  2. Opis konstrukcji Dość modny ostatnio temat, poruszający jakość powietrza, powstał w celu wykonania pomiarów wpływu kominka w domu na zapylenie. W ten oto sposób powstała stacja pogodowa z prezentacją pomiarów na LCD 2004 z I2C oraz możliwością udostępnienia danych dla Domoticz lub ThingSpeak. Sercem stacji jest układ ESP8266-12F na adapterze ESP Shild. Całość umieszczono na PCB zaprojektowanym w EAGLE. Płytka jest zaprojektowana w sposób umożliwiający szybką wymianę poszczególnych elementów. Może być ona wykorzystywana do programowania ESP z wykorzystaniem złącza PROG (po podpięciu się konwerterem USB-UART), jak również w innych projektach wykorzystujących I2C, wejście analogowe ESP, wejścia cyfrowe. Jako zasilanie wykorzystałem zasilacz 12V 1A, których mam kilkanaście. Dla potrzeb zasilania czujników potrzebujemy zasilania 5V o wydajności prądowej ok 1A. W tym celu wykorzystano przetwornicę impulsową step down - przetwornica DC-DC Mini 360 . Przetwornica, jak i inne elementy jest wymienna (na goldpinach). Takie rozwiązanie wymusiło stosowanie tego samego układu w innych projektach, gdzie miałem dostępne zasilania 24-30VDC). Projekt spodobał się znajomym, więc płytka została od razu wykonana w kilku egzemplarzach na frezarce mojego wykonania. Wygląd PCB od strony druku można zobaczyć na zdjęciach. Realizacja pomiarów: W założeniach miałem mierzyć tylko zawartość pyłów ale w szufladach zalegało jeszcze kilka innych czujników. Stąd też dodatkowe pomiary. Pyły: PM1; PM2,5; PM10 - czujnik PMS5003 Ciśnienie, temperatura, wilgotność - czujnik BME280 Wskaźnik CO2 - czujnik MQ135 Wyniki prezentowane są na LCD oraz przez WiFI korzystając z oprogramowania EasyEsp. Istnieje możliwość konfiguracji oprogramowania w celu przesyłania pomiarów do Domoticz lub ThingSpeak. Oprogramowanie W założeniach miałem napisać własny soft wykorzystując biblioteki dostępne dla Arduino IDE, ale z braku czasu poszedłem na łatwiznę i wykorzystałem EasyEsp. Soft wgrywamy za pomocą oprogramowania Esp8266Flasher - wykorzystujemy połączenie po USB - UART (złącze PROG na PCB). Konfiguracja Proces konfiguracji jest dokonywany z poziomu strony WWW oprogramowania ESPEasy i jest dość intuicyjny. Wszystkie parametry wpisujemy w zakładkach odpowiedzialnych za obsługę sieci, czujników iitp. Oczywiście proces konfiguracji opisany jest dokładnie na stronie projektu ESPEasy. Dla osób nie obeznanych w tej tematyce zamieszczam plik konfiguracyjny mojego projektu wraz z dokumentacją zdjęciową (Konfiguracja ESP). Podsumowanie Na chwilę obecną brak jest obudowy, ale układ powstał jako prototyp i każdy adresat układu ma ją wykonać we własnym zakresie. Sam zrobię to jak skończę inne projekty. Konstrukcja ma sporo wad: 1. Brak kalibracji czujników. 2. Pomiar MQ135 to tylko wskazanie przesunięte o 400 ppm (~poziom CO2 w atmosferze, nie uwzględniam wpływu temperatury i wilgotności). 3. Brak dzielnika napięcia na A0 (ESP ma pomiar 0-1V, MQ135 może dać do 5 V przy 5000 ppm), jednak zakładam, że nie będę miał stężenia ponad 1000ppm w domu. Później przetnę ścieżkę na PCB i dam dzielnik na analogu (co niestety zmniejszy dokładność pomiarów) lub zabezpieczę wejście analogowe diodą zenera. 4. Gotowe oprogramowanie z wieloma wadami, w planach zmiana na własny soft i wysyłanie informacji na Cayenne IOT. Zalety: 1. Prosta modułowa konstrukcja, uniwersalna płytka PCB stosowana przeze mnie w innych projektach. 2. Gotowy soft możliwy do wgrania i konfiguracji dla zupełnych laików. Jeśli ktoś jest zainteresowany dodatkowymi materiałami, to proszę o kontakt PW. W załączniku zamieszczam: 1. EAGLE - schemat w EAGLE 9.1.2 wraz z rysunkiem ścieżek. 2. ESP - oprogramowanie w wykorzystanej wersji. 3. ESP8266Flasher - soft do wgrania oprogramowania. Podczas testów pomiar pyłów miałem na zewnątrz przy mrozach ponad 300 szczytowo i pokrywało się to z lokalną stacją w Połańcu (odchyłka była w granicach 5%). Czujnik PM5003 pracuje u mnie w cyklu 60 sekund pomiary/ 30 minut uśpienie. Żywotność czujnika laserowego to 8000 h. Częstszych pomiarów nie potrzebuję do swoich potrzeb. Czas 60 sekund wystarcza do odpowiedniego wygrzania czujnika i ustabilizowania się pomiarów. Cała stacja pobiera zaraz po starcie ok. 3 W, a po nagrzaniu czujnika MQ135 pobór energii spada do ok. 1,8 W. ESP8266Flasher.zip EAGLE.zip ESP.zip Konfiguracja_ESPEasy.zip
×
×
  • Utwórz nowe...