Control de distancia con sensor Ultrasónico

hola tengo un sensor ultrasonico y quiero que cuando detecte a mas de cien dos motores se enciendan y cuando detecte a menos de cien se apagen lo que pasa en que lo tengo a una distancia que exede sun rango entonces es como si detectara cero en esa situacion los motores se mantienen apagados pero cuando acerco un objeto como a 18cm los motores se encienden me pueden decir si mi codigo esta mal es este:#include <NewPing.h>

¿100 qué? pulgadas, centímetros. Por que dices que excede el rango y que yo recuerde el sensor ultrasónico HC-SR04 tiene un rango de hasta 3m (3000cm), claro que tampoco indicas el sensor que usas.

Por lo demás, con la función sonar.ping(), obtienes el tiempo de retorno del “eco” del ultrasonido. Como se conoce la velocidad del sonido y tenemos el tiempo podemos calcular la distancia. Pero no es necesario porque la libreria ya nos da una función ping_cm

Así que cuando lo utilizas en tu código puedes hacer algo similar a esto:

// La distancia máxima es 200cm.
int distancia;
NewPing sonar(trigger, echo, 200);

void loop() {
  distancia = sonar.ping_cm();
  if ( distancia > 100 || distancia==0 ) {
    // Si la distancia es mayor que 100 o es igual a 0 (el sensor no ha detectado
    // un objeto en el rango de 200cm hay que encender los motores.
    enciendoMotores();
  }
  else {
    // Hay obtemos pero la de distancia es menor de un metro
    // Asi que hay apagarlos.
    apagarMotores();
  }

Hola y bienvenido al foro.

Te invito a que te leas las NORMAS, a fin de que aprendas a postear correctamente tanto código, como imagenes, enlaces, errores, etc.

Te sugiero que cambies el título por algo descriptivo del problema. “Ayuda”, “Urgente”, “No funciona” y títulos similares no dicen nada sobre el problema y hacen que el foro se vea feo.

quiero que cuando detecte a mas de cien dos motores se enciendan y cuando detecte a menos de cien se apagen

ohh gracias, por lo mismo de que soy nuevo pense que nadie me iba a responder y por eso puse ese titulo,
acerca del codigo ya cambie el ping(); por ping_cm(); pero ahora ya no lee bien el sensor, este es mi codigo nuevo:

#include <NewPing.h>

#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

int IN1 = 2;
int IN2 = 3;
int ENA = 5;
int IN3 = 7;
int IN4 = 8;
int ENB = 9;
int VELOCIDAD;

void setup() {
 Serial.begin(115200); 
 pinMode(IN1, OUTPUT);  
 pinMode(IN2, OUTPUT);
 pinMode(ENA, OUTPUT);
 pinMode(IN3, OUTPUT);  
 pinMode(IN4, OUTPUT);
 pinMode(ENB, OUTPUT);

 }

void loop() {
  delay(50);
  int uS = sonar.ping_cm();
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm(uS));
  Serial.println("cm");

  if(uS > 100 | | uS == 0){
  digitalWrite(ENA, HIGH);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(ENB, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  }else{
  digitalWrite(ENA, HIGH);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(ENB, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  }

}

Buenas, ¿y si dejas la libreria <NewPing.h> y lo haces sin libreria?

Tu problema está aquí:

Serial.print(sonar.ping_cm(uS));

Previamente has leido la variable uS haciendo:

uS=sonar.ping_cm();

Y te ha devuelto la distancia en cm al objeto. Pero luego tu imprimes llamando a la misma función con un parámatro que es la distancia uS que leiste antes, lo cual te limita la distancia máxima a leer.

Hazlo como en el ejemplo que te puse, cambiando el nombre de uS a distancia (para evitar confusiones), e imprime la distancia.