This shows you the differences between two versions of the page.
pm:prj2024:mdinica:bianca.dumitru0907 [2024/05/23 16:19] bianca.dumitru0907 [Software Design] |
pm:prj2024:mdinica:bianca.dumitru0907 [2024/05/24 12:27] (current) bianca.dumitru0907 [Software Design] |
||
---|---|---|---|
Line 32: | Line 32: | ||
* rezistente; | * rezistente; | ||
* breadboard; | * breadboard; | ||
+ | * switch | ||
=== Elemente aditionale === | === Elemente aditionale === | ||
- | * servieta din plastic | + | * geanta din plastic pentru unelte |
* chei | * chei | ||
* carcasa din plexiglas | * carcasa din plexiglas | ||
Line 53: | Line 54: | ||
{{pm:prj2024:mdinica:bianca.dumitru0907: game_mode2.png?500x350|}} \\ | {{pm:prj2024:mdinica:bianca.dumitru0907: game_mode2.png?500x350|}} \\ | ||
- | Rezultat final: \\ | + | Componentele asamblate: \\ |
{{pm:prj2024:mdinica:bianca.dumitru0907: all_components.png?500x350|}} | {{pm:prj2024:mdinica:bianca.dumitru0907: all_components.png?500x350|}} | ||
+ | |||
+ | {{pm:prj2024:mdinica:bianca.dumitru0907: switch.png?400x550|}} \\ | ||
+ | |||
+ | {{pm:prj2024:mdinica:bianca.dumitru0907: interior.png?600x500|}} \\ | ||
+ | |||
+ | {{pm:prj2024:mdinica:bianca.dumitru0907: carcasa2.png?600x400|}} \\ | ||
+ | |||
Line 63: | Line 71: | ||
**Repo github:** https://github.com/dbianca0907/CSGO-Inspired-Airsoft-Bomb.git \\ | **Repo github:** https://github.com/dbianca0907/CSGO-Inspired-Airsoft-Bomb.git \\ | ||
+ | //Laboratoare folosite:// Lab0.GPIO, Lab3.Timere.PWM, Lab6.I2C \\ | ||
+ | |||
=== Organizarea codului === | === Organizarea codului === | ||
Line 200: | Line 210: | ||
=== Calibrarea Senzorilor === | === Calibrarea Senzorilor === | ||
+ | 1. **Determinarea valorilor minime si maxime pentru RGB** | ||
+ | Pentru a calibra senzorii de culoare TCS230, trebuie să determinăm valorile minime și maxime pentru fiecare culoare (roșu, verde, albastru). Aceasta se realizează prin măsurarea răspunsului senzorului atunci când are în față un obiect alb (pentru valori minime) și un obiect negru (pentru valori maxime). | ||
+ | |||
+ | In funcția setup(), am configurat pinii senzorului pentru a stabili scala de frecvență: \\ | ||
+ | |||
+ | <code> | ||
+ | digitalWrite(S0, HIGH); | ||
+ | digitalWrite(S1, LOW); | ||
+ | </code> | ||
+ | |||
+ | Pentru a citi valorile fiecarei culori, am setat pinii S2 și S3 pentru a selecta filtrul corespunzător: \\ | ||
+ | |||
+ | Rosu: \\ | ||
+ | <code> | ||
+ | digitalWrite(S2, LOW); | ||
+ | digitalWrite(S3, LOW); | ||
+ | pw = pulseIn(output, LOW); | ||
+ | </code> | ||
+ | |||
+ | Verde: \\ | ||
+ | <code> | ||
+ | digitalWrite(S2, HIGH); | ||
+ | digitalWrite(S3, HIGH); | ||
+ | pw = pulseIn(output, LOW); | ||
+ | </code> | ||
+ | |||
+ | Albastru: \\ | ||
+ | <code> | ||
+ | digitalWrite(S2, LOW); | ||
+ | digitalWrite(S3, HIGH); | ||
+ | pw = pulseIn(output, LOW); | ||
+ | </code> | ||
+ | |||
+ | Pentru fiecare culoare, am inregistrat valorile minime si maxime obtinute: | ||
+ | <code> | ||
+ | int redMin = 54; | ||
+ | int redMax = 247; | ||
+ | int blueMin = 58; | ||
+ | int blueMax = 318; | ||
+ | int greenMin = 69; | ||
+ | int greenMax = 353; | ||
+ | </code> | ||
+ | |||
+ | 2. **Citirea valorilor de la Senzori si Maparea Lor** | ||
+ | |||
+ | Pentru fiecare valoare citita de la senzor, am utilizat functia map() pentru a converti valorile de frecventa intr-un interval de la 0 la 255, unde 255 reprezinta valoarea minima (corespunzand culorii albe), iar 0 reprezinta valoarea maxima (corespunzând culorii negre). | ||
+ | |||
+ | <code> | ||
+ | red = getRedPW(1); | ||
+ | redValue = map(red, redMin, redMax, 255, 0); | ||
+ | </code> | ||
+ | |||
+ | 3. ** Determinarea culorilor si validarea cheii introduse ** | ||
+ | |||
+ | Mediul in care se afla senzorii este unul inchis, asa cum se poate observa si la reprezentarea hardware, deci nu este nevoie ca senzorii sa fie recalibrati. | ||
+ | |||
+ | In funcție de valorile redValue, greenValue și blueValue, senzorii pot detecta culoarea dominanta pentru a verifica dacă cheia corectă a fost introdusă. | ||
+ | |||
+ | <code> | ||
+ | |||
+ | int verifyKey1() { | ||
+ | // Verificare cheie introdusa corect | ||
+ | if (redValue > blueValue && redValue > greenValue | ||
+ | && (redValue - blueValue) >= offsetSensor && (redValue - greenValue) >= offsetSensor) { | ||
+ | return 1; | ||
+ | } | ||
+ | // verificare cheie introdusa incorect | ||
+ | if (blueValue > redValue && blueValue > greenValue | ||
+ | && (blueValue - redValue) >= offsetSensor && (blueValue - greenValue) >= offsetSensor) { | ||
+ | return 2; | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | </code> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | ===DEMO=== |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
+ | <html><iframe width="560" height="315" src="https://www.youtube.com/embed/t1wqUz7HbFY?si=0WiJ0LLWizqG-iEp" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></html> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||