Salve a tutti,
sono un laureando in Design, stò preparando la mia tesi su un progetto che integra Arduino. Premetto che per me è un campo nuovo sia Arduino che l'elettronica. Ho cercato di imparare il più possibile in questi pochi giorni.
Come da titolo mi chiedo se sia possibile collegare più di un sensore ultrasuoni SR04 ad Arduino Uno. Ho cercato in giro ma non ho trovato nulla. Sono riuscito a rilevare la distanza con un sensore, poi ho cercato di modificare il codice aggiungendo i vari pin, ma alla fine nel monitor seriale mi confonde i dati rilevati! Non mi risultano 2 distanze differenziate, ma fa confusione, prima rileva una distanza e poi quella dell'altro sensore!
Qualcuno sà aiutarmi? Vi allego il codice, così potete controllare se ho sbagliato a modificarlo, dato che sono le prime volte che uso arduino. Grazie.
// setup variabili primo sensore
const int numOfReadingsA = 10; // numero di letture su cui fare la media
int readingsA[numOfReadingsA]; // creo un array apposito per conservare le letture
int arrayIndexA = 0; // inizializzo l'indice dell'array corrente
int totalA = 0; // conterrà il totale cumulativo
int averageDistanceA = 0; // conterrà la media calcolata
// setup variabili secondo sensore
const int numOfReadingsB = 10; // numero di letture su cui fare la media
int readingsB[numOfReadingsB]; // creo un array apposito per conservare le letture
int arrayIndexB = 0; // inizializzo l'indice dell'array corrente
int totalB = 0; // conterrà il totale cumulativo
int averageDistanceB = 0;
// setup dei pins
int echoPinA= 2; // SRF05 echo su pin (digital 2)
int initPinA= 3; // SRF05 trigger su pin (digital 3)
int echoPinB = 10; // SRF05 echo su pin (digital 10)
int initPinB= 9; // SRF05 trigger su pin (digital 9)
// Calcolo distanza sensore A
unsigned long pulseTimeA = 0; // conterrà il tempo intercorso in us
unsigned long distanceA = 0; // conterrà la distanza (in cm)
// Calcolo distanza sensore A
unsigned long pulseTimeB = 0; // conterrà il tempo intercorso in us
unsigned long distanceB = 0; // conterrà la distanza (in cm)
void setup() {
pinMode(initPinA, OUTPUT); // sett il pin 3 come output
pinMode(echoPinA, INPUT); // setto il pin 2 come input per l'eco
pinMode(initPinB, OUTPUT); // sett il pin 9 come output
pinMode(echoPinB, INPUT); // setto il pin 10 come input per l'eco
// creiamo la struttura che serve a riempire l'array A
for (int thisReading = 0; thisReading < numOfReadingsA; thisReading++) {
readingsA[thisReading] = 0;
}
// creiamo la struttura che serve a riempire l'array B
for (int thisReading = 0; thisReading < numOfReadingsB; thisReading++) {
readingsB[thisReading] = 0;
}
// Inizializziamo la porta seriale che ci mostrerà le letture
Serial.begin(9600);
}
// Programma primo sensore
void loop() {
digitalWrite(initPinA, HIGH); // manda un impulso di 10 microsecondi
delayMicroseconds(10); // attende 10 microsecondi prima di andare a low
digitalWrite(initPinA, LOW); // Piedino low, stop impulso
pulseTimeA = pulseIn(echoPinA, HIGH); // Attendi in ascolto l'impulso di rimbalso e cattura il tempo impiegato
distanceA = pulseTimeA/58; // Distance = pulse time / 58 to convert to cm.
totalA= totalA - readingsA[arrayIndexA]; // applichiamo la formula
readingsA[arrayIndexA] = distanceA; // aggiungiamo la lettura all array
totalA= totalA + readingsA[arrayIndexA]; // aggiungiamo la lettura al totale
arrayIndexA = arrayIndexA + 1; // posizioniamoci sul prossimo elemento dell'array
// alla fine dell' array (10 oggetti) inizia da capo
if (arrayIndexA >= numOfReadingsA) {
arrayIndexA = 0;
}
// Programma secondo sensore
digitalWrite(initPinB, HIGH); // manda un impulso di 10 microsecondi
delayMicroseconds(10); // attende 10 microsecondi prima di andare a low
digitalWrite(initPinB, LOW); // Piedino low, stop impulso
pulseTimeB = pulseIn(echoPinB, HIGH); // Attendi in ascolto l'impulso di rimbalso e cattura il tempo impiegato
distanceB = pulseTimeB/58; // Distance = pulse time / 58 to convert to cm.
totalB= totalB - readingsB[arrayIndexB]; // applichiamo la formula
readingsB[arrayIndexB] = distanceB; // aggiungiamo la lettura all array
totalB= totalB + readingsB[arrayIndexB]; // aggiungiamo la lettura al totale
arrayIndexB = arrayIndexB + 1; // posizioniamoci sul prossimo elemento dell'array
// alla fine dell' array (10 oggetti) inizia da capo
if (arrayIndexB >= numOfReadingsB) {
arrayIndexB = 0;
}
averageDistanceA = totalA / numOfReadingsA; // fai la media delle distanze A
averageDistanceB = totalB / numOfReadingsB; // fai la media delle distanze B
Serial.println(averageDistanceA, DEC); // stampiamo sul serial monitor il valore letto
Serial.println(averageDistanceB, DEC); // stampiamo sul serial monitor il valore letto
delay(100); // attesa di 100 milli prima del prossimo loop
}