Skocz do zawartości
Ważne ogłoszenie » Kliknij i sprawdź informacje o nowym forum! Czytaj dalej... ×
klimek13

Rolety i arduino

Recommended Posts

Witam, mam problem ze sterowaniem roletami. Założyłem dwa silniki do obu rolet, po dwie krańcówki na okno (góra i dół), zrobiłem sobie apke na androida i steruje tym przez bluetooth. Wszystko ogólnie działa, krańcóweczki wyłączają silnik gdy roleta sie opuści bądź podniesie. Ale jest jedno ale. Program jest dość prosty żeby nie powiedzieć banalny. Do przycisków w aplikacji przypisane są odpowiednio cyfry, 1, 2, 3, 4 i 0. Opuszczanie i podnoszenie rolety pierwszej to 1 i 2, zaś drugiej 3 i 4. Silniki zatrzymuje sie wysyłając 0. Mój problem polega na tym, że kiedy chcę sterować obiema roletami jednoczenie to raz działa wszystko, a innym razem kiedy włączam drugą rolete pierwsza przestaje działać. I w sumie właśnie tak powinno być bo program jest tak skonstruowany, że nie powinno sie dać sterować jednoczenie dwoma silnikami. Poniżej wklejam program. Jest ktoś w stanie powiedzieć co jest nie tak? Dodam że obie rolety działaja kiedy najpierw włączą tą drugą czyli wysyłam cyfre 3 a później pierwszą (cyfra 1).

int odebraneDane;

void setup () {
 Serial.begin(9600);
 pinMode(8, OUTPUT); //obroty w góre
 pinMode(9, OUTPUT); //obroty w dół
 pinMode(2, OUTPUT); //obroty w góre
 pinMode(3, OUTPUT); //obroty w dół
 pinMode(10, INPUT_PULLUP); // krańcówki
 pinMode(11, INPUT_PULLUP);
 pinMode(12, INPUT_PULLUP);
 pinMode(13, INPUT_PULLUP);
}

void loop() {
 if(Serial.available()>0) {
   odebraneDane=Serial.read();
 }
 if ((odebraneDane == '1') && (digitalRead(10) == HIGH)) {
   digitalWrite(8, HIGH);
   digitalWrite(9, LOW);
 }
 else if ((odebraneDane == '2') && (digitalRead(11) == HIGH)) {
   digitalWrite(9, HIGH);
   digitalWrite(8, LOW);
 }
 else if ((odebraneDane == '3') && (digitalRead(12) == HIGH)) {
   digitalWrite(2, HIGH);
   digitalWrite(3, LOW);
 }
 else if ((odebraneDane == '4') && (digitalRead(13) == HIGH)) {
   digitalWrite(3, HIGH);
   digitalWrite(2, LOW);
 }
 else {
   digitalWrite(8, LOW);
   digitalWrite(9, LOW);
   digitalWrite(2, LOW);
   digitalWrite(3, LOW);
 }
 delay(50);
}





Udostępnij ten post


Link to post
Share on other sites

Odłączyłem silniki i kiedy sprawdzam miernikiem to bez znaczenia jakie kombinacje zastosuje (mogę jedną opuszczac drugą podnosić) to miernik na wyjsciach do podłączenia silników pokazuje napięcie takie jakie powinno być. Podlacze silniki i chce opuścić obie rolety na raz, klikam przycisk od jednej rolety i leci w dół, klikam przycisk od drugiej i tez leci w dol ale pierwsza sie zatrzymuje. Kiedy zrobię odwrotnie czyli najpierw zaczne opuszczac drugą rolete a pozniej puerwsza to działa. Ale tez nie zawsze. Na odłączonych silnikach moge robic co chce i podaje napiecie jednocześnie na oba silniki. Obie opuszczam, obie podnoszę, jedną opuszczam drugą podnoszę i jest napięcie na wyjściu. Na podlaczonych silnikach wariuje. Dodam że zastosowany jest sterownil silnika l293d. Jeden silnik pobiera max 200mA pradu bo sprawdzalem miernikiem. To oba wezmą łącznie 400mA. Przy czym sterownik pozwala na max prad jednego silnika 600mA. Zgłupiałem totalnie. Jaki wplyw na działanie programu moze miec fakt czy silniki są odlaczone lub podłączone. Atmega wariuje na podlaczonych silnikach...

Udostępnij ten post


Link to post
Share on other sites

Spadek napięcia zasilania i restart mikrokontrolera.

Udostępnij ten post


Link to post
Share on other sites

Ale modul bluetooth, sterownik silnika i atmege mam podłączoną pod stabilizator 5V. Zasilanie silnikow mam z oddzielnego stabilizatora 8V wiec to na nim bedzie spadek raczej. Przy zasilaniu atmegi i kazdym innym zasilaniu mam kondensatory który wydaje sie powinny filtrować tego typu spadki napięć. Poza tym gdyby atmega sie zrestartowala to nie wiem czy dalej by ta druga roleta sie opuszczała. Dlaczego obie sie nie zatrzymują tylko jedna?

Udostępnij ten post


Link to post
Share on other sites

Pokaż schemat. Wtedy łatwiej będzie wyszukać przyczynę.

Udostępnij ten post


Link to post
Share on other sites

Oto schemat. Wydaje mi sie że powinno byc widac wszystko.

<a href=d27e28668784.png' alt='d27e28668784.png'

__________

Komentarz dodany przez: Treker

Udostępnij ten post


Link to post
Share on other sites

To jeszcze dwa pytania. Co to za silniki, bo te 200mA to mi się wydaje ciut mało, i z czego zasilasz cały układ.

Udostępnij ten post


Link to post
Share on other sites

Silniczki to zwykłe serwa pelnoobrotowe 360 stopni. Układ zasilany jest zasilaczem 12v o wydajności do 3A.

Udostępnij ten post


Link to post
Share on other sites

Zwykłe, czyli takie:

https://botland.com.pl/serwa-praca-ciagla-360/4689-serwo-feetech-fs90r-micro-praca-ciagla-360-stopni.html

takie:

https://botland.com.pl/serwa-praca-ciagla-360/1882-serwo-powerhd-ar-1201mg-praca-ciagla.html

czy może takie:

https://botland.com.pl/serwa-praca-ciagla-360/7621-pololu-xyzrobot-smart-servo-a1-16-praca-ciagla-25kgcm.html

Bo serwo, serwu nierówne. Nawet to najsłabsze w zatrzymaniu (a więc i w rozruchu) może pobrać ponad 700mA.

Edit: Zaraz. Ale jak to serwa? Przez mostek?

Udostępnij ten post


Link to post
Share on other sites

Może te wszystkie elementy umiescilem zbyt blisko siebie na płytce i są jakies zakłócenia. Bo nie wspomnialem o tym ale cały sterownik jest na plytce pcb. Wytrawilem, polutowalem i myślałem że bedzie spoko. Szkoda że nie sprawdzilem tej sprawy z dwoma roletami jednocześnie jak jeszcze miałem caly uklad na płytce stykowej. Sprawdzalem wszystkie ścieżki i zwarcia nie ma. Wszedzie na każdym pinie jest napięcie takie jakie powinno byc w danej chwili. Juz zgłupiałem w tej chwili. Dodam jeszcze że ten stabilizator na 5v bardzo się grzeje mimo że płynący przez niego prąd jest raczej niewielki bo zasila on tylko modul bluetooth, atmege i sterownik silnika a te elementy nie pobierają duzo prądu.

[ Dodano: 12-03-2018, 21:50 ]

Serwo cos pokroju tego z drugiego przykładu. Tak przez mostek bo wywalilem tą płytkę ze środka i przylutowałem przewody. Teraz serwo pracuje jak zwykly silnik.

Udostępnij ten post


Link to post
Share on other sites

No tak. Ale musi zbić napięcie z 12V na 5. Czyli wydzielać się musi na nim więcej mocy niż zużywają wszystkie zasilane przez niego elementy razem wzięte.

Edit: To takie serwo spokojnie na rozruch może ponad 1A pobrać.

Udostępnij ten post


Link to post
Share on other sites

Mierzylem prąd i podczas opuszczania rolety serwo pobiera okolo 170 mA zaś przy podnoszeniu gdy ma ciężej okolo 200 mA z małym hakiem. Dodam że akurat przy podnoszeniu obu na raz częściej działa ta opcja niz przy opuszczaniu. Poza tym przeciez gdyby atmega sie resetowala przez spadki napiec to oba silniczki by sie zatrzymały.

Udostępnij ten post


Link to post
Share on other sites

Problem może być nie po stronie atmegi, tylko mostka. To co mi przychodzi do głowy to spadek napięcia na nim. Silniki nigdy nie są identyczne, więc być może jeden pożera większość prądu i pracuje a drugi nie daje rady ruszyć. Mierzyłeś napięcie na silnikach? Może tu jest pies pogrzebany?

Udostępnij ten post


Link to post
Share on other sites

No to załóżmy ze pobiera przy rozruchu ten jeden amper. W nocie katalogowej mostka jest info że wytrzymuje chwilowy prąd 1.2 ampera. No ale załóżmy że nie wytrzymuje tyle, to nie powinien sie spalić mostek? Jaki to może miec wpływ na to czy mikrokontroler daje sygnal czy nie? Byc może masz racje ale chciałbym to zrozumieć. Bo dalej nie widze związku tych faktów.

[ Dodano: 12-03-2018, 22:11 ]

Tzn mierzylem prad i oba pobierają praktycznie tyle samo. Napiecie w trakcie pracy jednego silnika jest 6.2 V bo na mostku jest spadek. No to ok. Przykladowo mostek nie wyrabia i jest na nim taki spadek napiecia że drugi silnik sie zatrzymuje. Tylko dlaczego gdy uruchamiam je w innej kolejności to działa. Mało tego, sprawdzałem napięcie na wyjsciu z atmegi gdzie wychodzi sygnał do mostka i właśnie gdy uruchamiam silnik drugi to na pinie gdzie jest sygnal pierwszego silnika z 5V robi sie 0V. Tego nie mogę zrozumiec. Bo to ze mostek moze nie wyrabiac to daloby sie wytlumaczyc.

Udostępnij ten post


Link to post
Share on other sites

Czy przy sterowaniu, przed cyfrą nie pojawia się jakiś znak, który zatrzymywałby oba silniki?

Spróbuj zastąpić ostatnie "else" warunkiem wystąpienia "0".

Tylko wtedy nie zadziała krańcówka...

Udostępnij ten post


Link to post
Share on other sites

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

×