This shows you the differences between two versions of the page.
pm:prj2022:arosca:senzorparcare [2022/05/23 19:05] theodor.grigoras [Software Design] |
pm:prj2022:arosca:senzorparcare [2022/05/23 21:03] (current) theodor.grigoras [Descriere generală] |
||
---|---|---|---|
Line 4: | Line 4: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul consta in implementarea unui sistem care simuleaza functionalitatea senzorilor de parcare de pe masinile moderne. | + | Proiectul constă în implementarea unui sistem care simulează funcționalitatea senzorilor de parcare de pe mașinile moderne. |
- | Sistemul are la baza trei senzori ultrasonici de distanta care scaneaza trei zone diferite, iar cand un obiect se afla la o distanta seminficativ de mica, utilizatorul va fi anuntat. | + | Sistemul are la bază trei senzori ultrasonici de distanță care scaneaza trei zone diferite, iar cand un obiect se află la o distanță seminficativ de mică, utilizatorul va fi anunțat. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Senzorul Ultrasonic de distanta HC-SR04 este un sensor cu un timp de raspuns foarte mic, dar in cazul in care obiectul se afla la o distanta foarte mica, rezultatele obtinute sunt invalide. In cadrul proiectului, am folosit trei astfel de senzori, conectivitatea cu placa Arduino facandu-se cu ajutorul unui Breadboard. Senzorul este format din 4 pini: VCC, GND, Echo si Trigger. | + | Senzorul Ultrasonic de distanță HC-SR04 este un sensor cu un timp de răspuns foarte mic, dar în cazul in care obiectul se află la o distanță foarte mică, rezultatele obținute sunt eronate. În cadrul proiectului, am folosit trei astfel de senzori, conectivitatea cu placa Arduino făcându-se cu ajutorul unui Breadboard. Senzorul este format din 4 pini: VCC, GND, Echo si Trigger. |
- | Pentru a functiona, Trigger Pin-ul senzorului are nevoie de un implus de cel putin 10µS, moment in care senzorul va trimite 8 impulsuri de 40KHz care formeaza "unda ultrasonica". In momentul in care unda intalneste un obiect in calea ei, se reflecta, iar aceasta unda este receptata de catre Pin-ul ECHO, dupa o durata de timp, care va fi transformata in distanta. | + | Pentru a funcționa, Trigger Pin-ul senzorului are nevoie de un implus de cel puțin 10µS, moment în care senzorul va trimite 8 impulsuri de 40KHz care formează "unda ultrasonică". În momentul în care unda intâlnește un obiect în calea ei, se reflectă, iar această unda este receptată de catre Pin-ul ECHO, dupa o durată de timp, care va fi transformată în distanță. |
- | Matricea de LED-uri 8x8, vine impreuna cu un modul MAX7291, pentru a minimiza numarul de pini folositi si pentru a putea folosi o biblioteca aditionala Arduino (LedControl.h). Modulul foloseste 5 pini: VCC, GND, DIN, CS si CLK care sunt legati de placa Ardunio cu ajutorul unui Breadboard. | + | Matricea de LED-uri 8x8, vine impreuna cu un modul MAX7291, pentru a minimiza numarul de pini folosiți si pentru a putea folosi o bibliotecă adiționala Arduino (LedControl.h). Modulul foloseste 5 pini: VCC, GND, DIN, CS si CLK care sunt legați de placa Ardunio cu ajutorul unui Breadboard. |
==== Schema bloc ==== | ==== Schema bloc ==== | ||
Line 34: | Line 34: | ||
* LedControl.h (pentru a putea controla matricea de LED-uri intr-un mod usor) | * LedControl.h (pentru a putea controla matricea de LED-uri intr-un mod usor) | ||
+ | Funcțiile principale sunt **setup()** si **loop()**, la care am adăugat doua functii auxiliare | ||
+ | * SonarSensor | ||
+ | * printByte | ||
- | <note tip> | + | **SonarSensor** este o funcție care calculează distanta pana cel mai apropiat obiect pentru un senzor anume. |
- | Descrierea codului aplicaţiei (firmware): | + | **printByte** este o funcție care afișează o matrice de 8x8 biți (afișarea se face linie cu linie). |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | <code java> |
+ | #include <LedControl.h> | ||
- | <note tip> | + | const int echoPinRight = 8; |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | const int trigPinRight = 9; |
- | </note> | + | |
- | ===== Concluzii ===== | + | const int echoPinLeft = 10; |
+ | const int trigPinLeft = 11; | ||
- | ===== Download ===== | + | const int echoPinBack = 2; |
+ | const int trigPinBack = 3; | ||
- | <note warning> | + | const int BUZZER = 12; |
- | 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ă ;-). | + | |
- | 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**. | + | const int DIN = 7; |
- | </note> | + | const int CS = 6; |
+ | const int CLK = 5; | ||
- | ===== Jurnal ===== | + | LedControl lc = LedControl(DIN, CLK, CS, 0); |
- | <note tip> | + | long duration; |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | int distance; |
- | </note> | + | |
+ | int distanceRight; | ||
+ | int distanceLeft; | ||
+ | int distanceBack; | ||
+ | |||
+ | int safetyDistance = 3; | ||
+ | |||
+ | void setup() { | ||
+ | // put your setup code here, to run once: | ||
+ | pinMode(echoPinRight, INPUT); | ||
+ | pinMode(trigPinRight, OUTPUT); | ||
+ | |||
+ | pinMode(echoPinLeft, INPUT); | ||
+ | pinMode(trigPinLeft, OUTPUT); | ||
+ | |||
+ | pinMode(echoPinBack, INPUT); | ||
+ | pinMode(trigPinBack, OUTPUT); | ||
+ | |||
+ | pinMode(BUZZER, OUTPUT); | ||
+ | |||
+ | lc.shutdown(0, false); | ||
+ | lc.setIntensity(0, 1); | ||
+ | lc.clearDisplay(0); | ||
+ | | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // put your main code here, to run repeatedly: | ||
+ | byte initial[8] = {0b11111111, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001}; | ||
+ | |||
+ | // obtain the distance from every sensor | ||
+ | SonarSensor(trigPinLeft, echoPinLeft); | ||
+ | distanceLeft = distance; | ||
+ | |||
+ | SonarSensor(trigPinRight, echoPinRight); | ||
+ | distanceRight = distance; | ||
+ | |||
+ | SonarSensor(trigPinBack, echoPinBack); | ||
+ | distanceBack = distance; | ||
+ | |||
+ | // check the distance | ||
+ | if(distanceBack < safetyDistance || distanceRight < safetyDistance || distanceLeft < safetyDistance) { | ||
+ | digitalWrite(BUZZER, HIGH); | ||
+ | } else { | ||
+ | digitalWrite(BUZZER, LOW); | ||
+ | } | ||
+ | |||
+ | // set distance matrix according to all sensors | ||
+ | if(distanceBack < 7) { | ||
+ | initial[1] = initial[0]; | ||
+ | } | ||
+ | if(distanceBack < safetyDistance) { | ||
+ | initial[2] = initial[0]; | ||
+ | } | ||
+ | |||
+ | if(distanceLeft < 7) { | ||
+ | for(int i = 0; i < 8; i++) { | ||
+ | initial[i] = initial[i] | 0b01000000; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if(distanceLeft < safetyDistance) { | ||
+ | for(int i = 0; i < 8; i++) { | ||
+ | initial[i] = initial[i] | 0b00100000; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if(distanceRight < 7) { | ||
+ | for(int i = 0; i < 8; i++) { | ||
+ | initial[i] = initial[i] | 0b00000010; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if(distanceRight < safetyDistance) { | ||
+ | for(int i = 0; i < 8; i++) { | ||
+ | initial[i] = initial[i] | 0b00000100; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // print the matrix on LED Matrix | ||
+ | printByte(initial); | ||
+ | } | ||
+ | |||
+ | void SonarSensor(int trigPin,int echoPin) { | ||
+ | // disable the trigger pin | ||
+ | digitalWrite(trigPin, LOW); | ||
+ | delayMicroseconds(2); | ||
+ | |||
+ | // enable the trigger pin for 10 microseconds | ||
+ | digitalWrite(trigPin, HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trigPin, LOW); | ||
+ | |||
+ | // receive the duration | ||
+ | duration = pulseIn(echoPin, HIGH); | ||
+ | distance = duration * 0.034 / 2; | ||
+ | } | ||
+ | |||
+ | |||
+ | void printByte(byte character []) { | ||
+ | int i = 0; | ||
+ | for(i = 0; i < 8; i ++) { | ||
+ | lc.setRow(0, i, character[i]); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | ===== Rezultate Obţinute ===== | ||
+ | {{:pm:prj2022:arosca:theo-rezultate1.jpeg?600x400|}} | ||
+ | {{:pm:prj2022:arosca:theo-rezultate2.jpeg?600x400|}} | ||
+ | {{:pm:prj2022:arosca:theo-rezultate3.jpeg?600x400|}} | ||
+ | {{:pm:prj2022:arosca:theo-rezultate4.jpeg?600x400|}} | ||
+ | {{:pm:prj2022:arosca:theo-rezultate5.jpeg?600x400|}} | ||
+ | {{:pm:prj2022:arosca:theo-rezultate6.jpeg?600x400|}} | ||
+ | ===== Concluzii ===== | ||
+ | |||
+ | Fiind primul meu proiect de acest tip, am învățat lucruri noi si utile printre care și lipirea folosind Letcon. | ||
+ | |||
+ | O problemă prezentă in proiect sunt senzorii, fiind niște senzori basic, in momentul in care distanța față de obiect este mai mică de 2cm, senzorul începe sa ofere rezultate eronate. | ||
+ | |||
+ | Proiectul poate fi folositor în cazul în care vrem să construim o mașinuța electrică si dorim ca această mașină sa dispună de un sistem ajutător pentru parcare. | ||
+ | } | ||
+ | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2022:arosca:parking_helper.zip|Arhiva Proiectului}} | ||
+ | ===== Jurnal ===== | ||
+ | * **29 aprilie 2022**: crearea paginii de wiki, alegerea temei proiectului | ||
+ | * **22 mai 2022**: introducere, componente utilizate | ||
+ | * **23 mai 2022**: finalizare proiect(parte software, parte hardware, descriere generală, schemă bloc, schemă electrică) | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | * [[https://lastminuteengineers.com/arduino-sr04-ultrasonic-sensor-tutorial/|HC-SR04 Ultrasonic Sensor]] |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * [[https://www.electronicshub.org/arduino-led-matrix/|8x8 LED Matrix]] |
- | </note> | + | * [[https://xantorohara.github.io/led-matrix-editor/|8x8 LED Matrix generator]] |
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||