Go Down

Topic: Lecturas de HC-SR04 en acceso vehicular erróneo. (Read 180 times) previous topic - next topic

isadan92

Buen día.

Tengo una consulta con ustedes, hace unos días un compañero me pidió de favor que si le podía armar un circuito para un acceso vehicular, consiste en detectar la presencia de un carro para que la pluma no baje cuando este algo debajo de ella,  los materiales que consistían en arduino uno, potenciometro 10k, modulo de relay arduino y el sensor ultrasonico HC-SR04. El potenciometro es el setpoint ajustable.

Arme el circuito en casa y funciona bien las lecturas del ultrasonico son consistentes, a veces marca 0 durante un tiempo muy breve aunque esta algo frente, el problema cuando lo instale en el área el sensor dejaba de funcionar adecuadamente, básicamente se quedaba en la ultima lectura que registraba y no cambiaba aunque ya no hubiera nada frente a el, o tomaba lecturas mal, ponía la mano frente al sensor y me indicaba distancias muy exageras o únicamente 0 y tampoco cambiaba, creo que el problema es el ruido exterior de los carros que circulan por el área, desde un principio me pareció que no era la mejor opción, en este momento ya se descarto usarlo y esta buscando otro tipo de sensor mas robusto pero me da curiosidad si hay alguna forma de evitar esto mediante código o electrónica.
El programa lo presento a continuación.

Code: [Select]

#include <NewPing.h>

#define TRIGGER_PIN  7  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     6  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

int setpoint, potentiometer, distance, uS = 0, interval = 100, delay_access = 2000;
boolean CarInTransit = 0;
byte relay = 2;
unsigned long timeShowing_data = 0, timeCar_inTransit = 0, timeData_acquisition=0 ;


void setup() {
  pinMode(relay, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  //Guardando los datos en las variables
  potentiometer = analogRead(A0);
  setpoint = map(potentiometer, 0, 1023, 4, 400);

  if (millis() - timeData_acquisition >= 100) {
    timeData_acquisition = millis();
    uS = sonar.ping_median();
    distance = sonar.convert_cm(uS);
  }


  if (distance > 2 && distance < setpoint) {
    CarInTransit = 1;
    timeCar_inTransit = millis();
  }

  if (distance <= 2 ) {
    if (millis() -  timeCar_inTransit >= delay_access) {
      CarInTransit = 0;
    }
  }

  if (CarInTransit == 1) {
    digitalWrite(relay, LOW);
  }
  else {
    digitalWrite(relay, HIGH);
  }

  if (millis() -  timeShowing_data >= 1000) {
     timeShowing_data=millis();
    Serial.print("Distancia: ");
    Serial.print(distance);
    Serial.println("cm");
    Serial.print("Setpoint: ");
    Serial.print(setpoint);
    Serial.println("cm");
  }
}


El valor de 2cm es arbitrario el carro nunca puede estar tan cercas de la torre de la pluma.

Estoy empezando en esto del arduino, soy de mantenimiento no se mucho pero no estoy en blanco, me interesa saber métodos para evitar este problema ya busque en internet y básicamente los ejemplos usan la misma librería o similares y otros usan la función pulseIn en pin echo para calcular la distancia, no se si podría solucionar el problema con algún tipo de filtro, mire videos donde implementar filtros en el programa en otros tipos de sensores.
También si ustedes en su experiencia que sensor recomendarían para el control de esta pluma. Antes tenían un sensor láser emisor receptor el problema es que como son dos carriles y detectaba el carril que no correspondía a la pluma y no quieren hacer obra en medio de los dos carriles.

De antemano gracias por su atención, cualquier ayuda estaré agradecido.
Saludos.

surbyte

Lo único que puedes hacer es colocar el sensor en un tubo y esperar que el eco ingrese direccionalmente y que no sea perturbado por el exterior.
Todo eso requiere mucha prueba error.

Intenta por ese camino a ver si mejora su respuesta.
En tu casa o sea en condiciones controladas el código debe estar perfecto ya que has visto que cuando vas al campo o a la situación de trabajo se presentan cosas con las que no contabas.

isadan92

Gracias por su tiempo.
El tubo se coloca en el recepto o solo en el emisor?
Un compañero me comento que coloque un capacitor de 330uF entre 5v y tierra, debido a que la posible causa sea que la fuente meta ruido al sistema, tome un cargador de 5volts entre los pines de 5v y GND del arduino como medio de alimentación, todo el sistema consume menos de 120mA y la fuente es de 2A, crees usted que esa pueda ser la causa?
Crees usted necesario que acondicione la señal por software, me comentaron también que lea una cantidad n de datos y descarte los que este fuera de rango, no veo como me pueda servir eso si el sensor pareciera que se queda trabado.
Saludos.

surbyte

Lo primero que debes hacer es entender que pasa.
Eso incluye como se propaga una onda de sonido y como regresa.
Cuando emites un sonido de 40Khz, este sale formando un ángulo sólido es como un cono que crece y crece, rebota y debido a la atenuación en el rebote vuelve obviamente mas pequeño.
Como esta dispuesto el sensor, no tienes muchas alternativas para bloquear emisor o receptor. Yo usaría para comenzar algun tubo de pVC que contenga a ambos y probar con distancias, empezando por una de 20 cm y ver como se comporta.
Lo estoy diciendo sin mucho análisis de mi parte. Jamás usaría un sensor de estos para una situación como la que mencionas. Esta todo preparado para que falle.  Por eso son elementos usados por hobbistas.
Hay sensores mejores, claro!! Pero cuestan mucho mas.
Tampoco garantizo que no tengas problemas.
Una solución simple sería tomar algun sensor usado en vehículo para indicar presencia o no de obstáculo y adaptarlo a tu necesidad. Pero eso implica conocerlo, saber como emitir y recibir pulsos siempre y cuando cuente con toda la electrónica necesaria.
Tal vez alguno de los que venden en los sitios online sirve para tu proyecto pero no puedo recomendarte ninguno.

tauro0221

Hi,
Otro sensor que podrias tratar es el   Sensor PIR  SR501 . Este trabaja a base de movimeinto infrarojo. Estos se usan en las alarmas de patio que prenden las luces cuando detectan movimiento. No se si te sirve pero es una sugerencia.Esto son bien sensitivos.

Go Up