Sunteți pe pagina 1din 6

Proiect : Proiectarea cu microprocesoare

by Andronache Alexandru Petru grupa 1303B

SBC876- Robot mobil cu motoare DC si senzor de lumina


Lucrarea de proiect urmareste realizarea unui robot mobil care poate urmari o linie pe o pista

Resurse:
sistem de dezvoltare SBC876, extensie 2 motoare DC, extensie senzor din 2 forotranzistoare si un LED infrarosu, 1 driver.

Descriere componente:
a) Senzorul:

b) Driverul:

Sectiunea 1 este driver pentru mecanismul de directie din fata robotului,unde pinii RB vor comanda directia; Sectiunea 2 functioneaza asemeni unui tri-state gate c) Masina de jucarie cu 2 motoare DC; 1 motor in spate folosit pentru miscare inainte/inapoi comandat de sectiunea 2 din driver (driverul a fost facut doar pentru miscarea inainte dar se poate folosi 2 modele de sectiunea 1 pentru ambele motoare) si un motor in fata pentru directie comandat prin sectiunea 1.

Rezultatele in urma constructiei:


motorul din spate functioneaza folosind driverul dar nu are destula forta pentru a putea trage robotul; senzorul de lumina functioneaza(prin compararea valorilor dintre cei 2 senzori si transmiterea prin intermediul ledului L2 din schema SBC876; motorul din fata nu functioneaza problema fiind posibil in sectiunea 1(recomand folosirea unui H bridge in alte proiecte); treanzistorul din sectiunea 2 tinde sa se incalzeasca rapid atat timp cat sunt oprite fortat rotile din spate

Cod prototip:
#include <pic.h>

//SBC are cuart de 20 MHz

#define WaitFor1Us asm("nop"); asm("nop") #define Jumpback asm("goto $ - 3")

unsigned char delayus_variable;

//maxim 255 us #define DelayUs(x) { \ delayus_variable=(unsigned char)x; \ WaitFor1Us; } \ asm("decfsz _delayus_variable,f"); \ Jumpback;

//maxim 255 ms

void DelayMs(unsigned char cnt) { unsigned char i; do { i = 4; do { DelayUs(250); } while(--i); } while(--cnt); }

unsigned char ad[2]={0b01000001,0b01001001}; //ADCON0

char readADC(char c) // Returneaza octet superior convertor - rutina imbunatatite 23.05.2011 { char val; ADCON0=ad[c]; // alimentare modul AD DelayUs(10); // asigurare stabilitate ADCON1=0b00000000; // RA0-RA5 intrari analogice DelayUs(10); ADGO=1; //start conversie //asteapta sfarsitul conversiei

while(ADGO==1);

val=ADRESH; return val; }

void main(void) { char s_stg,s_drpt;

TRISA=0xFF; TRISB=0x00; for(;;) {

//PORTA intrare // La portul B este ByteDisplay

s_stg=readADC(0); // Achizitie canal 0 s_drpt=readADC(1); DelayUs(45); RB7=1; if(s_stg==s_drpt) {RB0=0; RB1=0; RB3=0; }

else if(s_stg>s_drpt) { RB1=0; RB3=1; RB0=1; } else if(s_stg>s_drpt){ RB0=0; RB3=1; RB1=1; }

Concluzii personale:
1) Caracteristica esentiala a motoarelor pentru astfel de roboti este puterea deci recomand folosirea motoarelor servo sau motoare DC de 12V in sus sau motoare DC de 1.5-5v(de la jucarii) doar prin cuplaje indirecte cu minim 3 roti dintate; 2) Folosirea schemelor deja testate daca aveti cunostinte slabe de elctronica; 3) Daca se doreste folosirea energiei solare sau a altor surse de energie cum ar fi enrgie solara recomand puternic calcularea tensiunii si curentului necesar pentru proiect(de tinut cont celule fotovoltaice pot genera tensiune buna dar putin curent in comparatie cu bateriile) ;o alta observatie in legarura cu folosirea energiei solare este necesitatea unui incarcator care va incarca un acumultor cu energia solara; 4) Inceperea lucrului la proiect trebuie facuta din timp; 5) Proiectul mi-a marit cunostintele electronice enorm;