I did a research on the forum about the G3TR but i have found notthing
I think it's a preatty interessing project. It sense and identify the transistor connected to the "shield"
just 2x10k res are needed.
Here is mine
Since the owner saved the sketch is in PDF ( -.- ) , extracting it properly is quite annoying. So i will copypaste the sketch here.
Enjoy:
/******************************************************************************
* filename: g3tr.pde
*
* G3TR means: Giuseppe Talarico Transistor Type Recognizer
*
* This version is for Arduino
*
* Just only two 10K resistors and a serial terminal program are needed to implement
* a simple and powerfull digital Transistor Tester.
* The circuit allows to test any type of transistor ( npn,pnp, n-channel, p-channel )
* both low or High Power.
* The program tell us if the transistor under test is working or not and which is his type
* for example: NPN-BJT, PNP-BJT, NCHANNEL-MOSFET, PCHANNEL-MOSFET.
* The program test diode too and tell us where the Anode is attached ( RED CABLE or BLACK CABLE)
* Devices broken or shorted are decoded too.
*
*
* date: 6 aprile 2012
* Author: Giuseppe Talarico
* giuseppetalarico.wordpress.com
*
*
*****************************************************************************/
/*
* G3TR Schematic:
*
*
* --------------------------------------------------------------> to GATE (BASE)
* |
* | ----------------------*
| | Arduino |
* | | |
* | -------| |
* --| 10K |--------|D9 |
* | -------| |
* | | D10 |------------------> to SOURCE (EMITTER)(A)(K)
* | | | -------*
---------------->|D8 D11 |---| 10K |-------> to DRAIN (COLLECTOR)(K)(A)
* | | -------- |
* ____/ ________|D6 | |
* | | | |
* ---| | |
* | D7 |<---------------*
-----------------------
*
*/
enum {FALSE,TRUE};
//------------------------- hardware abstractions ------------------------
// constants are used here to set pin numbers:
const byte BTN1 = 6; //Button Switch
const byte DRAIN_IN = 7; // if n-channel (npn) this bit is !(R_GATE_OUT)
const byte BJT_MOSFET_IN = 8; // if DIGITAL PIN 8 = L the devices is a MOSFET otherwise the devices is a BJT
const byte R_GATE_OUT = 9; // DIGITAL PIN 9 gate or base driver
const byte SOURCE_OUT = 10; // DIGITAL PIN 10 L --> N-Channel select, H --> P-channel select
const byte R_DRAIN_OUT = 11; // if DIGITAL PIN 11 = H then NPN else PNP
//----------------- constant String -----------------------------------------
const char title[] ="\n\n\r* Transistor Type Recognizer *\n\n\r" ;
const char prompt[] ="\n\rG3TR> ";
//----------------------- global variables ---------------------------------
boolean recognized;
//---------------------------------------------------------------------------
void setup()
{
Serial.begin(9600);
//configure outputs:
pinMode(R_GATE_OUT, OUTPUT);
pinMode(SOURCE_OUT, OUTPUT);
pinMode(R_DRAIN_OUT, OUTPUT);
//configure inputs:
pinMode(BJT_MOSFET_IN, INPUT);
pinMode(DRAIN_IN, INPUT);
pinMode(BTN1, INPUT);
digitalWrite(BTN1,HIGH); // internal pull-up ON
}
//================================= M A I N L O O P =====================================
void loop()
{
recognized=FALSE;
Serial.println(title);
Serial.print(prompt);
while (TRUE)
{
if (recognized)
{
recognized=FALSE;
while (digitalRead(BTN1)==1); // wait BTN1 pressed
delay(200);
Serial.print(prompt);
}
if(digitalRead(BTN1)==0) // wait BTN1 pressed
{
recognized=FALSE;
try_npn_nchannel();
if (!recognized)
{
try_pnp_pchannel();
if (!recognized)
{
try_diode();
if (!recognized)
{
try_short();
if (!recognized)
try_broken();
}
}
}
}
}//end while
} // end loop
//----------------------- g3tr procedures ---------------------------------
void try_npn_nchannel(void)
{
//Serial.println("try npn/N-channel...\n");
// Polarize the transistor under test like NPN or NCHANNEL
digitalWrite(R_GATE_OUT, HIGH); // gate (base) -------> H
digitalWrite(R_DRAIN_OUT, HIGH); // drain (collector)--> H
digitalWrite(SOURCE_OUT, LOW); // source (emitter) --> L
delay( 20 ); // msec
if(digitalRead(DRAIN_IN)== 0)
{
// may be npn or n-channel
digitalWrite(R_GATE_OUT,LOW); // gate (base) -------> L
delay(20);
if(digitalRead(DRAIN_IN)!=0)
{
//It is npn or n-channel
recognized =TRUE;
// now it decides for npn-bjt or nchannel-mosfet
digitalWrite(R_GATE_OUT,HIGH); // gate (base) ------ > H
delay(20);
if( digitalRead(BJT_MOSFET_IN)!= 0)
Serial.println(" N-CHANNEL MOSFET");
else
Serial.println(" NPN BJT");
}
}
}//end try_npn_nchannel
//----------------------------------------------------------------------------------------------------
void try_pnp_pchannel(void)
{
//Serial.println("try pnp/P-channel...\n");
// Polarize the transistor under test like PNP or PCHANNEL
digitalWrite(R_DRAIN_OUT,LOW); // drain (collector)---> L
digitalWrite(SOURCE_OUT, HIGH); // source (emitter) ----> H
digitalWrite(R_GATE_OUT, HIGH); // gate (base) -------> H
delay(20);
if( digitalRead(DRAIN_IN)==0)
{
// may be pnp or p-channel
digitalWrite(R_GATE_OUT, LOW); // gate (base) --> L
delay(20);
if( digitalRead(DRAIN_IN)!=0)
{
//It is pnp or p-channel
recognized =TRUE;
// now it decides for pnp-bjt or p-channel mosfet
digitalWrite(R_GATE_OUT, LOW); // gate (base) --> L
delay(20);
if( digitalRead(BJT_MOSFET_IN)== 0)
Serial.println("P-CHANNEL MOSFET");
else
Serial.println("PNP BJT");
}
}
}//end try_pnp_pchannel()
//---------------------------------------------------------------------------------------
void try_diode(void)
{
//Serial.println("try DIODE...");
//Polarize the DIODE under test
digitalWrite(R_DRAIN_OUT, HIGH); // Anode ---> H
digitalWrite(SOURCE_OUT, LOW); // Catode---> L
delay(20);
if(digitalRead(DRAIN_IN)==LOW)
{
//may be a DIODE; to verify, invert Polarization
digitalWrite(R_DRAIN_OUT, LOW); // Anode ---> L
digitalWrite(SOURCE_OUT, HIGH); // Catode---> H
delay(20);
if( digitalRead(DRAIN_IN) ==LOW)
{
recognized =TRUE;
Serial.println("DIODE [Anode on RED cable]");
}
}
if (!recognized)
{
//Polarize the DIODE under test in a different way
digitalWrite(R_DRAIN_OUT, LOW); // Catode--> L
digitalWrite(SOURCE_OUT, HIGH); // Anode---> H
delay(20);
if(digitalRead(DRAIN_IN)==HIGH)
{
//may be a DIODE, so invert Polarization
digitalWrite(R_DRAIN_OUT,HIGH); // Catode --> H
digitalWrite(SOURCE_OUT,LOW); // Anode --> L
delay(20);
if( digitalRead(DRAIN_IN)==HIGH)
{
recognized =TRUE;
Serial.println("DIODE [Anode on BLACK cable]");
}
}
}
}//end try_diode()
//-----------------------------------------------------------------------------------------
void try_short(void)
{
digitalWrite(R_DRAIN_OUT, HIGH); // H
digitalWrite(SOURCE_OUT, LOW); // L
delay(20);
if( digitalRead(DRAIN_IN)==0)
{
digitalWrite(R_DRAIN_OUT, LOW); // L
digitalWrite(SOURCE_OUT, HIGH); // H
delay(20);
if(digitalRead(DRAIN_IN)!=0)
{
recognized =TRUE;
Serial.println("DEVICE SHORTED");
}
}
}//end try_short();
//---------------------------------------------------------------------------------
void try_broken(void)
{
digitalWrite(R_DRAIN_OUT, HIGH); // H
digitalWrite(SOURCE_OUT, LOW); // Ldelay(20);
if( digitalRead(DRAIN_IN)!=0)
{
digitalWrite(R_DRAIN_OUT, LOW); // L
digitalWrite(SOURCE_OUT, HIGH); // Hdelay(20);
if(digitalRead(DRAIN_IN)==0)
{
recognized =TRUE;
Serial.println("DEVICE BROKEN");
}
}
}//end try_broken()