Código
Con este primer código vamos a utilizar el módulo de ultrasonido como detector de movimiento, con un alcance determinado que activará una alarma, en nuestro caso encenderá un LED.
En el void setup, lo primero es establecer el contacto por el puerto serie con Serial.begin, a una velocidad de 9600. Luego vamos a establecer los pines del disparador y del LED, trigPin y led como salida y el pin receptor del eco echoPin, como entrada con la instrucción pinMode.
A continuación declaramos dos variable locales tipo long llamadas duración y distancia.
Estableceremos el trigPin en LOW y esperaremos 2 microsegundos para asegurarnos. Luego escribiremos en el disparador o trigPin un HIGH durante 10 microsegundos, que será la señal que vamos a lanzar y pasará a LOW, para poder escuchar su eco de retorno.
Hasta ahora habíamos visto la instrucción delay(milisegundos) pero cuando se necesita un periodo de tiempo inferior, tenemos la instrucción delayMicroseconds(microsegundos). Para escuchar el eco de retorno, hemos utilizado la variable duracion, y le hemos asignado la función pulseIn, cuyos parámetros de entrada es la variable echoPin, pin 12 de entrada, y le hemos dicho que notifique solo cuando reciba un HIGH en la entrada, y calcula el tiempo en microsegundos que tarda la señal en ir y volver.
La variable distancia, nos calcula la distancia del objeto contra el que ha rebotado la señal. Para ello conociendo la velocidad el sonido 343 m/s nos da 1/343 = 0,00291 microsegundo es lo que tarda el sonido en recorre un metro. Para utilizar una medida más cómoda podemos pasa a microsegundo/ centímetro y nos queda 29,1 microsegundo /centímetro.
Como el eco mide el tiempo que tarda en ir y volver la señal, la distancia será la mitad.
distancia = (duracion/29,1) * (1/2) pero con esto no funciona, pon tal y como viene en el código.
y esta es la operación asignada a la variable distancia.
Serial.println, se encarga de imprimir la distancia en centímetros en el monitor del puerto serie cada medio segundo.
La variable tipo entero Límite tiene asignada un valor de 200 cm que es la distancia dentro de la cual cualquier objeto será detectado, a una distancia superior el objeto no será detectado, o mejor dicho, no se encenderá el led.
El if dice que si la distancia es inferior al Límite escribirá un HIGH en el pin led y si es superior escribirá un LOW, luego esperará medio segundo y vuelta a empezar.
En este código se declara las variables, las tres primeras son para indicar que los respectivos pines son pines de salida que se activan como tal en la función setup(), las otras dos variables son para guardar los respectivos valores, para hacer cálculos más tarde.
Se activa la comunicación serie de arduino con el PC usando la función Serial.begin.
Luego en la función loop() se activa el disparador con Trig en alto, se espera un milisegundo y luego se desactiva el disparado, el tiempo que tarda en recibise la señal de vuelta se guarda en la variable duración. Para conocer la distancia dividimos la duración entre 58.2, este valor no es arbitrario, sino que lo da el fabricante en las especificaciones. El resultado es en centímetros. Que lo vamos a mostrar en pantalla a través de monitor serie, con Serial. Println y luego esperamos 0,2 segundo para que nos de tiempo de leer los valores.
Para empezar hay que descargar e instalar la librería NewPing. Una vez instalada, hay que llamarla en el código para utilizarla.
Como veréis la librería se encarga de inicializar los pines necesarios, enviar los pulsos, escuchar el eco de retorno y de hacer los cálculos. No está mal
Veamos el código, incluimos la librería NewPing, definimos los tres pines. Creamos un objeto tipo NewPing, al que llamamos sonar y le asignamos el pin disparador, el pin receptor del eco y la distancia máxima.
En el setup, establecemos la comunicación serie, fíjate que las comunicaciones son más rápidas a 115200, con lo que lo tendrás que cambiar en el monitor del puerto serie.
En el loop se empieza con una pausa de medio segundo y a continuación declaramos una variable local tipo entero sin signo, llamada uS a la que asignamos el objeto sonar.ping()
A continuación se imprime en el monitor del puerto serie "Ping : " con el siguiente Serial.print, se imprimirá el resultado de dividir el valor de la variable uS entre una función conversora, de tiempo en distancia y el resultado serán centímetros, que será la distancia donde esta el objeto contra el que rebotó el pulso de ultrasonido y con el siguiente
Serial.println se imprime "cm" y se hará su salto de línea. Todo el proceso se repetirá cada medio segundo.