Transistor tester con Arduino

Nei cassetti delle scrivanie o nei contenitori più svariati dell'appassionato di elettronica, riposano a volte per tempi molto lunghi degli oggettini minuscoli che, con un pò di attenzione, appaiono essere dei transistor. Ma la loro sigla? O perchè, sfrega oggi e sfrega domani, è diventata illegibile, o perchè il transistor proviene da materiali recuperati, e quindi è marchiato con una sigla particolare, diventa 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.
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 che segue:

prova-transistor con scheda arduino

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.


Il codice è riportato di seguito:


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);

}
In questa immagine è mostrato un possibile montaggio pratico realizzato su breadboard:

prova transistor con arduino - montaggio pratico




I risultati del transistor-test mostrati sul monitor seriale

risultati transistor-test su monitor seriale

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.



ebook "Introduzione all'elettronica"


Ritorna all'indice generale