Raffaele Ilardo


Testare un transistor con Arduino


© La parziale riproduzione dei contenuti di questa pagina è consentita a patto di citare l'indirizzo del sito e l'autore.


In mezzo ai mucchi di materiali che immancabilmente qualunque dilettante di elettronica si ritrova, riposano a volte per tempi molto lunghi anche i transistor. Purtroppo, sfrega oggi e sfrega domani, la loro sigla diventa spesso illegibile; altre volte, se il transistor proviene da materiali recuperati, può succedere che sia marchiato con una sigla particolare, che non corrisponde ad alcun data-sheet.
Diventa allora un problema decidere se e come utilizzarlo. Se almeno se ne potesse conoscere la polarità (NPN o PNP) e magari individuarne gli elettrodi... potrebbe sempre tornare utile per progettini senza eccessive pretese.
scheda arduino preparata per il test dei transistori
figura 1
E' esattamente ciò che si propone lo sketch descritto in questa pagina; per essere sincero, è stato ideato anche come esercizio di programmazione, ma visto che funziona, può realmente risultare utile.
Per evitare di complicare eccessivamente la circuitazione, ho preferito accettare alcune limitazioni: ciò significa che il progetto riconosce se il transistor è un NPN oppure un PNP, e indica quale dei tre terminali è la base. Non identifica invece il collettore e l'emettitore, poichè sarebbe stato necessario usare altri switch e tensioni supplementari.
Se ci si accontenta, realizzare il tutto risulta piuttosto semplice, come dimostra lo schema di figura 1.

Il progetto usa soltanto sei resistenze, tutte del valore di 4,7 kohm.
Dal punto centrale di ogni coppia di resistenze vengono derivati i tre punti di contatto T1, T2 e T3, dove andranno collegati i tre terminali del transistor in prova. A seconda delle preferenze, per il collegamento pratico dei piedini del transistor si può usare qualunque sistema, dai morsetti alle pinzette "coccodrillo".
Le tre resistenze inferiori hanno l'altra estremità collegata al "ground", mentre quelle superiori fanno capo a tre pin digitali di arduino, rispettivamente ai pin 12, 8 e 7.
Le tensioni presenti nel punto intermedio di ciascuna coppia di resistenze vengono lette, nei vari casi, da tre pin analogici, A1, A2 e A3.
I tre pin digitali vengono alternativamente impostati a livello HIGH uno alla volta, e per ogni combinazione vengono lette le tensioni su ciascuno dei terminali del transistor.
In base a tali valori, il programma decide il tipo del transistor (NPN o PNP) e individua in quale posizione si trova il terminale "base"; come già specificato, l'analisi termina qui, per mantenere quanto più semplice possibile la parte elettronica.


Codice da caricare sulla scheda:


int term1;
int term2;
int term3;
int gtr50;
int less5;
int npn;
int pnp;
int col;
int npnbas;
int emi;
int pnpbas;

void setup() {
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}

void loop() {
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(12, LOW);
gtr50 = 0;
less5 = 0;

//esamina la prima combinazione settando a High il primo pin
digitalWrite(12, HIGH);
term1 = analogRead(A1);
term2 = analogRead(A2);
term3 = analogRead(A3);
less5=0;// messo per prova
if (term1==0) {less5 = less5 + 1;}
if (term2==0) {less5 = less5 + 1;}
if (term3==0) {less5 = less5 + 1;}
if (less5==2) {pnpbas = 1;}
less5=0;// messo per prova
if (term1 > 50) { gtr50=gtr50+1; }
if (term2 > 50) { gtr50=gtr50+1; }
if (term3 > 50) { gtr50=gtr50+1; }
if (term1>50 && term2>50 && term3>50) {npnbas=1;}
Serial.print(term1);
Serial.print(" ");
Serial.print(term2);
Serial.print(" ");
Serial.print(term3);
Serial.print(" ");
Serial.println(less5);
less5=0;
delay(2000);

//esamina la seconda combinazione settando a High il secondo pin
digitalWrite(12, LOW);
digitalWrite(8, HIGH);
term1 = analogRead(A1);
term2 = analogRead(A2);
term3 = analogRead(A3);
if (term1==0) {less5 = less5 + 1;}
if (term2==0) {less5 = less5 + 1;}
if (term3==0) {less5 = less5 + 1;}
if (less5==2) {pnpbas = 2;}
if (term1 > 50) { gtr50=gtr50+1; }
if (term2 > 50) { gtr50=gtr50+1; }
if (term3 > 50) { gtr50=gtr50+1; }
if (term1>50 && term2>50 && term3>50) {npnbas=2;}
Serial.print(term1);
Serial.print(" ");
Serial.print(term2);
Serial.print(" ");
Serial.print(term3);
Serial.print(" ");
Serial.println(less5);
less5=0;
delay(2000);

//esamina la terza combinazione settando a High il terzo pin
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
term1 = analogRead(A1);
term2 = analogRead(A2);
term3 = analogRead(A3);
if (term1==0) {less5 = less5 + 1;}
if (term2==0) {less5 = less5 + 1;}
if (term3==0) {less5 = less5 + 1;}
if (less5==2) {pnpbas = 3;}
if (term1 > 50) { gtr50=gtr50+1; }
if (term2 > 50) { gtr50=gtr50+1; }
if (term3 > 50) { gtr50=gtr50+1; }
if (term1>50 && term2>50 && term3>50) {npnbas=3;}
Serial.print(term1);
Serial.print(" ");
Serial.print(term2);
Serial.print(" ");
Serial.print(term3);
Serial.print(" ");
Serial.print(less5);
Serial.print(" ");
less5=0;

if (gtr50==5) {
npn=1;
Serial.print("transistor NPN");
Serial.print(" - base su terminale ");
Serial.print(npnbas); }
else
if (gtr50==7) {
pnp=1;
Serial.print("transistor PNP");
Serial.print(" - base su terminale ");
Serial.print(pnpbas);
}

Serial.println();
Serial.println();
delay(2000);

}

reading boy
Un brevissimo commento al codice:

Vengono dichiarati come "output" i pin digitali 7, 8 e 12 e quindi definita la comunicazione seriale Serial.begin(9600).
Viene poi verificata la prima combinazione; con digitalWrite(12, HIGH) si manda a livello HIGH il pin 12, quindi si leggono le tensioni sui tre terminali term1, term2 e term3. In base ai valori ottenuti si decide se la base del transistor corrisponde come posizione al pin che in quel momento è a livello HIGH.
La stessa verifica viene fatta per le altre combinazioni, mandando a livello HIGH prima il secondo e poi il terzo pin.
I risultati vengono poi inviati al monitor seriale con Serial.print.
scheda arduino con breadboard per test transistori
figura 2: Possibile montaggio pratico realizzato su breadboard


scheda arduino, output su monitor seriale

figura 3: i risultati del test sul monitor seriale





 raffaele ilardo