Skocz do zawartości

Jazda robota na wprost


gomoter

Pomocna odpowiedź

 Programuję prostego robota mobilnego sterowanego przez bluetooth. Chciałbym z użyciem tarczy enkodera i czujników szczelinowych liczyć obroty co sekunde i wysterowywać silniki za pomocą pwm tak aby jeden silnik "slave" był zależny od silnika "master". Wtedy jeden silnik podążałby za drugim i w ten sposób robot jechał by prosto. Podobny temat znalazłem tutaj    https://starter-kit.nettigo.pl/2013/09/jak-sterowac-robotem-czyli-budowa-i-obsluga-prostego-enkodera/.

skorzystałem z fukcji z powyższego linku 

int vala = LOW; // 
int valb = LOW
unsigned long czas; /
unsigned long czasa = millis() + dt; /
unsigned long czasb = millis() + dt; /
unsigned long czasc = millis() + dt; 

// funckja do zliczania 

vala = digitalRead(pin1); / detektor na pinie 5
  valb = digitalRead(pin2); czujnik na pinie 6
  if (vala == LOW 
  {
    if(czas >= czasa)
    {
    count.A++;
    czasa = czas + dt;
    }
  }
    if (valb == LOW) 
  {
    if(czas >= czasb)
    {
    count.B++;
    czasb = czas + dt;
    }

i teraz moje pytanie jak już zliczy impulsy w czasie 1 s potrzebuje jeszcze funkcje do porównania tych impulsówi  jak wysterować silniki aby jeden jechał synchronizowany z drugim ?

Jestem początkujacym pasjonatem robotyki wiec prosze o wyrozumiałość.

Edytowano przez gomoter
Link do komentarza
Share on other sites

12 minut temu, gomoter napisał:

 jak wysterować silniki aby jeden jechał synchronizowany z drugim ?

Musisz regulować wypełnienie sygnału PWM dla drugiego silnika, możesz np. napisać jakiś prosty regulator PID. Jeśli chcesz zrobić to naprawdę dobrze to sprawdź ten artykuł: Sterowanie robotem mobilnym klasy (2,0)

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 wiem jak inni koledzy, ale moim zdaniem bez użycia przerwań raczej będzie trudno chociażby z tego powodu, że nie tylko musisz na bieżąco sprawdzać enkodery, ale jeszcze obsługa samych silników, obsługa pilota, pewnie omijanie przeszkód ... itd. Jak zliczać impulsy? Przeanalizuj program dołączony do artykułu NETTIGO,  który zresztą sam znalazłeś w sieci (link do programu przypomniałem Ci wcześniej). Znajdziesz tam taką funkcję:

void licz(struct Struktury &count) //funkcja zliczajÄca obroty lewego i prawego koĹa
{
  vala = digitalRead(BUTTON_PIN_A);
  valb = digitalRead(BUTTON_PIN_B);
  if (vala == LOW) 
  {
    if(czas >= czasa)
    {
    count.A++;
    czasa = czas + dt;
    }
  }
    if (valb == LOW) 
  {
    if(czas >= czasb)
    {
    count.B++;
    czasb = czas + dt;
    }
  }
}

Pewnie się domyślasz, że np. count.B++;  to właśnie zwiększenie licznika impulsów z enkodera. Tutaj licznik jest strukturą, ale w Twoim programie może być zwykłą zmienną np. int licznik i wtedy zwiększenie tego licznika to oczywiście  licznik++; Oczywiście BUTTON_PIN_A i BUTTON_PIN_B to piny, do których podłączono enkodery.

Policz sobie szczeliny  w tarczy enkodera i będziesz wiedział ilu impulsów należy się spodziewać na 1 obrót koła.

Edytowano przez Belferek
Link do komentarza
Share on other sites

Dnia 14.12.2018 o 17:34, gomoter12 napisał:

a jak zliczać impulsy np w 1s bez używania attachinterupt() gdy czujniki szczelinowe są podpiete pod piny 5 i 6 

Wszystko zależy od tego jak będzie zbudowany cały program - teoretycznie da się to zrobić, ale potrzeba doświadczenia, aby napisać dobry program tego typu. Zdecydowanie łatwiej będzie jednak zmienić połączenia i wykorzystać przerwania. W tym artykule znajdziesz podstawowe informacje na temat przerwań: Kurs Arduino II – #4 – przerwania, kontaktron, czujnik PIR

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.