Autor: DANCIU Andra-Maria
Email: andradanciu1997@gmail.com
Tema proiectului consta in realizarea unui papagal care repeta ce aude. Am ales acest proiect pentru ca as vrea sa invat sa lucrez cu sunetul la nivel hardware.
Sunetul va fi inregistrat de un microfon in momentul in care intensitatea lui este peste un anumit nivel prestabilit. Apoi, va fi redat de un speaker tot ce a fost inregistrat anterior. Cand utilizatorul vorbeste suficient de tare, papagalul incepe sa inregistreze. Cand utilizatorul se va opri din vorbit, papagalul va repeta.
Schema bloc cu toate componentele hardware ale proiectului este urmatoarea:
Sunetul inregistrat va fi stocat pe un card SD. Inregistrarea vocii presupune conversia in digital a unui semnal analogic - cel produs de vibratiile corzilor vocale. Frecventele emise de vocea umana se incadreaza in spectrul 300 - 4000 Hz, si conform teoremei de esantionare, pentru a putea fi inregistrata corect, este necesara o frecventa de esantionare de cel putin 8000 de Hz. In aplicatie, pentru a mai compensa din pierderile de precizie datorate folosirii unei dimensiuni de 8 biti pe esantion, vocea se va inregistra cu o frecventa de 16kHz.
Piese necesare:
Schema electrica:
Am importat din laborator modulele spi, pff si sd pentru interactiunea cu cardul SD: initializare file system, scriere si citire de fisiere.wav.
Am utilizat 2 timere pentru inregistrarea si redarea de sunet (timer0 si timer1). Pentru a-l reda corect trebuie să avem un timer care să genereze o întrerupere cu frecvența de 44100Hz. În fiecare întrerupere trebuie să citim un sample din fișier (un octet) și să-l punem pe ieșirea unui al doilea timer care a fost configurat în modul PWM cu rezoluția de 8 biti.
Am incercat sa folosesc timer 2 pentru a imi pastra o un flag pe valoarea true timp de 2 secunde cand imi detecteaza fluctuatie pe pinul PC6 (unde este conectat senzorul de intensitate de sunet). Acest flag urma sa fie folosit pentru recording (do {inregistreaza; } while (flag)). L-am configurat in mod normal (top 0xff) prescaler 1024, nu am reusit sa imi dau seama de ce nu a functionat. Asa ca pentru DEMO ul proiectului, sunetul este inregistrat o perioada fixa de timp in loc sa fie inregistrat la detectie de sunet. LED-ul se aprinde verde cat timp inregistreaza, rosu cat timp reda sunet.
Din pacate, sunetul se aude extrem de prost din cauza background-noise ului pe care nu am reusit sa il elimin, pentru ca aveam nevoie de un ADC performant. Asa ca o sa fie un papagal ragusit :))
Debugging: cu LED ul :) (functiile led_red(), led_green(), led_blue())
Software-ul este implementat in proportie de 90%.
Ca o prima concluzie, nu poti stii PM fara sa stii electronica (si analogica si digitala). In ceea ce priveste programarea embedded am observat ca partile dificile constau in a invata cum se folosesc piesele si deviceurile de care ai nevoie si in procesul de DEBUGGING care este extrem de anevoios, problema poate fi de oriunde. Din punctul meu de vedere, proiectul este “aproape” un succes :).
Implementarea proiectului (software + schema electrica) se gaseste aici:
<WRAP round download 15%> talking_parrot.zip </WRAP>
Dificultati intampinate: