Sensore prossimità SRF05 non funziona?

Ciao ragazzi, ho attaccato il sensore SRF05 alla mia MEGA2560 come da immagine:

Ho usato questo codice:

int durata ;            // durata dell'impulso
int distanza;          // distanza dell'oggetto
int pin_segnale = 14;   // pin Arduino a cui è collegato l'SRF05
int boud_rate = 9600;
 
void setup()
{
  Serial.begin(boud_rate);
}
 
void loop()
{
  pinMode(pin_segnale, OUTPUT);
  digitalWrite(pin_segnale, LOW);
  delayMicroseconds(2);
  digitalWrite(pin_segnale, HIGH);
  delayMicroseconds(10);
  digitalWrite(pin_segnale, LOW);
  pinMode(pin_segnale, INPUT);
  durata = pulseIn(pin_segnale, HIGH);
  distanza = durata/58;
  Serial.println(distanza);
  delay(100);
}

Ma niente! Quando apro il monitor seriale ottengo sempre e comunque 0, 0, 0, 0…
Ho provato sulla porta digitale 21,22 poi 14 ma nulla cambia :
Che dite??

PS. MODE e GND gli ho attaccato ad entrambi un cavetto femmina che poi si unisce in un UNICO CAVO per finire sul GND dell’arduino

SRF05.jpg

Nella setup() non hai dichiarato i pin come OUTPUT

nid69ita: Nella setup() non hai dichiarato i pin come OUTPUT

Non deve mica farlo; lo fa nel loop(). @aldoz Il SRF ha 2 vole 5 contatti. Hai usati quelli giusti? http://www.robot-electronics.co.uk/htm/srf05tech.htm

Ciao Uwe

uwefed:

nid69ita:
Nella setup() non hai dichiarato i pin come OUTPUT

Non deve mica farlo; lo fa nel loop().

ooops, non l’avevo visto :blush: :smiley:

Il SRF ha 2 vole 5 contatti. Hai usati quelli giusti?

Non so se intendi “2 volte 5 contatti”… ma mi e’ arrivato con i pin gia’ pronti da utilizzare… MA…
… ho seguito talmente all cieca l’immagine che ho postato che non mi sono accorto che i pin del mio SRF05 sono diversi…

Guardate l’immagine allegata!

A questo punto mi fermo e aspetto vostre istruzioni! …ho come l’impressione che debba funzionare con 2 pin sull’arduino…

Hai ragione: il modulo in tuo possesso ha i pin speculari rispetto al modello normale!

Ma non solo, il pin OUT (di cui ignoro il significato) dovrebbe essere un ingresso MODE che se messo a massa consente l'utilizzo di un solo pin (TRIGGER) che funziona anche da input (ECHO),

La brutta notizia è che hai fornito tensione invertita ai pin di alimentazione.

cyberhs:
Hai ragione: il modulo in tuo possesso ha i pin speculari rispetto al modello normale!

La brutta notizia è che hai fornito tensione invertita ai pin di alimentazione.

Mmmm aspetta… che significa pin invertiti??? Io la VCC l’ho collegata ai 5v ARDUINO. Intendi forse che nel sensore dove c’e’ scritto VCC in realta’ e’ GND??? …
Ecco i collegamenti che ho provato (immagine allegata)

Ma ci sono possibilita’ di aver fatto danni al sensore o peggio ad Arduino?

Purtroppo sì, essendoci la possibilità di aver bruciato il PIC. Leggi il mio precedente intervento che ho editato per un aggiornamento.

cyberhs: Purtroppo sì, essendoci la possibilità di aver bruciato il PIC. Leggi il mio precedente intervento che ho editato per un aggiornamento.

Allora.. intanto grazie per l'aiuto!! ho immediatamente staccato il sensore e ho provato lo sketch BLINK (quello in cui il led arduino lampeggia) e funziona perfettamente... confermi che se avessi danneggiato il microcontrollore non funzionerebbe nemmeno questo sketch?

Poi, a questo punto credi che comunque il sensore si sia rotto? e sopratutto.. mi puoi dire qual'e' il corretto collegamento??

Arduino non è stato danneggiato.
Ho fatto una piccola indagine ed ho scoperto che il tuo HY-SRF05 è diverso dal canonico SRF05 non solo per la piedinatura ma anche per la precisione migliore che arriva < 2 mm (in teoria!).
Ti allego uno stringato datasheet del tuo sensore.
In pratica, devi collegare TRIGGER ad una uscita ed ECHO ad un ingresso (non è possibile avere un unico pin con questo modello) ed ovviamente GND e +5V.
L’uscita OUT serve a segnalare se un oggetto entra nel range del sensore (tipo antifurto): se misuri qualcosa su questo pin è possibile che il modulo non sia danneggiato.

HY-SRF05.pdf (436 KB)

cyberhs:
Arduino non è stato danneggiato.
Ho fatto una piccola indagine ed ho scoperto che il tuo HY-SRF05 è diverso dal canonico SRF05 non solo per la piedinatura ma anche per la precisione migliore che arriva < 2 mm (in teoria!).
Ti allego uno stringato datasheet del tuo sensore.
In pratica, devi collegare TRIGGER ad una uscita ed ECHO ad un ingresso (non è possibile avere un unico pin con questo modello) ed ovviamente GND e +5V.
L’uscita OUT serve a segnalare se un oggetto entra nel range del sensore (tipo antifurto): se misuri qualcosa su questo pin è possibile che il modulo non sia danneggiato.

Pfff per fortuna l’arduino e’ ok e grazie per il datasheet!

Allora, il TRIGGER ad una uscita e l’ECHO ad un ingresso…
Quindi:

TRIGGER ---------> PIN DIGITAL 22
ECHO ------------> PIN ANALOG IN (ad’esempio ANALOG IN A7)

Corretto?

No, l'ingresso è di tipo digitale.

Non devi misurare una tensione, ma la durata dell'impulso ECHO di ritorno.

Ci non molti esempi a riguardo. www.f15ijp.com/2012/09/arduino-ultrasonic-sensor-hc-sr04-or-hy-srf05/

okok, allora dimmi, per favore, se cosi' e' corretto:

TRIGGER ---------> PIN DIGITAL 22 (utilizzata da codice come OUTPUT) ECHO ------------> PIN DIGITAL 23 (utilizzata da codice come INPUT)

Che e' il collegamento 3 dell'immagine che ho allegato! E purtroppo mi restituisce sempre zero, zero zero.. :(

aldoz: Che e' il collegamento 3 dell'immagine che ho allegato! E purtroppo mi restituisce sempre zero, zero zero.. :(

Si, ma mò con quale sketch ? Postalo.

nid69ita:

aldoz:
Che e’ il collegamento 3 dell’immagine che ho allegato! E purtroppo mi restituisce sempre zero, zero zero… :frowning:

Si, ma mò con quale sketch ? Postalo.

Ciao nid69ita, ecco lo sketch

/*
Tested with HY-SRF05, HC-SR04
Assuming a room temp of 20 degrees centigrade
The circuit:
	* VVC connection of the sensor attached to +5V
	* GND connection of the sensor attached to ground
	* TRIG connection of the sensor attached to digital pin 12
        * ECHO connection of the sensor attached to digital pin 13
*/
 
const int TRIG_PIN = 12;
const int ECHO_PIN = 13;
 
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
 
  pinMode(TRIG_PIN,OUTPUT);
  pinMode(ECHO_PIN,INPUT);
}
 
void loop()
{
   long duration, distanceCm, distanceIn;
 
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  duration = pulseIn(ECHO_PIN,HIGH);
 
  // convert the time into a distance
  distanceCm = duration / 29.1 / 2 ;
  distanceIn = duration / 74 / 2;
 
  if (distanceCm <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distanceIn);
    Serial.print("in, ");
    Serial.print(distanceCm);
    Serial.print("cm");
    Serial.println();
  }
  delay(1000);
}

Risultato out of range, out of range, out of range…

Prova ad aumentare un pò i tempi:

delayMicroseconds(2);  // prova con 10

nid69ita: Prova ad aumentare un pò i tempi:

delayMicroseconds(2);  // prova con 10

Sempre e solo out of range :(

ma che danni posso aver fatto? PS mi dite come potrei controllare,con il tester se il sensore viene alimentato e se comunica con Arduino?

Purtroppo credo che il PIC sia andato...

Come ultima cosa: ti sei ricordato nello sketch di inserire i pin giusti?

cyberhs: Purtroppo credo che il PIC sia andato...

Come ultima cosa: ti sei ricordato nello sketch di inserire i pin giusti?

Ma ti riferisci al PIC dell'Arduino o ti riferisci al sensore? Pensi che aver messo in ponte GND con OUT abbia bruciato qualcosa? Si i pin sono giusti :(

E con il tester posso verificare qualcosa?

Il PIC è la MCU che c'e' sul sensore, su Arduino la MCU è Atmel