This is an old revision of the document!
Senzorul de Parcare este un dispozitiv care se foloseste de 2 senzori ultrasonici care vor detecta obiectele ce se afla in vecinatatea lor. Un LED se va aprinde atunci cand unul dintre senzori va detecta un obiect apropiat de autovehicul. Acesta isi va schimba culoarea incepand cu verde(obiectul nu este inca un pericol) ajungand, treptat, la culoarea rosie(obiectul este un pericol pentru masina). De asemenea, distanta pana la cel mai apropiat obiect detectat (daca un obiect este detectat) va fi afisata pe un ecran LCD. Pentru a atrage atentia soferului, voi folosi un buzzer pasiv care isi va schimba frecventa in functie de distanta obiectului. Cu cat obiectul este mai aproape, cu atat frecventa buzzer-ului va creste.
Ideea de la care am pornit in dezvoltarea proiectului a fost masina. Cand am parcat masina, am parcat-o foarte aproape de un stalp. Din fericire nu am atins stalpul, dar un senzor de parcara m-ar fi ajutat sa las mai mult spatiu.
Consider ca acest dispozitiv este unul foarte util in masina orcarei persoane, ajutand soferul sa evite deteriorarea masinii in timpul parcarii sau chiar in timpul navigarii in spatii inguste.
Senzorii HC-SR04 transmit informatia colectata catre microcontroller. Acesta va transmite informatia catre LCD, va seta frecventa buzzer-ului si va aprinde LED-ul corespunzator senzorului.
Componente utilizate:
Am inceput prin rezolvarea proiectului pentru a verifica daca functioneaza toate componentele. Apoi, am implementat, pe rand, fiecare functionalitate astfel (in Platform IO):
1. LCD display: Am implementat I2C pentru a putea comunica cu display-ul si functiile necesare pentru a afisa pe display. Am folosit urmatoarele exemple pentru a putea implementa: https://github.com/denisgoriachev/liquid_crystal_i2c_avr/tree/master https://github.com/gpg/wk-misc/blob/master/ebus/i2c-lcd.c
2. Am implementat functionarea senzorilor ultrasonici. Pentru a detecta distanta de la cel mai apropiat obiect a fost nevoie de trimiterea unui impuls si asteptarea primirii acestuia. Astfel, prin diferenta de la momentul trimiterii pana la momentul primirii (si inca un calcul scurt) va fi chiar distanta dorita.
<code c++> void ultrasonic_trigger(void) {
// Send trigger signal PORTB |= _BV(TRIG); _delay_us(10); PORTB &= ~_BV(TRIG);
} <\code> Pinul de trigger este put pe HIGH (1) pentru 10 microsecunde, apoi pus inapoi pe LOW (0).
<code c++> uint16_t ultrasonic_calculate_distance(void) {
if(turn == 0) { while(!(PINB & _BV(ECHO1))); TCNT1 = 0;
TCCR1B |= _BV(CS11);
while(PINB & _BV(ECHO1)); } else { while(!(PINB & _BV(ECHO2))); TCNT1 = 0;
TCCR1B |= _BV(CS11);
while(PINB & _BV(ECHO2)); } TCCR1B &= ~_BV(CS11); return TCNT1 / 58;
} <\code> Pinul corespunztor senzorului asteapta semnalul trimis de trigger si calculeaza distanta. Deoarece, pinii PWM de pe microcontroller sunt limitati, am folosit acelasi pin de trigger pentru ambii senzori. Astfel, pinii ce “asculta” semnalul vor face cu randul pentru a putea detecta amandoi distanta.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.