Reciclaje del esquema de aguas profundas Kolokolov-Shchedrin Diferencias con respecto al esquema original:
1. NO hay oscilador de cristal en el chip k561 .. y cuarzo de 32 kHz. La señal de 32 kHz le da al Arduino Pro Mini.
2. Los circuitos de notificación de sonido en varios microcircuitos de la serie 561 también están ausentes: Arduino también expresa los objetivos (y debo decir, excelentes voces, en comparación con el circuito del autor).
3. Alimentado por voltaje unipolar 12v (batería de plomo-ácido).
4. Ajuste la sensibilidad con los botones. Con la escala ADC de 0 a 1023, el umbral de respuesta es ajustable de 1 a 38 (el valor se puede cambiar fácilmente en el boceto).
Lo que es más importante, quería mostrar en este artículo que es posible ensamblar MD en Arduino no inferiores al original en sensibilidad (esto funcionó, porque los originales del circuito original se recolectaron en el orden de 10 piezas, por lo que hay material para comparar). Circuito original:
Cuando comencé a trabajar con Arduino, estaba tan entusiasmado que pensé que podría encontrar y ensamblar cualquier circuito de Detector de metales de Internet en Arduino que pudiera encontrar fácilmente en el vasto basurero. En principio, resultó de esa manera, pero los circuitos se basaron en un contador de frecuencia, que no permitió alcanzar un rango realmente bueno. Algunos juguetes para niños y una prueba de la pluma + intenta ganar dinero con los principiantes. El original de este MD es un verdadero caballo de batalla que le permite encontrar objetos grandes a una distancia de 2 m (consulte el libro Kolokolov-Shchedrin en Google). No hay estadísticas sobre el md transformado. Espero que aparezca con el apoyo de los fanáticos de MD y Arduino. El esquema funcionó con Arduino Uno y Arduino Pro Mini.
Más adelante en el enlace se presenta el proceso de nacimiento de este MD en el sitio web del Soldador, que duró más de un año y llevó al autor a estudiar la programación duin. Tal vez el boceto le parezca miserable a alguien; con mucho gusto aceptaré sus ARREGLOS.
Por el momento, hay un boceto que le permite ajustar la barrera de sensibilidad (pin 7 douins +1 a la barrera, pin 8 -1 a la barrera). .
Arduino sobre mini 5v, 16MHz, ATmega168 y la pantalla los utilizó. Al lado de la báscula está el adaptador Mini SD
Como ya se dijo 1602 cuesta 86 rublos, ProMini - 82 rublos. Si lo desea, incluso puede tomar un ATmega168 desnudo, desarrollar un tablero para él y llenar el boceto directamente en él.Y así, por ejemplo, instalé mamá-papá en la placa MD usando el conector. La foto muestra el enchufe de 6 pines de Arduino, a través del cual se vertieron bocetos directamente en el tablero.
Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino
// Entrada analógica A3 para voltímetro
// Entrada analógica A4 para señal
// 6- conclusión del zook
// 9 - frecuencia de salida 31200 Hz
#include
LCD de cristal líquido (12, 11, 5, 4, 3, 2);
byte z1 [8] = {// icono de batería
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int contados = 0; // variable para almacenar el valor del nivel de escala
int voltag = 0; // variable para almacenar el valor del voltaje
int noll = 0; // variable para almacenar el valor del punto medio
#define NUM_SAMPLES 10 // 10 muestras analógicas para leer en 1 segundo
int suma = 0; // suma de muestras tomadas
int sol = 0; // igual, pero dividido por 10
unsigned char sample_count = 0; // número de muestra actual con
voltaje de flotación = 0.0; // voltaje calculado
const int button1 = 7; // botón de barrera plus
const int button2 = 8; // botón de barrera menos
int i = 5; // barrera
configuración nula () {
lcd.begin (16, 2); // muestra la inicialización
lcd.setCursor (1, 0);
lcd.setCursor (10, 1);
lcd.print ("Rx-Tx");
retraso (3000);
lcd.clear ();
TCCR1A = TCCR1A & amp; 0xe0 | 2;
TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
analogWrite (9, 126); // en el pin 10 PWM = 50% f = 31200Hz
lcd.createChar (1, z1);
}
bucle vacío () {
int buttonState1 = HIGH; // El estado del botón es uno
int buttonState2 = HIGH; // Estado de dos botones
sample_count = 0; // restablecer el contorno del número de adiciones
suma = 0; // restablecer la suma de 10 adiciones
while (sample_count & lt; NUM_SAMPLES) {
suma + = lectura analógica (A4); // la siguiente medición se agrega a la suma
muestra_cuenta ++; // la unidad se agrega al número de medida
sun = sum / 10;} // encuentra el valor promedio de 10 mediciones
noll = analogRead (A3) / 2; // potencia del punto medio
voltaje de flotación = mapa (analogRead (A3), 0,1023,0,1500) /100.0;
// Voltímetro construido en la entrada A3
if (sun & gt; = noll + i) {countleds = map (sun, noll + i, noll * 2 - 250, 9, 14);
// si el resultado recibido está en el segmento 9-15 de la escala
tono (6, contados * 100);}
if (sun & lt; = noll - i) {countleds = map (sun, 116, noll - i, 0, 7);
// si el resultado resultante es 0-7 segmento de la escala
tono (6, contados * 50); }
if (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {countleds = 7;
noTono (6); } // islote de CERO virtual (7 segmentos)
if (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
noTono (6); } // isla de escala CERO virtual (8 segmentos)
{lcd.setCursor (contados, 0); // establece el cursor en la columna de los contados, línea 0
lcd.print ("\ xff"); // icono lleno
lcd.setCursor (0, 1); // mover a 2 filas, columna-0
lcd.print (char (1)); // Indicación del icono de batería
lcd.setCursor (1, 1); // pasar a la indicación de voltaje
lcd.print (voltaje); // voltaje
lcd.setCursor (7, 0); // 8a columna 1ra fila
if (sun & lt; noll) {lcd.print ("{");} // print
lcd.setCursor (8, 0); // novena columna primera fila
if (sun & gt; noll) {lcd.print ("}");} // imprimir
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 columna 2da fila
lcd.print (i); // barrera
lcd.setCursor (13, 1); // 13a columna 2a fila
lcd.print (sol); // imprime el valor promedio del valor ADC
retraso (100); // espera
buttonState1 = digitalRead (button1); // Estado del botón de lectura 1
buttonState2 = digitalRead (button2); // Estado del botón de lectura 2
if (buttonState1 == LOW) {i = i + 1; retraso (50);}
// Cuando se presiona el botón, la barrera crece en 1. Retraso 50
if (buttonState2 == LOW) {i = i - 1; retraso (50);}
// Cuando se presiona el botón, la barrera disminuye en 1. Retraso 50
if (i & lt; 1) {i = 1;} // Límite inferior de la barrera
if (i & gt; 38) {i = 38;} // El límite superior de la barrera
lcd.clear ();
}
}
No utilicé el automóvil. Los dos últimos elementos del TL074 quedaron inactivos. Pero en el circuito y la placa lo son. Es posible que desee llevarlos a condiciones de trabajo un poco más tarde. Creo que he logrado mi objetivo. La unidad de visualización funciona de maravilla. Todo lo demás depende del MD.