Cuprins:

Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil: 5 pași (cu imagini)
Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil: 5 pași (cu imagini)

Video: Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil: 5 pași (cu imagini)

Video: Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil: 5 pași (cu imagini)
Video: Magnetron | Sistem Radar | Tehnică militară 2024, Iulie
Anonim
Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil
Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil
Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil
Detector cu inducție de impulsuri pe bază de Arduino - Flip Coil

Ideea

După ce am construit în trecut niște detectoare de metale cu rezultate variate, am vrut să explorez capacitățile Arduino în acea direcție.

Există câteva exemple bune despre cum să construiți detectoare de metale cu Arduino, unele aici ca instructabile. Dar atunci când le privim, ele necesită în mod normal fie câteva componente externe pentru tratamentul semnalului analogic, fie sensibilitatea este destul de scăzută.

Când ne gândim la detectoarele de metale, subiectul principal este cum să sesizăm modificările ușoare ale tensiunii în semnale legate de bobina de căutare. Aceste modificări sunt în mod normal foarte mici. Cea mai evidentă abordare ar fi în utilizarea intrărilor analogice ale ATmega328. Dar uitându-ne la specificații există două probleme de bază: acestea (adesea) trebuie să încetinească și rezoluția este (în majoritatea cazurilor) la scăzută.

Pe de altă parte, Arduino rulează la 16 MHz și are destul de multe capacități de sincronizare i. e. o rezoluție de 0,0625µS dacă se utilizează viteza de ceas. Deci, în loc să utilizați intrarea analogică pentru detectare, cel mai simplu mod de a detecta mici modificări dinamice de tensiune este de a compara modificarea căderii de tensiune în timp la o tensiune de referință fixă.

În acest scop, ATmega328 are caracteristica îngrijită a unui comparator intern între D6 și D7. Acest comparator poate declanșa o întrerupere, permițând gestionarea precisă a evenimentelor. Lăsând alături rutinele de sincronizare bine codificate, cum ar fi millis () și micos () și intrând în temporizatorul intern al ATmega328 cu o rezoluție mult mai mare, Arduino este o bază excelentă pentru abordările de detectare a metalelor.

Deci, dintr-o vizualizare a codului sursă, un bun început ar fi programarea comparatorului intern pentru „schimbarea” polarității intrărilor și utilizarea unui contor intern cu cea mai mare viteză posibilă pentru schimbarea timpului modificărilor.

Codul general din Arduido pentru a realiza acest lucru este:

// Definirea tuturor variabilelor pre necesare etc. și configurarea registrelor

ceas de caractere nesemnat SelectBits = _BV (CS10); // fără presetare, configurare completă xtal void () {pinMode (6, INPUT); // + al comparatorului - setându-le ca INPUT, acestea sunt // setate la impedanță mare pinMode (7, INPUT); // - al comparatorului - prin setarea lor ca INPUT, acestea sunt // setate la impedanță mare cli (); // stop întrerupe TCCR1A = 0; // setați întregul registru TCCR1A la 0 TCCR1B = 0; // la fel pentru TCCR1B -> modul normalTCNT1 = 0; // inițializează valoarea contorului la 0; TCCR1B | = clockSelectBits; // setează prescalerul și pornește ceasul TIMSK1 = _BV (TOIE1); // setează temporizatorul de revărsare a întreruperii bitului de activare sei (); // permite întreruperi ACSR = (0 << ACD) | // Comparator analogic: Activat (0 << ACBG) | // Comparator analog Bandgap Select: AIN0 se aplică intrării pozitive (0 << ACO) | // Ieșire comparator analog: Dezactivat (1 << ACI) | // Semnal de întrerupere a comparatorului analogic: ștergeți întreruperea în așteptare (1 << ACIE) | // Întrerupere comparator analog: Activat (0 << ACIC) | // Captură de intrare analog comparator: Dezactivată (0 << ACIS1 | 0 << ACIS0 // întrerupere la comutare ieșire // (0 << ACIS1 | 1 << ACIS0 // rezervat // (1 << ACIS1 | 0 << ACIS0 // întrerupere la marginea de ieșire care cade // (1 << ACIS1 | 1 << ACIS0 // întrerupere la marginea de intrare în creștere;}

// această rutină este apelată de fiecare dată când comparatorul creează o întrerupere

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

// această rutină este apelată de fiecare dată când există o revărsare în contorul intern

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// această rutină este utilizată pentru a reseta temporizatorul la 0

void resetTimer (void) {oldSREG = SREG; cli (); // Dezactivează întreruperile TCNT1 = 0; // inițializează valoarea contorului la 0 SREG = oldSREG; // Restabiliți registrul de stare TCCR1B | = clockSelectBits; // setează prescalerul și pornește cronometrul ceasului1_overflow_count = 0; // resetează contorul de revărsare}

Desigur, această idee nu este complet nouă. Partea principală a acestui cod poate fi găsită în altă parte. O implementare bună, un astfel de abordare pentru un microcontroler găsit pe pagina de pornire TPIMD - Tiny Pulse Induction Metal Detector.

www.miymd.com/index.php/projects/tpimd/ (din păcate această pagină nu mai este online, există în prezent o copie de rezervă a site-ului la www.basic4mcu.com, căutați „TPIMD”).

Pasul 1: Ideea de inducție a impulsului Arduino - Flip Coil

Ideea de inducție a impulsului Arduino - Flip Coil
Ideea de inducție a impulsului Arduino - Flip Coil
Ideea de inducție a impulsului Arduino - Flip Coil
Ideea de inducție a impulsului Arduino - Flip Coil

Ideea este să folosiți Arduino ca detector de inducție a impulsurilor, ca în TPIMD, deoarece ideea de sincronizare a curbei de descompunere pare să funcționeze destul de bine. Problema cu detectoarele cu inducție de impulsuri este că, în mod normal, trebuie să aibă tensiune diferită pentru a funcționa. O tensiune pentru alimentarea bobinei și o tensiune separată pentru a face față curbei de descompunere. Aceste două surse de tensiune fac detectoarele cu inducție de impuls întotdeauna puțin complicate.

Privind tensiunea bobinei într-un detector PI, curba rezultată poate fi divizată în două etape diferite. Prima etapă este pulsul în sine care alimentează bobina și construiește câmpul magnetic (1). A doua etapă este curba de descompunere a tensiunii, începând cu un vârf de tensiune, apoi ajustându-se rapid la tensiunea „fără putere” a bobinei (2). Problema este că bobina își schimbă polaritatea după puls. Este pulsul pozitiv (Var 1. în imaginea atașată) curba de decădere este negativă. Este pulsul negativ, curba de descompunere va fi pozitivă (Var 2. în imaginea atașată)

Pentru a rezolva această problemă de bază, bobina trebuie să fie „răsturnată” electronic după puls. În acest caz, pulsul poate fi pozitiv, iar curba de descompunere poate fi pozitivă.

Pentru a realiza acest lucru, bobina trebuie izolată de Vcc și GND după impuls. În acest moment, există doar un curent care curge printr-un rezistor de amortizare. Acest sistem izolat de bobină și rezistență de amortizare poate fi „orientat” către orice tensiune de referință. Aceasta, în teorie, va crea curba pozitivă combinată (partea de jos a desenului)

Această curbă pozitivă poate fi utilizată prin intermediul comparatorului pentru a detecta momentul în care tensiunea de descompunere „traversează” o tensiune de referință. În cazul comorilor apropiate de bobină, curba de descompunere se schimbă și punctul de timp care traversează tensiunea de referință se schimbă. Această modificare poate fi decât detectată.

După câteva experimente, circuitul următor s-a dovedit a funcționa.

Circuitul este format dintr-un modul Arduino Nano. Acest modul acționează două tranzistoare MOSFET care alimentează bobina (la SV3) prin D10. Când pulsul la D10 se termină, ambele MOSFET izolează bobina de 12V și GND. Energia economisită în bobină sângerează prin R2 (220 Ohmi). În același timp, R1 (560 Ohmi) conectează fosta parte pozitivă a bobinei la GND. Aceasta schimbă curba de descompunere negativă la R5 (330 Ohmi) într-o curbă pozitivă. Diodele protejează pinul de intrare al Arduino.

R7 este un separator de tensiune la aproximativ 0,04V. În momentul în care curba de descompunere la D7 devine mai negativă decât 0,04 la D6 se declanșează o întrerupere și se salvează durata după sfârșitul impulsului.

În cazul unui metal aproape de bobină, curba de descompunere durează mai mult, iar timpul dintre sfârșitul impulsului și întrerupere devine mai lung.

Pasul 2: Construirea detectorului (Breadboard)

Construirea detectorului (Breadboard)
Construirea detectorului (Breadboard)
Construirea detectorului (Breadboard)
Construirea detectorului (Breadboard)
Construirea detectorului (Breadboard)
Construirea detectorului (Breadboard)

Construirea detectorului este destul de ușoară. Acest lucru se poate face fie pe o placă de prindere (lipindu-se de circuitul original), fie prin lipirea pieselor de pe un PCB.

LED-ul D13 de pe placa Arduino Nano este folosit ca indicație pentru metal

Deschiderea unei plăci este cea mai rapidă cale către detectorul de lucru. Este nevoie de destul de multe cabluri, totuși acest lucru se poate face printr-o placă mică. În imagini, acest lucru este afișat în 3 pași, deoarece Arduino și MOSFET-urile ascund câteva fire. La testare, am deconectat diodele cumva fără să observ la început. Acest lucru nu a avut niciun efect negativ asupra comportamentului detectorului. În versiunea PCB a circuitului le-am lăsat complet.

Nu sunt afișate pe imagini conexiunile la un ecran OLED 0.96. Acest afișaj este conectat:

Vcc - 5V (la pinul Arduino, nu tensiunea de alimentare !!!)

GND - GND

SCL - A5

SDA - A4

Acest afișaj OLED este necesar pentru calibrarea detectorului inițial. Acest lucru se face prin setarea tensiunii potrivite la PIN6 al Arduino. Această tensiune ar trebui să fie în jur de 0,04V. Afișajul ajută la setarea tensiunii potrivite.

Versiunea de panou de lucru funcționează destul de bine, deși probabil nu este potrivită pentru a intra în sălbăticie.

Pasul 3: Mergând PCB

Merg PCB
Merg PCB
Merg PCB
Merg PCB
Merg PCB
Merg PCB
Merg PCB
Merg PCB

În ceea ce privește lipirea, nu-mi place PCB-ul de înaltă tehnologie cu două fețe, așa că am modificat circuitul pentru a se potrivi pe un PCB pe o parte.

S-au făcut următoarele modificări:

1. diodele au fost lăsate în afara.

2. porțile MOSFET-urilor au primit o rezistență de 10 Ohm

3. tensiunea de alimentare pentru divizorul de tensiune la D6 este dată de un semnal de nivel ÎNALT la D8

4. pinul driverului pentru MOSFET-uri a fost schimbat.

În acest fel, ar putea fi creat un PCB cu o singură față care poate fi lipit pe PCB-uri universale. Folosind acest circuit veți avea un detector PI funcțional cu doar 8-10 componente externe (în funcție de afișajul OLED și / sau difuzor).

Pasul 4: Configurarea și utilizarea detectorului

Configurarea și utilizarea detectorului
Configurarea și utilizarea detectorului
Configurarea și utilizarea detectorului
Configurarea și utilizarea detectorului
Configurarea și utilizarea detectorului
Configurarea și utilizarea detectorului

Dacă detectorul este construit corect și programul este scris pe Arduino, cel mai simplu (dacă nu singurul) mod de configurare a unității este să folosiți un afișaj OLED. Afișajul este atașat la 5V, GND, A4, A5. Afișajul trebuie să afișeze „calibrarea” după ce unitatea este alimentată. După câteva secunde, ar trebui să scrie „calibrare realizată” și trei numere ar trebui să fie afișate pe afișaj.

Primul număr este „valoarea de referință” identificată în timpul calibrării. A doua valoare este ultima valoare măsurată și a treia valoare este o valoare medie a ultimelor 32 de măsurători.

Aceste trei valori ar trebui să fie mai mult sau mai puțin aceleași (în cazurile mele de testare sub 1000). Valoarea medie ar trebui să fie mai mult sau mai puțin stabilă.

Pentru a începe configurarea inițială, nu ar trebui să existe niciun metal lângă bobină.

Acum divizorul de tensiune (potențiometrul de decupare) ar trebui să fie decupat, astfel încât cele două valori inferioare să fie setate la un nivel maxim, în timp ce se dă citire stabilă. Există un cadru critic, în care valoarea de mijloc începe să dea lecturi ciudate. Întoarceți aparatul de tuns înapoi pentru a obține din nou valori stabile.

S-ar putea întâmpla ca ecranul să blocheze. Doar apăsați butonul de resetare și reporniți.

Pentru configurarea mea (bobină: 18 spire @ 20cm) valoarea stabilă este în jur de 630-650. Odată setat, apăsați butonul de resetare, unitatea se recalibrează și toate valorile arborelui ar trebui să fie din nou în același interval. Dacă acum metalul este adus la bobină, LED-ul de pe placa Arduino (D13) ar trebui să se aprindă. Un difuzor atașat dă niște zgomote de clic (există ceva spațiu de îmbunătățire în programarea de acolo).

Pentru a preveni așteptările mari:

Detectorul detectează unele lucruri, dar rămâne un detector foarte simplu și limitat.

Pentru a da o impresie despre capacități, a făcut câteva detecții de referință cu alți detectori diferiți. Privind rezultatele, este încă destul de impresionant pentru un detector cu doar 8 piese externe, dar care nu se potrivește cu detectoarele profesionale.

Privind circuitul și programul, există mult spațiu de îmbunătățit. Valorile rezistențelor au fost găsite prin experiență, timpul pulsului de 250 ms a fost ales aleatoriu, parametrii bobinei, de asemenea. Dacă aveți idei de îmbunătățiri, aș fi mai mult decât fericit să le discut.

A se distra!

Pasul 5: Actualizare 1: Folosirea unui ecran LCD de 16x2

Actualizare 1: utilizarea unui ecran LCD de 16x2
Actualizare 1: utilizarea unui ecran LCD de 16x2
Actualizare 1: folosirea unui ecran LCD de 16x2
Actualizare 1: folosirea unui ecran LCD de 16x2
Actualizare 1: folosind un ecran LCD de 16x2
Actualizare 1: folosind un ecran LCD de 16x2

Îmbunătățiri

În timpul testelor ulterioare, mi-am dat seama că biblioteca pentru afișajul O2 I2C consuma un timp considerabil. Așa că am decis să folosesc un afișaj de 16x2 cu un convertor I2C.

Așa că am adoptat programul pe ecranul LCD adăugând câteva caracteristici utile. Prima linie a afișajului arată acum puterea semnalului unei eventuale indicații. A doua linie arată acum două valori. Pumnul a indicat abaterea curentă a semnalului în comparație cu valoarea de calibrare. Această valoare ar trebui să fie „0”. Dacă această valoare este constant negativă sau pozitivă, detectorul trebuie recalibrat apăsând butonul de resetare. Valorile pozitive indică metalul aproape de bobină.

A doua valoare arată valoarea de întârziere reală a curbei de descompunere. Această valoare nu este în mod normal atât de interesantă, dar este necesară pentru configurarea inițială a detectorului.

Programul permite acum mai multe durate de impuls într-o secvență (mijloace de experimentare / îmbunătățire a performanței). Nu am realizat nicio pauză. Deci, valoarea implicită este setată la o durată de impuls.

Configurarea inițială a detectorului

La configurarea detectorului, a doua valoare a celei de-a doua linii este relevantă (prima poate fi ignorată). Initial valoarea poate fi „instabila” (vezi poza). Rotiți rezistorul de tăiere până când valoarea ajunge la o citire stabilă. Apoi rotiți-l pentru a crește valoarea la o valoare maximă stabilă. Apăsați butonul de resetare pentru a recalibra și detectorul este gata de utilizare.

Am avut impresia că, stabilind valoarea maximă stabilă, am pierdut sensibilitatea pentru metalele neferice. Așadar, ar merita să experimentați setările pentru a avea o bună sensibilitate pentru lucrurile care nu sunt de fier.

Bobine

Construiesc 3 bobine pentru teste ulterioare

1 -> 18 spire @ 200mm

2 -> 25 spire @ 100mm

3 -> 48 spire @ 100mm

Interesant este că toate bobinele au funcționat destul de bine, cu aproape aceeași performanță (monedă de 20ct la 40-50mm în aer). Aceasta ar putea fi o observație destul de subiectivă.

Recomandat: