paradox91 Napisano Czerwiec 6, 2009 Udostępnij Napisano Czerwiec 6, 2009 Witam otóż mam jeden problem z auto kalibracją. Otóż posiadam robota N.O.P (No oil painting) opisanego już wcześniej na diodzie i chciałbym dorobi do niego auto kalibrację. Całość inicjacji i odczytywanie mam już napisane ale tu niespodziewane pojawił się problem. Czy można wykonać całość takiego programu w instrukcji switch. Kiedy nie miałem jeszcze ADC to sprawa była prosta switch(PINC & 1F) i w binarnym wpisywałem stany ale teraz nie wiem jak się zabrać za napisanie ruchów robota. Proszę o pomoc. Z góry dziękuje. [ Dodano: 07 Cze 09 11:27 ] Znaczy się zainteresowanie jest duże. Dzięki. Cytuj Link do komentarza Share on other sites More sharing options...
slawko_k Czerwiec 16, 2009 Udostępnij Czerwiec 16, 2009 Chopie żebyś ty jaśniej napisał o co ci chodzi to może i zainteresowanie twoim postem by było większe. Ciężko więc odpowiedzieć na twoje jedyne pytanie w tym poście "Czy można wykonać całość takiego programu w instrukcji switch" odpowiem że na pewno można Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Czerwiec 16, 2009 Udostępnij Czerwiec 16, 2009 Nie znam C więc nie odpowiem ci jak w nim wykonać autokalibrację. Mogę jedynie powiedzieć jak to się odbywa u mnie w Bascomie i na tej podstawie napiszesz sobie autokalibrację sam w C. Opisz może co chcesz osiągnąć, albo jak korzystasz aktualnie z ADC to opiszę ci metodę kalibracji do tego. Cytuj Link do komentarza Share on other sites More sharing options...
paradox91 Czerwiec 16, 2009 Autor tematu Udostępnij Czerwiec 16, 2009 Byłbym bardzo wdzięczny jeżeli ktoś by mi napisał jak wygląda jego program chodzi mi głównie o tą auto kalibracje abym wiedział jak wpleśc ją do głównego programu. Może by również Bascom ale nie potrafię tego języka dlatego prosiłbym o komentarze w ewentualnym kodzie. Nie wiem jak to jaśniej wyjaśni mam nadzieje że zrozumiecie. Cytuj 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
Sabre Czerwiec 16, 2009 Udostępnij Czerwiec 16, 2009 Nie zrozumiałeś tego co napisałem, opisz w jaki sposób korzystasz z danych z ADC na czujnikach, czy wykorzystujesz min, max, jakieś średnie, czy korzystasz tylko i wyłącznie z danych bieżących. Nie podam ci swojego kodu, bo go nawet nie mam przy sobie (siedzę w pracy), mogę ci jedynie opisać algorytm, który sobie przepiszesz do C. Cytuj Link do komentarza Share on other sites More sharing options...
rasta Czerwiec 16, 2009 Udostępnij Czerwiec 16, 2009 Sabre, to napisz jeżeli chcesz się podzielić, myślę, że każdemu się przyda chociaż ogólny zarys algorytmu kalibracji :] Cytuj Link do komentarza Share on other sites More sharing options...
paradox91 Czerwiec 16, 2009 Autor tematu Udostępnij Czerwiec 16, 2009 Ja myślałem nad czymś takim. przed pętlom. ➡️ odczyt wszystkich czujników i wyliczanie średniej. w pętli nieskończoności. ➡️ odczyt czujników ➡️ porównanie stanu czujników do średniej ➡️ zwracanie wartości bool'owskiej w tabeli ➡️ przypisanie do odpowiedniej operacji ale wydaje mi się że ta zbyt dużo operacji i zastanawiam się czy istnieje jakiś szybszy sposób. Cytuj Link do komentarza Share on other sites More sharing options...
slawko_k Czerwiec 16, 2009 Udostępnij Czerwiec 16, 2009 odczyt wszystkich czujników i wyliczenie średniej nie ma chyba sensu bo co ci to da jeśli w tym momencie pojazd będzie stał na jednolitym podłożu. wg mnie to trzeba pojazd postawić na linii i odczytać wszystkie czujniki po czym znaleźć największy i najmniejszy z nich odczyt i z tych dwóch wyciągnąć średnią z którą potem podczas pracy porównywać aktualne odczyty z czujników. reszta tak raczej jak napisałeś. wcale to nie jest dużo operacji. można też płynnie sterować na podstawie wartości odczytanych z ADC ale to zdecydowanie bardziej skomplikowane bo trzeba by wprowadzić jakieś zależności mocy poszczególnych mocy silników od wartości z czujników czyli dorobić jakiś układ regulacji. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Czerwiec 16, 2009 Udostępnij Czerwiec 16, 2009 U mnie wygląda to tak: -ustawiam silniki aby się kręciły w przeciwnych kierunkach -w pętli zaczynam odczytywać napięcie na wszystkich czujnikach -w tej samej pętli przypisuję dla każdego z czujników do tablicy wartości min i max -również w tej samej pętli obliczam średnią wartość dla każdego z czujników i wpisuję ją do tablicy, tą wartość średnią dodaję do minimum, bądź odejmuję od maksimum (w zależności od podłoża białe/czarne), w ten sposób wyznaczam granicę pomiędzy linią i jej brakiem -na podstawie granicy ustawiam flagę dla liczby binarnej, która określa położenie robota względem linii (np. 00100 - linia pod środkowym czujnikiem) -jeśli robot będzie w położeniu 10000 a później 00000 zatrzymuję kalibrację i ustawiam silniki w ten sposób aby robot ustawił się na pozycji 00100 (oczywiście podczas powrotu do pozycji 00100 robot już się nie kalibruje, korzysta już z danych zapisanych w tablicach i aktualnych pomiarów) 2 Cytuj Link do komentarza Share on other sites More sharing options...
paradox91 Czerwiec 16, 2009 Autor tematu Udostępnij Czerwiec 16, 2009 Dzięki za pomoc ale mam jeszcze jedno pytanie jak ustawiasz tą flagę. na podstawie granicy ustawiam flagę dla liczby binarnej, która określa położenie robota względem linii (np. 00100 - linia pod środkowym czujnikiem) Ewentualnie jeśli by ktoś wiedział to jak to zrobi w C. Chodzi mi o ten zapis binarny. Cytuj Link do komentarza Share on other sites More sharing options...
Popularny post Sabre Czerwiec 16, 2009 Popularny post Udostępnij Czerwiec 16, 2009 W Bascomie jest to bezpośrednie odwoływanie się do kolejnych cyfr (pozycji, potęg) liczby: If Pomiar(1) > Granica(1) Then Set Flagalinii.0 Else Reset Flagalinii.0 If Pomiar(2) > Granica(2) Then Set Flagalinii.1 Else Reset Flagalinii.1 If Pomiar(3) > Granica(3) Then Set Flagalinii.2 Else Reset Flagalinii.2 If Pomiar(4) > Granica(4) Then Set Flagalinii.3 Else Reset Flagalinii.3 If Pomiar(5) > Granica(5) Then Set Flagalinii.4 Else Reset Flagalinii.4 Liczbą do której poszczególnych pozycji się odwołuję jest zmienna Flagalinii. Poprzez zapis w Flagalinii.x wpisuję na pozycję x 0 lub 1. 2 1 Cytuj Link do komentarza Share on other sites More sharing options...
rasta Czerwiec 16, 2009 Udostępnij Czerwiec 16, 2009 Czyli w C będzie to po prostu ustawianie konkretnych bitów zmiennej "flaga_linii" czy jak ją sobie nazwiesz. Dokładnie to samo co tu. 1 Cytuj Link do komentarza Share on other sites More sharing options...
paradox91 Czerwiec 16, 2009 Autor tematu Udostępnij Czerwiec 16, 2009 Że też na to nie wpadłem dziękuje za pomoc było mi to bardzo pomocne. Cytuj Link do komentarza Share on other sites More sharing options...
malum Grudzień 26, 2009 Udostępnij Grudzień 26, 2009 Odświeżam temat! Zabrałem się za pisanie programu dla Line Folower'a w C. Napisałem prosty program, bazujący na konstrukcji "widzę linię / nie widzę linii". Robot zachowuje się poprawnie, ale tylko w sytuacji, gdy między linią a tłem jest dość spory kontrast. Problem powstaje jednak, gdy kontrast jest mały. Z tego co czytam powinienem zastosować autokalibrację. Mam jednak pytanie - w jaki sposób mierzyć napięcia na czujnikach. Mogę prosić o jakieś źródełko w C wykonujące pomiar napięcia na czujniku CNY70? Cytuj Link do komentarza Share on other sites More sharing options...
Kenji Grudzień 26, 2009 Udostępnij Grudzień 26, 2009 Najprościej miernikiem bądź jak chcesz, żeby mierzył ci uC to za pomocą ADC ;] Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!