Saiba como construir um detector de metais usando um oscilador Colpitts e um Arduino.

Como funcionam os detectores de metais?

O circuito do tanque

No circuito acima, o condensador e o indutor em série formam um circuito do tanque. Em um circuito de tanque, a energia é transferida repetidamente entre um condensador e um indutor, resultando em oscilação. A corrente descarregada do condensador flui através do indutor; quando o condensador é completamente descarregado, o campo magnético decrescente do indutor mantém o fluxo de corrente. O condensador irá então carregar com a polaridade oposta, e quando o campo magnético estiver completamente desintegrado, o condensador irá descarregar, resultando num fluxo de corrente na direcção oposta à da corrente original. Este ciclo continua.

O indutor do circuito do tanque acima forma o detector do detector de metais (uma grande bobina de fio). Quando o material metálico se aproxima do centro do indutor (a bobina do detector), ele entra no campo magnético criado pelo indutor. Isto altera a permeabilidade magnética do núcleo do indutor, provocando a alteração da indutância. A alteração da indutância, por sua vez, altera a frequência de oscilação do circuito do tanque.

Se os componentes fossem ideais, o circuito do tanque oscilaria indefinidamente sem uma fonte de energia externa. Mas, na prática, os componentes não são ideais. A resistência indesejada dos componentes introduzirá perda de energia, fazendo com que a corrente oscilante se cone até parar. Para contrariar isto, um amplificador inversor BJT de fase única é usado para adicionar continuamente ganho ao circuito do tanque.

O oscilador Colpitts

Desde que a oscilação nos nós antes e depois do indutor estejam 180° fora de fase uns com os outros, um dos nós fornecerá a oscilação à base do transistor, amplificará e inverterá o sinal no coletor, depois o retornará em fase ao outro nó do circuito do tanque. Todo este circuito é chamado de oscilador Colpitts.

O oscilador Colpitts acima fornece uma oscilação constante com uma freqüência na faixa de 100kHz. Metais de artigos domésticos alterando a permeabilidade do núcleo indutor irá flutuar esta frequência em torno de 10kHz. Como esta faixa de freqüência está fora do espectro de áudio humano (20Hz a 20kHz), precisaremos traduzir a oscilação em um tom audível.

Os detectores de metais BFO (oscilador de freqüência de batimento) tradicionais superam este problema incorporando outro circuito de tanque com uma freqüência fixa igual à freqüência do circuito do tanque do detector sem a influência de quaisquer metais. Então, tomando a diferença entre as duas frequências isolará as frequências flutuantes do circuito do detector e o levará a uma faixa audível.

Para este projeto de detector de metais, estaremos usando um Arduino para processar o sinal de oscilação em vez de compensar a oscilação com um segundo circuito de tanque. O Arduino irá armazenar a frequência fixa e comparar continuamente a frequência de entrada do circuito do detector com a frequência armazenada (mais no programa Arduino abaixo).

Materiais para o seu Detector de Metais de Bricolagem

Para este projecto, foi escolhido um brinquedo herbicida para alojar todos os componentes. Ele inclui as seguintes características:

  • um botão de gatilho, que nós vamos usar novamente para acionar o alto-falante
  • um botão lateral, que nós vamos usar para definir a freqüência fixa
  • um compartimento de bateria (3xAA baterias) com um interruptor ON/OFF
  • um alto-falante, que tocaremos o tom através de
  • um motor com LEDs ligados, que será activado quando a diferença de frequência exceder um determinado limiar
  • uma cabeça circular onde encaixaremos uma bobina de fio para o indutor do circuito do tanque

Também adicionaremos um potenciómetro (prata) para tornar a sensibilidade das mudanças de tom ajustável.

A bobina do indutor é feita de aproximadamente 50 envoltórios de fio de 26 AWG em torno de um carretel de 5,5 polegadas de diâmetro.

Dentro da caixa, vamos substituir a placa de circuito original pelo nosso próprio circuito e ligar todos os periféricos ao circuito com cabeçalhos de pinos.

Esquemas do circuito de detecção de metais

Utilizei um Arduino UNO para programar um DIP ATMega328. Retirei então o ATMega328 da placa de desenvolvimento e incorporei-o a uma placa de desenvolvimento juntamente com o resto do circuito.

O oscilador Colpitts, na parte inferior esquerda do diagrama, alimenta a oscilação no contador 1 (pino T1) do chip (marcado como pino digital 5 no Arduino UNO), onde conta constantemente a frequência de oscilação.

No nível superior do diagrama, uma fonte de alimentação de 4.5V (baterias 3xAA, com condensadores bypass) é utilizada para alimentar o ATmega328, oscilador, altifalante e motor (com LEDs).

Para manter a corrente dos pinos digitais do microcontrolador num nível seguro (40 mA por pino no máximo para o ATmega328), um transistor NPN (C2878) é utilizado para accionar o altifalante, e um MOSFET de canal N (SUB45N03) para accionar o motor.

Bambos os interruptores de disparo e rearme (define a frequência fixa) são ligados a pinos digitais usando a configuração interna de pull-up. Pequenos condensadores são adicionados em paralelo para debounce os interruptores.

O potenciômetro de sensibilidade é configurado como um divisor de tensão, e a divisão é lida usando um pino analógico.

Código Walkthrough

O código fonte completo para este projeto pode ser encontrado aqui:

  • https://github.com/evankale/ArduinoMetalDetector

Below é um passo-a-passo detalhado do código.

Função de configuração

Para manter o controle da freqüência de oscilação do detector através do contador de temporizador 1, primeiro precisamos configurar os registros do temporizador/controlador (TCCR). Estes TCCRs são acessados através dos três números inteiros: TTCR1A, TTCR1B, e TTCR1C.

TCCR1A = 0b00000000;TCCR1B = 0b00000111;

Termos de ajustar a geração da forma de onda para o modo normal, ajustando as bandeiras WGM de TCCR1A e TCCR1B para 0, e ajustar o modo de seleção da velocidade do relógio para a fonte do relógio externo, ajustando as bandeiras CS de TCCR1B para o modo 3 (relógio externo na borda ascendente). Nesta configuração, o registro OCR1A irá diminuir em 1 cada vez que uma borda ascendente for detectada a partir da oscilação.

TIMSK1 |= (1 << OCIE1A);

Próximo precisamos habilitar a interrupção do temporizador/contador A, ajustando o flag OCIE1A no registro TIMSK1. Isto permitirá que a função de interrupção SINAL(TIMER1_COMPA_vect) seja chamada sempre que o registro OCR1A atingir 0.

OCR1A = 1;

Agora inicialize o OCR1A para 1 para que a função de interrupção seja chamada assim que a primeira borda ascendente for detectada.

Interrupt Function

Esta é a função SINAL(TIMER1_COMPA_vect). É chamada quando o registro OCR1A chega a 0. Nesta função, queremos manter o registro do número de microssegundos decorridos desde a última vez que a função foi chamada. Este delta de tempo é armazenado como signalTimeDelta.

storedTimeDelta é o delta de tempo de “frequência fixa” com que o signalTimeDelta é comparado no laço principal. storedTimeDelta é ajustado para signalTimeDelta quando storedTimeDelta é zerado (no bootup e quando o switch de reset é pressionado).

OCR1A += CYCLES_PER_SIGNAL;

Após realizar operações de interrupção, o OCR1A precisa ser zerado incrementando-o com nossa constante predefinida, CYCLES_PER_SIGNAL (número de ciclos antes de ocorrer a próxima interrupção).

Loop Function

Na função loop, verificamos se o gatilho está pressionado. Em caso afirmativo, então leia o valor analógico do potenciômetro de sensibilidade e interpole linearmente o valor analógico (0 a 1023) para uma escala mais fácil de usar (0,5 a 10,0).

int storedTimeDeltaDifference = (storedTimeDelta - signalTimeDelta) * sensitivity;

A diferença entre a freqüência fixa (armazenadaTimeDelta) e a freqüência medida (signalTimeDelta) é calculada e multiplicada pelo valor de sensibilidade.

tone(SPEAKER_PIN, BASE_TONE_FREQUENCY + storedTimeDeltaDifference);

Este valor é então somado com uma frequência de tons base audível, BASE_TONE_FREQUENCY, e reproduzido o altifalante utilizando a função Arduino tone().

Se a diferença exceder o limiar definido pelo SPINNER_THRESHOLD, então o motor é activado.

Se o disparo for liberado, então o tom do alto-falante é parado (chamando a função noTone()) e o motor é desativado.

Se o botão reset for pressionado, ele zeraráTimeDelta, permitindo que a próxima chamada de interrupção defina um novo valor.

Como Funciona o nosso Detector de Metais à base de Arduino-Based Metal Detector?

Com a configuração de sensibilidade mais baixa, o detector de metais pode pegar itens grandes como latas de refrigerante, telemóveis e ferramentas de ferro a poucos centímetros de distância da bobina. Na maior sensibilidade, itens menores, como anéis de aço, parafusos e moedas dentro da mesma proximidade também podem ser detectados. Veja o vídeo no topo do artigo para uma demonstração!

Para ampliar o alcance do detector, podemos aumentar a área do campo magnético criado pelo indutor. Isto pode ser conseguido aumentando o fluxo de corrente através do indutor (aumentando a entrada de tensão para o oscilador, permitindo um maior ganho no amplificador), ou aumentando o número de enrolamentos de fios na bobina do indutor.

Com um detector de metais à base de Arduino, podemos fazer outras coisas interessantes que não podem ser feitas com os detectores de metais BFO tradicionais. Fique atento a futuros projectos sobre como podemos tirar partido deste mecanismo de detecção de metais para outros fins!

ArduinoMetalDetector-master.zip

Experimente este projecto por si mesmo! Obtenha o BOM.

Deixe uma resposta

O seu endereço de email não será publicado.