multipli srf05

ciao a tutti, sto cercando di collegare 3 ultrasonic range finder srf05, ma due li legge e tre assieme no, la scheda è una 2009 168, se scambio le entrate funzionano, ma tre assieme niente. ?
mi chiedo se non possa essere un problema di alimemtazione, e in tal caso se posso alimentare gli srf con alimemtazione esterna, oppure usare un alimentatore su arduino che ora va con la usb, il codice è quello che si trova sul forum replicato per tre, infatti funziona separatamente. Spero di essermi spiegato, la mattina va un pò così :slight_smile:
Grazie.

Posta per favore il Tuo codice perché "replicato per tre" é un po molto generico.
Ciao Uwe

Ah ok ciao uwe, ora sono in auto prima di pranzo lo posto grazie!

Ecco il codice che ho caricato!

#define echoPin 4 // Pin to receive echo pulse
#define trigPin 5 // Pin to send trigger pulse
#define echoPin2 2 // Pin to receive echo pulse
#define trigPin2 3
#define echoPin3 8 // Pin to receive echo pulse
#define trigPin3 9
void setup()
{
Serial.begin(9600);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(trigPin3, OUTPUT);
}
/*

  • loop() - this function will start after setup
  • finishes and then repeat
    */
    void loop()
    {

digitalWrite(trigPin, LOW); // Set the trigger pin to low for 2uS
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // Send a 10uS high to trigger ranging
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // Send pin low again
int distance = pulseIn(echoPin, HIGH); // Read in times pulse
distance= distance/58;
Serial.write("a");
// Calculate distance from time of pulse
delay(100);
Serial.write(distance);
delay(100);

// Serial.write(ultrasoundlevel);
digitalWrite(trigPin2, LOW); // Set the trigger pin to low for 2uS
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH); // Send a 10uS high to trigger ranging
delayMicroseconds(10);
digitalWrite(trigPin2, LOW); // Send pin low again
int distance2 = pulseIn(echoPin2, HIGH); // Read in times pulse
distance2= distance2/58;
Serial.write("b");
// Calculate distance from time of pulse
delay(100);
Serial.write(distance2);
delay(100);

//terzo sensore
digitalWrite(trigPin3, LOW); // Set the trigger pin to low for 2uS
delayMicroseconds(2);
digitalWrite(trigPin3, HIGH); // Send a 10uS high to trigger ranging
delayMicroseconds(10);
digitalWrite(trigPin3, LOW); // Send pin low again
int distance3 = pulseIn(echoPin3, HIGH); // Read in times pulse
distance3= distance3/58;
Serial.write("c");
// Calculate distance from time of pulse
delay(100);
Serial.write(distance3);
delay(100);
}

Per la precisione devo dire che i sensori sono montati a 2-3- metri dalla scheda Arduino e quindi i cavi 5v ground echo e trig hanno ciascuno quella lunghezza, non so se anche questo possa essere un problema, ma come dicevo , con 2 sensori funziona ..

Per la serie tanto rumore per nulla...era solo una stagnatura che faceva un falso contatto,chiedo venia ..dunque si possono attaccare 3 srf05 a un arduino 2009 anche a 2 -3 metri di distanza e lo sketch funzionante è quello qui sopra ,a chi serve.
buone feste

Ciao puoi spiegarmi come hai fatto il collegamento?
Il sensore ricorda il proprio indirizzo dopo che gli stacco la corrente?

Grazie

gli srf05 hanno 4 cav , +5V, ground, trig, echo .
il collegamento è scritto all'inizio dello sketch :

sensore 1:
#define echoPin 4 // Pin to receive echo pulse
#define trigPin 5 // Pin to send trigger pulse
sensore2:
#define echoPin2 2 // Pin to receive echo pulse
#define trigPin2 3
sensore 3 :
#define echoPin3 8 // Pin to receive echo pulse
#define trigPin3 9

i tre +5V e i tre Ground al 5V e Ground di Arduino
i settaggi dei pin restano in memoria finchè non carichi altro ..

Ciao scusami se insisto, è il primo programma serio che faccio con arduino.
Ho questo programma:

#include <Wire.h>

#define srfAddress 0x70                           // Address of the SRF08
#define cmdByte 0x00                              // Command byte
#define rangeByte 0x02                            // Byte for start of ranging data

byte highByte = 0x00;                             // Stores high byte from ranging
byte lowByte = 0x00;                              // Stored low byte from ranging

void setup()
{
  Serial.begin(9600);                             // Begins serial port for LCD_03
  Wire.begin();                               
  delay(100);     
}

void loop()
{
 int rangeData = getRange();                     // Calls a function to get range
 Serial.println(rangeData);
 delay(100);
}

int getRange()
{                                                // This function gets a ranging from the SRF08
 int range = 0; 
  
 Wire.beginTransmission(srfAddress);             // Start communticating with SRF08
 Wire.send(cmdByte);                             // Send Command Byte
 Wire.send(0x51);                                // Send 0x51 to start a ranging
 Wire.endTransmission();
  
 delay(300);                                     // Wait for ranging to be complete
  
 Wire.beginTransmission(srfAddress);             // start communicating with SRFmodule
 Wire.send(rangeByte);                           // Call the register for start of ranging data
 Wire.endTransmission();
  
 Wire.requestFrom(srfAddress, 2);                // Request 2 bytes from SRF module
 while(Wire.available() < 2);                    // Wait for data to arrive
 highByte = Wire.receive();                      // Get high byte
 lowByte = Wire.receive();                       // Get low byte

 range = highByte*256 + lowByte;                 // Put them together
  
 return(range);                                  // Returns Range
}

Come modifico il programma per collegare due sensori?
Grazie

Mi è venuto un dubbio, hai collegato i sensori tramite i2c, vero?

Eh no, infatti il srf08 funzia via i2c e allora è diverso il discorso, io ho usato srf05 che fa un calcolo tra echo e trig, con i2c credo si debba dare 2 indirizzi diversi adogni sensore,ma non ho mai provato, se ho tempo nei proxe ci provo, oppure se qualche anima buona ha già la soluzione. . ?