Arduino al Coder Dojo Ticino

by Gaspar Torriero on 07/11/2014

Metto qui le slide che userò domani al Coder Dojo Ticino. Partiremo seguendo i capitoli 1 e 2 del libro dei progetti dello Starter Kit per prendere confidenza col mezzo, e proseguiremo con Scratchbot che è una versione appositamente modificata di Scratch per interagire con Arduino.

Tra parentesi: oggi è il compleanno di questo blogghettino, nato il 7 novembre 2001. 3.169 post, e non mi sono ancora stufato.

{ 1 comment }

Un mese fa mi è arrivato a casa a Como lo scatolino di Sam Knows, un servizio che cerca di misurare il più accuratamente possibile le reali prestazioni dei fornitori di accesso internet nel mondo. I grafici del primo mese di utilizzo non sono incoraggianti.

What is ‘UDP Packet Loss’?

Packet loss is relatively rare in modern networks [e infatti]. That said, some broadband providers have been known to suffer high packet loss at peak times. If this is the case for your ISP, you may find that time sensitive applications such as Voice over IP (VoIP) and online gaming will suffer. Packet loss is recorded as a percentage; lower is better.

ADSL Alice 20Mb di Telecom Italia ADSL Alice 20Mb di Telecom Italia

What is ‘UDP Latency’?

This test measures how long it takes one packet to be sent to one of our test servers and then return back to you. This can effectively be thought of as the responsiveness of the connection between your home and our servers on the Internet. Times are recorded in milliseconds; lower is better.

ADSL Alice 20Mb di Telecom Italia ADSL Alice 20Mb di Telecom Italia

 

Per la cronaca, ho una connessione Alice 20 Mega che da qualche mese (da quando a Como hanno messo la fibra fino al marciapiede?) funziona al massimo nominale, mentre l’anno scorso viaggiava tra gli 11 e i 14 Mbit in download.

netgear_2014_10

 

Ci sarebbe l’offerta tuttofibra che promette 30Mb in download e 3Mb in upload nominali, anche se ovviamente “l’effettiva velocità dipende da molteplici e variabili fattori tecnici”. Offerta che potrei anche considerare se riguardasse solo la connessione. Ma invece viene assieme a un sacco di altre cose che non mi interessano:

  • il telefono VoIP che ho già Skype, grazie
  • le chiamate gratuite illimitate ma non più di 50 minuti al giorno
  • I telefoni cordless “a solo 1€” ma se disdici il contratto li paghi 50€
  • Internet Pay “per acquistare online contenuti digitali con addebito sul conto (Telecom Italia, ho da darvi una brutta notizia: c’è già PayPal)

Quindi per ora soprassiedo, aspettando che la perdita di pacchetti UDP scenda a 0 e che la latenza media si attesti sotto i 10ms.

{ 2 comments }

iBeacon trials and errors

by Gaspar Torriero on 30/07/2014

Trials:

  • Selected users of the American Airlines app will be sent messages aimed primarily at guiding them round the airport. This will include information about walking time to gates and boarding updates.
    American Airlines says that 65% of passengers arrive at their gate early because they are worried about being late or getting lost.
  • Tesco’s trial began earlier this year in its Chelmsford store. It has said that the technology won’t be used to push out marketing messages, but will instead notify shoppers that their pre-ordered goods are waiting for them.
    Ultimately iBeacons could be a central feature in Tesco’s new beta MyStore app, helping customers to find specific items in-store.

And errors:

  • Initially launched with just 100 users, the trial involved sending marketing messages to customers as they entered one of Eat’s stores.

  • The technology enabled fans at 20 baseball stadiums to check-in at games and receive exclusive offers.

  • Virgin passengers with an electronic boarding pass loaded in their iPhone Passbook app could receive messages relevant to their location within the airport.

  • For example, passengers in the departures section of the airport would be sent special offers such as a commission-free currency exchange.

  • In June Odeon Cinemas announced that it planned to imminently begin trials with iBeacons to welcome people to its cinemas, share information and inform them of special offers.

There is no demand for messages. (*)

{ Comments on this entry are closed }

Arduberry_finale

Dato che Yahoo Weather offre il feed della situazione meteo della mia città, ho deciso di aggiungere questi dati al mio database, in modo da avere sia la temperatura interna che quella esterna. Ho quindi modificato il codice in Python aggiungendo queste righe:

from xml.dom.minidom import *
import urllib
import csv
LocationID = '714505'
# Fetch weather XML for Como, Italy
Trier = urllib.urlopen('http://weather.yahooapis.com/forecastrss?w=' + LocationID + '&u=c').read()
# Parse the XML
Trier = parseString(Trier)
# Get date
Date = Trier.getElementsByTagName('lastBuildDate')[0].firstChild.data
# Get today's weather
Today = Trier.getElementsByTagName('yweather:condition')[0]
T = Today.attributes["temp"].value
W = Today.attributes["text"].value
#print(W,T)

Se vuoi divertirti anche tu, ho messo online il nuovo arduinotomysql.py con le relative modifiche.

Tra parentesi, questa sera canto nel coro alla prima della Cavalleria Rusticana che dovrebbe tenersi all’aperto nell’Arena del teatro Sociale. In questo momento splende il sole, ma si prevede nuvolo con occasionali piogge. Incrocio le dita.

{ Comments on this entry are closed }

Arduino: connessione a MySQL su Raspberry Pi

by Gaspar Torriero on 20/06/2014

Ecco il mio Arduberry:

Arduberry

Un Arduino Leonardo con sensore di temperatura e di luce, connesso direttamente via porta USB a un Raspberry Pi su cui gira un server LAMP. I dati del sensore vengono scritti ogni dieci minuti su un database MySql sul Raspberry.

Il vantaggi di questa soluzione rispetto a quella precedente sono che a) non si appoggia a nessun servizio esterno e quindi ne ho il pieno controllo, e b) che mi sono divertito un casino a smanettare tra java, python, sudo nano e crontab. Ho tratto grande giovamento dai vari tutorial in circolazione, in particolare Connect Raspberry Pi and Arduino with Serial USB CableTutorial: store Arduino data with RaspBerry PI to MySql che ringrazio di cuore: ragazzi, non ce l’avrei mai fatta senza di voi.

Prossimo passo: trovare un alimentatore separato per l’Arduino, che la porta USB del Raspberry alimenta ma appena appena. Potrei provare a utilizzare il server Apache del Raspberry per la visualizzazione dei dati. Magari un’altra volta.

Ecco la non semplicissima ricetta, al netto degli innumerevoli prova ed errore:

1)

/*
  Termometro 
  con smoothing dei valori del sensore
  (media di 10 letture)

  vedi
  http://www.arduino.cc/en/Tutorial/Smoothing
  
*/


const int numReadings = 10;     // numero di letture per la media
int readings[numReadings];      // le letture dal sensore analogico
int index = 0;                  // 'indice della lettura corrente
int total = 0;                  // il totale corrente
int average = 0;                // la media
float temp;                       // la temperatura in C°
int light;
int inputPin = A0;              //la connessione al sensore di temperatura
int lightPin = A1;
int x;
int y;
unsigned long temptot;



void setup()
{
  Serial.begin(9600);
  // metto a 0 le letture: 
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
    readings[thisReading] = 0;          
}

void loop() {
  // tolgo l'ultima lettura:
  total= total - readings[index];         
  // leggo più volte dal sensore
  // e faccio la media per stabilità: 
  temptot = 0;
  for(x = 0; x < 64; x++) {
    temptot += analogRead(inputPin);
  }
  y = temptot >> 6;
  readings[index] = y;
 
  //readings[index] = analogRead(inputPin); 
  // aggiungo la lettura al totale:
  total= total + readings[index];       
  // avanzo alla posizione seguente nell'array:  
  index = index + 1;                    

  // se siamo alla fine dell'array...
  if (index >= numReadings) {              
    // ...ricomincio da capo: 
    index = 0;                           
  }
  // calcolo la media:
  average = total / numReadings;
  
  // converto voltaggio sensore in °C
  temp = ( 5.0 * average * 100.0) / 1024.0;  
  // leggo l'output per debug:
  // Serial.println(temp); 
  light = analogRead(lightPin);
  

  // scrivo sulla porta seriale:
  Serial.print(temp);
  //Serial.print(average);
  Serial.print(" ");
  Serial.print(light);
  Serial.println();

  delay(2000);        // ritardo tra le letture per stabilità 
  
}

2)

Codice in python (il file è questo) che legge la USB del Raspberry , preleva i valori dei sensori e li scrive nel database MySQL:

arduinotomysql1

 

3)

La riga aggiunta in Raspberry con il comando crontab -e che esegue la lettura della porta seriale ogni dieci minuti (l’ultima parte serve a evitare le mail di alert):

*/10 * * * * /usr/bin/arduinotomysql.py >/dev/null 2>&1

 4)

Enjoy!

{ Comments on this entry are closed }

Arduino: il grafico delle temperature

by Gaspar Torriero on 17/06/2014

ArduTemp

Per cucinare il grafico della temperatura della mia camera da letto, ho impiegato i seguenti ingredienti:

  • Un Arduino 2009 con Internet Shield
  • Un sensore analogico di temperatura LM35
  • Un database MySQL su Amazon Web Services (gratis) su cui registrare i dati ogni 10 minuti
  • MySQL Workbench (gratis) per creare e gestire il database e la tabella
  • Un account su Temboo (gratis fino a 1000 calls/mese)) per trasferire i dati da Arduino a MySQL
  • MySQL for Excel (gratis) per riversare i dati raccolti in un foglio di Excel
  • Excel 2013 per trasformare i dati del sensore in gradi centigradi e creare la media oraria con relativo grafico.

La ricetta ha molti passaggi ma non è complicatissima. Richiede qualche conoscenza di programmazione, di SQL e di Excel, oppure richiede il tempo di fare numerosi errori, consultare gli innumerevoli manuali presenti in rete, riprovare con maggiore fortuna.

E’ un buon inizio e sono soddisfatto, ma c’è molto da migliorare.

Il fatto è che avevo già in casa un server MySQL sul Raspberry Pi, e il Raspberry ha i suoi bei pin di input/output. Ma ho scoperto che i PIO del Rasberry sono digitali, mentre il mio sensore è analogico. Morale: comprerò un sensore di temperatura digitale (tipo questo) e riproverò con una soluzione più diretta e più elegante.

Nel frattempo: come spiegare il picco delle ore sei?

AGGIORNAMENTO:

MySQL for Excel è fantastico e funziona perfettamente; inoltre importa automaticamente le connessioni create con MySQL Workbench; ma alla terza volta che riscaricavo i dati per aggiornare il grafico mi sono stufato.

Ho invece installato il driver ODBC per MySQL, e adesso la pivot si aggiorna direttamente dal database, senza passaggi intermedi e senza dove ogni volta rifare il lavoro. Molto meglio.

{ Comments on this entry are closed }

Temp/light sensor

Una delle cose interessanti dello Spark (il simil-Arduino con WiFi integrato) è che pubblica automaticamente nel cloud il suo stato.

Una delle cose interessanti di Google Spreadsheets è che è programmabile, e gli puoi chiedere di prendere i dati da una url:
Gdocscript

Metti insieme le due cose, e questo è il risultato:

gdocsresult

Ero molto contento della scoperta, che mi apriva nuovi e mirabolanti orizzonti. Poi sono andato ad automatizzare il tutto, creando un trigger che mi eseguisse automaticamente lo script ogni 15 minuti:

Gdocstrigger

E qui il bel sogno è svanito. Il trigger di Google Drive non funziona, oppure funziona quando vuole lui. Una veloce ricerca mi ha confermato che è un problema comune a tutti quelli che ci hanno provato.

Morale: bisogna cercare altre strade. Per esempio, alimentare direttamente un database MySQL tramite Temboo.

 

{ Comments on this entry are closed }

Cavalleria Rusticana – Appunti di regia

by Gaspar Torriero on 27/05/2014

(post in progress, mentre aspetto che mi venga affidata la messa in scena)

La trama dell’opera: Turiddu torna da soldato, trova la sua antica fiamma Lola sposata con il carrettiere Alfio e per dispetto si mette con Santuzza, che abita vicino a Lola. Lola si ingelosisce e, approfittando dell’assenza di Alfio, si riprende Turiddu come amante. Il giorno di Pasqua Santuzza scopre la tresca e affronta Turiddu, che la maltratta. Santuzza si vendica andando a a spifferare tutto ad Alfio, nel frattempo ritornato dall’ennesimo viaggio. Alfio sfida a duello Turiddu, e lo ammazza.

L’ambientazione

La scena si svolge nel tempo presente, sulla piazza principale di un paesino della cintura industriale di Milano. E’ bandito qualsiasi riferimento folcloristico.

Turiddu

Da adolescente, Turiddu è stato sradicato dalla sua rete sociale (famiglia, amori, amici) per fare il soldato. Da uomo, è tornato a casa dalla mamma, non ha lavoro, veste diverso (giacca mimetica?), parla diverso. Nel frattempo i suoi vecchi amici si sono sistemati, hanno un lavoro e una famiglia. Turiddu è un uomo solo. Quando si rimette con Lola è consapevole delle conseguenze ma se ne frega. Il Coro gli farà sempre il vuoto intorno.

Alfio

Alfio è uno che si sbatte e che ci tiene. Il lavoro (camionista? agente di commercio?) lo porta spesso lontano da casa, dalla moglie, dagli amici, da cui alla fine si è estraniato. Anche lui è un uomo solo, e anche lui verrà sempre tenuto lontano dal Coro.

Lola

Lola è una che se la tira. Non è bella ma è capace di mettersi bene. Crede di avere il controllo della situazione, e come Turiddu ha sottovalutato la reazione di Santuzza. Il Coro la avvolge e la protegge in tutte le scene, e se la porta via quando le cose si mettono male.

Santuzza

Santuzza è giovanissima e bellissima ma non lo sa, così come non si accorge di tante altre cose. E’ una ingenua innocente fino a quando capisce di essere tradita. Quando spiffera tutto ad Alfio sa già come andrà a finire, e ne gode. Anche lei è sempre protetta dal Coro (o forse no?).

Le coppie

Lola non ama Alfio che ha sposato per interesse, ma nemmeno ama Turiddu: se l’è ripreso come fanno i bambini quando vedono un altro bambino che usa il loro giocattolo.

Turiddu non ama Santuzza, con cui si è messo per far dispetto a Lola, e in fondo non ama neanche Lola, con cui si è messo nell’illusione che “tutto torni come prima”.

Alfio ama Lora? Forse. Sicuramente la considera sua proprietà, guadagnata con il sudore della fronte.

Santuzza, unica, ama Turiddu di un amore purissimo; che però si tramuta in odio quando si scopre ingannata, e scatena la tragedia.

Il Coro

Il Coro è il vero personaggio negativo di questa storia. Vede tutto, sa tutto, ma non fa niente per evitare il putiferio. Quando si rivolge ai vari personaggi, lo fa sempre in modo stereotipato e insincero I coristi hanno un gruppo chiuso su facebook, a cui Turiddu e Alfio non sono invitati. La pagina del gruppo è proiettata in scena e aggiornata in tempo reale dai coristi stessi.

Possibile variante: Santuzza scopre tutto quando qualcuno del Coro posta pubblicamente una cattiveria, credendo di postare nel gruppo chiuso di Facebook .

Il senso

L’opera si concentra sul momento in cui il precario equilibrio tra il gruppo chiuso (il Coro) e gli alieni (Turiddu e Alfio) viene rotto da Santuzza, l’agnello ferito che diventa tigre. Scenografia, luci e costumi sottolineeranno la differenza tra prima che Santuzza si ribelli e dopo che ha fatto la spia ad Alfio.

Tu come lo faresti?

{ Comments on this entry are closed }

Excel: anni e mesi tra due date

aprile 14, 2014

Aggiornamento: Su prezioso suggerimento di Federico Giacanelli che qui pubblicamente ringrazio, ho modificato la formula originale in modo che funzioni correttamente anche per periodi superiori ai 24 mesi, e ho corretto il post di conseguenza. Paola lavora per una associazione professionale e si occupa delle iscrizioni, che iniziano in periodi diversi e valgono per periodi […]

Read the full article →

Campionato Velico del Lario 2014 ORC/Metrico

aprile 4, 2014

Comincia domani il primo Campionato Velico del Lario con le regate organizzate dallo Yacht Club Como: sabato pomeriggio un percorso a bastone, domenica mattina la crociera Cernobbio-brienno-Cernobbio. Siamo ben 55 imbarcazioni iscritte: 11 Orza6, 6 J24, 5 Fun, 4 Explorer 20, 3 Melges 24 e altri 23 tipi vari. I circoli più rappresentati sono quelli che hanno […]

Read the full article →