Skocz do zawartości

Kontroler wilgotności w ogródku kuchennym.


Jacenty

Pomocna odpowiedź

Witam, jestem w ostatniej fazie tworzenia urządzenia jak wyżej w temacie. Zatrzymałem się jednak, ponieważ napotkałem pewien problem, ale zacznę od początku.

Mózgiem urządzenia jest Arduino Micro. Jego zadanie nie jest skomplikowane, trzy przyciski, wyświetlacz LCD, sterowanie pompą poprzez tranzystor i przekaźnik, no i nieszczęsny czujnik wilgotności.

Analogowy czujnik firmy SparkFun, trzy piny: VCC, GND, SIG. Czyli standardowo. Wszystko w urządzeniu pięknie funkcjonuje z wyjątkiem sczytywania sygnału z tego właśnie czujnika. Dostaje liczby, które w żaden sposób nie chcą się zmienić bez względu na ośrodek w jakim znajduje się czujnik (powietrze/woda). Sygnał zmienia się w momencie kiedy na przykład przykryje pin analogowy Arduino palcem, wtedy mam maksymalną wartość. Jeżeli nic nie robię, czujnik czy leży na stole czy pływa w wodzie, otrzymuję wynik ~300.

Jeżeli chodzi o wykluczenia.

1. Kod sprawdzałem kilkanaście razy, plus porównywałem do tych przykładowych czy to z YouTube od innych użytkowników tego czujnika, czy ze strony producenta, nie ma żadnych błędów, co by było w sumie ciężkie do osiągnięcia, bo korzysta się wyłącznie z funkcji: analogRead(pin) oraz funkcji skalującej map(name, xmin, xmax, ymin, ymax). Więc to odpada.

2. Czujnik działa prawidłowo, sprawdzałem na skopie.

3. Okablowanie, lutowanie, wszystko również prawidłowo.

Jedyną rzeczą, nad którą się zastanawiam, to zbieranie śmieci z powietrza przez piny Arduino Micro. Piny te są cały czas "otwarte" (nie wiem jak inaczej to określić) i mogą zakłócać sygnał. Nie wiem co może być jeszcze przyczyną. Jednak nie chce mi się wierzyć, że Arduino wypuściło płytkę przy której niepoprawnie działa sczytywanie analogowe z powodu zakłóceń z powietrza. Tak jakby pin cały czas był latający.

Czy ktoś spotkał się z podobnym problemem? Wie jak temu zaradzić? Jest jakiś sposób? Albo czy trzeba zwrócić na coś konkretnie uwagę przy korzystaniu z tego typu czujnika i tej konkretnej płytki Arduino?

Z góry dziękuję za odpowiedź,
pozdrawiam! 🙂

Link do komentarza
Share on other sites

Ta firma produkuje pewnie z 10 rodzajów czujników wilgotności. Mamy sobie sami szukać po nazwach sygnałów? Bez wskazania nazwy/typu czujnika ciężko jest coś radzić.

Co to znaczy, że czujnik pracuje prawidłowo? Czy "pracuje prawidłowo" również gdy jest podłączony do Arduino? Co mierzyłeś? Czy napięcie na pinie procesora? Napięcia mierzy się woltomierzem. Co to jest skop?

Czy wybierasz w programie ten kanał ADC do którego podpiąłeś czujnik?

Jeżeli masz problem z pomiarem napięcia i podejrzewasz zakłócenia (szczerze wątpię) a czujnik oddaje sygnał napięciowy, to zamiast niego podłącz potencjometr. Wtedy bardzo szybko zweryfikujesz działanie ADC i funkcji przeliczających napięcie na wilgotność.

Typowe czujniki wilgotności mierzą wilgotność względną (RH) powietrza. Wkładanie ich do wody to głupota. Czego konkretnie wilgotność chcesz mierzyć? Gleby? Czy wiesz jak ma się zawartość wody w ziemi do wilgotności pokazywanej przez zakopany czujnik RH? Jakich napięć oczekujesz? Jak zasilacz ten czujnik?

Link do komentarza
Share on other sites

Jeżeli chodzi o czujnik do pomiaru wilgotności gleby, którego używam:

https://www.sparkfun.com/categories/146

Faktycznie, nie pomyślałem o sprawdzeniu ADC przez potencjometr. Dokonałem testów, wszystko działa pięknie, tak jak należy, więc kolejne wątpliwości rozwiane. ADC działa i nie zbiera śmieci przy poborze sygnału.

Czujnik mierzyłem OSCYLOSKOPEM, podłączony z zasilacza laboratoryjnego, tak jak należy, natomiast pin SIG do OSCYLOSKOPU aby sprawdzić napięcie. Również działa, w powietrzu, w palcach i w zmoczonej gąbce daje odpowiednio większe napięcie.

Wilgotność względna RH to wielkość przy wilgotnościomierzach powietrza lub innego ośrodka gazowego, nie gleby, gdzie czujnik tak naprawdę sprawdza rezystancję pomiędzy dwiema swoimi nóżkami, więc wsadzanie do wody wcale nie jest głupotą, tylko zwieraniem tych nóżek, tak aby otrzymać wartość graniczną.

Czujnik zasilany prosto z Arduino, mierzyłem napięcie, mieści się z przedziału, na który czujnik jest przystosowany -> 3,3 V do 5 V.

W programie wybieram odpowiedni kanał, tj. ten do którego podłączyłem czujnik, tak jak wcześniej już wspominałem, tę kwestię sprawdzałem kilkukrotnie, wraz z podłączaniem do różnych kanałów.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Jacenty, spróbuj może dodać mały kondensator np. 100nF na linii podłączonej do ADC. Filtracja nigdy nie zaszkodzi, a nie wiadomo co kod Arduino wyprawia z pinami.

Link do komentarza
Share on other sites

Czujnik mam ogólnie podłączony do kabla ze złączem LAN i obecnie testuję sam czujnik.

Kod:

void setup() {
 Serial.begin(9600);
}

void loop() {
 int czujnik;
 czujnik = analogRead(A5);
 Serial.print(czujnik);
 Serial.print("   ");
 Serial.println(analogRead(A0));
 delay(250);
}

Biorę również odczyt z wolnego pinu analogowego tak jak widać w kodzie, aby porównać, wynik:

255 249

248 243

256 249

245 241

254 247

242 240

255 247

243 240

256 248

244 241

254 247

245 242

253 246

247 243

252 245

249 244

Dość zaskakująco podobne.

Schemat podłączenia:

Kable idące ze złącza:

- żółty - SIG -> A5

- czerwony - VCC -> 5V

- czarny - GND -> GND

- zielony - nieużyty

Obecnie sprawdzałem napięcie pomiędzy kablem żółtym (sygnał) oraz uziemieniem. Wcześniej na oscyloskopie, gdy czujnik podłączony był do zasilacza laboratoryjnego, otrzymałem dobre wyniki:

~0V - gdy w powietrzu

~2V - gdy trzymany w dłoni

~4V - gdy w zmoczonej gąbce

Teraz, gdy sprawdziłem woltomierzem mam odczyt ~0.03V niezależnie od ośrodka.

Link do komentarza
Share on other sites

A nie podłączyłeś przypadkiem GND do sygnału RESET w arduino?

Sprawdź jeszcze czy A5 jest odpowiednio podłączone. Na zdjęciu ciężko policzyć który pin jest użyty, ale może coś się pomieszało.

Link do komentarza
Share on other sites

No to jeśli wszystko jest OK, to nic tu po nas. Czysta magia, spróbuj egzorcyzmów...

A tak na poważnie, to jesteś w dość komfortowej sytuacji. Wystarczy wyjść od połączenia w którym czujnik działa i powoli, po jednym kroku na raz zmieniać układ na ten docelowy, np:

1. Bierzesz zasilacz, goły czujnik i multimetr lub oscyloskop - działa.

2. Przełączasz tylko zasilanie czujnika na piny GND/+5V Arduino przy czym linia sygnałowa wisi w powietrzu i mierzysz napięcie z czujnika - wciąż na multimetrze działa.

3. Wstawiasz między czujnik a Arduino długi kabel z tą puszką na końcu, którą widzimy na zdjęciu - ups, nie działa.

Wniosek: szukasz przerwy w kablu.

To prosty przykład pokazujący jak to zrobić. Napisz o swoich odkryciach. Jesteśmy ciekawi. I pamiętaj: jedna zmiana na raz.

A pisząc o czujniku wilgotności nie przyszło mi do głowy, że użyjesz prostych widełek mierzących zwykłą rezystancję. To nie jest pomiar wilgotności gleby sensu stricte, choć może za taki uchodzić po dobrym wyskalowaniu dla danego rodzaju podłoża. Czujnik rezystancji oczywiście możesz bezkarnie zanurzać w wodzie, oczywiście do poziomu elektroniki na nim leżącej 🙂 Napisz mi jak liczby otrzymywane z ADC przełożysz na ilościowe wskazania na wyświetlaczu? Czy po prostu w czasie lata nauczysz się, że np. 139 to sucho i trzeba podlać a 423 to dużo bo woda stoi między grządkami?

Bo normalnie to wilgotność gleby wyrażana jest w gramach wody na kg masy. Musiałbyś więc wziąć łopatę tej konkretnej ziemi z ogródka, rozdrobnić, wrzucić do piekarnika na cały dzień w temperaturze powiedzmy 80°C i poczekać aż całkowicie wyschnie a potem ostygnie. Wtedy przełożyć to do suchego naczynia odmierzając 1kg, wstawić czujnik, zmierzyć i zapisać wskazanie. Potem dolać np. 20g wody, dobrze wymieszać, poczekać z 5 minut na homogenizację, znowu wstawić czujnik, zmierzyć itd.. aż do zamiany ziemi w błoto. Wtedy na kartce będziesz miał zestaw liczb, który mógłby posłużyć do zamiany odczytów ADC na prawdziwą wilgotność w [%] lub [g/kg].

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.