Sunteți pe pagina 1din 9

UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI

ELECTRONICĂ

Proiect la Microcontrolere si sisteme integrate

Robot mobil line follower

Specilizarea şi anul : Sisteme de conducere în robotică, anul I

Nume : Iacob Gabriel – Costinel

Data: 18.01.2018

Disciplina : MSI
Curpins :

1. Descrierea microcontroller-ului utilizat


2. Descrierea sistemului de dezvoltare
3. Mijloacele de dezvoltare si testare a aplicatiei
4. Descrierea aplicatiei
1.Descrierea microcontroller-ului utilizat

ATmega328 este un cip microcontroler creat de către Atmel și face parte din seria
de megaAVR.

Atmega328 AVR 8-bit este un circuit integrat de înaltă performanță ce se bazează pe un


microcontroler RISC, combinând 32 KB ISP flash o memorie cu capacitatea de a citi-în-timp-ce-
scrie, 1 KB de memorie EEPROM, 2 KB de SRAM, 23 linii E/S de uz general,
32 Înregistrari procese generale, trei cronometre flexibile/contoare în comparație
cu, întreruperi internă și externă, programator de tip USART, orientate interfață serială byte de 2
cabluri, SPI port serial, 6-canale 10-bit Converter A/D (8-chanale
în TQFP și QFN/MLF packages), "watchdog timer" programabil cu oscilator intern, și cinci
moduri de software-ul intern de economisire a energiei selectabil.

Modul Power-down salvează conținutul registrului, dar blochează Oscilatorul,


dezactivând toate celelalte funcții ale cip-ului până la următoarea întrerupere sau resetare
hardware. În modul de economisire a energiei, cronometrul asincron continuă să funcționeze,
permițând utilizatorului să mențină o bază temporizator în timp ce restul dispozitivul dormește.
Modul de reducere a zgomotului ADC oprește CPU-ul și toate modulele de intrare / ieșire, cu
excepția cronometru asincron și ADC pentru a minimiza zgomotul de comutare în timpul
conversiilor ADC. În modul de așteptare,
Oscilatorul de cristal / rezonator este în funcțiune în timp ce restul aparatului dormește. Acest
lucru permite pornirea foarte rapidă combinate cu un consum redus de energie. În modul
Extended Standby, atât oscilatorul principal cât și cronometrul asincron continuă să ruleze.
Dispozitivul funcționează 1,8-5,5 volți.
Parametrii microcontroller-ului sunt :

Azi, ATmega328 acesta este frecvent utilizat în mai multe proiecte și sisteme autonome unde
un microprocesor simplu, de consum redus, cost scăzut. Poate cea mai comună implementare
acest chip este populara platforma pentru Arduino, pentru modelele Uno și Nano.

2. Descrierea sistemului de dezvoltare

Microprocesorul folosit la dezvoltarea acestui robot line follower este ATMega328.


Acesta are memorie EEPROM ceea ce este folositoare, deoarece este necesară memorarea
instrucțiunilor și după întreruperea alimentării plăcii de dezvoltare. Acesta are 6 pini analogici
care sunt necesari funcționării barii de senzori.
Pentru a putea urmării linia, s-a folosit bara de senzori QTR-8A, cu 8 senzori cu ieșiri
analog, un pin digital pentru pornirea diodelog de pe bara de senzori. Pentru aceasta aplicație
sunt folosiți doar 6 senzori. Pinii senzorilor folosiți au fost legați la pinii analog de pe placuta
Arduino Uno R3. Bara de senzori este alimentată cu 3.3V direct din Arduino.
Am folosit shield-ul de motoare DualMotorDriver VNH5019, acesta este introdus
direct în placuța Arduino. Acest motor driver este utilizat deoarece poate da informația către
două motoare DC, putând astfel fii modificată viteza fiecăruia dintre ele în mod separat. Senzorii
sunt introduși în pinii analog din shield deoarece pinii shield-ului sunt conectați direct în cei ai
placuței Arduino.
Atât alimentarea motoarelor DC cat și a placii Arduino se realizează prin pinii special
destinați din shield-ul de motoare, acestia având conexiune directa cu alimentarea placii de
dezvoltare.
Alimentarea se face de la o baterie LiPo de 3.7 V 1400mAh pe care o conectam la un
regulator de tensiune Step-Up pentru a avea tensiunea necesara de 6V pentru alimentarea
motoarelor.
Principiul de funcționare al robotului line follower este :

3. Mijloace de dezvoltare și testare a aplicației

Mediul IDE în care a fost programat robotul line follower este Arduino IDE.

Programele Arduino pot fi scrise în orice limbaj de programare cu un compilator capabil


să producă un cod mașină binar. Atmel oferă un mediu de dezvoltare pentru microcontrolerele
sale, AVR Studio și mai nou, Atmel Studio. Proiectul Arduino oferă un mediu integrat de
dezvoltare (IDE), care este o aplicație cross-platform, scrisă în Java. Acesta își are originile în
mediul de dezvoltare pentru limbajul de programare Processing și în proiectul Wiring. Este
proiectat pentru a introduce programarea în lumea artiștilor și a celor nefamiliarizați cu
dezvoltarea software. Include un editor de cod cu funcții ca evidențierea sintaxelor, potrivirea
acoladelor și spațierea automată și oferă mecanisme simple cu un singur click, pentru a compila
și a încărca programele în plăcuța Arduino. Un program scris în IDE pentru Arduino se numește
sketch.Arduino IDE suportă limbajele de programare C și C++ folosind reguli speciale de
organizare a codului. Arduino IDE oferă o librărie software numită Wiring, din proiectul Wiring,
care oferă multe proceduri comune de intrare și ieșire. Un sketch tipic Arduino scris în C/C++
este compus din două funcții care sunt compilate și legate funcția principală de program main(),
într-un program executabil cu o execuție ciclică:

 setup(): o funcție care este rulată o singură dată la începutul programului, când se
inițializează setările.
 loop(): o funcție apelată în mod repetat până la oprirea alimentării cu energie a plăcuței.

4. Descrierea aplicației

Un line follower este un robot autonom, capabil să se deplaseze pe un traseu predefinit. Traseul
este de fapt o dungă colorată, așezată pe un fundal de culoare contrastantă. De obicei, se folosește
traseul de culoare neagră, iar fundalul de culoare albă (ca și în cazul nostru).
Funcționalitatea aplicației merge pe principiul :

La începutul programului se declară librăriile folosite pe parcursul programului :

“#include <DualVNH5019MotorShield.h>

#include <QTRSensors.h> “

Dupa declararea librăriilor se declară viteza maximă optimă de deplasare a robotului


(“#define rightMaxSpeed / #define leftMaxSpeed” ).

Pentru urmarirea liniei în cod trebuie folosiți coeficientul proportional Kp și coeficientul


derivator Kd. În primul rand i se dă o valoarea cat mai mică lui Kp, astfel încât să aflam viteza
optima de deplasare a robotului mobil, formula de calcul este : 2500(eroarea maxim posibila) *
Kp(valoarea alocata parametrului de către utilizator) = Valoarea maxim posibila a motoarelor în
funcție de Kp.

Se alocă pinii corespunzători senzorilor infrarosii : “QTRSensorsAnalog qtra((unsigned


char[]) { A0,A1,A2,A3,A4,A5} ,NUM_SENSORS, NUM_SAMPLES_PER_SENSOR,
EMITTER_PIN);”
Se defineste numărul de senzori folosiți : „#define NUM_SENSORS 6”

Calibrarea senzorilor se face manual, prin trecerea lor deasupra liniei negre de cateva ori.
Calibrarea manuală dureaza 8-10s, pentru ca microcontroller-ul sa memoreze valorile citite de
senzorii infraroșii, astfel putând transmite informația la motoare, dandu-le sensul necesar de
deplasare, astfel încât robotul sa iși mențina senzorii din mijloc pe linia neagra, fiind posibila
finalizarea traseului.

“for (int i = 0; i < 100; i++) { qtra.calibrate();

delay(20); } “

Se citeste poziția senzorilor din mijloc, pentru a se afla poziționarea robotului line
follower pe traseu prin intermediul instrucțiunii “int position = qtrrc.readLine(sensors)”.

Eroarea de poziționare se afla prin intermediul instrucțiunii “int error = position –


2500”(2500 reprezentând valoarea maxima a erorii).

Viteza motoarelor este dată de formula : “int motorSpeed = Kp * error + Kd * (error -


lastError);”, lastError reprezinta ultima eroare memorata de catre microcotroller pentru a se afla
poziția exactă a senzorilor pe lina neagră, care urmeaza după rularea acestei instrucțiuni a fii
înlocuită cu eroarea folosita în formula.
Bibliografie

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-
bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf

https://www.pololu.com/docs/pdf/0J49/dual_vnh5019_motor_driver_shi
eld.pdf

https://www.arduino.cc

S-ar putea să vă placă și