Skocz do zawartości
paradox91

Autokalibracja robota AVR C (switch)

Pomocna odpowiedź

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.

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

Sabre, to napisz jeżeli chcesz się podzielić, myślę, że każdemu się przyda chociaż ogólny zarys algorytmu kalibracji :]

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

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)

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Że też na to nie wpadłem dziękuje za pomoc było mi to bardzo pomocne.

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites

Najprościej miernikiem bądź jak chcesz, żeby mierzył ci uC to za pomocą ADC ;]

Udostępnij ten post


Link to post
Share on other sites

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!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...