Inhaltsverzeichnis:

Arduino-basierter Pulsinduktionsdetektor - LC-Trap - Gunook
Arduino-basierter Pulsinduktionsdetektor - LC-Trap - Gunook

Video: Arduino-basierter Pulsinduktionsdetektor - LC-Trap - Gunook

Video: Arduino-basierter Pulsinduktionsdetektor - LC-Trap - Gunook
Video: обнаружение неисправности электрооборудования с помощью arduino 2024, Juli
Anonim
Arduino-basierter Puls-Induktions-Detektor - LC-Trap
Arduino-basierter Puls-Induktions-Detektor - LC-Trap

Auf der Suche nach weiteren Ideen für einen einfachen Ardino Pulse Induction Metalldetektor mit nur einer Versorgungsspannung bin ich auf die Homepage von Teemo gestoßen:

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

Er entwickelte einen einfachen Puls-Induktions-Detektor nach dem LC-Trap-Prinzip. Ähnliche Schaltungen wurden hier auf Instructable von TechKiwiGadgets veröffentlicht. Abgesehen davon, dass die Teemo-Schaltung die internen Komparatoren eines PIC-Mikrocontrollers verwendet und somit weniger externe Komponenten benötigt

Also wurde ich herausgefordert, den Arduino anstelle eines PIC-Controllers für diesen Schaltplan zu verwenden und zu sehen, wie weit ich kommen kann.

Schritt 1: Schaltplan

Schaltplan
Schaltplan
Schaltplan
Schaltplan
Schaltplan
Schaltplan

Das Arduino-Schema ist etwas komplizierter, da das Arduino kein internes Analogsignal an den Eingang des Komparators weiterleiten kann. Dies fügt zwei Komponenten für einen einfachen Spannungsteiler hinzu. Dies führt zu einem Design mit 12 externen Komponenten (ohne den Lautsprecher und das 16x2-LCD), im Vergleich zu 9 des Flip-Coil-Designs.

Das Funktionsprinzip des Schaltplans ist auf der Website von Teemo sehr gut erklärt. Grundsätzlich wird die Spule mit Strom versorgt und dann ausgeschaltet. Nach dem Abschalten erzeugen die Spule und der Kondensator parallel eine gedämpfte Schwingung. Die Frequenz und das Abklingen der Schwingung wird durch Metall in der Nähe der Spule beeinflusst. Weitere Details zur Schaltung finden Sie auf der Seite von Teemo oder TechKiwi hier auf Instructables.

Wie beim Flip Coil Pulse Induction Detektor verwende ich den internen Komparator und die Möglichkeit, einen Interrupt auszulösen, um das Signal von der Spule zu erfassen.

In diesem Fall erhalte ich mehrere Unterbrechungen, da die Spannung um die am Komparator eingestellte Referenzspannung schwingt. Am Ende der Schwingung wird sich die Spannung an der Spule um 5 V einpendeln, aber nicht genau. Ich habe einen Spannungsteiler mit 200 Ohm und 10k Ohm gewählt, um eine Spannung von ca. 4,9 Volt zu erhalten

Um die Komplexität der Schaltpläne zu reduzieren, habe ich D4 und D5 verwendet, um GND (für den 10k-Widerstand) und 5V (für den 220-Ohm-Widerstand) bereitzustellen. Die Pins werden beim Start des Detektors gesetzt.

In dieser Version habe ich eine Lautsprecherverbindung mit dem lautstärkegesteuerten Mehrtonansatz hinzugefügt, wie in Programmieren eines Arduino-basierten Metalldetektors beschrieben. Dies ermöglicht es, die Eigenschaften des Ziels zu differenzieren sowie ein Gefühl für die Signalstärke zu bekommen. Der Lautsprecher kann an den zusätzlichen 5-Pin-Header angeschlossen werden. Die restlichen 3 Pins des Headers werden für Taster verwendet (zu implementieren).

Schritt 2: Programmierung

Programmierung
Programmierung
Programmierung
Programmierung
Programmierung
Programmierung

Nun, da die Schaltung entworfen und der Prototyp gebaut ist, ist es an der Zeit, einen geeigneten Ansatz für die Metallerkennung zu finden.

1. Zählimpulse

Das Zählen der Pulse der Schwingung bis zum vollständigen Abklingen ist eine Idee.

Befindet sich Metall in der Nähe der Spule, nimmt die Schwingung ab. In diesem Fall sollte die Referenzspannung des Komparators so eingestellt werden, dass der letzte Impuls gerade noch gemessen wird. Falls also etwas erkannt wird, verschwindet dieser Impuls sofort. Das war etwas problematisch.

Jede Welle der Schwingung erzeugt zwei Unterbrechungen. Einmal nach unten und einmal wieder nach oben. Um die Referenzspannung exakt auf den Scheitel einer Schwingungswelle einzustellen, sollte die Zeit zwischen Abwärts- und Aufwärtsgang möglichst kurz sein (siehe Bild). Leider führt hier der Overhead der Arduino-Umgebung zu Problemen.

Jeder Trigger des Interrupts ruft diesen Code auf:

ESR(ANALOG_COMP_vect){

Toggle1=Toggle0 // letzten Wert speichern Toggle0=TCNT1; // neuen Wert abrufen }

Dieser Code dauert einige Zeit (wenn ich mich recht erinnere, ungefähr 78 Befehlszyklen, die ungefähr 5 Mikrosekunden bei 16 MHz betragen). Daher ist der minimal erkennbare Abstand zwischen zwei Impulsen genau die Zeit, die dieser Code benötigt. Wenn die Zeit zwischen zwei Triggern kürzer wird (siehe Bild), wird er nicht erkannt, da der Code vollständig ausgeführt wird, bevor ein zweiter Interrupt erkannt wird

Dies führt zu einem Empfindlichkeitsverlust. Gleichzeitig ist mir aufgefallen, dass die Dämpfung der Schwingungen sehr empfindlich auf äußere Einflüsse reagiert, was diese Vorgehensweise insgesamt etwas erschwert.

2. Messen der Frequenz

Eine andere Möglichkeit, Metall zu erkennen, besteht darin, die Frequenz der Schwingung zu messen. Dies hat gegenüber der Messung der Schwingungsdämpfung einen großen Vorteil, da die Frequenzänderung eine Unterscheidung des Metalls ermöglicht. Befindet sich in der Nähe der Spule eisenhaltiges Material, wird die Frequenz verlangsamt, bei Edelmetall in der Nähe der Spule wird die Frequenz erhöht.

Der einfachste Weg, die Frequenz zu messen, besteht darin, die Anzahl der Impulse zu messen, nachdem die Spulen zu schwingen beginnen. Die Zeitspanne zwischen dem Start und dem letzten Puls geteilt durch die Gesamtzahl der gemessenen Pulse ist die Frequenz. Leider sind die letzten Schwingungen ziemlich unsymmetrisch. Da auch Metall das Abklingen der Schwingung beeinflusst, sind die letzten Schwingungen noch unsymmetrischer, die Messwerte sind schwer zu interpretieren. Im Bild ist dies mit der Kreuzung 1 zu 1’ und 2 zu 2’ dargestellt.

Ein besserer Weg besteht daher darin, einige frühere Pulse zu verwenden, um die Frequenz zu messen. Beim Testen fand ich interessanterweise heraus, dass einige Pulse empfindlicher sind als andere. Irgendwo bei 2/3 der Schwingungen ist ein guter Punkt, um die Daten zu erfassen.

Verarbeitung der Daten

Der anfängliche Code basiert auf loop(), der eine pulse()-Funktion aufruft, um das Timing der Spule durchzuführen. Obwohl die Ergebnisse nicht schlecht waren, hatte ich den Drang, das Timing zu verbessern. Um dies zu tun, habe ich einen vollständig Timer-basierten Code erstellt, der zu dem separaten instuctable Wie man einen Arduino-basierten Metalldetektor programmiert. Dieses anweisbare erklärt das Timing, die Datenverarbeitung des LCD-Ausgangs usw. im Detail

1. Das LCD

Der erste Ansatz bestand darin, 10 Impulse zu messen und dann die Werte auf dem LCD anzuzeigen. Als ich herausfand, dass die I2C-Datenübertragung viel zu langsam war, wechselte ich zu Code, um nur ein Zeichen pro Impuls zu aktualisieren.

2. Mindestwertansatz

Um die Stabilität der Messwerte weiter zu verbessern, habe ich eine serielle Ausgaberoutine geschrieben, um ein besseres Gefühl für die gemessenen Daten zu bekommen. Dort stellte sich heraus, dass die meisten Messwerte zwar einigermaßen stabil waren, einige jedoch nicht! Einige Messwerte des „gleichen“Schwingungsimpulses lagen so weit auseinander, dass es jeden Versuch, eine Frequenzverschiebung zu analysieren, zunichte machen würde.

Um dies auszugleichen, habe ich eine "Grenze" geschaffen, innerhalb derer Werte vertrauenswürdig waren. Ich. e. Wenn die Werte mehr als 35 Zyklen von Timer1 vom erwarteten Wert entfernt waren, wurden diese Werte ignoriert (ausführlich in der Anleitung "Wie man einen Arduino-basierten Metalldetektor programmiert")

Dieser Ansatz erwies sich als sehr stabil.

3. Die Spannung

Das ursprüngliche Design von Teemo wird unter 5 Volt betrieben. Da meine Annahme war „mehr Volt = mehr Leistung = mehr Empfindlichkeit“habe ich das Gerät anfangs mit 12V versorgt. Dies führte zu einer Erwärmung des MOSFET. Diese Erwärmung führte dann zu einer generellen Drift der Messwerte, was zu einem häufigen Neuabgleich des Detektors führte. Durch Verringern der Spannung auf 5 V konnte die Wärmeentwicklung des MOSFET auf ein Niveau minimiert werden, bei dem fast kein Driften der Messwerte beobachtet wurde. Dies machte die Schaltung noch einfacher, da der Bordspannungsregler des Arduino nicht mehr benötigt wurde.

Als MOSFET wählte ich zunächst den IRL540. Dieser MOSFET ist mit Logikpegeln kompatibel, hat jedoch eine maximale Nennspannung von 100 V. Ich hatte auf eine bessere Leistung gehofft, wenn ich zu einem IRL640 mit 200-V-Werten wechselte. Leider waren die Ergebnisse die gleichen. Daher wird entweder ein IRL540 oder ein IRL640 die Arbeit erledigen.

Schritt 3: Endgültige Ergebnisse

Endgültige Ergebnisse
Endgültige Ergebnisse
Endgültige Ergebnisse
Endgültige Ergebnisse
Endgültige Ergebnisse
Endgültige Ergebnisse

Der Detektor hat den Vorteil, dass er zwischen Edel- und Eisenmaterial unterscheidet. Der Nachteil ist, dass die Empfindlichkeit bei diesem einfachen Schaltplan nicht so gut ist. Um die Leistung zu vergleichen, habe ich die gleichen Referenzen wie beim Flip-Coil-Detektor verwendet. Vermutlich gut für eine genaue Lokalisierung, aber höchstwahrscheinlich enttäuschend für eine echte Suche.

Hier ist das ursprüngliche Design mit dem PIC-Controller möglicherweise empfindlicher, da es auf 32 MHz läuft, anstatt auf 16 MHz, um eine höhere Auflösung für die Erkennung von Frequenzverschiebungen zu bieten.

Die Ergebnisse wurden erzielt, indem die Spule mit 48 Windungen bei 100 mm verwendet wurde.

Wie immer offen für Feedback

Empfohlen: