Differences

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

Link to this comparison view

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>​
pm/prj2024/ddosaru/nadolu.alexandru.1716741916.txt.gz · Last modified: 2024/05/26 19:45 by robert.nadolu
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