Przeszukaj forum
Pokazywanie wyników dla tagów 'ESP32-wroom'.
Znaleziono 3 wyniki
-
ESP32-wroom Czujnik jakości powietrza – system monitorowania smogu
Lukasc opublikował temat w Projekty - DIY
Czujnik jakości powietrza – modułowy system monitorowania smogu z zasilaniem solarnym Jako osoba mieszkająca w regionie, gdzie jakość powietrza potrafi dramatycznie spadać w sezonie grzewczym, postanowiłem stworzyć własne urządzenie do pomiaru poziomu pyłów zawieszonych. Powód zdrowotny, astmy i alergie w rodzinie. Spacer w smogu oprócz wątpliwej przyjemności, kończy się kaszlem i czasami trudnością w oddychaniu. Moim celem było zbudowanie urządzenia, które będzie także można zabrać ze sobą i włączyć przed spacerem w docelowym miejscu. Celem jest również aby mogło działać stacjonarnie jako element mojego systemu stacji pogody i pomiaru wody w studni. Budowa i modułowość Urządzenie zostało zaprojektowane jako system składający się z kilku modułów: Główna jednostka pomiarowa zamknięta w własnoręcznie zaprojektowanej i wydrukowanej w 3D obudowie. Wyświetlacz LCD TFT (2.4" 240x320px), który można podłączyć lub odłączyć – urządzenie może działać zarówno z ekranem, jak i w trybie „headless”, wysyłając dane na serwer. Dla urządzenia użyłem zmodyfikowanej przeze mnie obudowy z Thingverse. Moduł baterii- pakiet 4S1P zgrzany samodzielnie w zaprojektowanej przeze mnie solidnej obudowie. Do pakietu dodałem dedykowany BMS oraz bezpiecznik szklany 1A Każde ogniwo pakietu przetestowane testerem ogniw Moduł zarządzania energią słoneczną Moduł zarządzania energią słoneczną do panelu słonecznego 6V-24V - Waveshare 16120 pozwala na ładowanie poprzez panel solarny Waveshare 19598 (18V, 10W) lub przez USB. Ma on gniazdo baterii 14650 i na spacery dla kompaktowości można odłączyć pakiet 4S1P i wsadzić pojedynczą baterię. Moduły połączone są ze sobą wtyczkami – JULET HIGO oraz 3 żyłowymi. Pozostałe funkcjonalności: Woltomierz na obudowie pokazuje aktualne napięcie baterii. Jego wyświetlacz działa tylko po wciśnięciu przycisku, oszczędzając baterię. Dzięki temu nie muszę zastanawiać się ile prądu zużywa sam pomiar napięcia prądu wraz z wyświetleniem wyniku. Mierzy on napięcie zarówno włożonego ogniwa 14650 do środka lub pakietu baterii 18650 4S (oczywiście zgodnie z opisem modułu zarządzania energią, w jednym momencie można albo podpiąć pakiet albo działać na baterii) Magnetyczne łączenie modułów – w obudowie głównej jednostki pomiarowej oraz obudowie do ekranu LCD zaprojektowałem kieszenie na magnesy neodymowe, co pozwala na szybkie łączenie i rozłączanie części systemu. Dwa przełączniki – umożliwiają wyłączenie ekranu LCD i pozostawienie samego ESP32 do przesyłania danych na serwer. Technologia i czujniki Urządzenie oparte jest na ESP-32S CZYLI ESP32ESP-WROOM-32 ESP32 WiFi 38 PIN DevKit, który zarządza pomiarami i komunikacją. Wykorzystane komponenty: Czujnik jakości powietrza PMS7003 – dokładnie mierzy poziomy PM1.0, PM2.5 i PM10 w powietrzu. Moduł RTC DS1302 – zapewnia precyzyjne odmierzanie czasu, nawet w przypadku braku połączenia z siecią. Moduł Wi-Fi – ESP32 łączy się z siecią i przesyła dane na serwer, gdzie mogą być przechowywane i analizowane. Diody LED i buzzer(pasywny) – sygnalizują status urządzenia. Buzzer daje sygnał dźwiękowy potwierdzający poprawne zalogowanie się do wifi w trybie headless – bez wyświetlacza (do pomiarów stacjonalnych z logowaniem na serwer) Korciło mnie aby dodać jeszcze czujnik temperatury ale zrezygnowałem z tego pomysłu bo w moim systemie mam już pomiar temperatury. Poza tym więcej przewodów już tam nie wcisnę Wizualizacja danych na wyświetlaczu Dane są prezentowane w czytelny sposób zarówno na lokalnym ekranie, jak i na serwerze. Interfejs LCD pokazuje: Aktualne poziomy PM1.0, PM2.5 i PM10 w formie pasków postępu. Kolorystyczne oznaczenia jakości powietrza – od zielonego (bardzo dobre) do bordowego (bardzo złe). Animację unoszących się cząstek – im gorsza jakość powietrza, tym więcej cząstek i wolniejsza animacja. Każda cząstka ma swoje normy, których przekroczenie wizualizowane jest zmianą prędkości i koloru danej cząstki. Historia pomiarów na serwerze – co 5 minut urządzenie wysyła dane do centralnej bazy danych. Komentarze: Pomimo zastosowania tak dużego pakietu baterii 18650 4S1P (jak na moje potrzeby), musiałem obniżyć częstotliwość pomiaru i wysyłki na serwer. Urządzenie wytrzymywało mroźną noc ale w pochmurny dzień panel słoneczny nie był wstanie naładować do pełna urządzenia i na kolejną noc moduł zarządzania energią odłączał zasilanie. Na ten moment ustawiłem pomiar i wysyłkę na serwer co 5 minut. Pozostaje mi teraz zmierzyć się z ustawieniem ESP32 w tryb uśpienia pomiędzy wysyłkami danych. Zdaję sobie sprawę, że panel solarny jest bardzo mocny. W dniu słonecznym w lutym naładowuje cały pakiet do pełna w około 2 godziny. Rozbudowa: Jak wspomniałem urządzenie to jest częścią większej całości. W kolejnej wersji: Do systemu w przyszłości planuję dodać siłowniki do okien które będą zamykały i otwierały okna w zależności od jakości powietrza. Jest to pierwsza wersja urządzenia- prototyp. Aby zminimalizować ilość kabelków w obudowie postaram się w drugim prototypie osadzić wszystko co się da na płytce prototypowej i zlutować. Zamierzam zaprojektować obudowę osobno dla ESP i dla elektroniki oraz ją uszczelnić żywicą Czujnik smogu będzie miał swoją własną obudowę. Obudowa do czujnika smogu musi mieć wywietrzniki. Zamierzam tutaj zaprojektować odpowiedni tunel przez który będzie przepływało powietrze ale przez który nie przedostanie się woda. Kieszeń na magnes będzie miała także obudowa na pakiet baterii. -
Witam serdecznie, Borykam się z dziwnym dla mnie problemem, otóż zbudowałem sobie pojazd rc składający się z czterech silników, arduino, nakładki od iduino i modułu esp32 wroom do komunikacji wifi z telefonem. Do sterowania użyłem aplikacji z google play, który wysyła 5 zapytań GET; "GET /?State=F", "GET /?State=B","GET /?State=L","GET /?State=R", "GET /?State=S". Kolejno są to : przód, tył, lewo, prawo i stop. Sygnały schodzą na esp jak i są przekazywane na arduino dopóki układ jest zasilany z kabla usb. Niestety gdy uruchomię z zasilania bateryjnego, to silniki na sygnały nie reaguję, podobnie jest gdy obwód jest zasilany z kabla usb, a przełączę przycisk zasilania bateryjnego, to wywala komunikację z komputerem. Kod sterujący silnikami w zależności od otrzymanej komendy, a pod nim kod z esp32, który odbiera sygnały z telefonu i przekazuje na arduino. Wydaje mi się, że jest kwestia zasilania, ale nie dam sobie ręki uciąć, może ktoś miał podobny problem? Z góry dziękuję za odpowiedzi. #include <AFMotor.h> // Inicjalizacja motor shield AF_DCMotor motor1(1); // Motor 1 podłączony do kanału M1 AF_DCMotor motor2(2); // Motor 2 podłączony do kanału M2 AF_DCMotor motor3(3); // Motor 3 podłączony do kanału M3 AF_DCMotor motor4(4); // Motor 4 podłączony do kanału M4 void setup() { Serial.begin(9600); // Komunikacja z ESP32 Serial.println("Arduino is ready to receive commands"); } void loop() { if (Serial.available()) { char command = Serial.read(); Serial.print("Received command: "); Serial.println(command); switch (command) { case 'F': // Ruch do przodu Serial.println("Moving forward"); motor1.setSpeed(255); // Maksymalna prędkość motor1.run(FORWARD); motor2.setSpeed(255); motor2.run(FORWARD); motor3.setSpeed(255); motor3.run(FORWARD); motor4.setSpeed(255); motor4.run(FORWARD); break; case 'B': // Ruch do tyłu Serial.println("Moving backward"); motor1.setSpeed(255); motor1.run(BACKWARD); motor2.setSpeed(255); motor2.run(BACKWARD); motor3.setSpeed(255); motor3.run(BACKWARD); motor4.setSpeed(255); motor4.run(BACKWARD); break; case 'R': // Skręt w prawo Serial.println("Turning right"); motor1.setSpeed(255); motor1.run(FORWARD); motor2.setSpeed(255); motor2.run(BACKWARD); motor3.setSpeed(255); motor3.run(FORWARD); motor4.setSpeed(255); motor4.run(BACKWARD); break; case 'L': // Skręt w lewo Serial.println("Turning left"); motor1.setSpeed(255); motor1.run(BACKWARD); motor2.setSpeed(255); motor2.run(FORWARD); motor3.setSpeed(255); motor3.run(BACKWARD); motor4.setSpeed(255); motor4.run(FORWARD); break; case 'S': // Stop Serial.println("Stopping"); motor1.setSpeed(0); motor1.run(RELEASE); motor2.setSpeed(0); motor2.run(RELEASE); motor3.setSpeed(0); motor3.run(RELEASE); motor4.setSpeed(0); motor4.run(RELEASE); break; default: Serial.println("Unknown command"); break; } } } #include <WiFi.h> // Nazwa i hasło sieci Wi-Fi const char* ssid = "RC_CONNECTION"; const char* password = "12345678"; // Inicjalizacja serwera WiFiServer server(80); // Piny dla Serial1 const int RX_PIN = 16; const int TX_PIN = 17; void setup() { Serial.begin(115200); Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); // Używamy Serial1 do komunikacji z Arduino // Ustawienie ESP32 jako Access Point WiFi.softAP(ssid, password); Serial.println("Access Point utworzony:"); Serial.print("SSID: "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.softAPIP()); // Uruchomienie serwera server.begin(); } void loop() { WiFiClient client = server.available(); // Sprawdzenie, czy są klienci if (client) { Serial.println("New connection"); String currentLine = ""; // do trzymania danych z klienta while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // Wysyła komendę do komputera przez Serial if (c == '\n') { // Przetwarzanie żądania GET Serial.println("Processing request:"); Serial.println(currentLine); // Wysłanie komendy do Arduino przez Serial1 if (currentLine.indexOf("GET /?State=F") >= 0) { Serial1.println("F"); } else if (currentLine.indexOf("GET /?State=B") >= 0) { Serial1.println("B"); } else if (currentLine.indexOf("GET /?State=R") >= 0) { Serial1.println("R"); } else if (currentLine.indexOf("GET /?State=L") >= 0) { Serial1.println("L"); } else if (currentLine.indexOf("GET /?State=S") >= 0) { Serial1.println("S"); } // Wysłanie odpowiedzi do klienta client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("Komenda otrzymana"); client.println(); break; } else if (c != '\r') { currentLine += c; } } yield(); // Dodanie yield() w celu uniknięcia resetowania przez watchdog } client.stop(); Serial.println("Client Disconnected"); } delay(10); // Dodanie niewielkiego opóźnienia, aby odciążyć procesor }
- 3 odpowiedzi
-
- ESP32-wroom
- Motor Shield
- (i 3 więcej)
-
Witam państwa jako że jestem stanowczym człowiekiem i jeszcze trzy dni temu obiecywałem sobie że nie będę się uczył nowych rzeczy, lub takich których nie będę używał w najblizszej przyszlosci jak np. freeRTOS, tak że ten......no od dwóch dni piłuję temat freeRTOS'a i mam w związku z tym kilka pytań, pierwsze.. Tworząc zadania, zadania te uruchomią się automatycznie czy potrzebuje jeszcze wywołać vTaskStartScheduler Bo znalazłem wiele przykładów gdzie ta funkcja jest wywoływana lub nie jest i działa...też wyczytałem różne opinie że jest potrzebna ta funkcja, lub że nie jest potrzebna bo utworzone zadanie startuje automatycznie..jak to jest z tym?
- 34 odpowiedzi
-
- FreeRTOS
- ESP32-wroom
-
(i 1 więcej)
Tagi:
