Grupa: 335CA
Lista de piese:
Componenta | Link | Datasheet |
---|---|---|
Placa de dezvoltare ESP32 | ESP32 | ESP32 |
Display ST7735 cu adaptor SD | Display | Display |
RTC PCF8563 | RTC | RTC |
Microfon MAX9814 | Microfon | Microfon |
Componenta | PCOM | Pinout |
---|---|---|
ESP | I2C, SPI | SCLK - GPIO18, MOSI - GPIO23, MISO - GPIO19, CS1 - GPIO5, CS2 - GPIO15, SDA - GPIO21, SCL - GPIO22 |
Display | SPI | SCK(SCLK) - GPIO18, SDA(MOSI) - GPIO23, CS - GPIO5, DC - GPIO2, RST - GPIO4 |
AdaptorSD | SPI | SCLK - GPIO18, MOSI - GPIO23, MISO - GPIO19, CS - GPIO15 |
RTC | I2C | SDA - GPIO21, SCL - GPIO22 |
Camera | I2C, Parallel Data GPIO | SDA - GPIO21, SCL - GPIO22, HREF - NC, VSYNC - GPIO13, PCLK - GPIO14, XCLK - GPIO27, D0 - GPIO36, D1 - GPIO39, D2 - GPIO34, D3 - GPIO35, D4 - GPIO32, D5 - GPIO33, D6 - GPIO25, D7 - GPIO26 |
Modulul de ceas si display-ul functioneaza, dupa cum se poate vedea in poza urmatoare:
Stadiu actual al implementarii software
La momentul curent, Chloe are o suita de expresii dragute in starea de idle, alaturi de 2 meniuri pentru functionalitatile de inregistrare si alarma. In meniul pentru inregistrare, utilizatorul poate apasa pe un buton pentru a porni inregistrarea, oprind-o apasand tot pe acelasi buton. Dupa ce se realizeaza inregistrarea, aceasta este salvata pe cardul SD si utilizatorul primeste un mesaj de confirmare in care i se arata numele sub care a fost salvat fisierul. In meniul de alarma, utilizatorul poate seta orele si minutele la care doreste sa sune alarma.
Biblioteci folosite si functionalitati laborator
Ca biblioteci, am folosit:
Functionalitatile din laborator folosite sunt pentru comunicarea prin I2C (inceperea transmisiei si alegerea slave-ului), comunicarea prin SPI (initializarea transmisiei pe un anumit CS), declararea si utilizarea intreruperilor (rutina de tratare si setarea intreruperii pe un anumit pin), ADC (pentru citirea valorilor analogice si interpretarea lor in format WAV).
Elementul de noutate
Elementul de noutate al proiectului este aducerea functionalitatilor care se regasesc deseori in smart phones pe un dispozitiv offline, cu scopul de a reduce screen time-ul utilizatorilor, avand de asemenea un aspect placut si minimalist, cu niste expresii prietenoase si dragute. Un al element de noutate este encodarea manuala a fisierelor WAV, doar folosind valorile pe 12 biti citite de pe ADC.
Calibrare microfon
Pentru a calibra datele primite, am avut ca optiuni fie implementarea hardware a unui filtru trece jos, intrucat am observat faptul ca fisierele pe care le cream sunau foarte high-pitched. Din lipsa componentelor, am ajuns sa fac calibrarea software prin modificarea antetului WAV si reducerea numarului de biti per sample de la 12 la 8. Frecventa am calibrat-o prin testare repetata, observand faptul ca fiserul era mai scurt decat imi doream sa fie.
Functii folosite
Pentru implementarea software, am modularizat codul cat de mult s-a putut.
Am implementat functii pentru meniuri: record_menu(bool), show_time(bool), alarm_menu, record.
Pentru animatii, am implementat switch_animation(int), move_eye(int), happy_eyes, wake_up, sleep, blink, draw_eyes(bool), center_eyes(bool).
Pentru fisierele WAV: writeWavHeader, updateWavHeader, record. Pentru intreruperi: isr(pentru buton 1), isr2(pentru buton 2), tmr.
Logica de schimbare a meniurilor se face printr-un switch case in loop.
Demo proiect:
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.