Table of Contents

Line Follower and Obstacle Avoiding Car

Introducere

Prezentarea pe scurt a proiectului meu:

Descriere generala

Un proiect de tipul line follower and obstacle avoiding implică construirea unui robot care poate urmări o linie trasată pe o suprafață plană, cum ar fi o bandă neagră sau o linie albă pe un fundal negru, și în același timp poate evita obstacolele care apar in cale.

Pentru a realiza acest proiect, voi avea nevoie de un ansamblu de piese, printre care se remarca: un microcontroller, senzori infraroșu sau senzori de proximitate pentru a detecta linia și obstacolele, motoare pentru a propulsa robotul și un algoritm de control care să permită robotului să urmeze linia și să evite obstacolele.

Hardware Design

Componente Hardware utilizate:

Schema Electrica

Conectare Senzor Ultrasonic HC-SR04

Conectarea Servomotorului SG90

Conectarea Senzorilor IR FC-123

Conectarea Matricii de Senzori IR QTRX-HD-06A

Conectarea Senzorului de Buzzer

Conectarea Driver-ului Motor L298N

Alimentare

Software Design

Pentru a realiza partea de software, am folosit mediul de dezvoltare Arduino.

Codul il pot imparti in mai multe etape dupa cum urmeaza:

Etapa de initializare

  1. Este inclusa biblioteca suplimentara «servo.h».
  2. Sunt definiti majoritatea pinilor folositi in conformitate cu schema hardware.
  3. Sunt declarate si initializate restul de variabile globale necesare in rezolvarea probei software.

Etapa de Setup

  1. Este setata starea pinilor, si anume cea de OUTPUT, INPUT sau INPUT_PULLUP.
  2. Este initializat si configurat un pin specific pentru a controla servomotorul.
  3. Este atasata o rutina de intrerupere pentru ambii senzori de IR de pe margini.

Etapa de implementare a miscarii

  1. Functiile: go_stop, go_forward, go_left, go_right, sunt foarte asemanatoare si indeplinesc acelasi scop: de a seta diferite viteze pe motoare si valori pe pinii corespunzatori.
  2. Functia followLine se ocupa cu calcularea unor sume partiale pentru a decide directia in care sa se indrepte robotelul.
  3. Sumele provin din valorile analogice ale pinilor de IR aflati pe matrice QTRX-HD-06A.
  4. Functiile: turnObstacleRight si turnObstacleLeft se ocupa cu partea de ocolire a unui obstacol, folosindu-se la baza de functiile definite mai sus.

Etapa de identificare a unui obstacol

  1. Sunt definite variabile locale care sa calculeze distanta si durata.
  2. Urmeaza o secventa de cod care e menita sa genereze semnalul de trigger catre senzorul de ultrasunete.
  3. Apoi este folosita functia de pulseIn pentru a extrage durata de timp necesara primirii unui puls sau impuls.
  4. Intr-un final se poate aplica o formula matematica pentru a extrage distanta.(avand in vedere, o mica eroare)

Etapa de evitare a unui obstacol

  1. Este actionat servomotorul sub trei unghiuri diferite menite sa acopere directiile: “stanga”, “dreapta”, si “fata”.
  2. Datorita cablului USB care poate sa agate, am decis in teste sa realizez ocolirea numai pe partea dreapta.

Etapa de loop

  1. Calculeaza distanta pana la obiect folosindu-se de functiile descrise mai sus.
  2. Daca distanta obtinuta este mai mica decat o valoare de THRESHOLD, atunci avem un obstacol in fata si va trebui sa il evitam.
  3. In caz contrar, robotul trebuie doar sa urmareasca linia.

Fotografii

Youtube

Concluzii

Acest proiect a reprezentat prima mea incursiune in lumea hardware si pot spune ca a fost o experienta cu suisuri si coborasuri. Am intampinat destul de multe probleme legate de alimentare. Dupa ce am reusit sa le rezolv pe acestea, au aparut altele noi, legate de senzorii IR, care s-au dovedit a fi montati intr-un spatiu mult mai restrans decat asteptarile mele. M-am stresat destul de tare cu acest proiect, insa sunt oarecum multumit de rezultatul final.

Download

Jurnal

Bibliografie/Resurse

Export to PDF