Índice:

Detector de indução de pulso baseado em Arduino - LC-Trap: 3 etapas
Detector de indução de pulso baseado em Arduino - LC-Trap: 3 etapas

Vídeo: Detector de indução de pulso baseado em Arduino - LC-Trap: 3 etapas

Vídeo: Detector de indução de pulso baseado em Arduino - LC-Trap: 3 etapas
Vídeo: Arduino wireless metal detector DIY / Spirit PI 2024, Julho
Anonim
Detector de indução de pulso baseado em Arduino - LC-Trap
Detector de indução de pulso baseado em Arduino - LC-Trap

Enquanto procurava por mais ideias para um detector de metal de indução de pulso Ardino simples com apenas uma tensão de alimentação, me deparei com a página inicial do Teemo:

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

Ele criou um detector de indução de pulso simples usando o princípio LC-Trap. Circuitos semelhantes foram postados aqui em Instructable by TechKiwiGadgets. Exceto que o circuito Teemo usa os comparadores internos de um microcontrolador PIC, necessitando de menos componentes externos

Então, fui desafiado a usar o Arduino em vez de um PIC-Controller para este esquema e ver o quão longe posso chegar.

Etapa 1: Esquemático

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

O esquema do Arduino é um pouco mais complicado, pois o Arduino não permite rotear um sinal analógico interno para a entrada do comparador. Isso adiciona dois componentes para um desvio de tensão simples. Isso leva a um design com 12 componentes externos (deixando de fora o alto-falante e o LCD 16x2), em comparação com 9 do design Flip Coil.

O princípio de funcionamento do esquema é muito bem explicado no site da Teemo. Basicamente, a bobina é alimentada e depois desligada. Após desligar, a bobina e o condensador em paralelo criarão uma oscilação amortecida. A frequência e a queda da oscilação são influenciadas pelo metal próximo à bobina. Para mais detalhes do circuito veja a página de Teemo ou de TechKiwi aqui no Instructables.

Como no detector de indução de pulso da bobina flip, eu uso o comparador interno e a possibilidade de acionar uma interrupção para adquirir o sinal da bobina.

Neste caso, obterei várias interrupções, pois a tensão está oscilando em torno da tensão de referência definida no comparador. Ao final da oscilação, a tensão na bobina se estabilizará em torno de 5V, mas não exatamente. Eu escolhi um conversor de voltagem com 200 Ohm e 10k Ohm para obter uma voltagem de cerca de 4,9 volts

Para reduzir a complexidade dos esquemas, usei D4 e D5 para fornecer GND (para o resistor de 10k) e 5V (para o resistor de 220 Ohm). Os pinos são definidos na inicialização do detector.

Nesta versão, adicionei uma conexão de alto-falante usando a abordagem de vários tons de volume controlado, conforme descrito em Como programar um detector de metal baseado em Arduino. Isso permite diferenciar as propriedades do alvo, bem como sentir a intensidade do sinal. O alto-falante pode ser conectado ao conector adicional de 5 pinos. Os 3 pinos restantes do cabeçalho serão usados para botões de pressão (a serem implementados).

Etapa 2: Programação

Programação
Programação
Programação
Programação
Programação
Programação

Agora que o circuito foi projetado e o protótipo construído, é hora de encontrar uma abordagem apropriada para a detecção de metal.

1. Contagem de pulsos

Contar os pulsos da oscilação até que ela decaia totalmente é uma ideia.

Se houver metal próximo à bobina, a quantidade de oscilação diminui. Neste caso, a tensão de referência do comparador deve ser definida para um nível que o último pulso mal seja medido. Portanto, caso algo seja detectado, esse pulso desaparece imediatamente. Isso foi um pouco problemático.

Cada onda de oscilação cria duas interrupções. Um enquanto desce e o outro sobe. Para definir a tensão de referência exatamente para a crista de uma onda de oscilação, o tempo entre descer e subir deve ser o mais curto possível (veja a figura). Infelizmente, aqui a sobrecarga do ambiente Arduino cria problemas.

Cada gatilho da interrupção chama este código:

ISR (ANALOG_COMP_vect) {

Toggle1 = Toggle0 // salva o último valor Toggle0 = TCNT1; // obter um novo valor}

Este código leva algum tempo (se bem me lembro, cerca de 78 ciclos de instrução que são cerca de 5 microssegundos @ 16MHz). Portanto, a distância mínima detectável entre dois pulsos é exatamente o tempo que este código leva. Se o tempo entre dois disparos ficar mais curto (veja a imagem), ele não será detectado, pois o código é totalmente executado antes de detectar uma segunda interrupção

Isso leva a uma perda de sensibilidade. Ao mesmo tempo, notei que o amortecimento das oscilações é muito sensível a quaisquer influências externas, tornando assim esta abordagem no total um pouco difícil.

2. Medindo a frequência

Outra forma de detectar metal é medindo a frequência da oscilação. Isso tem uma grande vantagem em comparação com a medição do amortecimento da oscilação, pois a mudança na frequência permite a discriminação do metal. Caso haja material ferroso próximo à bobina, a frequência diminuirá, caso haja metal precioso próximo à bobina, a frequência aumentará.

A maneira mais fácil de medir a frequência é medir a quantidade de pulsos depois que as bobinas começam a oscilar. O período de tempo entre o início e o último pulso dividido pela quantidade total de pulsos medidos é a frequência. Infelizmente, as últimas oscilações são bastante assimétricas. Como a presença de metal também influencia a queda da oscilação, as últimas oscilações são ainda mais assimétricas, as leituras são difíceis de interpretar. Na imagem, isso é mostrado com o cruzamento 1 para 1 'e 2 para 2'.

A melhor maneira é, portanto, usar alguns pulsos anteriores para medir a frequência. Durante o teste, curiosamente, descobri que alguns pulsos são mais sensíveis do que outros. Em algum lugar em 2/3 das oscilações é um bom ponto para adquirir os dados.

Processando os dados

O código inicial baseado no loop () chamando uma função pulse () para fazer a temporização da bobina. Embora os resultados não tenham sido ruins, tive o desejo de melhorar o tempo. Para fazer isso, criei um código totalmente baseado em cronômetro, levando ao instutável separado How to Program a Arduino Based Metal Detector. Este instrutível explica o tempo, a saída de LCD de processamento de dados etc. em detalhes

1. O LCD

A primeira abordagem foi medir 10 pulsos e, em seguida, mostrar os valores no LCD. Como descobri que a transferência de dados I2C era muito lenta, mudei para o código para atualizar apenas um caractere por pulso.

2. Abordagem de valor mínimo

Para melhorar ainda mais a estabilidade das leituras, escrevi uma rotina de saída serial para obter uma melhor percepção dos dados medidos. Lá se tornou aparente que, embora a maioria das leituras fosse um tanto estável, algumas não eram! Algumas leituras do “mesmo” pulso de oscilação estavam tão distantes umas das outras que destruiria todas as abordagens para analisar uma mudança na frequência.

Para compensar isso, criei uma "fronteira" dentro da qual os valores eram confiáveis. I. e. quando os valores estavam a mais de 35 ciclos do temporizador1 do valor esperado, esses valores eram ignorados (explicados em detalhes no Instrutível "Como programar um detector de metal baseado em Arduino")

Esta abordagem provou ser muito estável.

3. A tensão

O projeto original do Teemo é alimentado abaixo de 5 volts. Como minhas suposições eram “mais volts = mais potência = mais sensibilidade”, liguei a unidade no início com 12V. Isso resultou no aquecimento do MOSFET. Este aquecimento resultou então em um desvio geral dos valores medidos, levando a um reequilíbrio frequente do detector. Ao diminuir a tensão para 5 V, a geração de calor do MOSFET pode ser minimizada a um nível onde quase nenhum desvio das leituras foi observado. Isso tornou o circuito ainda mais simples, já que o regulador de tensão on-board do Arduino não era mais necessário.

Para um MOSFET, escolhi inicialmente o IRL540. Este MOSFET é compatível com o nível lógico, mas tem uma classificação de tensão máxima de 100V. Eu esperava um melhor desempenho mudando para um IRL640 com classificações de 200V. Infelizmente, os resultados foram os mesmos. Portanto, um IRL540 ou um IRL640 fará o trabalho.

Etapa 3: resultados finais

Resultados finais
Resultados finais
Resultados finais
Resultados finais
Resultados finais
Resultados finais

A vantagem do detector é que ele distingue entre materiais preciosos e ferrosos. A desvantagem é que a sensibilidade com este esquema simples não é tão boa. Para comparar o desempenho, usei as mesmas referências do detector Flip-Coil. Provavelmente bom para alguma localização, mas provavelmente decepcionante para uma busca real.

Aqui, o design original com o controlador PIC pode ser mais sensível, pois está funcionando em 32 MHz em vez dos 16 MHz do mesmo, fornecendo uma resolução mais alta para detectar mudanças na frequência.

Os resultados foram obtidos usando a bobina com 48 voltas @ 100 mm.

Como sempre, aberto para feedback

Recomendado: