This is an old revision of the document!
Ce este ParkSense?
ParkSense este un sistem inovator conceput pentru a facilita găsirea locurilor de parcare libere, abordând problema consumului de timp și stresului asociat cu căutarea unui spațiu de parcare în zonele aglomerate. Utilizând tehnologii avansate, cum ar fi senzorii de detectare a vehiculelor, ParkSense oferă șoferilor informații în timp real despre disponibilitatea locurilor de parcare, folosind si o bara de leduri pentru a reprezenta ce procent din capacitate a fost ocupat.
Cum funcționează ParkSense?
ParkSense utilizează o rețea de senzori amplasați la intrare in parcare. Acești senzori detectează dacă un loc de parcare este ocupat sau liber și transmit aceste informații către un monitor. Datele sunt apoi procesate și afișate pentru a fi disponibile pentru șoferi.
Pașii principali ai proiectului vor consta în:
Citirea Senzorilor: Verifică continuu starea senzorilor infraroșu și detectează dacă o mașină este prezentă.
Control Servo: Comandă servo motorul să rotească la unghiuri specifice pentru a deschide sau închide bariera.
Update Display: Actualizează informațiile afișate pe LCD în funcție de starea sistemului.
Aprindere Leduri: Actualizeaza procentul de locuri libere folosind leduri.
Pentru a construi o barieră automată ce se ridică la detectarea unei mașini folosind:
- un Arduino UNO
- doi senzori infraroșu
- un LCD 1602 I2C
- un servo motor SG90
- trei leduri , procedăm astfel:
1. Conectăm cei doi senzori infraroșu la intrările digitale ale Arduino pentru a detecta mașinile.
2. Atașăm LCD-ul la pinii I2C ai Arduino pentru a afișa statusul barierei.
3. Conectăm servo motorul la un pin pentru a controla mișcarea barierei.
Programul Arduino va răspunde la detectarea mașinilor prin rotația servo motorului pentru deschiderea sau închiderea barierei, iar LCD-ul va afișa starea actuală.
Pentru a usura modul de lucru, clasa `Servo` este creată pentru a controla un servomotor folosind platforma Arduino.
- Inițializare ușoară: Constructorul clasei și funcția init() fac ca începerea să fie simplă. - Control precis: Cu funcția setDutyCycle(uint8_t grade), poziția servomotorului poate fi ajustată cu precizie prin modificarea ciclului activ al semnalului PWM. - Economie de resurse: Folosind tipuri de date optimizate (uint8_t, uint16_t) și membri volatile, clasa gestionează resursele eficient și asigură accesul corect la variabilele în contextele întrerupte. - Fiabilitate: Metodele timerStart(), PWMStart() și PWMStop() se ocupă de operațiile necesare pentru a asigura funcționarea corectă și fiabilă a servomotorului.
Am implementat funcționalitatea clasei Servo în codul meu, care este definită în fișierul antet my_servo.h. Constructorul clasei inițializează membrul period cu valoarea implicită 2000. Prin funcția init(), întreruperile pentru Timer/Counter1 sunt dezactivate pentru a evita interferențele cu funcționarea servomotorului. Apoi, prin funcția timerStart(), sunt configurate setările necesare pentru a genera semnalul PWM pentru controlul servomotorului, inclusiv modul de funcționare PWM, modul de compare match și prescalerul. Funcția setDutyCycle(uint8_t grade) actualizează poziția servomotorului în funcție de unghiul dat ca argument, iar funcțiile PWMStart() și PWMStop() activează și, respectiv, opresc semnalul PWM și gestionarea întreruperilor asociate cu Timer/Counter1. Astfel, am creat o interfață eficientă și robustă pentru controlul servomotorului utilizând semnalul PWM pe platforma Arduino.