This is an old revision of the document!


Flashback photo frame

Nume: Craciun Alexandra-Georgiana

Grupa: 331CB

Introducere

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ță.

Descriere generală

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:

  • Senzor intensitate: masoara intensitatea luminii din camera
  • Buton Filtru: odata apasat, pozele vor fi in format alb-negru
  • Buton Next: odata apasat, se va afisa urmatoarea poza; daca e apasat de x ori sare peste x poze
  • Buton Prev: asemanator cu Next, doar ca deruleaza pozele inapoi
  • Card SD: se vor citi pozele puse pe card, ulterior din afisate pe ecran

Celula verde, dispozitiv de iesire, ecranul LCD pe care se vor afisa pozele

Hardware Design

Lista de piese:

  1. placa Arduino
  2. breadboard
  3. display LCD SPI 1.8”
  4. senzor luminos
  5. card SD + adaptor
  6. butoane
  7. fire
  8. rezistente

Conectare piese:

  • Ecran LCD - Arduino:
  1. GND pe GND
  2. VCC pe 5V
  3. RESET pe pinul 8
  4. A0 pe pinul 9
  5. SDA pe pinul 11
  6. SCL pe pinul 13
  7. CS pe pinul 10
  8. SCK pe pinul 13
  9. MISO pe pinul 12
  10. MOSI pe pinul 11
  11. SD_CS pe pinul 4
  12. LED+ pe pinul 5
  13. LED- pe GND
  • Senzor lumnozitate - Arduino
  1. GND pe GND
  2. VCC pe 5V
  3. DO pe pinul 3
  • Buton Filtru- Arduino
  1. Un brat la GND cu o rezistenta de 10k
  2. Un brat la 5V
  3. Un brat la pinul 2
  • Buton Next- Arduino
  1. Un brat la GND cu o rezistenta de 10k
  2. Un brat la 5V
  3. Un brat la pinul 6
  • Buton Prev- Arduino
  1. Un brat la GND cu o rezistenta de 10k
  2. Un brat la 5V
  3. Un brat la pinul 7

Asamblare hardware:

Software Design

Am scris codul in Arduino IDE si am utilizat bibliotecile:

  • SPI.h: pentru comunicarea prin protocolul SPI cu ecranul LCD și cardul SD.
  • SD.h: pentru accesul și citirea fișierelor BMP de pe cardul SD.
  • TFT.h: pentru interacțiunea și desenarea pe ecranul TFT.
  • LinkedList.h: pentru gestionarea listei de fișiere BMP în modul stack.

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, a acțiunilor utilizatorului si a schimbarilor de luminozitate. 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

  • Setup Inițial: setup():

Configurează pini pentru butoane, lumină de fundal și senzor de lumină. Inițializează ecranul TFT, cardul SD și setează întreruperi pentru butoanele de control.

  • Gestionarea Întreruperilor: buttonInterrupt() & ISR(PCINT2_vect) && senzorIntrerrupt:

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. Apeleaza functia de draw cu noua imagine.

3. Gestionează întreruperile de la senzorul de lumină. La detectarea unei schimbări în starea senzorului, aceasta ajustează luminozitatea ecranului TFT, astfel incat la intuneric luminozitatea va fi redusă, iar la lumină, ridicată.

  • Inițializarea Cardului SD: init_SD()

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.

  • Funcția Principală de Executare: loop()

Încarcă și afișează imaginea BMP curentă de pe cardul SD.

  • Afișarea Imaginilor BMP: bmpDraw()

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.

  • Funcții Helper pentru Citirea Datelor: read16() & read32()

Citește 16 și, respectiv, 32 de biți din fișierul BMP pentru a obține informații necesare despre headerul imaginilor.

Download

Rezultate Obţinute

Rezultatul a fost unul satisfacator, intrucat toate functionalitatile dorite au fost implementate :-)

Concluzii

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 :-D 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 m(

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.

Jurnal

  • 05.05.2024: Creare pagina wiki
  • 13.05.2024: Comanda piese
  • 16.05.2024: Verificarea pieselor si asamblarea lor
  • 17.05.2024: Adaugare scheme hardware
  • 19.05.2024: Scriere cod pentru ecran si buton
  • 20.05.2024: Citire card SD
  • 21.05.2024: Adaugarea senzorului si a filtrului alb-negru
  • 22.05.2024: Fixed a bug cu intreruperi; am crezut ca am ars ceva LOL
  • 23.05.2024: Adaugare butoane next/prev + mutat tot pe breadboard mai mare

Bibliografie

pm/prj2024/iotelea/alexandra.craciun02.1716640402.txt.gz · Last modified: 2024/05/25 15:33 by alexandra.craciun02
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0