Problema con sensor hc-sr04

Buenas a todos!

Estoy programando un sensor HC-SR04 con una placa Arduino UNO Q para un TFG, y por muy básico que es, no funciona. El sensor está montado como podéis ver en la foto. Y tengo el siguiente código (es de prueba). El problema es el siguiente, el pin echo no se activa nunca, por lo tanto nunca lee distancia y devuelve siempre 0, por que hace esto? Todo el hardware está bien conectado y bien alimentado

He leído que la librería Arduino RouterBridge puede dar problemas, pero sin ella no podría imprimir por el puerto serie asi que no serviría de nada quitarla.

Alguna sugerencia?

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @jandro_serrano.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

[color=green]Moderador:
Independientemente de tu problema de hardware/software, hay un modo de presentar los códigos en este foro y no es el que has usado.

Por favor, lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)


[/color]

Esto no aporta nada al código asi que retíralo.

Monitor.println(digitalRead(echo));

Si crees que vas a leer un cambio con un print estas muy equivocado.

Si el sistema no te devuelve nada, tiempo es 0 y el resultado será raro
agrega esto, luego de leer el tiempo

if (tiempo == 0) {
  Monitor.println("Sin señal");
  return;
}

La secuencia de trigger deberia ser así

digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);

Tal vez estos cambios no resuelvan nada. Sería lo mas lógico.

Asi que haz un simple Blink.ino y prueba el pin trig a ver si cambia o no. Puede que tengas algo mal.

Acá tienes un código para probar, los pines que usa son distintos pero ajústalos a los que tienes cableados.

#include <Arduino_RouterBridge.h>
#include <Servo.h>

#define TRIG_PIN 9
#define ECHO_PIN 10
#define SERVO_PIN 6

Servo servo;
int angle = 30;
bool forward = true;

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  servo.attach(SERVO_PIN);
  servo.write(angle);

  Serial.begin(115200);

  Bridge.begin();
  Bridge.provide("get_radar", get_radar);
}

// RPC FUNCTION CALLED FROM PYTHON
String get_radar() {

  // Move servo
  servo.write(angle);

  if (forward) angle++;
  else angle--;

  if (angle >= 150) forward = false;
  if (angle <= 30) forward = true;

  delay(10);

  // Ultrasonic
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  unsigned long start = micros();
  while (digitalRead(ECHO_PIN) == LOW) {
    if (micros() - start > 30000) return String(angle) + ",-1";
  }

  unsigned long echoStart = micros();
  while (digitalRead(ECHO_PIN) == HIGH) {
    if (micros() - echoStart > 30000) return String(angle) + ",-1";
  }

  unsigned long duration = micros() - echoStart;
  float distance = duration * 0.0343 / 2;

  return String(angle) + "," + String(distance);
}

void loop() {}

Mira todo el artículo