Documente Academic
Documente Profesional
Documente Cultură
Cercetare stiintifica
1
CAPITOLUL 2.. CONCLUZII
2
CAPITOLUL 2.. CONCLUZII
3
CAPITOLUL 2.. CONCLUZII
4
CAPITOLUL 2.. CONCLUZII
5
CAPITOLUL 2.. CONCLUZII
6
CAPITOLUL 2.. CONCLUZII
Î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.
7
CAPITOLUL 2.. CONCLUZII
8
CAPITOLUL 2.. CONCLUZII
9
CAPITOLUL 2.. CONCLUZII
10
CAPITOLUL 2.. CONCLUZII
11
CAPITOLUL 2.. CONCLUZII
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
12
CAPITOLUL 2.. CONCLUZII
13
CAPITOLUL 2.. CONCLUZII
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.
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
17
BIBLIOGRAFIE
18
ANEXĂ
ANEXĂ
#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;
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