Skocz do zawartości

Line follower


klimek4765

Pomocna odpowiedź

Witam, udalo mi sie skleic line followera na 3 transoptorach CNY70, ciekawostka bylo ze napisanie kodu wedlug koncepcji, ze robot ma podazac za linia ktora "odbija" swiatlo transoptora powodujac jego przewodzenie (dawac 1), zajelo jakies 5 min.

Po chwili zastanowienia jak zrobic z tego co mam pod reka linieza ktora mialby podazac zdalem sobie sprawe ze w sumie mam do dyspozycji w domu tylko czarna matowa izolacje, i w zwiazku z tym robot bedzie podazal za linia ktora nie odbija swiatla (daje 0) i naklepanie tego kodu zajelo mi juz z 3 godziny 🤯

Moim pytaniem jest czy ten kod, mimo ze dziala, moze zostac jakos upakowany do zgrabniejszej wersji?


#include <avr/io.h>


int main(void)
{
/* Wszystkie linie portu D będą wyjściami do ktorych podlaczone sa silniki*/
DDRB  = 0xff;

/* linie PD1,PD2, PD3 będą wejściamiz podciągnięciem do VCC */
DDRD  = 0x00;
PORTD = 0b00001110; // tu sa podlaczone transoptory

/* Początek nieskończonej pętli */
while(1)
{
	/* 
				ROZKLAD CZUJEK
	   ------PD3------PD2------PD1-------

	   */

	/* Jeśli lewa czujka wykrywa linie a pozostale dwie przewodza  */
	if(!((PIND &=~_BV(PD3)))&&(!((PIND &=_BV(PD2)))&&(!((PIND &=_BV(PD1))))))
	{
		 PORTB =0b00000100; //skret w lewo

	}



	/* Jeśli prawa czujka wykrywa linie a pozostale dwie przewodza*/
	if(!((PIND &=_BV(PD3)))&&(!((PIND &=_BV(PD2)))&&(!((PIND &=~_BV(PD1))))))
	{
		 PORTB =0b00000010; //skret w prawo

	}

	/* Jeśli srodkowa czujka wykrywa linie a pozostale dwie przewodza*/
	if(!((PIND &=_BV(PD3)))&&(!((PIND &=~_BV(PD2)))&&(!((PIND &=_BV(PD1))))))
	{

		PORTB =0b00000110; //jazda do przodu
	}

	// w razie skretu linii 90 stopni w lewo
		if(!((PIND &=~_BV(PD3)))&&(!((PIND &=~_BV(PD2)))&&(!((PIND &=_BV(PD1))))))
		{
			PORTB =0b00000100; //skret w lewo
		}
		// w razie skretu linii 90 stopni w prawo
		if(!((PIND &=_BV(PD3)))&&(!((PIND &=~_BV(PD2)))&&(!((PIND &=~_BV(PD1))))))
		{
			PORTB =0b00000010; //skret w prawo
		}
}
}

generalnie kierowalem sie ta koncepcja:

while (1)
{
   if((LEFT_SENSOR==1)&&(CENTER_SENSOR==0)&&(RIGHT_SENSOR==1))
       LATB |= GO_FRONT; // Case 1
   if ((LEFT_SENSOR==0)&&(CENTER_SENSOR==1)&&(RIGHT_SENSOR==1))
       LATB |= TURN_RIGHT // Case 2
   if ((LEFT_SENSOR==1)&&(CENTER_SENSOR==1)&&(RIGHT_SENSOR==0))
       LATB |= TURN_LEFT // Case 3
   if ((LEFT_SENSOR==1)&&(CENTER_SENSOR==1)&&(RIGHT_SENSOR==1))
       LATB |= STOP; // case 4
}// End of while(1
[quote][/quote]

__________

Komentarz dodany przez: Treker

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

Ogólnie chodzi o to że każdy czujnik ma masę, sumujesz te pod którymi jest linia i dzielisz przez ich ilość, a potem za pomocą odrobiny matematyki wyliczasz wartości dla silników

Dla ścisłości, nie masę, a wagę, bo to średnia ważona 🙂

  • Lubię! 1
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.