Pi-Lotus Detector de metales con arduino. En desarrollo



 Pi-Lotus 5V es como he querido llamar al proyecto que estoy desarrollando de detector de metales de inducción de pulsos con arduino.

Estoy desarrollando a la vez una versión a 5V y 11V con Arduino Uno (nano compatible). 

El sistema de detección de metales de inducción de pulsos se basa en enviar pulsos a una bonina la cual expande su campo magnetico durante el pulso y lo reabsorbe cuando se termina el pulso, Ese colapso del campo magnetico provoca un pulso que es amplificado por el amplificador operacional. Arduino manda esos pulsos y tras cada uno hace una espera y lee la amplitud de la respuesta, la cual es distinta si hay metales cerca. no solo éso, la forma del pulso tambien difiere entre metales ferrosos y no ferrosos, siendo mas picuda con los primeros y mas redondeada con los segundos. todavia no he implementado la parte de diferenciar los metales y queda mucho por ahacer todavía.

Mas adelante os comparto el esquema y el código. No será necesario instalar ninguna librería para estas primeras versiones.

Para la versión dinámica no será necesario el botón.




////Pi-Lotus 5V beta by Yeti-lab  versión Dinámica////
///// Sketch implementado por Hector Santos Yeti-lab////
//// Ultima actualización 22/8/2021////
////https://yeti-lab.blogspot.com/////

int pulso=100; //funciona bien con 50
int sens; //Lectura estabilizada
int retardo=26; //funciona bien con 25
int referencia; // referencia de lectura
int limite=4;
int LA;   // Lectura Analogica

const int Buzzer=9;
const int Led=13;
const int pinPulso=8;


void setup() {
pinMode(Led,OUTPUT);
pinMode(Buzzer,OUTPUT); 
pinMode(pinPulso,OUTPUT); 
Serial.begin(9600);
digitalWrite(pinPulso,LOW);

}



void loop() { 

int p=0;
while(1){
 

digitalWrite(pinPulso,HIGH); //Genera pulso
delayMicroseconds(pulso);
digitalWrite(pinPulso,LOW);



delayMicroseconds(retardo); //Espera para la lectura

LA=analogRead(A0);
if(LA>sens)sens++;    // estabilización lectura analogica
else if(LA<sens)sens--;
  
delayMicroseconds(4000-pulso-108); //  250Hz es un periodo de 4000 us
p++;
if(p>3){
  p=0;
  if(sens<referencia-limite){
    digitalWrite(Led,HIGH); //detecta metal
    tone(Buzzer,900,100);  //Genera tono
    referencia=sens+1; // Balance dinamico
  }
  else digitalWrite(Led,LOW);
  
  if(sens>referencia+limite)referencia=sens-1; // Balance dinamico
 
  }
  
}
}
////////FIN de la versión dinámica////////


////Pi-Lotus 5V beta by Yeti-lab  versión con pulsador////
///// Sketch implementado por Hector Santos Yeti-lab////
//// Ultima actualización 22/8/2021////
////https://yeti-lab.blogspot.com/////

int sens=0;

int LA;

int retardo=26; //funciona bien con 25

int referencia=60; // referencia de lectura

int limite=3;

int Max, Min=1023;

int Bi;

bool B;



void setup() {

//analogReference(INTERNAL);

pinMode(13,OUTPUT);

pinMode(12,OUTPUT);

pinMode(9,OUTPUT); //buzzer


pinMode(8,OUTPUT);

pinMode(2,INPUT); // boton

Serial.begin(9600);

bitWrite(PORTB,0,1); // pulso apagado



}




void loop() { 

int p=0;

int pulso=50; //funciona bien con 50

while(1){

 

bitWrite(PORTB,0,1); // es el pin digital 8

delayMicroseconds(pulso);

bitWrite(PORTB,0,0); // pulso apagado



delayMicroseconds(retardo);


LA=analogRead(A0);

//if(LA>sens)sens++;    // el sistema de estabilización es innecesario

//else if(LA<sens)sens--;

sens=LA;

  

delayMicroseconds(4000-pulso-100); //  250Hz es un periodo de 4000 us

p++;

if(p>3){

  p=0;


    if(!digitalRead(2)){B=true; Bi=0;}// boton pulsado

  else if(B && Bi<100)//Pausa despues de boton

  { 

    Bi++;

    if(Bi>90){   //Ajusta sensibilidad

    if(sens>Max)Max=sens;

    if(sens<Min)Min=sens;

  referencia=Min;

  }

  }else {Min=4023; Bi=0;}


  

 // if(!digitalRead(2)){ // boton pulsado

  //  if(sens>Max)Max=sens;

  //  if(sens<Min)Min=sens;

 // referencia=Min;

 // }else {Min=1023;}

 

  if(sens<referencia-limite){

    digitalWrite(13,HIGH); //detecta metal

    tone(9,900,100);

  }

  else digitalWrite(13,LOW);

  

  if(sens>referencia+limite*3)digitalWrite(12,HIGH); //indicador deajuste

  else digitalWrite(12,LOW);

  }

  

}

}

/////FIN de la versión con pulsador////

Comentarios

  1. fuaa que velocidad para subir cosas yeti

    ResponderEliminar
    Respuestas
    1. Era domingo y me pidieron que lo publique, así que me puse con el esquema y lo publiqué, luego limpié el código y le añadí comentarios para que se entienda

      Eliminar
  2. Hola! Me parece muy bien este diseño, solo una pregunta, se podría sustituir el TL072 por un lm358? Gracias de antemano.

    ResponderEliminar
    Respuestas
    1. En el último vídeo que hice en Youtube, en mi canal Yeti-lab probé un montón de amplificadores, no recuerdo si ése concretamente,la cosa es que con algunos funciona y con otros no, pero también cambia la sensibilidad. Con los que más alcance da son lf356 y lf357 pero es inestable, con el tl072 da muy buen alcance y miuy buena estabilidad y los otros que probé y funcionaron me dieron mucho menor alcance

      Eliminar
  3. Estimado , he llevado a cabo este detector y el otro fabricado con el microcontrolador attiny85 hace un tiempo y funcionan perfectamente.
    El detector que me llamo la atención es el que funcióna con Arduino a 12 v, no tengo claro en qué cosas debo modificar el código Arduino para que funcione. Espero su respuesta , saludos

    ResponderEliminar
    Respuestas
    1. Perdona Luca que no vi tu comentario. mira la ultima entrada del blog. acabo de publicar un detector de metales completo muy potente. un saludo

      Eliminar

Publicar un comentario