Bem após vários testes, penso que já cheguei à solução pretendida.
Só tenho que agradecer a todos os que me ajudaram ou tentaram...
Deixo aqui o que fiz:
Primeiro de tudo fiz este circuito disponibilizado pela maxbotix para filtrar o ruído:
Segundo, liguei-os todos desta forma:
Depois fiz um quadrado de paredes de modo a ver se todos interferiam uns com os outros, e pelos vistos não, estão a dar valores consistentes.
Agora a programação vai passar por filtros de average e etc.
Deixo aqui o código de teste para os sensores:
/**
*
*@Andre Carvalho
*
**/
const int sonarPinAN0 = 0;//AnLeft
const int sonarPinAN1 = 1;//AnFront
const int sonarPinAN2 = 2;//AnRight
const int sonarPinRx = 28;//TriggerPin
//variables needed to store values
long inches, cm;
void setup() {
Serial.begin(9600);
pinMode(sonarPinAN0, INPUT);
pinMode(sonarPinAN1, INPUT);
pinMode(sonarPinAN2, INPUT);
pinMode(sonarPinRx, OUTPUT);
//give the sensors time to boot up
delay(250);
}
void loop() {
digitalWrite(sonarPinRx, HIGH);
delayMicroseconds(30);
digitalWrite(sonarPinRx, LOW);
delay(50);
inches = readSonarAnalogPortChain(sonarPinAN0);
cm = inches * 2.54;
Serial.println();
Serial.print("Analog port chain mode (AnLeft) reading: ");
Serial.print(cm/2);
Serial.print("cm");
Serial.println();
inches = readSonarAnalogPortChain(sonarPinAN1);
cm = inches * 2.54;
Serial.println();
Serial.print("Analog port chain mode (AnFront) reading: ");
Serial.print(cm/2);
Serial.print("cm");
Serial.println();
inches = readSonarAnalogPortChain(sonarPinAN2);
cm = inches * 2.54;
Serial.println();
Serial.print("Analog port chain mode (AnRight) reading: ");
Serial.print(cm/2);
Serial.print("cm");
Serial.println();
delay(1000);
}
int readSonarAnalogPortChain(int pin) {
long d;
// see: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1288290319
//Used to read in the analog voltage output that is being sent by the MaxSonar device.
//Scale factor is (Vcc/512) per inch. A 5V supply yields ~9.8mV/in
//Objects between 0 and 15 cm range as 15 cm
digitalWrite(sonarPinRx,HIGH);
delayMicroseconds(50); // minimum pulse recommended is 20 microseconds
digitalWrite(sonarPinRx,LOW);
d = analogRead(pin); // range: 0...1023 10bit ADC
// delay(50); //minimum delay for the next measure is 50 ms
return d;
}
Já agora testei os motores (são os da polulu micro-metal 30:1), com e sem o condensador de 100nF e a diferença é grande, pois os motores desligados não há problema nenhum, mas no momento em que os ligo, os sonares disparam os valores durante uns 2~5s. Portanto adicionei uns condensadores de 100nf (cerâmicos 104).