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 por Inducción de Pulso con Arduino Nano – Kit y Guía DIY

Componentes y materiales

Componente Cantidad
Arduino Nano R3 1
Módulo Bluetooth HC-05 1
Transistor PNP uso general 1
Transistor NPN uso general 1
MOSFET N-Channel de potencia 1
Amplificador operacional + comparador + referencia (ej. TL084 / LM324) 1
Diodo 1N4148 (conmutación rápida) 2
Condensador 10 µF 1
Condensador 1 µF 1
Potenciómetro monovuelta 100 kΩ 1
Potenciómetro monovuelta 47 kΩ 1
Kit 12 resistencias varios valores 1

Herramientas necesarias

Sobre el proyecto

Los detectores de Inducción de Pulso (PI) usan una sola bobina como transmisor y receptor. Envían pulsos cortos y potentes de corriente por la bobina; cada pulso genera un campo magnético breve. Al cortar la corriente, el campo colapsa bruscamente produciendo un pico eléctrico (pulso reflejado) de ~30 µs. Si hay metal cerca, la amplitud y fase del pulso reflejado cambian, permitiendo detectar tamaño, distancia y tipo (ferroso/no ferroso).

Basado en el diseño PIRAT de N.E.C.O. proyectos. Comunicación con smartphone Android vía app "Spirit PI" (Play Store, versión gratuita y Pro) y módulo HC-05 a 115200 baudios.

Modificaciones respecto al original

  1. Trimmer 47 kΩ en lugar de R 150 Ω: regula corriente de bobina → ajuste de sensibilidad.
  2. Trimmer 100 kΩ en lugar de R 62 kΩ: ajusta ~4.5V en entrada A0 del Arduino (compensa variaciones de amplificadores/voltajes).
  3. Alimentación: 4 baterías Li-ion en serie (>15V). Regulador 7805 + disipador en pin +5V del Arduino (máx 12V en Vin).

Bobina

Rendimiento

Código

Sketch para Arduino Nano. Guarda duty cycle y frecuencia en EEPROM. Comandos serie/Bluetooth: n/m (duty ±1), j/k (freq ±10), +/- (balance), p (reset defaults). Envía trama <valor/freq/duty/vin> a la app.

#include <EEPROM.h>
#define pulsePin 2
int timer = 200;
const int button1 = 12;
int buttonState1 = 0;
char data;

// EEPROM
int addr_duty = 0, addr_freq = 1;
int stored_value, duty_cycle, duty_cycle_temp, freq, freq_temp;
int duty_def_value = 10, freq_def_value = 60;

// Balance
int value_count = 0, value_count_def = 100;
int balance_value = 0, balance_value_temp = 0;

// Timing
unsigned long startMillis, currentMillis;
long period = 100000; // µs

// Batería
float resistencia1 = 101000, resistencia2 = 10000;
float const arefVolt = 4.8f;
float voutv, vinv;
unsigned long startMillisVolts, currentMillisVolts;
long periodVolts = 2000;
int sensorValue;

void setup() {
  Serial.begin(115200);
  readFromStorage(addr_duty); duty_cycle = stored_value;
  readFromStorage(addr_freq); freq = stored_value;
  if (duty_cycle == 0 || duty_cycle == 255) { writeToStorage(duty_def_value, addr_duty); readFromStorage(addr_duty); duty_cycle = stored_value; }
  if (freq == 0 || freq == 255) { writeToStorage(freq_def_value, addr_freq); readFromStorage(addr_freq); freq = stored_value; }
  pinMode(pulsePin, OUTPUT);
}

void loop() {
  currentMillis = micros();
  currentMillisVolts = millis();

  if (Serial.available() > 0) {
    data = Serial.read();
    setDutyAndFreq(data);
  }

  if (currentMillis - startMillis >= period) {
    period = 1000000 / freq;
    digitalWrite(pulsePin, HIGH);
    duty_cycle_temp = duty_cycle * 10;
    delayMicroseconds(duty_cycle_temp);
    digitalWrite(pulsePin, LOW);
    for (int i = 0; i < 3; i++) sensorValue = analogRead(A0);
    delayMicroseconds(10);
    sensorValue = analogRead(A0) / 5;
    sendData();
    startMillis = currentMillis;
  }

  if (currentMillisVolts - startMillisVolts >= periodVolts) {
    lecturaVoltios();
    startMillisVolts = currentMillisVolts;
  }
}

void writeToStorage(int valor, int addr) { EEPROM.write(addr, valor); }
int readFromStorage(int addr) { stored_value = EEPROM.read(addr); return stored_value; }

void setDutyAndFreq(char valor) {
  if (valor == 'n') { readFromStorage(addr_duty); duty_cycle = stored_value + 1; writeToStorage(duty_cycle, addr_duty); }
  else if (valor == 'm') { readFromStorage(addr_duty); duty_cycle = stored_value - 1; writeToStorage(duty_cycle, addr_duty); }
  else if (valor == 'j') { readFromStorage(addr_freq); freq = stored_value + 10; writeToStorage(freq, addr_freq); }
  else if (valor == 'k') { readFromStorage(addr_freq); freq = stored_value - 10; writeToStorage(freq, addr_freq); }
  else if (valor == 'p') { writeToStorage(0, addr_freq); writeToStorage(0, addr_duty); }
}

void lecturaVoltios() {
  vinv = 0.0f; voutv = 0.0f;
  for (int i = 0; i < 100; i++) {
    voutv = (analogRead(A7) * arefVolt) / 1023.0;
    vinv += voutv / (resistencia2 / (resistencia1 + resistencia2));
    if (vinv < 0.9) vinv = 0.0f;
  }
  vinv /= 100;
}

void sendData() {
  String data = "<";
  data += sensorValue; data += "/";
  data += freq; data += "/";
  data += duty_cycle; data += "/";
  data += vinv; data += ">";
  Serial.println(data);
}

Esquemático

Detector de Metales por Inducción de Pulso con Arduino Nano – Kit y Guía DIY

App Android: Spirit PI (configurar Bluetooth a 115200 baudios).

Proceso de manufactura

  1. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  2. Pixie: Reloj de pulsera NeoPixel basado en Arduino – Elegante reloj LED DIY
  3. Detector de frecuencia de audio con Arduino – Mide los picos de sonido más intensos
  4. Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth
  5. Autómatas Celulares en Tiempo Real con Arduino y Pantalla OLED 128x64
  6. Construye un dispositivo de tratamiento radiónico EMR con Arduino DIY
  7. Simulador de Carreras 2D DIY con Arduino Nano y Servos SG90
  8. Construye un Detector de Distancia Ultrasónico con Arduino UNO y Sensor SR04
  9. Sistema de seguridad Arduino: Detección de movimiento inteligente y alerta
  10. Detector de Rayos Económico con Arduino Uno
  11. Construye un Cerco RFID Portátil con Arduino – Guía Paso a Paso