Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Detector de metales de inducción de pulso basado en Arduino DIY

Componentes y suministros

Arduino Nano R3
× 1
Módulo Bluetooth HC-05
× 1
Transistor de uso general PNP
× 1
Transistor de uso general NPN
× 1
Canal N del MOSFET de potencia
× 1
Amplificador operacional, Amplificador operacional + Comparador + Referencia
× 1
1N4148 - Cambio rápido de propósito general
× 2
Condensador 10 µF
× 1
Condensador 1 µF
× 1
Potenciómetro de una sola vuelta - 100k ohmios
× 1
Potenciómetro de una sola vuelta-47k
× 1
12 resistencias con diferentes valores
× 1

Herramientas y máquinas necesarias

Soldador (genérico)

Acerca de este proyecto

Los sistemas de inducción de pulsos (PI) utilizan una sola bobina como transmisor y receptor. Esta tecnología envía ráfagas (pulsos) breves y potentes de corriente a través de una bobina de alambre. Cada pulso genera un breve campo magnético. Cuando el pulso termina, el campo magnético invierte la polaridad y colapsa muy repentinamente, lo que resulta en un pico eléctrico agudo. Este pico dura unos pocos microsegundos y hace que otra corriente atraviese la bobina. Esta corriente se llama pulso reflejado y es extremadamente corta, con una duración de solo unos 30 microsegundos. Luego se envía otro pulso y el proceso se repite. Si una pieza de metal entra dentro del rango de las líneas del campo magnético, la bobina de recepción puede detectar un cambio tanto en la amplitud como en la fase de la señal recibida. La cantidad de cambio de amplitud y de fase es una indicación del tamaño y la distancia del metal, y también se puede usar para discriminar entre metales ferrosos y no ferrosos.

Encontré un buen ejemplo de un detector PI en el sitio del N.E.C.O. proyectos. Este detector de metales es una simbiosis de Arduino y Android. En Play Store puedes descargar la versión gratuita de la aplicación "Spirit PI", que es completamente funcional, pero también puedes comprar una versión pro que tiene varias opciones excelentes. La comunicación entre el teléfono inteligente y el arduino se realiza con el módulo bluetooth HC 05, pero puede usar cualquier adaptador bluetooth en el que tenga que cambiar la velocidad en baudios a 115200. El esquema se muestra en la siguiente figura. Hice varias modificaciones menores al esquema original para mejorar las características del dispositivo. Puede encontrar el esquema original en la web de N.E.C.O.-s:

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

En lugar de una resistencia de 150 ohmios, puse un potenciómetro de ajuste con un valor de 47 Kohms. Este temporizador regula la corriente a través de la bobina. Al aumentar su valor, la corriente a través de la bobina aumenta y la sensibilidad del dispositivo aumenta. La segunda modificación es el potenciómetro de ajuste de 100 kOhmios en lugar de la resistencia de 62 k en el original. Con este temporizador, configuramos el voltaje de aproximadamente 4.5V a la entrada A0 en Arduino, porque noté que para diferentes amplificadores operacionales y voltajes operativos, el valor de esta resistencia debería ser diferente.

En este caso particular, para alimentar el dispositivo utilizo una batería de iones de litio de 4 conectados en serie, por lo que el voltaje es algo mayor a 15v. Debido a que Arduino acepta un voltaje de entrada máximo de 12V, coloco un estabilizador para 5V (7805) montado en el pequeño disipador de calor para alimentar el Arduino directamente al pin + 5v.

La bobina está hecha de alambre de cobre aislado con un diámetro de 0.4 mm y contiene 25 bobinados en forma de círculo con un diámetro de 19 centímetros.En la mano de obra final, es necesario asegurarse de que no haya objetos metálicos cerca del bobina (los elementos deben pegarse con pegamento y sin tornillos)

Como puede ver en el video, se puede detectar una pequeña moneda de metal a una distancia de 10-15 centímetros, mientras que un objeto de metal más grande de 30-40 centímetros y más. Estos son excelentes resultados, teniendo en cuenta que la fabricación y configuración del dispositivo son relativamente simples.

Código

  • código
código Arduino
 #include  // # incluye  // int bluetoothTx =5; // int bluetoothRx =6; // módulo blutoth terminal 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 valor_almacenado; int duty_cycle; int duty_cycle_temp; int freq; int freq_temp; int duty_def_value =10; int freq_def_value =60; // Variables de balanceint value_count =0; int value_count_def =100; int balance_value =0; int balance_value_temp =0; // **** unsigned long startMillis; Millis de corriente larga sin firmar; período largo =100000; // el valor es un número de microsegundos // Medida del nivel de la batería flotante resistencia1 =101000; // Resistencia de 100K para medir la tencion (Voltios) / Resistencia de 100k para prueba voltsfloat resistencia2 =10000; // Resistencia de 10k para medir la tencion (Voltios) / Resistance 10k for test voltsfloat const arefVolt =4.8f; // pin "4.9v" ESTABLECER VALOR EXACTO AQUÍ flotador voutv; flotador vinv; unsigned long startMillisVolts; sin firmar long currentMillisVolts; long periodVolts =2000; // el valor es un número de microsegundos sensorValue; void setup () {// analogReference (INTERNAL); Serial.begin (115200); readFromStorage (addr_duty); duty_cycle =valor_almacenado; readFromStorage (addr_freq); freq =valor_almacenado; if (duty_cycle ==0 || duty_cycle ==255) {writeToStorage (duty_def_value, addr_duty); readFromStorage (addr_duty); duty_cycle =valor_almacenado; } if (freq ==0 || freq ==255) {writeToStorage (freq_def_value, addr_freq); readFromStorage (addr_freq); freq =valor_almacenado; } pinMode (pulsePine, SALIDA); } bucle vacío () {currentMillis =micros (); currentMillisVolts =millis (); if (Serial.available ()> 0) {data =Serial.read (); setDutyAndFreq (datos); } if (currentMillis - startMillis> =period) {period =1000000 / freq; // Serial.println (punto); digitalWrite (pulsePine, HIGH); duty_cycle_temp =duty_cycle * 10; delayMicroseconds (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; enviar datos(); 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); } int readFromStorage (int addr) {valor_almacenado =EEPROM.read (addr); return valor_almacenado; } void setDutyAndFreq (char valor) {// "n" valor para aumentar duty cycle // "m" valor para disminuir duty cycle // "j" valor para aumentar la frecuencia // "k" valor para des, inuir la frecuencia // "+" valor para aumentar el balance // "-" valor para desminuir el balance if (valor =='n') {// Serial.println ("n Recived"); readFromStorage (addr_duty); duty_cycle =valor_almacenado; ciclo_de_uso =ciclo_de_uso + 1; writeToStorage (duty_cycle, addr_duty); } else if (valor =='m') {// Serial.println ("m Recived"); readFromStorage (addr_duty); duty_cycle =valor_almacenado; ciclo_de_uso =ciclo_de_servicio - 1; writeToStorage (duty_cycle, addr_duty); } else if (valor =='j') {// Serial.println ("j Recived"); readFromStorage (addr_freq); freq =valor_almacenado; frecuencia =frecuencia + 10; writeToStorage (freq, addr_freq); } else if (valor =='k') {// Serial.println ("k Recived"); readFromStorage (addr_freq); freq =valor_almacenado; frecuencia =frecuencia - 10; writeToStorage (freq, addr_freq); } else if (valor =='p') {// Serial.println ("m Recived"); writeToStorage (0, addr_freq); writeToStorage (0, addr_duty); }} // Función de voltajevoid lecturaVoltios () {vinv =0.0f; voutv =0.0f; para (int i =0; i <100; i ++) {voutv =(analogRead (A7) * arefVolt) / 1023; // Lee el voltaje de entrada vinv + =voutv / (resistencia2 / (resistencia1 + resistencia2)); // Fórmula 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 ="<"; datos + =sensorValue; datos + ="/"; datos + =frecuencia; datos + ="/"; datos + =ciclo_de_uso; datos + ="/"; datos + =vinv; datos + =">"; / * bluetooth.print ("<"); bluetooth.print (sensorValue); bluetooth.print ("/"); bluetooth.print (frecuencia); bluetooth.print ("/"); bluetooth.print (ciclo_de_uso); bluetooth.print ("/"); bluetooth.print (vinv); bluetooth.print (">"); * / Serial.println (datos); } 

Esquemas


Proceso de manufactura

  1. Voltímetro de bricolaje con Arduino y un teléfono inteligente
  2. Pixie:un reloj de pulsera NeoPixel basado en Arduino
  3. Detector de frecuencia de audio
  4. Patineta de realidad virtual DIY
  5. Autómatas celulares basados ​​en Arduino y OLED
  6. Máquina de tratamiento DIY Arduino RADIONICS
  7. Simulador de carreras de movimiento 2D DIY
  8. Detector de rango ultrasónico con Arduino
  9. Sistema de seguridad basado en Arduino
  10. Un detector de rayos para Arduino
  11. Idea de bricolaje con RFID