El concepto de velocidad es bastante intuitivo. Si viajamos en un coche que va a 100 km/h, sabemos que nos costará 2 horas hacer una distancia de 200 km. La velocidad, por lo tanto, es el espacio que se recorre en un cierto tiempo. Matemáticamente, v = S / t, donde v es la velocidad, S el espacio recorrido y t el tiempo que se ha tardado en recorrerlo.
Cómo medir la velocidad con arduino
Físicamente, basta con tener un metro para medir distancia y un cronómetro para medir tiempos. Por ejemplo, el de nuestro móvil. Por supuesto, si queremos ser más precisos, el método manual no es una buena opción, sobre todo cuando lo usamos para medir distancias pequeñas. Nuestro tiempo de reacción para iniciar y parar el cronómetro es lento. Por lo tanto, utilizaremos una placa de arduino y unos sensores que serán «nuestros dedos» para poner en marcha el cronómetro y pararlo.
Algo que parece complicado se simplifica con una de las funciones más útiles que proporciona arduino. En el momento de encenderse, la placa comienza a contar el tiempo. No hace falta que hagamos nada. Mediante la función millis(), de la que hablamos en nuestra anterior entrada, ese tiempo está a nuestra disposición.
Cómo lo haremos: el hardware y el algoritmo
Hay varias opciones. En este caso, utilizaremos sensores de infrarrojos (IR) que detectan la presencia del cuerpo que se mueve. La velocidad de un móvil en un tramo se puede obtener, en promedio, como la distancia recorrida entre el tiempo que ha tardado en recorrerla.
Se puede hacer un sencillo montaje en el que mediante 2 sensores de IR se puede medir el tiempo y obtener un valor de velocidad aproximada. Este es el algoritmo que voy a utilizar:

Cuando se lanza el cuerpo y llega al primer sensor, almacenamos el tiempo en que se ha producido la activación (tiempo_sensor2). Cuando pasa por el siguiente sensor, volvemos a almacenar el tiempo (tiempo_sensor6). Es evidente que restando ambos tiempos obtenemos el tiempo que tarda en recorrer una distancia que conocemos (en el caso de nuestro experimento, 58,5 cm). Calculamos la velocidad e imprimimos datos. Solo se imprimirán los datos si se activa el segundo sensor.
La peculiar numeración de las variables se debe a la utilización del montaje (que consta de varios sensores) para otros experimentos.
La foto del montaje que utilizamos se puede observar en la cabecera de esta entrada.
La programación
Como es habitual en este blog, presentaremos el programa por bloques utilizando visualino (pueden usarse otros sistemas, como mblock):

El programa es bastante sencillo, pero voy a hacer algunos comentarios. Primero, los sensores se activan con nivel bajo (en este caso), es decir, proporcionan entrada de nivel alto inactivos, e indican 0 (nivel bajo) cuando detectan un cuerpo. Por eso comparamos con ‘0’.
Además, se podría colocar el segundo bloque ‘si sensor 6 = 0’ dentro del primer bloque condicional. Tal y como está en el diagrama de bloques, es necesario que la bola pase primero por el primer detector y después por el segundo, en ese orden (lo que, por otra parte, es razonable).
Un breve vídeo sobre el experimento realizado:
Hemos usado en más ocasiones la rampa (por ejemplo, para emular el experimento de Galileo). En este caso solo usamos dos sensores y hemos añadido unos diodos LED que se activan al pasar la bola delante de ellos.
Buenas, me podría decir que sensores uso en el proyecto.
Muy buen trabajo.
Hola, Geraldine, en este caso yo utilicé sensores de infrarrojos como los que aparecen en la fotografía. En esta entrada tienes una foto en primer plano https://aulaglaia.es/el-experimento-de-galileo-y-la-placa-arduino/
Lo encontrarás muy fácilmente en internet.
Gracias por comentar en el blog.
Saludos
Hola, una consulta, ¿Cómo quedaría el programa en Arduino? Es que no logro comprender bien el esquema que se indicó previamente. Saludos!
Hola, David, no comprendo bien tu pregunta. El programa está incluido en la entrada, en formato de bloques con visualino. Si te refieres a cómo se vería en el IDE de arduino (el entorno de desarrollo de código), solo tienes que bajarte visualino, y en la parte derecha del programa verás la traducción directa de los bloques a código, que podrás pegar directamente en el IDE.
Espero haberte ayudado.
Gracias por pasar por el blog y comentar.
Federico
Hola buenos días, estamos haciendo este proyecto. Ahora, si entiendo bien dicha programación es para visualino que es distinta a la de arduino, esto es asi? En caso de que sea así, como sería la programación para ARDUINO?
Hola, Luis,
El programa visualino traduce automáticamente el código en la parte derecha de la pantalla. Puedes copiar y pegar directamente al IDE de arduino y el programa funcionará igual. De hecho, visualino utiliza el IDE de arduino que tengas instalado.
Te he mandado a tu correo las dos versiones (que son la misma) del programa.
Un saludo,
Federico
Con que sensor implementarías si la pelota fuese de un diámetro de 4 mm
Hola, Josep,
si la rampa tiene el ancho adecuado, podrías utilizar el mismo. Yo he usado sensores de infrarrojos con una bola de 3 cm (para un péndulo simple) y han funcionado correctamente, eso sí, instalando dos sensores para no perder activaciones.
Se me ocurre también utilizar un sensor LDR con un emisor laser (ambos son componentes baratos), haciendo una célula fotoeléctrica. Habría que comprobar la velocidad de respuesta.
hola, federico buenas tardes, soy gerardo comente en youtube, para ver si me podias facilitar el codigo de la rampa que usaste con los 6 sensores. muchas gracias y buen dia. https://www.youtube.com/watch?v=2i3tcKJzMZI&lc=Ugy0mBW_Yo3HzPhWtwp4AaABAg
Hola, Gerardo,
ya te lo he enviado,
saludos. Federico
Me lo podrías compartir también a mi jossss720@gmail.com
Hola, José, te lo he enviado
saludos
Hola buenas tardes, en que unidad de medida se estaría visualizando la velocidad que detecten los sensores? Gracias
Hola, Isaac, en el programa tú puedes elegir la unidad de medida que quieras, sin más que utilizar los factores de conversión necesarios. En este caso, yo he medido distancias entre sensores en centímetros (58,5 cm). Si te fijas, ese número aparece en el programa por bloques que aparece en la entrada. Por otra parte, el tiempo que proporciona la función millis() tiene unidades de milisegundos, que en una de las instrucciones divido entre 1000, para obtener segundos. Divido el espacio en centímetros entre el tiempo en segundos y obtengo la velocidad en cm/s.
Saludos y gracias por acercarte al blog.
Hola Buenas noches por favor me podrías ayudar con el código ? que se utilizó, por favor, lo más pronto posible, gracias
Hola, Vanesa, hace mucho que hice el programa y no sé dónde lo tengo, pero no es muy complicado. Puedes bajarte visualino, copiar el código de bloques y en el lado derecho de la pantalla del programa está el código listo para cargar en el IDE.
Saludos
Federico