Archive for marzo 28th, 2011

Pulsante

lunedì, marzo 28th, 2011

Il pulsante è un componente che collega due punti in un circuito quando viene premuto. Il circuito e il programma che faremo consentirà di accendere un LED quando si preme il pulsante. Dobbiamo collegare tre cavi alla scheda Arduino:

Il primo va da un piedino del pulsante attraverso una resistenza di pull-down di 2,2 KOhm al GND. Il secondo va dall’altro piedino corrispondente del pulsante al +5V. Il terzo si connette al pin digitale 2 che legge lo stato del pulsante. Poi bisogna ancora connettere il led con una resistenza da 330 Ohm al pin digitale 13.

Quando il pulsante è aperto (ossia non premiamo) non vi è alcuna connessione tra i due piedini del pulsante e leggeremo un valore HIGH. Quando il pulsante viene chiuso (ossia premiamo), leggeremo un valore LOW. È inoltre possibile collegare questo circuito in senso opposto, con una resistenza di pull-down in modo da avere l’effetto controria ossia quando viene premuto il pulsante avremo un valore HIGH e viceversa.

Il circuito da realizzare è il seguente:

Dove la resistenza in serie al led è di 330 Ohm mentre la resistenza di pull-down è di 2,2 KOhm.

Passiamo al codice, apriamo il IDE e scriviamo il seguente codice:

 #define ledPin 13  //Pin digitale 13 per il led
 #define buttonPin 2  //Pin digitale 2 per il bottone
 int buttonState = 0;  //Variabile per la lettura dello stato del pin

 void setup()
 {
     pinMode(ledPin, OUTPUT);  //Dichiaro il pin 13 come output
     pinMode(buttonPin, INPUT);  //Dichiaro il pin 2 come input
 }

 void loop()
 {
     buttonState = digitalRead(buttonPin);  //Legge il valore del pulsante, ossia il valore del pin 2
     //Controllo lo stato del pulsante
     if (buttonState == HIGH)
         digitalWrite(ledPin, LOW);  //Spengo il led
     else
         digitalWrite(ledPin,HIGH);  //Accendo il led
 }

1-digitalRead(): Legge il valore proveniente da un pin digitale. Trattandosi di un pin digitale può leggere solo due valori: HIGH o LOW. La sintassi è la seguente: digitalRead(pin);

2-buttonState == HIGH: Faccio notare la differenza tra scrivere buttonState == HIGH e buttonState = HIGH: il primo confronta se buttonState è uguale al valore HIGH mentre il secondo assegna a buttonState il valore HIGH.

Funzione millis()

lunedì, marzo 28th, 2011

Per far lampeggiare un led, al posto di usare la funzione delay() possiamo utilizzare anche la funzione millis(). Questa funzione restituisce il numero di millisecondi da quando la scheda Arduino ha iniziato l’esecuzione del programma. Dopo 50 giorni che la scheda non viene spenta questo numero ritorna a 0. Per usare questa funzione si può ad esempio scrivere int tempo = millis(); dove in pratica la funzione restituisce un numero in millisecondi e lo immagazina all’interno della variabile tempo.

Vediamo ora come possiamo far lampeggiare il led usando questa funzione.

Lo schema elettrico per collegare il led è lo stesso usato nel primo tutorial Hello World mentre il codice da scrivere nell’IDE cambia.

Codice:

#define ledPin 13  //LED connesso al pin digitale 13
#define interval 1000  //Intervallo di tempo per  far lampeggiare il LED(millisecondi)
int value = LOW;  //Valore precedente del LED
long previousMills = 0;  //Memorizza l'ultima volta che il led è stato aggiornato

void setup()
{
     pinMode(ledPin, OUTPUT);  //Impostiamo il led come output
}

void loop()
{
     if (millis() -  previousMills > interval ){
         previousMills = millis();  //Tiene in memoria l'ultimo lampeggio

         //Se il LED è spento lo accende e viceversa
         if (value == LOW)
             value = HIGH;
         else
             value = LOW;

         digitalWrite(ledPin, value);
     }
}

Analisi del codice:

1-Struttura IF/ELSE:

if (variabile < 500)
{
  // Azione A
}
else
{
  // Azione B
}

L’IF è un controllo, tradotto in parole povere significa che controlla se una variabile è minore, maggiore o uguale ad un numero, se la condizione è verificata esegue l’azione A altrimenti esegue l’azione B.

2- if (millis() –  previousMills > interval ): Fà la differenza tra il tempo attuale e il tempo precedente in cui stato acceso il led e controlla se è necessario accendere oppure no il led dopo un tempo (interval) di un secondo.

Hello World!

lunedì, marzo 28th, 2011

Nella maggior parte dei linguaggi di programmazione, il primo programma che  si scrive è la stampa della scritta “Hello World!” sullo schermo. Dal momento che una scheda Arduino non dispone di uno schermo, noi ci limiteremo a far lampeggiare un LED. Avremo bisogno di una scheda Arduino UNO, un led rosso o di altri colori che preferite e di una resistenza da 330 ohm  che andremo a collegare in serie al led.

Il collegamento da effettuare sulla scheda è questo:

In pratica abbiamo collegato il led in serie ad una resistenza, dove il piedino meno del led và messo al GND mentre il piedino della resistenza và collegato al pin digitale 13.

Per comodità vi allego una foto su come collegare i led:

Se il led non si dovesse accendere è perchè, probabilmente, lo avete collegato al contrario.

Ora passiamo ad aprire il nostro IDE per programmare Arduino:

Un consiglio che mi sento di darvi è quello di non fare copia e incolla ma di scrivere le varie parti del codice a mano in modo da poter imparare la sintassi delle varie funzioni.

Il codice da scrivere è il seguente:

#define ledPin 13  //LED connesso al pin digitale 13
void setup()
 {
     pinMode(ledPin, OUTPUT);  //Imposto il LED come output
 }
void loop()
 {
     digitalWrite(ledPin, HIGH);  //Accendo il LED
     delay(1000);  //Aspetto un secondo  1000ms = 1s
     digitalWrite(ledPin, LOW);  //Spengo il LED
     delay(1000);  //Aspetto un secondo
 }

Analisi codice:

1- setup (): E’ una funzione che viene chiamata quando si avvia lo sketch. Si usa per inizializzare le variabili,  i pin,  iniziare ad usare le librerie. La funzione di setup viene eseguita una sola volta, dopo ogni accensione o reset della scheda Arduino.

2-pinMode(): Dice ad un pin specifico come comportarsi,  ossia come ingresso(INPUT) o come uscita(OUTPUT). La sintassi è la seguente: pinMode(pin, mode);

3-loop(): Dopo aver creato la funzione setup (), che inizializza e imposta i valori iniziali, la funzione loop () fa esattamente quello che suggerisce il suo nome, ossia il vostro programma gira all’infinito eseguendo le operazioni che sono state scritte al suo interno.

4-digitalWrite(): Questa funzione scrive sul pin desiderato un valore alto (HIGH) oppure basso (LOW). Dove per valore alto si intende +5V mentre per valore basso si intende 0V. La sintassi è la seguente: digitalWrite(pin, valore);

5-delay(): Questa funzione imposta un ritardo in millisecondi tra una funzione è l’altra. La sintassi è la seguente: delay(ms);

6-#define: Serve a definire una costante. Si definisce sempre all’inizio del programma. La sintassi è la seguente: #define costante valore

Per definire il pin che vogliamo usare possiamo anche dichiararlo nella funzione setup() come int ledPin = 13; così facendo dichiariamo una variabile, il che non ha molto senso visto che un pin non cambia mai il proprio identificativo. Inoltre dichiarare il pin con #define ci consente di risparmiare memoria su arduino.

Cosa è Arduino

lunedì, marzo 28th, 2011

Arduino è una semplice ma potente piattaforma hardware, basata su una semplicissima scheda I/O che grazie alla libreria Wiring ci consente di programmarla.

Questa è la scheda Arduino UNO

La scheda consiste in un microcontroller della Atmel, nello specifico l’ATmega328. Offre 14 connettori per l’I/O digitale, 6 dei quali possono produrre segnali PWM, mentre 6 sono dedicati a ingressi di segnali analogici.

Il tutto è possibile collegarlo al computer tramite un cavo usb e per poterla programmare abbiamo bisogno di scaricare l’IDE di Arduino, disponibile sul sito ufficiale.