Reciclatge de l'esquema d'aigües profundes de Kolokolov-Shchedrin. Diferències de l'esquema original:
1. No hi ha cap oscil·lador de cristall al xip k561 .. xip i quars de 32 kHz. El senyal de 32 kHz dóna l’Arduino Pro Mini.
2. Tampoc hi són presents circuits de notificació de so en diversos microcircuits de la sèrie 561, Arduino també està marcant l'objectiu (i he de dir que és excel·lent la veu, en comparació amb l'esquema de l'autor).
3. Alimentat per tensió unipolar 12v (bateria de plom-àcid).
4. Ajusteu la sensibilitat amb els botons. Amb l’escala ADC de 0 a 1023, el llindar de resposta es pot ajustar d’1 a 38 (el valor es pot canviar fàcilment a l’esbós).
El més important, volia demostrar en aquest article que és possible muntar MDs en Arduino no inferiors a l'original en sensibilitat (això es va resoldre, perquè els originals del circuit original es van recollir de l'ordre de 10 peces, de manera que hi ha material per a la seva comparació). Circuit original:
Quan vaig començar a treballar amb Arduino, em feia molta il·lusió que pensava trobar i muntar qualsevol circuit de detector de metalls d’Internet a Arduino que pogués trobar fàcilment al vast abocador d’escombraries. En principi, va resultar així, però els circuits es basaven en un comptador de freqüències, cosa que no permetia assolir un rang realment bo. Algunes joguines infantils i una prova de la ploma + intenten guanyar diners als principiants. L’original d’aquest MD és un autèntic cavall de treball que permet trobar objectes grans a una distància de 2 metres (consulteu el llibre Kolokolov-Shchedrin a Google). No hi ha estadístiques de la md transformada. Espero que aparegui amb el suport de fans de MD i Arduino. El programa va funcionar amb Arduino Uno i Arduino Pro Mini.
Més endavant es mostra el procés de naixement d’aquest MD al lloc web de Soldadura de ferro, que va durar més d’un any i va obligar l’autor a estudiar la programació duin. Potser l’esbós sembli malparit per a algú - Acceptaré amb molt de gust les vostres FIXES.
Actualment, hi ha un croquis que permet ajustar la barrera de sensibilitat (pin 7 douins +1 a la barrera, pin 8 -1 a la barrera). .
Arduino sobre mini 5v, 16MHz, ATmega168 i la pantalla utilitzats. Al costat de l'escala hi ha el Mini SD adaptador
Com ja s’ha dit, 1602 costa 86 rubles, ProMini - 82 rubles. Si ho desitgeu, generalment podeu agafar un ATmega168 nu, elaborar un tauler per a ell i emplenar l'esbós directament.I, per exemple, vaig instal·lar mare-pare a la placa MD mitjançant el connector. La foto mostra el tap de 6 pines d’Arduino, a través del qual s’abocaven esbossos directament a la pissarra.
Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino
// Entrada analògica A3 per voltímetre
// Entrada analògica A4 per a senyal
// 6- conclusió del zook
// 9 - freqüència de sortida 31200 Hz
#incloure
Cristal líquid lcd (12, 11, 5, 4, 3, 2);
byte z1 [8] = {// icona de la bateria
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variable per emmagatzemar el valor de nivell d’escala
int voltag = 0; // variable per emmagatzemar el valor de tensió
noll int = 0; // variable per emmagatzemar el valor del punt mig
#defineu NUM_SAMPLES 10 // 10 mostres analògiques per llegir en 1 segon
suma suma = 0; // suma de mostres preses
int sol = 0; // mateix, però dividit per 10
unsigned char sample_count = 0; // número de mostra actual amb
tensió flotant = 0,0; // tensió calculada
botó const int1 = 7; // botó de barrera més
botó const int2 = 8; // botó barrera-menys
int i = 5; // barrera
void setup () {
lcd.begin (16, 2); // inicialització de la visualització
lcd.setCursor (1, 0);
lcd.setCursor (10, 1);
lcd.print ("Rx-Tx");
retard (3000);
lcd.clear ();
TCCR1A = TCCR1A & amp; 0xe0 | 2;
TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
analogWrite (9, 126); // al pin 10 PWM = 50% f = 31200Hz
lcd.createChar (1, z1);
}
void loop () {
botó intState1 = HIGH; // L’estat del botó és un
botó intState2 = HIGH; // Estat de dos botons
sample_count = 0; // restablir el contorn del nombre d’afegits
suma = 0; // restablir la suma de 10 addicions
while (sample_count & lt; NUM_SAMPLES) {
suma + = analogRead (A4); // S’afegeix la següent mesura a la suma
sample_count ++; // la unitat s’afegeix al número de mesura
sun = suma / 10;} // trobeu el valor mitjà de 10 mesures
noll = analogRead (A3) / 2; // potència de mig punt
tensió flotant = mapa (analògic Llegit (A3), 0,1023.01500) /100.0;
// Voltímetre construït a l’entrada A3
if (sun & gt; = noll + i) {countleds = mapa (sol, noll + i, noll * 2 - 250, 9, 14);
// si el resultat rebut és al 9-15è segment de l'escala
to (6, comptats * 100);}
if (sun & lt; = noll - i) {countleds = mapa (sol, 116, noll - i, 0, 7);
// si el resultat resultant és 0-7 segment de l'escala
to (6, comptats * 50); }
if (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {countleds = 7;
noTone (6); } // illot de ZERO virtual (7 segments)
if (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
noTone (6); } // illa d'escala ZERO virtual (8 segments)
{lcd.setCursor (countleds, 0); // estableix el cursor a la columna Countleds, línia 0
lcd.print ("\ xff"); // icona omplerta
lcd.setCursor (0, 1); // es mou a 2 fila, columna-0
lcd.print (char (1)); // Indicació de la icona de la bateria
lcd.setCursor (1, 1); // passar a la indicació de tensió
lcd.print (tensió); // tensió
lcd.setCursor (7, 0); // 8a columna 1a fila
if (sun & lt; noll) {lcd.print ("{");} // imprimir
lcd.setCursor (8, 0); // 9a columna 1a fila
if (sun & gt; noll) {lcd.print ("}");} // imprimir
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 columna 2a fila
lcd.print (i); // barrera
lcd.setCursor (13, 1); // 13a columna 2a fila
lcd.print (sol); // imprimiu el valor mitjà del valor ADC
retard (100); // esperar
buttonState1 = digitalRead (button1); // Estat del botó 1 de lectura
buttonState2 = digitalRead (button2); // Estat 2 del botó de lectura
if (botóState1 == BAIX) {i = i + 1; retard (50);}
// Quan premeu el botó, la barrera creix 1. Retard 50
if (botóState2 == BAIX) {i = i - 1; retard (50);}
// Quan es prem el botó, la barrera disminueix en 1. Retard 50
if (i & lt; 1) {i = 1;} // Límit inferior de la barrera
if (i & gt; 38) {i = 38;} // El límit superior de la barrera
lcd.clear ();
}
}
No vaig fer servir el cotxe, els dos últims elements del TL074 es van deixar al ralentí. Però al circuit i al tauler ho són. Potser voldreu portar-los a les condicions laborals una mica més tard. Crec que he assolit el meu objectiu. La unitat de visualització funciona de meravella. La resta depèn de l'MD.