Tabla de contenido:

Detector de inducción de pulso basado en Arduino - Flip Coil: 5 pasos (con imágenes)
Detector de inducción de pulso basado en Arduino - Flip Coil: 5 pasos (con imágenes)

Video: Detector de inducción de pulso basado en Arduino - Flip Coil: 5 pasos (con imágenes)

Video: Detector de inducción de pulso basado en Arduino - Flip Coil: 5 pasos (con imágenes)
Video: 🟢🟢INTRODUCCIÓN A LADDER - PROGRAMACIÓN CONCEPTOS BÁSICOS // LENGUAJE ESCALERA // CURSO LADDER 2024, Mes de julio
Anonim
Detector de inducción de pulso basado en Arduino - Flip Coil
Detector de inducción de pulso basado en Arduino - Flip Coil
Detector de inducción de pulso basado en Arduino - Flip Coil
Detector de inducción de pulso basado en Arduino - Flip Coil

La idea

Habiendo construido algunos detectores de metales en el pasado con resultados variables, quería explorar las capacidades del Arduino en esa dirección.

Hay algunos buenos ejemplos de cómo construir detectores de metales con Arduino, algunos aquí como instrucciones. Pero al mirarlos, normalmente requieren algunos componentes externos para el tratamiento de la señal analógica o la sensibilidad es bastante baja.

Al pensar en detectores de metales, el tema principal es cómo detectar los ligeros cambios de voltaje en las señales relacionadas con la bobina de búsqueda. Estos cambios suelen ser muy pequeños. El enfoque más obvio sería utilizar las entradas analógicas del ATmega328. Pero mirando las especificaciones hay dos problemas básicos: son (a menudo) demasiado lentas y la resolución (en la mayoría de los casos) es demasiado baja.

Por otro lado, el Arduino se ejecuta a 16MHz y tiene bastantes capacidades de sincronización i. mi. una resolución de 0.0625 µS si se usa la velocidad del reloj. Entonces, en lugar de usar la entrada analógica para la detección, la forma más sencilla de detectar pequeños cambios dinámicos en el voltaje es comparar el cambio en la caída de voltaje a lo largo del tiempo a un voltaje de referencia fijo.

Para este propósito, el ATmega328 tiene la característica original de un comparador interno entre D6 y D7. Este comparador puede disparar una interrupción, lo que permite un manejo preciso de los eventos. Dejando a un lado las rutinas de sincronización cuidadosamente codificadas como millis () y micos () y yendo al temporizador interno del ATmega328 con una resolución mucho más alta, el Arduino es una gran base para los enfoques de detección de metales.

Entonces, desde una vista de código fuente, un buen comienzo sería programar el comparador interno para "cambio" en la polaridad de las entradas y usar un contador interno con la mayor velocidad posible para cambiar el tiempo de los cambios.

El código general en Arduido para lograr esto es:

// Definir todas las variables previas necesarias, etc. y configurar los registros

char sin firmar clockSelectBits = _BV (CS10); // sin preescala, full xtal void setup () {pinMode (6, INPUT); // + del comparador - al establecerlos como INPUT, se // establecen en pinMode (7, INPUT) de alta impedancia; // - del comparador - al establecerlos como INPUT, se // establecen en alta impedancia cli (); // detener las interrupciones TCCR1A = 0; // establece todo el registro TCCR1A en 0 TCCR1B = 0; // lo mismo para TCCR1B -> modo normalTCNT1 = 0; // inicializa el valor del contador a 0; TCCR1B | = clockSelectBits; // establece el prescaler e inicia el reloj TIMSK1 = _BV (TOIE1); // establece el bit de habilitación de interrupción de desbordamiento del temporizador sei (); // permitir interrupciones ACSR = (0 << ACD) | // Comparador analógico: Habilitado (0 << ACBG) | // Selección de banda prohibida del comparador analógico: AIN0 se aplica a la entrada positiva (0 << ACO) | // Salida del comparador analógico: Apagado (1 << ACI) | // Indicador de interrupción del comparador analógico: Borrar interrupción pendiente (1 << ACIE) | // Interrupción del comparador analógico: habilitado (0 << ACIC) | // Captura de entrada del comparador analógico: Deshabilitado (0 << ACIS1 | 0 << ACIS0 // interrupción en el interruptor de salida // (0 << ACIS1 | 1 << ACIS0 // reservado // (1 << ACIS1 | 0 << ACIS0 // interrupción en flanco de salida descendente // (1 << ACIS1 | 1 << ACIS0 // interrupción en flanco de entrada ascendente;}

// esta rutina se llama cada vez que el comparador crea una interrupción

ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); timeStamp = TCNT1; SREG = oldSREG; }

// esta rutina se llama cada vez que hay un desbordamiento en el contador interno

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// esta rutina se usa para restablecer el temporizador a 0

void resetTimer (void) {oldSREG = SREG; cli (); // Deshabilitar interrupciones TCNT1 = 0; // inicializa el valor del contador a 0 SREG = oldSREG; // Restaurar el registro de estado TCCR1B | = clockSelectBits; // establece el prescaler e inicia el reloj timer1_overflow_count = 0; // restablece el contador de desbordamiento}

Por supuesto, esta idea no es del todo nueva. La parte principal de este código se puede encontrar en otra parte. Una buena implementación como un enfoque para un microcontrolador que se encuentra en la página de inicio de TPIMD - Tiny Pulse Induction Metal Detector.

www.miymd.com/index.php/projects/tpimd/ (desafortunadamente esta página ya no está en línea, actualmente hay una copia de seguridad del sitio en www.basic4mcu.com, busque "TPIMD").

Paso 1: Idea de inducción de pulso de Arduino - Flip Coil

Idea de inducción de pulso de Arduino - Flip Coil
Idea de inducción de pulso de Arduino - Flip Coil
Idea de inducción de pulso de Arduino - Flip Coil
Idea de inducción de pulso de Arduino - Flip Coil

La idea es usar el Arduino como detector de inducción de pulso, como en TPIMD, ya que la idea de tiempo de la curva de caída parece funcionar bastante bien. El problema con los detectores de inducción de pulso es que normalmente necesitan un voltaje diferente para funcionar. Un voltaje para alimentar la bobina y un voltaje separado para hacer frente a la curva de caída. Estas dos fuentes de voltaje hacen que los detectores de inducción de pulsos sean siempre un poco complicados.

Al observar el voltaje de la bobina en un detector PI, la curva resultante se puede dividir en dos etapas diferentes. La primera etapa es el pulso mismo que alimenta la bobina y genera el campo magnético (1). La segunda etapa es la curva de caída de voltaje, comenzando con un pico de voltaje, luego ajustándose rápidamente al voltaje "sin energía" de la bobina (2). El problema es que la bobina cambia su polaridad después del pulso. Si el pulso es positivo (Var 1. en la imagen adjunta), la curva de caída es negativa. Si el pulso es negativo, la curva de caída será positiva (Var 2. en la imagen adjunta)

Para resolver este problema básico, la bobina necesita ser "volteada" electrónicamente después del pulso. En este caso, el pulso puede ser positivo y la curva de caída también puede ser positiva.

Para lograr esto, la bobina debe estar aislada de Vcc y GND después del pulso. En este momento, solo hay una corriente que fluye a través de una resistencia de amortiguación. Este sistema aislado de bobina y resistencia de amortiguación puede entonces "orientarse" a cualquier voltaje de referencia. Esto, en teoría, creará la curva positiva combinada (parte inferior del dibujo)

Esta curva positiva se puede utilizar a través del comparador para detectar el momento en el que el voltaje de caída "cruza" un voltaje de referencia. En el caso de tesoros cercanos a la bobina, la curva de caída cambia y el punto en el tiempo que cruza el voltaje de referencia cambia. Este cambio puede detectarse.

Después de algunos experimentos, el siguiente circuito demostró funcionar.

El circuito consta de un módulo Arduino Nano. Este módulo impulsa dos transistores MOSFET que alimentan la bobina (en SV3) a través de D10. Cuando el pulso en D10 termina, ambos MOSFET aíslan la bobina de 12V y GND. La energía ahorrada en la bobina se purga a través de R2 (220 ohmios). Al mismo tiempo, R1 (560 ohmios) conecta el lado positivo anterior de la bobina a GND. Esto cambia la curva de caída negativa en R5 (330 ohmios) a una curva positiva. Los diodos protegen el pin de entrada del Arduino.

R7 es un divisor de voltaje a aproximadamente 0.04V. En el momento en que la curva de caída en D7 se vuelve más negativa que 0.04 en D6, se activa una interrupción y se guarda la duración después del final del pulso.

En el caso de metal cerca de la bobina, la curva de caída dura más y el tiempo entre el final del pulso y la interrupción se hace más largo.

Paso 2: construcción del detector (placa de pruebas)

Construyendo el detector (protoboard)
Construyendo el detector (protoboard)
Construyendo el detector (protoboard)
Construyendo el detector (protoboard)
Construyendo el detector (protoboard)
Construyendo el detector (protoboard)

Construir el detector es bastante fácil. Esto se puede hacer en una placa de pruebas (adhiriéndose al circuito original) o soldando las piezas en una PCB.

El LED D13 en la placa Arduino Nano se utiliza como indicación para metal

Dejar una placa de pruebas es la forma más rápida de llegar al detector de trabajo. Se necesita bastante cableado, aún así esto se puede hacer en una pequeña placa de pruebas. En las imágenes, esto se muestra en 3 pasos, ya que el Arduino y los MOSFET ocultan algunos de los cables. Al probar, desconecté los diodos de alguna manera sin darme cuenta al principio. Esto no tuvo ningún efecto negativo sobre el comportamiento del detector. En la versión PCB del circuito los dejé completamente fuera.

En las imágenes no se muestran las conexiones a una pantalla OLED de 0,96. Esta pantalla está conectada:

Vcc - 5V (en el pin Arduino, ¡no en el voltaje de suministro!)

GND - GND

SCL - A5

SDA - A4

Esta pantalla OLED es necesaria para calibrar el detector inicialmente. Esto se hace configurando el voltaje correcto en el PIN6 del Arduino. Este voltaje debe rondar los 0,04 V. La pantalla ayuda a establecer el voltaje correcto.

La versión de tablero funciona bastante bien, aunque probablemente no sea adecuada para adentrarse en la naturaleza.

Paso 3: ir a PCB

Pasando a PCB
Pasando a PCB
Pasando a PCB
Pasando a PCB
Pasando a PCB
Pasando a PCB
Pasando a PCB
Pasando a PCB

En cuanto a la soldadura, no me gusta mucho la PCB de alta tecnología de doble cara, así que modifiqué el circuito para que quepa en una PCB de un lado.

Se realizaron las siguientes modificaciones:

1. Se omitieron los diodos.

2. las puertas de los MOSFET tienen una resistencia de 10 ohmios

3. la tensión de alimentación para el divisor de tensión en D6 viene dada por una señal de nivel ALTO en D8

4. Se cambió el pin del controlador para los MOSFET.

De esta manera, se podría crear una placa de circuito impreso de una cara que se puede soldar en placas de circuito impreso universales. Al usar este circuito, tendrá un detector PI en funcionamiento con solo 8-10 componentes externos (dependiendo de si se usa la pantalla OLED y / o un altavoz).

Paso 4: Configuración y uso del detector

Configuración y uso del detector
Configuración y uso del detector
Configuración y uso del detector
Configuración y uso del detector
Configuración y uso del detector
Configuración y uso del detector

Si el detector está construido correctamente y el programa está escrito en Arduino, la forma más fácil (si no la única) de configurar la unidad es usar una pantalla OLED. La pantalla está conectada a 5V, GND, A4, A5. La pantalla debe mostrar "calibrando" después de encender la unidad. Después de unos segundos debería decir "calibración realizada" y deberían mostrarse tres números en la pantalla.

El primer número es el "valor de referencia" identificado durante la calibración. El segundo valor es el último valor medido y el tercer valor es un valor medio de las últimas 32 mediciones.

Estos tres valores deberían ser más o menos iguales (en mis casos de prueba por debajo de 1000). El valor medio debería ser más o menos estable.

Para comenzar la configuración inicial, no debe haber ningún metal cerca de la bobina.

Ahora el divisor de voltaje (potenciómetro de ajuste) debe ajustarse de modo que los dos valores inferiores se establezcan al máximo sin dejar de dar una lectura estable. Hay una configuración crítica, donde el valor medio comienza a dar lecturas extrañas. Gire el recortador para volver a obtener valores estables.

Puede suceder que la pantalla se congele. Simplemente presione el botón de reinicio y comience de nuevo.

Para mi configuración (bobina: 18 vueltas a 20 cm), el valor estable es de alrededor de 630-650. Una vez configurado, presione el botón de reinicio, la unidad se recalibra y todos los valores del árbol deben estar en el mismo rango nuevamente. Si ahora se lleva metal a la bobina, el LED de la placa Arduino (D13) debería encenderse. Un altavoz adjunto emite algunos ruidos de clic (hay margen de mejora en la programación allí).

Para evitar altas expectativas:

El detector detecta algunas cosas, pero sigue siendo un detector muy simple y limitado.

Para dar una impresión de las capacidades, hice algunas detecciones de referencia con otros detectores diferentes. En cuanto a los resultados, sigue siendo bastante impresionante para un detector con solo 8 piezas externas pero que no coinciden con los detectores profesionales.

Mirando el circuito y el programa, hay mucho margen de mejora. Los valores de las resistencias se determinaron por experiencia, el tiempo de pulso de 250 ms se eligió al azar, así como los parámetros de la bobina. Si tiene ideas de mejora, estaré más que feliz de discutirlas.

¡Divertirse!

Paso 5: Actualización 1: usando una pantalla LCD de 16x2

Actualización 1: uso de una pantalla LCD de 16x2
Actualización 1: uso de una pantalla LCD de 16x2
Actualización 1: uso de una pantalla LCD de 16x2
Actualización 1: uso de una pantalla LCD de 16x2
Actualización 1: uso de una pantalla LCD de 16x2
Actualización 1: uso de una pantalla LCD de 16x2

Mejoras

Durante más pruebas, me di cuenta de que la biblioteca de la pantalla OLED I2C estaba consumiendo un tiempo considerable. Así que decidí usar una pantalla de 16x2 con un convertidor I2C.

Así que adopté el programa en la pantalla LCD agregando algunas características útiles. La primera línea de la pantalla muestra ahora la intensidad de la señal de una posible indicación. La segunda línea ahora muestra dos valores. El puño indicó la desviación de la señal actual en comparación con el valor de calibración. Este valor debe ser "0". Si este valor es constantemente negativo o positivo, el detector debe volver a calibrarse presionando el botón de reinicio. Los valores positivos indican metal cerca de la bobina.

El segundo valor muestra el valor de retardo real de la curva de caída. Este valor normalmente no es tan interesante, pero es necesario para la configuración inicial del detector.

El programa ahora permite múltiples duraciones de pulso en una secuencia (medio de experimentar / mejorar el rendimiento). No logré ningún avance. Por lo tanto, el valor predeterminado está establecido en una duración de pulso.

Configuración inicial del detector

Al configurar el detector, el segundo valor de la segunda línea es relevante (el primero se puede ignorar). Inicialmente, el valor puede ser "inestable" (ver imagen). Gire la resistencia de ajuste hasta que el valor alcance una lectura estable. Luego, gírelo para aumentar el valor a un valor estable máximo. Presione el botón de reinicio para recalibrar y el detector estará listo para usarse.

Tuve la impresión de que al establecer el valor máximo estable, perdí la sensibilidad para los metales distintos del hierro. Por lo tanto, podría valer la pena experimentar con los ajustes para tener una buena sensibilidad para las cosas que no son de hierro.

Bobinas

Construyo 3 bobinas para más pruebas.

1 -> 18 vueltas a 200 mm

2 -> 25 vueltas a 100 mm

3 -> 48 vueltas a 100 mm

Curiosamente, todas las bobinas funcionaron bastante bien, con casi el mismo rendimiento (moneda de 20 quilates a 40-50 mm en el aire). Ésta podría ser una observación bastante subjetiva.

Recomendado: