PKP98 Posted April 28, 2017 Share Posted April 28, 2017 Salut! Astazi m-am jucat cu un modul sr04 si cu un atmega16 .Am scris acest cod : #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include "Lcd_2x16_164.h" #define triger PINA1 #define echo PINA0 int main(void) { DDRA|=1<<triger; DDRA&=~(1<<echo); PORTA&=~(1<<triger); init_lcd(); uint16_t pulse() { uint16_t result; PORTA|=1<<triger; _delay_us(15); PORTA&=~(1<<triger); while ((PINA & (1<<echo))==0); TCCR1A=0X00; TCCR1B=(1<<CS10); TCNT1=0; while ((PINA & (1<<echo))==1); result=TCNT1; return result; } setcursor(0,0); sendmessage(" HC-SR04 "); _delay_ms(1000); clearlcd(); int distance; while (1) { distance=pulse(); distance=distance/2; distance=distance*0.0355; setcursor(0,0); sendnumber(distance,10); sendmessage(" "); _delay_ms(500); } } Functioneaza perfect,am masurat distante de pana la 3m cu erori sub 1cm.Problema este ca am mai citit ceva pe net si am vazut ca altii luau in calcul si niste erori pe care le mai are acest modul SR04.Merita sa le iau in calcul? Astept orice ideie pentru imbunatatirea codului. Multumesc! Link to comment
one Posted May 5, 2017 Share Posted May 5, 2017 (edited) Am facut si eu cateva teste cu acest modul si masuratorile sunt surprinzator de bune, considerand pretul. Nu m-am documentat pe internet caci nu am avut nevoie de acest senzor pana acum, dar iti impartasesc opinia mea: In primul rand, sa tinem cont ca aceste module costa aproape nimic deci pentru constructia lor s-au facut niste compromisuri. Daca aceste module se vand la 1€ pe ebay, atunci costurile de productie trebuie sa fie la un sfert maxim. Probabil ca in microcontrollerul de pe placa este implementata o anumita calibrare caci cu dispersia valorilor componentelor pasive sigur modulele ar avea erori importante. Imbunatatirea acestui modul ar avea 2 variante: una ar fi software, masurand durata impulsului la distanta minima si apoi la distanta maxima si ajustarea formulei de calcul, alta ar fi hardware, cu un procesor mai precis in locul celui original. Parerea mea este ca precizia acestui modul nu se va imbunatati semnificativ caci metoda in sine este limitata - metoda sonarului. Eu am la serviciu un masurator cu laser care are o precizie de ordinul a 1mm pentru distante de pana la 50m, de la 5cm. Exista dispozitive de masura cu laser care detecteaza abateri de ordinul fractiunilor de micron. Candva am cumparat un aparat de masura asemanator cu ultasunete (caci costa mai putin) si am fost atat de dezamagit incat l-am dat imediat. Precizia acestuia din urma era in cm si nu mm, iar distanta maxima masurata era mult mai mica (vreo 15m, minim 50cm). Deci daca la 3m ai o eroare de 1cm, zic eu ca e bine, aceste module sunt pentru constructia de roboti care evita obstacole, unde nu este nevoie de precizie mare. Edited May 5, 2017 by one Link to comment
PKP98 Posted May 5, 2017 Author Share Posted May 5, 2017 Da,aveti dreptate,la constructia de roboti este parfum,am facut deja unul si sunt extrem de multumit de felul cum functioneaza. Multumesc mult! Link to comment
binox Posted May 8, 2017 Share Posted May 8, 2017 Ca sa se elimine erorile se mai pot face niste filtrari software de genul: se fac mai multe masuratori se elimina extremele si se face o medie din ce ramane. Totusi eu n-am reusit sa elimin in totalitate erorile. Din cand in cand dadeau declansari false, probabil de la ecouri cand se miscau obiecte in zona de lucru a senzorului. In aplicatia mea i-am inlocuit pana la urma cu senzori IR cu care am obtinut rezultate mai bune. (in aplicatia mea precizia nu e f importanta, mai mult ma intereseaza sa nu dea declansari false si sa fie silentiosi, cei cu ultrasunete ii puteam auzi noaptea...) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now