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ì
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. . ?