This shows you the differences between two versions of the page.
|
pm:prj2023:avaduva:basketball_score_counter [2023/05/30 03:03] vlad.paraschiv1511 [Rezultate Obţinute] |
pm:prj2023:avaduva:basketball_score_counter [2023/05/30 04:00] (current) vlad.paraschiv1511 [Download] |
||
|---|---|---|---|
| Line 17: | Line 17: | ||
| ==Schema:== | ==Schema:== | ||
| - | {{ :pm:prj2023:avaduva:pvschema.png}} | + | {{ :pm:prj2023:avaduva:pvschema2.png}} |
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| Line 30: | Line 30: | ||
| *LCD display | *LCD display | ||
| - | ===== Hardware Scheme ===== | + | 1. Hardware Scheme |
| + | |||
| + | {{ :pm:prj2023:avaduva:schemapv2.png?700}} | ||
| + | |||
| + | 2. Hardware | ||
| + | |||
| + | {{ :pm:prj2023:avaduva:fire.jpeg?700}} | ||
| + | |||
| + | |||
| - | {{ :pm:prj2023:avaduva:schemapv2.png}} | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| Line 42: | Line 50: | ||
| În codul folosit există și o funcție care modifică culoarea benzii LED în funcție de timpul rămas. După ce timpul expiră, banda LED se va opri. | În codul folosit există și o funcție care modifică culoarea benzii LED în funcție de timpul rămas. După ce timpul expiră, banda LED se va opri. | ||
| + | Algoritmi folosiți: | ||
| + | |||
| + | 1.Countdown | ||
| <code> | <code> | ||
| - | #include <LiquidCrystal_I2C.h> | + | long minute = 0, second = 59; |
| - | #include <Wire.h> | + | long countdown_time = minute * 60 + second; |
| - | #include <Adafruit_NeoPixel.h> | + | . |
| + | . | ||
| + | . | ||
| + | void loop() { | ||
| + | long countdowntime_seconds = countdown_time - (millis() / 1000); | ||
| + | if (countdowntime_seconds >= 0) { | ||
| + | long countdown_minute = ((countdowntime_seconds / 60) % 60); | ||
| + | long countdown_sec = countdowntime_seconds % 60; | ||
| + | lcd.setCursor(4, 1); | ||
| + | if (countdown_minute < 10) { | ||
| + | lcd.print("0"); | ||
| + | } | ||
| + | lcd.print(countdown_minute); | ||
| + | lcd.print(":"); | ||
| + | if (countdown_sec < 10) { | ||
| + | lcd.print("0"); | ||
| + | } | ||
| + | . | ||
| + | . | ||
| + | . | ||
| + | . | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | 2.Control LED + LCD | ||
| + | <code> | ||
| #define LED_PIN 2 | #define LED_PIN 2 | ||
| #define LED_COUNT 6 | #define LED_COUNT 6 | ||
| - | |||
| - | const int triggerPin = 7; | ||
| - | const int echoPin = 6; | ||
| - | const int buzzerPin = 9; | ||
| - | |||
| LiquidCrystal_I2C lcd(0x27, 16, 2); | LiquidCrystal_I2C lcd(0x27, 16, 2); | ||
| Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); | Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); | ||
| - | |||
| - | int score = 0; | ||
| - | long minute = 0, second = 59; | ||
| - | long countdown_time = minute * 60 + second; | ||
| void setup() { | void setup() { | ||
| - | pinMode(triggerPin, OUTPUT); | ||
| - | pinMode(echoPin, INPUT); | ||
| - | pinMode(buzzerPin, OUTPUT); | ||
| lcd.init(); | lcd.init(); | ||
| lcd.backlight(); | lcd.backlight(); | ||
| Line 73: | Line 97: | ||
| strip.begin(); | strip.begin(); | ||
| - | strip.show(); // Initialize all pixels to off | + | strip.show(); |
| } | } | ||
| void loop() { | void loop() { | ||
| - | + | . | |
| - | long duration; | + | . |
| - | int distance; | + | . |
| - | + | ||
| - | digitalWrite(triggerPin, LOW); | + | |
| - | delayMicroseconds(2); | + | |
| - | + | ||
| - | digitalWrite(triggerPin, HIGH); | + | |
| - | delayMicroseconds(10); | + | |
| - | + | ||
| - | digitalWrite(triggerPin, LOW); | + | |
| - | duration = pulseIn(echoPin, HIGH); | + | |
| - | distance = duration * 0.034 / 2; | + | |
| - | + | ||
| - | if (distance < 10) { | + | |
| - | score++; | + | |
| - | lcd.setCursor(11,0); | + | |
| - | lcd.print(score); | + | |
| - | } | + | |
| - | + | ||
| - | long countdowntime_seconds = countdown_time - (millis() / 1000); | + | |
| - | if (countdowntime_seconds >= 0) { | + | |
| - | long countdown_minute = ((countdowntime_seconds / 60) % 60); | + | |
| - | long countdown_sec = countdowntime_seconds % 60; | + | |
| - | lcd.setCursor(4, 1); | + | |
| - | + | ||
| - | if (countdown_minute < 10) { | + | |
| - | lcd.print("0"); | + | |
| - | } | + | |
| - | lcd.print(countdown_minute); | + | |
| - | lcd.print(":"); | + | |
| - | if (countdown_sec < 10) { | + | |
| - | lcd.print("0"); | + | |
| - | } | + | |
| - | lcd.print(countdown_sec); | + | |
| - | + | ||
| - | // Control LED strip based on timer value | + | |
| if (countdowntime_seconds <= 60 && countdowntime_seconds > 40) { | if (countdowntime_seconds <= 60 && countdowntime_seconds > 40) { | ||
| setColor(strip.Color(0, 255, 0)); // Green | setColor(strip.Color(0, 255, 0)); // Green | ||
| Line 140: | Line 130: | ||
| } | } | ||
| strip.show(); | strip.show(); | ||
| + | } | ||
| + | </code> | ||
| + | 3. Setup Senzor Ultrasonic | ||
| + | |||
| + | <code> | ||
| + | const int triggerPin = 7; | ||
| + | const int echoPin = 6; | ||
| + | int score = 0; | ||
| + | . | ||
| + | . | ||
| + | . | ||
| + | void setup() { | ||
| + | pinMode(triggerPin, OUTPUT); | ||
| + | pinMode(echoPin, INPUT); | ||
| + | . | ||
| + | . | ||
| + | . | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | |||
| + | long duration; | ||
| + | int distance; | ||
| + | |||
| + | digitalWrite(triggerPin, LOW); | ||
| + | delayMicroseconds(2); | ||
| + | |||
| + | digitalWrite(triggerPin, HIGH); | ||
| + | delayMicroseconds(10); | ||
| + | |||
| + | digitalWrite(triggerPin, LOW); | ||
| + | duration = pulseIn(echoPin, HIGH); | ||
| + | distance = duration * 0.032 / 2; | ||
| + | |||
| + | if (distance < 10) { | ||
| + | score++; | ||
| + | lcd.setCursor(11,0); | ||
| + | lcd.print(score); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | 4.Setup Buzzer | ||
| + | |||
| + | <code> | ||
| + | const int buzzerPin = 9; | ||
| + | . | ||
| + | . | ||
| + | . | ||
| + | void setup() { | ||
| + | pinMode(buzzerPin, OUTPUT); | ||
| + | } | ||
| + | . | ||
| + | . | ||
| + | . | ||
| + | void loop { | ||
| + | if (distance < 10) { | ||
| + | score++; | ||
| + | lcd.setCursor(11,0); | ||
| + | lcd.print(score); | ||
| + | playSound(); | ||
| + | } | ||
| + | . | ||
| + | . | ||
| + | . | ||
| } | } | ||
| Line 181: | Line 236: | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | ===== Download ===== | + | Tot procesul de facere a proiectului a fost o experiență interesantă și oarecum distractivă, dar care nu a fost întocmai ușoară. |
| - | <note warning> | + | Construirea proiectului a fost cu siguranță o activitate plăcută, deși pe parcurs am întâmpinat mai multe probleme cu hardware-ul folosit. |
| - | 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**. | + | Dezvoltarea codului a fost puțin mai provocatoare decât m-aș fi așteptat, din cauza problemelor pe care le-am avut cu senzorul ultrasonic.(probleme care au o șansă să mai apară din când în când) |
| - | </note> | + | |
| + | Una peste alta, acest proiect m-a ajutat sa învăț destul de multe și a fost probabil partea mea preferată a acestui semestru. | ||
| + | ===== Download ===== | ||
| + | |||
| + | {{:pm:prj2023:avaduva:ma.rar|}}\\ | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| Line 197: | Line 255: | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | + | [[https://lastminuteengineers.com/i2c-lcd-arduino-tutorial/ | Utilizare LCD]]\\ |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | [[https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/ | Utilizare HC-SR04]]\\ |
| - | </note> | + | Laboratorul 6 |
| <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> | ||