Popularny post Wejmon Luty 23, 2022 Autor tematu Popularny post Udostępnij Luty 23, 2022 Udało się! 😄 Zrobiłem tak jak napisałeś @farmaceuta 👍 Odczytałem wartość analogową czujnika, przeliczyłem na napięcie a następnie na procent stężenia tlenu [Link]. Producent zakłada, że przy napięciu 2,314 V czujnik powinien wskazywać około 20% tlenu [Link]. Przeprowadziłem również kilka doświadczeń. Na świeżym powietrzu czujnik wskazywał wręcz wzorowe wyniki: 20,9%-21%, zaś w pomieszczeniach były one nieco wyższe, od 21% do nawet 22,12%. Poniżej zamieszczę cały kod, gdyby ktoś w przyszłości również planował stworzyć podobne urządzenie 😉 // Oxilium - Czujnik stezenia tlenu - Kod // Uwaga: // Rozgrzanie czujnika zajmuje od 5 do 10 minut #include <Wire.h> // Biblioteka, ktora wymaga ekran LCD RGB, jako urzadzenie podlaczone do portu I2C #include "rgb_lcd.h" // Biblioteka, ktora wymaga ekran LCD RGB rgb_lcd lcd; const int noAlarmR = 255; // RGB: Kolor bialy (Brak alarmu) const int noAlarmG = 255; const int noAlarmB = 255; const int AlarmR = 255; // RGB: Kolor czerwony (Alarm) const int AlarmG = 0; const int AlarmB = 0; const int Ekran = 5; // Numer wejscia I2C: 5-I2C jako Ekran const int Buzzer = 6; // Numer wejscia cyfrowego: D6 jako Buzzer const int pinAdc = A0; // Numer wejscia analogowego: A0 jako pinAdc int odczytanaWartosc = 0; float napiecie = 0; float stezenie = 0; float granica = 23; // Ustawienie granicy dopuszczalnego stezenia tlenu na potrzeby ekranu LCD (Mozliwosc edytowania) void setup() { Serial.begin(9600); // Ustawienie prędkości transmisji Serial.println("Grove - Oxygen Sensor(MIX8410) - Test"); // Jednorazowe wysłanie tekstu pinMode(Buzzer, OUTPUT); // Wyjscie dla buzzera Serial.println("Grove - Buzzer - Test"); // Jednorazowe wysłanie tekstu pinMode(Ekran, OUTPUT); // Wyjscie dla ekranu LCD Serial.println("Grove - LCD - Test"); // Jednorazowe wysłanie tekstu lcd.begin(16, 2); // Deklaracja typu lcd.clear(); // Automatyczne wyczyszczenie zawartosci wyswietlacza. Wyeliminowanie nachodzenia tekstu lcd.setRGB(noAlarmR, noAlarmG, noAlarmB); lcd.setCursor(0, 0); // Ustawienie kursora lcd.print("Stezenie tlenu:"); lcd.setCursor(0,1); lcd.print("00.00%"); delay(1000); } double odczyt; // Przedstawienie wyniku na ekranie LCD z dwoma miejscami po przecinku void loop() { odczytanaWartosc = analogRead(pinAdc); napiecie = odczytanaWartosc * (5.0/1024.0); stezenie = napiecie * (20.0/2.314); Serial.print(napiecie); Serial.print(" V, Stezenie tlenu wynosi "); Serial.print(stezenie); Serial.println(" %"); delay(200); Alarm(23); // Wlaczenie alarmu w momencie wykrycia stezenia rownego badz wiekszego niz 23.0% tlenu w powietrzu (Mozliwosc edytowania) delay(100); float odczyt = stezenie; if (odczyt >= granica) { lcd.setRGB(AlarmR, AlarmG, AlarmB); // Podswietlenie ekranu na czerwono w momencie wykrycia stezenia rownego badz wiekszego niz 23.0% tlenu w powietrzu lcd.setCursor(0, 1); lcd.print(odczyt); lcd.setCursor(5, 1); lcd.print("%"); delay(250); } else { lcd.setRGB(noAlarmR, noAlarmG, noAlarmB); // Podswietlenie ekranu na bialo w momencie wykrycia stezenia mniejszego niz 23.0% tlenu w powietrzu lcd.setCursor(0, 1); lcd.print(odczyt); lcd.setCursor(5, 1); lcd.print("%"); delay(250); } } void Alarm(float procentTlenu) { if (stezenie >= procentTlenu) { digitalWrite(Buzzer, HIGH); } else { digitalWrite(Buzzer, LOW); } } Dziękuję wszystkim za pomoc (w szczególności @farmaceuta 👍). Wspólnymi siłami udało się nam stworzyć całkiem ciekawe urządzenie. Z pomocą drukarki 3D czekam jeszcze na wydrukowanie się obudowy. Kiedy wszystko poskładam w całość zamieszczę również filmik, aby zaprezentować działanie Oxilium 🚀 Pozdrawiam, Wojciech Ciecierski 4 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 23, 2022 Udostępnij Luty 23, 2022 Ciesze sie ze bylem przydatny😜 i czekamy na filmik😉 a przypadkiem skala nie idzie odwrotnie?? Bo w domu chyba stezenie powinno byc mniejsze...(jako za sie tlen zuzywa a dom zamkniety🤔) Cytuj Link do komentarza Share on other sites More sharing options...
Wejmon Luty 23, 2022 Autor tematu Udostępnij Luty 23, 2022 Również zastanawiałem się dlaczego w pomieszczeniach zamkniętych czujnik rejestrował wyższe stężenie. Możliwe, że jest to spowodowane dużą ilością roślin w domu 😅 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 23, 2022 Udostępnij Luty 23, 2022 12 minut temu, Wejmon napisał: Również zastanawiałem się dlaczego w pomieszczeniach zamkniętych czujnik rejestrował wyższe stężenie. Możliwe, że jest to spowodowane dużą ilością roślin w domu 😅 A mozliwe😉 sprawdz w ktora strone napiecie rosnie wzgledem stezenia i bedzie wiadomo😉 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Wejmon Luty 27, 2022 Autor tematu Udostępnij Luty 27, 2022 Podczas wykonywania pomiarów stężenia tlenu natrafiłem na kolejną przeszkodę … mam nadzieję, że będzie to już ostatnia 😅 Mianowicie problem polega na tym, że kiedy zasilam urządzenie (napięcie wejściowe czujnika tlenu to 3,3V lub 5V) z laptopa kablem USB wyniki pomiarów wydają się być zgodne z oczekiwanymi (w normie). Zmieniając zasilanie na powerbank (DC OUT 5.0V 1000mA CAPACITY 2200mAh) zobaczyłem, że w tym samym miejscu, po błyskawicznym przepięciu kabla nagle otrzymuje niższe wyniki stężenia tlenu. Co więcej kiedy zamiast kabla USB przejdę na drugie gniazdo w Arduino aby podłączyć baterię 9V poziom wskazywanego stężenia gwałtownie rośnie. Tym sposobem w jednym miejscu, urządzenie pokazuje mi 3 różne wyniki w dość krótkim odstępie czasowym. Zastanawiam się jak temu zaradzić, z tego względu, że najbardziej zależy mi na zasilaniu urządzenia baterią 9V. Czy zastosowanie stabilizatora LM7805 wraz z dwoma kondensatorami po 100 nF rozwiąże ten problem? [Link] Mam również pytanie odnośnie obliczenia czasu pracy baterii. Jeżeli chcę sprawdzić jaką energię zużywa Arduino wraz ze wszystkimi komponentami rozumiem, że powinienem wpiąć miernik (amperomierz) szeregowo w zasilaniu zamykając cały obwód? Dzięki temu wiadomą pojemność baterii dzielę przez odczytane zużycie energii urządzenia otrzymując tym samym czas pracy baterii. Czy moje rozumowanie jest poprawne? Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 27, 2022 Udostępnij Luty 27, 2022 13 minut temu, Wejmon napisał: Zastanawiam się jak temu zaradzić, z tego względu, że najbardziej zależy mi na zasilaniu urządzenia baterią 9V. Troche krotko pochodzi na takiej baterii...one sa dobre ale tylko do testow... Co do czasow na baterii, to mierzysz pobor pradu calego ukladu i dzielisz pojemnosc nominalna baterii przez otrzymany wynik i otrzymujesz godziny(tak z grubsza) Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 27, 2022 Udostępnij Luty 27, 2022 Tak...twoje rozumowanie jest ok😉 co do bledu pomiaru to pojecia nie mam...generalnie powinno dzialac podobnie...mozesz wpiac jakis kondensator (uF) przy zasilaniu modulu tlenu...moze to cos pomoze Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!