This shows you the differences between two versions of the page.
pm:prj2023:fstancu:ahmad.ramadan [2023/05/04 16:42] ahmad.ramadan |
pm:prj2023:fstancu:ahmad.ramadan [2023/05/17 18:40] (current) ahmad.ramadan |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | |||
====== Color Identifier - Ramadan Ahmad ====== | ====== Color Identifier - Ramadan Ahmad ====== | ||
===== Introducere ===== | ===== Introducere ===== | ||
Line 16: | Line 15: | ||
- //Obiectul colorat este plasat în fața senzorului de culoare TCS34725. (de ex. fruct cum ar fi un **mar/portocala**)// | - //Obiectul colorat este plasat în fața senzorului de culoare TCS34725. (de ex. fruct cum ar fi un **mar/portocala**)// | ||
- //Senzorul de culoare TCS34725 detectează culoarea obiectului și trimite datele către Arduino Mega2560.// | - //Senzorul de culoare TCS34725 detectează culoarea obiectului și trimite datele către Arduino Mega2560.// | ||
- | - //Arduino <del>Mega2560</del> UNO procesează datele primite și determină numele culorii detectate.// | + | - //Arduino <del>UNO</del> Mega2560 procesează datele primite și determină numele culorii detectate.// |
- //Numele culorii este afișat pe ecranul OLED 128x64, iar utilizatorul poate vedea și înțelege culoarea detectată.// | - //Numele culorii este afișat pe ecranul OLED 128x64, iar utilizatorul poate vedea și înțelege culoarea detectată.// | ||
- //Ledul RGB este controlat de Arduino Mega2560 pentru a lumina culoarea detectată, oferind astfel o reprezentare vizuală a culorii obiectului.// | - //Ledul RGB este controlat de Arduino Mega2560 pentru a lumina culoarea detectată, oferind astfel o reprezentare vizuală a culorii obiectului.// | ||
- | - //Utilizatorul și obiectul colorat interacționează cu sistemul prin intermediul senzorului de culoare, display-ului OLED și a ledului RGB, permițând identificarea rapidă și eficientă a culorilor diferitelor obiecte.// | + | - //Utilizatorul și obiectul colorat interacționează cu sistemul prin intermediul senzorului de culoare, display-ului OLED și a ledului RGB, cat si a servo-ului atasat,permițând identificarea rapidă și eficientă a culorilor diferitelor obiecte.// |
+ | - //Butonul are rolul de a produce o intrerupere hardware, prin stingerea becului RGB dupa ce se apasa pe buton.// | ||
==== Schema Bloc: ==== | ==== Schema Bloc: ==== | ||
- | {{:pm:prj2023:fstancu:schemablocpm.png?700|}} | + | {{ :pm:prj2023:fstancu:schemablocpm.png |}} |
- | + | ||
- | <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ă. | + | |
- | + | ||
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | |
- | </note> | + | |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 34: | Line 28: | ||
- | * **Arduino <del>Mega2560</del> UNO:** //Placa de bază a proiectului, utilizată pentru a controla și coordona toate celelalte componente.// | + | * **Arduino <del>UNO</del> Mega2560:** //Placa de bază a proiectului, utilizată pentru a controla și coordona toate celelalte componente.// |
* **Breadboard:** //Utilizată pentru a conecta toate componentele între ele.// | * **Breadboard:** //Utilizată pentru a conecta toate componentele între ele.// | ||
* **128×64 OLED display:** //Afișează numele culorii detectate.// | * **128×64 OLED display:** //Afișează numele culorii detectate.// | ||
Line 42: | Line 36: | ||
* **Rezistoare:** //Utilizate pentru a limita curentul în circuit și pentru a proteja componentele.// | * **Rezistoare:** //Utilizate pentru a limita curentul în circuit și pentru a proteja componentele.// | ||
* **Fire:** //Conectează componentele între ele.// | * **Fire:** //Conectează componentele între ele.// | ||
+ | * **Servomotor SG90, 180 grade: ** //Alt element care contribuie la identificarea culorii detectate.// | ||
+ | * **Buton: ** //Utilizat pentru a produce o intrerupere hardware.// | ||
Line 50: | Line 46: | ||
- | - **Utilizand Breadboard:** | + | * **Utilizand Breadboard:** |
- | {{ :pm:prj2023:fstancu:schemacircuitnonedited.png.png?700 |}} | + | {{:pm:prj2023:fstancu:schemacircuitccolorpng.png?600|}} |
- | + | ||
- | ---- | + | |
- | + | ||
- | - **Schematic:** | + | |
- | + | ||
- | {{ :pm:prj2023:fstancu:circuit_schematic.png?600 |}} | + | |
- | ---- | + | |
+ | * **Schematic Fritzing:** | ||
+ | {{:pm:prj2023:fstancu:circuit_schematicmod.png?600|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 72: | Line 63: | ||
* (etapa 3) surse şi funcţii implementate | * (etapa 3) surse şi funcţii implementate | ||
</note> | </note> | ||
+ | |||
+ | Acest program utilizează mai multe biblioteci terță parte: | ||
+ | |||
+ | * **Biblioteca "Servo.h":** o bibliotecă standard Arduino care oferă o interfață facil de folosit pentru controlul servomotoarelor. | ||
+ | * | ||
+ | * **Biblioteca "Wire.h":** o altă bibliotecă standard Arduino care facilitează comunicarea I2C între dispozitivul Arduino și alte dispozitive I2C. | ||
+ | * | ||
+ | * **Biblioteca "Adafruit_TCS34725.h":** o bibliotecă de la Adafruit care facilitează utilizarea senzorului de culoare TCS34725. | ||
+ | * | ||
+ | * **Biblioteca "U8glib.h":** o biblioteca pentru Arduino destinată pentru dispozitive cu afișaj cu matrice de puncte, cum ar fi LCD-uri și OLED-uri. | ||
+ | |||
+ | //În ceea ce privește algoritmi și structuri implementate, programul folosește o metodă de citire a datelor de la senzorul de culoare TCS34725, apoi normalizarea valorilor RGB prin împărțirea fiecărei la media celor trei. Programul utilizează apoi aceste valori normalizate pentru a determina ce culoare este detectată.// | ||
+ | |||
+ | - Funcțiile implementate în acest cod includ: | ||
+ | |||
+ | * **//debounce()://** Aceasta este o funcție de eliminare a zgomotului pentru butonul de intrare. Ea asigură că semnalul de intrare este stabilit și că semnalele nedorite (bounce) sunt ignorate. | ||
+ | * | ||
+ | * //**setup():**// Aceasta este o funcție standard Arduino care este executată o singură dată la pornirea programului. Aici, este configurată comunicarea serială, inițializate pinurile și verificată conexiunea cu senzorul de culoare. | ||
+ | * | ||
+ | * //**fadeColor():**// Aceasta este o funcție care face ca un LED RGB să estompeze treptat toate culorile la negru. | ||
+ | * | ||
+ | * **//draw()://** Aceasta este o funcție care afișează culoarea detectată pe un ecran OLED. | ||
+ | * | ||
+ | * //**loop():**// Aceasta este funcția principală a programului care se execută repetitiv după ce setup() a fost finalizat. În această funcție, sunt citite datele de la senzor, calculată culoarea și controlată poziția servomotorului și culoarea LED-ului RGB în funcție de culoarea detectată. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | {{:pm:prj2023:fstancu:color1.jpeg?400|}} {{:pm:prj2023:fstancu:color2.jpeg?400|}} | ||
+ | {{:pm:prj2023:fstancu:color3.jpeg?400|}} {{:pm:prj2023:fstancu:color4.jpeg?400|}} | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | În concluzie, acest proiect a fost o experiență de învățare incredibilă și, fără îndoială, cel mai interesant proiect la care am lucrat până acum în cadrul facultății. Am avut ocazia să explorez și să înțeleg mai bine diverse componente hardware precum servomotoarele, senzorii de culoare, LED-urile RGB și ecranele OLED. |
- | <note warning> | + | O provocare a fost lucrul cu ecranul OLED 128x64 . A fost nevoie de timp și de multă răbdare pentru a înțelege cum să conectez corect ecranul și cum să controlez afișarea textului pe acesta, inclusiv schimbarea și mărirea fontului. Cu toate acestea, această experiență a fost foarte valoroasă, deoarece am învățat multe despre gestionarea afișajelor. 8-) |
- | 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**. | + | Deși proiectul a avut provocările sale, a fost, în același timp, foarte distractiv. Am avut posibilitatea de a experimenta, de a învăța și de a crea ceva util și tangibil. Sunt încântat de ceea ce am reușit să realizez și sunt nerăbdător să aplic cunoștințele dobândite în proiecte viitoare.:-D |
- | </note> | + | |
- | ===== Jurnal ===== | + | ===== Download ===== |
+ | |||
+ | {{:pm:prj2023:fstancu:ramadan_ahmad_331cb_proiect_pm.zip|}} | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | **Resurse Software** şi **Resurse Hardware** : | ||
+ | * [[https://www.brainy-bits.com/post/how-to-connect-and-use-an-spi-oled-display]] | ||
+ | * [[https://www.makerguides.com/tcs34725-rgb-color-sensor-with-arduino/]] | ||
+ | * [[https://www.electronics-lab.com/project/using-sg90-servo-motor-arduino/]] | ||
+ | * [[https://www.rapidtables.com/web/color/RGB_Color.html]] | ||
+ | |||
- | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
- | </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> | ||