Dozownik nawozów do akwarium wersja 2.0 ;)

Sterownik komunikuje się z użytkownikiem na dwa sposoby:

  1. Interfejs WWW (to opiszę dalej)
  2. Wyświetlacz LCD 4×20 na szynie I2C, encoder (impulsator) z przyciskiem oraz dwie linijki po 8 diod RGB sterowane układem WS2801.

Opis zacznę od interfejsu sprzętowego.

Wyświetlacz standardowo jest obsługiwany sterownikiem HD44780 jednak można dostać do niego konwerter na I2C (LCM1602) oparty notabene na układzie PCF8574 ;).

Jak pisałem wcześniej NodeMCU operuje na logice 3,3V opis konwertera LCM1602 również informuje że może on pracować z napięciami 3,3V jednak dla samego wyświetlacza jest to sporo za niskie napięcie. Na wyświetlaczu coś tam się bardzo słabo pokazywało natomiast podświetlenie już zupełnie nie działało.  Niewiele myśląc zastosowałem gotowy konwerter napięć i podłączyłem wyświetlacz do NodeMCU przez niego. Zasilany napięciem 5V wyświetlacz działał już poprawnie.

Jak widać na zdjęciu z jednej strony płytki mamy stany wysokie HV a z drugiej niskie LV i lepiej sie trzymać tych opisów ;).

Po menu systemu poruszamy się przy pomocy encodera z guzikiem. Obracając gałkę przemieszczamy się po menu guzikiem zatwierdzamy daną opcję.

Sam impulsator jest dość fajną zabawką jednak podobnie jak przyciski jest podatny na debouncing czyli „iskrzenie” no chyba że jest to enkoder optyczny wtedy nie ma tematu. Aby uniknąć problemów z drganiem styków należy podłączyć enkoder do mikrokontrolera poprzez prosty filtr.

Najlepiej jak sam filtr będzie jak najbliżej wyprowadzeń enkodera, ja zamontowałem go na samym enkoderze.

Kombinowałem z różnymi bibliotekami do Arduino obsługującymi enkodery jednak w moim przypadku najlepiej sprawdza się ww filtr i prosty kod.

while (res == 0)
 {
   ESP.wdtFeed(); // to ważne ale opisze to potem 
   en =  digitalRead(E_A); // odczytujemy stan piny podłączonego do                                 wyjścia A enkodera
   if ((encoder0PinALast == LOW) && (en == HIGH)) {
      lastTime_s = millis(); // zmienna 
      if (digitalRead(E_B) == LOW) {
         enPos--;
         } else {
         enPos++;
         }
    }
 encoder0PinALast = en;
// na podstawie enPos robimy coś dalej w programie
}

Artykułów na temat enkoderów jest też sporo:

http://www.leniwiec.org/2014/04/28/enkoder-obrotowy-w-praktyce-prawidlowe-podlaczenie-do-mikrokontrolera-avr/

A tak cały ten bałagan działa …

To mój pierwszy filmik zamieszczany na www więc proszę o wyrozumiałość 😳

3 myśli do „Dozownik nawozów do akwarium wersja 2.0 ;)”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.