Pag-recycle ng scheme ng deep-water na Kolokolov-Shchedrin. Mga pagkakaiba mula sa orihinal na pamamaraan:
1. Walang WALANG kristal na osileytor sa k561 .. chip at 32 kHz quartz. Ang 32 kHz signal ay nagbibigay sa Arduino Pro Mini.
2. Ang mga circuits ng notification ng tunog sa maraming mga 561 serye na mga microcircuits ay hindi din naroroon, ang Arduino ay binibigkas din ang target (At dapat kong sabihin, ito ay mahusay na pagpapahayag, kumpara sa scheme ng may-akda).
3. Pinapagana ng unipolar boltahe 12v (baterya ng lead-acid).
4. Ayusin ang sensitivity sa mga pindutan. Sa scale ng ADC mula 0 hanggang 1023, ang threshold ng tugon ay nababagay mula 1 hanggang 38 (ang halaga ay madaling mababago sa sketsa).
Pinakamahalaga, nais kong ipakita sa artikulong ito na posible na tipunin ang mga MD sa Arduino na hindi mas mababa sa orihinal sa pagiging sensitibo (nagtrabaho ito, dahil ang mga pinagmulan ng orihinal na circuit ay nakolekta sa pagkakasunud-sunod ng 10 piraso, kaya mayroong materyal para sa paghahambing). Orihinal na circuit:
Noong una kong sinimulan ang pakikipagtulungan sa Arduino, masigla ako na naisip kong makakahanap at mag-ipon ng anumang circuitry ng Metal Detector mula sa Internet sa Arduino na madaling mahanap ko sa malawak na basurahan. Sa prinsipyo, ito ay lumiko sa paraang iyon, ngunit ang mga circuit ay batay sa isang frequency counter, na hindi pinapayagan na makamit ang isang talagang mahusay na saklaw. Ang ilang mga laruan ng mga bata at isang pagsubok ng panulat + ay nagtatangkang kumita ng pera sa mga nagsisimula. Ang orihinal ng MD na ito ay isang tunay na workhorse na nagbibigay-daan sa iyo upang makahanap ng mga malalaking bagay sa layo na 2m (tingnan ang librong Kolokolov-Shchedrin sa Google). Walang mga istatistika sa binagong md. Inaasahan kong lumitaw siya sa suporta ng mga tagahanga ng MD at Arduino. Ang pamamaraan ay nagtrabaho kasama ang Arduino Uno at Arduino Pro Mini.
Karagdagan sa link ay inilatag ang proseso ng pagsilang ng MD sa website ng Soldering Iron, na tumagal ng higit sa isang taon at itinulak ang may-akda na pag-aralan ang programming duin. Marahil ang sketch ay tila mapoot sa isang tao - malugod kong tatanggapin ang iyong mga FIXES.
Sa ngayon, mayroong isang sketsa na nagbibigay-daan sa iyo upang ayusin ang sensitivity barrier (pin 7 douins +1 sa hadlang, pin 8 -1 sa hadlang). .
Arduino tungkol sa mini 5v, 16MHz, ATmega168 at ang display na ginamit nito. Susunod sa laki ay ang Mini SD-adapter
Tulad ng nasabi na 1602 nagkakahalaga ng 86 rubles, ProMini - 82 rubles. Kung nais mo, maaari mong pangkalahatan na kumuha ng isang hubad na ATmega168, bumuo ng isang board para dito at punan ang sketch nang direkta dito.At kaya, halimbawa, na-install ko ang ina-tatay sa board ng MD gamit ang konektor. Ipinapakita ng larawan ang 6-pin plug ni Arduino, kung saan ang mga sketch ay ibinuhos nang direkta sa board.
Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino
// A3 analog input para sa voltmeter
// A4 analog input para sa signal
// 6- konklusyon ng zook
// 9 - dalas ng output 31200 Hz
#nagsama
Liquid Crystal lcd (12, 11, 5, 4, 3, 2);
byte z1 [8] = {// icon ng baterya
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variable upang maiimbak ang halaga ng antas ng antas
int voltag = 0; // variable upang maiimbak ang halaga ng boltahe
int noll = 0; // variable upang maimbak ang halaga ng midpoint
#define NUM_SAMPLES 10 // 10 mga halimbawang analog na basahin sa 1 segundo
int sum = 0; // kabuuan ng mga sample na kinuha
int sun = 0; // pareho, ngunit nahahati sa 10
hindi naka-lagda na char sample_count = 0; // kasalukuyang halimbawang numero na may
float boltahe = 0.0; // kinakalkula boltahe
const int button1 = 7; // button ng hadlang kasama
const int button2 = 8; // button na hadlang-minus
int i = 5; // hadlang
walang pag-setup () {
lcd.begin (16, 2); // display initialization
lcd.setCursor (1, 0);
lcd.setCursor (10, 1);
lcd.print ("Rx-Tx");
pagkaantala (3000);
lcd.clear ();
TCCR1A = TCCR1A & amp; 0xe0 | 2;
TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
analogWrite (9, 126); // sa pin 10 PWM = 50% f = 31200Hz
lcd.createChar (1, z1);
}
walang bisa na loop () {
int buttonState1 = mataas; // Ang estado ng pindutan ay isa
int buttonState2 = mataas; // Dalawang pindutan ng estado
sample_count = 0; // i-reset ang tabas ng bilang ng mga karagdagan
kabuuan = 0; // i-reset ang kabuuan ng 10 mga karagdagan
habang (sample_count & lt; NUM_SAMPLES) {
sum + = analogRead (A4); // ang susunod na pagsukat ay idinagdag sa kabuuan
sample_count ++; // ang yunit ay idinagdag sa bilang ng pagsukat
araw = sum / 10;} // hanapin ang average na halaga mula sa 10 pagsukat
noll = analogRead (A3) / 2; // kapangyarihan ng midpoint
float boltahe = mapa (analogRead (A3), 0,1023,0,1500) /100.0;
// Voltmeter na binuo sa input A3
kung (sun & gt; = noll + i) {countleds = mapa (sun, noll + i, noll * 2 - 250, 9, 14);
// kung ang natanggap na resulta ay nasa ika-9-15 na segment ng scale
tono (6, countleds * 100);}
kung (sun & lt; = noll - i) {countleds = mapa (sun, 116, noll - i, 0, 7);
// kung ang nagresultang resulta ay 0-7 segment ng scale
tono (6, countleds * 50); }
kung (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {countleds = 7;
noTone (6); } // islet ng virtual ZERO (7 segment)
kung (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
noTone (6); } // isla ng virtual na scale ZERO (8 segment)
{lcd.setCursor (mga bilang, 0); // itakda ang cursor sa haligi ng countleds, linya 0
lcd.print ("\ xff"); // napuno na icon
lcd.setCursor (0, 1); // lumipat sa 2 hilera, haligi-0
lcd.print (char (1)); // Indikasyon ng Icon ng Baterya
lcd.setCursor (1, 1); // lumipat sa indikasyon ng boltahe
lcd.print (boltahe); // boltahe
lcd.setCursor (7, 0); // ika-8 haligi 1st row
kung (sun & lt; noll) {lcd.print ("{");} // print
lcd.setCursor (8, 0); // ika-9 na haligi 1st row
kung (sun & gt; noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 haligi 2nd row
lcd.print (i); // hadlang
lcd.setCursor (13, 1); // 13 na haligi 2nd row
lcd.print (araw); // i-print ang average na halaga ng halaga ng ADC
pagkaantala (100); // wait
buttonState1 = digitalRead (button1); / Basahin ang Katayuan ng Button 1
buttonState2 = digitalRead (button2); // Basahin ang pindutan ng 2 estado
kung (buttonState1 == LOW) {i = i + 1; pagkaantala (50);}
// Kapag pinindot ang pindutan, lumalaki ang hadlang sa pamamagitan ng 1. Pag-antala ng 50
kung (buttonState2 == LOW) {i = i - 1; pagkaantala (50);}
// Kapag pinindot ang pindutan, bumababa ang hadlang sa pamamagitan ng 1. Pag-antala ng 50
kung (i & lt; 1) {i = 1;} // Mas mababang hangganan ng hadlang
kung (i & gt; 38) {i = 38;} // Ang itaas na hangganan ng hadlang
lcd.clear ();
}
}
Hindi ko ginamit ang kotse.Ang huling dalawang elemento ng TL074 ay naiwan. Ngunit sa circuit at board sila. Maaaring nais mong dalhin ang mga ito sa kondisyon sa pagtatrabaho nang kaunti mamaya. Naniniwala ako na nakamit ko ang aking layunin. Nagtatrabaho ang kamangha-manghang yunit ng pagpapakita. Ang lahat ng iba pa ay nakasalalay sa MD.