Paso 5: El código Cobra (no Python) HAH!
Aquí está el código de Arduino que estoy corriendo. Es una modificación de su muestra del sensor ultrasónico Ping.Ajuste de la variable "numReadings" a un valor más alto producirá menos lecturas de ruido, sino también un mayor retraso en el tiempo de reacción.
¡ Disfrute!
Copiar desde aquí...
#include < Servo.h >
Servo myservo; crear objeto servo para controlar un servo
int val; valor asignado de gama para control de servo
const int pingPin = 7; Pin de señal del sensor de ping de Parallax
const int numReadings = 5; superior a Lisa, también causa latencia más
int lecturas [numReadings]; las lecturas de la entrada analógica
Índice de int = 0; el índice de la lectura actual
int total = 0; la corriente total
int promedio = 0; el medio de
int lastValue = 0;
void setup() {}
inicializar la comunicación serial:
Serial.Begin(9600);
myservo.Attach(9); se fija el servo en el pin 9 al objeto servo
borrar el buffer de valor suavizado
para (int thisReading = 0; thisReading < numReadings; thisReading ++)
lecturas [thisReading] = 0;
}
void loop()
{
establecer las variables durante el ping,
y el resultado de la distancia en pulgadas y centímetros:
larga duración, pulgadas, cm;
int fadeValue = 0;
El PING))) es accionado por un pulso alto de 2 o más microsegundos.
Dar un breve impulso de baja previamente para asegurar un pulso limpio alto:
pinMode (pingPin, salida);
digitalWrite (pingPin, LOW);
delayMicroseconds(2);
digitalWrite (pingPin, HIGH);
delayMicroseconds(5);
digitalWrite (pingPin, LOW);
El mismo pin se utiliza para leer la señal del PING))): un alto
pulso cuya duración es el tiempo (en microsegundos) de envío
del ping a la recepción de su eco de un objeto.
pinMode (pingPin, entrada);
duración = pulseIn (pingPin, HIGH);
convertir el tiempo en una distancia
pulgadas = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
suavizado de código comienza aquí
Reste la lectura:
total = total - lecturas [índice];
lectura del sensor:
lecturas [índice] = cm;//analogRead(inputPin);
Añadir la lectura al total:
total = total + lecturas [índice];
avanzar a la siguiente posición en la matriz:
index = index + 1;
Si estamos en el final de la matriz...
Si (Índice > = numReadings)
.. .wrap todo al principio:
índice = 0;
calcular la media:
promedio = total / numReadings;
suavizado de código termina aquí
reasignación de rango y mover el servo
Val = promedio;
Val = mapa (val, 10, 40, 0, 179); valor de la escala a utilizar con el Torre Pro media vuelta analógico servo (valor entre 0 y 180)
if(Average < 25)
{myservo.write(val);} ajusta la posición del servo según el valor escalado si dentro de una cierta distancia
Delay(10); Deje que el servo se enfríe hacia abajo, o algo
}
microsecondsToInches(long microseconds) largo
{
Según ficha técnica de paralaje para el PING))), hay
73,746 microsegundos por pulgada (es decir, el sonido viaja a 1130 pies por
en segundo lugar). Esto da la distancia recorrida por el ping, saliente
y, por lo que dividimos por 2 para obtener la distancia del obstáculo.
Ver: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
volver microsegundos / 74 / 2;
}
microsecondsToCentimeters(long microseconds) largo
{
La velocidad del sonido es 340 m/s o 29 microsegundos por centímetro.
El ping viaja hacia fuera y hacia atrás, para encontrar la distancia de la
objeto que tomamos la mitad de la distancia recorrida.
volver microsegundos / 29 / 2;
}
Aquí...