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

Este es un proyecto divertido y sencillo para hacer con la Raspberry Pi, muy adecuado ahora para el verano. He estado configurando la Raspberry Pi y los diferentes módulos del proyecto MagicMirror, y ya puedo mostrar el video de cómo quedará todo. De todas maneras, el proyecto lo tendré que acabar más adelante cuando decidamos donde podemos colocar el espejo y las dimensiones que tendrá, pues veo que comprar el 2-way mirror es la parte más delicada, y un espejo grande se va del presupuesto.

Uno de los objetivos para realizar este proyecto es que últimamente me estoy concienciando de lo mal que hablamos nuestra lengua (el catalán) y de como se ha empobrecido en general. Para recuperar las expresiones más genuinas (rehusando el calco del castellano allí donde no haga falta), hay todo un movimiento de concienciación. Yo quiero aportar mi grado de arena haciendo este espejo mágico que nos dará una lección de buen catalán cada vez que nos miremos al espejo, por ejemplo cuando nos cepillemos los dientes.

Uno de los módulos por defecto de MagicMirror es la sindicación de contenidos para tener los titulares de las noticias del día. Por ejemplo, mi espejo está suscrito al periódico ARA. Pues bien, he adaptado este módulo para crear mi propio módulo de MagicMirror (el_catala_com_cal). Ha sido bastante fácil. Sólo falta crear y editar un fichero XML con las lecciones de catalán que quiero visualizar. De momento es esto: un fichero estático que tendré que editar cada vez que quiera añadir contenido.

Sería el mes de febrero o marzo que me puse a lidiar y estudiar LaTeX. El motivo principal era la edición de ecuaciones y la notación científica, que es donde LaTeX presenta grandes ventajas. Detrás de este trabajo hay la idea de hacer unos artículos (y/o libro) sobre aspectos curiosos y cotidianos relacionados con las ecuaciones diferenciales y métodos numéricos con Python.

Lejos de este objetivo científico, con el objetivo de aprender LaTeX, me puse a editar el Tirant lo Blanc (hubiese podido coger otra novela más corta!). Han pasado unos meses y al final he tenido tiempo de acabar mi edición del Tirant lo Blanc, que tengo el gusto de presentar en primicia mundial.

Como el text es muy largo (el pdf tiene casi 1000 páginas), se ha utilizado diversas técnicas de programación y substitución automática de texto, para así generar rápidamente el LaTex a partir de los textos originales (en formato txt o html). Esto quiere decir que, con los conocimientos adquiridos, la generación de un pdf de un texto o novela histórica la podría hacer de forma bastante rápida.

  • Edición del Tirant con LaTeX (pdf): Tirant lo Blanc
  • El texto original que proviene de cervantesvirtual.com: enlace
  • El Tirant lo Blanc en la Wikipedia: enlace

Ya hace días que no escribía en el blog, i es que este trimestre ha sido muy frenético y cansado con el cambio de piso. Por si no era poco, el día antes del traslado tenía comprometido llevar unas máquinas a la fiesta social de la aseguradora ARAG.

Se lo van pasaron en grande con tres máquinas bartop y un pinball que les llevé en la furgoneta. Después, por la noche, a recogerlo todo, cuando los más marchosos todavía estaban en la discoteca.

  • http://wiki.joanillo.org/index.php/Ràdio_enllaç_Morse

He estado haciendo dos pinballs en paralelo, de las mismas dimensiones, y con plunger analógico. El primero basado en el tema de Los Vengadores de Marvel; y el segundo basado en Jacks Open, tema que ya había hecho. Al contrario de la primera versión donde utilicé pintura y máscaras para pintar con spray, esta vez se me ha complicado mucho esta técnica y finalmente he encargado los vinilos, mucho mejor.

En un anterior artículo ya explicamos la construcción del tirador de muelle analógico. Ahora hemos querido acabarlo de explicar y hacer un pequeño video.

A continuación se detalla las conexiones de los botones, el potenciómetro (A0) y el acelerómetro (SDA, SCL) en el Arduino Pro Mini:

    Arduino Pro Micro
    (plunger, acceleròmetre, i 6 botons)

			*	*
			*	* GND
			*	*
			*	* VCC
		    SDA	*	*
 		    SCL	*	*
	  4: Left. BUT0	*	*
         5: Right. BUT1	*	* A0 (Pot)
          6: Exit. BUT2	*	*
         7: Start. BUT3	*	*
          8: Coin. BUT4	*	*
         9: Enter. BUT5	*	*

Finalmente, hay que cargar el firmware en el Arduino, que incorpora la librería Joystick. El acelerómetro, que detecta la fuerza lateral ejercida sobre el mueble, a partir de un umbral de fuerza simula el disparo de un botón joystick. Todas las acciones de los botones del joystick HDI se aocian a presiones del teclado gracias al software JoyToKey, que corre en background. La asociación de teclas es la típica de Visual Pinball (el emulador). Por ejemplo, COIN está asociado a la tecla 5, y la función Tilt/nudge dispara las teclas Z/X.

Tenía miedo que un potenciómetro deslizante se deteriorase con el tiempo, y hubiese preferido utilizar algún sensor no mecánico. Tengo que decir, pero, que de momento, el funcionamiento es muy estable.

He construido dos máquinas en paralelo, una basada en el tema del Jacks Open, y la otra basada en el tema de Avengers. En una de les máquinas el funcionament no va muy fino, y he de ver todavía cuál es la causa: el ordenador, la RAM, la tarjeta de video o el plunger.

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.

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:

Con este post abro una serie de escritos y comentarios a lecturas con los que quiero homenajear, desde ahora hasta julio del 2019, el 50 aniversario de la misión Apollo XI y la llegada del hombre a la Luna. Comencemos por un clásico, una lectura que creo interesante para afrontar esta efeméride.

En 1865 Julio Verne publicó De la Tierra a la Luna. En este libro. el presidente del Gun-Club, el señor Barbicane, propone enviar un proyectil a la Luna. Y para resolver dudas, se pone en contacto con el Observatorio de Cambridge (Massachussets), y les plantea una serie de preguntas. La primera: Est-il possible d’envoyer un projectile dans la Lune?.

En el capítulol IV tenemos la respuesta de Cambridge:

Oui, il est possible d’envoyer un projectile dans la Lune, si l’on parvient à animer ce projectile d’une vitesse initiale de douze mille yards par seconde.

Vamos a repasar de donde sale este valor.

Para calcular la velocidad de escape, la velocidad que hemos de imprimir al coete será aquélla que venza todo el campo gravitatorio de la Tierra, que irá disminuyendo a medida que el proyectil vaya subiendo. La energía gravitatoria o potencial que hemos de vencer es la diferencia entre la energía potencial en la superficie de la Tierra, menos la energía potencial fuera del campo gravitatorio (en el infinito) que valdrá 0. Y esta energía potencial que hemos de superar tiene que ser igual que la energía cinética que tenemos que imprimir (conservación de la energía). Ver la imagen con las fórmulas.

Por tanto, la velocidad de escape no depende de la masa del proyectil, y tampoco depende de la dirección de lanzamiento, como hemos visto haciendo un razonamiento puramente energético.

La velocidad de escape de la Tierra es pues ve = sqrt(2 x 9,81 x 6371000) = 11180 m/s = 11,2Km/s = 40320 Km/h. Y como una yarda son 1 yd = 0.9144 m, ve = 12226 yd/s, que es precisamente la velocidad que se comenta en el libro.

Me ha parecido que este sencillo cálculo es una buena manera de empezar este homenaje a los hombres que pisaron la luna el 20 de julio de 1968, y a los científicos e ingenieros que lo hicieron posible.

Enlaces:

Page 1 of 1712345»...Last »