Archivi tag: arduino

Nuova versine dello shield GSM GPS per Arduino

Ricevo da Boris Landoni, Responsabile Tecnico Futura Elettronica srl, la segnalazione che è stata resa disponibile la nuova versione della GSM Shield, basata sui moduli GSM/GPRS SIM900 o GSM/GPRS & GPS SIM908. Moltissime le innovazioni ed i miglioramenti che consento la massima personalizzazione.

Per tutti i dettagli vi invito alla lettura dell’articolo su open-electronics.org.

Appunti di programmazione su Arduino: orologio interno

delay(ms)

Mette in pausa un programma per la quantità di tempo specificata in millisecondi, un valore di 1000 millisecondi equivale a 1 secondo.

delay(1000);   // attende per 1 secondo

millis()

Restituisce il numero di millisecondi da quando la scheda Arduino ha incominciato l’esecuzione del programma corrente. Il tipo di dato è un unsigned long.

value = millis();   // imposta la variabile 'value'
                    // al valore restituito dalla funzione

Nota: questo valore va in overflow (supera il limite della memoria) per cui ricomincia da zero dopo circa 9 ore.

micros()

Restituisce il numero di microsecondi da quando la scheda Arduino ha incominciato l’esecuzione del programma corrente. Il tipo di dato è un unsigned long.

Nota: questo valore va in overflow (supera il limite della memoria) per cui ricomincia da zero dopo circa 70 minuti.

Sulle schede Arduino a 16MHz (ad es. Duemilanove e Nano), questa funzione ha una risoluzione di 4 microsecondi (il valore restituito è un multiplo di 4 secondi). Sulle schede Arduino a 8 MHz (ad es. LilyPad), questa funzione ha una risoluzione di 8 microsecondi.

Nota: ci sono 1.000 microsecondi in un millisecondo e 1.000.000 di microsecondi in un secondo.

delayMicroseconds(us)

Mette in pausa il programma per una quantità di tempo (in microsecondi) specificato dal parametro della funzione. Il tipo di dato è un unsigned long.

delayMicrosecons(1000);   // attende un millesimo di secondo

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

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.

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.