Alimentación HC-SR04 desde el pin del microcontrolador y MOSFET

esquemático

simular este circuito : esquema creado con CircuitLab

Estoy trabajando en un sensor de proximidad para mi garaje y estoy usando un sensor ultrasónico HC-SR04 para medir la distancia. El microcontrolador que estoy usando para controlarlo todo es un PIC16F88. Tengo una primera versión que funciona perfectamente bien, la distancia es precisa y consistente.

Sin embargo, planeo alimentar el proyecto con una batería (todavía no estoy seguro de qué tipo de batería), por lo que me gustaría reducir el consumo de energía tanto como sea posible. En estado inactivo, el sensor de distancia consume alrededor de 3 mA, que es demasiado. Empecé a modificar el proyecto para usar el modo de suspensión del PIC, esta parte funciona bien.

Ahora estoy tratando de alimentar el HC-SR04 desde un pin del PIC y un MOSFET (2N7000). Tengo el sensor cableado de la siguiente manera:

  • Vcc: +5V
  • Trig: pin de salida del PIC
  • Echo: pin de entrada del PIC
  • Gnd: drenaje de MOSFET

El MOSFET está cableado como:

  • Drenaje: pin Gnd del HC-SR04
  • Fuente: Gnd del circuito
  • Puerta: pin de salida del PIC

La lógica de mi programa en C es la siguiente:

  • Aplique el nivel lógico 1 a la puerta del MOSFET
  • Medir la distancia
  • Aplicar nivel lógico 0 a la puerta del MOSFET
  • Ponga el PIC a dormir por un rato (alrededor de 500ms)
  • Repetir

El problema es que las distancias medidas no son nada consistentes. Parece variar alrededor de la distancia correcta, pero va de 10 a 20 centímetros por encima y por debajo de la distancia real. Si conecto la compuerta del MOSFET a +5V, entonces funciona perfectamente bien y tengo distancias consistentes y correctas. Intenté esperar hasta 500 ms después de configurar la puerta a +5 V antes de medir la distancia, pero no se solucionó.

¿Alguien ha experimentado algo similar o tiene una idea de lo que podría intentar para alimentar el HC-SR04 de esta manera?

¡Gracias por su ayuda!

podrías publicar un esquema. hay un botón para un editor cuando publica o actualiza una pregunta
¿Estás seguro de que el mosfet está completamente encendido?
@jsotola Agregué un esquema que muestra las conexiones para el HC-SR04.
@RonBeyer Lo comprobé con un multímetro y lo es. Además, al conectar la puerta del MOSFET a la fuente de alimentación de +5V, el circuito funciona perfectamente bien.
¿Qué dice la hoja de datos sobre el tiempo de inicio?
Es difícil encontrar una hoja de datos para este sensor, pero he intentado esperar hasta 500 ms antes de intentar medir una distancia, dudo que sea más que esto.

Respuestas (2)

Después de mucho experimentar, parece que todo se redujo a que las conexiones de la placa de prueba no eran lo suficientemente fuertes. Cuando trato de "empujar" el MOSFET y los cables conectados a él de una manera que los obligue a tocarse, parece ser mucho más consistente; cuando consigo una buena conexión y no muevo la placa, la distancia es muy estable. También agregué un capacitor entre +5V y Gnd para el HC-SR04, para absorber cualquier inconsistencia en la señal dada por el pin del PIC y el MOSFET. Pronto soldaré todo en una placa prototipo y podré confirmar que ese fue el problema.

El tiempo de activación del HC-SR04 parece ser de unos 60 ms. El tiempo mínimo sugerido entre 2 medidas para evitar colisiones de una señal anterior es de aproximadamente 60 ms, por lo que traté de esperar 60 ms después de encender el sensor también. Esperar menos da algunos valores incorrectos, por lo que recomendaría mantener un retraso de 60 ms o más cada vez que vuelva a encender el sensor, así como entre cada medida.

Supongo que la solución es simplemente que el HC-SR04 necesita ser alimentado por una señal estable, que no era el caso en mi protoboard. De todos modos, muchas gracias por la ayuda!

Es una posibilidad un poco remota, pero podría considerar cambiar los pines de E/S que están conectados al HC-SR04 a alta impedancia antes de apagar el FET, en caso de que esté perdiendo energía en el HC-SR04 a través de ellos cuando está ostensiblemente apagado. El módulo podría entrar en un estado funky en ese caso, creo.