This shows you the differences between two versions of the page.
pm:prj2024:amocanu:andreea.georgescu02 [2024/05/16 22:15] andreea.georgescu02 [Hardware Design] |
pm:prj2024:amocanu:andreea.georgescu02 [2024/05/27 00:47] (current) andreea.georgescu02 [Concluzii] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Sistem Radar cu Interfata Grafica ====== | ====== Sistem Radar cu Interfata Grafica ====== | ||
- | Proiect realizat de: Andreea-Daniela GEORGESCU - 333CC | ||
===== Introducere ===== | ===== Introducere ===== | ||
Line 15: | Line 14: | ||
<note tip> | <note tip> | ||
Acest proiect implementează un sistem radar utilizând Arduino UNO, senzorul de distanță HC-SR04 montat pe un suport special pe un servomotor. Senzorul HC-SR04 măsoară distanțele înconjurătoare, iar servomotorul rotește radarul intermitent pentru a scana zona de interes. Atunci când un obiect este detectat în raza senzorului, un buzzer emite un sunet de atenționare, iar un LED RGB se aprinde: roșu dacă distanța este sub o anumită valoare limită (THRESHOLD), galben dacă distanța este egală cu această valoare limită și verde în restul cazurilor. Informațiile despre obiectele detectate sunt afișate pe un laptop printr-o interfață grafică simplă și intuitivă. De asemenea, un mesaj intuitiv este afișat pe un display LCD în cazul în care este detectat un obiect în raza de acoperire, astfel: | Acest proiect implementează un sistem radar utilizând Arduino UNO, senzorul de distanță HC-SR04 montat pe un suport special pe un servomotor. Senzorul HC-SR04 măsoară distanțele înconjurătoare, iar servomotorul rotește radarul intermitent pentru a scana zona de interes. Atunci când un obiect este detectat în raza senzorului, un buzzer emite un sunet de atenționare, iar un LED RGB se aprinde: roșu dacă distanța este sub o anumită valoare limită (THRESHOLD), galben dacă distanța este egală cu această valoare limită și verde în restul cazurilor. Informațiile despre obiectele detectate sunt afișate pe un laptop printr-o interfață grafică simplă și intuitivă. De asemenea, un mesaj intuitiv este afișat pe un display LCD în cazul în care este detectat un obiect în raza de acoperire, astfel: | ||
- | * //Beware of the danger in front// - în cazul în care se află un obiect la o distanța mai mica decat limita impusa; | + | * //TOO CLOSE!// - în cazul în care se află un obiect la o distanța mai mica decat limita impusa (25 cm); |
- | * //All clear// - în cazul în care se află un obiect la o distanța mai mare sau egală decat limita impusa. | + | * //A LITTLE CLOSE!// - în cazul în care se află un obiect la o distanța intermediara(25 < distance < 50). |
+ | * //ALL CLEAR!// - în cazul în care se află un obiect la o distanța mai mare decat limita impusa (50 cm). | ||
</note> | </note> | ||
===== Schema bloc ===== | ===== Schema bloc ===== | ||
Line 24: | Line 24: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | Componente Hardware utilizate: | + | {{:pm:prj2024:amocanu:too_close.jpeg?300|}} {{:pm:prj2024:amocanu:all_clear.jpeg?300|}} |
+ | |||
+ | =====Componente Hardware utilizate:===== | ||
* Arduino UNO | * Arduino UNO | ||
* Breadboard | * Breadboard | ||
Line 33: | Line 35: | ||
* LCD | * LCD | ||
- | Schema Arduino Tinkercad: | + | =====Schema Arduino Tinkercad:===== |
+ | |||
+ | {{:pm:prj2024:amocanu:ttt22.jpg?800|}} | ||
+ | |||
+ | =====Schema electrica:===== | ||
+ | |||
+ | {{:pm:prj2024:amocanu:schema_mea.jpg?800|}} | ||
+ | |||
+ | ====Schema de Conectare==== | ||
+ | |||
+ | |||
+ | 1. Arduino UNO: | ||
+ | * Toate conexiunile componentelor sunt realizate cu pinii digitali și analogici ai plăcii Arduino UNO. | ||
+ | |||
+ | 2. Breadboard: | ||
+ | * Distribuie +5V și GND pentru componentele care necesită aceste conexiuni. | ||
+ | * Utilizat pentru legarea servomotorului și a buzzerului la pinii respectivi. | ||
+ | 3. Servomotor MG90S: | ||
+ | * Semnal: Pin 8 | ||
+ | * Vcc: +5V prin breadboard | ||
+ | * Ground: GND prin breadboard | ||
+ | 4. Senzor de proximitate HC-SR04: | ||
+ | * Echo: Pin 10 | ||
+ | * Trig: Pin 9 | ||
+ | * Vcc: +5V direct la Arduino | ||
+ | * Ground: GND direct la Arduino | ||
+ | 5. Buzzer: | ||
+ | * Semnal: Pin 8 (prin breadboard) | ||
+ | * Ground: GND prin breadboard | ||
+ | 6. LED RGB: | ||
+ | * Roșu: Pin 13 prin rezistență de 330Ω | ||
+ | * Verde: Pin 11 prin rezistență de 330Ω | ||
+ | * Albastru: Pin 12 prin rezistență de 330Ω | ||
+ | * Ground: GND (prin breadboard) | ||
+ | 7. Display LCD: | ||
+ | * SCL: Pin A4 | ||
+ | * SDA: Pin A5 | ||
+ | * Vcc: +5V prin breadboard | ||
+ | * Ground: GND prin breadboard | ||
- | {{:pm:prj2024:amocanu:tinkercad.jpg?800|}} | ||
- | Schema electrica: | ||
- | {{:pm:prj2024:amocanu:electric.jpg?800|}} | ||
Line 47: | Line 85: | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | Medii de dezvoltare: |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * Cod: ArduinoIDE |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * Schema bloc: drawIO |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * Schema electrică: TinkerCad |
- | * (etapa 3) surse şi funcţii implementate | + | * Design circuit: TinkerCad |
+ | * Biblioteci folosite: | ||
+ | * LiquidCrystal_I2C.h: pentru a controla ecranul LCD cu interfață I2C. | ||
+ | * Servo.h: pentru a controla servomotorul. | ||
+ | **1. Codul Arduino:** | ||
+ | În cadrul codului Arduino, servomotorul rotește senzorul ultrasonic și măsoară distanța față de obiecte. Pe baza distanței măsurate, LED-ul își schimbă culoarea, buzzer-ul sună și mesajul de pe ecranul LCD se actualizează. De asemenea, datele despre unghi și distanță sunt trimise către interfața serială pentru a fi prelucrate ulterior de aplicația GUI. | ||
+ | |||
+ | **2. Funcționare:** | ||
+ | În cadrul funcției loop, la fiecare pas de rotație al servomotorului, se apelează funcția distanceMeasurement(), unde se primesc datele de la senzorul de distanță ultrasonic. Dacă distanța măsurată este mai mică decât limita impusă, atunci: | ||
+ | * Culoarea default a LED-ului (verde) se schimbă în roșu. | ||
+ | * Buzzer-ul emite un sunet. | ||
+ | * Mesajul default de pe ecranul LCD (“ALL CLEAR!”) se schimbă în funcție de distanță ("TOO CLOSE!" sau "A LITTLE CLOSE!"). | ||
+ | * Pe interfața serială sunt trimise datele despre unghi și distanță pentru fiecare iterație a servomotorului în care a fost detectat un obiect. | ||
+ | |||
+ | **Inițializarea și configurarea piniiilor:** | ||
+ | |||
+ | Funcția initializePins() configurează pinii pentru trig, echo, buzzer și LED-ul RGB ca OUTPUT. | ||
+ | |||
+ | **Scanarea și măsurarea distanței:** | ||
+ | |||
+ | Funcția scanAndMeasure() rotește servomotorul de la 0 la 170 de grade și înapoi, măsurând distanța la fiecare pas. | ||
+ | Funcția distanceMeasurement() măsoară distanța folosind senzorul ultrasonic, trimite datele prin serial și actualizează ecranul LCD și culoarea LED-ului. | ||
+ | |||
+ | **Afișarea mesajului și setarea culorii LED-ului:** | ||
+ | |||
+ | Funcția displayMessageAndColor() afișează un mesaj pe LCD și setează culoarea LED-ului în funcție de distanța măsurată. | ||
+ | Funcția setColor() setează intensitatea LED-urilor RGB pentru a afișa culoarea corespunzătoare (roșu, portocaliu sau verde). | ||
+ | |||
+ | **3. Codul Java folosind framework-ul de Processing:** | ||
+ | |||
+ | **Serial Communication:** | ||
+ | * Se inițializează comunicarea serială pentru a primi date de la un dispozitiv radar, conectat la portul COM5 și setat la o viteză de transfer de 9600 baud. | ||
+ | |||
+ | **Desenarea Elementelor Vizuale:** | ||
+ | |||
+ | * drawRadar(): Desenează arcele concentrice și liniile radiale pentru a reprezenta zona de scanare a radarului. | ||
+ | * drawObject(): Detectează și afișează obiectele detectate pe radar în funcție de distanță și unghi. | ||
+ | * drawLine(): Desenează linia rotativă a radarului, indicând direcția de scanare. | ||
+ | * drawText(): Afișează informații despre distanță, unghi și starea de siguranță a mediului înconjurător. | ||
+ | |||
+ | **Manipularea Datelor de la Radar:** | ||
+ | |||
+ | * serialEvent(): Este activată atunci când sunt primite date de la radar prin comunicarea serială. Aceasta interpretează datele primite și extrage unghiul și distanța obiectelor detectate. | ||
+ | |||
+ | **Desenarea Componentelor Vizuale:** | ||
+ | |||
+ | * drawArcs(): Desenează arcele concentrice care reprezintă diferitele intervale de distanță ale radarului. | ||
+ | * drawAngleLines(): Desenează liniile radiale care reprezintă diferitele unghiuri de scanare ale radarului. | ||
+ | * drawAngleLabels(): Desenează marcajele de unghiuri pe radar pentru a indica direcția de scanare. | ||
+ | |||
+ | **Afișarea Informațiilor:** | ||
+ | |||
+ | * setObjectColor(): Stabilește culoarea obiectelor detectate în funcție de distanță. | ||
+ | * drawAngleLabel(): Desenează etichetele de unghi pentru a indica direcția de scanare a radarului. | ||
</note> | </note> | ||
Line 57: | Line 148: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Video cu sistemul radar: https://youtube.com/shorts/3qU8o9yFfes?si=KjTPv5YFtWFnJ9V1 |
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost o provocare sa implementez primul meu proiect de acest gen, dar si o introducere utila in acest domeniu. | ||
+ | |||
+ | Proiectul este functional si pregatit sa serveasca la detectia obiectelor pe o raza minimala. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | Codul sursa al proiectului: |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
+ | {{:pm:prj2024:amocanu:georgescu_andreea.daniela.zip|}} | ||
- | 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**. | ||
- | </note> | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 25 aprilie: Alegere finala proiect. |
+ | * 30 aprilie: Am comandat piesele. | ||
+ | * 3 mai: Sosire comanda. | ||
+ | * 7 mai: Comanda suplimentară pentru piese. | ||
+ | * 10 mai: Sosire comanda suplimentară. | ||
+ | * 16 mai: Milestone Hardware. | ||
+ | * 23 mai: Milestone Software | ||
</note> | </note> | ||
Line 79: | Line 178: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | In realizarea proiectului m-am folosit de informatii preluate din urmatoarele surse: |
+ | |||
+ | **Resurse Hardware:** | ||
+ | * https://www.geeksforgeeks.org/how-to-interface-i2c-lcd-display-with-arduino/ | ||
+ | * https://www.youtube.com/watch?v=n-gJ00GTsNg | ||
+ | * https://www.ardumotive.com/how-to-use-a-buzzer-en.html | ||
+ | |||
+ | **Resurse Software:** | ||
+ | * https://www.youtube.com/watch?v=w5-LD8OGJNs | ||
+ | * https://chat.openai.com/ | ||
+ | |||
</note> | </note> | ||