Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Taschen-Metallsuchgerät

Komponenten und Verbrauchsmaterialien

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)

Über dieses Projekt

Intro:Pocket Metal Locator - Arduino

Dieser coole kleine Taschen-Metallsucher ist empfindlich genug, um kleine Nägel und Nägel in Holz zu erkennen, und kompakt genug, um in schwierige Räume zu passen, sodass er bequem getragen und zur Metallortung verwendet werden kann.

Das Gerät verfügt über vier unabhängige Suchspulen und farbige LED-Anzeigen, die es einfach machen, einen größeren Suchbereich schnell abzudecken und gleichzeitig das Ziel genau zu identifizieren.

Dieses hübsche kleine Gerät kalibriert sich selbst mit einer Tastenbedienung, ist über einen USB-Anschluss wiederaufladbar und verwendet Farb-LEDs, Ton und Vibration, um die Zielstärke anzuzeigen.

Das Tutorial enthält alle Designs, Tests, Code- und 3D-Dateien, die Sie zum Eigenbau benötigen. Ich hoffe, Sie haben genauso viel Spaß beim Bauen und Verwenden wie ich!

Schritt 1:Materialliste und Funktionsweise

1. So geht's Funktioniert

Der Pocket Metal Locator verwendet vier unabhängige Impulsinduktionssuchspulen, die von einem Arduino Pro Mini betrieben werden. Jede Suchspule besteht aus einer separaten TX- und RX-Spule, wobei ein Impuls in die TX-Spule induziert wird, der ein elektromagnetisches Feld um die RX-Spule herum erzeugt. Das sich ändernde Feld induziert eine Spannung in die RX-Spule, die erkannt und verstärkt wird, bevor die Impulsbreite des Signals vom Arduino gelesen wird.

Ein Glättungsalgorithmus im Arduino-Code wird verwendet, um Rauschen aus gültigen Pulsen zu entfernen, wodurch es sehr stabil wird.

Ein Kalibrierungsalgorithmus im Code nimmt einen Durchschnitt der Messwerte über eine kurze Startzeit und legt eine Reihe von Schwellenwerten fest, mit denen das Signal verglichen wird.

Wenn ein Metallobjekt in die Reichweite des elektromagnetischen Feldes kommt, wird das Feld unterbrochen und ein Teil der Energie wird von der RX-Spule in "Eddie-Ströme" umgeleitet, die sich im Zielobjekt bilden. Dieser parasitäre Effekt des Zielobjekts führt dazu, dass sich die in der RX-Spule erfasste Pulsbreite verringert. Im Wesentlichen messen wir den Leistungsverlust in das Zielobjekt.

Wenn die in der RX-Spule erkannte Pulsbreite unter den Schwellenwert fällt, leuchten die LEDs, der Summer ertönt und der Haptic-Feedback-Motor wird ausgelöst - abhängig von einer vorgegebenen Größe des Zielsignals.

Die Schaltung dafür hat sich im letzten Jahr zu einem sehr stabilen und zuverlässig arbeitenden Detektor entwickelt. Die Spulenkonfiguration und -ausrichtung wurden bewusst so gestaltet, dass die Stabilität und die Tiefenerkennung maximiert werden.

2. Materialliste

  • 3,7 V 350 mAh LiPo Akku Größe:38 mm x 20 mm x 7,5 mm
  • TP4056 USB LiPo AkkuladegerätDatenblatt
  • 4,7K-Widerstand, um den Ladestrom des LiPo-Akkus auf unter 300mA zu begrenzen
  • Arduino Pro Mini
  • FTDI USB-zu-Seriell-Modul zum Programmieren des Mini Pro
  • LM339 Quad-Differentialkomparator-integrierter Schaltkreis
  • Vero Board - 2 Stück geschnitten auf 20x9 Löcher und 34x9 (siehe Foto für die richtige Ausrichtung)
  • BC548 NPN-Transistor x 4
  • 2N7000 MOSFET-Schalter x 5
  • Piezo-Summer
  • Münzen-Vibrationsmotor für haptisches Feedback
  • WS2812 RGB-LED-Modul x 4
  • 1k Widerstand x 4
  • 10k Widerstand x 4
  • 47 Ohm Widerstand x 4
  • 2,2 K Widerstand x 4
  • 150pf Keramikkondensator x 8
  • 0,18 uF Polyesterkondensator x 4
  • Rolle aus 0,3 mm Kupferlackdraht (normalerweise in Rollen mit einem Gewicht von ca. 25 g)
  • Leiterplattenmontierter Druckknopfschalter
  • Heißklebepistole
  • 10-mm-Bohrer
  • Handbohrmaschine
  • Etikettierungspistole oder Klebeband geeignet zum Beschriften von 16 separaten Drähten Anschlussdraht
  • Zugriff auf einen 3D-Drucker

3. Komparatorbetrieb

Ich hatte eine Reihe von Fragen zur Bedienung des LM339 und dachte, ich würde eine klarere Erklärung geben.

Der LM339 arbeitet ausschließlich als Spannungskomparator, vergleicht die Differenzspannung zwischen den positiven und negativen Pins und gibt eine logisch niedrige oder hohe Impedanz (logisch hoch mit Pullup) basierend auf der Eingangsdifferenzpolarität aus.

Bei dieser Schaltung ist der positive Eingang des Komparators mit der Vcc-Leitung verbunden und ein Pull-up-Widerstand für Vcc ist an den Komparatorausgang angelegt. In dieser Konfiguration bleibt die Ausgangsspannung des Komparators in der Praxis hoch, bis die Eingangsspannung am negativen Eingang 3,5 V überschreitet

Der Betrieb kann aus dem LM339-Datenblatt erklärt werden, das den „Eingangsspannungsbereich“ zwischen 0 V und Vsup-1,5 V umreißt.

Wenn sowohl IN– als auch IN+ innerhalb des Gleichtaktbereichs liegen, wenn IN– niedriger ist als IN+ und die Offsetspannung, ist der Ausgang hochohmig und der Ausgangstransistor leitet nicht

Wenn IN– höher als der Gleichtakt ist und IN+ innerhalb des Gleichtakts liegt, ist der Ausgang niedrig und der Ausgangstransistor zieht Strom. Link zum Datenblatt und Erklärung unten http://www.ti.com/lit/ds/symlink/lm2901.pdf

lm2901.pdf

Schritt 2:Fall drucken

Das 3D-gedruckte Gehäuse wurde mit 5 separaten Drucken erstellt. Die Maße und 3D-Dateien finden Sie hier auf Thingiverse. Das Design wurde darauf ausgerichtet, das Gerät leicht zu halten und gleichzeitig sicherzustellen, dass sich die Suchspulen so nah am zu durchsuchenden Bereich befinden.

Drucken Sie die Hülle sorgfältig aus und entfernen Sie überschüssiges Plastik. Es ist wichtig, diesen Schritt jetzt durchzuführen, damit die elektronischen Komponenten vor dem endgültigen Anschließen und Testen im Gehäuse ausgerichtet werden können.

Schritt 3:Bauen und montieren Sie die Suchspulen

Nehmen Sie die gedruckten Spulenkörper und wickeln Sie jeweils 25 Windungen Kupferdraht darauf. Stellen Sie sicher, dass Sie gute 20 cm zusätzliches Kupferkabel für den Anschluss an das Hauptgerät lassen.

Verwenden Sie die in den Formern gedruckten Löcher, um eine einheitliche Wicklung und Ausrichtung der Spulen für jede Form zu ermöglichen. Drehen Sie dabei den Former auf den Kopf und kleben Sie den Former nach und nach in die Basiseinheit.

Folgen Sie der Fotomontage wie angegeben. Das Ergebnis sind 8 Spulen, die in der Spulenbaugruppe montiert sind, wobei alle Drähte einheitlich ausgerichtet und lang genug sind, um mit der Hauptplatineneinheit im oberen Gehäuse verbunden zu werden.

Verwenden Sie die beiden Drahtführungsblöcke, die Löcher für jede Spule der gedruckten Basis haben, um den Überblick über jede einzelne Spule zu behalten.

Ich habe die Drähte für die inneren Spulen oben und die äußeren Spulen unten am Drahtblock platziert, damit ich jede einzelne Spule im Auge behalten kann, was das Anschließen an die Hauptplatine erleichtert.

Schritt 4:Bauen Sie die Schaltung auf

Das Gerät verfügt über vier Schlüsselkreise, die unabhängig voneinander aufgebaut werden können - Treiberplatine, Hauptplatine, LED-Baugruppe und wiederaufladbares Netzteil. In diesem Schritt bauen wir die Treiberplatine und die Hauptplatine.

1. Treiberplatine

Verwenden Sie ein Cuttermesser, um ein Stück Vero Board entlang der Löcher 22x11 zu schneiden. Das Ergebnis ist ein Stück Vero Board mit 20x9 Löchern, die gemäß dem beigefügten Bild ausgerichtet sind. Es ist am besten, mehrmals über die Löcher auf beiden Seiten des Bretts zu ritzen und dann das überschüssige Brett vorsichtig abzubrechen. Vergewissern Sie sich, dass die Platine im Boden des Gehäuses mit genügend Freiraum auf beiden Seiten sitzt.

Verwenden Sie die Fotos und einen 10 mm Bohrer von Hand, um die auf der Unterseite des Vero Boards gezeigten Stifte vorsichtig zu durchbrechen. Folgen Sie dem Schaltplan und dem Fotolayout der Komponenten, um die Leiterplatte zu montieren, und achten Sie darauf, dass keine kurzgeschlossenen Leiterbahnen vorhanden sind.

Legen Sie dieses Board zum späteren Testen beiseite.

2. Hauptplatine

Verwenden Sie ein Cuttermesser, um ein Stück Vero Board entlang der Löcher 36x11 zu schneiden. Das Ergebnis ist ein Stück Vero Board mit 34x9 Löchern, die gemäß dem beigefügten Bild ausgerichtet sind. Es ist am besten, mehrmals über die Löcher auf beiden Seiten des Bretts zu ritzen und dann das überschüssige Brett vorsichtig abzubrechen. Vergewissern Sie sich, dass die Platine im Boden des Gehäuses mit genügend Freiraum auf beiden Seiten sitzt.

Verwenden Sie die Fotos und einen 10-mm-Bohrer von Hand, um die auf der Unterseite des Vero Boards gezeigten Stifte vorsichtig zu durchbrechen.

Folgen Sie dem Schaltplan und dem Fotolayout des Arduino- und LM339-ICs und anderer Komponenten, um die Platine zu montieren, und achten Sie darauf, dass keine kurzgeschlossenen Spuren vorhanden sind.

Legen Sie dieses Board zum späteren Testen beiseite.

Schritt 5:LED-Anzeigen hinzufügen

Ich habe WS2182-LEDs verwendet, die über einen integrierten IC verfügen, mit dem sie vom Arduino über drei separate Drähte angesprochen werden können. Durch Senden eines Befehls an die LED kann jedoch eine breite Palette von Farben und Helligkeiten erzeugt werden. Dies geschieht über eine spezielle Bibliothek, die in die Arduino-IDE geladen wird, die im Testabschnitt behandelt wird.

1. Montage der LEDs im Spulengehäusedeckel

Positionieren Sie die vier LEDs sorgfältig so, dass sie richtig ausgerichtet sind, sodass die VCC- und GND-Anschlüsse ausgerichtet sind und sie in der Mitte der Löcher sitzen.

Verwenden Sie Heißkleber, um die LEDs in Position zu bringen.

2. Verkabelung der LEDs

Ziehen Sie vorsichtig drei 25 cm lange einadrige Anschlusskabel ab und positionieren Sie sie über den Kontakten der LEDs.

Löten Sie diese ein und stellen Sie sicher, dass das mittlere Datenkabel mit den IN- und OUT-Kontakten gemäß dem Foto verbunden ist.

3. Überprüfung der Fallausrichtung

Vergewissern Sie sich, dass der Deckel des Gehäuses bündig mit dem Spulengehäuse abschließt, und verwenden Sie dann Heißkleber, um die Drähte am unteren Ende des Deckels zu fixieren.

Legen Sie dies zum späteren Testen beiseite.

Schritt 6:Zusammenbauen und Testen des Geräts

1. Montage vorbereiten

Vor dem Zusammenbau werden wir jedes Board nach und nach testen, um die Fehlerbehebung zu erleichtern.

Der Arduino Pro Mini benötigt eine serielle USB-Platine, um von Ihrem PC programmiert zu werden. Dadurch kann das Board kleiner sein, da es keine serielle Schnittstelle hat. Um diese Boards zu programmieren, müssen Sie in die Beschaffung eines Boards investieren, wie in der Teileliste beschrieben.

Vor dem Laden des Arduino-Codes müssen Sie die Bibliothek "FastLED.h" als Bibliothek hinzufügen, um die WS2182-LEDs anzusteuern. Eine Reihe von Oszilloskop-Traces wurde zur Fehlerbehebung bei Problemen bereitgestellt.

Es gibt auch einen Screenshot der seriellen Datenausgabe der IDE mit der Graph-Plot-Funktion, die die Pulsbreitenausgabe jedes der Kanäle sowie den Schwellenwert anzeigt. Dies ist während des Tests nützlich, da Sie sehen können, ob jeder Kanal mit ähnlichen Empfindlichkeitsstufen arbeitet.

Ich habe zwei Kopien des Codes beigefügt. Einer hat einen Test des seriellen Datenstreamings zur Fehlerbehebung.

HINWEIS: Schließen Sie die LiPo-Akkueinheit erst im letzten Schritt an, da ein versehentliches Kurzschließen während der Montage dazu führen kann, dass die Einheit überhitzt oder sogar in Brand gerät.

2. Testen Sie das Mainboard

Bevor Sie die Hauptplatine an etwas anschließen, ist es ratsam, das serielle Arduino-Kabel anzuschließen und zu überprüfen, ob der Code geladen wird.

Dadurch wird einfach getestet, ob das Arduino physisch richtig verdrahtet ist und dass die IDE und die Bibliotheken geladen sind. Laden Sie den Code durch die IDE, die ohne Fehler geladen werden sollte und kein Rauch aus den Komponenten austreten sollte!!

3. Schließen Sie die Treiberplatine an

Folgen Sie dem Schaltplan, um die Treiberplatine mit der Hauptplatine zu verbinden, und positionieren Sie das Gerät physisch im Gehäuse, um sicherzustellen, dass die Elemente in das Gehäuse passen. Dies ist ein Fall von Versuch und Irrtum und erfordert Ausdauer.

Laden Sie den Code durch die IDE, die ohne Fehler geladen werden sollte und kein Rauch aus den Komponenten austreten sollte!!

4. Verbinden Sie die Spulen Folgen Sie dem Schaltplan, um die Spulen mit der Hauptplatine zu verbinden und das Gerät physisch im Gehäuse zu positionieren, um sicherzustellen, dass die Elemente richtig passen. Stellen Sie sorgfältig sicher, dass die Spulen gemäß dem Schaltplan mit den Eingängen der Treiberplatine und der Hauptplatine ausgerichtet sind.

Wenn der Testcode geladen ist, zeigt der serielle Port die Pulsbreite auf der Empfangsspule irgendwo zwischen 5000 - 7000 uS an. Dies kann auch mit dem IDE-Grafikplotter angezeigt werden.

Auf diese Weise können Sie Fehler in jedem der Kanäle beheben und auch sehen, wie sich das Bewegen einer Münze in die Nähe der Suchspule auswirkt, wodurch die Impulsbreite verringert werden sollte, wenn sich das Ziel der Suchspule nähert.

Wenn Sie ein Oszilloskop haben, können Sie auch die Wellenformen in verschiedenen Phasen der Schaltung überprüfen, um Probleme zu diagnostizieren.

Wenn alle Kanäle wie erwartet funktionieren, positionieren Sie die Drähte so, dass das Gehäusegehäuse richtig montiert und geschlossen wird.

5. Schließen Sie die LEDs an

Nehmen Sie vorsichtig die drei Drähte von den Spulengehäuse-LEDs und verbinden Sie sie mit der Hauptplatine. Laden Sie den Code und überprüfen Sie, ob die LEDs richtig funktionieren. Verwenden Sie Klebstoff, um den Deckel des Spulengehäuses zu befestigen.

Pocket_Metal_Locator_V11__TEST_CODE.zip Pocket_Metal_Locator_V11.zip

Schritt 7:Anschließen des Akkus

HINWEIS:

1. Schließen Sie die LiPo-Akkueinheit erst im letzten Schritt an, da ein versehentliches Kurzschließen während der Montage zu einer Überhitzung oder sogar zu einem Brand führen kann.

2. Achten Sie beim Umgang mit Akku und Ladegerät darauf, die Akkuanschlüsse nicht kurzzuschließen.

3. LiPo-Akkus unterscheiden sich von anderen wiederaufladbaren Akkus und das Aufladen mit Überstrom kann gefährlich sein. Stellen Sie also sicher, dass Sie den Ladekreis richtig konfigurieren.

4. Schließen Sie das serielle Arduino-Kabel nicht an das Gerät an, wenn der Netzschalter gedrückt ist, da sonst der Akku beschädigt werden könnte.

1. Ändern Sie die Strombegrenzung des Ladegeräts

Der Pocket Metal Locator verwendet einen LiPo-Akku, der mit einem Micro-USB-Telefonladegerät aufgeladen werden kann. Das TP4056 USB LiPo Batt Charger Board wird zuerst mit einem 4,7K Widerstand modifiziert, um den Ladestrom auf unter 300mA zu begrenzen. Eine Anleitung dazu finden Sie hier.

TP4056.pdf

Dazu müssen Sie den vorhandenen oberflächenmontierten Widerstand entfernen und durch einen Widerstand ersetzen, wie auf dem Foto gezeigt. Sobald der Widerstand angebracht ist, schützen Sie jede ungeplante Bewegung des Widerstands mit einer Heißklebepistole.

Testen Sie vor dem Anschließen an die Hauptplatine, ob das Ladegerät richtig funktioniert, indem Sie ein Handy-Ladegerät mit einem Micro-USB-Anschluss verbinden. Das rote Ladelicht sollte aufleuchten, wenn es richtig funktioniert.

2. Installieren Sie den Druckknopf-Netzschalter

Stellen Sie sicher, dass der Taster in der richtigen Position montiert ist, sodass er durch die Mitte des Gehäusedeckels ragt, und löten Sie dann den Taster an. Installieren Sie die Drähte zwischen dem Druckknopfschalter und dem Ladegerätausgang und der VCC-Leitung auf dem Arduino gemäß dem Schaltplan.

Bei korrekter Installation wird das Gerät durch Drücken des Schalters aktiviert.

Fixieren Sie den Akku mit Heißkleber und stellen Sie sicher, dass die Micro-USB-Buchse auf das Loch im Gehäusedeckel ausgerichtet ist, damit er aufgeladen werden kann.

Schritt 8:Abschließender Test und Betrieb

1. Physische Montage

Der letzte Schritt besteht darin, die Drähte sorgfältig neu anzuordnen, damit das Gehäuse richtig schließt. Verwenden Sie Heißkleber, um das Mainboard im Deckel zu befestigen und schließen Sie dann den Deckel in Position.

2. Bedienung des Geräts

Das Gerät funktioniert durch Kalibrierung, nachdem der Netzschalter gedrückt und gehalten wurde. Alle LEDs blinken, wenn das Gerät betriebsbereit ist. Halten Sie die Drucktaste während der Suche gedrückt. Die LEDs wechseln je nach Stärke des Zielobjekts von Blau-Grün, Rot, Violett. Die haptische Rückmeldung erfolgt, wenn die LEDs lila werden.

Sie sind nicht bereit für praktische Anwendungen!

Code

  • Pocket_Metal_Locator_V11.ino
Pocket_Metal_Locator_V11.inoC/C++
Dieser coole kleine Taschen-Metallsucher ist empfindlich genug, um kleine Nägel und Nägel in Holz zu erkennen, und kompakt genug, um in schwierige Räume zu passen, sodass er bequem getragen und zur Metallortung verwendet werden kann.

Das Gerät verfügt über vier unabhängige Suchspulen und farbige LED-Anzeigen, die es einfach machen, einen größeren Suchbereich schnell abzudecken und gleichzeitig das Ziel genau zu identifizieren.

Dieses hübsche kleine Gerät kalibriert sich selbst mit einer Tastenbedienung, ist über einen USB-Anschluss wiederaufladbar und verwendet Farb-LEDs, Ton und Vibration, um die Zielstärke anzuzeigen.

In der Anleitung enthalten sind alle Designs, Tests, Code- und 3D-Dateien, die zum Eigenbau erforderlich sind. Ich hoffe, Sie genießen das Bauen und Verwenden so viel wie ich !!
 / * Pocket Metal Locator - Arduino Pro Mini April 2018 TechKiwiGradgetsVersion 11 - Erste anweisbare Version * /// WS2182 LED-Treiberbibliothek-Setup #include "FastLED.h "// Wie viele LEDs in Ihrem Streifen?#define NUM_LEDS 4 // Hinweis:Die erste LED ist die Adresse 0#define DATA_PIN 11 // Hinweis:D11 wird verwendet, um die LED-Kette zu steuern // Definieren Sie das Array der LEDsCRGB-LEDs[NUM_LEDS];/ / Glättungsvariablen für LPFconst float alpha =0,85; float smoothedvalue1 =1000;float smoothedvalue2 =1000;float smoothedvalue3 =1000;float smoothedvalue4 =1000;int schwelle =100; // Mindestablesung von der pulseIn-Funktion sicherstellen, dass die Abtastung über Noisefloat ledthreshold1 =0,93 liegt; // Prozentsatz unter der Grundlinie vor dem Setzen der LEDs Purplefloat ledthreshold2 =0,96; // Prozentsatz unter der Grundlinie vor dem Setzen der LEDs Redfloat ledthreshold3 =0,99; // Prozentsatz unter der Grundlinie vor dem Setzen der LEDs Greenfloat ledthreshold4 =0,998; // Prozentsatz unterhalb der Grundlinie vor dem Setzen der LEDs Blau // Kallibrationsvariablenboolesche Probe =false; // wenn wahr, dann nicht zurückrufen Thresholdsint calcounter =0; // Wird verwendet, um zu zählen, wie oft eine Probe entnommen wurdeint scount =200; // Anzahl der Lesevorgänge vor einmaliger Kalibrierung nur nach dem Einschaltenint numsamples =20; // Anzahl der Stichproben, die vor der Mittelwertbildung entnommen wurdenint t1 =100; // Dauer in Mikrosekunden, die LEDs während der Calibrationlong calav1 =0; // Wird verwendet, um den Durchschnitt von zehn Samples zu berechnen calav2 =0; // Wird verwendet, um den Durchschnitt von zehn Samples zu berechnen. calav3 =0; // Wird verwendet, um den Durchschnitt von zehn Samples zu berechnen. calav4 =0; // Wird verwendet, um den Durchschnitt von zehn Samples zu berechnenint div1 =0; // Divisorzähler für die Anzahl der genommenen Samplesint div2 =0;int div3 =0;int div4 =0;// Vier Kanäle bezeichnet mit A,B,C,Dint divA =0;lang tempA =0;lang pZählerA =0; // Ungefilterte Impulsbreite von Kanal 1int divB =0;long tempB =0;long pcounterB =0; // Ungefilterte Impulsbreite von Kanal 2int divC =0;long tempC =0;long pcounterC =0; // Ungefilterte Impulsbreite von Kanal 1int divD =0;long tempD =0;long pcounterD =0; // Ungefilterte Impulsbreite von Kanal 1int pwindow =7500; // Maximaler Timeout-Wert für Pulsbreite // **************************************** **********int dly1 =4; // Zeitraum, in dem der TXR-Pin hoch bleibt (typischerweise 4uS)int dly2 =1; // Verzögerung, nachdem der TXR-Pin auf LOW geht, bevor das Lesen beginnt, um die Impulsdauer zu lesen - typischerweise 1 us int dly3 =500; // Verzögerung in Mikrosekunden nach der Abtastung der Pulsbreite vor dem nächsten Zyklus // ************************************ ****************int Threshdiff =15; // Zum Durchschnitt hinzufügen, um eine bestimmte Schwelle zu werden, bei der die LED aufleuchtet (V21 von 25 auf 20 geändert) long pulseav =0; // Speichert den Ausgabewert für die Kalibrierung // Vibration Motor boolean haptic =false; // Flag zum Einschalten des Vibrationsmotors für einen bestimmten Zeitraum int vduration =1; // Anzahl der Programmzyklen, die der Vibrationsmotor aktiviert hat int vcounter =vduration; // V-Zykluszähler Void setup () {// Vibrationsmotor / Haptisches Feedback pinMode (12, OUTPUT); // Vibrationsmotortreiber von Arduino - D10 digitalWrite (12, LOW); // Motor ausschalten Serial.begin (115200); // Setupserielle Schnittstelle für Testdatenausgänge // WS2182 LED-Treiber Setup LEDS.addLeds(leds,NUM_LEDS); // Standard, wenn RGB dafür kann jedoch je nach LED-Hersteller variieren LEDS.setBrightness(5); // Stellen Sie die Helligkeit der LEDs hier ein // begrenzen Sie meine Aufnahme auf 1 A bei 5 V Stromaufnahme FastLED.setMaxPowerInVoltsAndMilliamps (5,100); FastLED.setDither(0); // Deaktiviert die Auto-Dithering-Funktion zum Entfernen von Flimmern // Arduino Mini Pro logische Pinzuordnungen // Logischer Pinname 2,3,4,5,6,7,8,9 Entspricht D2-D9 Pinname auf der Platine gedruckt // Logischer Pinname 10,11,12,13,14,15,16,17 Entspricht D10-D13, A0-A3 Pinname auf der Platine gedruckt // Piezo-Summer pinMode(10,OUTPUT); // Piezo-Summer-Treiber von Arduino - D10 // Transmit pinMode (2, OUTPUT); // Impulsausgang von Arduino - D2 pinMode (4, OUTPUT); // Impulsausgang von Arduino - D4 pinMode (6, OUTPUT); // Impulsausgang von Arduino - D6 pinMode (8, OUTPUT); // Impulsausgang von Arduino - D8 // Kanal A pinMode (3, INPUT); // Signaleingang an Arduino von Pin 2 auf LM339 - D3// Kanal B pinMode (5, INPUT); // Signaleingang an Arduino von Pin 1 auf LM339 - D5// Kanal C PinMode (7, INPUT); // Signaleingang an Arduino von Pin 14 auf LM339 - D7 // Kanal D pinMode (9, INPUT); // Signaleingang an Arduino von Pin 13 auf LM339 - D9}void loop () {// Pulse and read Coil -------------------------- --------------------- // Kanal 1 (Punkt des Zauberstabs)digitalWrite(2,HIGH); // Setzen Sie den TX-Pin auf highdelayMicroseconds (dly1); // Verzögerung vor dem Setzen auf Low am Ausgang pindigitalWrite (2, LOW); // TX-Pin auf lowdelayMicroseconds (dly2) setzen; // Verzögerung vor dem Abtasten der Impulsbreite pcounterA =pulseIn (3, LOW, pwindow); digitalWrite (2, LOW); // Setzen Sie den TX-Pin auf LOWdelayMicroseconds (dly3); // Verzögerung vor dem Abtasten der Impulsbreite // Tiefpassfilter anwenden, um Signal zu glätten, Kanal 1 if (pcounterA>=sthreshold) { smoothedvalue1 =(alpha * smoothedvalue1) + ((1 - alpha) * pcounterA); } pcounterA =smoothedvalue1; // Kanal 2digitalWrite (4, HIGH); // Setzen Sie den TX-Pin auf highdelayMicroseconds (dly1); // Verzögerung vor dem Setzen auf Low am Ausgang pindigitalWrite (4, LOW); // TX-Pin auf lowdelayMicroseconds (dly2) setzen; // Verzögerung vor dem Abtasten der ImpulsbreitepcounterB =pulseIn (5,LOW,pwindow);digitalWrite(4,LOW); // Setzen Sie den TX-Pin auf LOWdelayMicroseconds (dly3); // Verzögerung vor der Abtastimpulsbreite // Tiefpassfilter anwenden, um Signal zu glätten, Kanal 2 if (pcounterB>=sthreshold) { smoothedvalue2 =(alpha * smoothedvalue2) + ((1 - alpha) * pcounterB); } pcounterB =smoothedvalue2; // Kanal 3digitalWrite(6,HIGH); // Setzen Sie den TX-Pin auf highdelayMicroseconds (dly1); // Verzögerung vor dem Setzen auf Low am Ausgang pindigitalWrite (6, LOW); // TX-Pin auf lowdelayMicroseconds (dly2) setzen; // Verzögerung vor dem Abtasten der ImpulsbreitepcounterC =pulseIn (7,LOW,pwindow);digitalWrite(6,LOW); // Setzen Sie den TX-Pin auf LOW // delayMicroseconds (dly3); // Verzögerung vor dem Abtasten der Impulsbreite // Tiefpassfilter anwenden, um Signal zu glätten, Kanal 3 if (pcounterC>=sthreshold) { smoothedvalue3 =(alpha * smoothedvalue3) + ((1 - alpha) * pcounterC); } pcounterC =smoothedvalue3; // Kanal 4 digitalWrite (8, HIGH); // Setzen Sie den TX-Pin auf highdelayMicroseconds (dly1); // Verzögerung vor dem Setzen auf Low am Ausgang pindigitalWrite (8, LOW); // TX-Pin auf lowdelayMicroseconds (dly2) setzen; // Verzögerung vor dem Abtasten von ImpulsbreitepcounterD =pulseIn (9, LOW, pwindow); digitalWrite (8, LOW); // Setzen Sie den TX-Pin auf LOWdelayMicroseconds (dly3); // Verzögerung vor dem Abtasten der Impulsbreite // Tiefpassfilter anwenden, um Signal zu glätten, Kanal 4 if (pcounterD>=sthreshold) { smoothedvalue4 =(alpha * smoothedvalue4) + ((1 - alpha) * pcounterD); } pcounterD =smoothedvalue4; // Wert drucken dann den Zähler zurücksetzen / * Serial.print (pcounterA); Serial.print ( " "); Serial.print (calav1); Serial.print ( " "); Serial.print (pcounterB); Serial.print ( " "); Serial.print (calav2); Serial.print ( " "); Serial.print (pcounterC); Serial.print ( " "); Serial.print (calav3); Serial.print ( " "); Serial.print (pcounterD); Serial.print ( " "); Serial.println (calav4); * /// Aufruf von Schwellenwerten beim Einschalten // Warten Sie eine Zeit lang, um die Basislinie für jede Spule einzustellen, wenn (Beispiel ==false) { calcounter ++; } if ( calcounter> (scount-numsamples) ) {// Warte auf 90, dann addiere die Samples, um den Durchschnitt vorzubereiten if (pcounterA> sthreshold) { calav1 =calav1 + pcounterA; div1++; } if (pcounterB> sthreshold) { calav2 =calav2 + pcounterB; div2++; } if (pcounterC> sthreshold) { calav3 =calav3 + pcounterC; div3++; aufrechtzuerhalten. Wenn (pcounterD> sthreshold) { calav4 =calav4 + pcounterD; div4++; } } if ((calcounter> scount)&&(sample ==false)){// Setzen Sie die Schwellenwerte calav1 =calav1/div1; calav2 =calav2/div2; calav3 =calav3/div3; calav4 =calav4/div4; // Flash-LED, um anzuzeigen, dass die Kalibrierung abgeschlossen ist // 0-3 blaue LEDs [3] =CRGB::Blue; FastLED.show(); Verzögerung (t1); LEDs [3] =CRGB::Schwarz; LEDs [2] =CRGB::Blau; FastLED.show(); Verzögerung (t1); LEDs [2] =CRGB::Schwarz; LEDs[1] =CRGB::Blau; FastLED.show(); Verzögerung (t1); LEDs[1] =CRGB::Schwarz; leds[0] =CRGB::Blau; FastLED.show(); Verzögerung (t1); leds[0] =CRGB::Schwarz; // 3-0 Grüne LEDs [3] =CRGB::Grün; FastLED.show(); Verzögerung (t1); LEDs [3] =CRGB::Schwarz; LEDs [2] =CRGB::Grün; FastLED.show(); Verzögerung (t1); LEDs [2] =CRGB::Schwarz; LEDs[1] =CRGB::Grün; FastLED.show(); Verzögerung (t1); LEDs[1] =CRGB::Schwarz; leds[0] =CRGB::Grün; FastLED.show(); Verzögerung (t1); leds[0] =CRGB::Schwarz; FastLED.show(); // Sound Summer // digitalWrite (10, HIGH); // Setzen Sie den Ausgangspin auf High, um die LED zu aktivieren // Verzögerung (t1 * 2); digitalWrite(10,LOW); // Setzen Sie den Ausgangspin auf High, um die LED zu aktivieren // Setzen Sie das Sample-Flag zurück Sample =true; kalkulator =0; aufrechtzuerhalten. Wenn (Beispiel ==wahr) { updateLEDs (); } // Haptisches Feedback - Wenn der Schwellenwert überschritten wird, schalten Sie den Vibrationsmotor für "vduration" -Zyklen ein if (haptic ==true) { // Wenn das Flag gesetzt ist, schalten Sie den Motor ein digitalWrite (12, HIGH); // Setzen Sie den Ausgangspin auf High, um den Vibrationsmotor zu aktivieren, wenn (vcounter>=1) {vcounter--; // Zähler dekrementieren} sonst { digitalWrite (12, LOW); // Setzen Sie den Ausgangspin auf LOW, um die Haptik des Vibrationsmotors zu deaktivieren =false; // Vibrationsflag nach Anzahl der Zyklen zurücksetzen vcounter =vduration; // Vibrationszähler zurücksetzen } } } // Subroutinesvoid updateLEDs() {// Ergebnisse anzeigen // Lila - Stärkstes Zielsignal + (Piezo-Piepton und haptisches Feedback) // Rot - Hoch + (Haptisches Feedback) // Grün - Moderat + (Haptisches Feedback) // Blau - Schwächstes Zielsignal // Alle LEDs ausschalten leds[0] =CRGB::Black;leds[1] =CRGB::Black;leds[2] =CRGB::Black;leds[3] =CRGB::Schwarz;digitalWrite(10,LOW); // Setzen Sie den Ausgangspin auf LOW, um den Piezo SpeakerdigitalWrite (12, LOW) zu deaktivieren; // Setzen Sie den Ausgangspin auf LOW, um den Vibrationsmotor zu deaktivieren // ************** Kanal 1 if (pcounterA <(calav1 * (ledthreshold1))) {// Display Purple if Strong Ziel-LEDs [3] =CRGB::Lila; digitalWrite (10, HOCH); // Setzen Sie den Ausgangspin auf hoch, um den Piezo-Lautsprecher zu aktivieren haptic =true; aufrechtzuerhalten. Elsif (pcounterA <(calav1*(ledthreshold2))) {// Anzeige Blau für mittelstarke Ziel-LEDs [3] =CRGB::Red; haptisch =wahr; aufrechtzuerhalten. Elsif (pcounterA <(calav1*(ledthreshold3))) {// Anzeige Blau für mittelstarke Ziel-LEDs [3] =CRGB::Green; haptisch =wahr; } elseif (pcounterA <(calav1*(ledthreshold4))) {// Füge aufgrund der Empfindlichkeit der LEDs von Kanal 1 einen zusätzlichen Prozentpunkt zum Schwellenwert hinzu[3] =CRGB::Blue; } // Kanal 2 Anzeige if ((pcounterB  

Kundenspezifische Teile und Gehäuse

Thingiverse
This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.This neat little device is self-calibrating with one button operation, rechargeable through a USB port and uses color LEDs, sound and vibration to indicate target strength.Included in the instructable is all of the designs, testing, code and 3D files required to build on your own. I hope you enjoy building and using this as much as I have!!CAD file on thingiverse.com

Schaltpläne

This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.

The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.

Herstellungsprozess

  1. Lebensretter
  2. 16 Schmiedetechniken
  3. Metallscheren
  4. Wirtschaftlichkeit des Blechstanzens
  5. Was ist Blechstanzen?
  6. Perforierte Metallmaschine und Anwendungen
  7. Was ist eine Gießerei?
  8. Die Umformung von Metallspulen:Coil Slitting
  9. Ein Überblick über Dünnblech
  10. Was ist das Richten von Blech?