Table of Contents

Anemometru

Autor: Stoica Robert-Valentin

Grupa: 333CD

Introducere


Anemometrul este un aparat care masoara viteza vantului. Desi exista mai multe metode prin care aceasta masuratoare poate fi facuta, am ales sa folosesc senzori ultrasonici deoarece sunetul este o unda mecanica. Prin natura sa, sunetul are nevoie de un mediu de propagare, acesta influentand atat viteza cat si amplitudinea/frecventa undei sonore. Pornind de la aceasta idee, putem deduce usor faptul ca viteza sunetului depinde de viteza aerului ce poarta unda sonora, si deci, viteza vantului va avea un impact direct asupra timpului dintre o transmise si o receptie a unui semnal.

In imaginea de mai sus, distanta parcursa de sunet va fi: $\frac{d}{\sin(\alpha)}$, iar viteza de propagare pe directia transmitator-receptor va fi $c + v \cos(\alpha)$, unde:

In concluzie, timpul intre o transmisie si o receptie va fi:

$t\_forward = \frac{d}{\sin(\alpha) (c + v \cos(\alpha))}$ sau

$t\_back = \frac{d}{\sin(\alpha) (c - v \cos(\alpha))}$, daca interschimbam transmitatorul cu receptorul.

Din aceste 2 relatii rezulta:

$v = \frac{d}{2 \sin(\alpha) \cos(\alpha)} (\frac{1}{t\_forward} - \frac{1}{t\_back})$

$c = \frac{d}{2 \sin(\alpha)} (\frac{1}{t\_forward} + \frac{1}{t\_back})$

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


Senzorii ultrasonici functioneaza la o frecventa fixa, fiind nevoie sa generam un PWM de 40kHZ care va servi ca intrare pentru transmitatorul nostru. Deoarece PWM-ul generat este intre 0 si 3V3 iar senzorii au nevoie de o amplitudine a semnalului mai mare, vom folosi drivere de amplificare inainte ca semnalul sa fie transmis.

Odata receptionat, semnalul sonor va fi amplificat cu ajutorul unor AO-uri si legat la ADC-ul microcontrollerului.

Cei 4 senzori vor fi grupati in perechi de cate 2, comunicand pe directii perpendiculare pentru a putea masura viteza pe ambele axe. Pentru a selecta in acelasi timp un transmitator si un receptor, am folosit un multiplexor.

Hardware Design


Schematic

Speakers & Transducers 400PT16M

Acest sistem de diode si rezistente permite folosirea senzorului atat ca transmitator cat si ca receptor, conectand pe rand la GND unul din cei 2 pini ai sai.

Interface IC Multichannel RS-232 MAX3222ECDWR

Datorita condensatoarelor din partea stanga, aceste componente actioneaza ca niste amplificatoare de semnal, marind amplitudinea PWM-ului generat de microcontroller.

Switch ICs Dual 4-Ch SN74LV4052ADR

Multiplexorul joaca un rol esential in functionarea circuitului deoarece el selecteaza pe rand perechile de transmisie-receptie prin intermediul intrarilor A si B.

Operational Amplifiers MCP6487-E/SN

Dupa ce semnlul sonor a fost primit, acesta va fi amplificat pentru a putea fi interpretat de microcontroller.

Nucleo G431KB

Rolul microcontrollerului este acela de a genera semnalul PWM, de a citi raspunsul analogic primit si de a contoriza timpul scurs intre transmisie si receptie. In plus, acesta serveste ca sursa de tensiune si intrare de EN pentru o parte din componente, el fiind responsabil si de selectarea intrarilor multiplexorului.

PCB


Design

Pentru simplitate si eficienta sporita, pe spatele placutei este planul de masa, componentele fiind plasate doar pe partea de top. Pozitionarea componentelor a fost facuta astfel incat sa minimizeze numarul de via-uri, realizand legaturi cat mai scurte si predominant pe partea de top. In ceea ce priveste microcontrollerul, acesta va fi asezat pe conectori pentru a simplifica procesul de debugging. Planul de masa este distribuit uniform, fara a fi sectionat excesiv de traseele de pe bottom, asigurand fiecarei componente o zona suficient de mare pentru descarcare.

Latimea traseelor este de 0.2mm, exceptie facand cele de alimentare care au 0.5mm. Dimensiunile placutei sunt de 70x65mm.

Soldering

pcb_nou.jpeg

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 problema a fost necesara taierea traseelor de Vcc si GND, tragand 2 fire pentru a corecta eroarea.

Software Design


Descrierea Functionala

GPIO

Primul pas este acela de a alege o pereche transmitator-receptor cu ajutorul intrarilor A si B ale multiplexoruiui. Acestea sunt conectate la 2 pini de GPIO ai microcnotrollerului (PB7 si PA11). Pentru partea de selectie, vom utiliza urmatorul tabel din datasheet-ul multiplexorului:

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 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

Timerul 2 este pornit inainte de generarea semnalului sonor pentru a masura timpul dintre transmisie si recepie. Dupa o perioada fixa de timp bine aleasa, timerul va genera o intrerupere marcand faptul ca semnalul receptionat este stabil si gata de citire. Din acest moment se poate face input capture pentru a determina timpul. Deoarece masuratoarea va fi facuta in ambele sensuri, viteza vantului poate fi determinata prin diferenta celor 2 valori de timp. Avand ambele acelasi timp de asteptare, diferenta maxima ce poate fi inregistrata este de o perioada a semnalului generat (25us), acest lucru limitand valoarea maxima ce poate fi masurata de aparat. Pentru o acuratete ridicata, valoarea timerului este salvata pe parcursul mai multor fronturi succesive, ca apoi sa fie facuta o medie ce va reprezenta durata de timp intre transmisie si receptie.

Intregul proces se repeta, utilizand alte perechi de senzori pentru a masura timpul pe ambele axe si in ambele directii.

Testare

Pentru etapa de testare am folosit doar 2 senzori (transmitator receptor) si am incercat sa micsorez cat mai mult erorile de timp generate la masuratori succesive in lipsa vantului.

testare.jpeg

Atat semnalul transmis cat si cel primit au fost afisate oe osciloscop.

osciloscop.jpeg

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.

anemometru_final.jpeg

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:

anem2.jpeg

anem1.jpeg

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 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


Anemometer1

Anemometer2

STM32