Archivo de la categoría: Arduino

Encontrar la constante de gravitación g

Después de diversos ajustes, ya estoy en condiciones de realizar el experimento del péndulo para encontrar la constante de la gravedad.

He probado diferentes tipos de sensores, y finalmente me quedo con unos sensores de efecto Hall que detectan el paso del imán (el peso del péndulo es un imán). Todavía me faltan hacer unas cuantas mejoras. De hecho, la fórmula que hacemos servir (movimiento armónico) sólo será válida cuando sin(x) = x, y esto implica que la estructura del mueble tiene que ser más grande y el hilo más largo, para poder limitar el ángulo alfa, manteniendo el periodo del ciclo.

Experimento del péndulo para encontrar la constante de la gravitación g

Este verano estuve haciendo pruebas para captar la seal de un sensor LDR al ordenador, con un programa C++ que leía por el puerto serie los datos que enviaba el Arduino. Y se comprobaba como la luminosidad al atarcecer disminuye como una sigmoide (1).

Estas eran las primeras pruebas para el experimento que quería hacer y documentar, que es la búsqueda de la constante g a partir del experimento del péndulo. Resumiendo, medimos el periodo del péndulo para diferentes longitudes, y podemos encontrar la constante g=9.81 m/s2. Sabemos que el periodo del péndulo no depende de la masa, sino sólo de la longitud de la cuerda y de la constante g obviamente.

En la foto podemos ver el esquema del experimento. Tenemos un péndulo; un fotodetector con Arduino capaz de detectar el paso del péndulo; enviamos por el puerto serie al ordenador los datos; un programa C++/SDL lee los datos del puerto serie; procesamos los datos con Python y encontramos la recta de regresión; calculamos g y el error correspondiente. Todo esto es lo que desarrollaremos en el siguiente post.

A parte del experimento de encontrar la constant g, la idea es hacer una serie de experimentos que sigan el mismo esquema. Si tenemos diversos experimentos preparados, se podría hacer más adelante una propuesta didáctica para Secundaria.

Experimentos de verano: modelo matemático de como decae la luz solar al atardecer

Me está rondando por la cabeza hacer una serie de experimentos captando dades amb sensors y procesando los datos en el ordenador. Espero hablar de ello pronto, hay bastantes ideas chulas que se pueden desarrollar. Aquí va una pequeña muestra. Y una de las técnicas clave para hacer todo esto que quiero hacer es enviar por el protocolo serie los datos de un sensor (arduino) a un programa C++ que se está ejecutando en el ordenador.

En la foto se puede ver cómo se recogen los datos del sensor en el ordenador. Los datos se van grabando en un fichero, y se pueden procesar a posteriori. En este caso tengo un sensor LDR que capta la luz solar, y se trata de ver cómo decae la iluminación a medida que se va haciendo oscuro. ¿Qué comportamiento tendrá? El estado inicial es asintótico (iluminación plena), y el estado final también (oscuridad). ¿Qué pasa en medio? Sabemos que a la naturaleza no le gustan los cambios bruscos. Hemos de unir las dos rectas con una curva. Esto nos puede dar una curva sigmoide, en la que habría un punto de inflexión de cambio máximo en el decrecimiento de la iluminación? ¿Será cierto este comportamiento, este modelo matemático? Vamos a comprobarlo.

Una vez tenemos el fichero con los datos, los procesaremos con las librerías científicas numpy y scipy de Python. Como podemos ver en el código, se propone una línea de máximo ajuste de tipo sigmoide. Y efectivamente obtenemos una buena solución y un buen ajuste como se puede ver en la gráfica. En este caso, la ecuación obtenida es:

y =987.24 * (1 / 1 + exp(-0.07*(x-393.87))) +-8.02

No hemos de hacer demasiado caso a los datos del eje X, son tan sólo puntso. Sencillamente tener en cuenta que la distancia entre puntos son 30 segundos.

Esta es una sencilla y buena demostración de verano (un divertimento) de que la Naturaleza se describe con funciones matemáticas. Las mates son una buena herramienta para describir el comportamiento de la Naturaleza. Y que los fenómenos exponenciales son inherentes a la Física.

Este último año he estado estudiando métodos numéricos y las librerías científicas de Python, y realmente le veo muchas posibilidades, que quiero ir explorando este curso que comenzará de aquí poco.

# -*- coding: utf-8 -*-
#cel·la LDR que ha gravat com decau la llum al capvespre.
#La funció que s’ajusta a les dades és una sigmoide

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def sigmoid(x, a, b, c, d):
y = c / (1 + np.exp(-b*(x-a))) + d
return y

y = np.loadtxt(‘../dades/LDR_capvespre.txt’)
x = np.linspace(1,len(y),len(y))
#print (x)
#print (len(x))

popt, pcov = curve_fit(sigmoid, x, y, p0=[350, 0.001,1000, 2]) #és necessari ficar uns bons paràmetres inicials

print popt
print (‘y =c * (1 / 1 + exp(-b*(x-a))) +d ‘)
print (‘y =’ + ‘%.2f’%popt[2] + ‘ * (1 / 1 + exp(‘ + ‘%.2f’%popt[1] + ‘*(x-‘ + ‘%.2f’%popt[0] + ‘))) +’ + ‘%.2f’%popt[3] )

plt.figure()
plt.plot(x, y, ‘k’, label=»Original Noised Data»)
plt.plot(x, sigmoid(x, *popt), ‘r-‘, label=»Fitted Curve»)

plt.legend()
plt.show()

# Resultat:
#y =c * (1 / 1 + exp(-b*(x-a))) +d
#y =987.24 * (1 / 1 + exp(-0.07*(x-393.87))) +-8.02

Mini virtual pinball based on Marvel’s Avengers

Finalmente he finalizado el pinball de Avengers. He estado haciendo dos pinballs en paralelo, de las mismas dimensiones, y con plunger analógico.

He tardado bastante tiempo en repasar las 200 mesas para adaptarlas al plunger y tilt analógicos. Publicamos este artículo publicando la solución final de la construcción del tirador de muelle, basado en Arduino.

Plunger analógico para virtual pinball

Estoy haciendo un par de pinballs, y esta vez sí que quiero incluir un plunger analógico. Esto es bastante trabajo, pues significa construir un tirador de muelle fiable, y configurar/repasar las 200 mesas con las que trabajo. Además del tirador analógico también incluiré la función de TILT, es decir, cuando dé un golpe lateral al mueble quiero cambiar la trayectoria lateral de la bola, y así evitar que la bola caiga en el sumidero.

Utilizaré un Arduino Pro Micro, que me hará de joystick/gamepad a través del puerto USB. Para que el sistema operativo lo reconozca como HID (Human Interface Device), el firmware del Arduino debe incluir la librería joystick. El Arduino tiene entradas digitales/analógicas y salidas digitales para conectar los sensores y los botones necesarios. De hecho, utilizando el Arduino ya no hará falta el I-PAC que se utiliza en este tipo de proyectos.

En la foto se puede ver el segundo prototipo de plunger analógico, que ya es funcional. Como sensor utilizaré finalmente un potenciómetro lineal deslizante. De momento el muelle que utilizo es un poco fuerte. Estoy buscando otro que sea más flojo, pero que me asegure el retorno del potenciómetro a su posición inicial. Ya sé que utilizar un potenciómetro (elemento mecánico) no es la mejor solución, pero de momento me está funcionando sin problemas. Otras opciones a considerar como sensores son un rotary encoder (que también es mecánico), y dos soluciones que no son mecánicas (larga vida) pero que son más difíciles y caras y que he viso por Internet: utilizar un CCD linear sensor array (TAOS TSL 1410R); y utilizar un sensor de distancia LVDT (es caro, pero unos se lo puede construir).

Como conclusión, le daré una oportunidad al potenciómetro lineal deslizante, y su valor se leerá en una entrada analógica del Arduino.

Para la función tilt necesito un acelerómetro. Usaré el MPU-6050 GY-521, que es un acelerómetro de tres ejes y giroscopio (sólo necesito leer la aceleración en un eje). Usa el bus I2C para conectarse al Arduino (entradas digitales). Además, el resto de botones (en principio 4 botones frontales y los dos botones laterales de los flippers) también utilizarán entradas digitales del Arduino.

Lo que lleva más trabajo es repasar las 200 mesas y modificarlas para que el plunger analógico funcione correctamente. Hay diversas maneras de implementar el tirador, unas mesas más fáciles que otras. Como siempre, muchas gracias a la comunidad de Visual Pinball y a la gente que ha importado todas las mesas para el uso y disfrute de todos.

Ahora ya estoy a punto de acabar, y cuando tenga finalmente el mueble montado y el plunger analógico colocado en un posición final se tendrán que hacer las pruebas definitivas y la versión final del firmware. Ahora ya falta poquito. Cuando lo tenga todo acabado haré un pequeño video.

Si a alguien le interesa mi solución final, que em contacte y lo hablamos.

Referencias:

Proyecto IoT en thingspeak.com

Ya está funcionando el proyecto de IoT basado en NodeCMU y el sensor de temperatura/humedad/presión BME280, y visualización de los datos en thingspeak.com. También he empezado a hacer el curso de IoT en el Institut Rambla Prim, que imparte Jordi Binefa.

Enlaces:

Pistones pneumáticos y válvulas para el whack-a-mole

He realizado las primeras pruebas de la parte pneumática del whack-a-mole. A veces comprar en Aliexpress es realmente complicado. Quería unos pistones pneumáticos de una sola acción con retorno de muelle, y he recibido unos pistones de doble acción. El título del producto y las fotos del producto no concordaban. Creo que al final estos pistones de doble acción me irán bien, aunque al final necesitaré el doble de solenoides (2 solenoides por pistón, tal com se ve en el video).

El compresor que utilizo es el más simple que he encontrado. Me ha costado 10e de segunda mano, y es bastante ruidoso, pero haré una buena amortiguación del sonido. Un compresor de más potencia y con calderín sería ideal, pero el precio se incrementaría mucho.

Así pues, el material que se necesita para hacer esta prueba es: compresor, pistón pneumático, dos solenoides (válvulas pneumáticas), 2 rácores para los pistonse, 4 rácores para los solenoides, una T, y tubo de 6mm. El siguiente paso será la parte electrónica: un arduino y los relés para controlar todos los solenoides.

Enlaces:

Four books…

In the previous post I was talking about Physical Computing, Interaction Design and the Tinkering way to discover and do things and projects. These four books that I quote represent a nice starting point to dig inside these concepts.

  • Programming Interactivity: A Designer’s Guide to Processing, Arduino and OpenFrameworks. O’Reilly (2009). Joshua Noble. Amazon reference
  • Make: Electronics. Learning Through Discovery. O’Reilly (2009). Charles Platt. Amazon reference
  • Making Things Talk: Practical Methods for Connecting Physical Objects. O’Reilly (2007). Tom Igoe. Amazon reference
  • Physical Computing. Sensing and Controlling the Physical World with Computers. Thomson Course Technology (2004). Dan O’Sullivan and Tom Igoe. Amazon reference. This book doesn’t make any reference to arduino because it’s year of publication: 2004.

Arduinotes: un sistema para tomar notas basado en Arduino

arduinotes1

Arduinotes es un sistema para tomar notas de forma rápida y fiable, basado en un teclado de ordenador estándar como sistema de escritura (para mi la única solución posible si se busca rapidez y comodidad), y en una memoria EEPROM como sistema de almacenaje. Es un sistema basado en el microcontrolador Arduino, con el que se están haciendo cosas muy interesantes. En un post anterior ya mostré cómo construir un sensor de temperatura basado en Arduino.

Este proyecto no deja de ser un poco académico (alguien discutirá la utilidad de un sistema para escribir sin una pantalla). Ahora bien, si yo fuese periodista, cogería mi Arduinotes, buscaría el mejor teclado posible (que fuese cómodo, con teclas que ofrezcan resistencia al apretarlas, lo más pequeño posible y si puede ser plegable), me iría a la rueda de prensa que tuviese que cubrir, y deslumbraría a los presentes con mi kit… Si Yo fuese aventurero y tuviese que cruzar el Sáhara a pie, en mi mochila seguro que llevaría el Arduinotes para escribir el dietario de mis aventuras.

arduinotes2Arduinotes es fiable y funcional porque utiliza un teclado de ordenador, económico porque está basado en Arduino y componentes electrónics básicos, portátil porque ocupa y pesa poco, y autónomo porque consume muy poca batería.

Además del hardware, hay que considerar el software que se ha desarrollado. Ante todo las librerías de Arduino que se utilizan: la librería para utilizar EEPROMs, y la librería para utilizar teclados PS2 (que se ha tenido que adaptar); el código fuente que se ha desarrollado, que junto con las librerías representa el firmware de Arduinotes, es decir, el software que se carga dentro del microcontrolador; y finalmente un ejecutable escrito en lenguage C que lee el puerto serie y así obtenemos en un fichero todo el contenido de la memoria EEPROM. Arduinotes utiliza una memoria EEPROM (aquí se ha utilizado una memoria de 64K, pero podría ser más grande), que se divide en 4 páginas y así poder escribir en cuatro documentos diferentes. Incorpora las funciones de escritura, borrado, guardar y lectura.

No dejes de visitar la wiki para tener más información, hacer sugerencias o leer la transcripción del video, o envíame un mail (joanqc@gmail.com) si te ha interesado el proyecto o quieres pedir más información o hacer cualquier sugerencia. Aquí os dejo el enlace del proyecto en wiki.joanillo.org y el video del proyecto.

Sensor de temperatura con Arduino, display LCD y data logging

Las posibilidades que tiene Arduino para desarrollar rápidamente proyectos electrónicos son inmensas. Además hay mucha documentación y un creciente número de gente que está haciendo cosas con Arduino y que escoge esta pltaforma para desarrollar sus proyectos e interficies. Conscientes de la potencia que tenemos en las manos con este pequeño microcontrolador, os quiero mostrar el último experimento que he hecho con Arduino. Es un proyecto bastante académico: con un sensor LM35 leemos la temperatura, que mostramos en una pantalla de cristal líquido, y grabamos los datos cada 5 minutos en una memoria EEPROM externa. Estos tres módulos están ligados con el firmware que cargamos en el microcontrolador ATMEL que tiene la placa Arduino.

Sin lugar a dudas, Arduino dará mucho juego en futuros desarrollos, como el proyecto que estoy preparando: 50 Ways to Play Una Plata d’Enciam… dentro de poco vendrán los detalles…

Per ver los detalles del sensor de temperatura:
http://wiki.joanillo.org/

transcripción del video en español