H4X Napisano Grudzień 14, 2016 Udostępnij Napisano Grudzień 14, 2016 Orientuje się ktoś z forumowiczów co może być źle w umieszczonym kodzie ? Chodzi o to że po otrzymaniu litery "o" wszystko jest jak należy (silnik "A" kręci się chwilę w lewo, gdy skończy silnik "B" zaczyna kręcić się w lewo a gdy skończy podprogram kończy działanie), gorzej gdy wyślę "z", tutaj jest problem gdyż silnik "A" kręci się w prawo a gdy skończy silnik "B" nie robi nic, natomiast silnik "A" dalej zaczyna się kręcić z tym że wszystko przygasa, tzn. układ zasilania oraz kontroler HG7881. Wydaje mi się że jest tu jakiś problem z klamrami otw. i zamyk. gdyż wcześniej przy wysyłaniu "o" miałem tak samo ale jakimś cudem to naprawiłem a tutaj nie wiem jak to zrobić. #include <SoftwareSerial.h> SoftwareSerial Digit(10,11); int BluetoothData; int Zamek_Kierunek = 8; // Do HG7881, wyjście A-1A int Zamek_Predkosc = 9; // Do HG7881, wyjście A-1B PWM~ int Naped_Kierunek = 7; int Naped_Predkosc = 6; void setup() { Digit.begin(9600); pinMode(Zamek_Kierunek, OUTPUT); pinMode(Zamek_Predkosc, OUTPUT); pinMode(Naped_Kierunek, OUTPUT); pinMode(Naped_Predkosc, OUTPUT); } void loop() { if (Digit.available()){ BluetoothData=Digit.read(); { if(BluetoothData=='o') { analogWrite(Zamek_Kierunek, LOW); //set motor direction to "X" for(int i=50; i<=55; i++) { analogWrite(Zamek_Predkosc, i); delay(40); } delay(2000); analogWrite(Zamek_Kierunek, LOW); analogWrite(Zamek_Predkosc, LOW); delay(1000); analogWrite(Naped_Kierunek,LOW); for(int j=50; j<=55; j++) { analogWrite(Naped_Predkosc, j); delay(40); } delay(2500); analogWrite(Naped_Kierunek, LOW); analogWrite(Naped_Predkosc, LOW); delay( 1000 ); } } { if(BluetoothData=='z') { analogWrite(Zamek_Kierunek, 255); for(int i=50; i<=55; i++) { analogWrite(Zamek_Predkosc,odwrocWartoscZamek (i)); delay(40); } delay(2000); analogWrite(Zamek_Kierunek, LOW); analogWrite(Zamek_Predkosc, LOW); delay(1000); analogWrite(Naped_Kierunek,255); for(int j=50; j<=55; j++) { analogWrite(Naped_Predkosc,odwrocWartoscNaped (j)); delay(40); } delay(2500); analogWrite(Naped_Kierunek, LOW); analogWrite(Naped_Predkosc, LOW); delay( 1000 ); } } //do if DaneBluetooth "z" } // do if Digit available } //do void loop int odwrocWartoscZamek(int zmienna_1) { return 255 - zmienna_1; } int odwrocWartoscNaped(int zmienna_2) { return 255 - zmienna_2; } Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 14, 2016 Udostępnij Grudzień 14, 2016 Żartujesz sobie? Podwiń rękawy, poświęć 15 minut i przepisz kod tak byś widział wcięcia i rozumiał co się kiedy wykonuje. Jakie polecenie edytora służy do wcinania zaznaczonych linii? No właśnie, to go użyj. Masz bałagan we własnym programie kodzie i nie wstydzisz się tego pokazywać? Jak chcesz dalej rozwijać program z taką kaszaną? Po każdej zmianie będziesz prosił o formatowanie czy tylko raz na tydzień, po większych przeróbkach? Żałosne. Spróbuj na jakimś portalu poetyckim, nie wiem, może tam ludzie mają czas na przesuwanie linijek w lewo i prawo. Link do komentarza Share on other sites More sharing options...
H4X Grudzień 14, 2016 Autor tematu Udostępnij Grudzień 14, 2016 No i po co od razu wylewasz swoje frustracje w moją stronę ? Nie każdy rodzi się geniuszem programowania jak Ty więc mógłbyś oszczędzić sobie tekstów typu:"Po każdej zmianie będziesz prosił o formatowanie czy tylko raz na tydzień, po większych przeróbkach? Żałosne. " Trzeba było napisać żebym poprawił linijki kodu a nie zaraz wyjeżdżać z portalem poetyckim, po prostu o tym zapomniałem. Skoro wiesz jakie polecenie wcina linie to mógłbyś chociaż napisać je koledze który zaczyna a nie pokazywać jakie to wszystko jest chu.. itp. Więc udzielisz mi kilka porad jak to uporządkować czy dalej będziesz pisał posty jak wyżej ? [ Dodano: 14-12-2016, 16:37 ] Co jeszcze muszę poprawić? #include <SoftwareSerial.h> SoftwareSerial Digit(10,11); int BluetoothData; int Zamek_Kierunek = 8; // Do HG7881, wyjście A-1A int Zamek_Predkosc = 9; // Do HG7881, wyjście A-1B PWM~ int Naped_Kierunek = 7; // Do HG7881, wyjście B-1A int Naped_Predkosc = 6; // Do HG7881, wyjście B-1B PWM~ void setup() { Digit.begin(9600); pinMode(Zamek_Kierunek, OUTPUT); pinMode(Zamek_Predkosc, OUTPUT); pinMode(Naped_Kierunek, OUTPUT); pinMode(Naped_Predkosc, OUTPUT); } void loop() { if (Digit.available()){ BluetoothData=Digit.read(); if(BluetoothData=='o') { analogWrite(Zamek_Kierunek, LOW); //set motor direction to "X" for(int i=50; i<=55; i++) { analogWrite(Zamek_Predkosc, i); delay(40); } delay(2000); analogWrite(Zamek_Kierunek, LOW); analogWrite(Zamek_Predkosc, LOW); delay(1000); analogWrite(Naped_Kierunek,LOW); for(int j=50; j<=55; j++) { analogWrite(Naped_Predkosc, j); delay(40); } delay(2500); analogWrite(Naped_Kierunek, LOW); analogWrite(Naped_Predkosc, LOW); delay( 1000 ); } if(BluetoothData=='z') { analogWrite(Zamek_Kierunek, 255); for(int i=50; i<=55; i++) { analogWrite(Zamek_Predkosc,odwrocWartoscZamek (i)); delay(40); } delay(2000); analogWrite(Zamek_Kierunek, LOW); analogWrite(Zamek_Predkosc, LOW); delay(1000); analogWrite(Naped_Kierunek,255); for(int j=50; j<=55; j++) { analogWrite(Naped_Predkosc,odwrocWartoscNaped (j)); delay(40); } delay(2500); analogWrite(Naped_Kierunek, LOW); analogWrite(Naped_Predkosc, LOW); delay( 1000 ); } } // do if Digit available } //do void loop int odwrocWartoscZamek(int zmienna_1) { return 255 - zmienna_1; } int odwrocWartoscNaped(int zmienna_2){ return 255 - zmienna_2; } Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 14, 2016 Udostępnij Grudzień 14, 2016 Zamiast jęczeć trzeba było wziąć się za kod samodzielnie i pokazać coś porządnego. Nie Ty jeden zaczynasz i nie Ty jeden prosisz o rady, ale rzadko kto stwierdza, że nie rozumie działania swojego programu z powodu niechlujstwa w formatowaniu. Przyznasz, że to marny start na Forum. Za miesiąc będziesz się tego wstydził.. Niemniej jednak musisz się przyłożyć bardziej. Nawet ja - żaden tam orzeł z programowania - wciąż widzę w Twoim programie dziwne fragmenty. Np. (chyba?) zbędne bloki w nawiasach klamrowych oraz nadal błędnie powcinane fragmenty. Formatowanie wcięć ma m.in. pokazać które linie należą do wnętrza których instrukcji blokowych typu if, for czy while. A tu mamy wiele poziomów przesunięć trochę losowych. Jeżeli tak rozumiesz działanie swojego programu jak go powcinałeś, to nic dziwnego, że masz kłopoty. Czekamy na wersję 3.0 🙂 --------- EDIT: Jeżeli w Twoim edytorze wygląda to inaczej/lepiej, spróbuj wrzucić program jako plik załącznika do postu. Być może czcionką służącą do pokazywania kodu na forum w tagach "code" powinna być jakaś monospaced. EDIT2: Nie jest dobrą praktyką edycja postów co do których są uwagi, bez żadnych opisów tych zmian. Wygląda jakbyś zacierał ślady a krytyka zawarta w następnych postach idzie w powietrze. Naprawdę lepiej będzie jeśli poprawki będziesz wrzucał w kolejnych postach. Ktoś czytający kiedyś ten wątek będzie wtedy rozumiał rozwój dyskusji i ewolucję kontrowersyjnego kodu. W obecnej formie, po Twoich ostatnich zmianach będzie zdziwiony czego się czepiam. Co z tego, że Ty wiesz - nie jesteś tu sam. Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
H4X Grudzień 14, 2016 Autor tematu Udostępnij Grudzień 14, 2016 Gwoli wyjaśnienia: "ale rzadko kto stwierdza, że nie rozumie działania swojego programu z powodu niechlujstwa w formatowaniu. Przyznasz, że to marny start na Forum. Za miesiąc będziesz się tego wstydził.. " Niechlujstwem bym tego nie nazwał tylko po prostu zapomniałem o wcięciach gdyż programować się nie uczyłem a tak wydawało mi się że lepiej to widzę. Jednak się myliłem gdyż wcięcia dużo pomagają. Start na forum nie ma dla mnie znaczenia gdyż nie przywiązuję do tego wagi ze względów takich iż dopiero zaczynam nie jest dla mnie ważne w jakim stylu. Każdy może palnąć głupotę choćby był nie wiadomo jak mądry, oczywiście to moja opinia i pewnie za często się to nie zdarza. A co do wstydu to puszczę to między wierszami i nie będę się do tego odnosił gdyż mógłbym być źle odebrany. Poprawiam to powoli ale jak na razie nie wiem gdzie robię błąd. Na pewno niepotrzebne były klamry przy całych instrukcjach if BtData"o" oraz if BtData"z", usunąłem je. Był błąd także przy if BtData"z" gdyż tutaj silnik B ma działać pierwszy następnie A, a wcześniej było tak jak przy BtData"o". Co do formatowania kodu niezbyt wiem gdzie wcięcia są źle, zrobiłem tak jak rozumiałem działanie kodu. Co do wersji 3.0 to nie wiem czy szybko ona nadejdzie gdyż teraz jest problem taki iż przy BtData"z" silnik A nie wykonuje obrotów i od razu wszystko przygasa. Na razie więc wersja 2.0 v1 #include <SoftwareSerial.h> SoftwareSerial Digit(10,11); int BluetoothData; int Zamek_Kierunek = 8; // Do HG7881, wyjście A-1A int Zamek_Predkosc = 9; // Do HG7881, wyjście A-1B PWM~ int Naped_Kierunek = 7; // Do HG7881, wyjście B-1A int Naped_Predkosc = 6; // Do HG7881, wyjście B-1B PWM~ void setup() { Digit.begin(9600); pinMode(Zamek_Kierunek, OUTPUT); pinMode(Zamek_Predkosc, OUTPUT); pinMode(Naped_Kierunek, OUTPUT); pinMode(Naped_Predkosc, OUTPUT); } void loop() { if (Digit.available()){ BluetoothData=Digit.read(); if(BluetoothData=='o') { analogWrite(Zamek_Kierunek, LOW); //set motor direction to "X" for(int i=50; i<=55; i++) { analogWrite(Zamek_Predkosc, i); delay(40); } delay(2000); analogWrite(Zamek_Kierunek, LOW); analogWrite(Zamek_Predkosc, LOW); delay(1000); analogWrite(Naped_Kierunek,LOW); for(int j=50; j<=55; j++) { analogWrite(Naped_Predkosc, j); delay(40); } delay(2500); analogWrite(Naped_Kierunek, LOW); analogWrite(Naped_Predkosc, LOW); delay( 1000 ); } if(BluetoothData=='z') { analogWrite(Naped_Kierunek, 255); for(int j=50; j<=55; j++) { analogWrite(Naped_Predkosc,odwrocWartoscNaped (j)); delay(40); } delay(2500); analogWrite(Naped_Kierunek, LOW); analogWrite(Naped_Predkosc, LOW); delay(1000); analogWrite(Zamek_Kierunek,255); for(int i=50; i<=55; i++) { analogWrite(Zamek_Predkosc,odwrocWartoscZamek (i)); delay(40); } delay(2000); analogWrite(Zamek_Kierunek, LOW); analogWrite(Zamek_Predkosc, LOW); delay( 1000 ); } } // do if Digit available } //do void loop int odwrocWartoscNaped(int zmienna_2){ return 255 - zmienna_2; } int odwrocWartoscZamek(int zmienna_1) { return 255 - zmienna_1; } Byłbym zapomniał, na forum jak i na moim edytorze nie ma różnicy w formatowaniu. [ Dodano: 14-12-2016, 17:21 ] Nie jest dobrą praktyką edycja postów co do których są uwagi, bez żadnych opisów tych zmian. Wygląda jakbyś zacierał ślady a krytyka zawarta w następnych postach idzie w powietrze. Naprawdę lepiej będzie jeśli poprawki będziesz wrzucał w kolejnych postach. Ktoś czytający kiedyś ten wątek będzie wtedy rozumiał rozwój dyskusji i ewolucję kontrowersyjnego kodu. W obecnej formie, po Twoich ostatnich zmianach będzie zdziwiony czego się czepiam. Co z tego, że Ty wiesz - nie jesteś tu sam. Nie pomyślałem o innych w taki sposób. Nie chciałem po prostu nawalać po 10 razy zmienionego kodu gdyż dość dużo razy to poprawiałem. [ Dodano: 14-12-2016, 17:32 ] Możliwe że nie do końca rozumiem ten kod jednak trochę miesza mi to iż pierwszy if działa bez problemy a drugi chodź (według mnie) jest taki sam, nie chce działać poprawnie. Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 14, 2016 Udostępnij Grudzień 14, 2016 To pierwsza lekcja za nami: piszesz tak by wcięcia oddawały strukturę programu. Cieszę się, że jakieś babole znalazłeś. Jeżeli coś tam Ci wciąż przygasa a nie widać oczywistej przyczyny w kodzie, to: 1. Po pierwsze zmierz zasilanie układu. Być może źródło zasilania (co to jest?) jest zbyt obciążone i nie daje rady. Może któreś wyjście któregoś mostka jest zwarte do masy czy Vcc i dopiero jego załączenie powoduje zwarcie. 2. Napisz prostszy program, bez żadnego BT: prosta pętla testująca jeden, potem drugi kierunek pracy jakiegoś - tylko jednego - napędu. Na początek np. tylko start-praca 1s-stop lub rozpędzanie-hamowanie. Potem drugi napęd itd aż objedziesz wszystkie przypadki we wszystkich kierunkach. Wtedy masz pewność, że przynajmniej sprzęt działa. Jeżeli coś nie idzie, masz prosty przypadek do sprawdzenia i pomiarów. Pamiętaj: tylko jeden problem na raz, a program buduj przyrostowo. Nie staniesz wtedy przed mnóstwem linii kodu w których nie wiadomo co może być źle. Pisząc i testując po kolei małe funkcje które robią proste rzeczy zaczynasz "obrastać" w sprawdzone fragmenty z których za chwilę układasz większą całość. Korzystaj z wypisywania wartości zmiennych lub tylko z sygnalizacji miejsca wykonywania kodu za pomocą printf() do portu szeregowego. Skoro tu używasz software'owego, to ten "prawdziwy" wciąż masz wolny. Link do komentarza Share on other sites More sharing options...
H4X Grudzień 14, 2016 Autor tematu Udostępnij Grudzień 14, 2016 Zacznę więc od końca. Z prawdziwym serialem miałem problemy gdyż nie odbywała się komunikacja w żadną stronę, niestety nie doszedłem dlaczego tak się dzieje. Próbowałem również przypisać porty A0,A1 jednak też nie mogłem tego rozgryźć i w końcu komunikacja zadziałała na portach 10,11 więc na razie tak to zostawiłem. Z problemem borykam się już od 3 dni i testowałem już silniki tak jak mówisz i wszystko działało dobrze. Według Ciebie kod powinien być w porządku ? Co do zasilania używam ładowarki od starego Sony Ericssona 4.9V 450mA podpiętej do zasilacza regulowanego Winners XL4016. Może uszkodzony został moduł sterowania ? Jednak dlaczego: a) silniki działają dobrze przy wysyłaniu "o" i wszystko przebiega prawidłowo b) dlaczego źródło prądu mogłoby być za słabe skoro podpkt. a ? Napiszę czysty program, wrzucę go tutaj i za chwilę napiszę czy nadal wszystko działa tak jak mówiłem wyżej. [ Dodano: 14-12-2016, 17:56 ] Kod działa bez problemu, każdy silnik osobo działa także bez zarzutów. Przy testowaniu zamieniłem wartości zmiennych int na 8 i 9. int silnik_kier = 7; int silnik_obr = 6; void setup(){ pinMode(silnik_kier, OUTPUT); pinMode(silnik_obr, OUTPUT); } void loop() { analogWrite(silnik_kier, LOW); for(int i=50; i<=70; i++){ analogWrite(silnik_obr, i); delay(40); } delay( 2000 ); analogWrite(silnik_kier, LOW); analogWrite(silnik_obr, LOW); delay(1000); analogWrite(silnik_kier, 255); for(int i=50; i<=70; i++){ analogWrite(silnik_obr, odwroc( i ) ); delay(40); } delay( 2000 ); analogWrite(silnik_kier, LOW); analogWrite(silnik_obr, LOW); delay(1000); } int odwroc(int zmienna) { return 255 - zmienna; } Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 14, 2016 Udostępnij Grudzień 14, 2016 Staram się nie uruchamiać ani nie testować obcych programów tylko pomagać ich autorom znajdować błędy (nie zawsze w kodzie) - to działa znacznie lepiej z oczywistych powodów. Wg mnie każdy kod powinien być w porządku, ale nie wiem czy Twój taki jest. Ze strony sprzedawcy zasilacza Winners: - napięcie wejściowe 7-40V - napięcie wyjściowe 1,5-35V regulowane (napięcie wyjściowe musi być zawsze niższe od wejściowego o około 2V) Ile woltów daje ta Twoja ładowarka? A ile potrzebujesz do zasilania systemu? Jakie masz mostki? Schemat całości? Masz multimetr żeby cokolwiek zmierzyć? Opisz krok po kroku co ma robić a co dokładnie robi kod wykonywany po 'z'. Może z tego coś wywnioskujesz. Link do komentarza Share on other sites More sharing options...
H4X Grudzień 14, 2016 Autor tematu Udostępnij Grudzień 14, 2016 Napisałem wszystko wyżej. Ładowarka daje 4.9V 450mA. Silniki biorą 0,5-6V 15mA. Mostki nie wiem jakie mam, kupiłem po prostu sterownik HG7881 dwukanałowy. Multimetr mam a co do schematu to nie wiem co tu rozpisywać, plus ładowarki do Input+ w zasilaczu, minus do minusa, plus z Output w zasilaczu do Vcc sterownika, minus do Gnd. Silniki bez znaczenia w które kanały do sterownika podepnę, najwyżej obroty będą odwrotnie niż chcę, poza tym nie wiem co i jak to mam opisać. [ Dodano: 14-12-2016, 19:08 ] Kod "z" ma pierwsze uruchamiać silnik B a następnie A czyli na odwrót niż kod "o". Zauważyłem że podczas wykonywania kodu "z" silnik A obraca się w złą stronę przy przym wszystko przygasa, dodatkowo wykonuje to co powinien zrobić silnik B (czyli tak jakby sygnał szedł do silnika A zamiast do B) a następnie kręci się dobrą stronę tak jak nakazuje program. [ Dodano: 14-12-2016, 19:19 ] Dodam jeszcze że przy wykonywaniu kodu bez części wyłączonej, silnik B nie kręci się w cale, tak jak powinien według kodu ale za to silnik A działa poprawnie więc wydaje się że problem jest w wyłączonych linijkach kodu if(BluetoothData=='z') { /* analogWrite(Naped_Kierunek, 255); for(int j=50; j<=55; j++) { analogWrite(Naped_Predkosc,odwrocWartoscNaped (j)); delay(40); } delay(2500); analogWrite(Naped_Kierunek, LOW); analogWrite(Naped_Predkosc, LOW); delay(1000);*/ analogWrite(Zamek_Kierunek,255); for(int i=50; i<=55; i++) { analogWrite(Zamek_Predkosc,odwrocWartoscZamek (i)); delay(40); } delay(2000); analogWrite(Zamek_Kierunek, LOW); analogWrite(Zamek_Predkosc, LOW); delay( 1000 ); } Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 14, 2016 Udostępnij Grudzień 14, 2016 To proste: Ładowarka daje 5V a wg tego co pisze producent "zasilacza" potrzebuje on na wejściu min 7V - to pierwszy babol w Twoim układzie. Dalej: zasilacz daje zawsze co najmniej 2 V mniej na wyjściu niż wchodzi na wejście. Nie dostaniesz więc więcej jak 3V i to bez żadnej stabilizacji - czy to wystarcza do pracy czegokolwiek? Ile potrzebuje Twój procesor? Ile mostki? Jaka jest specyfikacja zasilania drivera? Multimetr może i masz, ale chyba głęboko ukryty, bo inaczej napisałbyś jakie jest rzeczywiste napięcie zasilania zamiast frazesów o 4.9V/ileśtam mA przeczytanych na opakowaniu. Przygasanie jest ewidentnym objawem kłopotów z zasilaniem. Wyciągnij zatem sondy i podepnij się do szyny Vcc podczas pracy silników i podczas problemów. Czy Twoje Arduino jest przystosowane do pracy z zasilania 3V? Czy puściłeś prosty program testowy odpalający oba silniki na raz? Jak się zachował? Link do komentarza Share on other sites More sharing options...
H4X Grudzień 14, 2016 Autor tematu Udostępnij Grudzień 14, 2016 Ok zaraz posprawdzam, wytłumacz mi tylko dlaczego w jedną stronę wszystko działa a w drugą nie ? Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 14, 2016 Udostępnij Grudzień 14, 2016 Nie mam pojęcia i nic mnie to teraz nie obchodzi. Napraw błędy podstawowe - w sprzęcie lub upewnij się, ze wszystko działa dobrze bo to najpierw hardware musi być na 100% sprawny żeby można było spokojnie zajmować się programem. Nie odpowiedziałeś na pytanie o Arduino i o działanie programu testowego dwóch silników na raz w obie strony. A przykład Ci podałem: wystarczy, że jedno wyjście mostka jest zwarte do masy. W jedną stronę będzie działać (bo jest tam zero) a w drugą pociągnie prąd z zasilacza i całość zdechnie. Link do komentarza Share on other sites More sharing options...
H4X Grudzień 14, 2016 Autor tematu Udostępnij Grudzień 14, 2016 Pierwszego babola rozwiązałem poprzez podpięcie zasilacza 12V 2A do zasilacza, teraz mogę dostać 10V na wyjściu tak ? O jaki procesor chodzi ? Driver może być zasilany napięciem 3,3-12V przy maksymalnym obciążeniu 800mA na kanał. Arduino zasilane mam osobnym zasilaczem 12V. [ Dodano: 14-12-2016, 19:56 ] Silniki testowałem teraz i tak: w jedną stronę, czyli pierwsza część programu jest wszystko ok, silniki pracują normalnie. W drugą stronę jeden silnik zaczyna z kopyta i po chwili się uspokaja i oba pracują normalnie. [ Dodano: 14-12-2016, 20:00 ] Znalazłem schemat drivera [ Dodano: 14-12-2016, 20:01 ] Arduino mogę zasilać przez zasialacz 7-12V albo kabel USB z komputera. [ Dodano: 14-12-2016, 20:06 ] Przy wykonywaniu programu "z" zauważyłem że silnik który nie powinien pracować,gdy się obraca, na zasilaczu napięcie spada z 6V do 2V i zapala się dioda CC czyli stabilizacja prądu. [ Dodano: 14-12-2016, 21:45 ] Przygasanie jest ewidentnym objawem kłopotów z zasilaniem. Według mnie nie jest to ewidentny problem gdyż tak jak pisałem kilka razy, silnik obraca się w złą stronę i wtedy to się dzieje, więc dlaczego miałby to być za mały prąd ? Problem polega na tym że sygnał nie dociera do silnika B tylko do A co nie jest zgodne z kodem. Dokładnie wygląda to tak iż silnik A dostaje sygnał i kręci się strasznie powoli w stronę przeciwną niż powinien według kodu z "z", następnie gdy ten proces przejdzie tzn 2 sek. silnik obraca się już w dobrą stronę wykonując pozostałą część kodu. Tylko dlaczego sygnał sterujący nie dociera do silnika B skoro pierwsza część kodu działa poprawnie ? [ Dodano: 14-12-2016, 21:47 ] Wydaje mi się że jest to wina tego odwracania wartości żeby silniki kręciły się w przeciwne strony gdyż testowałem oba bez żadnego wysyłania danych przez BT i część w której silniki mają kręcić się w przeciwną stronę nie działa poprawnie ale to już opisałem. Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 14, 2016 Udostępnij Grudzień 14, 2016 Przez zapalenie diody CC zasilacz mówi "Hej, z Twoim układem jest coś nie w porządku!". Włączanie się ograniczenia 2A nie jest normalną sytuacją więc ja bym się do tego przyczepił. Odepnij oba silniki od drivera i puść ten sam program który przechodzi przez fazę "diody CC". Jeżeli zjawisko się powtórzy, masz uszkodzony driver - to może być jakieś drobne zwarcie na płytce w okolicach wyjść do silników, wlutowany zły element (opornik?) lub niestety spalony układ. Obejrzyj dokładnie pod lupą całą płytkę od scalaków do wyjść. Jeżeli nie znajdziesz zwarcia organoleptycznie, ustaw multimetr na poszukiwanie zwarć (biip) i przy wyłączonym zasilaniu wszystkiego sprawdź czy istnieje przejście między którymś wyjściem drivera a GND lub którymś z 4 wyjść a zasilaniem drivera. Jeżeli wszystko będzie OK, to jest jakiś problem z połączeniem silników. Przy takich kłopotach każdy szczegół jest ważny a Ty dopiero teraz piszesz, że zasilasz Arduino z czegoś innego niż wymieniona ładowarka i to drugie coś. Czy zmierzyłeś - choćby z ciekawości - ile w poprzedniej konfiguracji z ładowarką wynosiło napięcie zasilania driverów? I czy to było tyle ile się spodziewałeś? Link do komentarza Share on other sites More sharing options...
H4X Grudzień 14, 2016 Autor tematu Udostępnij Grudzień 14, 2016 Ok jutro się za to zabiorę. Nie mierzyłem napięcia gdyż zasilacz regulowany którego używam ma wbudowany woltomierz i amperomierz więc myślałem że napięcie jest już mierzone przez to urządzenie. Gdy program działał poprawnie czyli część "o", zasilacz nie pokazywał żadnej zmiany napięcia, czasem spadało ale były to dziesiąte części np. z 5.08V na 4.85V, niestety aż tak się na tym nie znam żeby o tym dyskutować. Na razie dziękuję za udzieloną pomoc i poświęcony czas. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »