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).

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.





