Archivi annuali: 2012

Nuova sezione Raspberry Pi, lavori in corso e previsioni per il futuro

Sto testando in questi giorni il Raspberry Pi, sono impegnato nella lettura di documentazione on-line e svolgo esperimenti, ho deciso quindi di raccogliere questa esperienza in una serie di lezioni ed articoli che spero possano essere di aiuto ai mie studenti attuali e ai molti diplomati e per tutti i “passanti” su questo sito che via mail mi hanno scritto per avere informazioni. Potete trovare la collezione delle risorse da me prodotte e quelle che ritengo essenziali che ho trovato on-line direttamente nella sezione Raspberry Pi di questo sito o dal menù: Area Studenti -> Raspberry Pi o ancora facendo click sul banner presente in colonna destra.


In questo ultimo periodo non ho risposto a tutte le richieste in quanto gran parte delle mail mi sono giunte durante il periodo di vacanza ed ero impossibilitato nel dare risposte esaurienti a tutti, quindi spero che le domande e i dubbi possano essere in parte risolti con queste lezioni. Al lettore esperto che si troverà a passare per il mio sito chiedo, se possibile, di lasciare suggerimenti, segnalazioni, correzioni in modo che possano essere di aiuto per i miei studenti.

Come sempre a causa dei miei impegni non potrò promettere una periodicità puntuale nell’uscita delle lezioni, come anche una risposta a tutti i commenti, cercherò come sempre di fare il possibile.

E per tutti quelli che mi hanno chiesto: “ed Arduino? Continuerai a scrivere lezioni ed articoli didattici?”

La mia risposta è: “sì! Assolutamente sì”

Il primo amore non si scorda mai 🙂 ma soprattutto perché fa parte del percorso didattico dei miei studenti e credo che sia una stupenda piattaforma di apprendimento, inoltre come ho spesso detto via mail a molti utenti, per me Raspberry Pi e Arduino hanno applicazioni didattiche diverse ed insieme si integrano in maniera ottimale nella formazione elettronico/informatico impartita in istituti professionale e ITIS (ad indirizzo elettrico/elettronico); inoltre il connubio delle due piattaforme risponde all’esigenza della scuola attuale: “poca spesa tanta resa” 🙂

Grazie ancora a tutti i lettori.

Raspberry Pi – lezione 02: colleghiamo la scheda

Materiali necessari per il collegamento delle periferiche

Possiamo effettuare tre tipologie di connessione:

  1. Connessione ad un televisore HDMI
  2. Connessione ad un monitor LCD con ingresso DVI-D
  3. Connessione ad un TV con ingresso composito

1. Connessione ad un televisore HDMI

  1. Alimentazione mediante micro USB (potete utilizzare un alimentatore per cellulare)
  2. Scheda SD da almeno 2GB
  3. Connettore HDMI (su HDMI viene convogliato anche l’audio)
  4. Lan: cavo Ethernet da connettere ad un hub o switch
  5. USB: connessione mouse e tastiera (potete utilizzare anche una chiavetta Bluetooth per connetere le periferiche)

Fare click sulla barra per visualizzare il dettaglio dei collegamenti.

[wpspoiler name=”Dettagli sui collegamenti” ]

[/wpspoiler]

2. Connessione ad un monitor LCD

  1. Alimentazione mediante micro USB (potete utilizzare un alimentatore per cellulare)
  2. Scheda SD da almeno 2GB
  3. Convertitore HDMI – DVI-D (su DVI-D non viene convogliato anche l’audio)
  4. Lan: cavo Ethernet da connettere ad un hub o switch
  5. USB: connessione mouse e tastiera (potete utilizzare anche una chiavetta Bluetooth per connetere le periferiche)
  6. Audio: cavo audio con jack da 3,5 mm (standard cuffie e casse per computer) da collegare all’uscita audio della scheda.

Fare click sulla barra per visualizzare il dettaglio dei collegamenti.

[wpspoiler name=”Dettagli sui collegamenti” ]

[/wpspoiler]

3. Connessione ad un TV con ingresso composito

Fare click sulla barra per visualizzare il dettaglio dei collegamenti.

[wpspoiler name=”Dettagli sui collegamenti” ]

[/wpspoiler]

Prima di procedere con i passi che seguono inserite la scheda SD

  1. Non connettete la scheda all’alimentazione, questo dovrà essere fatto quanto tutto è collegato.
  2. Connettete il connettore HDMI all’uscita HDMI della scheda, se non avete un cavo HDMI andate al passo 6
  3. Connettete il cavo di rete alla porta Ethernet (si assume che voi siate dotati di connessione internet)
  4. Connettete la tastiera e il mouse ai connettori USB 2
  5. Connettete il cavo audio, ciò è necessario solo se non puoi connettere la tua scheda attraverso il cavo HDMI.
  6. Connettere il cavo video composito, questo è necessario solo se avete un TV di vecchio tipo.

Il passo finale è quello di connettere l’alimentazione. Non esistono interruttori di accensione, la scheda si avvia non appena inserite l’alimentazione.

Per l’alimentazione viene usato un connettore micro USB, identica a quella usata dai moderni telefoni cellulari. La tensione di alimentazione dovrà essere di 5V con una corrente di almeno 700 mA.

Il Raspberry Pi possiede due connettori USB, ma potete espandere la quantità di ingressi USB con un hub USB esterno che può essere inserito direttamente in una delle due porte della scheda.
Se utilizzate un hub USB ricordate che questo deve essere munito di alimentazione esterna Raspberry Pi non è in grado di alimentare direttamente l’hub.
Se disponete di un apparato wireless USB questo dovrà essere connesso ad uno degli ingressi della scheda, in questo caso avrete necessità di un hub per poter utilizzare mouse o tastiera.

Potete connettere direttamente il cavo HDMI dal Raspberry Pi direttamente all’ingresso HDMI del TV/monitor o in alternativa, se possedete un vecchio TV usate l’ingresso composito del TV.

Se effettuate un collegamento HDMI per il video, l’audio transiterà sullo stesso cavo HDMI, se invece utilizzate un collegamento composito per il video dovrete utilizzare un’ulteriore cavo per collegare l’uscita audio analogica del Raspberry Pi con il TV.

Per la connessione ad internet disponete di un connettore RJ45 a cui collegherete un cavo Ethernet (categoria 5).

Dovrete inoltre avere a disposizione di una scheda SD su cui installare il sistema operativo.

A questo punto siete pronti per utilizzare il vostro ultra miniaturizzato PC 🙂

Per non perdersi questa la lista delle cose necessarie per partire:

1. Raspberry Pi;
2. alimentatore con connettore micro USB;
3. mouse USB;
4. tastiera USB;
5. cavo HDMI o cavo composito;
6. scheda SD che contiene il sistema operativo;
7. una TV o un monitor;

Opzionale

8. cavo Ethernet categoria 5;
9. adattatore Wireles per connessione internet;
10. hub USB per la connessione di altri dispositivi.

Nella prossima lezione vedremo come copiare sulla scheda SD il sistema operativo ed avviare il Raspberri Pi.

Appunti di programmazione su Arduino: ingressi e uscite analogiche


analogRead(pin)
Legge un valore di tensione applicato al piedino analogico ‘pin’ con una risoluzione di 10 bit. La funzione restituisce un valore compreso tra 0 e 1023.

value = analogRead(pin);   // imposta 'value' uguale al
                           // valore letto su 'pin'
                           // dalla funzione analogRead

Nota: i pin analogici a differenza di quelli digitali non hanno bisogno di essere dichiarati come pin di INPUT o OUTPUT.

analogWrite(pin, value)

Cambia il duty cycle (nella funizione: ‘value’) della modulazione di ampiezza di impulso (PWM: Pulse Width Modulation) su uno dei ‘pin’ contrassegnati dall’etichetta PWM.
Sull’attuale Arduino UNO su cui è montato un ATmega 328, il PWM è abilitato sui piedini 3,5,6,9,10 e 11.
Il valore del duty cycle può essere specificato da una variabile o una costante con un valore compreso tra 0 e 255.

analogWrite(pin, value);   // scrive il valore 'value'
                           // sul 'pin' analogico

Un valore di 0 genera in uscita una tensione continua di 0 volt sul pin specificato nella funzione; un valore di 255 genera una tensione continua 5 volt sul pin specificato nella funzione. Per valori compresi tra 0 e 255, il valore in uscita varierà rapidamente tra 0 e 5 volt. Più alto sarà il valore di ‘value’ più spesso su ‘pin’ si avrà una tensione di 5 volt. Ad esempio un valore di ‘value’ pari a 64 genera un segnale in cui per tre quarti del periodo dell’onda il segnale sarà a 0 volt e per un quarto del periodo dell’onda sarà a 5 volt. Se ‘value’ è posto a 128 avremo un segnale che per metà del periodo sarà a 0 volte e per la restante metà del periodo sarà a 5 volt. Se ‘value’ è posto a 192 avremo 0 volt per un quarto del periodo e 5 volt per i restanti tre quarti del periodo.

Per approfondire l’argomento sul PWM leggete la lezione su questo sito: Arduino – lezione 06: modulazione di larghezza di impulso (PWM) corredata da esempi pratici e filmati.

Poiché analogWrite è una funzione hardware, sul pin avremo un onda quadra dopo una chiamata della funzione analogWrite e questa verrà continuativamente emessa in background fino alla successiva chiamata della analogWrite (o chiamata della digitalRead o digitalWrite sullo stesso pin).

L’esempio che segue legge un valore analogico da un pin di ingresso analogico, converte il valore dividendolo per 4, e fornisce un segnale PWM sul pin PWM specificato:

int led = 10;   // al pin 10 è collegato un LED
                // in cui in serie è posta un
                // resistore da 220 Ohm
int pin = 0;    // inseriamo un potenziometro sul pin 0
int value;      // valore che sarà letto

void setup(){} // non è necessaria nessuna configurazione
void loop()
{
   value = analogRead(pin); // imposta 'value' al
                            // valore letto su 'pin'
   value /= 4; // dividendo per 4 si converte
               // il valore letto compreso tra
               // 0 e 1023 in un valore
               // compreso tra 0 e 255
   analogWrite(led, value); // il valore del PWM
                            // viene assegnato al led
}

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

WeeBots – un robot pilotabile da bambini che non possono muoversi

Nei mesi passati per alcune vicende familiari ho avuto la necessità di dover trascorrere un po’ di tempo in ospedale per aiutare un giovane malato, ero presso un reparto pediatrico di un grande ospedale del Piemonte. La sofferenza dei bimbi è qualcosa che ti strazia il cuore, ma la grande quantità di amore che avvolge questi luoghi è tantissima ed aiuta il bimbo e i genitori. Potrà sembrare una riflessione elementare, ma non avendo avuto l’esigenza di stare per qualche tempo in ospedale, non avevo riflettuto quanto l’elettronica e l’informatica sono essenziali in campo medico, ricordo di aver “bisticciato” con un infusore elettronico 🙂 Ho incontrato anche bambini con difficoltà motorie e quando ho letto la notizia sul WeeBots non ho potuto non segnalarla, è affascinante e dona speranza.

WeeBots è una di quelle rare volte, come viene detto nell’articolo in inglese, in cui l’unione tra robotica e bambino è lecita in bambini che non possono camminare perché hanno problemi agli arti. Come ogni genitore ed insegnante sa esplorare e interagire con il mondo è importante per lo sviluppo cognitivo del bambino. I bambini che non possono muoversi non possono svilupparsi alla stessa velocità dei bambini che camminano e per questo motivo i ricercatori dell’Ithaca College di New York stanno lavorando ad un modo per favorire la mobilità dei bambini diversamente abili con i robot, anche per quei bambini con condizioni fisiche che ritardano la mobilità indipendente, come la sindrome di Down, spina bifida o paralisi cerebrale.

Il robot è basato sulla famose tavolette Nintendo Wii Balance, quelle che vengono interfacciate all Wii per fare sport in casa. Alle tavolette sono uniti dei seggiolino che si trovano normalmente in commercio è posti sulla parte superiore della balance board. Il roboto, in funzione di dove il bambino si appoggia capirà in quale direzione dirigersi. Si potrebbe pensare che un bambino di sei mesi non sia in grado di controllare un robot, ma date uno sguardo al filmato e noterete con quanta rapidità viene appreso l’uso del robot.

Per testare la WeeBot, i ricercatori hanno coinvolto cinque bambini, di età compresa tra sei mesi a nove mesi. Ciascun bambino ha eseguito una fase di apprendimento sull’uso del robot costituita da cinque sessioni di formazione in cui è stato utilizzato un giocattolo come “esca” ed i bambini alla fine del ciclo delle sessioni erano in grado di pilotare il robot.

La ricerca è in fase di sviluppo ed i ricercatori stanno eseguendo ulteriori migliorie al robot, se volete ulteriori informazioni vi invito alla lettura dell’articolo su livescience.

fonte: spectrum.ieee.org

Appunti di programmazione su Arduino: ingressi e uscite digitali

Continuano le lezioni sulla programmazione su Arduino, se avete necessità di consultare le lezioni precedenti guardate la sezione Appunti di programmazione che trovate nella sezione Arduino di questo sito.

pinMode(pin, mode)

Utilizzato all’interno del void setup(), consente di configurare un determinato pin e stabilisce se deve essere un pin di INPUT o di OUTPUT.

pinMode(pin, OUTPUT);        // imposta 'pin' come output

I pin digitali di Arduino sono per default impostati come pin di INGRESSO, perciò non è necessario dichiararli esplicitamente come input con la pinMode(). Nel caso si debba utilizzarli come pin di uscite è indispensabile impostare il pin come OUTPUT con il comando pinMode(pin, OUTPUT). I pin configurati come input si dice che sono in uno stato di alta impedenza.

Il processore Atmega presente sulla scheda Arduino è dotata, sui ogni piedino di ingresso digitale, di una resistenza di pull-up da 20KOhm che abilitata via software consente di impostare il pin come input. Le istruzioni sono le seguenti:

pinMode(pin, INPUT);       // imposta 'pin' come input
digitalWrite(pin, HIGH);   // attiva la resistenza di pull-up,
                           //'pin' viene impostato HIGH

Le resistenze di pull-up vengono normalmente utilizzate per connettere gli input come interruttori.

Si noti che nell’esempio sopra non viene configurato un pin come output, è un modo per attivare il pull-up interno.

I pin configurati come OUTPUT sono detti a bassa impedenza e sono in grado di fornire 40 mA (milliampere) ad altri dospositivi o circuiti. Questa è una corrente sufficiente per accendere un LED (non dimenticate di inserire in serie una resistenza), ma non è una corrente sufficiente per pilotare la maggior parte dei relè, bobine o motori.

I cortocircuiti sui piedini di Arduino possono danneggiare o distruggere i pin di output o danneggiare l’intero chip Atmega. Quando si ha la necessità di utilizzare i pin come output per collegare dispositivi esterni è buona prassi inserire in serie al pin un resistore da 470 Ohm o 1 KOhm.

digitalRead(pin)

Legge lo stato di uno specifico pin digitale ed il valore restituito può essere HIGH o LOW. Il ‘pin’ può essere specificato come una variabile o una costante (0-13).

value = digitalRead(Pin);   // imposta 'value' al valore
                            // letto sul pin

digitalWrite(pin, value)

Pone a livello HIGH o LOW l’uscita digitale ‘pin’. Il ‘pin’ può essere specificato come una variabile o una costante (0-13).

L’esempio che segue legge un pulsante collegato ad un ingresso digitale e visualizza su un LED, connesso ad una uscita digitale, quando il pulsante viene premuto:

int led = 13;  // il LED è connesso all'uscita digitale 13
int pin = 7;   // il pulsante è collegato al pin digitale 7
int value = 0; // variabile per memorizzare il valore letto

void setup()
{
  pinMode(led, OUTPUT); // imposta il pin 13 come OUTPUT
  pinMode(pin, INPUT);  // imposta il pin 7 come INPUT
}

void loop()
{
  value = digitaRead(pin);   // imposta 'value' uguale
                             // al valore letto su 'pin'
  digitalWrite(led, value);  // imposta 'led' al valore
                             // della variabile 'value'
}

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