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

DIY Arduino-basierter Pulsinduktions-Metalldetektor

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
HC-05 Bluetooth-Modul
× 1
Allzwecktransistor PNP
× 1
Allzwecktransistor NPN
× 1
Leistungs-MOSFET N-Kanal
× 1
Operationsverstärker, Operationsverstärker + Komparator + Referenz
× 1
1N4148 – Allzweck-Schnellwechsel
× 2
Kondensator 10 µF
× 1
Kondensator 1 µF
× 1
Single Turn Potentiometer - 100k Ohm
× 1
Single Turn Potentiometer-47k
× 1
12 Widerstände mit unterschiedlichen Werten
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Über dieses Projekt

Pulse Induction (PI)-Systeme verwenden eine einzelne Spule sowohl als Sender als auch als Empfänger. Diese Technologie sendet starke, kurze Stromstöße (Pulse) durch eine Drahtspule. Jeder Impuls erzeugt ein kurzes Magnetfeld. Wenn der Impuls endet, kehrt das Magnetfeld die Polarität um und bricht sehr plötzlich zusammen, was zu einer scharfen elektrischen Spitze führt. Diese Spitze dauert einige Mikrosekunden und bewirkt, dass ein weiterer Strom durch die Spule fließt. Dieser Strom wird als reflektierter Puls bezeichnet und ist extrem kurz und dauert nur etwa 30 Mikrosekunden. Anschließend wird ein weiterer Impuls gesendet und der Vorgang wiederholt. Kommt ein Metallstück in den Bereich der magnetischen Feldlinien, kann die Empfangsspule eine Amplituden- und Phasenänderung des empfangenen Signals erkennen. Der Betrag der Amplituden- und Phasenänderung ist ein Hinweis auf die Größe und den Abstand des Metalls und kann auch verwendet werden, um zwischen Eisen- und Nichteisenmetallen zu unterscheiden.

Ein gutes Beispiel für einen PI-Detektor fand ich auf der Website des N.E.C.O. Projekte. Dieser Metalldetektor ist eine Symbiose aus Arduino und Android. Im Play Store können Sie die kostenlose Version der Anwendung "Spirit PI" herunterladen, die voll funktionsfähig ist, aber Sie können auch eine Pro-Version kaufen, die mehrere großartige Optionen bietet. Die Kommunikation zwischen Smartphone und Arduino erfolgt mit dem Bluetooth-Modul HC 05, Sie können jedoch jeden Bluetooth-Adapter verwenden, bei dem Sie die Baudrate auf 115200 stellen müssen. Das Schema ist in der folgenden Abbildung dargestellt. Ich habe einige kleinere Änderungen am ursprünglichen Schema vorgenommen, um die Funktionen des Geräts zu verbessern. Sie finden den Originalschaltplan im N.E.C.O.-s-Web:

https://neco-desarrollo.es/pirat-wireless-metal-detector

An die Stelle eines 150-Ohm-Widerstands habe ich ein Trimerpotentiometer mit einem Wert von 47 Kohm gesetzt. Dieser Trimer reguliert den Strom durch die Spule. Durch Erhöhen seines Wertes erhöht sich der Strom durch die Spule und die Empfindlichkeit des Geräts steigt. Die zweite Modifikation ist der Trimmerpotentiometer 100kOhm anstelle des Widerstands 62k im Original. Mit diesem Trimer stellen wir die Spannung von ca. 4,5 V auf den A0-Eingang des Arduino ein, da mir aufgefallen ist, dass für verschiedene Operationsverstärker und Betriebsspannungen der Wert dieses Widerstands unterschiedlich sein sollte.

In diesem speziellen Fall verwende ich zur Stromversorgung des Geräts eine 4-Lithium-Ionen-Batterie, die in Reihe geschaltet ist, sodass die Spannung etwas größer als 15 V ist. Da Arduino maximal 12V Eingangsspannung akzeptiert, habe ich einen Stabilisator für 5V (7805) auf dem kleinen Kühlkörper montiert, um den Arduino direkt an den +5V-Pin zu betreiben.

Die Spule besteht aus isoliertem Kupferdraht mit einem Durchmesser von 0,4 mm und enthält 25 Windungen in Form eines Kreises mit einem Durchmesser von 19 Zentimetern Spule (die Elemente sind mit Kleber zu verkleben, und das keine Schrauben)

Wie Sie auf dem Video sehen können, kann eine kleine Metallmünze in einer Entfernung von 10-15 Zentimetern erkannt werden, während ein größeres Metallobjekt von 30-40 Zentimetern und mehr erkannt wird. Dies sind hervorragende Ergebnisse, wenn man bedenkt, dass die Herstellung und Einstellung des Geräts relativ einfach sind.

Code

  • Code
codeArduino
#include //#include //int bluetoothTx =5;//int bluetoothRx =6;//Blutoth-Modulterminal RX//SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);# define pulsePine 2int timer =200;const int button1 =12;int buttonState1 =0;char data;//EEPROM variablesint addr_duty =0;int addr_freq =1;int saved_value;int duty_cycle;int duty_cycle_temp;int freq;int freq_temp;int duty_def_value =10;int freq_def_value =60;//Balance-Variablenint value_count =0;int value_count_def =100;int balance_value =0;int balance_value_temp =0;//****unsigned long startMillis; unsigned long currentMillis;lange Periode =100000; // der Wert ist eine Anzahl von Mikrosekunden // Messung des Niveaus der Batteriefloat resistencia1 =101000; //Resistencia de 100K para medir la tencion (Voltios)/Widerstand von 100k für Testvoltsfloat resistencia2 =10000; //Resistencia de 10k para medir la tencion (Voltios)/Widerstand 10k for test voltsfloat const arefVolt=4.8f; //pin "4.9v" GENAUEN WERT HIER EINSTELLENfloat voutv;float vinv;unsigned long startMillisVolts; unsigned long currentMillisVolts;long periodVolts =2000; // der Wert ist eine Anzahl von Mikrosekundenint sensorValue;void setup () {//analogReference (INTERNAL); Serial.begin(115200); readFromStorage(addr_duty); Arbeitszyklus =gespeicherter_Wert; readFromStorage(addr_freq); Freq =Gespeicherter_Wert; if(duty_cycle ==0 || duty_cycle ==255){ writeToStorage(duty_def_value,addr_duty); readFromStorage(addr_duty); Arbeitszyklus =gespeicherter_Wert; } if(freq ==0 || Freq ==255) {writeToStorage(freq_def_value,addr_freq); readFromStorage(addr_freq); Freq =Gespeicherter_Wert; } pinMode (pulsePine, AUSGANG); }void loop () { currentMillis =micros (); currentMillisVolts =millis(); if (Serial.available ()> 0) { data =Serial.read (); setDutyAndFreq (Daten); } if (currentMillis - startMillis>=period) { period =1000000 / freq; // Serial.println (Punkt); digitalWrite (pulsePine, HIGH); Arbeitszyklus_Temp =Arbeitszyklus * 10; delayMikrosekunden (duty_cycle_temp); digitalWrite (pulsePine, LOW); // sensorValue =analogRead (A0); for(int i =0;i <3; i++){ sensorValue =analogRead(A0);}delayMicroseconds(10);sensorValue =analogRead(A0);sensorValue =sensorValue / 5; Daten senden(); startMillis =currentMillis; } // Lectura voltios if (currentMillisVolts - startMillisVolts>=periodVolts) {lecturaVoltios();//Serial.println("Lectura voltios");startMillisVolts =currentMillisVolts; } } void writeToStorage (int valor,int addr) { EEPROM.write (addr, valor); aufrechtzuerhalten. Int readFromStorage (int addr) { Stored_value =EEPROM.read (addr); Gespeicherten_Wert zurückgeben; aufrechtzuerhalten. aufrechtzuerhalten //"+" valor para aumentar el balance //"-" valor para desminuir el balance if (valor =='n') {//Serial.println ("n erhalten"); readFromStorage(addr_duty); Arbeitszyklus =gespeicherter_Wert; Arbeitszyklus =Arbeitszyklus + 1; writeToStorage(duty_cycle,addr_duty); aufrechtzuerhalten. Sonst if (valor =='m') {//Serial.println ("m erhalten"); readFromStorage(addr_duty); Arbeitszyklus =gespeicherter_Wert; Arbeitszyklus =Arbeitszyklus - 1; writeToStorage(duty_cycle,addr_duty); aufrechtzuerhalten. Sonst if (valor =='j') {//Serial.println ( "j erhalten"); readFromStorage(addr_freq); Freq =Gespeicherter_Wert; Frequenz =Frequenz + 10; writeToStorage(freq,addr_freq); aufrechtzuerhalten. Sonst if (valor =='k') {//Serial.println ( "k erhalten"); readFromStorage(addr_freq); Freq =Gespeicherter_Wert; Frequenz =Frequenz - 10; writeToStorage(freq,addr_freq); aufrechtzuerhalten. Sonst if (valor =='p') {//Serial.println ( "m Recived"); writeToStorage(0,addr_freq); writeToStorage(0,addr_duty); } } //Volt-Funktionvoid lecturaVoltios () {vinv =0.0f; voutv=0.0f; for (int i =0; i <100; i ++) { voutv =(analogRead (A7) * arefVolt) / 1023; //Lee el voltaje de entrada vinv +=voutv / (resistencia2 / (resistencia1 + resistencia2)); //Formula del divisor resistivo para el voltaje final if(vinv <0.9){vinv=0.0f; }} vinv =vinv/100;}void sendData () {/* Serial.print ("<"); Serial.print (sensorValue); Serial.print("/"); Serial.print (Freq); Serial.print("/"); Serial.print (duty_cycle); Serial.print("/"); Serial.print (vinv); Serial.print(">"); Serial.println();*/ String data ="<"; Daten +=SensorWert; Daten +="/"; Daten +=Freq; Daten +="/"; Daten +=Duty_cycle; Daten +="/"; Daten +=vinv; Daten +=">"; /* bluetooth.print("<"); bluetooth.print (sensorValue); bluetooth.print("/"); bluetooth.print (Freq); bluetooth.print("/"); bluetooth.print (duty_cycle); bluetooth.print("/"); bluetooth.print (vinv); bluetooth.print(">");*/ Serial.println(Daten); }

Schaltpläne


Herstellungsprozess

  1. DIY-Voltmeter mit Arduino und Smartphone
  2. Pixie:Eine Arduino-basierte NeoPixel-Armbanduhr
  3. Audiofrequenzdetektor
  4. DIY Virtual Reality Skateboard
  5. Arduino- und OLED-basierte zelluläre Automaten
  6. DIY Arduino RADIONICS-Behandlungsmaschine
  7. DIY 2D Motion Racing Simulator
  8. Ultraschallbereichsdetektor mit Arduino
  9. Arduino-basiertes Sicherheitssystem
  10. Ein Blitzdetektor für Arduino