This shows you the differences between two versions of the page.
pm:prj2024:iotelea:robert.stoica2205 [2024/05/17 21:25] robert.stoica2205 |
pm:prj2024:iotelea:robert.stoica2205 [2024/05/26 15:49] (current) robert.stoica2205 [Final Product] |
||
---|---|---|---|
Line 28: | Line 28: | ||
Pentru cazul particular in care $\alpha = \pi / 2$, distanta parcursa de unda sonora va fi chiar $d$. | Pentru cazul particular in care $\alpha = \pi / 2$, distanta parcursa de unda sonora va fi chiar $d$. | ||
+ | |||
+ | Deoarece este complicat sa determinam exact momentul in care semnalul sonor este receptionat, o alta abordare ar fi sa asteptam un timp fix pentru a se stabiliza semnalul, dupa care sa retinem valoarea timerului la primul front crescator. Facand masuratoarea in ambele directii, putem afla diferenta de timp daca aceasta se incadreaza intr-o perioada a semnalului sonor. Prin aceasta simplificare a problemei, dispozitivul este limitat la o viteza maxima de aproximativ 13.5 m/s. | ||
+ | |||
+ | Pentru calcului acestei viteze, putem spune ca: | ||
+ | |||
+ | $\Delta t = d \left( \frac{1}{c - v} - \frac{1}{c + v} \right)$ deci vom ajunge la: | ||
+ | |||
+ | $v^2 + \frac{2 \cdot v \cdot d}{\Delta t} - c^2 = 0$ si putem considera $v^2 << \frac{2 \cdot v \cdot d}{\Delta t}$ ajungand la: | ||
+ | |||
+ | $v \approx \frac{c^2 \cdot \Delta t}{2 \cdot d}$ | ||
+ | |||
+ | pentru $\Delta t = 25 us$, $d = 11 cm$ si $c = 344 m/s$, viteza maxima va fi $v = 13.44 m/s$ | ||
==== Descriere Generala ==== | ==== Descriere Generala ==== | ||
Line 86: | Line 98: | ||
{{pm:prj2024:iotelea:PCB_nou.jpeg?600}} | {{pm:prj2024:iotelea:PCB_nou.jpeg?600}} | ||
- | Procesul de lipire a fost unul simplu si rapid deoarece am utilizat flux si un stencil pentru a distribui pasta pe pad-uri. Componentele au fost asezate cu penseta dupa care placuta a fost pusa pe plita. Conectorii au fost lipiti separat. | + | Procesul de lipire a fost unul simplu si rapid deoarece am utilizat solder paste si un stencil pentru a distribui pasta pe pad-uri. Componentele au fost asezate cu penseta dupa care placuta a fost pusa pe plita. Conectorii au fost lipiti separat. |
- | Cand a fost testata placuta, am observat ca microcontrollerul se reseta continuu din cauza unei conexiuni gresite. Asa cum se poate observa si in schenam de mai sus a amplificatorului operational, acesta a fost alimentat invers. Pentru a rezolva aceasta greseala a fost necesara taierea traseelor de Vcc si GND, tragand 2 fire pentru a corecta eroarea. | + | Cand a fost testata placuta, am observat ca microcontrollerul se reseta continuu din cauza unei conexiuni gresite. Asa cum se poate observa si in schenam de mai sus a amplificatorului operational, acesta a fost alimentat invers. Pentru a rezolva aceasta problema a fost necesara taierea traseelor de Vcc si GND, tragand 2 fire pentru a corecta eroarea. |
==== Software Design ==== | ==== Software Design ==== | ||
---- | ---- | ||
Line 102: | Line 114: | ||
== Generarea Semnalului Sonor == | == Generarea Semnalului Sonor == | ||
- | In continuare, timerul 4 va fi utilizat pentru a genera semnalul de PWM pe pinul PB6. Acest PWM va servi ca semnal sonor, avand o frecventa de 40kHZ. Pentru a obtine aceasta frecventa, timerul are ca sursa de ceas clock-ul intern al microcontrollerului (care ruleaza la o frecventa de 170MHZ), un prescaler de 0 si o perioada de 4250, avand un duty cycle de 50%. Pentru a genera un numar de 5 pulsuri, o intrerupere va avea loc de fiecare data cand timerul atinge valoarea 4250. In aceasta intrerupere va fi incrementat un contor. Cand contorul atinge valoarea 5, duty cycle-ul va fi pus pe 0%, oprind astfel transmisia. | + | In continuare, timerul 4 va fi utilizat pentru a genera semnalul de PWM pe pinul PB6. Acest PWM va servi ca semnal sonor, avand o frecventa de 40kHZ. Pentru a obtine aceasta frecventa, timerul are ca sursa de ceas clock-ul intern al microcontrollerului (care ruleaza la o frecventa de 170MHZ), un prescaler de 0 si o perioada de 4250, avand un duty cycle de 50%. Pentru a genera un numar de 20 pulsuri, o intrerupere va avea loc de fiecare data cand timerul atinge valoarea 4250. In aceasta intrerupere va fi incrementat un contor. Cand contorul atinge valoarea 20, duty cycle-ul va fi pus pe 0%, oprind astfel transmisia. |
== Masurarea Timpului Transmisie-Receptie == | == Masurarea Timpului Transmisie-Receptie == | ||
Line 120: | Line 132: | ||
Semnalul mov este PWM-ul generat de microcontroler si amplificat inainte de transmisie. Semnalul galben este cel receptionat. Acesta este un semnal sinusoidal analogic care a fost trecut prin 2 amplificaoare operationale, rezultand un semnal digital. Se poate observa ca acesta creste treptat, si nu este constant la inceput, avand nevoie de o perioada pentru a se stabiliza. | Semnalul mov este PWM-ul generat de microcontroler si amplificat inainte de transmisie. Semnalul galben este cel receptionat. Acesta este un semnal sinusoidal analogic care a fost trecut prin 2 amplificaoare operationale, rezultand un semnal digital. Se poate observa ca acesta creste treptat, si nu este constant la inceput, avand nevoie de o perioada pentru a se stabiliza. | ||
+ | |||
+ | |||
+ | ==== Final Product ==== | ||
+ | ---- | ||
+ | |||
+ | === Suport === | ||
+ | |||
+ | Suportul pentru senzori a fost realizat din brate subtiri si inalte de lemn, pentru a nu modifica foarte mult vantul care trece printre acestea. Distanta dintre senzori este de 11cm. | ||
+ | |||
+ | {{pm:prj2024:iotelea:anemometru_final.jpeg?600}} | ||
+ | |||
+ | === Aplicatie === | ||
+ | Pentru a prelucra datele obtinute de la timer, am realizat o aplicatie in Python care are rolul de a interpreta valoarie si a le afisa. | ||
+ | |||
+ | Graficul este unul pe 2 axe, reprezentand viteza atat pe OX cat si pe OY. Acesta consta intr-un vector a carui lungime si orientare se schimba in functie de viteza vantului si directia din care bate acesta. Aplicatia citeste de la USB valorile timerului si calculeaza viteza, stocand valorile intr-un buffer de 100 de elemente. Pentru reprezentarea pe grafic am ales sa fac media acestor 100 de elemente pentru a obtine o eroare cat mai mica, fiind nevoie de o modificare vizibila pe termen lung pentru a se actualiza graficul. | ||
+ | |||
+ | |||
+ | === Calibrare === | ||
+ | Pentru procesul de calibrare am folosit un anemometru real si am masurat cu el viteza vantului generat de feonul meu pentru 2 trepte de viteza: | ||
+ | |||
+ | {{pm:prj2024:iotelea:anem2.jpeg?600}} | ||
+ | |||
+ | {{pm:prj2024:iotelea:anem1.jpeg?600}} | ||
+ | |||
+ | Dupa teste repetate am observat ca viteza inregistrata de anemometru tinde sa fie de 1.3 ori mai mare decat cea inregistrata de dispozitivul meu. Modificand valorilor calculate, rezultatele obtinute tind sa fie foarte apropiate de cele reale. | ||
+ | |||
+ | Un videoclip demonstrativ poate fi vazut [[https://drive.google.com/file/d/1mQSsCN8R6oDgNeSaw6AFfXIIetQnqaTP/view?|aici]]. | ||
+ | |||
+ | ==== Concluzii ==== | ||
+ | ---- | ||
+ | |||
+ | In concluzie, aparatul s-a dovedit a fi un succes, fiind capabil sa inregistreze cu acuratete ridicata viteze de pana la aproximativ 13.5 m/s. Planuiesc ca acesta sa fie imbunatatit pe viitor, folosind o modulatie in frecventa pentru a determina exact momentul receptionarii semnalului. In acest fel, nu am mai fi limitati la o singura perioada de 25us, putand masura cu precizie viteze mult mai mari. | ||
+ | |||
+ | |||
+ | ==== Resurse ==== | ||
+ | ---- | ||
+ | |||
+ | [[https://github.com/majianjia/QingStation/blob/main/doc/anemometer.md|Anemometer1]] | ||
+ | |||
+ | [[https://www.dl1glh.de/ultrasonic-anemometer.html#advancement|Anemometer2]] | ||
+ | |||
+ | [[https://www.st.com/en/microcontrollers-microprocessors/stm32g431kb.html|STM32]] | ||
+ | |||
+ | |||