Ultra-semplice induttanzimetro con Arduino

Background: dovevo realizzare un circuito con delle induttanze, da avvolgere a mano su dei toroidi in ferrite, e mi sono reso conto di non aver nessun modo per misurarne il valore, in quanto non possiedo un induttanzimetro. Il mio buon tester digitale, ho scoperto, misura anche la distanza terra-luna, ma non misura le induttanze. Male.

Quindi mi serviva un induttanzimetro… avevo un arduino sulla scrivania, e mi sono chiesto: “vuoi vedere che qualche anima buona ha costruito un’induttanzimetro con arduino???”. Una rapida ricerca in rete, ed ecco arrivare decine di schemi, più o meno complessi, tra cui questo, decisamente semplicissimo: http://soundation.blogspot.it/2012/07/arduino-inductance-meter.html .

Il principio è molto semplice: con Arduino si genera un impulso di durata prefissata su un pin, e lo si dà “in pasto” ad un amplificatore operazionale, al quale sono collegati pochissimi componenti, tra cui l’induttanza da testare. Fatto ciò, si misura il tempo in cui l’uscita di questo circuito, collegato ad arduino su un altro pin, raggiunge un certo livello di tensione. Un paio di calcoli matematici, ed otteniamo il valore dell’induttanza. Semplice, no?

Il banalissimo circuito è questo: inductance_meter_schematic

Il tempo di recuperare tutti i componenti necessari dalla mia scatola di vecchie schede di recupero, ed ecco il circuito realizzato su pseudo-shield a millefori:
DSCN1252_small

Per visualizzare la lettura, ho recuperato un display LCD alfanumerico 16×1, proveniente (credo) da un vecchio centralino telefonico. I pin header che si vedono in alto, infatti, sono le connessioni al display. I due fili in primo piano (rosso e bianco) vanno ai due morsetti a coccodrillo per collegare l’induttanza.

Ed ecco il pseudo-shield montato sulla scheda Luigino (nota: Luigino è un clone Arduino, perfettamente compatibile dal punto di vista firmware, ma ha i pin di espansione disposti in modo diverso, e manca di porta usb integrata. Infatti va programmato attraverso un cavetto USB-RS232. Inoltre i pin sono disposti in passo standard 2.54, così da poter utilizzare delle normali piastre millefori come shield. Praticamente perfetto per quello che mi serviva: uno strumento da  programmare una sola volta, e tirare fuori dal cassetto all’occorrenza):

DSCN1253_small

Qui si può vedere il display montato:

DSCN1254_small

e infine lo strumento in azione:
(nella foto si nota che l’induttanza è da 120 uH, con tolleranza 10%, il che la porta ad avere un valore reale compreso tra 108 e 132 uH… lo strumento segna 131.57 uH… direi che è plausibile! Non sarà uno strumento professionale, ma considerando che il tutto non mi è costato nulla, a parte i 10 euro del Luigino, va benissimo!)

DSCN1255_small

DSCN1256_small

Il sorgente dello sketch arduino è il seguente:

// Originally by reibot.org, modified by soundation.ch

// reworked by Salvatore Carotenuto (ultimoistante)
// of StartupSolutions (www.startupsolutions.it | ultimoistante.wordpress.com)

// 16x1 LCD circuit connections:
// LCD pin 4 (RS) to digital pin 12
// LCD pin 6 (Enable) to digital pin 11
// LCD pin 11 (DB4) to digital pin 5
// LCD pin 12 (DB5) to digital pin 4
// LCD pin 13 (DB6) to digital pin 3
// LCD pin 14 (DB7) to digital pin 2
// LCD pin 5 (R/W) to ground
// LCD pin 3 (contrast adjust) to ground
// LCD pin 2 (Vdd) to +5V
// LCD pin 1 (Vss) to ground

// library to drive the 16x1 LCD display
#include <LiquidCrystal.h>

// initialize the LCD library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// variables used for calculations
double pulse, frequency, capacitance, inductance;

void setup()
   {
   // pin 13 is the input to the circuit (connects to 150ohm resistor),
   // pin 10 is the comparator/op-amp output.
   // visit reibot.org for guide
   pinMode(13, OUTPUT);
   pinMode(10, INPUT);

   // --- Capacitor exact value setting ---
   // Use a multimeter to measure the exact value of capacitor for more accurate readings.
   // My capacitor is 1.021 uF, so the value (in Farads) is 0.000001021
   // Note: an ideal 1uF capacitor will be equal to 1.E-6 (0.000001)
   //capacitance = 1.E-6;
   capacitance = 0.000001021;

   // set up the LCD's number of columns and rows
   // NOTE: the 16x1 display is treated as an 8x2
   lcd.begin(8, 2);

   delay(200);

   // starts serial communication, just for debugging purpose
   //Serial.begin(9600);
   }

void loop()
   {
   // does a pulse on pin 13
   digitalWrite(13, HIGH);
   delay(5); //give some time to charge inductor.
   digitalWrite(13, LOW);
   delayMicroseconds(100);

   // reads the pulse duration, in microseconds, on pin 10 (comparator/op-amp output)
   pulse = pulseIn(10, HIGH, 5000);

   // debug
   //Serial.print("pulse: ");
   //Serial.println(pulse);

   lcd.clear();

   if(pulse > 0.1)
      {
      frequency = 1.E6 / (2 * pulse);
      inductance = 1. / (capacitance * frequency * frequency * 4. * 3.14159 * 3.14159);
      inductance *= 1E6; //note that this is the same as saying inductance = inductance*1E6

      // writes read value on the LCD display
      lcd.print("L value:");
      lcd.setCursor(0, 1);
      if(inductance >= 1000)
         {
         lcd.print ((inductance/1000)-0.5);
         lcd.print ("mH");
         }
      else
         {
         lcd.print (inductance + 10);
         lcd.print ("uH");
         }
      }
   else if(pulse < 0.1)
      {
      lcd.print("Insert i");
      lcd.setCursor(0, 1);
      lcd.print("nductor");
      }
   delay(300);
   }

Nota, IMPORTANTE: il valore esatto del condensatore C1 è fondamentale nella misura, in quanto è una delle costanti nel calcolo della formula. Pertanto, è necessario misurarne il valore preciso tramite un capacimetro digitale (di solito presente anche sui multimetri di fascia media), prima di saldarlo nel circuito e inserire il valore letto nel sorgente dello sketch arduino.

Happy measurements!

Annunci

10 thoughts on “Ultra-semplice induttanzimetro con Arduino

  1. Salve vorrei costruire questo induttanzimetro, per quello che riguarda lo schema vorrei capire
    dove vanno a finire i pin “ARDUINO” su arduino uno e come va collegato il display 16×2 grazie anticipatamente.

  2. Salve, Marco. I pin da collegare al comparatore sono il 10 e il 13, come specificato nel codice sorgente.
    Per il collegamento del display puoi fare riferimento alla documentazione della libreria LiquidCrystal per arduino.

  3. Complimenti per la realizzazione, che ho riprodotto su breadboard (è il mio primo montaggio con Arduino). Riguardo al codice, vorrei solo un chiarimento: che significa al rigo 85 “lcd.print (inductance + 10)”? Non mi è chiaro il significato di questa ADDIZIONE!

  4. Ciao… beh, in in tutta sincerità non mi ricordo perchè ho inserito quell’addizione. Molto probabilmente si tratta di un “offset di taratura”. Puoi vedere, infatti, che c’è qualcosa di simile anche alla riga 80 (lcd.print ((inductance/1000)-0.5);) nella quale viene sottratto un 0.5, in caso di scala in milliHenry (che c’era anche nel codice originale)

  5. Salve..induttazimetro mi ha funzionato al primo colpo..
    Ho fattonalcune prove:
    ho misurato induttanze di valore alto es 220uH,330uH e la misure rientra nella tollerenza..
    Pero misurando l’induttanze di basso valore 1.5uH 3.5uH l’induttazimetro non legge nulla.
    Poi un’altro dato strano,ho misurato 3 indttanze di 10uH e lo strumento segnava per tutte e tre le impednze il valore di 19,71uh..Spero in una tua risposta ciao Mauro

  6. Ciao Mauro. Purtroppo si tratta pur sempre di uno strumento artigianale, e la sua precisione è basata sulla misurazione, da parte di arduino, del tempo in cui l’impulso inviato all’induttanza raggiunga un certo valore di tensione. Proprio per questo motivo, su valori bassi (e quindi bassissimi tempi di “rise up”) l’arduino non riesce a misurare il tempo con sufficiente precisione.
    Ti consiglio, ovviamente, di misurare con una certa precisione il valore del condensatore e di inserirlo nel codice. Purtroppo è l’unica taratura possibile.

  7. Grazie della risposta e per la collaborazione…Molto apprezzata
    Ho pensato di ingannare l’arduino ( sperimentare) sempre che qualcuno non l’ha fatto prima di me. Vorrei prendere due impedenze di diverso valore, andare da un amico , misurarle con un induttanzimetro professionale , cambiare il valore di C1 sperimentalmente per ottenere il valore più vicino delle impedenze misurate. Se hai provato a farlo te , fammi sapere cosi non perdo tempo. A me mi interessa proprio fare e misurare le impedenze di basso valore…
    Il condensatore e stato misurato con due strumenti, uno dava 1,3mF e l’altro 1,043mf io ho messo quest’ultimo perché e’ uno strumento più specifico alle misurazioni dei condensatori..
    Grazie ancora Mauro

  8. Beh, si, quella è la strada giusta: misurare un’induttanza di test con un induttanzimetro professionale, e poi ritoccare il valore di C1 nel codice, finchè non raggiungi un valore più o meno simile (considerando quel minimo di tolleranza che puoi “tollerare”) 😉
    Oppure, se non hai uno strumento di precisione, puoi acquistare un’induttanza ad alta precisione (quelle che si usano proprio per tarare gli strumenti), e fare la stessa cosa…

  9. Bravo! Ottimo circuito, ha funzionato subito. Ho cosi’ potuto capire che valori avevano una decina di induttanze che avevo in un cassetto. Cosi almeno potro’ usarle. Grazie ancora…

  10. grazie, ma il merito va agli autori originali, citati nel testo. Io mi sono solo limitato a riprodurre il circuito, e sistemare un pò il firmware 🙂

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...