Leonardo Miliani
Arduino e transistor
Tutorials -
Giovedì 14 Aprile 2011 22:54
Scritto da Leonardo Miliani

Facendo seguito al tutorial Usiamo il transistor come un interruttore, cerchiamo di mettere in pratica ciò che abbiamo imparato applicando le informazioni all'uso con Arduino, imparando a usare un transistor per pilotare un carico non gestibile da un'uscita (pin) del microcontrollore.

Preparazione

Prepariamo il nostro circuito come in figura:

Schema per pilotare un transitor con l'Arduino

 

Materiale occorrente:

  • Arduino 2009 o UNO
  • Breadboard
  • 1 transistor NPN (tipo 2N3904)
  • 2 resistenze da 10 kOhm
  • 3 resistenze da 680 Ohm
  • 3 LED di colore rosso
  • 1 pulsantino da PCB
  • ponticelli

In pratica, il transistor va collegato al pin 12 di Arduino mentre il pulsantino al pin 11. I 3 LED servono come test per verificare il corretto funzionamento del circuito. La resistenza da 10 kOhm tra un piedino del pulsantino e GND serve come resistenza di pull-down, per dare un segnale base stabile di LOW ed evitare le fluttuazioni casuali sul piedino che l'Arduino potrebbe interpretare come false pressioni. La resistenza da 10 kOhm prima della base del transistor serve per abbassare la tensione di attivazione, che non serve sia a 5V: basta infatti un minimo segnale di ingresso sulla base che il transistor si attiva. Per questo motivo un transistor è anche indicato come un amplificatore di corrente dato che un segnale molto debole può restituire sull'emettitore un segnale molto più forte.

Il codice

#define PIN_PULSANTE 11
#define PIN_TRANSISTOR 12

byte value=0; //per stato transistor
byte val1=0;  //per debounce
byte val2=0;  //per debounce
byte change=0;//per debounce

void setup() {               
    pinMode(PIN_PULSANTE, INPUT);    
    pinMode(PIN_TRANSISTOR, OUTPUT);
}


void loop() {

    //funzione di Debounce per il pulsantino
    val1=digitalRead(PIN_PULSANTE); //prima lettura del pulsantino
    delay(10);
    val2=digitalRead(PIN_PULSANTE); //seconda lettura del pulsantino
    if (val1==val2) {
        if (val1!=change) { 
            if (val1==HIGH) { //se la lettura è HIGH, è stato premuto il pulsantino
                value^=1; //XOR logico: cambia lo stato del transistor
                digitalWrite(PIN_TRANSISTOR, value); //imposta il transistor
            }
        }
    }
    change=val1; //salva lo stato del pulsantino, per evitare doppie letture
}

 

Come funziona

Come è stato detto nella guida apposita, uno dei molteplici usi di un transistor è quello come interruttore. Quando il transistor è attivato (saturo) mediante una tensione sulla "base", la corrente fornita al "collettore" può transitare attraverso il transistor ed escire dall'"emettitore". Togliendo il segnale dalla base, non si fa altro che aprire questo interruttore, interrompendo il flusso di corrente. Per far ciò usiamo un pulsantino non collegato direttamente alla base ma ad un pin di Arduino, che legge la sua pressione e modifica lo stato del transistor in funzione dello stato da impostare (se "on" oppure "off").

Nel codice usiamo una piccola funzione di "debounce" per evitare letture errate (i "rimbalzi" di segnale). Premendo il pulsantino, l'Arduino varia lo stato del transistor mediante un'operazione di XOR logico: se il transistor è ON, viene messo OFF e viceversa. Quando il transistor è ON, la corrente che transita accende i 3 LED, che sono collegati all'emettitore tramite una resistenza da 680 Ohm per LED usata per abbassare la tensione ad una soglia che non danneggi il LED stesso.

 

Cosa abbiamo imparato.

L'esempio è utile per capire come un piccolo dispositivo come un transistor possa essere utilizzato per comandare grossi carichi. Senza di esso, infatti, non avremmo mai potuto collegare 3 LED ad un singolo piedino dell'Arduino perché la corrente consumata da essi è superiore a quella massima che un pin del microcontrollore può erogare. Difatti il datasheet dell'Atmega328 indica come massima corrente erogabile da un singolo pin il valore di 40 mA mentre mediamente un comune LED consuma sui 20 mA: si può quindi dedurre molto velocemente che 3 LED in parallelo consumano 60 mA. Collegandoli direttamente ad un unico pin dell'Atmega si corre il rischio di danneggiare permanentemente il pin nella migliore delle ipotesi, il microcontrollore stesso nella peggiore.

 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi