YFM con pantalla LCD. pinpointer casero

 YFM con pantalla LCD






En esta versión del detector de metales YFM con arduino he agregado una pantalla LCD y un botón para seleccionar la sensibilidad del detector. en la pantalla se puede ver el tipo de metal detectafo (si es ferroso o no ferroso), la posición del limite de sensibilidad y la intensidad de señal con una barra que aumenta cuando el metal se acerca a la bobina. También he añadido un numero referente a la intensidad de señal que será positivo para metales no ferrosos y negativo para metales ferrosos.
Podeis ver el esquema del detector en la entrada que creé presentando el YFM: https://yeti-lab.blogspot.com/2020/05/yfm-arduino-pinpointer.html

A continuación pondré un esquema de conexión de la pantalla LCD 16X2

Y un esquema de conexión del botón. sin el botón no funcionará salvo que se deshabilite en el código.




//Detector de metales YFM Pinpointer 2 tonos con pantalla LCD

// Hardware y software implementados por Hector Santos ("El yeti" en youtube)  yeti-lab.blogspot.com

//YFM v1.2 LCD AutoBalance


// Entrada D5, Buzzer D12, boton D4

#include <FreqCount.h>

#include <LiquidCrystal.h>

LiquidCrystal lcd(6, 7, 8, 9, 10, 11);

// entrada en el pin 5

// Buzzer en el pin 12

bool fe = false;

bool AB=true;

int valor=0;

int buff=0;

int frq=0;

int resta=0;

int sens=2; // sensibilidad

int autoBalance=0;


void setup() {

  lcd.begin(16, 2);

  lcd.print("YFM Pinpointer");

  pinMode (13,OUTPUT);

  pinMode (12,OUTPUT);

  pinMode(4,INPUT);

Serial.begin(9600);

FreqCount.begin(200); //nº ciclos de lectura de frecuencia

delay(100);


frq=FreqCount.read();

                       // Balance

  buff=frq;

  for(int i=0;i<5;i++){

    for(int i=0;i<10;i++){// genera tono

    digitalWrite(12,HIGH);

    delay(2);

    digitalWrite(12,LOW);

    delay(2);

      }

    delay(20);

    frq= FreqCount.read();

    if(frq != buff){i=0; buff=frq;}

    }

      for(int i=0;i<20;i++){ // Genera tono

    digitalWrite(12,HIGH);

    delay(1);

    digitalWrite(12,LOW);

    delay(1);

    

  }

lcd.clear();

}


void loop() {

  AB=true;

 frq = FreqCount.read();


  resta=buff-frq;

valor= -resta;

fe=true;

if(resta<0){resta=-resta;fe=false;}


if(resta>sens && fe){               // Metales ferrosos

  fe = true;

  for(int i=0;i<10;i++){ // Genera tono

    digitalWrite(12,HIGH);

    delay(2);

    digitalWrite(12,LOW);

    delay(2);

  }

   delay(40-(constrain(resta*5,10,40)));

   AB=false; //para resetear el autobalance

  }

  

 

  if(resta>sens && !fe){        // Metales no-ferrosos

    fe=false;

      //resta=-resta;

        for(int i=0;i<20;i++){// genera tono

    digitalWrite(12,HIGH);

    delay(1);

    digitalWrite(12,LOW);

    delay(1);

      }

      delay(40-(constrain(resta*5,10,40))); 

      AB=false; //para resetear el autobalance

   

}


lcd.clear();

lcd.setCursor(0, 1);

//lcd.print(resta);

char O = 255;

char flecha = 94;

lcd.setCursor(sens,1);

lcd.print(flecha);

if(valor<0)lcd.setCursor(5,1);

else lcd.setCursor(6,1);



lcd.print(valor);

lcd.setCursor(10, 1);

if(fe && resta>sens)lcd.print("Fe");

if(!fe && resta>sens)lcd.print("NO Fe");


lcd.setCursor(0, 0);

resta = constrain(resta,0,16);

for(int i=0;i<resta;i++){

  lcd.print(O);

  }

//Serial.print(resta);

//Serial.print("---------");

//Serial.println(buff);

if(!(valor>sens||valor<-sens))delay(20);

if(!digitalRead(4)){

  while(!digitalRead(4))delay(50);

  sens++;

  if(sens>4)sens=1;

  }

if(true){                     // auto Balance

  digitalWrite(13,HIGH);

  if(AB && resta !=0){   

    if(autoBalance>50){autoBalance=0; buff=frq;}

    autoBalance++;

    }else autoBalance=0;

 delay(1);

}


}


Comentarios

  1. Hola, soy nuevo en todo esto de Arduino y cuando copio el código para compilarlo me dice que no existe la librería FreqCount.h. Qué debo hacer? Saludos y gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Listo, estuve buscando y aprendí a instalar la librería. Estoy pensando en usar el pinpointer para detectar las barras de acero en el concreto armado, es que soy arquitecto y en ocasiones necesito saber que hay debajo de la superficie sin tener que demoler.

      Eliminar
    2. Que bien que aprendiste a instalar librerías.
      Por el tipo de detector que es no tiene mucho alcance, además si hay impurezas de óxido de hierro en el hormigón te dará lecturas falsas.
      Puedes ver el último detector que estoy desarrollando, ese también es muy sencillo y seguramente te de mejor resultado para ésa aplicación.
      Además no necesita ninguna librería adicional.
      Lo puedes ver en la última entrada del blog y algunos vídeos en mi canal de Youtube Yeti-lab

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Hola, una consulta, quisiera saber cómo podría hacer si quisiera hacerlo más personalizado de manera que me detecte de qué metal se trata en sí. Podría indicarme cómo hacer las mediciones para poder configurar las frecuencias?

    ResponderEliminar

Publicar un comentario