Tabla de contenido:

Detector de inducción de pulso basado en Arduino - LC-Trap: 3 pasos
Detector de inducción de pulso basado en Arduino - LC-Trap: 3 pasos

Video: Detector de inducción de pulso basado en Arduino - LC-Trap: 3 pasos

Video: Detector de inducción de pulso basado en Arduino - LC-Trap: 3 pasos
Video: Detector de metales de inducción de pulsos en desarrollo 2024, Noviembre
Anonim
Detector de inducción de pulso basado en Arduino - LC-Trap
Detector de inducción de pulso basado en Arduino - LC-Trap

Mientras buscaba más ideas para un detector de metales de inducción de pulso Ardino simple con un solo voltaje de suministro, encontré la página de inicio de Teemo:

www.digiwood.ee/8-electronic-projects/2-metal-detector-circuit

Creó un detector de inducción de pulso simple utilizando el principio LC-Trap. Los circuitos similares se publicaron aquí en Instructable por TechKiwiGadgets. Excepto que el circuito Teemo utiliza los comparadores internos del microcontrolador PIC, por lo que necesita menos componentes externos

Así que tuve el desafío de usar el Arduino en lugar de un PIC-Controller para este esquema y ver hasta dónde puedo llegar.

Paso 1: esquema

Esquemático
Esquemático
Esquemático
Esquemático
Esquemático
Esquemático

El esquema de Arduino es un poco más complicado ya que Arduino no permite enrutar una señal analógica interna a la entrada del comparador. Esto agrega dos componentes para un divisor de voltaje simple. Esto lleva a un diseño con 12 componentes externos (sin incluir el altavoz y la pantalla LCD de 16x2), en comparación con los 9 del diseño Flip Coil.

El principio de funcionamiento del esquema se explica muy bien en el sitio web de Teemo. Básicamente, la bobina se alimenta y luego se apaga. Después de apagarse, la bobina y el condensador en paralelo crearán una oscilación amortiguada. La frecuencia y la caída de la oscilación están influenciadas por el metal en las proximidades de la bobina. Para obtener más detalles del circuito, consulte la página de Teemo o de TechKiwi aquí en Instructables.

Al igual que en el detector de inducción de pulso Flip Coil, utilizo el comparador interno y la posibilidad de activar una interrupción para adquirir la señal de la bobina.

En este caso, obtendré múltiples interrupciones ya que el voltaje oscila alrededor del voltaje de referencia establecido en el comparador. Al final de la oscilación, el voltaje en la bobina se estabilizará alrededor de 5 V, pero no exactamente. Elegí un divisor de voltaje con 200 Ohm y 10k Ohm para obtener un voltaje de aproximadamente 4.9 voltios

Para reducir la complejidad de los esquemas, utilicé D4 y D5 para proporcionar GND (para la resistencia de 10k) y 5V (para la resistencia de 220 ohmios). Los pines se establecen al inicio del detector.

En esta versión, agregué una conexión de altavoz usando el appraoch multitono controlado por volumen como se describe en Cómo programar un detector de metales basado en Arduino. Esto permite diferenciar las propiedades del objetivo, así como tener una idea de la intensidad de la señal. El altavoz se puede conectar al conector adicional de 5 pines. Los 3 pines restantes del encabezado se utilizarán para pulsadores (a implementar).

Paso 2: programación

Programación
Programación
Programación
Programación
Programación
Programación

Ahora que el circuito está diseñado y el prototipo está construido, es hora de encontrar un enfoque apropiado para detectar metales.

1. Contando pulsos

Contar los pulsos de la oscilación hasta que decae por completo es una idea.

Si hay metal cerca de la bobina, la cantidad de oscilación disminuye. En este caso, el voltaje de referencia del comparador debe establecerse a un nivel en el que apenas se mida el último pulso. Entonces, en caso de que se detecte algo, este pulso desaparece inmediatamente. Esto fue un poco problemático.

Cada onda de la oscilación crea dos interrupciones. Uno bajando y otro subiendo. Para establecer el voltaje de referencia exactamente en la cresta de una onda de oscilación, el tiempo entre la bajada y la subida debe ser lo más breve posible (ver imagen). Desafortunadamente, aquí la sobrecarga del entorno Arduino crea problemas.

Cada disparador de la interrupción requiere este código:

ISR (ANALOG_COMP_vect) {

Toggle1 = Toggle0 // guardar el último valor Toggle0 = TCNT1; // obtener un nuevo valor}

Este código lleva algo de tiempo (si recuerdo bien, alrededor de 78 ciclos de instrucción, lo que equivale a unos 5 microsegundos a 16 MHz). Por lo tanto, la distancia mínima detectable entre dos pulsos es exactamente el tiempo que tarda este código. Si el tiempo entre dos disparadores se acorta (ver imagen), no se detectará, ya que el código se ejecuta completamente antes de detectar una segunda interrupción.

Esto conduce a una pérdida de sensibilidad. Al mismo tiempo, me di cuenta de que la amortiguación de las oscilaciones es muy sensible a las influencias externas, lo que hace que este enfoque en total sea un poco difícil.

2. Midiendo la frecuencia

Otra forma de detectar metales es midiendo la frecuencia de oscilación. Esto tiene una gran ventaja en comparación con la medición de la amortiguación de la oscilación, ya que el cambio de frecuencia permite la discriminación del metal. En caso de que haya material ferroso cerca de la bobina, la frecuencia se ralentizará, en caso de que haya un metal precioso cerca de la bobina, la frecuencia aumentará.

La forma más fácil de medir la frecuencia es medir la cantidad de pulsos después de que las bobinas comienzan a oscilar. El período de tiempo entre el inicio y el último pulso dividido por la cantidad total de pulsos medidos es la frecuencia. Desafortunadamente, las últimas oscilaciones son bastante asimétricas. Como la presencia de metal también influye en la caída de la oscilación, las últimas oscilaciones son aún más asimétricas y las lecturas son difíciles de interpretar. En la imagen esto se muestra con el cruce de 1 a 1 'y 2 a 2'.

Por tanto, una mejor forma es utilizar algunos pulsos anteriores para medir la frecuencia. Mientras probaba, curiosamente descubrí que algunos pulsos son más sensibles que otros. En algún lugar a 2/3 de las oscilaciones es un buen punto para adquirir los datos.

Procesando los datos

El código inicial basado en el loop () que solicita una función pulse () para realizar la sincronización de la bobina. Si bien los resultados no fueron malos, tuve la necesidad de mejorar el tiempo. Para hacerlo, creé un código completamente basado en temporizador, lo que condujo al instuctable independiente Cómo programar un detector de metales basado en Arduino. Este instructivo explica en detalle la sincronización, la salida de LCD de procesamiento de datos, etc.

1. La pantalla LCD

El primer enfoque fue medir 10 pulsos y luego mostrar los valores en la pantalla LCD. Como descubrí que la transferencia de datos I2C era demasiado lenta, cambié al código para actualizar solo un carácter por pulso.

2. Enfoque de valor mínimo

Para mejorar aún más la estabilidad de las lecturas, escribí una rutina de salida en serie para tener una mejor idea de los datos medidos. Allí se hizo evidente que aunque la mayoría de las lecturas eran algo estables, ¡algunas no lo eran! Algunas lecturas del "mismo" pulso de oscilación estaban tan separadas que arruinarían todos los enfoques para analizar un cambio de frecuencia.

Para compensar esto, creé una "frontera" dentro de la cual el valor era digno de confianza. Es decir. cuando los valores estaban a más de 35 ciclos del timer1 del valor esperado, estos valores fueron ignorados (explicados en detalle en el Instructable "Cómo programar un detector de metales basado en Arduino")

Este enfoque demostró ser muy estable.

3. El voltaje

El diseño original de Teemo se alimenta por debajo de los 5 voltios. Como mis suposiciones eran “más voltios = más potencia = más sensibilidad”, al principio alimenté la unidad con 12V. Esto resultó en el calentamiento del MOSFET. Este calentamiento dio como resultado una desviación general de los valores medidos, lo que llevó a un reequilibrio frecuente del detector. Al disminuir el voltaje a 5 V, la generación de calor del MOSFET podría minimizarse a un nivel en el que casi no se observó desviación de las lecturas. Esto hizo que el circuito fuera aún más simple, ya que el regulador de voltaje integrado del Arduino ya no era necesario.

Para un MOSFET elegí inicialmente el IRL540. Este MOSFET es compatible con el nivel lógico, pero tiene una tensión nominal máxima de 100 V. Esperaba un mejor rendimiento cambiando a un IRL640 con clasificaciones de 200V. Desafortunadamente, los resultados fueron los mismos. Entonces, un IRL540 o un IRL640 harán el trabajo.

Paso 3: Resultados finales

Resultados finales
Resultados finales
Resultados finales
Resultados finales
Resultados finales
Resultados finales

La ventaja del detector es que discrimina entre material precioso y ferroso. La desventaja es que la sensibilidad con este esquema simple no es tan buena. Para comparar el rendimiento utilicé las mismas referencias que para el detector Flip-Coil. Probablemente sea bueno para algunas precisiones, pero probablemente decepcionante para una búsqueda real.

Aquí, el diseño original con el controlador PIC puede ser más sensible ya que se ejecuta en 32MHz en lugar de los 16MHz del mismo, lo que proporciona una resolución más alta para detectar cambios de frecuencia.

Los resultados se lograron utilizando la bobina con 48 vueltas a 100 mm.

Como siempre, abierto a recibir comentarios

Recomendado: