Planuję mierzyć poziom wody w studni o głębokości około 10 m przy maksymalnym poziomie wody do 5 m. Moim planem jest użycie czujnika ultradźwiękowego HC SR04 do pomiaru głębokości, przesłanie go przez ZigBee do Raspberry Pi w moim domu.
Jak omówiono w poprzednim pytaniu , muszę wybrać mikrosterownik, aby połączyć czujnik ultradźwiękowy i moduł ZigBee.
Parametry do wyboru to:
Niska moc: Planuję uruchomić to na baterii, więc niskie zużycie energii jest priorytetem. Na razie nie mam żadnych celów dotyczących zużycia energii ani dni między wymianami baterii, ani nawet której baterii użyć. Ponieważ jest to bardziej projekt edukacyjny i jest w moim domu, jestem elastyczny, ale niższe zużycie energii jest lepsze.
Niski koszt: To dla mnie projekt edukacyjny i nie chcę wydawać na to skandalicznej kwoty, więc niższy koszt jest lepszy.
Praca wewnątrz studni: Cały projekt będzie działał od wewnątrz studni i będzie narażony na ostre światło słoneczne i deszcz. Zapewnię jednak dobrą sprawę i ochronę.
Łatwy do zaprogramowania.
Wybrałem ZigBee, ponieważ jest prosty, spełnia mój przypadek użycia i ma niską moc. Ale moim wymaganiem jest transport danych z czujnika i jestem otwarty na inne transporty. Odległość od mojej studni do Raspberry Pi wynosi około 6 metrów ze ścianą pośrodku. Planuję mierzyć głębokość wody co 10 minut i dwa razy na minutę, gdy pompa wodna pracuje (około 20 minut dziennie).
Odpowiedzi:
Ogólny proces wyboru mikrokontrolera.
Podsumuj swoje wymagania względem mikrokontrolera. Na przykład w tym przypadku:
Możesz do tego dogadać się z 8-pinowym kontrolerem, co może wymagać użycia pinów programatora również do celów ogólnych.
Wybierz wymaganą wydajność procesora i wymagania dotyczące pamięci . Czy wystarczy użyć 8-bitowego MCU, czy zamiast tego potrzebujesz 32-bitowego? Jakie prędkości taktowania procesora są wystarczające? Wystarczy dziesiątki MHz lub 1 MHz? Ile potrzeba pamięci programu, pamięci RAM i ROM?
Biorąc pod uwagę opisaną aplikację, nie potrzebujesz wysokiej wydajności obliczeniowej. Prawdopodobnie wystarczy 8-bitowy kontroler (choć nie będzie znacznie tańszy niż 32-bitowy, więc możesz tu zdecydować o cenie).
Niski pobór mocy . Gdy nie ma to większego znaczenia, prawdopodobnie możesz dogadać się z prawie każdym rodzajem kontrolera, używając jego trybu niskiej mocy z najniższym napięciem zasilania i częstotliwością zegara systemowego. Jeśli jest to ważniejsze, możesz zacząć zawężać listę wyszukiwania, zaczynając od dedykowanych rdzeni MCU o niskiej mocy, takich jak (rdzenie ARM® Cortex®-M0 lub M0 + CPU). Zwykle arkusze danych zawierają tabele dla większości trybów niskiej mocy / częstotliwości VCC / SysClk , lepsze będą wyświetlać również zużycie każdego urządzenia peryferyjnego.
Narzędzia programistyczne . Uważam to za bardzo ważny aspekt. Dedykowane narzędzia programistyczne mogą kosztować fortunę, więc zwykle trzymam się MCU, dla których już miałem programistów. Po przejściu na inną rodzinę lub markę dobrze jest zainwestować w płytę programistyczną, która ma wbudowany programator, którego można później użyć do zaprogramowania własnych kart. Zasadniczo zawsze najpierw sprawdź, ile będzie kosztowało pobieranie programów do mikrokontrolera.
Jak zauważył @Sean w komentarzach, możliwym i opłacalnym rozwiązaniem byłoby poszukiwanie takich modułów RF, które są dostarczane ze zintegrowaną, programowalną aplikacją MCU, która może uruchamiać oprogramowanie układowe również podczas obsługi części komunikacyjnej RF. Takie moduły istnieją dla BLE, WiFi i ZigBee i ewentualnie dla wielu innych technologii.
Ponadto, o tym, jak MCU przetrwa w studni. Wszystko sprowadza się do obudowy, którą dostaniesz dla urządzenia. Na przykład nie będzie miało większego znaczenia, który MCU wybierzesz, jeśli obudowa nie będzie w 100% wodoodporna.
TL; DR; Oto część dotycząca konkretnego produktu.
Możesz wybrać ATtiny25, który kosztuje Farne 0,83 $ / 1 sztukę . 8-bit, 8-pin, więc nie zajmie dużo miejsca. W trybie wyłączania pobiera 0,2 μA z wyłączonym watchdog, przy 3 V. 2-4 μA, jeśli watchdog jest włączony. Jest kompatybilny z Arduino, więc programowanie nie kosztuje dużo (programator USBasp lub AVRdude kosztuje około 2 $ na eBayu). ( Pamiętaj, że : powinieneś użyć biblioteki Arduino Software Serial do interfejsu modułu komunikacyjnego RF, ponieważ ten MCU ma tylko SPI sprzętowo). W sumie jest mały, tani, przy stosunkowo niskim zużyciu energii, ale UART z bitami komplikuje to . Ma pamięć programu 2 kB, która powinna ci wystarczyć.
Lub zastosuj ARM Cortex M0, który zużywa 2 μA w trybie gotowości i 5 μA w trybie zatrzymania. Takim MCU jest na przykład STM32F030F4, który kosztuje 1,09 $ / 1 sztukę . Jest to mocniejszy 32-bitowy kontroler z maksymalną częstotliwością taktowania systemu 48 MHz, ale jak widać tylko za + 0,2 $. Dostarczany jest z pamięcią programu 16 kB, znacznie więcej niż wystarcza do wykonania tego prostego zadania. Ma SPI, UART, I2C i wiele innych urządzeń peryferyjnych. Programowanie będzie kosztować więcej, dedykowany programista kosztuje 20 $ w Farnell. Moim zdaniem nie warto. Zamiast tego możesz zainwestować w płytę programistyczną dla rodziny F0, która ma wbudowany programator (ST-LINK) . STM32F0Discovery Board kosztuje ~ 10 $. Za pomocą tej płyty możesz rozpocząć prototypowanie i użyć go jako programisty później.
źródło
Patrząc na łatwość programowania i niski koszt, prawdopodobnie zacznę od jakiegoś modułu Arduino (lub taniego klonu). Kod czujnika ultradźwiękowego już istnieje, podobnie jak przykładowy kod dla ZigBee, na przykład przy użyciu modułów Digi XBee. W tym drugim przypadku podłączasz XBee do portu szeregowego, a po nawiązaniu połączenia ze starym, czcigodnym interfejsem poleceń „AT”, masz kanał typu punkt-punkt, z którego możesz wysyłać dowolny tekst w dół (do Raspberry Pi ). ZigBee nie jest najtańszym rodzajem komunikacji bliskiego zasięgu, ale moduły XBee spadły w cenach realnych w ciągu ostatnich 5 lat.
Wiem, że niektórzy ludzie mają problem z językiem opartym na C / C ++ używanym na Arduino, ale w tym przypadku w dużej mierze łączylibyście już istniejące skrypty innych użytkowników.
Jeśli rozejrzysz się za „trybem uśpienia Arduino”, znajdziesz przykłady tego, jak ustawić Arduino w tryb niskiego poboru mocy i budzić się sporadycznie, aby dokonać odczytu, przekazać go, a następnie ponownie przejść do trybu uśpienia.
źródło