Serwo nie współpracuje z ESP8266 - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Serwo nie współpracuje z ESP8266 (/watek-serwo-nie-wsp%C3%B3%C5%82pracuje-z-esp8266) |
Serwo nie współpracuje z ESP8266 - Krismir102 - 07-09-2021 Witajcie. Z góry przepraszam za mój brak doświadczenia ale to moja pierwsza próba sterowania serwem z NodeMCU V2. Już na samym starcie trafiłem na problem, którego nie rozumiem. Prostym kodem chcę sterować serwem za pomocą potencjometru, lecz serwo przemieszcza się tylko w zakresie ok 90 stopni (mniej więcej od 45 do 135). To samo się dzieje gdy wgram przykład "Swap" z biblioteki Servo.h. Nie rozumiem co zrobiłem źle, prądu raczej mu nie brakuje, masy są wspólne, potencjometr podpinałem pod 5V jak i 3,3V, a serwo sterowałem również poprzez tranzystor i podłączałem na różne piny, kopiowałem przykłady i schematy z internetu... ciągle to samo. Na serial monitorze wartości z potencjometru pokazuje mi 13-1024, czyli raczej ok. Zmienna kat także operuje między 0 i 180. Podłączałem też serwo MG90 i zachowywało identycznie. Po podpięciu wszystkiego do Arduino Uno i wgraniu tego samego kodu wszystko działa jak należy więc to raczej coś z NodeMCU. Zastanawiałem się czy to może biblioteka Servo.h źle współpracuje z ESP8266 ale we wszystkich przykładach jakie znalazłem ludzie ją wykorzystują z sukcesem. Instalowałem starsze wersje Servo.h ale też nie pomogło. Używam NodeMCU V2, serwo MG995 oraz potencjometr 10k. Kod: #include <Servo.h> RE: Serwo nie współpracuje z ESP8266 - Jarewa0606 - 08-09-2021 Nie ma idealnego serwa w sensie że nie każde jest robione tak samo, każde ma +i- odchyłki a programy i biblioteki tego nie uwzględniają.. To że do biblioteki wysyłasz 0-180st wcale nie oznacza że tyle się obróci... Musisz skorygować ustawić min/max zasięg.. Czyli timer 900-2100ms tak jak pisałem wyżej 900ms nie zawsze jest 0st a 2100 to 180st. RE: Serwo nie współpracuje z ESP8266 - Krismir102 - 08-09-2021 Problem rozwiązany. Okazuje się, że wszystko działa jak należy tylko że biblioteka do serwa z środowiska ESP podaje ZBYT DOKŁADNY sygnał PWM. Odkryłem to analizatorem stanów logicznych, którym sprawdziłem podawany sygnał PWM przez Node i Arduino Uno. Przypominam, że na Node serwo poruszało się w ograniczonym zakresie, a na Uno w pełnym. Biblioteka z Node generowała wręcz wzorowy sygnał PWM, w którym najkrótszy czas wypełnienia wynosił 1 ms, a najdłuższy 2 ms i wszystko z dokładnością do setnych części ms. Biblioteka z Uno generowała sygnał PWM o najkrótszym czasie wypełnienia 0,5 ms, a najdłuższym ok 2,4 ms!! Przynajmniej obie zgadzają się co do okresu 20 ms. Zainstalowałem starszą bibliotekę środowiska ESP8266 i nagle wszystko zaczęło działać. Po odczytaniu przebiegu PWM ukazało mi się, że teraz mój Node, na starszej bibliotece, generuje sygnał o wypełnieniu w zakresie od 0,5 ms do 2,4 ms w okresie 20 ms. W takim zakresie wypełnienia 1 ms dla mojego serwa to ok 75 stopni, a 2 ms to ok 150 stopni. I rzeczywiście mniej więcej w takim stopniu mi się przemieszczał. Szkoda że dokumentacja na jaką trafiłem podaje prawidłowe wypełnienia jako 1 ms i 2 ms... Nie wiem jak z innymi modelami serw ale serwa Tower Pro SG90 oraz MG995 wymagają biblioteki środowiska ESP8266 wersji 2.7.4 lub starszej. Wersje 3.0 i nowsze generują nieodpowiedni sygnał PWM dla tych serw. Na szczęście na nowszych jest odpowiednie polecenie więc nie trzeba instalować starszych. Należy użyć polecenia: servo.attach(pin, min, max); Gdzie za min wpisujemy 544, a za max 2400. Pewnie w serwie za 200 zł i jakiś najnowszych tego problemu nie będzie ale moje za trzy dyszki z allegro ma takie wymagania [attachment=1144] RE: Serwo nie współpracuje z ESP8266 - Jarewa0606 - 08-09-2021 W każdym serwie jest ten problem. Dlatego potrzebna jest kalibracja... servo.attach(pin, min, max); Gdzie za min wpisujemy 544, a za max 2400. I to właśnie wykonałeś... |