Szklarnia w internecie rzeczy (IOT) – część 4.


Arduino C++ na poważnie: przerwania, klasy i kilka sztuczek
Jak zawsze przypominam o poprzednich częściach, jeśli ktoś jeszcze nie czytał – tutaj.
Opiszę na początku, co nowego w moim projekcie. Jeśli chodzi o hardware: podłączone zostały przyciski, LEDy, oraz przekaźniki, czyli takie nasze I/O (input/output). Zgłębiłem też nieco temat czujnika wilgoci powietrza, trafiając na taką stronę: https://www.kandrsmith.org/RJS/Misc/Hygrometers/calib_many.html. Czekam jeszcze na nowy czujnik. Czujnika wilgotności gleby również jeszcze nie ma, bo eksperymentuję teraz głównie z hydroponiką (co opiszę niebawem w podsumowaniu ogródka i prac w szklarni w tym sezonie).
Przejdźmy do szczegółów, na obudowie, jak widać na zdjęciu powyżej, są aż trzy diody LED i trzy przyciski. Zielona dioda LED od power jest podłączona do 5V za stabilizatorem i oznacza, że urządzenie jest zasilane. Czerwona dioda, już uwzględniona w nowym oprogramowaniu, zaczyna mrugać wtedy, gdy urządzenie sygnalizuje wykrycie jakiegoś błędu. Trzecia, żółta, jeszcze nie używana, będzie komunikować o wspólnej pracy arduino i ESP.
Przyciski mają następujące funkcje: pierwszy (jeszcze nie obsługiwany) będzie resetował urządzenie, drugi podpięty jest bezpośrednio pod sterowanie przekaźnika i dopóki jest przyciśnięty, pompa w zbiorniku działa, trzeci natomiast jest podłączony do arduino i wywołuje przerwanie, od którego zmieniany jest stan oświetlenia (załączone/wyłączone). Tutaj ważna uwaga: każdy typ arduino ma swoje wydzielone piny do możliwości działania z przerwaniami, na schematach oznaczone często jako „int” od ang. interrupt.

Przekaźniki są sterowane przy pomocy 12V DC dzięki tranzystorom kluczującym.
Oprogramowanie urosło i podzieliło się na kilka plików więc wrzuciłem je na repozytorium, o tutaj.
Chyba nikt nie chciałby przeglądać takiego softu w jednym pliku, to już byłby bałagan ograniczający możliwości, jakie daje nam język. Opiszę jeszcze zatem jakie są zalety korzystania z klas.
Wspominałem już o porządku; wiemy, co gdzie jest i za co jest odpowiedzialne. Co więcej, taki kod łatwo utrzymywać. Możemy łatwo wydzielić część softu i przenieść ją do innego rozwiązania, czy do innego projektu. Dzięki takim podziałom, możemy wykorzystać wszystkie zalety, jakie wynikają ze stosowania programowania zorientowanego obiektowo, np. widocznego podziału oprogramowania na warstwy, sensownego korzystania z wzorców projektowych czy tworzenia przejrzystych architektur.
Gdy już widzimy, że nasz program jest podzielony na klasy, czas opisać mechanizmy, które zostały dodane.
Korzystamy z przerwania (można oczywiście czekać w głównej pętli, ale jak się okazało u mnie, może to trwać ponad pół sekundy – taki czas oczekiwania może irytować jeśli chcemy szybko i łatwo zmienić stan). Warto poznać przerwania, bo jest to bardzo ważny mechanizm, którego będziemy używać także przy komunikacji z ESP – arduino może mieć nie tylko przerwania od pinów I/O, ale także od UARTa.
Nowa rzeczą jest też debug, czyli namierzanie możliwych problemów z działaniem lub błędów w naszym oprogramowaniu. Niestety, arduino nie daje nam takiego narzędzia bezpośrednio, więc w prosty sposób radzimy sobie sami, wyrzucając więcej informacji, żeby sprawdzać co się dzieje.
Wiadomo, że w wersji docelowej nie będziemy z tego korzystać – wtedy jedyne, co zmieniamy to zakomentowanie jednej linii.
//#define DEBUG
Nie musimy utrzymywać dwóch wersji oprogramowania, bo dysponujemy przełącznikiem kompilacji. Ja na razie działam w takiej wersji (póki nie ma komunikacji z ESP), bo podglądam czy szklarnia prawidłowo wykrywa wartości, które mogą być błędne oraz wszystkie wartości średnie i chwilowe. Większość wartości związanych z błędami podałem w pierwszej wersji w przybliżeniu. Pierwotne wartości niektórych liczników są oszacowane, po pewnym okresie obserwacji błędów i wartości pod naszym debugiem, można zbliżać te wartości do bardziej odpowiadających.
W kodzie znajduje się trochę komentarzy „TODO:” niektóre IDE już nawet reagują na ten specyficzny komentarz, ale chodzi o to, aby zawsze móc łatwo przeszukać kod po takiej frazie i znaleźć to, co jest jeszcze do zrobienia.
Już niedługo dodam komentarze, które będą zgodne z pewnymi standardami i o nich wspomnę przy najbliższym wpisie o szklarni.
Teraz do zrobienia została nam głównie komunikacja wszystkich urządzeń, choć jakby ktoś chciał, można na tym poziomie dodać tylko w loopie parę warunków i automatyczna szklarnia działa.
Jeśli macie pytania, znaleźliście w notce coś niezrozumiałego, lub macie jakieś pomysły i spostrzeżenia, piszcie! (;

Dodaj komentarz

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