» Electronics » Mga detektor ng metal »Metal detector sa Arduino Pro Mini. Pagproseso ng kalaliman ng Kolokolov-Shchedrin ayon sa prinsipyo ng "Paghahatid"

Metal Detector sa Arduino Pro Mini. Pagproseso ng kalaliman ng Kolokolov-Shchedrin ayon sa prinsipyo ng "Paghahatid"


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


Metal Detector sa Arduino Pro Mini. Pagproseso ng kalaliman ng Kolokolov-Shchedrin ayon sa prinsipyo ng


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.
9.8
10
10

Magdagdag ng isang puna

    • ngitinakangitixaxaok langhindi alamyahoonea
      bosskumamottangaoooo-ooagresibolihim
      sorrysayawsayaw2sayaw3kapatawarantumulonginumin
      humintomga kaibiganmabutigoodgoodsipolswoondila
      usokpumapalakpakkrayolaipahayagnakakainisdon-t_mentionpag-download
      initnakakainistumawa1mdapagpupulongnakikipag-usapnegatibo
      hindi_ipopcornparusahanbasahintakottakotpaghahanap
      panunuyasalamat_youitoto_clueumniktalamaksumang-ayon
      masamabeeeblack_eyeblum3namulamagyabanginip
      censoredkaaya-ayalihim2nagbabantatagumpayyusun_bespectacled
      shokrespektlolnagustuhanmaligayang pagdatingkrutoyya_za
      ya_dobryikatulongne_huliganne_othodimapusokpagbabawalmalapit
24 komentaryo
Ang may-akda
Salamat puteec FU! Hiningi ko ito mula sa pangalawang pagkakataon. Nag stitched ako sa Arduino uno. Nawala ang problema matapos i-update ang bootloader. Ngayon interes kung paano i-configure pa.
puteec fu
Ang anumang Arduino ay angkop para sa atmega168, atmega328. Tungkol sa nano ito sa isang usb connector kung hindi nagkakamali. Tumahi sa ideyang Arduino mula sa mga halimbawa ng sketch ng Blink (kumikislap na mga LED sa pin 13, ang LED ay naka-install sa board). Siguraduhin na gumagamit ka ng wastong port, ang board ay napili nang tama, ang processor sa board ay napili nang tama, tama ang pinili ng quartz sa board, at ang paraan ng firmware (μ2) ay napili nang tama.
Ang error ay hindi nakatagpo.
Lumikha ng isang bagong file sa Arduino, kopyahin ang sketch mula dito sa isang bago at malinis na sketsa at gagana ito.Ngunit una, gawin ang LED sa Arduino board blink na may isang karaniwang halimbawa ng kumikislap. Pagkatapos ay lumipat.
Binili ko lamang ang Arduino p nano sa processor ng Atmega328. Sinuri ko ang isang bungkos ng mga video at forum ... sinabi nila na dapat itong bumangon .... ngunit pagkatapos ay ang bummer ay HINDI kumikislap .... binibigyan ng #include ang "FILENAME" o . May nakatagpo ba rito?
Ang may-akda
Ang isang sketch ay gumagana sa board na ito. Ano ba talaga ang nabuo ng plug?
Kung ibubuhos mo ang huling sketsa, kung gayon ang lahat ng mga detalye na may kaugnayan sa D3.3 at D3.4 pati na rin ang kanilang mga sarili ay hindi mai-install. Sa paghihinang iron mayroong muling pag-redirect sa paksang ito
Anjey888
Kumusta Napaka-interesado ang paksang ito. Gusto kong i-ipon ang aparato. Gumawa ako ng isang paghihinang board na bakal mula sa labas ... at pagkatapos ay natigil. Dahil maraming hindi pagkakasundo sa pagitan ng board at circuit. Sinimulan ang paghahambing sa iyong board ... malaking pagkakaiba iyon. Ngunit nalilito sa harness sa Arduino.
Hinihiling ko ang tulong ng mga taong may kaalaman.
Ang may-akda
Ang parehong bilang para sa iba pang mga metal. Ang kalaliman ng pagtuklas ay nakasalalay sa lugar ng target. Ang mas, ang mas malalim.
Panauhang Eugene
Ano ang mga limitasyon para sa pagtuklas ng mga bagay? Gintong, aluminyo, tanso.
Panauhang Alexander
Ano ang gagawin ngayon, dahil mayroon pa ring hadlang sa Schottky?
Ang may-akda
Well dito! Tungkol sa kahit na ang pinakamaliit na halaga ay wala sa tanong! Salamat sa paglilinaw.
Quote: puteec_80
At ang mga tao ay mas mabilis at madaling maunawaan kung ano ang pinag-uusapan ko.
Maaari kang magpatuloy upang manatili sa error na ito. ((Teknikal na magbasa ng mga tao ay magiging isang bahagyang pagkawala.
BARRIER, asawa.
1. Isang balakid (isang uri ng dingding, isang crossbeam) na itinakda sa daan.
2. Fence, fencing.

THRESHOLD, threshold, asawa.
1. Sa agham at teknolohiya, ang threshold ay tinatawag na pinakamaliit na halaga, ang antas ng pagpapakita ng isang bagay.
Ang limitasyong sensitivity ng aparato. | Naririnig ang threshold. | Threshold ng sakit. | Ang sensor ay na-trigger kapag ang set na temperatura ng threshold ay lumampas.
ngiti
Ang may-akda
Manatili tayo sa ating sarili. Isusulat ko ang "pagtaas ng hadlang sa pamamagitan ng isang yunit" at "ang pagiging sensitibo ng tatanggap ay 5 μV." At isinusulat mo ang "Pagtaas ng threshold ng operasyon ng isang unit" at "threshold ng sensitivity ng receiver .." Bukod dito, mas mabilis at intuitively na maunawaan ng mga tao ang tinutukoy ko.
At ipinaliwanag ko sa halimbawang ito. Walang mahigpit na pagsasalita, dahil walang malinaw na sukat sa sanggunian. Mayroong ilang uri ng cutout na lumulutang na banda mula sa isang lumulutang na signal. Kaya, sa tingin ko na ang kahulugan ng isang hadlang ay mas angkop para sa "lumulutang" na ito kaysa sa isang threshold.
Sa pangkalahatan walang saysay at hangal na argumento. Mayroon kang anumang mga katanungan?
Quote: puteec_80
Ano ang kanilang mas mababang at itaas na mga threshold?
Siguro ang mga kahulugan ng isinalin na salita ay hindi tumutugma o bahagyang hindi tumutugma. Ngunit perpektong inilalarawan nila ang proseso at unti-unting pumasok sa slang.
Eksakto kung ano ang threshold. Ang threshold ng tugon ay nasa iyong kaso. Mangyaring ipaliwanag kung paano inilalarawan ng "hadlang" ang proseso.
Tulad ng para sa pagsali sa balbal - ngayon maraming mga uri ng hindi pagkakaunawaan doon. ((
Ang may-akda
Sa kasong ito, may posibilidad pa rin akong gumamit ng salitang "hadlang", dahil ito ay ang hadlang na nakalagay sa teksto ng programa, hindi lamang nahuhulog sa saklaw nito, ang signal ay napapansin ng microcontroller bilang kapaki-pakinabang. At ito ang hadlang dahil Mayroon itong dalawang halaga - ang itaas at mas mababang mga limitasyon ng run-in i.e. ang operasyon ay nangyayari sa itaas ng "itaas" at sa ibaba ng "mas mababang" hangganan ng hadlang sa scale ng ADC. Gayunpaman, mas alam mo. Ano ang kanilang mas mababang at itaas na mga threshold?
Siguro ang mga kahulugan ng isinalin na salita ay hindi tumutugma o bahagyang hindi tumutugma. Ngunit perpektong inilalarawan nila ang proseso at unti-unting pumasok sa slang.
Sa pamamagitan ng paraan. Ang sensitivity at ang hadlang ay ganap na magkakaibang mga bagay.
OoNag-intersect sila. Ngunit hindi na.
Quote: puteec_80
Sa dayuhang MD, sinasabi ng menu na "Barier".

Maaari akong sorpresa sa iyo, ngunit maraming mga salitang Ingles na katulad ng sa atin ay may ibang kahulugan, kung minsan malapit, kung minsan hindi. Maghanap para sa mga salitang "maling kaibigan ng tagasalin."
Ngayon mahalagang. Sa Ruso teknikal dokumentasyon hindi walang simpleng pariralang "hadlang ng pagiging sensitibo" - at iyan! Mayroong "threshold of sensitivity", sa ilang mga kaso ay masasabi ng isang "limitasyon ng pagiging sensitibo", ngunit hindi isang "hadlang ng pagiging sensitibo". Marahil sa ilang iba pang mga sanga ng kaalaman ay ginagamit ito, ngunit hindi sa mga elektronika.
Ang may-akda
Kaya, nangangahulugan ito na ang lahat ng mga dayuhang inhinyero ay tumatalon sa isang patpat sa kalsada. Sa dayuhang MD, ang menu ay nagsasabing "Barier." Kasamang si Ivan, nahuhulog ka sa aking mga mata sa gayong maliit na nitpicking! Nasaan ang iyong mga puna sa mga merito? Pagkatapos nito kailangan mong ipalakpak ang iyong mga kamay na flat sa noo? Madalas mo akong sinasamsam parusahan
Ang pagkakaiba ay makabuluhan: ang threshold ay isang teknikal na termino, ang hadlang ay isang "stick sa buong kalsada."
Ang may-akda
Siguro. Ngunit hindi ko nakikita ang pagkakaiba.
Marahil hindi isang "hadlang", ngunit isang threshold? ;)
Ang may-akda
Ang diagram ay hindi ipinapakita ang mga pindutan ng pag-aayos ng hadlang. Ang mga ito ay konektado sa mga pin 7 at 8 ng Arduino. Ang bawat isa ay humugot ng isang pagtutol ng 10k sa dagdag, magsara kapag pinindot mo ang masa.
Ang may-akda
walang bisa na loop () {
int buttonState1 = mataas; // Ang estado ng pindutan ay isa
int buttonState2 = mataas; // Dalawang pindutan ng estado

int pot = analogRead (A4); // filter para sa mabilis na pagbabago ng signal
sign = sign * (1-K) + palayok * K;

noll = noll * (1-L) + sign * L; // pangmatagalang filter ng signal
// Voltmeter na binuo sa input A3
float boltahe = mapa (analogRead (A3), 0,1023,0,1500) /100.0;

kung (sign> = noll + i) {countleds = mapa (sign, noll + i, 1023, 9, 14);
// kung ang natanggap na resulta ay nasa ika-9-15 na segment ng scale
tono (6, countleds * 100);}
kung (sign <= noll - i) {countleds = mapa (sign, 0, noll - i, 0, 7);
// kung ang nagresultang resulta ay 0-7 segment ng scale
tono (6, countleds * 50); }
kung (sign = noll - (i-1)) {countleds = 7;
noTone (6); } // islet ng virtual ZERO (7 segment)
kung (sign> noll && sign <= 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 (sign lcd.setCursor (8, 0); // ika-9 na haligi 1st row
kung (sign> 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 (sign); // i-print ang average na halaga ng halaga ng ADC
pagkaantala (10); // 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 <1) {i = 1;} // Mas mababang hangganan ng hadlang
kung (i> 38) {i = 38;} // Ang itaas na hangganan ng hadlang

lcd.clear ();
}
}
Ang may-akda
Bagong sketch. Ang algorithm para sa pagtuklas ng kapaki-pakinabang na signal ay nabago. Ang scheme ay pinasimple, walang mga elemento D3.4 at D3.3 kasama ang lahat ng kanilang mga bindings. Kung kukuha ka ng iyong sariling signet, pagkatapos ang lahat ng mga detalyeng ito ay maaaring hindi mai-install lamang. Mas sensitivity. Walang maling positibo.
Sketch:

/ / A3-analog na input para sa isang voltmeter.Mataganda sa pamamagitan ng potentiometer R32.
// A4-analog input para sa signal. Itakda kasama ang minimum na signal sa D3.2
// risistor R40 para sa pagbabasa ng ADC ng tungkol sa 510.
// 6- konklusyon ng zook
// 9 - dalas ng output 31200 Hz
#include
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

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
const float K = 0.1; // Ang pagsubaybay sa mabilis na pagbabago ng pagbabago (koepisyent. mas maliit ang mas malakas)
const float L = 0.07; // Ang mga pagbabago sa pagsubaybay sa filter sa loob ng mahabang panahon
float sign = 0; // filter
float noll = 0;

walang pag-setup () {
lcd.begin (16, 2); // display initialization
lcd.createChar (1, z1);
pinMode (9, OUTPUT);
pinMode (6, OUTPUT);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // sa pin 10 PWM = 50% f = 31200Hz
// sa katunayan, para sa PWM = 50% na kailangan mong itakda ng hindi bababa sa 220 pagpuno, ayon sa oscilloscope
// hindi mapigilan ng duin ito. Hindi ito kritikal.
}
Ang may-akda
Sa mga manonood ng sketsa. Ang mga palatandaan> = at <= ay pinalitan ng mga kakaibang kumbinasyon ng & gt at & lt. Bakit hindi ko alam. Kapag ang pag-debug ay normal.

Pinapayuhan ka naming basahin:

Ipasa ito para sa smartphone ...