» Eletrônicos » Detectores de metais »Detector de metais no Arduino Pro Mini. Processamento das profundezas do Kolokolov-Shchedrin de acordo com o princípio de "transmissão"

Detector de metais no Arduino Pro Mini. Processamento das profundezas do Kolokolov-Shchedrin de acordo com o princípio de "transmissão"


Reciclagem do sistema de águas profundas Kolokolov-Shchedrin. Diferenças do esquema original:
1. NÃO há oscilador de cristal no chip k561 .. e no quartzo 32 kHz. O sinal de 32 kHz fornece o Arduino Pro Mini.
2. Os circuitos de notificação sonora em vários microcircuitos da série 561 também não estão presentes, o Arduino também está dando voz ao alvo (e devo dizer, é uma voz excelente, em comparação com o esquema do autor).
3. Alimentado por tensão unipolar 12v (bateria de chumbo-ácido).
4. Ajuste a sensibilidade com os botões. Com a escala ADC de 0 a 1023, o limite de resposta é ajustável de 1 a 38 (o valor pode ser facilmente alterado no esboço).


Detector de metais no Arduino Pro Mini. Processamento das profundezas do Kolokolov-Shchedrin de acordo com o princípio de


Mais importante, eu queria mostrar neste artigo que é possível montar MDs no Arduino que não sejam inferiores ao original em sensibilidade (isso funcionou, porque os originais do circuito original foram coletados na ordem de 10 peças, para que haja material para comparação). Circuito original:


Quando comecei a trabalhar com o Arduino, fiquei tão inspirado que pensei em encontrar e montar qualquer circuito do detector de metais da Internet no Arduino que pudesse encontrar facilmente nos espaços abertos de um grande depósito de lixo. Em princípio, ficou assim, mas os circuitos eram baseados em um contador de frequência, o que não permitia alcançar uma faixa realmente boa. Alguns brinquedos infantis e um teste da caneta + tentam ganhar dinheiro para iniciantes. O original deste MD é uma verdadeira força de trabalho que permite encontrar objetos grandes a uma distância de 2 m (consulte o livro Kolokolov-Shchedrin no Google). Não há estatísticas sobre o md transformado. Espero que ela apareça com o apoio dos fãs do MD e do Arduino. O esquema funcionou com o Arduino Uno e o Arduino Pro Mini.

Mais adiante, é apresentado o processo de nascimento desse MD no site do ferro de solda, que durou mais de um ano e levou o autor a estudar a programação em duelo. Talvez o esboço pareça miserável para alguém - eu aceitarei suas FIXAS de bom grado.




No momento, há um esboço que permite ajustar a barreira da sensibilidade (o pino 7 dobra +1 à barreira, o pino 8 -1 à barreira). .
Arduino sobre mini 5v, 16MHz, ATmega168 e a tela os usavam. Ao lado da balança está o adaptador Mini SD


Como já foi dito, 1602 custa 86 rublos, ProMini - 82 rublos. Se desejar, geralmente você pode pegar um ATmega168 nu, desenvolver um quadro para ele e preencher o desenho diretamente nele.E assim, por exemplo, instalei o pai e a mãe na placa MD usando o conector. A foto mostra o plugue de 6 pinos do Arduino, através do qual os esboços foram derramados diretamente no quadro.

Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

// Entrada analógica A3 para voltímetro
// entrada analógica A4 para sinal
// 6- conclusão do zook
// 9 - frequência de saída 31200 Hz
#include
LCD de cristal líquido (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// ícone da bateria
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int contados = 0; // variável para armazenar o valor do nível de escala
 int voltag = 0; // variável para armazenar o valor da tensão
 int noll = 0; // variável para armazenar o valor do ponto médio
   #define NUM_SAMPLES 10 // 10 amostras analógicas para leitura em 1 segundo
   int soma = 0; // soma das amostras colhidas
   int sun = 0; // igual, mas dividido por 10
   char não assinado sample_count = 0; // número da amostra atual com
   tensão de flutuação = 0,0; // tensão calculada
   const int button1 = 7; // botão barreira mais
   const int button2 = 8; // botão menos barreira
   int i = 5; // barreira
   
configuração nula () {
     lcd.begin (16, 2); // inicialização de exibição
     lcd.setCursor (1, 0);
     lcd.setCursor (10, 1);
     lcd.print ("Rx-Tx");
     atraso (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 2;
     TCCR1B = TCCR1B & amp; 0xe0 0x09;
     analogWrite (9, 126); // no pino 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
loop vazio () {
     int buttonState1 = ALTO; // O estado do botão é um
     int buttonState2 = ALTO; // Estado de dois botões
   sample_count = 0; // redefine o contorno do número de adições
   soma = 0; // redefine a soma de 10 adições
   while (sample_count & lt; NUM_SAMPLES) {
   soma + = leitura analógica (A4); // a próxima medida é adicionada à soma
   sample_count ++; // a unidade é adicionada ao número de medição
   sun = sum / 10;} // encontre o valor médio de 10 medições
   
   noll = analogRead (A3) / 2; // potência do ponto médio
   tensão de flutuação = mapa (leitura analógica (A3), 0,1023,0,1500) / 100,0;
                                        // Voltímetro construído na entrada A3
   if (sun & gt; = noll + i) {countleds = map (sol, noll + i, noll * 2 - 250, 9, 14);
                                        // se o resultado recebido estiver no 9º ao 15º segmento da escala
    tom (6, contados * 100);}
   if (sun & lt; = noll - i) {countleds = map (sun, 116, noll - i, 0, 7);
                                        // se o resultado resultante for de 0 a 7 segmento da escala
    tom (6, contados * 50); }
     if (sun & noll & amp; & sun & gt; = noll - (i-1)) {countleds = 7;
    noTone (6); } // ilhota do ZERO virtual (segmento 7)
     if (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // ilha da escala ZERO virtual (8 segmentos)

   
    {lcd.setCursor (contados, 0); // define o cursor para a coluna countleds, linha 0
    lcd.print ("\ xff"); // ícone preenchido
    lcd.setCursor (0, 1); // move para 2 linhas, coluna-0
    lcd.print (char (1)); // Indicação do ícone da bateria
    lcd.setCursor (1, 1); // passa para a indicação de tensão
    lcd.print (voltagem); // tensão
    lcd.setCursor (7,0); // 8a coluna 1ª linha
    if (sun & lt; noll) {lcd.print ("{");} // impressão
    lcd.setCursor (8, 0); // 9a coluna 1ª linha
    if (sun & gt; noll) {lcd.print ("}");} // print
    lcd.setCursor (7, 1);
    lcd.print ("B =");
    lcd.setCursor (9, 1); // 11 coluna 2ª linha
    lcd.print (i); // barreira
    lcd.setCursor (13, 1); // 13a coluna 2ª linha
    lcd.print (sol); // imprime o valor médio do valor ADC
    atraso (100); // espera
    
  buttonState1 = leitura digital (botão1); // Status do botão 1 de leitura
  buttonState2 = leitura digital (botão2); // Estado do botão 2 de leitura
  if (buttonState1 == LOW) {i = i + 1; atraso (50);}
                                        // Quando o botão é pressionado, a barreira cresce 1. Atraso 50
  if (buttonState2 == LOW) {i = i - 1; atraso (50);}
                                        // Quando o botão é pressionado, a barreira diminui em 1. Atraso 50
  if (i & lt; 1) {i = 1;} // Limite inferior da barreira
  if (i & gt; 38) {i = 38;} // O limite superior da barreira
 
 lcd.clear ();
    }
}

Não usei o carro. Os dois últimos elementos do TL074 ficaram ociosos. Mas no circuito e na placa estão. Você pode levá-los à condição de trabalho um pouco mais tarde. Acredito que alcancei meu objetivo. A unidade de exibição funciona maravilhosamente. Tudo o resto depende do MD.
9.8
10
10

Adicionar um comentário

    • sorrirsorrisosxaxaoknão seiyahoonea
      chefearranhartolosimsim simagressivosegredo
      desculpedançardance2dance3perdãoajudabebidas
      pararamigosbomgoodgoodapitodesmaiarlíngua
      fumaçapalmascraydeclararirônicodon-t_mentionbaixar
      calorirritantelaugh1mdareuniãomoskingnegativo
      not_ipipocapunirlerassustarsustospesquisar
      provocarthank_youistoto_clueumnikagudoconcordar
      malbeeeblack_eyeblum3corargabar-setédio
      censuradobrincadeirasecret2ameaçarvitóriayusun_bespectacled
      sacudirrespektlolpreviubem vindoKrutoyya_za
      ya_dobryiajudantene_huliganne_othodifludproibirfechar
24 comentário
O autor
Obrigado puteec FU! Eu solicitei a partir da segunda vez. Eu costurei o Arduino uno. O problema desapareceu após a atualização do carregador de inicialização. Agora interessa como configurar ainda mais.
puteec fu
Qualquer Arduino é adequado para atmega168, atmega328. Sobre nano isso com um conector USB, se não se enganar. Costure no Arduino ide a partir dos exemplos do esboço Blink (LEDs piscando no pino 13, o LED está instalado na placa). Verifique se você está usando a porta correta, se a placa está selecionada corretamente, se o processador na placa está selecionado corretamente, se a frequência de quartzo na placa está selecionada corretamente e se o método de firmware (μ2) está selecionado corretamente.
Erro não encontrado.
Crie um novo arquivo no Arduino, copie o esboço daqui para um novo e limpo, e ele funcionará.Mas primeiro, faça o LED na placa Arduino piscar com um exemplo piscante padrão. Então siga em frente.
Comprei o Arduino p nano apenas no processador Atmega328. Analisei vários vídeos e fóruns ... eles disseram que deveria aparecer ... mas então a chatice NÃO está piscando ... dá #include espera "FILENAME" ou . Alguém já encontrou isso?
O autor
Um esboço funciona com este quadro. O que exatamente é o plugue formado?
Se você der o último rascunho, todos os detalhes relacionados ao D3.3 e D3.4, bem como eles próprios, não poderão ser instalados. No ferro de solda, há um redesenho sobre este tópico
Anjey888
Olá. Este tópico está muito interessado. Eu quero montar o dispositivo. Fiz uma placa de ferro de solda em movimento ... e depois fiquei presa. Uma vez que existe muita discordância entre o conselho e o circuito. Começou a comparar seu quadro ... essa é uma grande diferença. Mas confuso com o chicote de fios no Arduino.
Peço a ajuda de pessoas conhecedoras.
O autor
O mesmo que para outros metais. A profundidade de detecção depende da área do alvo. Quanto mais, mais profundo.
Convidado Eugene
Quais são os limites para detectar objetos? Ouro, alumínio, cobre.
Guest Alexander
O que fazer agora, porque ainda existe uma barreira Schottky?
O autor
Bem aqui! Até o menor valor está fora de questão! Obrigado pelo esclarecimento.
Citação: puteec_80
E as pessoas entenderão mais rápida e intuitivamente do que estou falando.
Você pode continuar nesse erro. ((Pessoas com conhecimentos técnicos terão uma pequena perda.
BARREIRA, marido.
1. Um obstáculo (um tipo de parede, uma trave) atrapalha o caminho.
2. Cerca, esgrima.

LIMIAR, limiar, marido.
1. Na ciência e na tecnologia, o limiar é chamado de menor valor, o grau de manifestação de alguma coisa.
O limite de sensibilidade do dispositivo. | Limiar de audição. | Limiar de dor. | O sensor é acionado quando o limite de temperatura definido é excedido.
sorrir
O autor
Vamos ficar com o nosso. Escreverei "aumentando a barreira em uma unidade" e "a sensibilidade do receptor foi de 5 μV". E você escreve "Aumentando o limiar de operação em uma unidade" e "limiar de sensibilidade do receptor". Além disso, as pessoas entenderão de maneira mais rápida e intuitiva do que estou falando.
E eu explico neste exemplo. Não há limite estritamente falando, porque não há escala de referência clara. Existe algum tipo de banda flutuante de recorte a partir de um sinal flutuante. Então, parece-me que a definição de barreira é muito mais adequada para essa faixa "flutuante" do que para um limiar.
Argumento geralmente inútil e estúpido. Você tem alguma pergunta?
Citação: puteec_80
Quais são os limiares inferior e superior?
Talvez os significados das palavras traduzidas não correspondam ou levemente não correspondam. Mas eles descrevem perfeitamente o processo e gradualmente entram em gírias.
Exatamente qual é o limite. O limite de resposta está no seu caso. Por favor, explique como a “barreira” descreve o processo.
Quanto à junção de gírias - agora existem muitos tipos de mal-entendidos lá. ((
O autor
Nesse caso, eu ainda tendem a usar a palavra "barreira", porque é a barreira que é definida no texto do programa, mas sem entrar em seu alcance, o sinal é percebido pelo microcontrolador como útil. E é a barreira porque Ele tem dois valores - os limites superior e inferior do run-in, ou seja, A operação ocorre acima da borda "superior" e abaixo da borda "inferior" da barreira na escala ADC. No entanto, você sabe melhor. Quais são os limiares inferior e superior?
Talvez os significados das palavras traduzidas não correspondam ou levemente não correspondam. Mas eles descrevem perfeitamente o processo e gradualmente entram em gírias.
A propósito. Sensibilidade e barreira são coisas completamente diferentes.
SimEles se cruzam. Mas não mais.
Citação: puteec_80
No MD estrangeiro, o menu diz "Barier".

Posso te surpreender, mas muitas palavras em inglês que se parecem com as nossas têm um significado diferente, às vezes próximas, às vezes não. Pesquise as palavras "amigos tradutores falsos".
Agora essencialmente. Em russo técnico documentação não simplesmente não existe essa frase "barreira da sensibilidade" - e é isso! Existe um "limiar de sensibilidade"; em alguns casos, pode-se dizer um "limite de sensibilidade", mas não uma "barreira de sensibilidade". Talvez em alguns outros ramos do conhecimento ele seja usado, mas não na eletrônica.
O autor
Bem, isso significa que todos os engenheiros estrangeiros estão pulando sobre uma vara na estrada. No MD estrangeiro, o cardápio diz "Barier", camarada Ivan, você está caindo nos meus olhos com tanta insistência! Onde estão seus comentários sobre o mérito? Depois disso, você tem que bater palmas na testa? Você costumava me estragar muitas vezes punir
A diferença é significativa: o limiar é um termo técnico, a barreira é uma "vara do outro lado da estrada".
O autor
Talvez. Mas não vejo a diferença.
Talvez não seja uma "barreira", mas um limiar? ;)
O autor
O diagrama não mostra os botões de ajuste da barreira. Eles estão conectados aos pinos 7 e 8 do Arduino. Cada um puxado para cima com uma resistência de 10k ao mais, fecha quando você pressiona a massa.
O autor
loop vazio () {
int buttonState1 = ALTO; // O estado do botão é um
int buttonState2 = ALTO; // Estado de dois botões

int pot = analogRead (A4); // filtro para troca rápida de sinal
sinal = sinal * (1-K) + pote * K;

noll = noll * (1-L) + sinal * L; // filtro de sinal de longo prazo
// Voltímetro construído na entrada A3
tensão de flutuação = mapa (leitura analógica (A3), 0,1023,0,1500) / 100,0;

if (sign> = noll + i) {countleds = map (sign, noll + i, 1023, 9, 14);
// se o resultado recebido estiver no 9º ao 15º segmento da escala
tom (6, contados * 100);}
if (sinal <= noll - i) {countleds = map (sinal, 0, noll - i, 0, 7);
// se o resultado resultante for de 0 a 7 segmento da escala
tom (6, contados * 50); }
if (assine = noll - (i-1)) {countleds = 7;
noTone (6); } // ilhota do ZERO virtual (segmento 7)
if (assinar> noll && assinar <= noll + (i-1)) {countleds = 8;
noTone (6); } // ilha da escala ZERO virtual (8 segmentos)


{lcd.setCursor (contados, 0); // define o cursor para a coluna countleds, linha 0
lcd.print ("\ xff"); // ícone preenchido
lcd.setCursor (0, 1); // move para 2 linhas, coluna-0
lcd.print (char (1)); // Indicação do ícone da bateria
lcd.setCursor (1, 1); // passa para a indicação de tensão
lcd.print (voltagem); // tensão
lcd.setCursor (7,0); // 8a coluna 1ª linha
if (sign lcd.setCursor (8, 0); // 9a coluna 1ª linha
if (sign> noll) {lcd.print ("}");} // imprime
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 coluna 2ª linha
lcd.print (i); // barreira
lcd.setCursor (13, 1); // 13a coluna 2ª linha
lcd.print (sinal); // imprime o valor médio do valor ADC
atraso (10); // espera

buttonState1 = leitura digital (botão1); // Status do botão 1 de leitura
buttonState2 = leitura digital (botão2); // Estado do botão 2 de leitura
if (buttonState1 == LOW) {i = i + 1; atraso (50);}
// Quando o botão é pressionado, a barreira cresce 1. Atraso 50
if (buttonState2 == LOW) {i = i - 1; atraso (50);}
// Quando o botão é pressionado, a barreira diminui em 1. Atraso 50
if (i <1) {i = 1;} // Limite inferior da barreira
if (i> 38) {i = 38;} // O limite superior da barreira

lcd.clear ();
}
}
O autor
Novo desenho. O algoritmo para detectar o sinal útil foi alterado. O esquema é simplificado, não há elementos D3.4 e D3.3 com todas as suas ligações. Se você pegar seu próprio selo, todos esses detalhes simplesmente não poderão ser instalados. Mais sensibilidade. Sem falsos positivos.
Esboço:

// Entrada analógica A3 para um voltímetro, configurável pelo potenciômetro R32.
// Entrada analógica A4 para o sinal, definida com o sinal mínimo em D3.2
// resistor R40 para leituras de ADC de cerca de 510.
// 6- conclusão do zook
// 9 - frequência de saída 31200 Hz
#include
LCD de cristal líquido (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// ícone da bateria
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int contados = 0; // variável para armazenar o valor do nível de escala

tensão de flutuação = 0,0; // tensão calculada
const int button1 = 7; // botão barreira mais
const int button2 = 8; // botão menos barreira
int i = 5; // barreira
const float K = 0,1; // mudanças rápidas de rastreamento de filtro (coeficiente. quanto menor, mais forte)
const float L = 0,07; // alterações de rastreamento de filtro por um longo tempo
sinal de flutuação = 0; // filtro
float noll = 0;

configuração nula () {
lcd.begin (16, 2); // inicialização de exibição
lcd.createChar (1, z1);
pinMode (9, SAÍDA);
pinMode (6, SAÍDA);
TCCR1A = TCCR1A e 0xe0 | 2;
TCCR1B = TCCR1B e 0xe0 | 0x09;
analogWrite (9, 126); // no pino 10 PWM = 50% f = 31200Hz
// de fato, para PWM = 50%, é necessário definir pelo menos 220 preenchimentos, de acordo com o osciloscópio
// o duin não aguenta. Isso não é crítico.
}
O autor
Aqueles que assistirão o esboço. Os sinais> = e <= foram substituídos por combinações estranhas de & gt e & lt. Por que eu não sei. Quando a depuração era normal.

Aconselhamos que você leia:

Entregue-o para o smartphone ...