Sunteți pe pagina 1din 24

Universitatea Politehnica din Bucuresti

Master ITS, Anul I

Cercetare stiintifica

Student: Bratu Gheorghe Dragos


Profesor indrumator: Conf.dr.ing.ec. Florin Codruț Nemțanu
ROBOT AUTONOM CU GHIDARE
AUTOMATĂ PE UN TRASEU
PRESTABILIT
CUPRINS

CAPITOLUL 1. PROIECTAREA UNUI ROBOT AUTONOM CAPABIL SĂ


SE GHIDEZE DUPĂ UN TRASEU PRESTABILIT...........................................2
1.1. Descriere generală........................................................................................................2
1.2. Microcontrolerul AVR..................................................................................................3
1.3. Programarea cu Bootloader..........................................................................................5
1.4. Principiul de funcționare al robotului...........................................................................7
1.5. Modulul de alimentare.................................................................................................8
1.6. Interfața de încărcare a Bootloader-ului.......................................................................9
1.7. Interfața USB................................................................................................................9
1.8. Driverul de motoare....................................................................................................11
1.9. Microcontrolerul.........................................................................................................12
1.10. Schema electrică finală a robotului proiectat.........................................................14
CAPITOLUL 2. CONCLUZII.........................................................................15
2.1. Concluzii....................................................................................................................15
2.2. Probleme întâmpinate și posibile îmbunătățiri...........................................................15
BIBLIOGRAFIE 17
ANEXĂ 19

1
CAPITOLUL 2.. CONCLUZII

CAPITOLUL 1. PROIECTAREA UNUI ROBOT AUTONOM CAPABIL


SĂ SE GHIDEZE DUPĂ UN TRASEU PRESTABILIT

1.1. Descriere generală


Un robot autonom capabil de a detecta un traseu și de a-l urma poate fi
util în numeroase aplicații, acesta poate fi programat pentru a menține un curs,
în timp ce își corectează în mod constant mișcările greșite folosind mecanisme
cu răspuns, un sistem simplu, dar eficient pentru bucle închise.
Roboții mai sofisticați pot fi capabili să distingă diferite culori, ceea ce îi
face mult mai preciși având abilitatea de a urmări un anumit traseu din mai
multe trasee care se intersectează.
În proiectarea unui astfel de robot este necesar un șasiu care îi permite să
se deplaseze, fie pe roți, fie un alt mod de locomoție. De asemenea necesită
dispozitive de detecție pentru a putea detecta traseul, și un calculator de bord
pentru a putea procesa informațiile. În unele cazuri de multe ori o metodă de
cost mult mai redusă este implementarea unui modul de cameră care îl poate
ajuta în urmărirea traseului. Un procesor interpretează datele de intrare de la
cameră și apoi controlează mișcările robotului.
Din teste se poate determina cât de bine funcționează un robot autonom.
Un test mai complex pentru detectarea traseelor este cel care conține curbe mai
strânse sau linii suprapuse, care pot induce în eroare un robot cu un cod limitat.
În funcție de componentele alese pentru proiectare, robotul poate fi pregătit să
înfrunte un mediu accidentat sau cu obstacole. Ca și programator am avut ocazia
de a învață un robot cum să urmărească un traseu prestabilit oferindu-i
proprietatea de a răspunde la stimuli.
În figura următoare este reprezentată schema bloc a proiectului de la care
am pornit.

2
CAPITOLUL 2.. CONCLUZII

Figura PROIECTAREA UNUI ROBOT AUTONOM CAPABIL SĂ SE GHIDEZE


DUPĂ UN TRASEU PRESTABILIT.1 – Schema bloc a proiectului

1.2. Microcontrolerul AVR


Microcontrolerele AVR Atmel sunt echipate cu un nucleu RISC care
rulează un singur ciclu de instrucțiuni și au o structură I / O bine definită,
reducând astfel nevoia de componente externe. Oscilatoarele interne,
cronometre, UART, SPI, rezistențe pull-up, modularea impulsurilor în durată,
ADC, comparator analogic, watch-dog timer care activează intrarea de reset
dacă se produc erori în programele rulate sunt unele dintre caracteristicile care
se pot găsi într-un dispozitiv AVR.
Instrucțiunile AVR sunt reglate pentru a micșora dimensiunea programului
dacă, codul este scris în limbaj de asamblare sau în C. Cu o memorie Flash pe
cip, programabilă în sistem și EEPROM, microcontrolerul AVR este o alegere
foarte potrivită, în scopul optimizării costurilor.
Pe lângă toate acestea majoritatea microcontrolerelor AVR suportă
programarea în sistem (ISP), adică se poate reprograma, fără a fi scos din circuit.
Acest lucru este foarte util, atunci când avem nevoie de a îmbunătăți sistemul,
sau pentru a realiză un design diferit. Majoritatea cipurilor AVR suportă de
asemenea Bootloader-e care duc ideea programării ISP la un nou nivel, și despre
care vom discuta în secțiunea următoare. Caracteristici precum interfețe I2C
permit adăugarea mult mai ușoară a altor dispozitive externe.
Câteva avantaje ale diferitelor familii de microcontrolere și de ce am ales
utilizarea unui microcontroler AVR:
 COST: AVR = PIC > 8051 (când spunem 8051 ne referim la familia
8051)
 DISPONIBILITATE: AVR = PIC < 8051
 VITEZA: AVR > PIC > 8051
Din punct de vedere al perifericelor integrate este greu de făcut o
comparație, deoarece majoritatea familiilor de microcontrolere, oferă o gamă de
caracteristici foarte bune, însă din acest punct de vedere o comparație poate fi
realizată doar din punctual de vedere al costurilor AVR = PIC > 8051.

3
CAPITOLUL 2.. CONCLUZII

O altă problemă ce trebuie discutată este despre instrumente și resurse,


familia 8051 este existenta de mai mult timp decât cea de la AVR, și de aceea
informațiile necesare despre acestea, și problemele întâmpinate pot fi găsite mult
mai ușor, însă și informații existente despre microcontrolere AVR sunt
disponibile chiar dacă sunt apărute mult mai recent, deoarece sunt din ce în ce
mai folosite și apar foarte multe informații, cât și moduri de depanare. Ca o
comparație între cele 3 ar fi cam așa 8051 > AVR = PIC.
În proiectarea robotului am ales să folosesc un microcontroler destul de
folosit și anume AtMega324PA, acesta este destul de utilizat în diverse aplicații,
iar informații despre el sunt disponibile atât de la producător cât și de la cei care
au mai lucrat cu el.
În figura următoare este atașată o imagine cu atribuirea pinilor pentru
microcontrolerul folosit.

Figura 1.1 – Atribuirea pinilor pentru AtMega324PA

Câteva caracteristici ale acestui microcontroler ar fi:


 Gama de tensiuni de alimentare între: 1.8 – 5.5 Volți;
 Puterea consumată la 1 MHz / 1.8 Volți / 25° C în modul activ este de
0.4 mA
 Arhitectura RISC avansată oferind 131 de instrucțiuni;
 2 timer-e de 8 biți și unul de 16 biți;
 6 canale care suportă PWM.

4
CAPITOLUL 2.. CONCLUZII

1.3. Programarea cu Bootloader


Bootloader-ul este o parte software care poate încărca programul ce
trebuie rulat de către microcontroler din diverse surse. Un astfel de Bootloader
este realizabil pentru programarea robotului numai cu ajutorul unei biblioteci
care se numește V-USB, care conține stiva USB în codul Bootloader-ului. Deși
această metodă este puțin mai ineficientă, deoarece necesită timp cât și
memorie, este mult mai avantajoasă în ceea ce privește programarea
microcontrolerului, deoarece odată încărcat Bootloader-ul pe microcontroler,
acest poate fi programat de câte ori dorim printr-o interfață USB.
Etapele ce trebuie parcurse în vederea încărcării bootloader-ului pe
microcontroler:
 Mai întâi vom avea de setat fuse-urile microcontrolerului, acestea
reprezintă o configurație de baza în cazul nostru alcătuită din 3 biți și
anume “EXTENDED FUSE 0xFD”, “LOW FUSE 0xDE”, “HIGH
FUSE 0x92”. Care reprezintă:
 BOOTSZ cu dimensiunea de 1024 de cuvinte, adică 2Kb, care este
maximă pentru Bootloader;
 BOOTRST, microcontrolerul nu va porni in programul obișnuit la
RESET ci direct în Bootloader;
 CKSEL oferă posibilitatea de a selecta un ceas extern de frecvență
mare ;
 CKDIV8 dezactivat, deoarece microcontrolerul nu va mai putea să
realizeze divizarea ceasului prin 8 înainte de a fi utilizat.
Pentru încărcarea Bootloader-ului pe microcontroler am folosit aplicația
GUI pentru Windows care se utilizează după cum urmează:
1) După conectarea cu calculatorul, selectăm din aplicație “Find device”

5
CAPITOLUL 2.. CONCLUZII

Figura 1.2 – Mod de operare al aplicației GUI

2) După ce dispozitivul va fi găsit, vom fi nevoiți sa încărcăm fișierul “.hex”,


pe care vrem să îl punem pe microcontroler.

Figura 1.3 – Mod de operare al aplicației GUI

3) În final vom putea să încărcăm programul dorit după apăsarea pe “Flash


device”, însă va trebui bifată și căsuța numită “Reboot AVR”, deoarece la
fiecare alimentare sau resetare la care nu este ținut apăsat butonul de
START”, codul va rula în mod automat, de reținut faptul că Bootloader-ul
va putea fi găsit doar dacă atunci când sistemul este alimentat, iar butonul
“START” este menținut apăsat.

6
CAPITOLUL 2.. CONCLUZII

Figura 1.4 – Mod de operare al aplicației GUI

1.4. Principiul de funcționare al robotului


Robotul folosește senzori IR pentru a sesiza linia, o serie de 8 senzori,
care în această configurație au fost plasați cu partea de detecție în jos. Ieșirile
senzorilor sunt semnale analogice care depind de cantitatea de lumină reflectată
înapoi, apoi semnalul analogic este transmis microcontrolerului care prin
intermediul ADC produce 0-uri și 1, pe care apoi le recepționează.

Figura 1.5 – Matrice de senzori

Începând de la “CENTRU”, senzorii din stânga sunt notați cu L1, L2, L3,
L4, iar cei din dreapta R1, R2, R3, R4. Atunci când un senzor se află pe traseu în
cazul nostru linia neagră, acesta citește 0, iar atunci când nu se află pe linie,
adică este pe fundalul alb acesta citește 1. Microcontrolerul va decide
următoarea mișcare conform algoritmului de mai jos care încearcă să
poziționeze robotul astfel încât L1 și R1 să citească 0, iar restul L2, L3, L4 și
respective R2, R3, R4 să citească 1.

Figura 1.6 – Condiția pentru deplasarea înainte

7
CAPITOLUL 2.. CONCLUZII

Algoritmul de ghidare și urmărire a traseului


PASUL 1: L = senzorul cel mai din stânga care citește 0; R = senzorul cel
mai din dreapta care citește 0. Daca niciun senzor din STANGA sau DREAPTA
este 0 atunci L sau R este egal cu 0.
Exemplu:

Figura 1.7 – Exemplu de ghidare al robotului

PASUL 2: Dacă toți senzorii au citit 1 mergi la pasul 3,


Altfel,
Dacă L > R Mergi la Stânga;
Dacă L < R Mergi la Dreapta;
Dacă L = R Mergi Înainte

PASUL 3: Întoarce-te la pasul 1.

1.5. Modulul de alimentare


Există două posibilități în alimentarea montajului, prima ar fi prin
folosirea tensiunii de 5 Volți stabilizată și furnizată de la mufa USB a unui
calculator sau laptop, însă acest mod pentru ceea ce am proiectat este
dezavantajos, deoarece îi limitează posibilitatea de mișcare și ar necesita și un
cablu prelungitor foarte lung.
Am ales varianta cea mai eficientă și anume alimentarea de la o baterie de
9 Volți. Pentru această variantă de alimentare am folosit un stabilizator de
tensiune și anume LM7805, care va furniza tensiunea necesară.
Cei doi condensatori ceramici multistrat și respectiv electrolitic se
montează cât mai aproape de pinii 1 și 3 ai stabilizatorului de tensiune, deoarece
aceștia sunt pentru “decuplare”. Ledul este montat pentru a semnaliza prezența
alimentării, iar rezistența este pentru limitarea curentului.
Pentru a putea vedea dacă ansamblul a fost montat corect, am alimentat
circuitul pentru prima dată, iar totul a funcționat cum trebuie, iar prezența
tensiunii a fost semnalizată de aprinderea ledului roșu.

8
CAPITOLUL 2.. CONCLUZII

În figura de mai jos este prezentată schema electrică a modulului de


alimentare.

Figura 1.8 – Sursa stabilizată de tensiune

1.6. Interfața de încărcare a Bootloader-ului


Pentru a putea încărca Bootloader-ul suntem nevoiți să utilizăm un set de
3 pini externi de la microcontroler și anume PB5 (MOSI), PB6 (MISO) și PB7
(SCK), un alt pin va fi legat la alimentarea de +5 Volți, unul la RESET și celălalt
la masă (GND). Această interfață poartă numele de AVR ISP, iar toți cei 6 pini
sunt necesari pentru conectarea unui programator și încărcarea Bootloader-ului
din meniul de programare prin metoda ISP.
În figura următoare se poate observa modul de conexiune al pinilor.

Figura 1.9 – Modul de conectare a interfeței ISP

1.7. Interfața USB


Pentru încărcarea programelor pe microcontroler am utilizat interfața USB
care este conectată la pinii PD2 și PD3, iar aceștia la rândul lor sunt conectați la
D+ și D- ai mufei USB. O mare problemă pe care am întâmpinat-o pentru
dispozitivele bazate pe V-USB, este că nu se pot conforma cu specificațiile
electrice ale standardului USB, deoarece caracteristicile de I /O nu se potrivesc
cu cerințele USB. Cu toate acestea, putem ajunge destul de aproape pentru a-l
face să funcționeze în mod fiabil.

9
CAPITOLUL 2.. CONCLUZII

Fiecare capăt al comunicării (gazdă și dispozitivul) necesită anumite


nivele de tensiune pentru un semnal înalt sau jos. Celălalt capăt trebuie să
genereze tensiuni în aceste domenii pentru comunicare de încredere.
Caracteristicile exacte sunt definite în caietul de sarcini USB.
Având în vedere că partea gazdă este fixă, trebuie să ne acomodăm cu
nivelurile trimise și așteptate. Gazda trimite 0 Volți pentru un nivel redus și 3,3
Volți pentru un nivel înalt. Aceste niveluri sunt destul de precise, chiar în cazul
în care caietul de sarcini permite toleranțe. Acest lucru, de obicei nu este o
problemă, indiferent de tensiunea de alimentare a AVR. Chiar și 5 Volți
detectează 3,3 Volți ca pe un nivel înalt.
Metoda aleasă pentru rezolvarea acestei probleme a fost conversia
nivelelor pe D+ și D-. În loc să reducem alimentarea AVR-ului am limitat
tensiunea de ieșire pe D+ și D- cu diode Zenner.
În figura de mai jos este reprezentată configurația pentru interfață USB.

Figura 1.10 – Interfața USB

Câteva avantaje și dezavantaje ale abordării acestei metode sunt:


1) Avantaje:
 Cost redus;
 Disponibilitate ridicată;
 Întregul sistem poate lucra la tensiunea de 5 Volți;
 Microcontrolerul poate fi tactat la rate ridicate.
2) Dezavantaje:
 Nu este o soluție tocmai curată, deoarece trebuie făcut un compromis
între toți parametrii

10
CAPITOLUL 2.. CONCLUZII

 Diodele Zener au gamă largă de caracteristici, mai ales la curenți slăbi,


iar rezultatele nu pot fi reproduse;
 Curenți înalți atunci când transmisia se face la nivel înalt;
 Nivelul înalt este diferit între starea de semnalizare și starea de repaus,
deoarece pentru semnalizare se folosesc curenți mari pentru a conduce
diodele, pe când în starea de repaus acestea sunt conduse de o
rezistență de pull-up de 1,5 kΩ.

1.8. Driverul de motoare


Pentru controlul motoarelor am ales utilizarea integratului L298N. Acesta
are 4 intrări care controlează motoarele și încă 2 “enable” care sunt folosite
pentru a porni și opri motorul, însă în cazul nostru sistemul nu este proiectat
pentru managementul energiei, iar cele 2 intrări sunt conectate direct la +5 Volți.
Însă dacă am dori să realizăm acest lucru pentru a putea controla viteza
motoarelor am avea nevoie de o formă de undă PWM cu un factor de umplere
variabil aplicat pe pinii de “enable”.
Comutarea rapidă a tensiunii între Vs și GND da o tensiune efectivă între
Vs și GND a cărei valoare depinde de factorul de umplere al PWM. Procentul de
100% al factorului de umplere corespunde lui Vs.
După cum se poate observă din schema electrică există montate 8 diode
Schottky 1N4007, acestea sunt montate din pricină faptului că integratul L298N
nu deține astfel de componente intern și au rolul de a proteja circuitul de
eventualele perturbații ce pot apărea. În cazul în care acestea nu sunt montate
microcontrolerul poate fi dereglat și se poate reseta, mai ales la schimbări ale
direcției.
Majoritatea circuitelor folosesc integratul L293D pentru controlul
motoarelor, însă am ales L298N pentru că acesta are o capacitate de curent de 2
Amperi per canal și o tensiune de 45 Volți spre deosebire de 0,6 Amperi și
tensiunea de 36 Volți. L293D nu are o capsulă potrivită pentru atașarea unui
radiator, practic nu poate fi folosit pentru tensiuni de peste 16 Volți fără a se
arde, pe când L298 funcționează fără probleme și fără radiator la această
tensiune deși este bine să folosim unul.
În figură de mai jos este reprezentată schema electrică pentru configurația
cu L298N.

11
CAPITOLUL 2.. CONCLUZII

Figura 1.11 – Configurația cu L298N

1.9. Microcontrolerul
Pentru montarea microcontrolerului am folosit un soclu DIP40, cu 40 de
pini. Micro-contactul montat pe pinii PD0 și PD1 este necesar pentru depanare,
dar și pentru a fi menținut apăsat în momentul încărcării programului, pentru ca,
dispozitivul cu V-USB să poată fi detectat de către aplicația GUI în Windows
sau Linux, în funcție de ce se utilizează. Led-ul este folosit tot pentru depanare
sau pentru diverse teste care se pot efectua asupra microcontrolerului.
Micro-contactul montat pe pinul 9 servește pentru resetarea manuală a
microcontrolerului.
Cei 3 condensatori ceramici C7, C5 și C1 de 100nF, montați pe AREF,
VCC și AVCC sunt pentru decuplare și trebuie montați cât mai aproape posibil
de acești pini.
Cei 2 condensatori C2 și C3 de 22pF montați lângă cristalul de quartz au
rolul de a forma capacitatea de sarcină pentru cristalul respectiv împreună cu
capacitatea parazită dată de cablajul utilizat. Alegerea valorilor optime ține cont
de capacitatea necesară specificată de producător notată CL, și de capacitatea
parazită a cablajului Cs.
Formula pentru calcularea valorilor acestor condensatori este:
C1  C 2
CL 
C1C 2  CS

În figura următoare este prezentată configurația pentru microcontroler:

12
CAPITOLUL 2.. CONCLUZII

Figura 1.12 – Designul microcontrolerului

13
CAPITOLUL 2.. CONCLUZII

1.10. Schema electrică finală a robotului proiectat.

Figura 1.13 – Schema completă a proiectului

14
CAPITOLUL 2.. CONCLUZII

CAPITOLUL 2. CONCLUZII

2.1.Concluzii
Proiectarea robotului poate fi realizată din punct de vedere economic într-
un mod eficient. Avantajele sale sunt: că este în totalitate electric, are un consum
redus, iar software-ul este optimizat direct în softul de programare AtmelStudio,
capacitatea ocupată fiind de 1 Kb. Modul de programare este foarte simplu,
deoarece aceasta se realizează mai întâi direct în sistem, iar mai apoi se face prin
USB, de câte ori este nevoie fără a mai fi nevoiți să scoatem microcontrolerul
din circuit.

2.2.Probleme întâmpinate și posibile îmbunătățiri


În proiectarea cablajului am întâmpinat numeroase probleme, atât de
proiectare cât și de asamblare.
Prima a fost în alegerea microcontrolerului, deoarece înaintea lui
AtMega324PA am folosit în proiectarea robotului AtMega161 rămas dintr-un
proiect anterior, însă ulterior am descoperit faptul că acesta nu deține ieșiri care
să suporte PWM, ceea ce s-a soldat cu modificarea cablajului.
O altă problemă a fost cu puntea H (L298N), care a venit defectă din
fabrică și inversa sensul de rotație pentru unul din motoare.
Au mai fost probleme și în lipirea și alimentarea improprie a lui L298N.
În prima etapă acesta a fost alimentat pe pinul 4 (VS) cu 5 Volți, fiind insuficient
pentru a fi pus în funcție, ceea ce a necesitat o alimentare directă din bateria de 9
volți. Însă înainte de asta legăturile fiind făcute în mod greșit adică firul din
bateria de 9 Volți a fost conectat în anodul setului de diode, motoarele se mișcau
foarte încet, provocând astfel un scurtcircuit care punea sursa în protecție și
consuma un curent de 3,42 Amperi, maxim debitat de sursă, efectul secundar
fiind încingerea excesivă a integratului.
Din punct de vedere al programării software a fost necesar definirea unui
mod de lucru al robotului, pe care apoi acesta să îl poată urmări. Odată rezolvat
acest lucru a venit problema senzorilor și a curbelor. Am observat modul de
funcționare al acestora și anume, atunci când sunt plasați pe bandă neagră
aceștia au o tensiune de 120 de mV, iar când sunt plasați pe fundal alb prezintă o
tensiune de 2,54 Volți, odată rezolvat acest lucru a urmat acționarea celor 2

15
CAPITOLUL 2.. CONCLUZII

motoare care trebuie făcută în mod diferit, deoarece la venirea unei curbe,
robotul devia din traseu și se oprea, așa că am setat din soft ca la întâlnirea unei
curbe unul din motoare să se învârtă mai rapid, și celălalt mai lent.
Ansamblului îi mai pot fi aduse atât îmbunătățiri software cât și hardware.
Și anume se pot utiliza diode Zenner de 3,6 Volți indicate pentru dispozitivele,
cu V-USB, deoarece diodele de 3,3 volți din cauza rezistorului pull-up se
limitează pe undeva pe la 2,7 Volți și s-ar putea că dispozitivul să nu poată fi
detectat.
Senzorii folosiți modelul QTR-8A ar putea fi înlocuiți pentru a nu se pune
o problemă de detecție datorată distanței cu QTR-8RC care au o distanță
maximă de 9 mm spre deosebire de 6 mm.
Softul poate fi îmbunătățit prin implementarea mișcării înapoi a robotului.
Acesta ar putea ca atunci când deviază de la traseu din cauza unei erori de citire,
acesta să se poate întoarce în ultima poziție memorată pentru a-și relua din nou
cursul.

16
BIBLIOGRAFIE

BIBLIOGRAFIE

 BARSHAN, B., AYRULU, B., UTETE, S. Neural network-based target


differentiation using sonar for robotics applications, IEEE Transactions
on Robotics and Automation, vol. 16, no. 4, August 2000, pp. 435-442
(8)
 BRÄUNL, T. Parallel Image Processing, Springer-Verlag, Berlin
Heidelberg,2001
 DINSMORE, Data Sheet Dinsmore Analog Sensor No. 1525, Dinsmore
Instrument Co., http://dinsmoregroup.com/dico, 1999
 EVERETT, H.R. Sensors for Mobile Robots, AK Peters, Wellesley MA,
1995
 JÖRG, K., BERG, M. Mobile Robot Sonar Sensing with Pseudo-Random
Codes, IEEE International Conference on Robotics and Automation 1998
(ICRA ‘98), Leuven Belgium, 16-20 May 1998, pp. 2807-2812 (6)
 KIMMEL, R. Demosaicing: Image Reconstruction from Color CCD
Samples, IEEE Transactions on Image Processing, vol. 8, no. 9, Sept.
1999, pp.1221-1228 (8)
 KUC, R. Pseudoamplitude scan sonar maps, IEEE Transactions on
Roboticsand Automation, vol. 17, no. 5, 2001, pp. 767-770
 MURESAN, D., PARKS, T. Optimal Recovery Demosaicing, IASTED
International Conference on Signal and Image Processing, SIP 2002,
Kauai Hawaii,
http://dsplab.ece.cornell.edu/papers/conference/sip_02_6.pdf, 2002, pp.
(6)
 PRECISION NAVIGATION, Vector Electronic Modules, Application
Notes, PrecisionNavigation Inc., http://www.precisionnav.com, July 1998
 SHARP, Data Sheet GP2D02 - Compact, High Sensitive Distance
Measuring Sensor, Sharp Co., data sheet, http://www.sharp.co.jp/ecg/,
2006
 SICK, Auto Ident Laser-supported sensor systems, Sick AG,
http://www.sick.de/de/products/categories/auto/en.html, 2006
 SMITH, C. Vision Support System for Tracked Vehicle, B.E. Honours
Thesis,The Univ. of Western Australia, Electrical and Computer Eng.,
supervised by T. Bräunl, 2002

17
BIBLIOGRAFIE

 STAMATIOU, N. Sensor processing for a tracked vehicle, B.E. Honours


Thesis, The Univ. of Western Australia, Electrical and Computer Eng.,
supervised by T. Bräunl, 2002
 BOLTON, W. Mechatronics – Electronic Control Systems in Mechanical
Engineering, Addison Wesley Longman, Harlow UK, 1995
 EL-SHARKAWI, M. Fundamentals of Electric Drives, Brooks/Cole
Thomson Learning, Pacific Grove CA, 2000
 HARMAN, T. The Motorola MC68332 Microcontroller - Product Design,
Assembly Language Programming, and Interfacing, Prentice Hall,
Englewood Cliffs NJ, 1991
 Programming and Customizing the AVR Microcontroller – Dhananjay V.
Gadre Parallel Port Complete – Jan Axelson
 www.robotics.ucv.ro/flexform/aplicatii_ser2/Mecatronica%20II/Saceanu
%20NinetaROBOTI%20INDUSTRIALI/Structura%20robotului/Structura
%20robotului.doc
 http://www.atmel.com/products/microcontrollers/default.aspx?src=parent
 http://www.robotics.ucv.ro/old/wmrc2001/7.pdf
 http://en.wikipedia.org/wiki/ULTra_%28rapid_transit%29
 http://www.avrbeginners.net/
 http://www.andrew.cmu.edu/user/rjg/websensors/robot_sen
sors2.html
 https://www.sparkfun.com/datasheets/Robotics/L298_H_Bridge.pdf

18
ANEXĂ

ANEXĂ

Software-ul utilizat pentru programarea microcontrolerului

#define F_CPU 8000000


#include <avr/io.h>

#include <avr/interrupt.h>
#include <util/delay.h>

/* Directii */
#define L 0x10
#define R 0x40
#define FW 0x50
#define STOP 0x00

#define CHANNEL 0

/* Numarul de senzori */
#define NSENS 8

#define S 200

void init(void)
{
/* PORTA = Intrari senzori */
PORTA = 0x00;
DDRA = 0x00;

/* PORTD = actrivare punte H */


/* iesiri PD4, PD5, PD6, PD7 */
PORTD = 0x00;
DDRD = 0x00;

19
ANEXĂ

DDRD |= (1<<PD4);
DDRD |= (1<<PD5);
DDRD |= (1<<PD6);
DDRD |= (1<<PD7);

PORTD |= (1<<PD4);
PORTD |= (1<<PD5);
PORTD |= (1<<PD6);
PORTD |= (1<<PD7);

PORTD |= (1<<PD0);
PORTD |= (1<<PD1);

/* Initializare timer */

TCCR1A = 0b10100001;
TCCR1B = 0b00000000;
OCR1A = 0;
OCR1B = 50;
TCCR2A = 0b10100001;
TCCR2B = 0b00000000;
OCR2A = 0;
OCR2B = 50;
}
void move(uint8_t dir, uint16_t speed)
{
/* Directie */
PORTD = dir;
/* Viteza PWM */
if (dir==FW)
{
OCR1A = 0;
OCR1B = speed;
OCR2A = 0;
OCR2B = speed;
}

if (dir==L)
{
OCR1A = 0;
OCR1B = speed;
OCR2A = 0;
OCR2B = 70;

20
ANEXĂ

}
if (dir==R)
{
OCR1A = 0;
OCR1B = 70;
OCR2A = 0;
OCR2B = speed;
}

if (dir==STOP)
{
OCR1A = 0;
OCR1B = 0;
OCR2A = 0;
OCR2B = 0;
}
}
void sensor_init()
{
/*
* valoare referinta AVCC
* prescaler 128
*/
ADMUX = (1 << REFS0);
ADCSRA = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) | (1 <<
ADEN);
}
uint16_t read(uint8_t channel)
{
// selecteaza canalul pe care sa se faca conversia
ADMUX &= ~(0x1F << MUX0);
ADMUX |= (channel << MUX0);
// porneste o conversie
ADCSRA |= (1 << ADSC);
// asteapta pana cand se termina conversia
while(!(ADCSRA & (1 << ADIF)));
// intoarce valoarea convertita
return ADC;
}
int main(void)
{
uint16_t v[8];
uint8_t i=0, newstate=0, oldstate=0;

21
ANEXĂ

init();
sensor_init();
TCCR1B|=(1<<CS10); //fosc/1
TCCR2B|=(1<<CS20); //fosc/1
while(1)
{
for(i=0; i<8; i++)
{
v[i] = read(i);
}

if ((v[0] >
80)&&(v[1]>80)&&(v[2]>80)&&(v[3]>80)&&(v[4]>80)&&(v[5]>80)&&(v[6]
>80)&&(v[7]>80))
{move (STOP,S);
}
else {
if((v[0] > 100)||(v[1]>100)||(v[2]>100)){
move (L,S);
}
else {
if((v[7] > 100)||(v[6]>100)||(v[5]>100)){
move (R,S);
}
else {
if((v[4] > 100)||(v[3]>100)){
move (FW,S);
}
else move(STOP,S);
}
}
}
}
}

22

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