Arxiu de la categoria: Arduino

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.

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

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.

Plunger analògic per a virtual pinball

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:

Projecte IoT a thingspeak.com

Ja està funcionant el projecte de IoT basat en NodeCMU i el sensor de temperatura/humitat/pressió BME280, i visualització de les dades a thingspeak.com. També he començat a fer el curs de IoT a l’institut Rambla Prim, que imparteix el Jordi Binefa.

Enllaços:

Pistons pneumàtics i vàlvules per al whack-a-mole

He fet les primeres proves per la part pneumàtica del whack-a-mole. A vegades comprar a Aliexpress és realment complicat. Volia uns pistons pneumàtics d’una sola acció amb retorn de molla, i he rebut uns pistons de doble acció. El títol del producte i les fotos del producte no concordaven. Crec que al final aquests pistons de doble acció m’aniran bé, tot i que al final necessitaré el doble de solenoides (2 solenoides per pistó, tal com es veu en el video).

El compressor que utilitzo és el més senzill que he trobat. M’ha costat 10e de segona mà, i és bastant sorollós, però faré un bon amortiment del so. Un compressor de més potència i amb calderí seria ideal, però el preu s’incrementaria molt.

Així doncs, el material que es necessita per fer aquesta prova és: compressor, pistó pneumàtic, dos solenoides (vàlvules pneumàtiques), 2 ràcors per als pistons, 4 ràcors per als solenoides, una T, i tubo de 6mm. El següent pas serà la part electrònica: un arduino i els relés per controlar tots els solenoides.

Enllaços:

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.

Book: Programming Interactivity

programming_interactivity

Aquests dies estic llegint el llibre escrit per Joshua Noble i publicat per O’Reilly Media. El títol complet: Programming Interactivity. A Designer’s Guide to Processing, Arduino, and openFrameworks.

És un llibre de lectura obligatòria per als artistes que vulguin posar interactivitat en les seves instal·lacions. La idea que persegueix el llibre és que la programació i l’electrònica són ciències que poden ser apreses pels artistes que no tinguin coneixements previs en aquestes àrees.

Fes coses interessants. Si ets un dissenyador o un artista sense molts coneixements de programació, aquest llibre t’ensenyarà a treballar amb gràfics 2D i 3D, so, interacció física i circuits electrònics per crear tot tipus d’experiències interessants. Programming Interactivity explica els principiss de programació i enginyeria electrònica, i t’introdueix en tres eines lliures i fàcilment disponibles, creades específicament per a artistes i dissenyadors: Processing, Arduino, i OpenFrameworks.

Arduinotes: un sistema per prendre notes basat en Arduino

arduinotes1

Arduinotes és un sistema per prendre notes de forma ràpida i fiable, basat en un teclat d’ordinador estàndar com a sistema per a escriure (per a mi la única solució possible si es busca rapidesa i comoditat), i en una memòria EEPROM com a sistema d’emmagatzematge. És un sistema basat en el microcontrolador Arduino, amb el qual s’estan fent coses molt interessants. En un post anterior ja vaig mostrar com construir un sensor de temperatura amb Arduino.

Aquest projecte no deixa de ser una mica acadèmic (algú discutirà la utilitat d’un sistema per a escriure sense una pantalla). Ara bé, si jo fos periodista, agafaria el meu Arduinotes, buscaria el millor teclat possible (que fos còmode, amb tecles que ofereixin resistència a l’apretar-les, el més petit possible i si pot ser plegable), me n’aniria a la roda de premsa que hagués de cobrir, i enlluernaria els meus companys periodistes amb el meu kit… Si jo fos aventurer i hagués de creuar el Sahara a peu, a la meva motxilla segur que hi portaria l’Arduinotes per escriure el dietari de les meves aventures.

arduinotes2Arduinotes és fiable i funcional perquè utilitza un teclat d’ordinador, econòmic perquè està basat en Arduino i components electrònics bàsics, portàtil perquè ocupa i pesa poc, i autònom perquè consumeix molt poca bateria.

A més del hardware, s’ha de considerar el software que s’ha desenvolupat. Primer de tot les llibreries d’Arduino que s’utilitzen: la llibreria per utilitzar EEPROMs, i la llibreria per utilitzar teclats PS2 (que s’ha hagut d’adaptar); el codi font que s’ha desenvolupat, que juntament amb les llibreries representa el firmware d’Arduinotes, és a dir, el software que es carrega dins del microcontrolador; i finalment un executable escrit en llenguatge C que llegeix el port sèrie i així obtenim en un fitxer tot el contingut de la memòria EEPROM. Arduinotes utilitza una memòria EEPROM (aquí s’ha utilitzat una memòria de 64K, però podria ser més gran), que es divideix en 4 pàgines per tal de poder escriure en quatre documents separats. Incorpora les funcions d’escriptura, esborrar, guardar i lectura.

No deixis de visitar la wiki per tenir més informació, fer suggerències, o llegir la transcripció del video, o envia’m un mail (joanqc@gmail.com) si t’ha interessat el projecte o vols demanar més informació o fer qualsevol suggerència. Aquí us deixo l’enllaç del projecte a wiki.joanillo.org i el video del projecte.