Talaan ng mga Nilalaman:

Arduino Batay sa Pulse Induction Detector - Flip Coil: 5 Hakbang (na may Mga Larawan)
Arduino Batay sa Pulse Induction Detector - Flip Coil: 5 Hakbang (na may Mga Larawan)

Video: Arduino Batay sa Pulse Induction Detector - Flip Coil: 5 Hakbang (na may Mga Larawan)

Video: Arduino Batay sa Pulse Induction Detector - Flip Coil: 5 Hakbang (na may Mga Larawan)
Video: Professional Deep Seeker Pulse Induction Metal Detector / Treasure Hunter Module. 2024, Hulyo
Anonim
Arduino Batay sa Pulse Induction Detector - Flip Coil
Arduino Batay sa Pulse Induction Detector - Flip Coil
Arduino Batay sa Pulse Induction Detector - Flip Coil
Arduino Batay sa Pulse Induction Detector - Flip Coil

Ang ideya

Ang pagkakaroon ng pagbuo ng ilang mga metal detector sa nakaraan na may iba't ibang mga resulta Nais kong galugarin ang mga kakayahan ng Arduino sa direksyong iyon.

Mayroong ilang mga magagandang halimbawa ng kung paano bumuo ng mga metal detector gamit ang Arduino, ang ilan dito bilang mga itinuturo. Ngunit kapag tinitingnan ang mga ito, karaniwang nangangailangan sila ng alinman sa ilang mga panlabas na sangkap para sa paggamot ng analog signal o ang pagiging sensitibo ay masyadong mababa.

Kapag iniisip ang tungkol sa mga metal detector, ang pangunahing paksa ay kung paano makaramdam ng kaunting pagbabago ng boltahe sa mga signal na nauugnay sa search coil. Ang mga pagbabagong ito ay karaniwang napakaliit. Ang pinaka-halata na diskarte ay ang paggamit ng mga analog input ng ATmega328. Ngunit ang pagtingin sa mga pagtutukoy mayroong dalawang pangunahing mga problema: sila ay (madalas) mabagal at ang resolusyon ay (sa karamihan ng mga kaso) hanggang sa mababa.

Sa kabilang banda, ang Arduino ay tumatakbo sa 16MHz at mayroong ilang mga kakayahan sa tiyempo i. e. isang resolusyon na 0.0625µS kung gumagamit ng bilis ng orasan. Kaya sa halip na gamitin ang analog input para sa sensing, ang pinakasimpleng paraan ng pag-sensing ng maliliit na pabago-bagong pagbabago sa boltahe ay upang ihambing ang pagbabago sa pagbagsak ng boltahe sa paglipas ng panahon sa isang nakapirming boltahe ng sanggunian.

Para sa layuning ito ang ATmega328 ay may maayos na tampok ng isang panloob na paghahambing sa pagitan ng D6 isang D7. Ang kumpare na ito ay nakapagpalitaw ng isang nakakagambala, nagpapagana ng tumpak na paghawak ng kaganapan. Ang pag-iwan sa tabi ng maayos na naka-code na mga gawain sa oras tulad ng millis () at micos () at pagpunta sa panloob na timer ng ATmega328 na may mas mataas na resolusyon, ang Arduino ay isang mahusay na batayan para sa mga diskarte sa pagtuklas ng metal.

Kaya mula sa isang view ng source code, isang mahusay na pagsisimula ay ang programa ng panloob na kumpare para sa "pagbabago" sa polarity ng mga input at gumamit ng isang panloob na counter na may pinakamataas na bilis na posible para sa pagbabago sa tiyempo ng mga pagbabago.

Ang pangkalahatang code sa Arduido upang acheive ito ay:

// Pagtukoy sa lahat ng kinakailangang pre variable at iba pa at pag-set up ng mga rehistro

unsigned char clockSelectBits = _BV (CS10); // walang prescale, buong xtal void setup () {pinMode (6, INPUT); // + ng kumpare - sa pamamagitan ng pagtatakda sa kanila bilang INPUT, sila ay // nakatakda sa mataas na impedance pinMode (7, INPUT); // - ng kumpare - sa pamamagitan ng pagtatakda sa kanila bilang INPUT, sila ay // nakatakda sa mataas na impedance na kliyente (); // stop interrupts TCCR1A = 0; // itakda ang buong rehistro ng TCCR1A sa 0 TCCR1B = 0; // pareho para sa TCCR1B -> normal modeTCNT1 = 0; // ipasimula ang halaga ng counter sa 0; TCCR1B | = clockSelectBits; // nagtatakda ng prescaler at sinisimulan ang orasan TIMSK1 = _BV (TOIE1); // nagtatakda ng timer overflow makagambala paganahin ang bit sei (); // payagan ang makagambala ACSR = (0 << ACD) | // Analog Comparator: Pinagana (0 << ACBG) | // Analog Comparator Bandgap Select: Ang AIN0 ay inilalapat sa positibong input (0 << ACO) | // Analog Comparator Output: Off (1 << ACI) | // Analog Comparator Interrupt Flag: I-clear ang Nakabinbing Nakagambala (1 << ACIE) | // Analog Comparator Interrupt: Pinagana (0 << ACIC) | // Analog Comparator Input Capture: Hindi pinagana (0 << ACIS1 | 0 << ACIS0 // makagambala sa output toggle // (0 << ACIS1 | 1 << ACIS0 // nakalaan // (1 << ACIS1 | 0 << ACIS0 // makagambala sa pagbagsak ng gilid ng output // (1 << ACIS1 | 1 << ACIS0 // makagambala sa tumataas na gilid ng input;}

// ang gawain na ito ay tinatawag sa tuwing lumilikha ang isang kumpara ng isang nakakagambala

ISR (ANALOG_COMP_vect) {oldSREG = SREG; Tala (); timeStamp = TCNT1; SREG = oldSREG; }

// ang gawain na ito ay tinatawag tuwing may pag-apaw sa panloob na counter

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// ang gawain na ito ay ginagamit upang i-reset ang timer sa 0

void resetTimer (void) {oldSREG = SREG; Tala (); // Huwag paganahin ang nakakagambala sa TCNT1 = 0; // ipasimula ang halaga ng counter sa 0 SREG = oldSREG; // Restore status register TCCR1B | = clockSelectBits; // nagtatakda ng prescaler at sinisimulan ang orasan timer1_overflow_count = 0; // resets overflow counter}

Siyempre ang ideyang ito sa hindi ganap na bago. Ang pangunahing bahagi ng code na ito ay matatagpuan sa ibang lugar. Ang isang mahusay na pagpapatupad tulad ng isang aproach para sa isang microcontroller na natagpuan para sa TPIMD - Tiny Pulse Induction Metal Detector home page.

www.miymd.com/index.php/projects/tpimd/ (sa kasamaang palad ang pahina na ito ay hindi na online, kasalukuyang mayroong isang backup ng site sa www.basic4mcu.com, seach para sa "TPIMD").

Hakbang 1: Idea ng Indyo ng Arduino Pulse - Flip Coil

Idea ng Indya ng Arduino Pulse - Flip Coil
Idea ng Indya ng Arduino Pulse - Flip Coil
Idea ng Indya ng Arduino Pulse - Flip Coil
Idea ng Indya ng Arduino Pulse - Flip Coil

Ang ideya ay gamitin ang Arduino bilang isang detalyeng Pulse Induction, tulad ng sa TPIMD, dahil ang ideya ng tiyempo ng kurba ng pagkabulok ay tila gumagana nang maayos. Ang problema sa mga detektor ng Pulse Induction ay, na karaniwang kailangan nila sa iba't ibang boltahe upang gumana. Isang boltahe upang mapagana ang coil at isang hiwalay na boltahe upang harapin ang kurba ng pagkabulok. Ang dalawang mapagkukunang boltahe na ito ay gumagawa ng mga detector ng pulso na palaging medyo kumplikado.

Sa pagtingin sa boltahe ng likaw sa isang detektor ng PI, ang nagresultang kurba ay maaaring mahiwalay sa dalawang magkakaibang yugto. Ang unang yugto ay ang pulso mismo na nagpapatakbo ng coil at nagtatayo ng magnetic field (1). Ang pangalawang yugto ng ay boltahe ng pagkabulok ng boltahe, na nagsisimula sa isang boltahe na rurok, pagkatapos ay mabilis na ma-agustus sa boltahe na "walang lakas" ng likid (2). Ang problema ay, binabago ng coil ang polarity nito pagkatapos ng pulso. Positibo ba ang pulso (Var 1. sa kalakip na larawan) ang pagkabulok-kurba ay negatibo. Negatibo ba ang pulso, magiging positibo ang kurba ng pagkabulok (Var 2. sa kalakip na larawan)

Upang malutas ang pangunahing problemang ito, ang coil ay kailangang "baligtarin" nang elektronikong pagkatapos ng pulso. Sa kasong ito ang pulso ay maaaring maging positibo at ang pagkabulok ng kurba ay maaaring maging positibo din.

Upang makamit ito, ang coil ay dapat na ihiwalay mula sa Vcc at GND pagkatapos ng pulso. Sa sandaling ito, mayroon lamang isang kasalukuyang dumadaloy sa pamamagitan ng isang pamamasa ng risistor. Ang nakahiwalay na system ng coil at damping resistor ay maaaring maging "oriented" sa kahit anong boltahe na sanggunian. Ito, sa teorya ay lilikha ng pinagsamang positibong curve (ilalim ng pagguhit)

Ang positibong curve na ito ay maaaring magamit sa pamamagitan ng kumpare upang makita ang punto ng oras kung saan ang boltahe ng pagkabulok "tumatawid" isang boltahe ng sanggunian. Sa kaso ng mga kayamanan na malapit sa likid, nagbabago ang kurba ng pagkabulok at ang punto ng oras na tumatawid sa mga pagbabago sa boltahe ng sanggunian. Ang pagbabago na ito ay maaaring makita.

Matapos ang ilang eksperimento sa sumusunod na circuit ay napatunayan na gumana.

Ang circuit ay binubuo ng isang Arduino Nano module. Ang modyul na ito ay nagtutulak ng dalawang MOSFET transistors na nagpapalakas sa coil (sa SV3) sa pamamagitan ng D10. Kapag natapos ang pulso sa D10, ang parehong MOSFET ay ihiwalay ang coilfrom 12V at GND. Ang na-save na enerhiya sa coil ay dumudugo sa pamamagitan ng R2 (220 Ohms). Kasabay nito ang R1 (560 Ohms) ay nagkokonekta sa dating positibong bahagi ng likid kahit GND. Binabago nito ang negatibong curve curve sa R5 (330 Ohms) sa isang positibong curve. Pinoprotektahan ng mga diode ang input pin ng Arduino.

Ang R7 ay isang devider ng boltahe sa halos 0.04V. Sa ngayon ang pagkabulok ng kurba sa D7 ay nakakakuha ng mas negatibo kaysa sa 0.04 sa D6 ang isang nakakagambala ay na-triggert at ang tagal pagkatapos ng pagtatapos ng pulso ay nai-save.

Sa kaso ng metal na malapit sa likid, ang kurba ng pagkabulok ay mas matagal, at ang oras sa pagitan ng pagtatapos ng pulso at ang makagambala ay tumatagal.

Hakbang 2: Pagbuo ng Detector (Breadboard)

Pagbuo ng Detector (Breadboard)
Pagbuo ng Detector (Breadboard)
Pagbuo ng Detector (Breadboard)
Pagbuo ng Detector (Breadboard)
Pagbuo ng Detector (Breadboard)
Pagbuo ng Detector (Breadboard)

Ang pagbuo ng detector ay medyo madali. Maaari itong magawa alinman sa isang breadboard (dumidikit sa orihinal na circuit) o sa pamamagitan ng paghihinang ng mga bahagi sa isang PCB.

Ang D13 LED sa Arduino Nano board ay ginagamit bilang pahiwatig para sa metal

Ang pag-unsing ng isang breadboard ay ang pinakamabilis na paraan sa gumaganang detector. Medyo ilang mga kable ang kinakailangan, maaari pa rin itong magawa ng isang maliit na breadboard. Sa mga larawan ipinakita ito sa 3 mga hakbang habang ang Arduino at ang MOSFET ay nagtatago ng ilan sa mga wire. Kapag sinusubukan ko na idiskonekta ang mga diode kahit papaano nang hindi napapansin sa una. Ito ay walang negatibong epekto sa pag-uugali ng detector. Sa bersyon ng PCB ng circuit iniwan ko sila ng tuluyan.

Hindi ipinakita sa mga larawan ang mga koneksyon sa isang 0.96 OLED display. Ang display na ito ay konektado:

Vcc - 5V (sa Arduino pin, hindi ang supply boltahe !!!)

GND - GND

SCL - A5

SDA - A4

Ang OLED Display na ito ay kinakailangan upang i-calibrate ang detector nang una. Ginagawa ito sa pamamagitan ng pagtatakda ng tamang boltahe sa PIN6 ng Arduino. Ang boltahe na ito ay dapat na nasa paligid ng 0.04V. Tumutulong ang display upang maitakda ang tamang boltahe.

Ang bersyon ng breadboard ay gumagana nang maayos, kahit na marahil ay hindi angkop para sa pagpunta sa ligaw.

Hakbang 3: Pupunta sa PCB

Pupunta sa PCB
Pupunta sa PCB
Pupunta sa PCB
Pupunta sa PCB
Pupunta sa PCB
Pupunta sa PCB
Pupunta sa PCB
Pupunta sa PCB

Tulad ng para sa paghihinang hindi ko talaga gusto ang double sided high-tech PCB, kaya binago ko ang circuit upang magkasya sa isang panig na PCB.

Ang mga sumusunod na pagbabago ay ginawa:

1. ang diode ay naiwan.

2. ang mga pintuan ng MOSFETs ay nakakuha ng isang risistor ng 10 Ohm

3. ang boltahe ng suplay para sa boltahe-divider sa D6 ay ibinibigay ng isang HINDI antas na signal sa D8

4. ang driver pin para sa MOSFET ay binago.

Sa ganitong paraan maaaring malikha ang isang panig na PCB na maaaring solder sa mga pangkalahatang PCB. Gamit ang circuit na ito magkakaroon ka ng isang gumaganang detektor ng PI na mayroon lamang 8-10 panlabas na mga bahagi (nakasalalay kung ginagamit ang pagpapakita ng OLED at / o isang speaker).

Hakbang 4: Pag-set up at Paggamit ng Detector

Pag-set up at Paggamit ng Detector
Pag-set up at Paggamit ng Detector
Pag-set up at Paggamit ng Detector
Pag-set up at Paggamit ng Detector
Pag-set up at Paggamit ng Detector
Pag-set up at Paggamit ng Detector

Kung ang detektor ay nakabuo nang maayos at ang programa ay nakasulat sa Arduino, ang pinakamadali (kung hindi lamang) paraan ng pag-set up ng yunit ay ang paggamit ng isang OLED display. Ang display ay naka-attach sa 5V, GND, A4, A5. Ang display ay dapat ipakita ang "calibrating" pagkatapos ng unit ay pinalakas. Pagkatapos ng ilang segundo dapat itong sabihin na "tapos na ang pagkakalibrate" at dapat ipakita ang tatlong numero sa display.

Ang unang numero ay ang "halaga ng sanggunian" na kinilala sa panahon ng pagkakalibrate. Ang pangalawang halaga ay ang huling sinusukat na halaga at ang pangatlong halaga na isang isang mean-halaga ng huling 32 na sukat.

Ang tatlong mga halagang ito ay dapat na higit pa o mas mababa pareho (sa aking mga kaso ng pagsubok sa ilalim ng 1000). Ang gitnang halaga ay dapat na higit pa o mas mababa matatag.

Upang simulan ang paunang pag-set up, dapat walang metal na malapit sa likid.

Ngayon ang divider ng boltahe (trim potentiometer) ay dapat na mai-trim upang ang mas mababang dalawang halaga ay dapat itakda sa isang maximum habang nagbibigay pa rin ng matatag na pagbabasa. Mayroong isang kritikal na setting, kung saan ang gitnang halaga ay nagsisimulang magbigay ng mga kakatwang pagbabasa. Ibalik ang trimmer upang makakuha muli ng mga matatag na halaga.

Maaaring mangyari, na ang pag-freeze ng display. Pindutin lamang ang pindutan ng pag-reset at magsimula muli.

Para sa aking pag-setup (coil: 18 lumiliko @ 20cm) ang matatag na halaga ay sa paligid ng 630-650. Sa sandaling itinakda, pindutin ang pindutan ng pag-reset, muling kumakalibrate ang yunit at lahat ng mga halaga ng puno ay dapat na nasa parehong saklaw muli. Kung ang metal ay dinala ngayon sa likid, ang LED sa Arduino-Board (D13) ay dapat na ilaw. Ang isang nakakabit na speaker ay nagbibigay ng ilang mga ingay sa pag-click (doon ilang silid para sa pagpapabuti sa pag-program doon).

Upang maiwasan ang mataas na inaasahan:

Ang detektor ay nakakakita ng ilang mga bagay-bagay, ngunit nananatili itong isang napaka-simple at limitadong detector.

Upang magbigay ng isang impression ng mga kakayahan, ang ilang mga detection ng sanggunian na may iba't ibang iba pang mga detector. Sa pagtingin sa mga resulta, medyo kahanga-hanga pa rin ito para sa isang detektor na mayroon lamang 8 mga panlabas na bahagi ngunit hindi tumutugma sa mga detektor ng propesyonal.

Sa pagtingin sa circuit at programa, maraming lugar para sa pagpapabuti. Ang mga halaga ng mga resistors ay natagpuan ng karanasan, ang oras ng pulso na 250ms ay napili nang sapalaran, ang mga parameter ng coil din. Kung mayroon kang mga ideya para sa mga pagpapabuti, Mas magiging masaya ako na talakayin ang mga ito.

Magsaya ka!

Hakbang 5: Update1: Paggamit ng isang 16x2 LCD

Update1: Paggamit ng isang 16x2 LCD
Update1: Paggamit ng isang 16x2 LCD
Update1: Paggamit ng isang 16x2 LCD
Update1: Paggamit ng isang 16x2 LCD
Update1: Paggamit ng isang 16x2 LCD
Update1: Paggamit ng isang 16x2 LCD

Mga pagpapabuti

Sa panahon ng karagdagang pagsubok natanto ko na ang library para sa I2C OLED Display ay gumagamit ng matagal na oras. Kaya't nagpasya akong gumamit ng isang 16x2 display na may isang I2C converter sa halip.

Kaya kinuha ko ang programa sa LCD display na nagdaragdag ng ilang mga kapaki-pakinabang na tampok. Ang unang linya ng display ngayon ay nagpapakita ng lakas ng signal ng isang posibleng pahiwatig. Ang pangalawang linya ay nagpapakita na ngayon ng dalawang halaga. Ipinahiwatig ng kamao ang kasalukuyang paglihis ng signal kumpara sa halaga ng pagkakalibrate. Ang halagang ito ay dapat na "0". Kung ang halagang ito ay patuloy na negatibo o positibo, ang detektor ay dapat na muling na-calibrate sa pamamagitan ng pagpindot sa pindutan ng pag-reset. Ang mga positibong halaga ay nagpapahiwatig ng metal na malapit sa likid.

Ipinapakita ng pangalawang halaga ang aktwal na halaga ng pagkaantala ng kurba ng pagkabulok. Ang halagang ito ay karaniwang hindi gaanong kawili-wili, ngunit kinakailangan sa paunang pag-set up ng detector.

Pinapayagan ngayon ng programa ang maramihang mga tagal ng pulso sa isang pagkakasunud-sunod (paraan ng pag-eksperimento / pagpapabuti ng pagganap). Wala akong nakamit na anumang break through. Kaya't ang default ay nakatakda sa isang tagal ng pulso.

Paunang Pag-set up ng Detector

Kapag ang pag-set up ng detector, ang pangalawang halaga ng pangalawang linya ay nauugnay (ang una ay maaaring balewalain). Sa una ang halaga ay maaaring "hindi matatag" (tingnan ang larawan). I-on ang trim risistor hanggang sa ang halaga ay makarating sa isang matatag na pagbabasa. Pagkatapos ay i-on ito upang madagdagan ang halaga sa isang maximum na matatag na halaga. Pindutin ang pindutan ng pag-reset upang muling mag-calibrate at handa nang gamitin ang detector.

Nakuha ko ang impression na sa pamamagitan ng pagtatakda ng maximum na matatag na halaga, nawala ang aking pagiging sensitibo para sa mga hindi metal na metal. Kaya't maaaring ito ay nagkakahalaga ng ilang eksperimento sa mga setting upang magkaroon ng isang mahusay na pagiging sensitibo para sa mga bagay na hindi bakal.

Mga coil

Bumubuo ako ng 3 coil para sa karagdagang pagsubok

1 -> 18 liko @ 200mm

2 -> 25 liko @ 100mm

3 -> 48 liko @ 100mm

Kapansin-pansin ang lahat ng mga coil ay gumana nang maayos, na may halos parehong pagganap (20ct coin sa 40-50mm sa hangin). Maaaring ito ay isang lubos na napapansin na pagmamasid.

Inirerekumendang: