Line follower

Introducere

Proiectul are drept scop realizarea unei masinute care urmareste in mod independent un traseu format din linii negre pe un fundal alb.

Descriere generală

  • Placuta de baza realizata in cadrul laboratorului (ATMega16 MCU)
  • 2 motoare comandate prin puntea H
  • 6 senzori IR amplasati in partea frontala a masinii, cat mai aproape de motoare pentru a asigura precizia virajului
  • alimentarea se realizeaza folosind 12 baterii AAA (1.5V)

Hardware Design

Lista Piese

  • 2 x 50:1 Metal Gearmotor 37Dx54L mm - 12 V: 200 RPM and 300 mA
  • placuta punte H : 4 x tranzistori IRF640 + 4 x tranzistori IRF9640 (pnp, npn) + 4 tranzistori BC547
  • placuta senzori 6xIR CNY70, 6 rezistente x 10 KOhmi, 6 rezistente x 220 Ohmi
  • placuta de baza conform specificatiilor din laborator (ATMega16 MCU)
  • 12 x baterii AAA 1.5 V pentru alimenarea motoarelor si a microcontrollerului
  • 2 x roti plastic
  • sasiu lemn

Schema electrica Punte H:

Schema Proteus Punte H:

Pentru aceasta placuta am folosit de fapt doua astfel de punti, cate una pentru fiecare motor. Legatura intre aceasta si placuta de baza este facuta prin portul C al microcontroller-ului

Schema Proteus placuta senzori:

Placuta de senzori este legata la microcontroller pe portul A al acestuia.

Software Design

Pentru aceasta etapa am folosit IDE-ul CodeVisionAVR pentru a automa anumite taskuri:

  • generare schelet cod cu setarea parametrilor necesari: frecventa cuartului (16Mhz), activarea portului analog digital

Pentru bootloader am folosit BootloadHID deoarece mi s-a parut mai usor de utilizat :

  • Nu necesita instalarea unui driver special de Windows
  • Este deja configurat pentru setup-ul folosit la proiect (Atmega16 @ 16MHz cu USB-ul conectat pe D+ → PD2, D- → PD3)
  • LED-ul de pe PD7 clipeste cat timp ne aflam in bootloader
  • Aplicatia porneste daca se apasa pe tasta conectata la PD6 sau daca trec 10 secunde fara activitate de programare pe USB.

Incarcarea unui program se face folosind programul bootloadHID.exe (inclus in arhiva bootloader-ului atasata in seciunea downloads).

Detalii implementare

Functii:

  • inainte(), inapoi() - ambele motoare rotesc in aceeasi directie
  • stanga(), dreapta() - un motor roteste intr-o directie, iar celalalt in directia opusa : utile pentru curbe stranse
  • half_dreapta(), half_stanga() - intr-un anumit moment de timp, functioneaza un singur motor (stanga/dreapta) : utile pentru curbe largi
  • read_adc() - implementeaza partea de achizitie de date: face conversia AD pentru unul din cele 6 canale disponibile (1 canal/senzor)
  • main(): initializarea porturilor I/O; setare clk 1 + clk 2, initializari intreruperi, determina si seteaza directia in functie de datele primite de la senzori: verifica daca valoarea adc(canal_senzor) este < 90 ⇒ culoare neagra (senzorul se afla pe traseu)

Pentru mai multe detalii, fisierul sursa a codului program este prezent in arhiva atasata in sectiunea Download .

Rezultate Obţinute

Am obtinut o masinuta line follower care poate urmari trasee ce pot contine curbe largi sau stranse. Desigur, precizia acestuia ar putea fi imbunatatita, deoarece motoarele functioneaza la viteza constanta/maxima.

Concluzii

Pentru imbunatatiri se poate utiliza PWM in controlarea motoraselor, obtinandu-se o viteza de rotatie variabila necesara urmaririi cu precizie a unui traseu foarte complex.

Download

Bibliografie

pm/prj2010/mcarjaliu/lf_leo.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0