Go Down

Topic: problema con sensore hc sr04 (Read 1 time) 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

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

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