Inductancemètre Arduino
La valeur d'une bobine, d'une self, donc son inductance est parfois difficile à lire par absence de marquage ou un code un peu exotique. Cet inductancemètre rendra de bons services pour l'identification du composant et son inductance, même si sa précision n'est pas excellente du fait de sa simplicité.
Le projet
J' utilise l'environnement Arduino pour programmer un atmega328, avec quelques composants périphériques.
On trouve facilement sur de nombreux sites ce type d'inductancemètre comme sur Electronoobs.
Dans mon projet, j'ai remplacé l'afficheur LCD par un écran Oled, ce qui rend le projet aisément intégrable dans un petit boîtier.
Le principe de fonctionnement reste le même :
Un condensateur en parallèle avec la bobine inconnue forment un circuit résonnant. Une impulsion délivrée par la broche 13 de l'arduino met le circuit en oscillation. Un comparateur LM339 met en forme le signal et on mesure le temps écoulé entre le front montant et le front descendant sur la broche 11.
Le temps est converti en fréquence.
On applique ensuite dans le programme la formule de calcul, pour déterminer l'inductance :
Les composants
Un inductancemètre autonome
Une carte Arduino et une plaque de connexions ce n'est pas très pratique pour effectuer une mesure.
Pour mettre en boîtier, je réalise le montage suivant et je soude le tout sur une plaque d'epoxy pastillée.
Le schéma structurel permet de mieux comprendre le câblage.
On ajoute un quartz de 16 Mhz, 2 condensateurs céramiques de 22 pf( C2, C3 et un condensateur de découplage de 100 nf ( C4).
Attention à bien alimenter le montage sous 5V continu, avec un chargeur de portable par exemple !
L'atmega328 de la carte Arduino possède un bootloader qui permet sa programmation par le port USB. En utilisant 2 cartes Arduino, on peut flasher le bootloader dans un Atmega328. Il suffit après de téléverser le programme et retirer l'atmega328 du support de la carte Arduino et le placer sur le montage définitif.
Comme on ajoute un oscillateur à quartz avec Q1, C2, C3, à la mise sous tension le programme démarrera automatiquement.
Pour graver le bootloader dans l'artmega328, je vous propose 3 méthodes .
Le montage
J'utilise une carte Arduino pour le développement en réalisant les connections suivantes sur plaque d'essai.
La carte Arduino alimente l'ensemble en 5V
Le LM339 est un quadruple comparateur analogique. On utilise q'un seul comparateur
le N°2
en respectant
le brochage:
(Input 2 - ) -> broche 6
(Input 2 +) -> broche 7
(Output 2 ) -> broche 1
Un autre des 4 comparateurs peut être utilisé.
Le montage réalisé sur une plaque de connexions
Le programme
Le programme utilise l'instruction PulseIn qui mesure la durée du signal entre le front montant et le front descendant sur la broche 11 de l'Arduino.
Il caclule la fréquence et utilise la formule mentionnée plus haut pour en déduire la valeur de l'inductance.
Comme on peut mesurer des inductances de quelques µH à plusieurs centaines de mH, 2 affichages sur l'écran Oled sont nécessaires pour plus de clarté.
La bibliothèque Afafuit_SSD1306 gère l'affichage Oled, pour tout savoir sur son utilisation, je vous recommande le site de Passion Electronique où l'installation et l'utilisation est détaillée avec de nombreux exemples.
// JMD Lmeter
// 0ctober 2022
//13 is the input to the circuit (connect to 150ohm resistor), 11 is the comparator/op-amp output.
#include < Adafruit_SSD1306.h >
#define adresseI2CecranOLED 0x3C
Adafruit_SSD1306 ecranOLED(128, 64, &Wire , -1);
double pulse, frequency, capacitance, inductance, inductance_mH;
void setup(){
// Initialisation de l'écran OLED
if(!ecranOLED.begin(SSD1306_SWITCHCAPVCC, adresseI2CecranOLED))
while(1);
{
ecranOLED.setTextColor(SSD1306_WHITE, SSD1306_BLACK);
Serial.begin(115200);
pinMode(11, INPUT); //Input from the comparator output
pinMode(13, OUTPUT);//output through a 150 ohm resistor to thr LC circuit
Serial.println("HELLO");
delay(1000);
Serial.println("JMD Lmeter");
delay(2500);
}
}
void loop(){
digitalWrite(13, HIGH);
delay(5);//give some time to charge inductor.
digitalWrite(13, LOW);
delayMicroseconds(100); //make sure resination is measured
pulse = pulseIn(11, HIGH, 5000);//returns 0 if timeout
if(pulse > 0.1){ //if a timeout did not occur and it took a reading:
capacitance = 100.E-4; // <- insert value here
frequency = 1.E4/(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
inductance_mH = inductance/1000;
//Serial print
Serial.print("High for uS:");
Serial.print( pulse );
Serial.print("\tfrequency Hz:");
Serial.print( frequency );
Serial.print("\tinductance uH:");
Serial.println( inductance );
delay(10);
//Oled print
ecranOLED.clearDisplay();
ecranOLED.setTextSize(2);
ecranOLED.setCursor(2, 2);
ecranOLED.print("Inductance");
if (inductance > 1000){ //Display value in mH
ecranOLED.setCursor(8, 25);
ecranOLED.print(inductance_mH);
ecranOLED.setCursor(34, 45);
ecranOLED.print("mH");
}
else {
ecranOLED.setCursor(8, 25); //Display value in µH
ecranOLED.print(inductance);
ecranOLED.setCursor(34, 45);
ecranOLED.print(" uH");
}
ecranOLED.setTextSize(1); // Display write Jmd
ecranOLED.setCursor(93,52);
ecranOLED.print("Jmd");
ecranOLED.drawRect(88,47,30,17,WHITE);
ecranOLED.display();
delay(200);
}
}