This shows you the differences between two versions of the page.
|
pm:prj2024:ddosaru:nadolu.alexandru [2024/05/26 19:45] robert.nadolu [Software Design] |
pm:prj2024:ddosaru:nadolu.alexandru [2024/05/26 20:19] (current) robert.nadolu [Bibliografie/Resurse] |
||
|---|---|---|---|
| Line 17: | Line 17: | ||
| </note> | </note> | ||
| + | |||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| Line 31: | Line 32: | ||
| {{:pm:prj2024:ddosaru:schema_nadolu_alex.png?650|}} | {{:pm:prj2024:ddosaru:schema_nadolu_alex.png?650|}} | ||
| </note> | </note> | ||
| + | Proiectul in beta: | ||
| - | |||
| {{:pm:prj2024:ddosaru:img_7174.jpg?450|}} | {{:pm:prj2024:ddosaru:img_7174.jpg?450|}} | ||
| + | |||
| + | ===== Software Design ===== | ||
| + | |||
| **Descrierea aplicației (firmware):** | **Descrierea aplicației (firmware):** | ||
| Line 40: | Line 44: | ||
| **Cod:** | **Cod:** | ||
| - | ```cpp | + | <code> |
| - | #include <Wire.h> | + | #include <Wire.h> |
| - | #include <LiquidCrystal_I2C.h> | + | #include <LiquidCrystal_I2C.h> |
| - | LiquidCrystal_I2C lcd(0x3F, 16, 2); | + | // LCD-ul este initializat de la adresa 0x3F |
| + | LiquidCrystal_I2C lcd(0x3F, 16, 2); | ||
| - | const int trigPinFront = 13; | + | // pinii pentru HC-SR04 |
| - | const int echoPinFront = 12; | + | const int trigPinFront = 13; |
| - | const int trigPinBack = 4; | + | const int echoPinFront = 12; |
| - | const int echoPinBack = 3; | + | const int trigPinBack = 4; |
| + | const int echoPinBack = 3; | ||
| - | float distanceFront, distanceBack; | + | // distantele fata de obstacolele din fata si din spatele vehiculului |
| + | float distanceFront, distanceBack; | ||
| - | #define speakerPin 9 | + | // pinul pentru buzzer |
| - | #define ledpin 10 | + | #define speakerPin 9 |
| - | unsigned long previousMillis = 0; | + | // pinul pentru led |
| - | const long interval = 1000; | + | #define ledpin 10 |
| - | void setup() { | + | // variabile pentru masurarea timpului |
| - | Serial.begin(9600); | + | unsigned long previousMillis = 0; |
| - | pinMode(ledpin, OUTPUT); | + | const long interval = 1000; // 1s |
| - | lcd.begin(); | + | |
| - | lcd.backlight(); | + | |
| - | lcd.setCursor(0, 0); | + | |
| - | pinMode(speakerPin, OUTPUT); | + | |
| - | digitalWrite(speakerPin, LOW); | + | |
| - | pinMode(trigPinFront, OUTPUT); | + | |
| - | pinMode(echoPinFront, INPUT); | + | |
| - | pinMode(trigPinBack, OUTPUT); | + | |
| - | pinMode(echoPinBack, INPUT); | + | |
| - | } | + | |
| - | float getDistance(int trigPin, int echoPin) { | + | void setup() { |
| - | digitalWrite(trigPin, LOW); | + | Serial.begin(9600); |
| - | delayMicroseconds(2); | + | |
| - | digitalWrite(trigPin, HIGH); | + | // setez pinul ledului pe output |
| - | delayMicroseconds(10); | + | pinMode(ledpin, OUTPUT); |
| - | digitalWrite(trigPin, LOW); | + | |
| - | long duration = pulseIn(echoPin, HIGH); | + | // initializez LCD-ul |
| - | float distance = (duration / 2.0) * 0.0343; | + | lcd.begin(); |
| - | return distance; | + | lcd.backlight(); |
| - | } | + | |
| + | // setez cursorul pe prima linie | ||
| + | lcd.setCursor(0, 0); | ||
| + | |||
| + | // initializez pinul pentru buzzer si ma asigur ca e oprit la inceput | ||
| + | pinMode(speakerPin, OUTPUT); | ||
| + | digitalWrite(speakerPin, LOW); | ||
| + | |||
| + | // initializez pinii pentru senzori | ||
| + | // trigger ON = incep sa transmit ultrasunete, echo masoara durata semnalului | ||
| + | pinMode(trigPinFront, OUTPUT); | ||
| + | pinMode(echoPinFront, INPUT); | ||
| + | |||
| + | pinMode(trigPinBack, OUTPUT); | ||
| + | pinMode(echoPinBack, INPUT); | ||
| + | } | ||
| + | |||
| + | float getDistance(int trigPin, int echoPin) { | ||
| + | // trimite un impuls pe pinul trig, ma asigur inainte ca trig este in repaus | ||
| + | digitalWrite(trigPin, LOW); | ||
| + | delayMicroseconds(2); | ||
| + | |||
| + | digitalWrite(trigPin, HIGH); | ||
| + | delayMicroseconds(10); | ||
| + | digitalWrite(trigPin, LOW); | ||
| + | |||
| + | // masoara durata pe pinul echo | ||
| + | long duration = pulseIn(echoPin, HIGH); | ||
| + | |||
| + | // distanta = durata (dus - intors) * viteza de propagare a sunetului | ||
| + | float distance = (duration / 2.0) * 0.0343; | ||
| + | |||
| + | // returnez distanta | ||
| + | return distance; | ||
| + | } | ||
| void loop() { | void loop() { | ||
| Line 88: | Line 119: | ||
| if (currentMillis - previousMillis >= interval) { | if (currentMillis - previousMillis >= interval) { | ||
| previousMillis = currentMillis; | previousMillis = currentMillis; | ||
| + | |||
| + | // distanta pentru senzorul din fata | ||
| distanceFront = getDistance(trigPinFront, echoPinFront); | distanceFront = getDistance(trigPinFront, echoPinFront); | ||
| + | |||
| + | // distanta pentru senzorul din spate | ||
| distanceBack = getDistance(trigPinBack, echoPinBack); | distanceBack = getDistance(trigPinBack, echoPinBack); | ||
| + | |||
| + | // afisez distantele pe LCD | ||
| lcd.clear(); | lcd.clear(); | ||
| lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
| Line 95: | Line 132: | ||
| lcd.print(distanceFront); | lcd.print(distanceFront); | ||
| lcd.print(" cm"); | lcd.print(" cm"); | ||
| + | |||
| + | // mut cursorul pe al doilea rand al ecranului | ||
| lcd.setCursor(0, 1); | lcd.setCursor(0, 1); | ||
| lcd.print("Back: "); | lcd.print("Back: "); | ||
| Line 101: | Line 140: | ||
| } | } | ||
| + | // verific care este cea mai mica distanta pana la obstacol (fata sau spate) | ||
| float minDistance = min(distanceFront, distanceBack); | float minDistance = min(distanceFront, distanceBack); | ||
| if (minDistance <= 20) { | if (minDistance <= 20) { | ||
| + | // calculez intensitatea led-ului in functie de distanta | ||
| int ledIntensity = map(minDistance, 1.67, 20, 255, 1); | int ledIntensity = map(minDistance, 1.67, 20, 255, 1); | ||
| + | |||
| + | // emit semnale acustice | ||
| int buzzerSpeed = map(minDistance, 1, 20, 100, 500); | int buzzerSpeed = map(minDistance, 1, 20, 100, 500); | ||
| unsigned long beepEnd = millis() + interval; | unsigned long beepEnd = millis() + interval; | ||
| + | |||
| while (millis() < beepEnd) { | while (millis() < beepEnd) { | ||
| + | // setez intensitatea LED-ului | ||
| analogWrite(ledpin, ledIntensity); | analogWrite(ledpin, ledIntensity); | ||
| analogWrite(speakerPin, 255); | analogWrite(speakerPin, 255); | ||
| Line 113: | Line 158: | ||
| analogWrite(speakerPin, 0); | analogWrite(speakerPin, 0); | ||
| analogWrite(ledpin, 0); | analogWrite(ledpin, 0); | ||
| + | | ||
| delay(buzzerSpeed / 2); | delay(buzzerSpeed / 2); | ||
| + | | ||
| } | } | ||
| } else { | } else { | ||
| + | // opresc semnalele acustice si luminoase | ||
| digitalWrite(speakerPin, LOW); | digitalWrite(speakerPin, LOW); | ||
| analogWrite(ledpin, 0); | analogWrite(ledpin, 0); | ||
| } | } | ||
| } | } | ||
| - | ``` | + | |
| + | |||
| + | </code> | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| <note tip> | <note tip> | ||
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Un videoclip cu proiectul se poate vedea mai jos: |
| + | <html> | ||
| + | <iframe width="700" height="435" src="https://www.youtube.com/embed/RUq7kS161kw" title="Parking sensor"></iframe> | ||
| + | </html> | ||
| </note> | </note> | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | + | Un proiect la care am lucrat de drag, foarte challenging si frumos, de care imi voi aminti cu placere. | |
| ===== Download ===== | ===== Download ===== | ||
| Line 147: | Line 200: | ||
| <note> | <note> | ||
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe *Resurse Software* şi *Resurse Hardware*. | + | * https://ocw.cs.pub.ro/courses/pm/lab/lab0-2023 |
| + | * https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023-2024 | ||
| + | * https://ocw.cs.pub.ro/courses/pm/lab/lab6-2023-2024 | ||
| + | * https://www.youtube.com/watch?v=0Lhgd8PQmn0 | ||
| + | * https://www.ardumotive.com/how-to-use-a-buzzer-en.html | ||
| </note> | </note> | ||
| <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> | ||