Skocz do zawartości

Autokalibracja robota AVR C (switch)


paradox91

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.

Link do komentarza
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

Link do komentarza
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.

Link do komentarza
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.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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.

Link do komentarza
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.

Link do komentarza
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
Link do komentarza
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
Link do komentarza
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.

Link do komentarza
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?

Link do komentarza
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!

Anonim
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.