Go Down

Topic: problema con sensore hc sr04 (Read 2081 times) previous topic - next topic

mmauror

Buongiorno scusate ma mi servirebbe un aiuto col sensore hc-sr04 sull'arduino, perchè l'arduino mi rileva sempre di 2 o 3 microsecondi il segnale di echo e quindi mi da 0 cm ho usato vari programmi per testarlo da vari siti e il risultato è sempre lo stesso..potreste aiutarmi per favore?                                                                                               
Collego il vcc al 5 volt dell arduino gnd a gnd , il trigger al pin 7 e l'echo al pin 8.
Il codice l'ho preso da qui ma ne ho provati anche molti altri
http://barcadero.wordpress.com/2012/02/14/sensore-a-ultrasuoni-hc-sr04-e-arduino/

lupo95

prova ad usare la libreria newPing e utilizzare l'esempio che mette a disposizione (newPing example)
purtroppo non mi ricordo più dove l'avevo scaricata quindi devi cercarla :)

sciorty


lupo95

a prima vista però la libreria newPing mi sembra più semplice da capire :) quindi da una persona non molto esperta ( come me :)) è più semplice capirne il funzionamento   :)

leonardopergola

anche io ho avuto problemi con il codice di quel sito ( se vedi sul sito c'è un mio commento che accusa gli stessi problemi) e ho risolto , grazie all' aiuto di valvale97  http://arduino.cc/forum/index.php/topic,97980.msg734888.html#msg734888  ,aggiungendo un
Code: [Select]
delayMicroseconds (1); nella riga 17 tra
Code: [Select]
digitalWrite (trig,LOW); e
Code: [Select]
digitalWrite (trig,HIGH).
se non funziona neanche questo prova a usare questo sketch
Quote

#define echo 13
#define trig 12

void setup ()
{pinMode (echo,INPUT );
pinMode (trig,OUTPUT );
Serial.begin(9600) ;}

void loop ()
{digitalWrite (trig,LOW);
 delayMicroseconds (1);
 digitalWrite (trig,HIGH);
 delayMicroseconds (1);
 digitalWrite (trig,LOW);
 long time= pulseIn (echo,HIGH);
 long distance=time/58;
 Serial.print(distance);
 Serial.print(" cm ");
 
 delay (500);}

pergi.eu ( il mio blog su arduino)

mmauror

grazie per i consigli...ho provato a usare sia la libreria NewPing, la ultrasonic e i codici sopra ma il risultato è sempre lo stesso: mi restituisce sempre 0 cm...

è normale che il led RX sia sempre spento durante la comunicazione con il sensore?

PaoloP

#6
Feb 19, 2013, 12:41 pm Last Edit: Feb 19, 2013, 12:43 pm by PaoloP Reason: 1
Il delay è troppo basso
Code: [Select]
delayMicroseconds(1);

metti
Code: [Select]
delayMicroseconds(10);

Controlla inoltre che non ci siano oggetti vicino ai sensori o che non siano poggiati sul tavolo.

Brunello

Quote
#define echo 13
#define trig 12


ma questi valori li cambi , visto che hai detto di averlo collegato sul 7 e 8
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo" (J.S. S. architetto napoletano)

mmauror

ho provato a cambiare il delay diverse volte...anche nella combinazione che dici tu...ho rivolto anche il sensore verso il soffitto per evitare che ci fossero oggetti vicini tipo la breadboard...ma il risultato è sempre 0 cm e come durata dell'echo 2/3 microsecondi...

sisi ho provato anche a cambiare i pin ovviamente anche nel programma

Brunello

http://barcadero.wordpress.com/2012/02/14/sensore-a-ultrasuoni-hc-sr04-e-arduino/

comunque lo sketch del link iniziale che avevi postato, funziona perfettamente.

Quindi o c'e' un erroe nei collegamenti o c'e' un problema con il sensore
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo" (J.S. S. architetto napoletano)

mmauror

credo che a sto punto il sensore sia rotto...probabilemente durante la spedizione...perchè non credo di aver sbagliato i collegamenti:ho seguito quelli nella figura del link che ho messo nel primo commento cambiando soli i piedi dell'eco e/o del trig...

zoomx

#11
Feb 27, 2013, 01:06 pm Last Edit: Feb 27, 2013, 03:24 pm by leo72 Reason: 1
Nel codice linkato da brunello prova ad aggiungere
delayMicroseconds( 10 );
nella linea 17, nel passaggio da LOW ad HIGH per intenderci.

La sequenza dovrebbe essere
Code: [Select]
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );
delayMicroseconds( 10 );      //<---------------------------------------Ritardo aggiunto!
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy