Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 invalideIn 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ţsă le implementaţi +
-  * (etapa 3surse ş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>​
  
pm/prj2022/arosca/senzorparcare.1653321943.txt.gz · Last modified: 2022/05/23 19:05 by theodor.grigoras
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0