Light piano

Introducere

Proiectul va consta intr-un pian ce poate fi actionat prin lumina. Vor exista 6 “clape” care vor avea fiecare cate un sunet asociat. Fiecare “clapa” va fi alcatuita dintr-un fotorezistor legat la Arduino care va reda un sunet daca intensitatea luminoasa va depasi un anumit prag. In plus, se vor putea reda cantece salvate pe un card sd folosind o aplicatie android sau un site web.

Descriere generală

Se vor folosi 6 fotorezistoare ce vor fi legate la pinii analog ai Arduino Uno pentru a capta lumina si a actiona un buzzer pasiv.
Pentru playerul de melodii vor folosite melodiile deja existente Aici stocate pe un card sd. Selectarea melodiei se va face printr-o aplicatie android sau un site web ce vor trimite cereri catre un server http tinut pe un NodeMCU. Aceste cereri vor fi redirectionate catre arduino printr-o interfata Serial, iar acesta le va scoate de pe cardul SD folosind SPI si le va da play pe buzzer.

Hardware Design

Schema bloc

Schema electrica

Lista piese

  • 1x Arduino UNO
  • 1x NodeMCU
  • 6x fotorezistenta
  • 1x Modul card SD
  • 1x Buzzer pasiv
  • rezistente, cabluri, breadboard, placa prototipare

Software Design

Descrierea codului:

  • Mediu de dezvoltare: Arduino IDE si Visual Studio Code
  • biblioteci folosite: SD, SPI, SoftwareSerial, ESP8266WiFi, ESPAsyncTCP, ESPAsyncWebServer

Detectia luminii

Detectia luminii se face folosind fotorezistoare. Acestea sunt legate in serie cu cate o rezistenta de 220 ohmi si alimentate direct de la arduino. Pentru a face masurarea intensitatii luminii, un cablu leaga un port analog al Arduino la punctul in care fotorezistenta este legata de rezistorul de 220 ohmi.
Pentru ca fiecare fotoresistor se afla intr-o pozitie diferita, acestia vor fi expusi la intensitati diferite ale luminii, asa ca in functia setup fiecare masoara o data lumina si folosesc acea valoare pentru a se calibra.
Nota care va fi redata este aleasa astfel: se cauta fotorezistorul care inregistreaza deviata maxima dintre valoarea curenta a luminii si valoarea de calibrare; daca deviatia este mai mare decat o valoare de threshold, atunci nota respectiva va fi redata de buzzer. Astfel, doar nota asupra careia actioneaza cea mai puternica lumina va fi redata, iar 2 note nu vor putea fi redate in acelasi timp.

Buzzer

Buzzerul este folosit atat pentru a reda notele comandate de fotorezistori, cat si pentru a reda melodiile de pe cardul SD. Acesta este unul pasiv comandat prin functia tone din biblioteca arduino.

Redarea de pe cardul SD

Pentru a adauga melodii pentru cardul SD am creat un script de Python care primeste ca input melodiile de pe repository-ul acesta si le transforma intr-un fisier binar ce contine notele si durata fiecarei note.
Flow-ul pentru adaugarea de melodii noi este urmatorul:

  1. se introduce cardul SD intr-un PC
  2. se copiaza de pe repository-ul cu melodii doar continutul vectorului 'melody' in fisierul 'input.txt'
  3. se sterg toate comentariile din input
  4. se ruleaza script-ul de python (scriptul va cere un nume pentru melodie, iar acesta nu trebuie sa contina spatii si nu trebuie sa aiba mai mult de 8 caractere)
  5. se muta fisierul binar pe cardul SD
  6. se introduce cardul SD inapoi in modulul pentru Arduino

Pentru a reda melodia stocata pe fisierul binar, Arduino deschide fisierul si citeste cate 8 octeti (4 pentru frecventa notei si 4 pentru durata notei), apoi este calculat timpul de redare si este redata nota folosind 'tone'.

Comanda prin http

Modulul NodeMCU se conecteaza la o retea wifi si porneste un server web ce intoarce o pagina ce contine o lista de fisiere si un buton de Play. Lista este trimisa de Arduino prin interfata software serial la startup. Odata aleasa melodia dorita si apasat butonul Play, acesta trimite numele fisierului pe interfata software serial catre Arduino care incepe sa cante.
Accesarea paginii web se face ori printr-un browser web ori prin aplicatia de Android.

Jurnal

  • 28.04.2022 - wiki etapa 1
  • 20.05.2022 - finalizare redarea prin fororezistoare
  • 21.05.2022 - finalizare redarea de pe cardul SD
  • 21.05.2022 - finalizare wiki etapa 2

Bibliografie / Resurse

pm/prj2022/sgherman/light_piano.txt · Last modified: 2022/05/21 18:56 by george.floarea
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