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.