Cuprins:

Detector cu inducție de impulsuri pe bază de Arduino - LC-Trap: 3 pași
Detector cu inducție de impulsuri pe bază de Arduino - LC-Trap: 3 pași

Video: Detector cu inducție de impulsuri pe bază de Arduino - LC-Trap: 3 pași

Video: Detector cu inducție de impulsuri pe bază de Arduino - LC-Trap: 3 pași
Video: Magnetron | Sistem Radar | Tehnică militară 2024, Noiembrie
Anonim
Detector cu inducție de impulsuri pe bază de Arduino - LC-Trap
Detector cu inducție de impulsuri pe bază de Arduino - LC-Trap

În timp ce căutam idei suplimentare pentru un detector simplu de metale Ardino Pulse Induction cu o singură tensiune de alimentare, am dat peste pagina de start a lui Teemo:

www.digiwood.ee/8-electronic-projects/2-metal-detector-circuit

El a creat un detector simplu de inducție a impulsurilor folosind principiul LC-Trap. Circuite similare au fost postate aici pe Instructable de TechKiwiGadgets. Cu excepția faptului că circuitul Teemo folosește comparatorii interni ai unui microcontroler PIC, având astfel nevoie de mai puține componente externe

Așa că am fost provocat să folosesc Arduino în loc de un controler PIC pentru această schemă și să mă uit cât de departe pot ajunge.

Pasul 1: Schematic

Schematic
Schematic
Schematic
Schematic
Schematic
Schematic

Schema Arduino este puțin mai complicată, deoarece Arduino nu permite să direcționeze un semnal analog intern către intrarea comparatorului. Acest lucru adaugă două componente pentru un deviderr simplu de tensiune. Acest lucru duce la un design cu 12 componente externe (lăsând în afara difuzorul și LCD-ul de 16x2), comparativ cu 9 din designul Flip Coil.

Principiul de funcționare al schemei este explicat foarte bine pe site-ul web al Teemo. Practic, bobina este alimentată și apoi oprită. După oprire, bobina și condensatorul în paralel vor crea o oscilație amortizată. Frecvența și decăderea oscilației sunt influențate de metal în apropierea bobinei. Pentru detalii suplimentare despre circuit, consultați pagina Teemo sau TechKiwi aici, pe Instructables.

Ca și în detectorul de inducție a impulsurilor Flip Coil, folosesc comparatorul intern și posibilitatea de a declanșa o întrerupere pentru a obține semnalul de la bobină.

În acest caz, voi primi mai multe întreruperi, deoarece tensiunea oscilează în jurul tensiunii de referință setate la comparator. La sfârșitul oscilației, tensiunea la bobină se va stabili în jurul valorii de 5V, dar nu exact. Am ales un separator de tensiune cu 200 Ohm și 10k Ohm pentru a obține o tensiune de aproximativ 4,9 volți

Pentru a reduce complexitatea schemelor, am folosit D4 și D5 pentru a furniza GND (pentru rezistorul de 10k) și 5V (pentru rezistorul de 220 Ohm). Pinii sunt stabiliți la pornirea detectorului.

În această versiune, am adăugat o conexiune de difuzoare folosind descrierea multi ton controlată de volum, așa cum este descris în Cum se programează un detector de metale bazat pe Arduino. Acest lucru permite diferențierea proprietăților țintei, precum și obținerea unei senzații asupra puterii semnalului. Difuzorul poate fi conectat la antetul suplimentar cu 5 pini. Restul de 3 pini ai antetului vor fi folosiți pentru butoane (care vor fi implementate).

Pasul 2: Programare

Programare
Programare
Programare
Programare
Programare
Programare

Acum că circuitul este proiectat și prototipul este construit, este timpul să găsim o abordare adecvată pentru detectarea metalului.

1. Numărarea impulsurilor

Numărul impulsurilor oscilației până la decăderea completă este o idee.

Dacă există metal aproape de bobină, cantitatea de oscilație scade. În acest caz, tensiunea de referință a comparatorului trebuie setată la un nivel pe care ultimul impuls este încă abia măsurat. Deci, în cazul în care se detectează ceva, acest puls dispare imediat. A fost puțin problematic.

Fiecare undă a oscilației creează două întreruperi. Unul în timp ce coborâți și unul merge înapoi în sus. Pentru a seta tensiunea de referință exact la creasta unei unde de oscilație, timpul dintre coborâre și urcare trebuie să fie cât mai scurt posibil (vezi imaginea). Din păcate aici, cheltuielile generale ale mediului Arduino creează probleme.

Fiecare declanșator al întreruperii solicită acest cod:

ISR (ANALOG_COMP_vect) {

Toggle1 = Toggle0 // salvează ultima valoare Toggle0 = TCNT1; // obține o valoare nouă}

Acest cod durează ceva timp (dacă îmi amintesc bine, aproximativ 78 de cicluri de instrucțiuni care sunt de aproximativ 5 microsecunde @ 16MHz). Prin urmare, distanța minimă detectabilă între două impulsuri este exact timpul necesar acestui cod, dacă timpul dintre două declanșatoare devine mai scurt (a se vedea imaginea), acesta va rămâne nedetectat, deoarece codul este complet executat înainte de detectarea unei a doua întreruperi

Acest lucru duce la o pierdere a sensibilității. În același timp, am observat că amortizarea oscilațiilor este foarte sensibilă la orice influență externă, făcând astfel această abordare în total un pic dificilă.

2. Măsurarea frecvenței

Un alt mod de a detecta metalul este măsurarea frecvenței oscilației. Acest lucru are un mare avantaj în comparație cu măsurarea amortizării oscilației, deoarece schimbarea frecvenței permite discriminarea metalului. În cazul în care există material feros lângă bobină, frecvența va încetini, în cazul în care există metal prețios lângă bobină, frecvența va crește.

Cel mai simplu mod de a măsura frecvența este de a măsura cantitatea de impulsuri după ce bobinele încep să oscileze. Perioada de timp dintre start și ultimul impuls împărțită la cantitatea totală de impulsuri măsurate este frecvența. Din păcate, ultimele câteva oscilații sunt destul de nesimetrice. Deoarece prezența metalului influențează și decăderea oscilației, ultimele oscilații sunt și mai nesimetrice, citirile sunt dificil de interpretat. În imagine, aceasta este prezentată cu încrucișarea 1 la 1’și 2 la 2’.

O modalitate mai bună este, prin urmare, să folosiți câteva impulsuri anterioare pentru a măsura frecvența. În timpul testării, interesant am aflat că unele impulsuri sunt mai sensibile decât altele. Undeva la 2/3 din oscilații este un punct bun pentru a obține date.

Prelucrarea datelor

Codul inițial bazat pe bucla () care solicită o funcție puls () pentru a face sincronizarea bobinei. Deși rezultatele nu au fost rele, am avut dorința de a îmbunătăți calendarul. Pentru a face acest lucru, am creat un cod complet bazat pe temporizator, care a condus la modul instuctabil separat de programare a unui detector de metale bazat pe Arduino. Această instrucțiune explică în timp detalierea ieșirii LCD etc.

1. Ecranul LCD

Prima abordare a fost măsurarea a 10 impulsuri și apoi afișarea valorilor pe ecranul LCD. Pe măsură ce am aflat că transferul de date I2C a fost mult prea lent, am trecut la cod pentru a actualiza doar un caracter pe impuls.

2. Abordarea valorii minime

Pentru a îmbunătăți stabilitatea citirilor în continuare, am scris o rutină de ieșire serială pentru a obține o senzație mai bună pentru datele măsurate. Acolo a devenit evident că, deși majoritatea lecturilor erau oarecum stabile, unele nu erau! Unele citiri ale „aceluiași” impuls de oscilație erau atât de departe, încât ar distruge fiecare abordare pentru a analiza o schimbare de frecvență.

Pentru a compensa acest lucru, am creat o „frontieră” în cadrul căreia valoarea era de încredere. I. e. când valorile se aflau la mai mult de 35 de cicluri de timer1 distanță de valoarea așteptată, aceste valori au fost ignorate (explicat în detaliu în „Cum se programează un detector de metale bazat pe Arduino” instructabil)

Această abordare sa dovedit a fi foarte stabilă.

3. Tensiunea

Designul original al lui Teemo este alimentat sub 5 volți. Deoarece presupunerile mele erau „mai mulți volți = mai multă putere = mai multă sensibilitate”, am alimentat unitatea la început cu 12V. Acest lucru a dus la încălzirea MOSFET-ului. Această încălzire a dus apoi la o derivare generală a valorilor măsurate, ducând la reechilibrarea frecventă a detectorului. Prin scăderea tensiunii la 5V, generarea de căldură a MOSFET-ului ar putea fi redusă la un nivel în care nu s-a observat aproape nicio derivare a citirilor. Acest lucru a făcut circuitul și mai simplu, deoarece regulatorul de tensiune integrat al Arduino nu mai era necesar.

Pentru un MOSFET am ales inițial IRL540. Acest MOSFET este compatibil la nivel logic, dar are o tensiune maximă de 100V. Speram la o performanță mai bună, trecând la un IRL640 cu rating de 200V. Din păcate, rezultatele au fost aceleași. Deci, fie un IRL540, fie un IRL640 vor face treaba.

Pasul 3: Rezultate finale

Rezultate finale
Rezultate finale
Rezultate finale
Rezultate finale
Rezultate finale
Rezultate finale

Avantajul detectorului este că discriminează materialul prețios și cel feros. Dezavantajul este că sensibilitatea cu această schemă simplă nu este atât de bună. Pentru a compara performanța am folosit aceleași referințe ca și pentru detectorul Flip-Coil. Probabil bun pentru unele identificări, dar cel mai probabil dezamăgitor pentru căutări reale.

Aici designul original cu controlerul PIC ar putea fi mai sensibil deoarece funcționează pe 32MHz în loc de 16MHz pentru acesta, oferind o rezoluție mai mare pentru detectarea schimbărilor de frecvență.

Rezultatele au fost obținute utilizând bobina cu 48 de ture @ 100mm.

Ca întotdeauna, deschideți-vă pentru feedback

Recomandat: