
*
Witam po dłuższej przerwie, tym razem dział mikro kontrolerów.
Wymagania dla projektu / założenia:
Pomiar w pomieszczeniu/obudowie urządzenia/w zbiorniku temperatury powietrza/cieczy na wejściu i wyjściu. Wyświetlenie na żywo aktualnych wartości temperatur na wyświetlaczu LED x2. Wykrywanie przekroczenia ustalonych granic i alarmowanie poprzez przekaźnik sygnalizacją świetlną. Gdy urządzenie zewnętrzne daje sygnał o pracy do układu ESP ten co 5 min wysyła dane z czujników do bazy danych mysql poprzez stronę PHP na serwerze.
Sprzęt:
* ESP8266-12E - do komunikacji przez wifi do serwera z bazą danych
* Arduino Mega2560 - pobranie temp. z czujników, wyświetlanie temperatur, wysyłanie po Serial pomiarów do ESP, i informacji o alarmach, Nr np. linii produkcyjnej/ pomieszczeniu/ urządzeniu monitorowanemu.
* Arduino UNO r3 - do testów komunikacji po Serial/SoftwareSerial
* DS18B20 x2 - czujniki temperatur w wersji wodoodpornej.
* Moduł wyświetlacza czterocyfrowego LED 8 segmentowy na TM1637 x2 - wyświetlanie aktualnych temperatur, i parametrów urządzenia.
* Kable, przekaźniki, i inne pierdołki.
Na wstępie, projekt przedstawiłem na innym forum, nie ograniczam się do jednej społeczności forum, bo ludzie szukają rozwiązań w różnych miejscach, i pomocy.
Początkowe problemy jakie miałem to:
- Zbyt długi czas pomiaru na DS18B20 (przy 2 czujnikach ponad 1400ms /12bit rozdzielczość)
+ Częściowo rozwiązany poprzez ustawienie rozdzielczości na 9bit, czas pomiaru 1 czujnika około 35ms
- Obsługa czujników DS na 1-wire i konieczność zaprogramowania na nowo płytki w momencie wymiany uszkodzonego czujnika na przykład
+ Rozwiązano poprzez wpięcie na różnych pinach osobno czujnika wejściowej temp, i wyjściowej. Co do konieczności zmiany indywidualnego znacznika każdego czujnika, ich numer jest na początku pobierany/odczytany dla obu linii komunikacyjnych i zapisywany tymczasowo w tablicy. Działa.
- Wyświetlanie na dwóch wyświetlaczach/modułach LED z tm1637 (komunikacja po 2 przewodach, brak indywidualnych adresów wyświetlaczy)
+ Podłączenie na osobnych pinach każdego z modułu. Co do czasu na obsługę wyświetlacza około 42ms. sporo...
- Wymiana informacji o pomiarach i podstawowych parametrach między płytkami pomiaru i wysyłania danych na serwer.
+ Rozwiązano, może nie profesjonalnie, ale działa. Niestety wszelakie poradniki, przykłady w sieci, nie działały.. lub były nie w pełni opisane/napisane. To mi zjadło najwięcej zdrowia. Po oglądnięciu kanału Elektromaniak'a, i zlepku informacji kilku stron o łączności szeregowej, itp. udało się połączyć ze sobą narazie Mega i Uno, ESP potem zajmę się.
- Ustawienia i zapamiętanie na Mega 2560 wartości dla progu alarmu, wyświetlenie wartości na jednym z wyświetlaczy. A także zmiana nr pomieszczenia/urządzenia monitorowanego.
+ Do rozwiązania ... teraz za to się biorę.
- Wysyłanie wartości zmierzonych do bazy danych.
+ jeszcze nie napisany kod, nie utworzona baza. W olejnych krokach będzie rozwiązywany ten punkt.
UWAGI:
Przede wszystkim na co należy zwrócić uwagę, jak zawsze.. czy prawidłowo podłączone okablowanie, zasilenie układów, modułów, dla komunikacji po serial'u nie zapomnieć połączyć GND obu płytek, a w przypadku ESP8266 linie TX, RX podłączyć przez konwerter stanów logicznych. Aha, do obsługi czujników temperatury użyłem biblioteki DS18B20.h ale w wersji 1 !!!, nowsze biblioteki lub Texas'a nie uwzględniają parametru rozdzielczości pomiarów dla linii kodu
sensor_airout.begin(9);
A teraz nieco kodu..
Pomiar, wyświetlanie, serial TX - Arduino Mega2560
Code: c
Kod dla UNO (dla testów, domyślnie ESP) odbiór parametrów i pomiarów poprzez serial. Wyświetlenie w serial monitor czy wszystko przebiega prawidłowo.
Oczywiście w materiale źródłowym wykorzystano kilka linii kodu do liczenia sum kontrolnych. Ja to pominąłem. Sprawdzane podczas odbioru są tylko znaki początkowe i końcowe przesyłanych danych, jeśli są poprawne i identyczne to wykonuje się zapis do tablic danych, i przeliczenie ich na wartość temperatur w postaci z ułamkiem.. np 21.50 *C,
Code: c
Jeszcze sporo pracy do wykonania.
Postaram się na bieżąco informować o postępach.
Zaznaczam że jestem mocno początkujący.. i osoby siedzące w temacie na pewno znajdą wiele uproszczeń i błędów, będę wdzięczny za sugestia..
Chcę również podziękować RFM za pomoc i podpowiedzi. Postaram się w niedalekiej przyszłości wykorzystać je.
Cool? Ranking DIY