: Paso 7.-código y teoría
Encontrarás decenas de variaciones sobre cómo ejecutar el sensor PING, en esencia el funcionamiento práctico del sensor tiene lugar en el ciclo (loop) que implementa el protocolo para la operación del componente PING.
Basado en sus específicas puede controlar el funcionamiento del sensor a través de una serie de pulsos. En resumen podemos decir que usted está usando un pin digital para medir un pin analógico.
Mejora: Si usted quiere enfriar, también puede insertar un tipo de sensor de temperatura TMP36 para mejorar la lectura, esto es porque como ustedes saben, el sonido viaja a una velocidad de 343 m / s, ción de este valor no es absoluto porque depende de la temperatura del aire, la bibliografía muestra esta relación entre la velocidad del sonido (C) y la temperatura del aire (t) C = 331.5 + (0.6 * t) , saber la temperatura (y aquí el sensor) finalmente ponemos unas pocas líneas de código para implementar la lectura.
#include < Servo.h >
#include < LiquidCrystal.h >
LiquidCrystal lcd (3, 4, 5, 6, 11, 12);
Servo PingServo;
Servo LeftServo;
Servo RightServo;
int ultraSoundSignal = 7; Pin de señal de ultrasonido
int val = 0;
int val2 = 0;
int ultrasoundValue = 0;
int timecount = 0; Eco counterint
ledPin = 13; LED conectado al pin digital 13
void setup() {}
LCD.Begin (16, 2);
Serial.Begin (9600);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
LeftServo.attach(8);
RightServo.attach(9);
PingServo.attach(10);
pinMode (ledPin, salida);
}
void moveServoLeftTo (int ángulo, duración int) {}
controla el servo para mover para un ángulo dado y para un número determinado de milisegundos
LeftServo.write(angle) de ;
para (; duración > 0; Duración = 20) {}
ciclo de cada iteración para el número especificado de milisegundos restando 20ms
delay(20) de ;
}
}
void moveServoRightTo (int ángulo, duración int) {}
RightServo.write(angle);
para (; duración > 0; Duración = 20) {}
Delay(20);
}
}
void loop() {}
Funciones Ping)))
timecount = 0;
Val = 0;
pinMode (ultraSoundSignal, salida); Signalpin interruptor a la salida
digitalWrite (ultraSoundSignal, bajo); Enviar bajo pulso
delayMicroseconds(2); Espere 2 microsegundos
digitalWrite (ultraSoundSignal, HIGH); Envía pulsos alta
delayMicroseconds(5); Espere 5 microsegundos
digitalWrite (ultraSoundSignal, bajo); HoldOff
pinMode (ultraSoundSignal, entrada); Signalpin interruptor para entrada
Val = digitalRead(ultraSoundSignal); Anexar el valor de la señal a val
while(Val == Low) {/ / bucle hasta pin Lee un alto valor
Val = digitalRead(ultraSoundSignal);
}
while(Val == High) {/ / bucle hasta pin Lee un alto valor
Val = digitalRead(ultraSoundSignal);
timecount = timecount + 1; Tiempo de pulso eco cuenta}
ultrasoundValue = timecount; Agregar tiempo de pulso eco para ultrasoundValue
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("obstáculo cm");
LCD.Print(timecount/10);
Delay(200);
Si (timecount > 0) {}
digitalWrite (ledPin, HIGH);}
Funciones del servo:
Si {} (ultrasoundValue > 500)
moveServoLeftTo(45,50); servo mueve a la izquierda de 45 grados para 500 milisegundos
moveServoRightTo(180,50) de ;
}
Si {} (ultrasoundValue < 500)
moveServoLeftTo(180,40);
moveServoRightTo(180,40);
}
Si (ultrasoundValue < 100) {}
moveServoLeftTo(180,100);
moveServoRightTo(45,100);
}
}