DETECTOR DE METALES – Grupo 14

Introducción

El proyecto del grupo 14 consiste en un detector de metales casero realizado con la placa Arduino. El funcionamiento se basa en la ley de inducción de Faraday, un cambio en el campo magnético creado por una corriente eléctrica induce una fuerza electromotriz, basándose en esta ley, la bobina del detector de metales detectará un cambio en la inductancia que registrará el Arduino.

Presupuesto

Para construir este detector de metales se necesitan pocos componentes electrónicos. A continuación se muestra una tabla orientativa del precio y materiales que se han de usar, el precio puede variar según tienda, calidad, país…

PiezaCantidadPrecio (en euros)
Placa Elegoo Uno R3115
Tupperware12
Brida30,45
Cable de cobre13,99
Transistor 2N222210,08
Led30,18
Batería portatil119,99
Zumbador (Buzzer)10,50
Capacitor cerámico 10410,10
Resistencia60,60
Palo selfie15
Varios (Cables, material adicional…)VariableVariable
Total 47,89

Diagrama del circuito

Se incluye un diagrama del circuito para su entendimiento y su implementación, además se presenta un ejemplo de cómo podría quedar el circuito de la forma más compacta posible.

Diagramas principales de la circuitería
Diagrama de Hardware
Hardware implementado

Código

// Configuración de Pines
const int pulsePin = 8;   
const int readPin = A0;    
const int ledLow = 3;      // LED Verde
const int ledMed = 4;      // LED Amarillo
const int ledHigh = 5;     // LED Rojo
const int buzzerPin = 6;   // Zumbador

// VARIABLES DE AJUSTE
int baseline = 0;          

// SENSIBILIDAD
int sensitivity = 200;      

// MÁXIMO
int maxDetection = 600;     

void setup() {
  pinMode(pulsePin, OUTPUT);
  pinMode(ledLow, OUTPUT);
  pinMode(ledMed, OUTPUT);
  pinMode(ledHigh, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  
  Serial.begin(9600);
  
  // Calibración
  
  digitalWrite(ledLow, HIGH); delay(100);
  digitalWrite(ledMed, HIGH); delay(100);
  digitalWrite(ledHigh, HIGH); delay(100);
  resetLeds();

  while(baseline < 15000){
    digitalWrite(ledLow, HIGH);
    digitalWrite(ledHigh, HIGH); delay(500);
    resetLeds();
    digitalWrite(ledMed, HIGH); delay(500);
    resetLeds();

    long total = 0;
    for(int i=0; i<500; i++) {
      total += measureCoil();
      delay(2);
    }

    baseline = total / 500;
  }

  tone(buzzerPin, 2000, 100);
  delay(100);
  
}

void loop() {
  int currentVal = measureCoil();
  int diff = abs(currentVal - baseline);
  
  resetLeds();
  
  
  // VERDE: Detección Inicial
  if (diff > sensitivity) {
    digitalWrite(ledLow, HIGH);
  }
  
  // AMARILLO: Detección Media
  if (diff > sensitivity + 40) {    
    digitalWrite(ledMed, HIGH);     
  }
  
  // ROJO: Detección Muy Cercana
  if (diff > sensitivity + 100) {    
    digitalWrite(ledHigh, HIGH);    
  }

  // SONIDO
  if (diff > sensitivity + 20) { 
    int toneFreq = map(diff, sensitivity, maxDetection, 500, 2000);
    toneFreq = constrain(toneFreq, 500, 2000); 
    tone(buzzerPin, toneFreq);
  } else {
    noTone(buzzerPin); 
  }
  
  delay(10); 
}

// FUNCIÓN DE LECTURA 
int measureCoil() {
  int measurement = 0;
  
  for(int i = 0; i < 15; i++) {
    digitalWrite(pulsePin, HIGH); 
    delayMicroseconds(150);       
    digitalWrite(pulsePin, LOW);  
    
    delayMicroseconds(8);        
    
    measurement += analogRead(readPin); 
  }
  return measurement; 
}

void resetLeds() {
  digitalWrite(ledLow, LOW);
  digitalWrite(ledMed, LOW);
  digitalWrite(ledHigh, LOW);
}

Ejemplo de funcionamiento

Funcionamiento del detector

Comentarios adicionales

Debido a los limitados recursos con los que se contaba para la realización de este proyecto, se presentó un problema prácticamente imposible de solucionar. En el código el valor baseline debe oscilar 15000 como mínimo y 15250 como máximo, pero debido a que el baseline se calcula cada vez que se enciende el detector haciendo mediciones, como la bobina es de cobre, esta se calienta y se excita eléctricamente, haciendo que ese valor calculado se salga del rango válido, imposibilitado el uso del detector. Una solución sería implementar algún mecanismo que permita enfriar y mantener a una temperatura ideal la bobina de cobre, para que nunca se calcule un baseline fuera del rango.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *