Arxiu de la categoria: Joanillo Productions

Block (or book) stacking problem

Aquest matí he fet el problema d’apilar llibres (o blocs). Es tracta d’estudiar sota quines condicions puc apilar blocs (de longitud L) de manera que els vagi desplaçant un respecte l’anterior, de manera que no caiguin. Quina és la condició límit per tal de què no caiguin? Amb blocs de longitud L puc aconseguir un desplaçament de longitud L?

Aquest problema recordo haver-m’hi barallat (i crec que en el seu dia no el vaig solucionar) l’estiu de 1989 a Bagà, doncs el problema estava enunciat en el Schaum de Mecànica Teòrica (Murray R, Spiegel). He cercat el llibre (l’he trobat en pdf a la xarxa, segur que el tinc en una estanteria), i a la foto es veu l’enunciat del llibre en la pàg 249. NOTA: Val a dir que la figura que ensenya el llibre està malament i que genera confusió: és al revés, el bloc de dalt és el que sobresurt la meitat, i els blocs de baix són els que estan més junts (la figura del llibre té un apilament clarament inestable, els blocs segur que cauen perquè el centre de gravetat està fora del bloc de més a sota).

En aquella època no existia Internet, o sigui que m’hi vaig barallar sense poder demanar ajuda. Ara l’he resolt (tot sol, va a dir, veure el pdf en els enllaços de sota), i després de resoldre’l he cercat informació complementària que he trobat d’allò més interessant (videos de Youtube inclosos), veure els enllaços.

La solució. Tot el sistema dels blocs 1…N-1 que estan sobre el bloc N no cauen si el seu centre de masses cau just en l’extrem del bloc N. Es pot resoldre de forma iterativa: el bloc 1 s’aguanta sobre el bloc 2 si el posem a la meitat, L/2. El sistema blocs 1+2 s’aguanta sobre el bloc 3 si el centre de masses dels blocs 1+2 està just en l’extrem del bloc 3. Anem posant blocs, i anem calculant els centres de masses, i anem veient quina és la condició d’equilibri. I al final (veure la solució) es troba que el centre de masses és una sèrie harmònica:

Xi+1cm = L/2 * (1 + 1/2 + 1/3 + … + 1/i)

I ara una mica de matemàtiques: la sèrie harmònica és divergent (encara que divergeix molt lentament). La qual cosa significa que es pot aconseguir un desplaçament teòric tan gran com es vulgui (veure el video de l’enllaç, on s’aconsegueix un desplaçament bastant gran).

Ara només em falta fer l’experiència amb la Maria i el Pere, a veure si ho podem fer aquest mes. Si ho aconseguim, penjarem també el video.

Enllaços:

Troballa de la constant de gravitació g

Després d’ajustaments diversos, ja estic en condicions de realitzar l’experiment del pèndol per trobar la constant de la gravetat.

He provat diferents tipus de sensors, i finalment em quedo amb uns sensors d’efecte Hall que detecten el pas de l’iman (el pes del pèndol és un iman). Encara em falten fer unes quantes millores. De fet, la fórmula que fem servir (moviment harmònic) només és vàlida quan sin(x) = x, i això implica que l’estructura del moble ha de ser més gran i el cable més llarg, per poder limitar l’angle alfa, tot mantenint el període del cicle.

OpenStreetMaps a rutesgps.joanillo.org

He actualitzat la web de rutesgps.joanillo.org. Ho tenia amb la API de Google Maps i feia temps que no funcionava degut a que la API KEY havia caducat.

A l’assignatura de Javascript, a l’institut, el curs passat ja no vam fer Google Maps, i només la API de OpenStreetMaps (OSM). Els mapes potser no són tan xulos, però son plenament funcionals, i amb el temps anirà millorant gràcies a la col·laboració de la comunitat.

A més, he començat a editar i col·laborar els mapes de OSM, hi ha molta feina per a la comunitat. Aquests dies m’ha vingut per aqui perquè m’he comprat un GPS de ciclisme, el Bryton Rider 450, que m’està donant molt bons resultats. El dissabte passat vam anar a fer una ruta pel massis del Garraf, des de Garraf fins a Begues, i tornada.

Conclusió: adéu Google Maps, endavant OSM!

Experiment del pèndol per trobar la constant de gravitació g

Aquest estiu vaig estar fent proves per captar la senyal d’un sensor LDR a l’ordinador, amb un programa C++ que llegia pel port sèries les dades que enviava l’Arduino. I es va comprovar com la lluminositat al capvespre disminueix com una sigmoide (1).

Aquestes eren les primeres proves per l’experiment que volia fer i documentar, que és la troballa de la constant g a partir de l’experiment del pèndol. Resumint, mesurem el periode del pèndol per diferents longituds, i podem trobar la constant g=9.81 m/s2. Sabem que el periode del pèndol no depèn de la massa, sinó només de la longitud de la corda i de la constant g òbviament.

En la foto podem veure l’esquema de l’experiment. Tenim un pèndol; un fotodetector amb Arduino capaç de detectar el pas del pèndol; enviem pel port sèrie a l’ordinador les dades; un programa C++/SDL llegeix les dades del port sèrie; processem les dades amb Python i trobem la recta de regressió; calculem g i l’error corresponent. Tot això és el que desenvoluparem en el proper post.

A part de l’experiment de trobar la constant g, la idea és fer una sèrie d’experiments que segueixin el mateix esquema. Si tenim diversos experiments preparats, es podria fer més endavant una proposta didàctica per a Secundària.

Experiments d’estiu: model matemàtic de com decau la llum solar quan es fa fosc al capvespre

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

Magic Mirror amb la Raspberry Pi (Smart Mirror)

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.

Aprenent LaTeX: el Tirant lo Blanc

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ç

Mini Virtual Pinball basat en Jack’s Open

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.

Tirador de molla i Tilt per a Virtual Pinball (video)

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)

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

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.

Mini virtual pinball basat en Los Vengadores de Marvel

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.