This is an old revision of the document!
Nume: Craciun Alexandra-Georgiana
Grupa: 331CB
O ramă foto digitală este un mijloc modern și elegant de a păstra momentele frumoase și de a ne reconecta cu amintirile noastre și cu cei dragi. Poate conține o diversitate de poze pline de nostalgie, ce îți vor lumina ziua în funcție de cât de înnorat e afară, prin intermediul unui senzor aferent, si poate oferi un ton mai dramatic, prin functionalitatea de a transforma pozele si in format alb-negru. Poate fi un cadou prețios, sau un element central al decorului de acasă, aducând un plus de căldură și personalitate oricărui spațiu. Motivația din spatele dezvoltării acestui proiect vine din dorința de a combina tehnologia modernă cu nevoia umană de a celebra momentele importante din viață.
Placuta Arduino va fi alimentata prin cablu USB de la laptop. Proiectul va citi din cardul SD pozele si le va afisa la un interval de 5s pe ecranul LCD. Senzorul de luminozitate trimite informatie la placuta Arduino, care mai apoi o va folosi pentru a adapta luminozitatea pozelor de pe ecran. Utilizatorul are posibilitatea de a apasa un buton, ce va transforma pozele color in poze alb-negru. Proiectul dispune de alte 2 butoane, prin care se poate derula prin poze inainte si inapoi.
Celule roz, dispozitive de intrare, trimit informatie la Arduino:
Celula verde, dispozitiv de iesire, ecranul LCD pe care se vor afisa pozele
Lista de piese:
Conectare piese:
Asamblare hardware:
Am scris codul in Arduino IDE si am utilizat bibliotecile:
Functionalitate:
În codul dat, inițializarea sistemului începe prin configurarea piniilor și inițializarea componentelor hardware, precum ecranul TFT și cardul SD. Gestionarea întreruperilor permite detectarea rapidă a apăsării butoanelor și a acțiunilor utilizatorului. După inițializarea cardului SD și crearea unei liste cu imagini disponibile, sistemul monitorizează constant starea senzorului de lumină. Am ales aceasta metoda pentru ca schimbarile sa fie in timp real, in loc sa fie aplicate urmatorului fisier. Totusi, actiunea utilizatorului (apasarea butoanelor) este creata prin intreruperi.
Principala funcție de execuție, loop(), coordonează afișarea imaginilor BMP pe ecranul TFT, încărcând și afișând fiecare imagine în conformitate cu interacțiunile utilizatorului. Funcția bmpDraw() este responsabilă de deschiderea și afișarea fiecărei imagini BMP, inclusiv aplicarea unui filtru alb-negru opțional.
Descriere Funcții
Configurează pini pentru butoane, lumină de fundal și senzor de lumină. Inițializează ecranul TFT, cardul SD și setează întreruperi pentru butoanele de control.
1. Această funcție este apelată la apăsarea butonului pentru aplicarea filtrului alb-negru. Folosește o verificare anti-debounce pentru a evita multiple declanșări dintr-o singură apăsare. Updateaza filtru si apeleaza functia de draw cu noul filtru.
2. Gestionează întreruperile pentru butoanele de next și back. Verifică starea butoanelor și updateaza indexul fișierului afisat în funcție de apăsările detectate.
Inițializează cardul SD și verifică dacă a fost montat corect. Parcurge directorul rădăcină al cardului SD și adaugă toate fișierele BMP găsite în lista bmpFiles.
Verifică starea senzorului de lumină și ajustează luminozitatea ecranului în funcție de aceasta. Încarcă și afișează imaginea BMP curentă de pe cardul SD.
Are ca parametrii numele file ului, coordonatele de pe ecranul TFT unde dorim să începem afișarea imaginii si un int ce reprezinta filtrul. Deschide fișierul BMP specificat și citește headerul pentru a obține informații despre dimensiuni și format. Parcurge pixelii imaginii și îi afișează pe ecranul TFT, aplicând filtrul alb-negru dacă este activat.
Citește 16 și, respectiv, 32 de biți din fișierul BMP pentru a obține informații necesare despre headerul imaginilor.
Rezultatul a fost unul satisfacator, intrucat toate functionalitatile dorite au fost implementate
Link catre demo pe Youtube: https://youtu.be/lRo6TX4jXq0?si=5vUYiCinLNkvlKRF
Pe parcursul acestui proiect, am intampinat diverse dificulatati, cum ar fi fire ce nu faceau bine contact, folosirea gresita a butoanelor sau a intreruperilor, formatul gresit al pozelor de pe card. Consider ca cea mai grea parte a fost software, nu hardware, intrucat am avut destul de putine piese care insa faceau multe instructiuni ce trebuiau sincronizate Au fost necesare documentatie extra, incercari destul de multe, emotii cand dadea black screen sau cand nu mai citea USB -ul. Iar tot procesul a fost usor diferit de ceea ce eram obisnuita, implicand acum si parte hardware si rezultat real-time, dar si frica ca poti sa arzi lucruri si nu mai ai timp sa ti vina alta comanda de piese
Totusi, a fost o experienta interesanta, iar satisfactia rezultatului final a fost uriasa. Pe masura ce mai reuseam sa fac o functionalitate, prindeam si mai mult drag de proiect, pe care il voi pastra, cu siguranta, ca amintire.
Resurse Hardware:
Resurse Software: