This shows you the differences between two versions of the page.
pm:prj2025:fstancu:cristian.lazar1512 [2025/05/04 20:58] cristian.lazar1512 created |
pm:prj2025:fstancu:cristian.lazar1512 [2025/06/02 22:16] (current) cristian.lazar1512 [Flow-ul programului] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | Created | + | ====== Alarmă controlată prin voce - Lazăr Cristian ====== |
+ | ===== Introducere ===== | ||
+ | |||
+ | Proiectul constă în realizarea unei alarme cu ceas, controlabilă prin comenzi vocale. Comenzile suportate sunt de setare alarmă și de oprire alarmă. | ||
+ | |||
+ | Scopul este integrarea comenzilor vocale într-un dispozitiv minimalist, restricționat hardware. | ||
+ | |||
+ | Am pornit de la ideea unei alarme inteligente, cu un bec LED RGB integrat pentru a mimica rasăritul soarelui. Datorită dificultății de a găsi un array de LED-uri de tensiune înaltă documentat, am renunțat la aceasă componentă, ceea ce m-a lăsat cu un proiect foarte "bare bones". Pentru a spori complexitatea, am decis să adaug comenzi vocale, foarte simpliste, fezabil de realizat pe un atmega328p. | ||
+ | |||
+ | Utilitatea proiectului este limitată, reprezentând mai mult un "proof of concept". Însă, acesta poate fi folosit ca o alternativă la alarmele integrate în telefoane, deoarece are un sistem de recunoaștere de comenzi vocale dedicat, cu viteză de răspuns ridicată. | ||
+ | |||
+ | **Schema bloc** | ||
+ | {{ :pm:prj2025:fstancu:schema_bloc_cristianlazar.png |}} | ||
+ | |||
+ | ===== Design Hardware ===== | ||
+ | |||
+ | ==== Schema electrică ==== | ||
+ | |||
+ | {{ :pm:prj2025:fstancu:schematic_smart-alarm_2025-05-18_01.png?700 |}} | ||
+ | |||
+ | ==== Bill of Materials ==== | ||
+ | |||
+ | ^ Cantitate ^ Componentă ^ Site cumpărare ^ Datasheet ^ | ||
+ | | 1 | Placă dezvoltare Arduino R3 UNO | [[https://www.optimusdigital.ro/ro/placi-avr/4561-placa-de-dezvoltare-compatibila-cu-arduino-uno-r3-atmega328p-atmega16u2-cablu-50-cm.html?search_query=arduino+r3+uno&results=129|Link]] | [[https://docs.arduino.cc/hardware/uno-rev3/|Link]] | | ||
+ | | 1 | 23LCV1024-I/P | [[https://www.digikey.com/en/products/detail/microchip-technology/23LCV1024-I-P/3543092|Link]] | [[https://ww1.microchip.com/downloads/en/DeviceDoc/25156A.pdf|Link]] | | ||
+ | | 1 | TL074ACN | [[https://www.digikey.com/en/products/detail/texas-instruments/TL074ACN/476129|Link]] | [[https://www.ti.com/lit/ds/symlink/tl071.pdf?HQS=dis-dk-null-digikeymode-dsf-pf-null-wwe&ts=1721694323530|Link]] | | ||
+ | | 1 | LD-MC-0905P | [[https://www.tme.eu/en/details/ld-mc-0905p/microphones-and-headsets/loudity/|Link]] | [[https://www.tme.eu/Document/9b07afd90a47f1182065e94e017d67da/ld-mc-0905p.pdf|Link]] | | ||
+ | | 1 | L7805ACV | [[https://www.digikey.com/en/products/detail/stmicroelectronics/L7805ACV/585962|Link]] | [[https://www.st.com/content/ccc/resource/technical/document/datasheet/41/4f/b3/b0/12/d4/47/88/CD00000444.pdf/files/CD00000444.pdf/jcr:content/translations/en.CD00000444.pdf|Link]] | | ||
+ | | 1 | Modul WiFi ESP8266 ESP-01 | [[https://www.optimusdigital.ro/ro/wireless-wifi/222-modul-wi-fi-esp-01-negru.html?search_query=modul+wifi+esp&results=51|Link]] | [[https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf|Link]] | | ||
+ | | 1 | Modul cu Ceas în Timp Real DS3231 | [[https://www.optimusdigital.ro/ro/altele/1102-modul-cu-ceas-in-timp-real-ds3231.html?search_query=DS3231&results=6|Link]] | [[https://www.analog.com/media/en/technical-documentation/data-sheets/DS3231M.pdf|Link]] | | ||
+ | | 1 | Buzzer alarmă | [[https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html?search_query=buzzer&results=62|Link]] | [[https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html?search_query=buzzer&results=62|Link]] | | ||
+ | | 1 | Tranzistor NPN de Putere TIP41C | [[https://www.optimusdigital.ro/ro/componente-electronice-tranzistoare/2953-tranzistor-npn-de-putere-tip41c.html?search_query=tranzistor+tip41C&results=1|Link]] | [[https://eu.mouser.com/datasheet/2/389/tip41c-1852274.pdf|Link]] | | ||
+ | | 1 | Alimentator Stabilizat 12V 2000mA | [[https://www.optimusdigital.ro/ro/electronica-de-putere-alimentatoare-priza/2888-alimentator-stabilizat-12v-2000ma.html?search_query=alimentator+12V&results=8|Link]] | [[https://www.optimusdigital.ro/ro/electronica-de-putere-alimentatoare-priza/2888-alimentator-stabilizat-12v-2000ma.html?search_query=alimentator+12V&results=8|Link]] | | ||
+ | | 10 | Condensatoare | [[https://www.optimusdigital.ro/ro/componente-electronice-condensatoare/5389-kit-condensatoare-electrolitice-15-tipuri-200-buc.html?search_query=condensatoare&results=116|Link]] | [[https://www.optimusdigital.ro/ro/componente-electronice-condensatoare/5389-kit-condensatoare-electrolitice-15-tipuri-200-buc.html?search_query=condensatoare&results=116|Link]] | | ||
+ | | 10 | Rezistente | [[https://www.optimusdigital.ro/ro/kituri/4745-set-de-rezistoare-asortate-optimus-digital-intre-10-1-m-600-buc-0616639927610.html?search_query=rezistente+kit&results=8|Link]] | [[https://www.optimusdigital.ro/ro/kituri/4745-set-de-rezistoare-asortate-optimus-digital-intre-10-1-m-600-buc-0616639927610.html?search_query=rezistente+kit&results=8|Link]] | | ||
+ | |||
+ | ==== Descrierea pinilor ==== | ||
+ | |||
+ | Pinii folositi pe placa de dezvoltare sunt: | ||
+ | |||
+ | - SCK, MISO, MOSI, SS_POT, SS_SRAM pentru comunicare SPI cu potentiometrul digital (folosit pentru a ajusta automatic gain control) si SRAM-ul extern (folosit pentru a stoca valorile inregistrate de la microfon) | ||
+ | |||
+ | - OCA1 folosit drept iesire PWM pentru a controla curentul din baza tranzistorului TIP41C, astfel controland buzzer-ul. | ||
+ | |||
+ | - CLK_INT folosit drept pin de intrerupere externa de la RTC, anunțând când trebuie sunată alarma. | ||
+ | |||
+ | - TX, RX folosit pentru a comunica prin UART cu modulul WI-FI, pentru a transmite datele audio server-ului care le procesează si pentru a primi comanda audio procesată de la server. | ||
+ | |||
+ | - SDA, SCL folosite pentru comunicare I2C cu modulul RTC pentru a seta data curenta si data la care trebuie sa sune alarma. | ||
+ | |||
+ | - ADC0 folosit ca input in ADC-ul microcontroller-ului a datelor audio analogice de la microfon, in urma prelucrarii semnalelor. | ||
+ | |||
+ | - VIN curentul de alimentare, provenit de la un stabilizator de tensiune alimentat cu 12V de la priza. | ||
+ | |||
+ | - GND ground. | ||
+ | |||
+ | - 5V, 3V3 sunt iesiri de 5V, respectiv 3V3. | ||
+ | |||
+ | ==== Descrierea componentelor ==== | ||
+ | |||
+ | Placa arduino R3 Uno se ocupa de gestionarea sistemului, concret preluarea datelor audio de la ADC, stocarea lor intr-un buffer in SRAM-ul extern, ajustarea gain-ului in functie de ultimele N sample-uri, preluarea datelor din buffer si trimiterea lor prin WI-FI, receptionarea comenzii vocale prelucrate de la modulul WI-FI, setarea datei curente a modulului RTC, setarea alarmei in modulul RTC si sunarea buzzer-ului. | ||
+ | |||
+ | Datele de la microfon trec prin trei stagii de prelucrare: | ||
+ | |||
+ | - Preamplificare: Output-ul microfonului este amplificat de un amplificator operational configurat non inverting pentru a ajunge in jurul range-ului de -0.8V - 0.8V. | ||
+ | |||
+ | - Automatic gain control: Un alt amplificator operational, acesta cu un potentiometru digital in loc de rezistenta de feedback, este folosit pentru a ajusta amplificarea in functie de noise, prim modificarea potentiometrului. | ||
+ | |||
+ | - Filtrare: Semnalul este filtrat de catre un filtu bandpass Sallen Key la range-ul de frecvente 330Hz - 4kHz. | ||
+ | |||
+ | Modulul WI-FI realizeaza comunicarea cu server-ul de recunoastere vocala. | ||
+ | |||
+ | Memoria SRAM externa stocheaza datele de la microfon temporar, pana ca acestea sa fie trimise server-ului. | ||
+ | |||
+ | Modulul RTC este folosit pentru a mentine timpul si a seta alarme. | ||
+ | |||
+ | Buzzer-ul este folosit ca sunetul alarmei. | ||
+ | |||
+ | Stabilizatorul de tensiune este folosit pentru a obtine tensiunea de 5V pentru alimentarea Arduino-ului. | ||
+ | |||
+ | ==== Starea proiectului ==== | ||
+ | |||
+ | In starea actuala, este implementat stabilizatorul de tensiune, evident prin faptul ca placuta arduino este alimentate. In lucru sunt prelucrarea semnalului microfonului si controlul buzzer-ului. | ||
+ | |||
+ | {{ :pm:prj2025:fstancu:ldo_merge.jpg?700 |}} | ||
+ | |||
+ | ==== Design Software ==== | ||
+ | |||
+ | In design-ul acestui proiect, au fost folosite bibliotecile de baza avz, impreuna cu SoftwareSerial.h pentru a trimite mesaje de logging si realizare de debugging. Stadiul actual al implementarii este incomplet, proiectul oprindu-se la trimiterea de date audio catre server-ul remote. | ||
+ | |||
+ | ==== Flow-ul programului ==== | ||
+ | |||
+ | Initial, se realizeaza initializarea un UART0 si a modulului Wi-Fi, care se conecteaza la un AP static, iar apoi deschide 2 conexiuni, una UDP si una TCP, cu server-ul remote. Se foloseste un timeout la citirea raspunsurilor de la modulul Wi-Fi in initializare si, apoi, in transmisiile de date, timeout care se realizaeza cu un timer setat sa masoare milisecunde. Dupa initializarea modulului Wi-Fi, se initializeaza ADC-ul, care ruleaza in Free Running Mode, la o frecventa de 125kHz. | ||
+ | |||
+ | Dupa initializare, bucla de program asteapta ca datele de la ADC sa depaseasca un threshold de intensitate audio (media ultimelor N valori in modul citite de ADC sa fie mai mare de un threshold), apoi incepe sa socheze date intr-un buffer de 508 bytes. Cand acesta se incarca, datele sunt trimise prin UDP print-un pachet cu formatul `<packet_index>(4 bytes):<data>(508 bytes)`. Odata trimise datele, programul asteapta un acknowledgement de la server si apoi va verifica daca inca mai exista intensitate audio; daca da, va continua sa colecteze date si sa trimita pachete; daca nu, va trimite un pachet cu formatul `FFFF:<filler>(508 bytes)`, care indica server-ului ca a primit ultimul pachet. | ||
+ | |||
+ | Server-ul este un program in python, care asteapta datele de la MC, apoi foloseste functionalitati din biblioteca `wave` pentru a realiza un fisier .wav, si apoi repeta pasii. | ||
+ | |||
+ | Se remarca folosirea timer-ului pentru masurarea milisecundelor, a ADC-ului pentru citirea de date, si a UART-ului pentru comunicarea cu modulul Wi-Fi. Validare sistemului s-a realizat prin testare manuala a diverselor situatii de functionare. | ||
+ | |||
+ | Calibrarea sensitivitatii microfonului s-a realizat hardware, prin schimbarea amplificarii amplificatorului operational. |