Table of Contents

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

Design Hardware

Schema electrică

Bill of Materials

Cantitate Componentă Site cumpărare Datasheet
1 Placă dezvoltare Arduino R3 UNO Link Link
1 23LCV1024-I/P Link Link
1 TL074ACN Link Link
1 LD-MC-0905P Link Link
1 L7805ACV Link Link
1 Modul WiFi ESP8266 ESP-01 Link Link
1 Modul cu Ceas în Timp Real DS3231 Link Link
1 Buzzer alarmă Link Link
1 Tranzistor NPN de Putere TIP41C Link Link
1 Alimentator Stabilizat 12V 2000mA Link Link
10 Condensatoare Link Link
10 Rezistente Link 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.

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.