Stwórz tego robota śledzącego linię dla projektu Science Fair

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W tym poście dowiemy się, jak zbudować obwód robota śledzącego linię za pomocą Arduino, który będzie działał po specjalnie narysowanym układzie linii i będzie wiernie go śledzić, o ile będzie dostępny i identyfikowalny przez jego czujniki.

Navneet sajwan



Co to jest robot podążający za linią

Autonomiczny robot to maszyna, która może wykonywać szereg czynności zgodnie z instrukcjami programisty, bez konieczności ręcznego sterowania przez człowieka w czasie rzeczywistym.

Śledzenie linii (LFR) to również autonomiczne samochody-roboty, które są kierowane przez jeden lub więcej czujników i czarną lub białą ścieżkę. Stanowią podstawę nowoczesnych samochodów autonomicznych.



Podobnie jak każdy autonomiczny robot, śledzący linię mają jednostkę przetwarzającą sygnał i podejmującą decyzje, czujniki i siłowniki. Jeśli jesteś początkującym w robotyce i chcesz potraktować ją poważnie, od tego powinieneś zacząć. Zacznijmy to robić.

Do wykonania tego projektu użyłem dwóch czujników podczerwieni i napędu na trzy koła. Minimalna liczba czujników, które można zastosować, to jeden, a maksymalnie osiem wystarcza do śledzenia linii w oparciu o PID.

Wymagane składniki:

Arduino uno

Podwozie

Dwa silniki na baterie (b.o.) I kompatybilne opony

Kulka na kółkach

Dwa czujniki podczerwieni

Moduł sterownika silnika

Zasilacz

Oprogramowanie Arduino IDE

Przyjrzyjmy się teraz naszym komponentom:

ARDUINO ONE : Wyobraź sobie, że jest to pomieszczenie kontrolne naszego robota. Teraz jest wiele płyt programistycznych, które były brane pod uwagę w tym projekcie, ale Arduino UNO po prostu nie dorównało innym. Nie chodzi o to, że nasz bohater był lepszy pod względem swoich wielowymiarowych cech.

Gdyby tak było, Raspberry Pi i Intel Edison uderzyłyby go między oczy. Najbardziej przekonujące argumenty, które doprowadziły do ​​wyboru Arduino UNO, zostały sformułowane przez połączenie funkcji, ceny, rozmiaru i wymagań projektu.

Oto kilka istotnych powodów:

ROZMIAR : Jest dość mały w porównaniu do płyt rozwojowych opartych na Atmega16 lub Atmega8, zajmuje trochę miejsca na obudowie, więc otrzymujesz kompaktowego i poręcznego bota.

To naprawdę ma znaczenie w zawodach robotyki. Zaufaj mi, nienawidziłbyś włóczyć się po okolicy z tym wielkim brzydkim robotem i zmieniać lokale przez cały dzień.

Mniejszy rozmiar, szybszy robot i wydajniejsze zakręty.

NAJLEPSZA PŁYTA DO PROTOTYPOWANIA : Niewątpliwie Arduino UNO ma najlepszą kombinację funkcji dla prototypowanie . Gdy twoje obwody są już na miejscu, a projekt działa idealnie, możesz go zastąpić czymś mniejszym i tańszym, takim jak Arduino Nano i Attiny85 ic.

Dla tych, którzy są zwolennikami projektów uniwersyteckich, proponuję na koniec zastąpić UNO Nano.

PODWOZIE : Jest to rama, która utrzymuje wszystkie komponenty na miejscu. Kupując nowe podwozie należy wziąć pod uwagę kilka kwestii,

Powinien być lekki i mocny.

W przypadku projektów lepiej jest kupić taki na rynku. Ale jeśli przygotowujesz się do zawodów, zdecydowanie sugeruję, abyś dostosował własne, mając na uwadze wymiary i wymagania konkurencji.

Wybierz plastikową lub drewnianą obudowę. Kiedy metalowe ramki stykają się z Arduino, dochodzi do zwarcia wielu pinów. Jest to ważny czynnik, na którym należy się skupić, patrząc na podwozie.

Trzymaj podwozie tak nisko, jak to możliwe - to daje stabilność botowi.

MOTORYZACJA : Użyj lekkiej baterii (B.O.) d.c. Motoryzacja.

CASTOR BALL : Normalne koła zapewniają ruch postępowy wzdłuż pojedynczej osi, ale kulka na kółkach jest zaprojektowana do poruszania się po powierzchni w dowolnym kierunku. Daje nam napęd na trzy koła.

Powodem preferowania napędu na trzy koła zamiast na 4 koła jest stosunkowo szybszy skręt. Być może zauważyliście, że riksze rowerowe przeciskają się przez ruch uliczny niczym gady. Tak samo jest w przypadku naszego robota.

CZUJNIKI : Jest to urządzenie, które wykrywa lub mierzy dowolny parametr fizyczny naszego środowiska i przetwarza go na sygnały elektryczne. W tym przypadku wykrywanym parametrem są promienie podczerwone.

Czujniki mają zasadnicze znaczenie dla każdego robota. Cóż, jeśli arduino jest mózgiem naszego bota, czujniki mogą równie dobrze odgrywać rolę oczu. Oto kilka rzeczy dotyczących czujników:

Czujniki muszą być ustawione w taki sposób, aby diody LED były skierowane w stronę podłoża.

Powinien być umieszczony z przodu twojego bota.

Minimalne odstępy między nimi muszą być większe niż szerokość czarnej linii.

TABLICA STEROWNIKA SILNIKA : Sterowniki silników to obwody buforowe, które pobierają sygnały niskiego napięcia w celu zasilania silników wymagających wyższego napięcia.

W naszym przypadku Arduino może zapewnić wystarczające napięcie do napędzania silników, ale nie może zapewnić wystarczającego prądu. Piny 5v i GND Arduino UNO mają prąd znamionowy 200 mA, podczas gdy każdy pin GPIO ma wartość 40 mA. Jest to o wiele niższe niż w przypadku silników przy rozruchu i utyku, których potrzebujemy.

Są dwa sterowniki silników, które preferuję dla tego projektu: L298N i L293D. Oba są równie odpowiednie do wykonania tego projektu.

Chociaż, L293D jest stosunkowo tańszy ale ma niski prąd znamionowy. Ich połączenia są prawie takie same. Ponieważ podałem połączenia dla obu, to całkowicie zależy od Ciebie, jak stworzysz swojego bota.

ZASILACZ :

Użyj zasilacza 12 V lub baterii (nie więcej niż 12 V).

Rozmieszczenie komponentów (od przodu do tyłu):

Czujniki na czele twojego bota.

Kółko na środku.

Silniki i opony w jednej linii z tyłu.

Znajomości:

CZUJNIKI do ARDUINO :

Podłącz pin czujnika do pin arduino, jak pokazano,

Kołek czujnikaPin Arduino
VCC (5 V)5V
GND (G)GND
LEWY CZUJNIK WYJŚCIOWY (DO)kołek 6
WYJŚCIE PRAWEGO CZUJNIKA (DO)kołek 7

Uwaga: Aby sprawdzić, czy czujniki są zasilane, skieruj aparat telefonu komórkowego na diodę nadajnika podczerwieni. Na ekranie zobaczysz świecące diody, których nie widać gołym okiem. Niektóre nowoczesne aparaty do telefonów komórkowych mają filtr podczerwieni. Więc proszę, weź to pod uwagę.

SILNIK do STEROWNIKA SILNIKA:

Każdy silnik ma dwa zaciski, które należy podłączyć do sterownika silnika. Nigdy nie próbuj łączyć ich bezpośrednio z arduino. Patrząc od tyłu bota, mając silniki blisko ciebie i czujniki daleko, podłącz je w następujący sposób:

SILNIKL298NL293D
LEWY SILNIKPIN 1 I 2PIN 7 I 8
PRAWY SILNIKPIN 13 I 14PIN 9 I 10

STEROWNIK SILNIKA do ARDUINO UNO:

STEROWNIK SILNIKA (L298N)ARDUINO ONE
PIN 4WINO
PIN 5GND
PIN 65V
PIN 8 i PIN 9PIN 3 i PIN 9
PIN 10 i PIN 11PIN 5 i PIN 10
PIN 7 i PIN 125V
STEROWNIK SILNIKA (L293D)ARDUINO ONE
PIN 3WINO
PIN 2GND
PIN 15V
PIN 5 I PIN 6PIN 3 i PIN 9
PIN 11 I PIN 12PIN 5 i PIN 10
PIN 4 I PIN 55V

UWAGA: Piny 8 i 9 l298n służą do sterowania silnikiem podłączonym do 1 i 2. Oraz, 10 i 11 sterujące silnikiem podłączonym do styków 13 i 14. Podobnie, piny 5 i 6 l293d służą do sterowania silnikiem podłączonym do 7 i 8 oraz 12 i 11 silnik sterujący podłączony do pinów 9 i 10.

Oto jesteśmy, do końca części projektowej. Nadal mamy kod do wykonania, ale wcześniej przejdziemy przez zasady, które pozwalają na śledzenie linii.

Jak działa czujnik podczerwieni:

Czujniki na podczerwień (czujniki podczerwieni) mogą być używane do wykrywania kontrastu kolorów i bliskości obiektów. Zasada działania czujnika podczerwieni jest dość prosta.

Jak widać, posiada dwie diody - emitującą podczerwień i fotodiodę. Działają jako para nadajnik-odbiornik. Kiedy przeszkoda pojawia się przed promieniami emitera, są one odbijane z powrotem i przechwytywane przez odbiornik.

Generuje to sygnał cyfrowy, który może być podawany do mikrokontrolerów i elementów wykonawczych w celu podjęcia niezbędnych działań w przypadku napotkania przeszkody.

Podstawowa fizyka mówi nam, że ciało czarne pochłania całe padające na nie promieniowanie elektromagnetyczne, podczas gdy ciało białe odbija je. Zasada ta jest wykorzystywana przez śledzącego linię do rozróżniania białej i czarnej powierzchni.

Jak działa robot śledzący linię:

UKŁAD LINE FOLLOWER

W normalnych warunkach robot porusza się w taki sposób, że oba czujniki są nad białymi, a czarna linia znajduje się między obydwoma czujnikami.

Jest zaprogramowany na obracanie obu silników w taki sposób, że robot porusza się do przodu.

Całkiem naturalnie w miarę upływu czasu jeden z dwóch czujników przekracza czarną linię.

Jeśli lewy czujnik przekroczy linię, lewe silniki są zatrzymywane, w wyniku czego robot zaczyna skręcać w lewo, chyba że lewy czujnik powróci na białą powierzchnię i zostanie osiągnięty normalny stan.

Podobnie, gdy prawy czujnik znajdzie się nad czarną linią, prawe silniki są zatrzymywane iw konsekwencji robot skręca teraz w prawo, chyba że czujnik powróci na białą powierzchnię. Ten mechanizm obracania jest znany jako mechanizm napędu różnicowego.

SCHEMAT OBWODU:

SZCZEGÓŁY OKABLOWANIA:

PROGRAMOWANIE I KONCEPCJE:

Skończywszy z częścią obwodu, przejdziemy teraz do części programowania. W tej sekcji zrozumiemy program sterujący naszym robotem. Oto kod: / *
Created and tested by Navneet Singh Sajwan
*Based on digital output of two sensors
*Speed control added
*/
int left, right
int value=250
void setup()
{
pinMode(6,INPUT)//left sensor
pinMode(7,INPUT)//right sensor
pinMode(9,OUTPUT)//left motor
pinMode(3,OUTPUT)//left motor
pinMode(10,OUTPUT)//right motor
pinMode(5,OUTPUT)//right motor
// Serial.begin(9600)
}
void read_sensors()
{
left=digitalRead(6)
right= digitalRead(7)
}
void move_forward()
{
analogWrite(9,value)//3,9 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_left()
{
digitalWrite(9,LOW)//9,3 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_right()
{
analogWrite(9,value)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void halt()
{
digitalWrite(9,LOW)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void print_readings()
{
Serial.print(' leftsensor')
Serial.print(' ')
Serial.print(left)
Serial.print('rightsensor')
Serial.print(' ')
Serial.print(right)
Serial.println()
}
void loop()
{
read_sensors()
while((left==0)&&(right==1)) // left sensor is over black line
{
turn_left()
read_sensors()
print_readings()
}
while((left==1)&&(right==0)) // right sensor is over black line
{
turn_right()
read_sensors()
print_readings()
}
while((left==0)&&(right==0)) // both sensors over the back line
{
halt()
read_sensors()
print_readings()
}
while((left==1)&&(right==1))// no sensor over black line
{
move_forward()
read_sensors()
print_readings()
}
}

Opis użytych funkcji:

read_sensors (): Pobiera odczyty z obu czujników i przechowuje je w zmiennych po lewej i po prawej stronie.

move_forward (): Gdy arduino wykonuje tę funkcję, oba silniki poruszają się do przodu.

turn_left (): Lewy silnik zatrzymuje się. Bot skręca w lewo.

turn_right (): Prawy silnik zatrzymuje się. Bot skręca w prawo.

halt (): Bot zatrzymuje się.

print_readings (): Wyświetla odczyty czujników na monitorze szeregowym. W tym celu musisz odkomentować „Serial.begin (9600)” w void setup.

ODCZYTY CZUJNIKA:

CZUJNIK NAD LINIĄODCZYTY CZUJNIKA
LEWODOBRZE
LEWY CZUJNIK01
PRAWY CZUJNIK10
ŻADEN11
OBIE00

KONTROLA PRĘDKOŚCI:

Czasami prędkość silników jest tak duża, że ​​zanim arduino zinterpretuje sygnały czujnika, robot gubi linię. Krótko mówiąc, bot nie podąża za linią ze względu na dużą prędkość i ciągle ją gubi, mimo że algorytm jest poprawny.

Aby uniknąć takich okoliczności, zmniejszamy prędkość bota za pomocą techniki PWM. W powyższym kodzie znajduje się zmienna o nazwie wartość.

Po prostu zmniejsz wartość liczbową w funkcji, aby zmniejszyć prędkość. W Arduino UNO możesz mieć tylko wartości pwm z zakresu od 0 do 255.

analogWrite (pin, wartość)

0<= value <=255

To koniec mojego postu obserwującego. Mam nadzieję, że jest wystarczająco szczegółowy, aby odpowiedzieć na wszystkie Twoje palące pytania, a jeśli w najrzadszej rzeczywistości tak nie jest, zawsze mamy do dyspozycji sekcję komentarzy. Skomentuj swoje wątpliwości. Miłego majsterkowania!




Poprzedni: Robot samochodowy sterowany telefonem komórkowym za pomocą modułu DTMF Dalej: Przełącznik WŁ. / WYŁ. Zasilania sieciowego sterowanego hasłem