Table des matières:

Détecteur à induction d'impulsions basé sur Arduino - LC-Trap : 3 étapes
Détecteur à induction d'impulsions basé sur Arduino - LC-Trap : 3 étapes

Vidéo: Détecteur à induction d'impulsions basé sur Arduino - LC-Trap : 3 étapes

Vidéo: Détecteur à induction d'impulsions basé sur Arduino - LC-Trap : 3 étapes
Vidéo: 3 удивительных магнитных ускорителя | Magnetic Games 2024, Juillet
Anonim
Détecteur à induction d'impulsions basé sur Arduino - LC-Trap
Détecteur à induction d'impulsions basé sur Arduino - LC-Trap

En cherchant d'autres idées pour un simple détecteur de métaux Ardino Pulse Induction avec une seule tension d'alimentation, je suis tombé sur la page d'accueil de Teemo:

www.digiwood.ee/8-electronic-projects/2-metal-detector-circuit

Il a créé un simple détecteur à induction d'impulsions utilisant le principe LC-Trap. Des circuits similaires ont été publiés ici sur Instructable par TechKiwiGadgets. Sauf que le circuit Teemo utilise les comparateurs internes d'un microcontrôleur PIC, nécessitant ainsi moins de composants externes

J'ai donc été mis au défi d'utiliser l'Arduino au lieu d'un contrôleur PIC pour ce schéma et de regarder jusqu'où je peux aller.

Étape 1: Schéma

Schématique
Schématique
Schématique
Schématique
Schématique
Schématique

Le schéma de l'Arduino est un peu plus compliqué car l'Arduino ne permet pas de router un signal analogique interne vers l'entrée du comparateur. Cela ajoute deux composants pour un simple deviderr de tension. Cela conduit à une conception avec 12 composants externes (en laissant de côté le haut-parleur et l'écran LCD 16x2), contre 9 pour la conception Flip Coil.

Le principe de fonctionnement du schéma est très bien expliqué sur le site de Teemo. Fondamentalement, la bobine est alimentée puis éteinte. Après la mise hors tension, la bobine et le condenseur en parallèle créeront une oscillation amortie. La fréquence et la décroissance de l'oscillation sont influencées par le métal à proximité de la bobine. Pour plus de détails sur le circuit voir la page de Teemo ou de TechKiwi ici sur Instructables.

Comme dans le détecteur Flip Coil Pulse Induction, j'utilise le comparateur interne et la possibilité de déclencher une interruption pour acquérir le signal de la bobine.

Dans ce cas, j'obtiendrai plusieurs interruptions car la tension oscille autour de la tension de référence définie sur le comparateur. A la fin de l'oscillation, la tension au niveau de la bobine se stabilisera autour de 5V, mais pas exactement. J'ai choisi un diviseur de tension avec 200 Ohm et 10k Ohm pour obtenir une tension d'environ 4,9 volts

Pour réduire la complexité des schémas, j'ai utilisé D4 et D5 pour fournir GND (pour la résistance 10k) et 5V (pour la résistance 220 Ohm). Les broches sont fixées au démarrage du détecteur.

Dans cette version, j'ai ajouté une connexion de haut-parleur à l'aide de l'approche multi-tons à volume contrôlé, comme décrit dans Comment programmer un détecteur de métaux basé sur Arduino. Cela permet de différencier les propriétés de la cible ainsi que d'avoir une idée de la force du signal. Le haut-parleur peut être connecté à l'en-tête supplémentaire à 5 broches. Les 3 broches restantes de l'en-tête seront utilisées pour les boutons-poussoirs (à mettre en œuvre).

Étape 2: Programmation

La programmation
La programmation
La programmation
La programmation
La programmation
La programmation

Maintenant que le circuit est conçu et que le prototype est construit, il est temps de trouver une approche appropriée pour détecter le métal.

1. Compter les impulsions

Compter les impulsions de l'oscillation jusqu'à ce qu'elle se désintègre complètement est une idée.

S'il y a du métal près de la bobine, la quantité d'oscillation diminue. Dans ce cas, la tension de référence du comparateur doit être réglée à un niveau tel que la dernière impulsion est à peine encore mesurée. Ainsi, si quelque chose est détecté, cette impulsion disparaît immédiatement. C'était un peu problématique.

Chaque vague de l'oscillation crée deux interruptions. Un en descendant et un en remontant. Pour régler la tension de référence exactement à la crête d'une onde d'oscillation, le temps entre la descente et la montée doit être aussi court que possible (voir photo). Malheureusement, ici, la surcharge de l'environnement Arduino crée des problèmes.

Chaque déclencheur de l'interruption appelle ce code:

ISR(ANALOG_COMP_vect){

Toggle1=Toggle0 // sauvegarde la dernière valeur Toggle0=TCNT1; // obtient une nouvelle valeur }

Ce code prend un certain temps (si je me souviens bien, environ 78 cycles d'instructions sont d'environ 5 microsecondes à 16MHz). Par conséquent, la distance minimale détectable entre deux impulsions est exactement le temps que prend ce code. Si le temps entre deux déclencheurs se raccourcit (voir l'image), il ne sera pas détecté, car le code est entièrement exécuté avant de détecter une deuxième interruption.

Cela entraîne une perte de sensibilité. En même temps, j'ai remarqué que l'amortissement des oscillations est très sensible à toutes les influences extérieures, rendant ainsi cette approche au total un peu difficile.

2. Mesurer la fréquence

Une autre façon de détecter le métal consiste à mesurer la fréquence de l'oscillation. Cela présente un gros avantage par rapport à la mesure de l'amortissement de l'oscillation car le changement de fréquence permet de discriminer le métal. S'il y a un matériau ferreux près de la bobine, la fréquence ralentira, s'il y a du métal précieux près de la bobine, la fréquence augmentera.

La façon la plus simple de mesurer la fréquence est de mesurer la quantité d'impulsions après que les bobines commencent à osciller. La période de temps entre le début et la dernière impulsion divisée par la quantité totale d'impulsions mesurées est la fréquence. Malheureusement, les dernières oscillations sont assez asymétriques. Comme la présence de métal influence également la décroissance de l'oscillation, les dernières oscillations sont encore plus dissymétriques, les lectures sont difficiles à interpréter. Dans l'image, cela est montré avec le croisement 1 à 1' et 2 à 2'.

Une meilleure façon est donc d'utiliser des impulsions antérieures pour mesurer la fréquence. En testant, il est intéressant de noter que j'ai découvert que certaines impulsions sont plus sensibles que d'autres. Quelque part à 2/3 des oscillations est un bon point pour acquérir les données.

Traitement des données

Le code initial basé sur la boucle() appelant une fonction pulse() pour faire le minutage de la bobine. Même si les résultats n'étaient pas mauvais, j'ai eu envie d'améliorer le timing. Pour ce faire, j'ai créé un code entièrement basé sur une minuterie, menant à l'instruction distincte Comment programmer un détecteur de métaux basé sur Arduino. Cette instructable explique en détail le timing, la sortie LCD de traitement des données, etc.

1. L'écran LCD

La première approche consistait à mesurer 10 impulsions, puis à afficher les valeurs sur l'écran LCD. Comme j'ai découvert que le transfert de données I2C était beaucoup trop lent, j'ai changé de code pour mettre à jour un seul caractère par impulsion.

2. Approche de la valeur minimale

Pour améliorer davantage la stabilité des lectures, j'ai écrit une routine de sortie série pour avoir une meilleure idée des données mesurées. Là, il est devenu évident que même si la plupart des lectures étaient quelque peu stables, certaines ne l'étaient pas ! Certaines lectures de la « même » impulsion d'oscillation étaient si éloignées que cela ruinerait toute approche pour analyser un changement de fréquence.

Pour compenser cela, j'ai créé une "frontière" à l'intérieur de laquelle les valeurs étaient dignes de confiance. C'est à dire. lorsque les valeurs étaient à plus de 35 cycles de timer1 de la valeur attendue, ces valeurs ont été ignorées (expliquées en détail dans l'Instructable "Comment programmer un détecteur de métaux basé sur Arduino")

Cette approche s'est avérée très stable.

3. La tension

La conception originale de Teemo est alimentée en dessous de 5 volts. Comme mes hypothèses étaient "plus de volts = plus de puissance = plus de sensibilité", j'ai alimenté l'unité au début avec 12V. Cela a entraîné un échauffement du MOSFET. Cet échauffement a alors entraîné une dérive générale des valeurs mesurées, conduisant à de fréquents rééquilibrages du détecteur. En diminuant la tension à 5 V, la génération de chaleur du MOSFET a pu être minimisée à un niveau où presque aucune dérive des lectures n'a été observée. Cela a rendu le circuit encore plus simple, car le régulateur de tension intégré de l'Arduino n'était plus nécessaire.

Pour un MOSFET j'ai choisi dans un premier temps l'IRL540. Ce MOSFET est compatible avec le niveau logique, mais a une tension nominale maximale de 100 V. J'espérais de meilleures performances en passant à un IRL640 avec des valeurs nominales de 200V. Malheureusement, les résultats étaient les mêmes. Ainsi, un IRL540 ou un IRL640 fera l'affaire.

Étape 3: Résultats finaux

Résultats finaux
Résultats finaux
Résultats finaux
Résultats finaux
Résultats finaux
Résultats finaux

L'avantage du détecteur est qu'il fait la distinction entre les matériaux précieux et ferreux. L'inconvénient est que la sensibilité avec ce schéma simple n'est pas très bonne. Pour comparer les performances j'ai utilisé les mêmes références que pour le détecteur Flip-Coil. Probablement bon pour certains repérage, mais très probablement décevant pour une recherche réelle.

Ici, la conception d'origine avec le contrôleur PIC pourrait être plus sensible car il fonctionne sur 32 MHz au lieu des 16 MHz du contrôleur, offrant ainsi une résolution plus élevée pour détecter les changements de fréquence.

Les résultats ont été obtenus en utilisant la bobine avec 48 tours à 100 mm.

Comme toujours, ouvert aux commentaires

Conseillé: