Ce didacticiel nous montre comment créer notre propre détecteur de métaux DIY ESP32 fonctionnel à partir de zéro en utilisant un microcontrôleur compatible Wi-Fi abordable, une poignée de composants électroniques facilement disponibles et une simple bobine de cuivre enroulée à la main. Au lieu de s’appuyer sur des capteurs spécialisés coûteux ou des circuits industriels complexes, ce projet de circuit de détecteur de métaux PI utilise des pièces de base d’amateurs pour construire un localisateur autonome.
Nous serons guidés pour enrouler notre propre bobine d’induction, assembler le circuit de commutation à impulsion simple sur un PCB zéro et flasher le code de ce détecteur de métaux à induction par impulsion DIY. Mieux encore, il propose une surveillance intégrée du smartphone sur un tableau de bord Web local, nous permettant d’afficher les données cibles en temps réel et l’estimation de la profondeur sans fil sur n’importe quel navigateur de téléphone. Vous pouvez également consulter des projets ESP32 et des projets IoT similaires réalisés précédemment ici sur Circuit Digest.
Résumé rapide : ce que couvre ce projet
✓ Méthode de détection : Induction d’impulsions (PI) – meilleures performances dans les sols minéralisés que les détecteurs VLF
✓ Contrôleur : Kit de développement ESP32 (double cœur : le Core 1 échantillonne la bobine, le Core 0 héberge le tableau de bord)
✓ Plage de détection – Jusqu’à 15 cm, calibré via deux points de référence (0 cm et 2 cm)
✓ Surveillance– Tableau de bord Web en direct basé sur un téléphone via un point d’accès Wi-Fi, aucune installation d’application nécessaire
✓ Enceinte – Boîtier personnalisé en deux parties imprimé en 3D (fichiers STL inclus)
✓ Coût de construction : utilise des pièces d’amateur courantes – aucun CI de détecteur spécialisé n’est requis
Comment fonctionne ce détecteur de métaux DIY ESP32 ?
Ce projet utilise la méthode Pulse Induction pour la détection des métaux. Ce circuit envoie une impulsion de l’ESP32 à notre bobine de cuivre enroulée manuellement. Après un certain temps, l’impulsion est soudainement coupée, ce qui produit un champ magnétique à proximité de la bobine. Lorsqu’il n’y a aucun métal à proximité de la bobine, le champ magnétique s’effondre instantanément, provoquant une chute rapide de la tension. Cependant, lorsqu’un objet métallique est à proximité, l’effondrement du champ magnétique induit un courant de Foucault dans la cible métallique. Ce courant de Foucault génère son propre champ magnétique secondaire, qui neutralise la désintégration et ralentit le taux de désintégration global, laissant une tension mesurable qui reste au-dessus de notre seuil.
L’ESP32 lit ensuite le taux de décroissance à l’aide de la broche ADC. Dans le même temps, l’ESP32 gère également l’hébergement du hotspot et du serveur Web, où nous pouvons surveiller le détecteur de métaux. Une fois le circuit allumé, nous devons connecter notre téléphone au point d’accès WiFi de l’ESP32, saisir l’adresse IP qui s’affiche sur le moniteur série dans le navigateur Chrome et cliquer sur Entrée. La page Web de surveillance s’ouvrira et à partir de là, nous pourrons surveiller le détecteur de métaux. Voici un autre projet de détecteur de métaux Arduino dans lequel nous avons montré comment un détecteur de métaux est intégré à Arduino Nano.
Composants requis pour le détecteur de métaux DIY ESP32
Vous trouverez ci-dessous la liste des composants requis pour construire ce circuit de détecteur de métaux PI, avec leurs spécifications.
| S.non | Composants | Spécification | Quantité |
| 1. | Microcontrôleur | Kit de développement ESP32 | 1 |
| 2. | Résistance | 200 Ω, 220 Ω | 1 |
| 3. | Condensateur | 0,1 nF (Céramique) | 1 |
| 4. | Fil de cuivre | Fil de cuivre émaillé 0,3 mm-0,5 mm | 6,5 mètres |
| 5. | Ronfleur | Buzzer passif 3,3 V | 1 |
| 6. | DIRIGÉ | LED 3,3 V | 1 |
| 7. | Batterie | Batterie 18650 3,7 V | 1 |
| 8. | Support de batterie | Support de batterie 18650 | 1 |
| 9. | Module de charge de batterie | TP4056 (03962A) | 1 |
| 10. | Changer | Interrupteur à bascule | 1 |
| 11. | Diode | IN4007 | 1 |
Schéma de câblage du détecteur de métaux ESP32
Vous trouverez ci-dessous le schéma de câblage complet du détecteur de métaux ESP32 pour cette version à induction pulsée.

Ce circuit de détecteur de métaux à induction pulsée DIY est assez simple. Une extrémité de la résistance de 200 Ω est connectée au GPIO 26, l’autre extrémité de la résistance est connectée à l’anode de la diode IN4007, et une extrémité de la bobine de recherche, qui est enroulée par nos soins de 25 à 30 tours d’un diamètre de 7 cm.
Brochage du détecteur de métaux ESP32
| Broche ESP32 | Connecté à | Fonction |
| GPIO 26 (pulsePin) | Résistance 200Ω → bobine + diode anode | Pilote l’impulsion de la bobine |
| GPIO 33 (capPin) | Cathode diode + condensateur 0,1nF | Lit la tension de décroissance (ADC) |
| GPIO2 (LED) | Résistance 220Ω → anode LED | Indicateur d’état de détection de cible |
| GPIO 4 (bouz) | Broche de commande du buzzer passif | Alerte de détection sonore (tonalité PWM) |
| NIV / 5V | TP4056 SORTIE+ | Entrée d’alimentation |
| GND | TP4056 SORTIE / masse commune | Référence commune |
L’inductance de notre bobine est d’environ 98 μH, calculée à l’aide de la formule ci-dessous.
L = (μο * N^2 * A) / l
Où,
L- Inductance à Henries
μο- Perméabilité, c’est 4π*10-7 pour l’Air
N- Nombre de tours
A- Surface centrale interne (πr2) en m2
l- Longueur de la bobine en mètres
La cathode de la diode est connectée au GPIO 33 et aux condensateurs céramiques 0,1 nF, une extrémité, l’autre extrémité du condensateur céramique 0,1 nF est connectée à la deuxième extrémité de la bobine de recherche et au GND. Les bornes positives et négatives de la batterie 3,7 V sont connectées aux bornes B+ et B- du module de charge TP4056, tandis que le OUT+ est connecté à la broche VIN ou 5V de l’ESP32 et le OUT- est connecté à la broche GND de l’ESP32. Une extrémité de la résistance de 220 Ω est connectée au GPIO 2 et l’autre extrémité est connectée à l’anode de la LED ; la cathode de la LED est connectée à la broche GND de l’ESP32. La broche de commande du buzzer est connectée au GPIO 4, la broche VCC à la broche 3,3V et la broche GND à la broche de masse de l’ESP32. Vous pouvez également consulter le circuit de détection de métaux simple, qui est construit sans utiliser de microcontrôleurs.
Conception de boîtier imprimé en 3D
Ce projet comprend un boîtier compact en deux parties conçu sur mesure dans Onshape pour abriter en toute sécurité tous les composants électroniques. Le corps principal a des dimensions globales de 81 mm x 96 mm x 45 mm (hauteur totale) et comprend des découpes précises pour le matériel du système : un trou de 4 mm pour l’interrupteur à bascule, un emplacement de 11 mm pour le port de chargement USB Type-C et deux trous de 2 mm de diamètre pour acheminer proprement le fil de bobine de cuivre à l’intérieur.

Pour imprimer le boîtier, il suffit de télécharger le Fichiers STL pour les deux parties du boîtier et importez-les dans n’importe quelle application de découpe 3D standard comme Cura ou PrusaSlicer. Configurez vos profils de tranchage préférés : hauteur de couche de 0,2 mm et 20 remplissages pour préparer le modèle pour votre machine. Enfin, envoyez le G-code généré à votre imprimante 3D pour créer une enceinte.
Induction d’impulsions vs VLF : choisir le bon circuit de détecteur de métaux
Avant de construire, il est utile de comprendre pourquoi ce projet utilise un circuit à induction d’impulsions au lieu de la conception VLF (très basse fréquence) plus courante utilisée dans la plupart des détecteurs grand public.
| Paramètre | Induction d’impulsions (PI) | VLF (très basse fréquence) |
| Conception de bobine | Bobine simple (émission + réception) | Double bobine (émission et réception séparées) |
| Performance en sol minéralisé | Excellent – largement inchangé | Mauvais – sujet aux faux signaux |
| Cibler la discrimination | Limité (principalement présence + profondeur) | Bon (peut identifier le type de métal) |
| Complexité des circuits | Simple – idéal pour les constructions de bricoleurs/amateurs | Plus élevé – nécessite un équilibrage précis à double bobine |
| Cas d’utilisation typique | Plage, sol minéralisé/humide, chasse aux reliques | Chasse aux pièces/bijoux en sol normal |
Étant donné que ce détecteur de métaux DIY ESP32 est conçu pour être simple à construire et reste très précis sans utiliser de circuits de discrimination avancés, la méthode PI à bobine unique est idéale pour la construction amateur.
Explication du code
Le code est écrit dans l’IDE Arduino pour la détection de métaux en temps réel et l’estimation de distance à l’aide d’un microcontrôleur ESP32, où le noyau 1 sert d’échantillonnage et de suivi de ligne de base dynamique et le noyau 0 héberge une page Web en toute sécurité.
Carte des broches d’E/S et configuration du bourdonnement
#include
#include
#define capPin 33
#define pulsePin 26
#define led 2
#define buz 4
#define THRESHOLD 80
#define GLITCH_FILTER 3
#define QUIET_RESYNC_LOOPS 40
// PWM SETTINGS FOR PASSIVE BUZZER
#define BUZ_FREQ 2500
#define BUZ_RESOLUTION 8
#define TON_DUTY_LOW 128
#define TON_DUTY_OFF 0
Constante d’échelle de distance
Cette section importe les bibliothèques Wi-Fi et asynchrones pour le tableau de bord Web. Il mappe les broches physiques de l’ESP32, comme capPin est GPIO 33, pulsePin est GPIO 26, la broche LED est GPIO 2 et buzPin est GPIO 4. La variable THRESHOLD est utilisée pour contrôler la sensibilité de l’appareil, tandis que GLITCH_FILTER est le nombre de boucles séquentielles requises pour que le buzzer s’allume et QUITE_RESYNC_LOOP est le nombre de boucles requises pour remettre à zéro la ligne de base. Les autres variables sont utilisées pour contrôler la fréquence et la tonalité du buzzer.
const float CAL_DIFF_AT_0CM = 900.0;
const float CAL_DIFF_AT_REF = 140.0;
const float REF_DISTANCE_CM = 2.0;
const float MAX_DISTANCE_CM = 15.0;
const float SMOOTHING_ALPHA = 0.20;
Tableau de bord Web HTML/JS asynchrone
Ces paramètres calibrent le calculateur de profondeur en apprenant à l’ESP32 à quoi ressemble le signal à 0 cm (toucher) et à 2 cm. Il utilise ces deux points pour deviner la distance de la cible jusqu’à un maximum de 15 cm.
const char index_html[] PROGMEM = R"rawliteral(
…..
)rawliteral";
Logique d’extraction en profondeur
Cette section stocke le code complet de notre page Web adaptée aux mobiles directement dans la mémoire flash de l’ESP32 à l’aide de PROGMEM pour économiser sur la RAM dynamique. Le JavaScript intégré dispose d’une boucle d’arrière-plan optimisée qui utilise l’API async fetch() du navigateur pour mettre à jour les métriques de votre serveur toutes les 150 ms sans rechargement complet de la page Web.
float diffToDistanceCm(float diffMag) {
if (diffMag <= 1) diffMag = 1;
const float r0 = 0.3;
float k = CAL_DIFF_AT_0CM * pow(r0, 3.0);
float kRef = CAL_DIFF_AT_REF * pow(REF_DISTANCE_CM, 3.0);
k = (k + kRef) / 2.0;
float distCm = pow(k / diffMag, 1.0 / 3.0);
if (distCm < 0) distCm = 0;
if (distCm > MAX_DISTANCE_CM) distCm = MAX_DISTANCE_CM;
return distCm;
}
Logique de suivi de base adaptative
Dans cette section, les modifications brutes du signal sont converties en une mesure physique. Ceci calcule une courbe mathématique de root de cube inverse ( pow(…, 1.0 / 3.0 ) ) pour donner une lecture très précise de la profondeur en centimètres linéaires.
if (!targetPresent) {
quietLoops++;
// Fast baseline correction when no metal is present
localSumExpect = localSumExpect + ((long)sum - avgsum);
if (quietLoops > QUIET_RESYNC_LOOPS * 16) {
localSumExpect = ((long)sum) << 6;
quietLoops = 0;
}
} else {
quietLoops = 0;
// Ultra-slow tracking when metal is present.
// This prevents baseline lockup and allows the buzzer to turn off immediately when metal is removed.
localSumExpect = localSumExpect + (((long)sum - avgsum) >> 3);
}
Mécanisme d’impulsion de bobine à grande vitesse
Cette section gère la surveillance continue à l’intérieur de la boucle principale sur Core 1. Lorsqu’aucun métal n’est à proximité, la ligne de base se corrige automatiquement rapidement pour suivre les changements. Lorsque du métal est détecté, au lieu de geler complètement, ce suivi lent empêche le blocage de la ligne de base et permet au détecteur de récupérer et de faire taire le buzzer dès que le métal est retiré.
void applyPulses() {
for (int i = 0; i < 3; i++) {
digitalWrite(pulsePin, HIGH);
delayMicroseconds(6);
digitalWrite(pulsePin, LOW);
delayMicroseconds(6);
}
}
Cette fonction effectue l’opération physique de base du circuit du détecteur de métaux PI. Il fait monter et descendre la broche du pilote de bobine exactement trois fois en rafales de 6 microsecondes. Cette commutation rapide crée une pointe électromagnétique forte et momentanée dans notre bobine de cuivre enroulée manuellement, induisant les courants de Foucault nécessaires dans les métaux cibles proches pour effectuer un balayage par induction d’impulsions.
Sortir
Ce détecteur dispose d’un serveur Web qui offre un tableau de bord mobile en direct de la présence de la cible, de l’écart du signal brut (Diff) et des estimations de profondeur en centimètres. L’ESP32 pilote également la télémétrie physique en déclenchant un buzzer passif pour générer un son lorsqu’un métal est détecté.
Dépannage du détecteur de métaux DIY ESP32
1. Que faire lorsque de petits objets ne sont pas détectés ?
Réparer: Pour détecter le petit objet dans ce détecteur de métaux, nous devions réduire la valeur SEUIL dans notre code (par exemple, la réduire de 80 à 50). Cela rend le logiciel suffisamment sensible pour détecter de minuscules changements de tension provenant de petites pièces de monnaie ou d’anneaux.
2. Que faire lorsque la bobine ne détecte aucune taille de métal ?
Réparer: Grattez le revêtement en émail des extrémités des fils. Le fil émaillé possède une couche isolante invisible. Utilisez du papier de verre ou un couteau tout usage pour gratter les deux extrémités avant de souder afin de rendre ce détecteur de métaux PI entièrement fonctionnel.
3. Que faire lorsque le système présente des problèmes ou émet un bip constant ?
Réparer: Connectez un terrain d’entente. Assurez-vous qu’un fil solide relie la broche ESP32 GND directement à la borne négative (-) de notre module de charge de batterie afin que tous les composants partagent la même référence de tension nulle.
4. Comment vérifier que la bobine est correctement enroulée ?
Réparer: Testez la continuité et la résistance. Utilisez un multimètre pour vérifier que la bobine émet un bip d’un bout à l’autre (pas de pause). La résistance totale doit être très faible, généralement comprise entre 0,5 Ω et 2 Ω
Détecteur de métaux ESP32 GitHub
Trouvez tout ce dont vous avez besoin pour recréer le détecteur de métaux ESP32, y compris le code source, les détails de câblage et les instructions de configuration. Clonez le référentiel et commencez à créer votre propre détecteur dès aujourd’hui.
Apprenez l’ESP32 à travers des projets du monde réel

ESP32 Discours en texte à l’aide de l’API AI- I2S Mic et Wit.ai
Dans ce projet, nous allons apprendre à créer un système de synthèse vocale ESP32 à l’aide d’une carte de développement ESP32. Nous utiliserons un micro I2S pour enregistrer la parole et un écran OLED pour afficher le texte converti.

Construisez un réveil parlant à l’aide du XIAO ESP32-S3
Le réveil parlant ESP32 intégré dans ce didacticiel remplace le bip à une heure programmée et attend de l’utilisateur qu’il interprète la raison du bip. Bien que fonctionnelle, cette approche manque d’intelligence et de contexte.

Compteur d’énergie intelligent basé sur l’IoT avec alerte SMS
Ce compteur d’énergie intelligent utilisant le projet IoT se concentre principalement sur la réduction de la latence des données et sur l’ajout d’une fonction de sécurité importante. Chaque fois que le système détecte des conditions anormales comme une basse tension, un courant élevé ou tout comportement inhabituel, une alerte SMS est envoyée au numéro de téléphone enregistré.
Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

-
ESP32 PLC 21 - Contrôleur industriel basé sur ESP32
-
Freenove ESP32 Affichage ESP32-S3 CYD 5.0" 800x480 IPS Capacitif Tactile
