This shows you the differences between two versions of the page.
pm:prj2023:avaduva:basketball_score_counter [2023/05/30 03:02] 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 170: | Line 225: | ||
{{:pm:prj2023:avaduva:cosr.jpeg?200|}} | {{:pm:prj2023:avaduva:cosr.jpeg?200|}} | ||
- | 6. Coșul de baschet după oprire. | + | 6. Afișajul după oprire + LED-urile oprite. |
{{:pm:prj2023:avaduva:stop.jpeg?200|}} | {{:pm:prj2023:avaduva:stop.jpeg?200|}} | ||
+ | 7. Afișajul cu puncte. | ||
+ | {{:pm:prj2023:avaduva:pct.jpeg?200|}} | ||
===== 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 195: | 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> | ||