This shows you the differences between two versions of the page.
pm:prj2024:vstoica:victor.ionescu0812 [2024/05/27 00:28] victor.ionescu0812 |
pm:prj2024:vstoica:victor.ionescu0812 [2024/05/30 08:41] (current) victor.ionescu0812 |
||
---|---|---|---|
Line 3: | Line 3: | ||
<note tip> | <note tip> | ||
- | Prezentarea pe scurt a proiectului: | ||
Un sistem ce masoara viteza de deplasare a vehiculului si o afiseaza pe un display cu indicatii sonore. | Un sistem ce masoara viteza de deplasare a vehiculului si o afiseaza pe un display cu indicatii sonore. | ||
Acesta este util pentru depsitarea soferilor care conduc cu viteza si atentionarea acestora. | Acesta este util pentru depsitarea soferilor care conduc cu viteza si atentionarea acestora. | ||
Line 10: | Line 9: | ||
<note tip> | <note tip> | ||
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | ||
+ | Componentele principale: | ||
+ | * Arduino Uno: Reprezentat în centrul schemei, este unitatea centrală de control | ||
+ | * Un display LCD cu 16 pini conectat la Arduino | ||
+ | * Buzzer: Un buzzer conectat pentru a emite sunete | ||
+ | * 2 senzori IR: Detecteaza miscarea | ||
+ | |||
+ | {{:pm:prj2024:vstoica:schema123.png?200|}} | ||
+ | |||
+ | </note> | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | <note tip> | ||
* Display | * Display | ||
* 2X senzor IR | * 2X senzor IR | ||
Line 20: | Line 28: | ||
* Buzzer activ | * Buzzer activ | ||
* Arduino Uno R3 | * Arduino Uno R3 | ||
+ | De rezistente nu a fost nevoie. | ||
+ | </note> | ||
+ | |||
===== Software Design ===== | ===== Software Design ===== | ||
- | <note tip> | + | <note tip> |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Codul a fost scris in Arduino IDE. |
- | * 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 | + | |
+ | while (1) { | ||
+ | if ((PINC & (1 << PINC0)) == 0 && flag1 == 0) { | ||
+ | timer1 = TCNT1; | ||
+ | flag1 = 1; | ||
+ | } | ||
+ | |||
+ | if ((PINC & (1 << PINC1)) == 0 && flag2 == 0) { | ||
+ | timer2 = TCNT1; | ||
+ | flag2 = 1; | ||
+ | } | ||
+ | |||
+ | if (flag1 == 1 && flag2 == 1) { | ||
+ | if (timer1 > timer2) { | ||
+ | Time = (timer1 - timer2) / (F_CPU / 1024.0); | ||
+ | } else if (timer2 > timer1) { | ||
+ | Time = (timer2 - timer1) / (F_CPU / 1024.0); | ||
+ | } | ||
+ | speed = (distance / Time) * 3600 / 1000; | ||
+ | flag1 = 0; | ||
+ | flag2 = 0; | ||
+ | } | ||
+ | |||
+ | if (speed == 0) { | ||
+ | lcd_set_cursor(0, 1); | ||
+ | if (flag1 == 0 && flag2 == 0) { | ||
+ | lcd_print("No car detected "); | ||
+ | } else { | ||
+ | lcd_print("Searching... "); | ||
+ | } | ||
+ | } else { | ||
+ | lcd_clear(); | ||
+ | lcd_set_cursor(0, 0); | ||
+ | lcd_print("Speed:"); | ||
+ | char buffer[10]; | ||
+ | dtostrf(speed, 4, 1, buffer); | ||
+ | lcd_print(buffer); | ||
+ | lcd_print(" Km/Hr "); | ||
+ | lcd_set_cursor(0, 1); | ||
+ | if (speed > 50) { | ||
+ | lcd_print(" Over Speeding "); | ||
+ | PORTB |= (1 << PORTB5); | ||
+ | } else { | ||
+ | lcd_print(" Normal Speed "); | ||
+ | } | ||
+ | _delay_ms(3000); | ||
+ | PORTB &= ~(1 << PORTB5); | ||
+ | speed = 0; | ||
+ | lcd_clear(); | ||
+ | } | ||
+ | } | ||
+ | | ||
</note> | </note> | ||
- | ===== Rezultate Obţinute ===== | + | ===== Cod complet ===== |
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
+ | #include <Wire.h> | ||
+ | #include <LiquidCrystal_I2C.h> | ||
+ | |||
+ | LiquidCrystal_I2C lcd(0x27, 16, 2); | ||
+ | |||
+ | int timer1; | ||
+ | int timer2; | ||
+ | |||
+ | float Time; | ||
+ | |||
+ | int flag1 = 0; | ||
+ | int flag2 = 0; | ||
+ | |||
+ | float distance = 3.5; | ||
+ | float speed; | ||
+ | |||
+ | int ir_s1 = A0; | ||
+ | int ir_s2 = A1; | ||
+ | |||
+ | int buzzer = 13; | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(ir_s1, INPUT); | ||
+ | pinMode(ir_s2, INPUT); | ||
+ | pinMode(buzzer, OUTPUT); | ||
+ | |||
+ | lcd.begin(16, 1); | ||
+ | lcd.init(); | ||
+ | lcd.backlight(); | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("VYCTOR MASHINA"); | ||
+ | delay(2000); | ||
+ | lcd.clear(); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | if (digitalRead(ir_s1) == LOW && flag1 == 0) { | ||
+ | timer1 = millis(); | ||
+ | flag1 = 1; | ||
+ | } | ||
+ | |||
+ | if (digitalRead(ir_s2) == LOW && flag2 == 0) { | ||
+ | timer2 = millis(); | ||
+ | flag2 = 1; | ||
+ | } | ||
+ | |||
+ | if (flag1 == 1 && flag2 == 1) { | ||
+ | if (timer1 > timer2) { | ||
+ | Time = timer1 - timer2; | ||
+ | } else if (timer2 > timer1) { | ||
+ | Time = timer2 - timer1; | ||
+ | } | ||
+ | Time = Time / 1000; | ||
+ | speed = (distance / Time); | ||
+ | speed = speed * 3600; | ||
+ | speed = speed / 1000; | ||
+ | } | ||
+ | |||
+ | if (speed == 0) { | ||
+ | lcd.setCursor(0, 1); | ||
+ | if (flag1 == 0 && flag2 == 0) { | ||
+ | lcd.print("No car detected"); | ||
+ | } else { | ||
+ | lcd.print("Searching... "); | ||
+ | } | ||
+ | } else { | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Speed:"); | ||
+ | lcd.print(speed, 1); | ||
+ | lcd.print("Km/Hr "); | ||
+ | lcd.setCursor(0, 1); | ||
+ | if (speed > 50) { | ||
+ | lcd.print(" Over Speeding "); | ||
+ | digitalWrite(buzzer, HIGH); | ||
+ | } else { | ||
+ | lcd.print(" Normal Speed "); | ||
+ | } | ||
+ | delay(3000); | ||
+ | digitalWrite(buzzer, LOW); | ||
+ | speed = 0; | ||
+ | flag1 = 0; | ||
+ | flag2 = 0; | ||
+ | } | ||
+ | } | ||
</note> | </note> | ||