Prove Arduino: sensore ad effetto di Hall

Per un nuovo progetto casalingo su cui sto cominciando a lavorare ho realizzato un semplice circuito con due sensori ad effetto di Hall collegati a una scheda Arduino Uno.

Arduino: test con sensore ad effetto di Hall
Arduino: test con sensore ad effetto di Hall

Dal punto di vista circuitale è tutto molto semplice. Come sensore si è utilizzato il A1120EUA di Allegro Microsystems, connesso a una linea di I/O di Arduino secondo il seguente schema:

Schema di collegamento per un sensore a effetto di Hall A1120
Schema di collegamento per un sensore a effetto di Hall A1120

Vcc (5V) e GND sono connessi ai corrispondenti pin della scheda Arduino Uno, OUT viene connesso a un I/O digitale della scheda Arduino.

Se nessun magnete è prossimo al chip A1120, su OUT si leggerà un livello alto (5V), mentre se si avvicina un magnete si leggerà un livello basso (0V).

Per valutare eventuali problemi di interferenza tra vari sensori, il primo circuito realizzato ha già due sensori, ognuno collegato a una diversa linea di I/O. Nel loop principale  dello sketch Arduino vengono letti i due input e se almeno un magnete è rilevato viene acceso il led L presente sulla scheda connesso alla linea di I/O 13.

Inoltre sulla console seriale nella linea viene inviato un messaggio con lo stato degli I/O tutte le volte che c’è una variazione. A seguire lo sketch completo.

 

CREDITS: Come spunto per il circuito e lo sketch si è preso un articolo sul sito inglese hobbytronics.

ChessX: Aggiungere un motore (Stockfish)

Dopo l’articolo in cui veniva spiegato come installare ChessX su un PC GNU/Linux, vediamo oggi come aggiungere un motore al programma in modo che si possano fare analisi di partite. Il motore scelto è Stockfish.

Per prima cosa occorre scaricare Stockfish e compilarlo sul sistema. Siccome è gestito su github, per scaricare i sorgenti sotto controllo di configurazione occorre avere git installato sul proprio PC. Se non presente, dare quindi il comando:

$ sudo apt-get install git

Una volta installato git scaricare i sorgenti di Stockfish con il comando:

user:~$ git clone https://github.com/mcostalba/Stockfish.git stockfish
Cloning into 'stockfish'...
...
user:~$ _

Se tutto è andato bene viene creata una directory stockfish con all’interno i sorgenti. Per compilare, entrare nella directory stockfish/src e dare il seguente comando:

user:src$ make profile-build ARCH=x86-64-modern

NOTA: l’uso dell’architettura x86-64-modern va bene se avete un PC nuovo basato sulle recenti architetture Intel, altrimenti potete provare con x86-32 per PC vecchi o anche x86-64 su architettture a 64 bit di cui non siete completamente sicuri della “modernità” (o se avete problemi con la modern).

Se tutto è andato bene all’interno della directory deve comparire un file eseguibile di nome stockfish. Copiatelo dove preferite e provate a lanciarlo. Se tutto va bene deve comparire un messaggio e il programma rimane in attesa:

pf:stockfish$ ./stockfish
Stockfish 211113 64 SSE4.2 by Tord Romstad, Marco Costalba and Joona Kiiski
_

Dare Ctrl-C per uscire dal programma.

Il secondo passo da compiere consiste nell’associare a Stockfish il suo database delle aperture. Scaricarlo dalla pagina dei download del sito, decomprimere l’archivio e copiare il file Book.bin nella directory dove si trova l’eseguibile di Stockfish creato in precedenza.

Passando a questo punto a ChessX, vediamo come agganciare il motore.

Andare nel menù Edit e scegliere “Preferences”, qui selezionare il tab “Engines” e cliccare sul pulsante “Add”. Cercare l’eseguibile di Stockfish e selezionarlo. Nella linea “Directory” selezionare la directory dove si trova l’eseguibile di Stockfish (e il file Book.bin).

Finestra Preferences/Engines dopo il setup di Stockfish
ChessX: Finestra Preferences/Engines dopo il setup di Stockfish

Come ultimo passo prima di chiudere la finestra delle preferenze, cliccare su “Options”. Si entra così nella finestra per il setup dei parametri UCI (Universal Chess Interface, il protocollo con cui la GUI comunica con il motore). Qui per il momento è importante solo impostare il nome del database delle aperture. Cambiare quindi il parametro “Book File” assegnandogli il valore “Book.bin“.

ChessX: finestra per le impostazioni delle opzioni UCI
ChessX: finestra per le impostazioni delle opzioni UCI

A questo punto per dimostrare che il motore funziona basta impostare una posizione (menù Edit -> Setup Position), aprire il pannello di Analisi (View -> Analysis) e cliccare sul pulsante “Analysis”. Io ho provato con il seguente matto in otto mosse tratto da “Strategia e tattica degli scacchi” di Georgij Lisitsyn:

Il bianco muove e da matto in 8 mosse
Il bianco muove e da matto in 8 mosse

Quello che mi piacerebbe molto fare a questo punto sarebbe utilizzare il motore per giocare una posizione contro di lui. Questa è una funzionalità molto utile per allenarsi per esempio nei finali. Purtroppo però questo allo stato di sviluppo attuale del programma non è possibile. L’unica cosa che si può fare è analizzare una partita, cosa che vedremo in una prossima puntata.

Per allenarsi a giocare posizioni contro un’engine la soluzione più economica consiste probabilmente nell’installare una GUI semplice come ad esempio XBoard. e associarci il motore Stockfish. Operazioni banali, sulle quali non starò a dilungarmi.

Letture interessanti, 6 febbraio 2013

Le letture interessanti di questi giorni riguardano tutte lo sviluppo software, attività che svolgo per lavoro ma ancora con una discreta dose di passione nonostante il numero di anni che sono passati da quando ho iniziato.

La prima lettura è “Functional Programming Basics. What’s It All About?” di Robert C. Martin sul numero di gennaio di PragPub. La lettura di questo articolo mi ha spinto a cercare qualche altra informazione sulla programmazione funzionale e mi ha fatto trovare la seconda lettura “Functional Programming For The Rest of Us” di Slava Akhmeche, un bell’articolo che cerca di far capire le potenzialità della programmazione funzionale ai programmatori tradizionali e un po’ arrugginiti come me.

Una conseguenza di queste letture è un’aggiornamento dei propositi per l’anno nuovo: oltre ai design pattern quest’anno dovrò provare a studiare anche un linguaggio funzionale. Pensavo ad Haskell.

ChessX: Installazione sotto GNU/Linux

In un precedente articolo abbiamo introdotto ChessX, un gestore di Database per partite di scacchi che ho deciso di provare sul mio nuovo PC con linux (Ubuntu 12.10). In questo primo articolo vedremo come installarlo, cosa che può risultare a prima vista problematica visto che il programma non è disponibile su nessun repository della distribuzione Ubuntu e per questo va scaricato come sorgente e compilato sulla macchina dove si vuole utilizzare.

La pagina per la compilazione sul sito di ChessX è piuttosto spartana e non da indicazioni su come preparare il PC, il che, soprattutto per un utente non specialista, può essere un problema. Il programma utilizza le librerie Qt, ed è quindi necessario installarle insieme a tutti i tool necessari per la compilazione dei programmi in tale ambiente. Fortunatamente non è complicato soprattutto perché Ubuntu fornisce una serie di tool che rendono facile questa operazione. Uno di questi tool, auto-apt, lo ho scoperto per l’occasione.

Come al solito i motori di ricerca aiutano, e dopo una rapida ricerca ho trovato una pagina di un utente Google+ (thank you very much Mr. Summers!) che spiega pressoché tutto. Per installare un’ambiente di sviluppo per Qt4 basta quindi dare da command line i seguenti comandi:

user@host:~$ sudo apt-get install libqt4-dev
user@host:~$ sudo apt-get install auto-apt
user@host:~$ sudo auto-apt update-local
user@host:~$ sudo auto-apt update
user@host:~$ sudo auto-apt updatedb

Siccome voglio utilizzare la versione attualmente sotto sviluppo (non è detto che non riesca anche a trovare un po’ di tempo per contribuire al progetto), occorre installare anche subversion:

user@host:~$ sudo apt-get install subversion

A questo punto per scaricare su una directory locale i sorgenti attualmente in sviluppo dare il seguente comando:

user@host:~$ svn co http://svn.code.sf.net/p/chessx/code/trunk chessx

NOTA: in alternativa è possibile scaricare l’ultima versione ufficialmente rilasciata andando nella pagina dei download e cliccando sull’opportuno link che rimanda ai sorgenti dell’ultima release (ad oggi, novembre 2013, è la 1.0.0 “Beetle”).

Finalmente c’è tutto, per compilare i comandi da dare sono i seguenti:

user@host:~$ cd chessx
user@host:~$ qmake
user@host:~/chessx$ sudo auto-apt run make

Se tutto è andato bene, per eseguire il programma, nel caso si sia utilizzata la versione di sviluppo (presa con subversion) dare i seguenti comandi:

user@host:~/chessx$ cd release
user@host:~/chessx/release$ ./chessx

oppure, nel caso si sia presa la versione di rilascio:

user@host:~/chessx$ cd bin
user@host:~/chessx/bin$ ./chessx

Ecco a riprova del mio “successo” la prima schermata dell’applicativo appena lanciato!

 

ChessX - Schermata di avvio
ChessX – Schermata di avvio

Alla prossima puntata!

 

Scacchi su PC GNU/Linux: ChessX

Per chi vuole utilizzare un PC con sistema operativo GNU/Linux semplicemente per giocare a scacchi, o per effettuare operazioni più sofisticate come per esempio analizzare le proprie partite o costruire e gestire un database di partite, purtroppo le scelte non sono molte. Nessuno dei programmi maggiormente utilizzati dai giocatori, amatori e professionisti, hanno una versione per il sistema con il pinguino.

A compensare – molto in parte – provvedono i soliti volenterosi dell’open source che mettono a disposizione diversi programmi dalle caratteristiche che, se non arrivano a competere con quelle dei programmi commerciali, sono sono comunque non disprezzabili.

Il problema principale non sono le “engine”, i motori, da utilizzare per giocare contro il computer o per analizzare le partite (di queste ce ne sono diverse anche molto forti), bensì le GUI e i programmi per mantenere database di partite, cioè il tipo di programmi più apprezzati dai professionisti e dai giocatori di circolo.

Il programma che storicamente ha avuto il ruolo maggiore in questo contesto è Scid. In passato lo ho utilizzato (o meglio ho utilizzato una delle sue varianti più complete, ChessDB), ed è sicuramente un buon programma. Il suo problema maggiore è che il suo sviluppo è ormai fermo da tempo, mentre uno più veniale è che risente di una interfaccia utente oramai piuttosto “antica”.

Premesso che in ogni caso mi sento di consigliare senza problemi i programmi prima citati, a questo giro voglio provare a investire un po’ di tempo per provare a utilizzare un altro programma che oggi risolve almeno in parte i problemi sopra citati e cioè ChessX. L’interfaccia è moderna e c’è un team di sviluppatori che ad oggi lo sta portando avanti (seppur con la lentezza tipica dei progetti open-source sviluppati senza “sponsor” e solo per passione da persone che nella vita “reale” fanno ben altro).

Inizio quindi una serie di articoli su questo argomento. Nella prossima – prima – puntata vedremo come installare il programma su una macchina GNU/Linux a partire dai sorgenti scaricabili dal sito.

Screencasting su linux

Lo Screencasting è la procedura utilizzata su un PC, o altro dispositivo, per registrare video e audio dal desktop. Attraverso l’uso di opportuni software è possibile ottenere uno screencast, un video, corredato di traccia audio che descrive, di solito meglio di 1.000 parole, una procedura da seguire su PC. Di esempi di screencast è pieno il mondo, a titolo di esempio qui sotto se ne può vedere uno tratto dal sito Pragmatic Programming (che tralaltro screencast li produce e li vende).

Realizzare screencast è facile. Esistono vari software per farlo, alcuni gratuiti, altri a pagamento. Qui descriverò un metodo per macchine linux. Il programma da utilizzare è recordmydesktop.

Per installarlo su macchine Debian/Ubuntu è possibile utilizzare il seguente comando, (anche se l’equivalente esiste sicuramente per le altre distribuzioni):

sudo apt-get install recordmydesktop

Una volta ottenuto il software, per registrare l’intero desktop basta lanciare il comando:

recordmydesktop

una volta terminata la registrazione interrompere il programma con Ctrl-C e lasciare terminare l’encoding del file multimediale. Il file generato dal programma è in formato OGV. Non entro nel merito dei formati multimediali perché l’argomento è vasto e complesso e attualmente fuori dalla mia portata. L’unica cosa che vale la pena menzionare è che il formato OGV non è ben supportato da macchine non linux e anche YouTube per esempio sembra non gestirlo (a dire il vero oggi non ho provato).

Il file ottenuto va quindi convertito in un formato video più “tradizionale” (qualunque cosa questo significhi) e per farlo si possono utilizzare vari programmi. Qui menziono quelli che ho provato io:

  • mencoder: per esempio con il seguente comando:

mencoder -idx <file_input.ogv> -ocv lavc -oac mp3lame -o <file_output.avi>

si ottiene un file AVI. Nella prova fatta stanotte, nel file risultante dalla conversione, ho però ottenuto un disallineamento tra la traccia audio e quella video che di fatto rendeva il prodotto inutilizzabile.

  • avconv: questo programma è l’evoluzione del famoso ffmpeg (quest’ultimo ad oggi dichiarato obsoleto) e a tutti gli effetti lo sostituisce. Trattasi di un programma molto complesso e potente con molte opzioni che permettono di determinare il formato e la qualità della traccia audio e video risultante sul file di output. Con il seguente comando sono riuscito a convertire un OGV in modo corretto e a farlo riprodurre senza problemi da YouTube:

avconv -i <file_input.ogv> -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a mp2 <file_output.avi>

Al momento non sono molto soddisfatto della qualità del video, e non sono riuscito a codificare la traccia audio in MP3, ma almeno il file risultate ha una dimensione gestibile e funziona.

Per oggi solo un’ultima nota. Spesso per uno screencast risulta utile registrare il contenuto di un’unica finestra. Per fare questo con recordmydesktop basta utilizzare l’opzione --windowid. Per esempio:

recordmydesktop --windowid 0x2a00006

Per scoprire il window id della finestra da registrare, lanciare per esempio il comando:

xwininfo | awk '/xwininfo: Window id/{print $4}'

e  cliccare con il mouse sulla finestra di interesse.

Per oggi è tutto.

 

Design by Contract

A dimostrazione di quanto sia oramai arrugginito sul lavoro, non passa giorno in cui non scopra qualche nuovo concetto di ingegneria del software di cui ignoro l’esistenza e che invece meriterebbe quantomeno un approfondimento… Oggi per esempio è il turno del Design by Contract, che ho scoperto grazie a un feed che mi ha segnalato un interessante articolo dal blog di Andrzej Krzemieński: “Preconditions — Part I“.

Senonaltro da adesso in poi quando mi proporranno un contratto per scrivere l’interfaccia di una classe non cadrò dalle nuvole.

 

Propositi per l’anno nuovo – I

Tra i propositi che mi porto appresso da un po’ di tempo c’è quello di aggiornarmi sulla mia specialità lavorativa: lo sviluppo del software. Per questo volevo studiare i design pattern, scoperti di recente grazie a un progetto portato avanti con giovani virgulti dell’Università di Firenze (il problema dell’invecchiamento dei progettisti all’interno dell’azienda per cui lavoro è un problema di cui prima o poi dovrò provare a parlare).

Comunque, il libro da leggere è evidentemente Gamma et. al. “Design Patterns: Elements of Reusable Object-Oriented Software” fortunatamente disponibile anche in formato Kindle. Ho trovato anche questo interessante sito, che salvo qui così almeno lo ritrovo: “Huston Design Patterns” di Vince Huston.

Letture interessanti, 30/11/2012

Le letture interessanti di oggi:

TOP STORY: Da Il PostVivere senza provare dolore. La storia di Ashlyn Blocker, bambina americana che a causa di una mutazione genetica non sente il dolore, raccontata dal New York Times Magazine.

Da Ars Technica: How four Microsoft engineers proved copy protection would fail. Ten years ago, a Microsoft paper showed how the “darknet” would defeat DRM.

Da O’Reilly radar: To eat or be eaten? What’s interesting isn’t software as a thing in itself, but software as a component of some larger system.

Da Wired ItaliaIl genio dell’assonometria. 365 anni fa moriva Bonaventura Francesco Cavalieri, inventore del metodo assonometrico che porta il suo nome

Da Fermare il Declino:  I troppi non detti di Bersani nell’agenda economica del suo Pd.