Arduino HC-SR04 sensor a través del multiplexor CD74HC4051E usando un solo cable

0

Estoy tratando de obtener distancia usando el sensor HC-SR04 y arduino. He conectado los pines Trig y Echo en el sensor, luego va al puerto A7 (pin 4) del multiplexor (selectores configurados de la siguiente manera: S0 alto S1 alto S2 alto). Subí el código de ejemplos (sensores / ping) y pingPin conectado a la entrada / salida del multiplexor: Solo he cambiado la duración del impulso trigonométrico a 20uS. Si no uso el multiplexor y conecto pingPin directamente al sensor, todo funciona. Si desconecto el pin del sensor de mux, obtengo algunos valores aleatorios de mux out pin, está bien. Si conecta el pin desde el sensor a A7, solo lee los ceros de mux in / out. E imprime ceros más lentamente que cuando se conecta directamente y funciona. Así que supongo que no recibo ningún impulso del sensor o mi señal de activación no puede pasar. Acabo de probar el puerto A7 de mux con un impulso de activación largo. Cuando no está conectado al sensor, es 0 5 0 5, así que está bien. Pero cuando se conecta al sensor, solo es 0V 1V 0V 1V y no 5. ¿Hay algún problema aquí?

¿Por qué no funciona?

Funciona así: arduino envía un impulso ALTO de 20 uS de longitud al sensor y luego espera el impulso ALTO del mismo pin y obtengo la duración de este impulso ALTO.

Código de ejemplos:

const int pingPin =3;

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
}

void loop()
{
  // establish variables for duration of the ping, 
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delay(1000);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(100);
}

long microsecondsToInches(long microseconds)
{
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

hoja de datos 74hc4051 hoja de datos del sensor

Tal vez sea importante?

  

Efectivamente, el canal seleccionado tiene una resistencia de alrededor de 80 ohmios.   (entre el pin seleccionado y el pin común) logrado de lado a lado   MOSFETs (un canal P y un canal N). Los canales no seleccionados.   tienen una resistencia muy alta entre ellos y el pin común.

¿Tal vez debería conectar el disparador a través de un transistor y A7 a su base? ... intentado. no funciono Así que creo que el problema está realmente en baja tensión desde A7 ... 1V allí, no 5 ...

    
pregunta a_vasilkov

1 respuesta

1

He encontrado solución. Tal vez me equivoqué desde el principio .. Solución

Lo he hecho como se describe en el enlace anterior, conecté trigonometro y eco con una resistencia de 1.8k y un pin A7 para disparar. Debería haber buscado en Google más.

    
respondido por el a_vasilkov

Lea otras preguntas en las etiquetas