Un pesce che vola in casa: Air Swimmers

Non bastavano i 4 carassisus che ospitiamo da circa 6 anni, ma abbiamo aggiunto alla famiglia un “pesce robotizzato” che nuota per la casa.
Ne avevo già parlato tempo fa su vocescuola.it ed è stato il regalo di Natale desiderato dai miei figli… e anche da me 🙂 ed è giunto tra noi ieri.

Ma cosa è Air Swimmers?

Gli Air Swimmers sono palloni ad elio che hanno la forma di pesce (squalo o pesce pagliaccio) che nuotano nell’aria grazie ad un dispositivo radiocomandato che pilota un motorino che comanda la coda del pesce e la fa muovere a comando in due direzione (destra e sisnistra). Mediante un secondo pulsante disposto sul radiocomando è possibile controllare il movimento (avanti, inietro) di un peso disposto sul ventre del pesce che ne consente la discesa o la salita.

Vi allego immagine ed alcuni video che ne mostrano il funzionamento e le caratteristiche tecniche e per maggiori infomazioni andate sul sito di riferimento.

In questo video pilotaggio e registrazione video è stato fatto dai miei figli.

Alcuni video commerciali di presentazione del prodotto:

INTERNET RISING: digi-documentary film

Released on 11.29.11, http://INTERNETRISING.net is a digi-documentary investigating the evolving relationships between the Internet and collective consciousness of humanity. It provokes many questions about ancient and modern paradoxes of life, its pleasures and pains… and the gray area contrasts in between – but most of all it is meant to be an inspiring conversation starter…

Misuriamo la distanza di un oggetto con un sensore ad ultrasuoni SRF05


Ho appena inserito sul sito scuola.arduino.cc una lezione che spiega come utilizzare il sensore ad ultrasuono SRF05.

Aggiornamento
Il sito scuola.arduino.cc ha subito delle variazioni e per qualche tempo l’embed della lezione non era visualizzabile, mi scuso per il disguido.
Ho reinserito la nuova pagina, ma per una visualizzazione ottimale potete seguire il link.

Grazia a Carlo per la segnalazione.

Di seguito l’embed della lezione:

Installare Arduino 0023 su Ubuntu 11.10 (Oneric Ocelot)

Una simpatica soorpresa, dopo l’aggiornamento ad Ubuntu 11.10 nei laboratori della scuola scopro che Arduino 0023 non funziona, errore di compilazione!

Qualche tempo fa avevo realizzato il tutorial per l’installazione di Arduino su Ubuntu 9.10 (karmic), la procedura per l’installazione è simile anche per Ubuntu 11.10, ma per accelerare i passi userò i comandi da terminale ed inoltre vi mostrerò con alcune schermate come procedere per eliminare l’errore di compilazione.

La soluzione al problema di compilazione è stata trovata da Matt Greensmith che ha scoperto il bug presente su questa versione di Arduino.

Grazie Matt!

Al suo tutorial ho aggiunto una serie di schermate per:

  • mantenere memoria storica e ricordarmi come procedere in futuro
  • per rendere più semplice il lavoro a chi non è molto esperto nell’uso di Ubuntu.

Ma perchè si ha un errore di compilazione?

La nuova versione della libreria avr-gcc causa un errore di compilazione su qualsiasi sketch segnalando un problema sulla libreria math.h (vedi immagini più avanti). Il problema dipende dal fatto che nella libreria math.h è definita la funzione round che guarda caso è anche definita anche nel core di Arduino, questo ovviamente causa un conflitto.

Vediamo come procedere.

Installazione Arduino

01. Per prima cosa scaricate dal sito Arduino la versione 0023:

02. Con una nuova installazione di Ubuntu è necessario installare Java. Usiamo il terminale e digitiamo:

sudo apt-get install openjdk-7-jre

Inserite la password amministratore e premete invio:

Rispondete “s” quando vi viene chiesto di “Continuare” con l’installazione:

Non dovrete confermare più nulla, capirete che l’installazione di Java è conclusa quando comparirà nuovamente il prompt:

03. A questo punto, come detto nel tutorial precedente, bisogna installare la libreria AVR C, procediamo sempre da linea di comando:

sudo apt-get install avr-libc gcc-avr

Anche in questo caso vi verrà richiesto di confermare con “s” l’installazione:

e continuate fino a quando non compare nuovamente il prompt:

04. a questo punto eseguiamo Arduino facendo click sul “Arduino”

e facciamo click su esegui:

05. selezionate la board corretta (nel mio caso Arduino UNO):

06. selezionate la porta seriale corretta:

07. verifichiamo il funzionamento di Arduino aprendo dagli esempi lo sketch “blink” e compiliamo:

notate che, come detto all’inizio del tutorial, viene restituito l’errore che fa riferimento alla libreria math.h

08. per correggere l’errore bisogna aprire il file wiring.h la cui posizione è: /arduino-0023/hardware/arduino/cores/arduino/wiring.h, potete accedervi direttamente usando il terminale oppure aprirlo con il vostro editor di testo preferito. Di seguito le schermate che vi mostrano la posizione di wiring.h nella gerarchia delle cartelle partendo dalla cartella: Arduino 0023:

[wpspoiler name=”Dove si trova wiring.h ?”]

[/wpspoiler]

09. editiamo il file wiring.h

Come detto sopra, aprite il file con il vostro editor di testi preferito, io ho usato “pico” da terminale e posizionatevi sulla riga 79 e rendetela commento aggiungendo “//” all’inizio della riga:

// #define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))

Bene!
L’installazione e la correzione del bug è terminata, ora potete incominciare ad utilizzare Arduino.

Appunti di programmazione su Arduino: variabili

Una variabile è un modo per nominare e memorizzare un valore numerico per un successivo utilizzo da parte del programma.
Come suggerisce il loro nome, le variabili sono numeri che possono essere cambiati continuamente rispetto alle costanti il cui valore non cambia mai. Una variabile deve essere dichiarata ed eventualmente si assegna il valore che si vuole conservare.
Il codice che segue dichiara una variabile denominata inputVariable a cui poi viene assegnato il valore presente sul pin analogico di ingresso n. 2

int inputVariable = 0;         // si dichiara una variabile a cui
                               // è assegnato il valore 0
inputVariable = analogRead(2); // imposta la variabile al valore
                               // presente sul pin analogico 2

inputVariable è la variabile.
Nella prima riga viene dichiarato che inputVariable conterrà un int, dove int è l’abbreviazione di numero intero. La seconda riga imposta la variabile al valore presente sul pin analogico 2, ciò permetterà di rendere disponibile il valore del pin 2 in altre parti del codice.

Una volta che una variabile è stata assegnata, o ri-assegnata, è possibile leggerne il valore per vedere se soddisfa a determinate condizioni, oppure è possibile utilizzare direttamente il suo valore.

Nell’esempio che segue sono illustrati tre operazioni utili con le variabili: se la condizione “inputVariable inferiore a 100” risulta vera, viene assegnato a inputVariable il valore 100 e poi viene impostato un ritardo (delay) di valore pari alla quantità memorizzata in inputVariable che ora vale 100.

if (inputVariable < 100) // verifica se la viariabile è
                         // minore di 100
{
  inputVariable = 100;   // se vero viene assegnato 100
}
  delay(inputVariable);  // usa la variabile per
                         // impostare il ritardo

Nota: alle variabili bisognerebbe dare un nome descrittivo (che ne spiega il significato) in modo che il codice sia più leggibile. I nomi di variabili come tiltSensor o pushButton aiutano il programmatore e chiunque legga il codice, a capire cosa rappresentano le variabili. I nomi delle variabili, come var o value, non rendono leggibile il codice e le usiamo solo come esempio.
Ad una variabile possiamo assegnare una qualsiasi parola che non sia già una delle parole chiave nel linguaggio Arduino.

Dichiarazione delle variabili

Tutte le variabili devono essere dichiarate prima di poter essere utilizzate. Dichiarare una variabile significa:

  • definire il tipo del valore che può assumere: int, long, float, ecc…
  • assegnare un nome
  • e opzionalmente assegnargli un valore iniziale

queste operazioni vengono fatte una volta sola nel programma, ma il valore della variabile può essere modificato in qualsiasi momento usando l’aritmetica o utilizzando delle assegnazioni.

Nell’esempio che segue viene dichiarato che inputVariable è un int, (tipo intero) e che il suo valore iniziale è uguale a zero. Questo è chiamata assegnazione semplice.

int inputVariable = 0;

Una variabile può essere dichiarata in posizioni diverse all’interno di un programma e in funzione della posizione in cui viene definita determina quali parti del programma possono utilizzarla.

Visibilità (o portata o scope) di una variabile

Una variabile può essere dichiarata

  • all’inizio del programma prima di void setup();
  • a livello locale all’interno di funzioni;
  • e talvolta, all’interno di un blocco di istruzioni ad esempio all’interno di un ciclo

La posizione in cui viene dichiarata la variabile determina la sua visibilità all’interno del programma e la capacità, da parte di alcune parti del programma, di utilizzarla. Una variabile globale è una variabile che può essere vista e utilizzata da ogni funzione del programma e in ogni istruzione del programma.

Una variabile per essere globale deve essere dichiarata all’inizio del programma, prima della funzione setup().

Una variabile è detta locale quando è definita all’interno di una funzione o come parte di un ciclo, essa è visibile e può essere utilizzato solo all’interno della funzione in cui è stata dichiarata. E’ quindi possibile avere due o più variabili con lo stesso nome in diverse parti dello stesso programma che contengono valori diversi.
Garantire che solo una funzione ha accesso alle sue variabili semplifica il programma e riduce il rischio di errori di programmazione.

L’esempio che segue mostra come dichiarare diversi tipi di variabili e dimostra la visibilità di ogni variabile.

int value;   // 'value' è visibile da ogni funzione

void setup()
{
   // non è necessario nessun setup
}

void loop()
{
   for (int i=0; i=0; i<20;) // 'i' è visibile solamente all'interno del ciclo for
   {
     i++;
   }
   float f;                  // 'f' è visibile solo all'interno di loop
}

Per le lezioni precedenti consultare la sezione Appunti di programmazione che trovate nella pagina Arduino di questo sito.