Go Down

Topic: Varios sensores HC-SR04 con un único Trigger (Read 483 times) previous topic - next topic

montotox

Hola! Saludos desde Mendoza, Argentina.
Les comento un poco mi inquietud: Estoy desarrollando un sistema para detectar presencia de objetos grandes, y necesito sacar el mejor provecho a Arduino Uno para trabajar con 5 sensores HC-SR04, 5 salidas para controlar unos relés y por ultimo dejar dos pines libres (pensaba el 0 Rx y 1 Tx) para comunicar a través de RS485 con un arduino maestro.
Por ahora estoy intentando sólo con 2 sensores y no logro tener bien las lecturas. Uno me da bien la distancia y el segundo queda en 0.
He leido en el foro aplicaciones con NewPing y tampoco lo logro hacer funcionar.
Dejo el código simple, para que vean si tengo algo mal.
Muchas gracias
Code: [Select]

#include <Wire.h>             // Agrego librería I2C
#include <LiquidCrystal.h>    // Agrego librería del LCD
#define trigPin 7             // Defino al puerto 7 como "trigPin2" del sensor
#define echoPin 8             // Defino al puerto 8 como "echoPin2" del sensor
#define echoPin2 9            // Defino al puerto 9 como "echoPin2" del sensor

long distancia;               // Declaro que "distancia" va a ser variable entera (32 bits)
long distancia2;              // Declaro que "distancia2" va a ser variable entera (32 bits)
long tiempo;                  // Declaro que "tiempo" va a ser variable entera (32 bits)
long tiempo2;                 // Declaro que "tiempo2" va a ser variable entera (32 bits)

void setup() {
 Serial.begin (9600);         // Abro el puerto serie y seteo velocidad de comunicación a 9600 baudios
 pinMode (trigPin, OUTPUT);   // Defino "trigPin2" como Salida
 pinMode (echoPin, INPUT);    // Defino "echoPin" como Entrada
 pinMode (echoPin2, INPUT);   // Defino "echoPin2" como Entrada
}

void loop() {
 digitalWrite (trigPin, LOW); // Es para estabilizar el sensor, coloco la salida en low
 delayMicroseconds (2);       // Delay de 2 micro segundos
 digitalWrite (trigPin, HIGH);// Envío pulso ultrasonido
 delayMicroseconds (10);      // Delay de 10 micro segundos

 tiempo=pulseIn (echoPin, HIGH);// Función para medir la longitud del pulso entrante desde que sale
 distancia2= int (0.017*tiempo);// Fórmula para calcular distancia obteniendo un valor entero
 
 tiempo2=pulseIn (echoPin2, HIGH);// Función para medir la longitud del pulso entrante desde que sale
 distancia2= int (0.017*tiempo2);// Fórmula para calcular distancia obteniendo un valor entero
 
 // COLOCACIÓN DE INFORMACIÓN EN PANTALLA
 Serial.print ("Distancia: "); // Coloco texto fijo
 Serial.print (distancia); // Coloco el valor obtenido del sensor
 Serial.println ("cm"); // Coloco texto fijo (con el pintln hay linea nueva luego)
 Serial.print ("Distancia2: "); // Coloco texto fijo
 Serial.print (distancia2); // Coloco el valor obtenido del sensor
 Serial.println ("cm"); // Coloco texto fijo (con el pintln hay linea nueva luego)
 delay (300); // Coloco un delay para que inicie el loop nuevamente
 
}

surbyte

Usá la librería NewPing
En arduino antes de hacer algo debes buscar si existe librería que te resuelva el 95% del trabajo.
En tu caso esta librería tiene un ejemplo con 15 sensores.. o sea.. 95% hecho.

montotox

Ok Shannon, voy a estudiar mejor la librería. Muchas gracias

surbyte

Quien es Shannon?
La librería es la mas utilizada con ese sensor. Solo úsala y prueba sus ejemplos individuales y verás que es muy simple de usar.

Go Up