sabato 5 aprile 2014

Parte 2/6: Ingressi e uscite, digitali e analogici

Aggiornato il 08.04.2014
La volta scorsa vi ho descritto come collegare un display 16x2 ad Arduino, questa volta passiamo a cose più concrete come la gestione degli INPUT e degli OUTPUT.

Nello schema di Arduino UNO in verde sono raffigurati i 14 PIN digitali ON/OFF sia IN che OUT.
I PIN 0 e 1 solitamente non vengono utilizzati nei collegamenti perché adibiti alla comunicazione seriale con il PC  (USB) o un altro Arduino.
In basso a destra sono rappresentati con il colore celeste i 6 PIN analogici, utilizzabili in ingresso con una risoluzione di 2^10 (1024) e in potenza con un risoluzione di 2^8 (256).



I/0 DIGITALE.
Nella figura sottostante è raffigurato un semplice collegamento che permette di accendere un led mediante un pulsante.
In entrambi i componenti è presente una resistenza: nel caso del LED dobbiamo limitare la corrente a 10mA, quindi andremo ad utilizzare una resistenza di 330Ω = (5V-2V)/0,01A.
Nel caso dell'ingresso, invece, dobbiamo proteggere ARDUINO; l'amperaggio massimo consentito è di 40mA ma la guida ufficiale consiglia di utilizzare una resistenza di 470Ω quindi con i 10mA che otteniamo stiamo su una soglia decisamente più sicura. Per la cronaca è possibile attivare le resistenze interne di ARDUINO via software, cosa che io non ho voluto fare. Detto ciò passiamo allo scketch presente tra i file di esempio dell'IDE. Controlliamo l'accensione del LED mediante il PIN 13 e leggiamo lo stato del pulsante tramite il PIN 3. Lo stato del pulsante dipende ovviamente dal fatto se è normalmente aperto o chiuso e dalla resistenza applicata. Vi consiglio di fare delle prove per capire cosa sta leggendo ARDUINO e quindi eventualmente modificare resistenze o codice.


const int buttonPin = 2;     // il numero del PIN del tasto
const int ledPin =  13;       // il numero del PIN del LED

int buttonState = 0;          // variabile che assumerà il valore letto dal PIN del tasto

void setup() {
  // inizializzo il PIN del LED indicando il numero e che si tratta di un'uscita:
  pinMode(ledPin, OUTPUT);      
  // inizializzo il PIN del Tasto indicando il numero e che si tratta di un ingresso:
  pinMode(buttonPin, INPUT);     
}

void loop(){
  // a ogni ciclo leggo il valore del tasto:
  buttonState = digitalRead(buttonPin);

  // controllo se il tasto è premuto.
  // se lo stato è HIGH:
  if (buttonState == HIGH) {     
    // accendo il LED:    
    digitalWrite(ledPin, HIGH);  
  } 
    // altrimenti:    
  else {
    // spengo il LED:
    digitalWrite(ledPin, LOW); 
  }
}

I/0 ANALOGICO.
Il procedimento è simile a quello precedentemente descritto, la differenza sta nei comandi e sul fatto che in lettura avremo un valore intero che va da 0-1023 (step di 5V/1024) mentre in potenza da 0-255 (step di 5V/256).
Trattandosi di uscite/ingressi il valore massimo è sempre di 5V e il minimo di 0V.
Consiglio di dichiarare sempre all'inizio la variabile o costante del PIN dove il nostro elemento analogico verrà collegato (A0-A5).
Per la lettura è sufficiente utilizzare questo comando analogRead(PIN );  mentre per comandare l'uscita analogWrite(PIN, 0-255);

Di seguito un esempio in lettura tramite un potenziometro utilizzato come partitore di tensione:

Per quanto riguarda l'uscita in potenza potreste collegare un LED e, superata la tensione di giunzione, modificarne la luminosità.

4 commenti:

  1. Bundì Marco, ho provato a realizzare questo semplice schema che gestisce un led ( le basi sono essenziali per comprendere il resto ). Ho modificato lo sketch per ottenere l'effetto inverso,( LED NORMALMENTE ACCESO e quando premo il pullsante si spegne).
    Per quanto riguarda la gestione degli I/0 ANALOGICI, pubblicare uno schema semplice sarebbe di grande aiuto.

    Grazie

    RispondiElimina
    Risposte
    1. Ciao Nick, hai ragione... Speravo di asciugarmela con poco visto che avevo poco tempo. Dammi qualche giorno e integro ;)

      Elimina
  2. No problem Marco, il tempo è sempre troppo poco x le cose che piacciono.
    Ora sto provando con il display, ne avevo giusto uno. Metto un potenziometro X per provare.

    RispondiElimina
  3. Utilizza il potenziometro come partitore di tensione.

    RispondiElimina