Już jakiś czas temu wpadłem na pomysł aby spróbować wykonać czujnik prędkości i kierunku wiatru bez części ruchomych. Trochę poszukałem w internecie ale nie znalazłem nic co spełniałoby moje oczekiwania. Pewnego dnia wpadł mi do głowy pomysł na wykorzystanie belki tensometrycznej. Przeszukałem internet i nie znalazłem podobnego rozwiązania. Gdzieś na forum wyczytałem, że ponoć podobnej konstrukcji czujnik wykorzystany został w jakimś łaziku marsjańskim ale nie udało mi się tego zweryfikować. Ponieważ nigdy nie miałem do czynienia z tymi czujnikami postanowiłem zamówić jedną sztukę na próbę. Największą niewiadomą było to czy belka może mierzyć siły w dwie strony czy tylko w jedną. Okazało się, że bez problemu można zmusić HX711 aby wykonał poprawny pomiar bez względu na to z której strony zostanie przyłożona siła.
Tak więc po domówieniu kolejnej belki mogłem złożyć układ testowy. Koncepcja była dość prosta. Dwa bloczki tensometryczne skręcone razem ale obrócone względem siebie o 90 stopni tak aby odczyt można było przedstawić jako współrzędne x,y.
Przystąpiłem do pisania programu ale pierwsze odczyty nie napawały optymizmem. Owiewające powietrze wprowadzało czujnik w drgania więc wyniki pomiarów były mocno rozrzucone. Próbowałem różnych algorytmów, nawet mocno skomplikowanych ale nie było znaczącej poprawy. W końcu postanowiłem poeksperymentować i tak udało mi się stworzyć algorytm który mnie usatysfakcjonował. Działa on w ten sposób, że sortuje tablicę pomiarów, wylicza średnią dla każdego kolejnego minimum i maksimum. W ten sposób otrzymujemy tablicę wyników o rozmiarze połowy tablicy pomiarów i z tego możemy obliczyć średni wiatr. Nie będę się wdawał w szczegóły. Każdy zainteresowany może zagłębić się w kod.
Ale sam algorytm pomiarowy nie czyni czujnika zdatnym do użytku. Z góry założyłem, że problemem mogą być trzy rzeczy:
1: problem z nierównością nacisku na każdą z belek gdyż siła przenoszona jest z jednej belki na drugą
2. problem z kalibracją w trakcie pracy czujnika gdyż różne temperatury będą powodowały przestawienie punktu zerowego układu
3. wibracje wywoływane przez wiatr
Pierwszy problem okazał się nie trafiony. Odczyt w obydwu osiach jest proporcjonalny więc nie trzeba było wykonywać żadnych przeliczeń.
Drugi z problemów rozwiązałem w taki sposób, że czujnik sprawdza czy wiatr wieje i jeśli nie to przeprowadza kalibrację układu. To rozwiązanie nie jest idealne ale na warunki w jakich czujnik jest zamontowany jest w zupełności wystarczające. Niestety w warunkach ciągłego wiatru nie byłoby możliwości wykonać kalibracji. Można by pokusić się o zamontowanie jeszcze jednej samej belki i kalibrować układ według wskazań belki porównawczej (na którą nie działają żadne siły).
Trzeci problem jest najgorszy i nie został w pełni rozwiązany. Udało mi się dostosować algorytm filtrowania pomiarów tak aby drgania nie powodowały żadnych zakłóceń w odczycie ale zauważyłem, że sporadycznie układ potrafi wpaść w tak duże drgania, że pomiar obarczony jest dużym błędem. Mam pomysł aby zastosować jeszcze tłumik drgań w postaci małej kulki zamontowanej na rurce z kulą pomiarową.
Zaimplementowałem ten czujnik do mojej stacji pogodowej i jest on częścią czujnika zewnętrznego który mierzy również temperaturę, wilgotność, ciśnienie i natężenie światła. Bazą tego czujnika jest STM32F103C8T6 zasilany jednym ogniwem 18650 wyposażony w transciever NRF24L01. Układ wykonuje pomiary, wysyła dwie paczki danych do serwera co zajmuje mu ok 1200 ms, wykonuje kalibrację czujnika wiatru gdy jest potrzebna (kosztem kolejnych 600ms) i wyłącza się na kolejne 5 minut.
Pomiary można odczytać poprzez stronę internetową:
GitHub: https://github.com/KoSik-prog/STM32F103_WindSensor.git
CAD F360: https://a360.co/3vDTyaC
Fajne? Ranking DIY