This is an old revision of the document!
Autor: Harea Teodor-Adrian, 333CA
Contact: teodor_adrian.harea@stud.acs.upb.ro
Proiectul este un sistem inteligent care utilizează trei senzori (de mișcare, distanță și infraroșu) pentru a detecta prezența și acțiunile utilizatorilor. Funcționalitățile principale includ:
Scopul principal al proiectului este de a demonstra integrarea și utilizarea practică a mai multor senzori într-un sistem coordonat.
Ideea proiectului a pornit de la dorința de a crea un sistem simplu, dar eficient, care să poată detecta și răspunde la acțiunile utilizatorilor. Inspirația a venit din:
◉ ATmega328P (16MHz, 32KB Flash)
◉ HC-SR501 - Senzor mișcare PIR ◉ HC-SR04P - Senzor ultrasonic ◉ VS1838 - Receptor infraroșu
◉ LCD 16×2 cu interfață I2C
◉ Motor DC 3-5V cu elice ◉ Buzzer activ 5V ◉ LED cu rezistență 220Ω
◉ Placa de dezvoltare cu regulator 5V ◉ Conexiune USB pentru alimentare
◉ LiquidCrystal_I2C (v1.1.2) ◉ IRremote (v3.6.1)
Datasheet | Link oficial |
Cumpărare | Arduino UNO R3 (ATmega328P) |
Componentă | Datasheet | Cumpărare |
———— | ———– | ———– |
LCD 16×2 cu I2C | Link | OptimusDigital |
Senzor PIR HC-SR501 | Link | OptimusDigital |
Senzor ultrasonic HC-SR04P | Link | OptimusDigital |
Receptor infraroșu | Link | OptimusDigital |
Componentă | Datasheet | Cumpărare |
———— | ———– | ———– |
Buzzer activ 5V | Link | OptimusDigital |
Motor DC | Link | OptimusDigital |
LED albastru 3mm | Link | OptimusDigital |
Inițializarea componentelor hardware (senzori, LCD, motor, LED, buzzer, telecomandă IR) se face în funcția setup(). În funcția loop(), sistemul verifică în permanență starea curentă și reacționează la evenimente (mișcare detectată, distanță măsurată, comandă IR). Fiecare stare (ex: CALIBRATING, LISTENING, MOTION_DETECTED, MOTOR_RUNNING, PAUSED etc.) are un bloc dedicat de cod, cu acțiuni specifice și condiții de tranziție către alte stări. Temporizările sunt gestionate cu ajutorul funcției millis(), evitând blocarea execuției și permițând răspuns rapid la evenimente.
Senzorul PIR detectează mișcarea și declanșează trecerea în starea de detecție. Senzorul ultrasonic măsoară distanța față de utilizator și decide dacă motorul trebuie pornit sau dacă utilizatorul este prea departe. Telecomanda IR permite controlul manual al sistemului (pauză, pornire continuă, revenire la ascultare). LCD-ul afișează mesaje relevante pentru fiecare stare, oferind feedback utilizatorului. LED-ul, buzzer-ul și motorul sunt activate/dezactivate în funcție de starea sistemului și de valorile senzorilor.
Fiecare funcționalitate a fost testată individual: s-a verificat răspunsul la mișcare, măsurarea corectă a distanței, afișarea mesajelor pe LCD, controlul cu telecomanda IR și funcționarea corectă a motorului, LED-ului și buzzer-ului. S-au folosit mesaje pe Serial Monitor pentru debugging și monitorizare în timp real. Sistemul a fost testat în ansamblu, simulând scenarii reale de utilizare (prezența unui obiect in raza de acțiune a senzorilor, distanță variabilă, comenzi telecomandă), pentru a confirma că toate componentele interacționează corect și că tranzițiile între stări se realizează conform cerințelor.
Eliminarea codului redundant prin folosirea funcțiilor dedicate pentru fiecare stare a automatului, ceea ce crește lizibilitatea și modularitatea codului. Utilizarea variabilelor statice locale pentru debounce și temporizări, evitând poluarea spațiului global și asigurând corectitudinea temporizărilor. Tranzițiile între stări sunt clar marcate cu mesaje pe LCD și în consola serială, oferind feedback util pentru utilizator și pentru depanare. Acțiunile pentru senzori și actuatori sunt izolate în funcții specifice fiecărei stări, facilitând modificarea și extinderea comportamentului sistemului. Conversia timpului de la senzorul ultrasonic în centimetri este realizată eficient cu o formulă standard, asigurând acuratețea măsurătorilor. Structura codului permite extinderea facilă cu noi funcționalități sau stări, menținând în același timp claritatea și robustețea implementării.
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.