O Metal Detector é um dispositivo de segurança usado para detectar metais que podem ser prejudiciais, em vários locais como aeroportos, shoppings, cinemas etc. detector de metais simples sem um microcontrolador, agora estamos construindo o Detector de metais usando Arduino. Neste projeto, vamos usar uma bobina e um capacitor que serão responsáveis pela detecção de metais. Aqui usamos um Arduino Nano para construir isso projeto detector de metais. Este é um projeto muito interessante para todos os amantes de eletrônicos. Onde quer que esse detector detecte qualquer metal próximo a ele, o alarme começa a emitir um bipe muito rapidamente.
Componentes Necessários:
- Arduino (qualquer)
- Bobina
- 10nF capacitor
- Buzzer
- O resistor de 1k
- Resistor de 330 ohm
- LED
- 1N4148 diode
- ProtoBoard or PCB
- Fio de ligação em ponte
- 9v Bateria
Conceito de trabalho:
Sempre que alguma corrente passa pela bobina, ela gera um campo magnético ao seu redor. E a mudança no campo magnético gera um campo elétrico. Agora, de acordo com o Fisico Faraday' lei, por causa desse campo elétrico, uma tensão se desenvolve através da bobina que se opõe à mudança no campo magnético e é assim que a bobina desenvolve a Indutância, significa que a tensão gerada se opõe ao aumento da corrente. A unidade de indutância é Henry e a fórmula para medir a indutância é:
L = (μο * N2 * A) / l Onde, L- Indutância em Henries μο- Permeabilidade, sua 4π*10-7 para o ar N- Número de voltas A- Área interna do núcleo (πr2) em m2 l- Comprimento da bobina em metros
Quando qualquer metal se aproxima da bobina, a bobina muda sua indutância. Essa mudança na indutância depende do tipo de metal. isto's diminui para metal não magnético e aumenta para materiais ferromagnéticos, como o ferro.
Dependendo do núcleo da bobina, o valor da indutância muda drasticamente. Na figura abaixo você pode ver os indutores tubulares, em esses indutores, não haverá núcleo sólido. São basicamente bobinas deixadas no ar. O meio de fluxo do campo magnético gerado pelo indutor é nada ou ar. Esses indutores têm indutâncias de muito menos valor.
Esses indutores são utilizados quando há necessidade de valores de poucos microenidos. Para valores maiores que alguns milliHenry, estes não são adequados. Na figura abaixo você pode ver um indutor com núcleo de ferrite. O indutor de núcleo de ferrite tem um valor de indutância muito grande.
Lembre-se que a bobina enrolada aqui é um tubo de ar, então quando uma peça de metal é levada para perto da bobina, a peça de metal atua como um núcleo para o indutor de núcleo de ar. Por este metal atuando como um núcleo, a indutância do bobina muda ou aumenta consideravelmente. Com este aumento súbito na indutância da bobina, a reatância total ou impedância do circuito LC muda consideravelmente em comparação com a peça de metal.
Então aqui neste Arduino Projeto Detector de Metal, temos que encontrar indutância da bobina para detectar metais. Então, para fazer isso, usamos o circuito LR (Resistor-Inductor Circuit) que já mencionamos. Aqui neste circuito, usamos uma bobina com cerca de 20 voltas ou enrolamento com um diâmetro de 10cm. Nós usamos um rolo de fita vazia e enrole o fio em volta para fazer a bobina.
Diagrama de circuito:
Nós usamos um Arduino Nano para controlar todo este Projeto Detector de Metal. Um LED e Buzzer são usados como indicador de detecção de metal. Uma bobina e um capacitor são usados para detecção de metais. Um diodo de sinal também é usado para reduzir a tensão. E um resistor para limitar a corrente ao pino do Arduino.
Explicação de trabalho:
Trabalhando desta Arduino Metal Detector é um pouco complicado. Aqui nós fornecemos a onda ou pulso de bloco, gerado pelo Arduino, para o filtro de alta freqüência LR. Devido a isso, pequenos picos serão gerados pela bobina em todas as transições. O comprimento de pulso dos picos gerados é proporcional à indutância da bobina. Assim, com a ajuda desses pulsos do tipo Spike, podemos medir a indutância da bobina. Mas aqui é difícil medir a indutância precisamente com esses picos, porque esses picos são de curta duração (aprox. 0,5 microssegundos) e isso é muito difícil de ser medido pelo Arduino.
Então, ao invés disso, usamos um capacitor que é carregado pelo pulso ou pico ascendente. E precisou de alguns pulsos para carregar o capacitor até o ponto em que sua voltagem pode ser lida pelo pino analógico Arduino A5. Então o Arduino lê a voltagem deste capacitor usando o ADC. Depois de ler a voltagem, o capacitor foi descarregado rapidamente capPin fixar como saída e defini-lo para baixo. Todo esse processo leva cerca de 200 microssegundos para ser concluído. Para melhor resultado, repetimos a medição e medimos os resultados. que’s como podemos medir a indutância aproximada da bobina. Depois de obter o resultado, transferimos os resultados para o LED e a campainha para detectar a presença de metal. Verifica a Código completo dada no final deste artigo para entender o trabalho.
Código completo do Arduino é dado no final deste artigo. Na parte de programação deste projeto, usamos dois pinos Arduino, um para gerar ondas de bloco a serem alimentadas em bobina e um segundo pino analógico para ler a tensão do capacitor. Além destes dois pinos, utilizamos mais dois pinos Arduino para conectar o LED e a campainha.
Você pode verificar o código completo do detector de metais Arduino abaixo. Você pode ver que, sempre que detecta algum metal, o LED e a campainha começam a piscar muito rapidamente.
Código:
#define capPin A5
#define buz 9
#define pulsePin A4
#define buz 9
#define pulsePin A4
#define led 10
long sumExpect=0; //soma total de 64 somas
long ignor=0; //número de somas ignoradas
long diff=0; //diferença entre sum e avgsum
long pTime=0;
long buzPeriod=0;
long ignor=0; //número de somas ignoradas
long diff=0; //diferença entre sum e avgsum
long pTime=0;
long buzPeriod=0;
void setup()
{
Serial.begin(9600);
pinMode(pulsePin, OUTPUT);
digitalWrite(pulsePin, LOW);
pinMode(capPin, INPUT);
pinMode(buz, OUTPUT);
digitalWrite(buz, LOW);
pinMode(led, OUTPUT);
}
{
Serial.begin(9600);
pinMode(pulsePin, OUTPUT);
digitalWrite(pulsePin, LOW);
pinMode(capPin, INPUT);
pinMode(buz, OUTPUT);
digitalWrite(buz, LOW);
pinMode(led, OUTPUT);
}
void loop()
{
int minval=1023;
int maxval=0;
long unsigned int sum=0;
for (int i=0; i<256; i++)
{
//reset the capacitor
pinMode(capPin,OUTPUT);
digitalWrite(capPin,LOW);
delayMicroseconds(20);
pinMode(capPin,INPUT);
applyPulses();
//read the charge of capacitor
int val = analogRead(capPin); //takes 13x8=104 microseconds
minval = min(val,minval);
maxval = max(val,maxval);
sum+=val;
long unsigned int cTime=millis();
char buzState=0;
if (cTime<pTime+10)
{
if (diff>0)
buzState=1;
else if(diff<0)
buzState=2;
}
if (cTime>pTime+buzPeriod)
{
if (diff>0)
buzState=1;
else if (diff<0)
buzState=2;
pTime=cTime;
}
if (buzPeriod>300)
buzState=0;
{
int minval=1023;
int maxval=0;
long unsigned int sum=0;
for (int i=0; i<256; i++)
{
//reset the capacitor
pinMode(capPin,OUTPUT);
digitalWrite(capPin,LOW);
delayMicroseconds(20);
pinMode(capPin,INPUT);
applyPulses();
//read the charge of capacitor
int val = analogRead(capPin); //takes 13x8=104 microseconds
minval = min(val,minval);
maxval = max(val,maxval);
sum+=val;
long unsigned int cTime=millis();
char buzState=0;
if (cTime<pTime+10)
{
if (diff>0)
buzState=1;
else if(diff<0)
buzState=2;
}
if (cTime>pTime+buzPeriod)
{
if (diff>0)
buzState=1;
else if (diff<0)
buzState=2;
pTime=cTime;
}
if (buzPeriod>300)
buzState=0;
if (buzState==0)
{
digitalWrite(led, LOW);
noTone(buz);
}
else if (buzState==1)
{
tone(buz,2000);
digitalWrite(led, HIGH);
}
else if (buzState==2)
{
tone(buz,500);
digitalWrite(led, HIGH);
}
}
{
digitalWrite(led, LOW);
noTone(buz);
}
else if (buzState==1)
{
tone(buz,2000);
digitalWrite(led, HIGH);
}
else if (buzState==2)
{
tone(buz,500);
digitalWrite(led, HIGH);
}
}
//subtrair valor mínimo e máximo para remover picos
sum-=minval;
sum-=maxval;
if (sumExpect==0)
sumExpect=sum<<6; //set sumExpect to expected value
long int avgsum=(sumExpect+32)>>6;
diff=sum-avgsum;
if (abs(diff)<avgsum>>10)
{
sumExpect=sumExpect+sum-avgsum;
ignor=0;
}
else
ignor++;
if (ignor>64)
{
sumExpect=sum<<6;
ignor=0;
}
if (diff==0)
buzPeriod=1000000;
else
buzPeriod=avgsum/(2*abs(diff));
}
sum-=minval;
sum-=maxval;
if (sumExpect==0)
sumExpect=sum<<6; //set sumExpect to expected value
long int avgsum=(sumExpect+32)>>6;
diff=sum-avgsum;
if (abs(diff)<avgsum>>10)
{
sumExpect=sumExpect+sum-avgsum;
ignor=0;
}
else
ignor++;
if (ignor>64)
{
sumExpect=sum<<6;
ignor=0;
}
if (diff==0)
buzPeriod=1000000;
else
buzPeriod=avgsum/(2*abs(diff));
}
void applyPulses()
{
for (int i=0;i<3;i++)
{
digitalWrite(pulsePin,HIGH); //take 3.5 uS
delayMicroseconds(3);
digitalWrite(pulsePin,LOW); //take 3.5 uS
delayMicroseconds(3);
}
}
{
for (int i=0;i<3;i++)
{
digitalWrite(pulsePin,HIGH); //take 3.5 uS
delayMicroseconds(3);
digitalWrite(pulsePin,LOW); //take 3.5 uS
delayMicroseconds(3);
}
}
Nenhum comentário:
Postar um comentário
Peço que use somente caixa baixa, não todo escrito em letra grande.