This is an old revision of the document!
Autor: Grigoras Theodor-Andrei
Proiectul consta in implementarea unui sistem care simuleaza functionalitatea senzorilor de parcare de pe masinile 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.
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. 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.
Matricea de LED-uri 8×8, 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.
Componente utilizate:
Am utilizat Arduino IDE pentru partea de software și o librărie externă:
Funcțiile principale sunt setup() si loop(), la care am adăugat doua functii auxiliare
SonarSensor este o funcție care calculează distanta pana cel mai apropiat obiect pentru un senzor anume. printByte este o funcție care afișează o matrice de 8×8 biți (afișarea se face linie cu linie).
#include <LedControl.h> const int echoPinRight = 8; const int trigPinRight = 9; const int echoPinLeft = 10; const int trigPinLeft = 11; const int echoPinBack = 2; const int trigPinBack = 3; const int BUZZER = 12; const int DIN = 7; const int CS = 6; const int CLK = 5; LedControl lc = LedControl(DIN, CLK, CS, 0); long duration; int distance; 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]); } }
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. Arhiva proiectului