M’està rondant el cap fer una sèrie d’experiments captant dades amb sensors i processant les dades a l’ordinador. Espero parlar-ne aviat, hi ha bastantes idees xul·les que es poden desenvolupar. Aquí va una petita mostra. I una de les tècniques claus per fer tot això que vull fer és enviar pel protocol sèrie les dades del sensor (arduino) a un programa C++ que s’està executant a l’ordinador.

En la foto es pot veure com es recull les dades del sensor a l’ordinador. Les dades es van gravant en un fitxer, i es poden processar a posteriori. En aquest cas tinc un sensor LDR que capta la llum solar, i es tracta de veure com decau la il·luminació a mida que es fa fosc. Quin comportament tindrà? L’estat inicial és assimptòtic (il·luminació plena), i l’estat final també (foscor). Què passa pel mig? Sabem que a la natura no li agraden els canvis bruscos. Hem d’unir les dues rectes amb una corba. Això ens dóna una corba sigmoide, en la qual hi hauria un punt d’inflexió de canvi màxim en el decreixement de la il·luminació? Serà cert aquest comportament, aquest model matemàtic? Anem a comprovar-ho.

Un cop tenim el fitxer amb les dades, les processarem amb les llibreries científiques numpy i scipy de Python. Com podem veure en el codi, es proposa una línia de màxim ajustament de tipus sigmoide. I efectivament obtenim una bona solució i un bon ajustament com es pot veure en la gràfica. En aquest cas, l’equació obtinguda és:

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

No hem de fer massa cas a les dades de l’eix de les X, són tan sols punts. Senzillament tenir en compte que la distància entre punts són 30 segons.

Aquesta és una senzilla i bona demostració d’estiu (un divertimento) de què la natura es descriu amb funcions matemàtiques. Les mates són una bona eina per descriure el comportament de la naturalesa. I que els fenòmens exponencials són inherents a la Física.

Aquest últim any he estat estudiant mètodes numèrics i les llibreries científiques de Python, i realment hi veig un munt de possibilitats, que vull anar explorant aquest curs que començarà d’aquí poc.

# -*- 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

Aquest és un projecte divertit i senzill per fer amb la Raspberry Pi, molt adient ara per l’estiu. He estat configurant la Raspberry Pi i els diferents mòduls del projecte MagicMirror, i ja puc mostrar el video de com quedarà tot plegat. De totes maneres, el projecte l’hauré d’acabar més endavant quan decidim on podem col·locar el mirall i les dimensions que tindrà, doncs veig que comprar el 2-way mirror és la part més delicada, i un mirall ben gros se’n va del pressupost.

Un dels objectius per realitzar aquest projecte és que últimament m’estic conscienciant molt de com de malament parlem la nostra llengua (el català) i de com s’ha empobrit en general. Per tal de recuperar les expressions més genuïnes (defugint el calc del castellà allà on sigui possible), hi ha tot un moviment de conscienciació. Jo vull aportar el meu granet de sorra fent aquest mirall màgic que ens donarà una lliçó de bon català cada cop que ens mirem al mirall, per exemple quan ens rentem les dents.

Un dels mòduls per defecte de MagicMirror és la sindicació de continguts per tenir els titulars de les notícies del dia. Per exemple, el meu mirall està suscrit al diari ARA. Doncs bé, he adaptat aquest mòdul per crear el meu mòdul propi de MagicMirror (el_catala_com_cal). Ha estat bastant fàcil. Només cal crear i editar un fitxer XML amb les lliçons de català que vull visualitzar. De moment és això: un fitxer estàtic que hauré d’editar cada cop que vulgui afegir contingut.

Seria el mes de febrer o març que em vaig posar a remenar i estudiar el LaTeX. El motiu principal era l’edició d’equacions i la notació científica, que és allà on el LaTeX hi fa una diferència gran. Al darrera hi ha la idea de fer uns articles (i/o llibre) sobre aspectes curiosos i quotidians relacionats amb les equacions diferencials i mètodes numèrics amb Python.

Lluny d’aquest objectiu científic, per tal d’aprendre LaTeX em vaig posar a editar el Tirant lo Blanc (hagués pogut triar una novel·la més curta!). Han passat uns mesos i al final he tingut temps d’acabar la meva edició del Tirant lo Blanc, que tinc el goig de presentar en primícia mundial.

Com que el text és molt llarg (el pdf té quasi bé 1000 pàgines), s’ha utilitzat diverses tècniques de programació i substitució automàtica de text per tal de generar ràpidament el LaTex a partir dels textos originals (en format txt o html). Això vol dir que, amb els coneixements adquirits, la generació d’un pdf d’un text o novel·la històrica la podria fer de manera bastant ràpida.

  • Edició del Tirant amb LaTeX (pdf): Tirant lo Blanc
  • El text original provinent de cervantesvirtual.com: enllaç
  • El Tirant lo Blanc a la Viquipèdia: enllaç

Festa Arcade a ARAG

13/06/2019

Ara fa dies que no escrivia en el bloc, i és que aquest trimestre ha estat molt frenètic i cansat amb tot el canvi de pis. Per si no era poc, el dia abans del trasllat tenia emparaulat portar unes màquines per la festa social de l’asseguradora ARAG.

S’ho van passar d’allò més bé amb tres màquines bartop i un pinball que els vaig portar amb la furgoneta. Després, a la nit, a recollir-ho tot, quan els més marxosos encara estaven a la discoteca.

Ràdio-enllaç Morse

26/02/2019

Sorry, this entry is only available in Español.

He estat fent dos pinballs en paral·lel, amb les mateixes dimensions, i amb plunger analògic. El primer basat en el tema d’Avengers de Marvel; i el segon basat en Jacks Open, tema que ja havia fet. Al contrari de la primera vegada, on vaig fer servir pintura i màscares per pintar amb spray, aquesta vegada se m’ha complicat molt aquesta tècnica i finalment he encarregat els vinils, molt millor.

En un anterior article ja vam explicar la construcció del tirador de molla analògic. Ara he volgut acabar-ho d’explicar i fer un petit video.

A continuació es detalla les connexions dels botons, el potenciòmetro (A0) i l’aceleròmetre (SDA, SCL) a l’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	*	*

Finalment, s’ha de carregar el firmware a l’Arduino, que incorpora la lllibrería Joystick. L’aceleròmetre, que detecta la força lateral exercida sobre el moble, a partir d’un llindar de força simula el disparo d’un botó joystick. Totes les accions dels botons del joystick HDI s’associen a pressions del teclat gràcies al software JoyToKey, que corre en background. L’associació de tecles és la típica de Visual Pinball (l’emulador). Per exemple, COIN està associat a la tecla 5, i la funció Tilt/nudge dispara lrs teclrs Z/X.

Tenia por que un potenciòmetre lliscant es deteriorés amb el temps, i hagués preferit utilitzar algun sensor no mecànic. He de dir, però, que de moment, el funcionament és molt estable.

He construït dues màquines en paral·lel, una basada en el tema del Jacks Open, i l’altre basada en el tema de Avengers. En una de les màquines el funcionament no va molt fi, i he de veure encara quina és la causa: l’ordinador, la RAM, la tarja de video o el plunger.

Finalment he acabat el pinball dels Avengers. He estat fent dos pinballs en paral·lel, amb les mateixes dimensions, i amb plunger analògic.

He trigat bastant de temps de repassar les 200 taules per tal d’adaptar-les a plunger i tilt analògics. Vam publicar aquest article explicant la solució final de la construcció del tirador de molla, basat en Arduino.

Estic fent un parell de pinballs, i aquesta vegada sí que vull incloure un plunger analògic. Això és bastanta feina, doncs significa construir un tirador de molla fiable, i configurar/repassar les 200 taules amb les que treballo. A més del tirador analògic també inclouré la funció de TILT, és a dir, quan doni un cop lateral al moble vull que la trajectòria de la bola canvïi, i així s’evita que la bola caigui en el drain.

Faré servir un Arduino Pro Micro, que em farà de joystick/gamepad a través del port USB. Per tal de què el sistema operatiu el reconegui com a HID (Human Interface Device), el firmware de l’Arduino ha d’incloure la llibreria joystick. L’arduino té entrades digitals/analògiques i sortides digitals per tal de connectar els sensors i els botons necessaris. De fet, amb l’ús de l’arduino ja no caldrà utilitzar la interfície I-PAC que es fa servir en aquest tipus de projectes.

En la foto es pot veure el segon prototip de plunger analògic, que ja és funcional. Com a sensor faré servir finalment un potenciòmetre linial lliscant. De moment la molla que faig servir és una mica forta. N’estic buscant una que sigui més fluixa, però que m’asseguri el retorn del potenciòmetre a la seva posició inicial. Ja sé que utilitzar un potenciòmetre (element mecànic) no és la millor solució, però de moment m’està funcionant sense problemes. Altres opcions a considerar com a sensors són un rotary encoder (que també és mecànic), i dos solucions que no són mecàniques (llarga vida) però que són més difícils i cares i que he vist per Internet: utilitzar un CCD linear sensor array (TAOS TSL 1410R); i utilitzar un sensor de distància LVDT (és car, però un se’l pot construir).

Com a conclusió, donaré una oportunitat al potenciòmetre linial lliscant, i el seu valor es llegirà en una entrada analògica de l’Arduino.

Per a la funció tilt necessito un acceleròmetre. Faré servir el MPU-6050 GY-521, que és un acceleròmetre de tres eixos i giroscopi (només necessito llegir l’acceleració en un eix). Fa servir el bus I2C per connectar-se a l’Arduino (entrades digitals). A més, la resta de botons (en principi 4 botons frontals i els dos botons laterals dels flippers) també utilitzaran entrades digitals de l’Arduino.

El que porta més feina és repassar les 200 taules i modificar-les per tal de què el plunger analògic funcioni correctament. Hi ha diverses maneres d’implementar el tirador, unes taules més fàcils que d’altres. Com sempre, moltes gràciess a la comunitat de Visual Pinball i a la gent que ha importat totes les taules per tal de què tothom les pugui disfrutar.

Ara ja tinc la feina quasi acabada, però fins que no tingui acabat el moble i munti el plunger en la seva posició final no podré fer les proves definitives ni la versió final del firmware. Ara ja falta poquet. Quan hagi acabat el projecte faré un video.

Si a algú li interessa la meva solució final, que em contacti i en parlem.

Referències:

Amb aquest post enceto una sèrie d’escrits i comentaris a lectures amb els que vull homenatjar, des d’ara fins el juliol del 2019, el 50è aniversari de la missió Apollo XI i l’arribada de l’home a la Lluna. Comencem per un clàssic, una lectura que crec que és interessant per afrontar aquesta efemèride.

El 1865 Juli Verne va publicar De la Terra a la Lluna. En aquest llibre. el president del Gun-Club, el senyor Barbicane, proposa d’enviar un projectil a la Lluna. I per resoldre dubtes, es posa en contacte amb l’Observatori de Cambridge (Massachussets), i els planteja una sèrie de preguntes. La primera: Est-il possible d’envoyer un projectile dans la Lune?.

En el capítol IV tenim la resposta 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.

Anem a repassar d’on surt aquest valor.

Per calcular la velocitat d’escapament, la velocitat que hem d’imprimir al coet serà aquella que venci tot el camp gravitatori de la Terra, que anirà disminuint a mesura que el projectil s’enfili cap amunt. L’energia gravitatòria o potencial que hem de vèncer és la diferència entre l’energia potencial a la superfície de la Terra, menys l’energia potencial fora del camp gravitatori (a l’infinit) que valdrà 0. I aquesta energia potencial que hem de vèncer ha de ser igual que l’energia cinètica que hem d’imprimir (conservació de l’energia). Veure la imatge amb les fórmules.

Per tant, la velocitat d’escapament no depèn de la massa del projectil, i tampoc depèn de la direcció de llançament, com hem vist fent un raonament purament energètic.

La velocitat d’escapament de la Terra és doncs ve = sqrt(2 x 9,81 x 6371000) = 11180 m/s = 11,2Km/s = 40320 Km/h. I com que una yarda són 1 yd = 0.9144 m, ve = 12226 yd/s, que és precisament la velocitat que es comenta en el llibre.

M’ha semblat que aquest senzill càlcul és una bona manera de començar aquest homenatge als homes que van trepitjar la Lluna el 20 de juliol de 1968, i als científics i enginyers que ho van fer possible.

Enllaços:

Page 1 of 1712345»...Last »