Sisällysluettelo:

Arduino -pohjainen pulssininduktiotunnistin - kääntökela: 5 vaihetta (kuvilla)
Arduino -pohjainen pulssininduktiotunnistin - kääntökela: 5 vaihetta (kuvilla)

Video: Arduino -pohjainen pulssininduktiotunnistin - kääntökela: 5 vaihetta (kuvilla)

Video: Arduino -pohjainen pulssininduktiotunnistin - kääntökela: 5 vaihetta (kuvilla)
Video: Что купить новичку в Arduino? Большой обзор 2024, Heinäkuu
Anonim
Arduinopohjainen pulssininduktiotunnistin - kääntökela
Arduinopohjainen pulssininduktiotunnistin - kääntökela
Arduinopohjainen pulssininduktiotunnistin - kääntökela
Arduinopohjainen pulssininduktiotunnistin - kääntökela

Ajatus

Kun olin rakentanut joitakin metallinilmaisimia aiemmin vaihtelevilla tuloksilla, halusin tutkia Arduinon ominaisuuksia tähän suuntaan.

On olemassa hyviä esimerkkejä siitä, kuinka rakentaa metallinilmaisimia Arduinolla, jotkut tässä ohjeina. Mutta kun niitä tarkastellaan, ne vaativat yleensä joko jonkin verran ulkoisia komponentteja analogisen signaalin käsittelyyn tai herkkyys on melko alhainen.

Kun ajattelemme metallinilmaisimia, pääaihe on se, miten havaita pienet jännitteen muutokset hakukäämiin liittyvissä signaaleissa. Nämä muutokset ovat yleensä hyvin pieniä. Ilmeisin lähestymistapa olisi käyttää ATmega328: n analogisia tuloja. Mutta tarkasteltaessa teknisiä tietoja on kaksi perusongelmaa: ne ovat (usein) hitaita ja resoluutio on (useimmissa tapauksissa) alhainen.

Toisaalta Arduino toimii 16 MHz: n taajuudella ja sillä on melko paljon ajoitusominaisuuksia. e. resoluutio on 0,0625µS, jos käytetään kellonopeutta. Joten sen sijaan, että käytettäisiin analogista tuloa tunnistamiseen, yksinkertaisin tapa havaita pieniä dynaamisia jännitteen muutoksia on verrata jännitehäviön muutosta ajan kuluessa kiinteällä vertailujännitteellä.

Tätä tarkoitusta varten ATmega328: ssa on tyylikäs ominaisuus sisäisen vertailijan välillä D6 ja D7. Tämä vertailija voi laukaista keskeytyksen, mikä mahdollistaa tapahtumien tarkan käsittelyn. Jättämällä siististi koodattujen ajoitusrutiinien, kuten millis () ja micos (), ja siirtymällä ATmega328: n sisäiseen ajastimeen paljon suuremmalla resoluutiolla, Arduino on loistava perusta metallin havaitsemismenetelmille.

Lähdekoodinäkymästä katsottuna hyvä alku olisi ohjelmoida sisäinen vertailija "muuttamaan" tulojen napaisuutta ja käyttää sisäistä laskuria, jolla on suurin nopeus muutosten ajoituksen muuttamiseen.

Yleinen koodi Arduidossa tämän saavuttamiseksi on:

// Kaikkien vaadittujen esimuuttujien jne. Määrittäminen ja rekisterien määrittäminen

unsigned char clockSelectBits = _BV (CS10); // ei esiasetusta, täysi xtal void setup () {pinMode (6, INPUT); // + vertailusta - asettamalla ne tuloksi, ne // asetetaan suurelle impedanssille pinMode (7, INPUT); // - vertailusta - asettamalla ne INPUT -arvoksi, ne asetetaan // korkeaimpedanssiseksi cli (); // stop keskeyttää TCCR1A = 0; // aseta koko TCCR1A -rekisteri arvoon 0 TCCR1B = 0; // sama TCCR1B: lle -> normaalitilaTCNT1 = 0; // alustetaan laskurin arvoksi 0; TCCR1B | = clockSelectBits; // asettaa esiskaalan ja käynnistää kellon TIMSK1 = _BV (TOIE1); // asettaa ajastimen ylivuotokeskeytyksen sallivan bitin sei (); // salli keskeytykset ACSR = (0 << ACD) | // Analoginen vertailija: käytössä (0 << ACBG) | // Analog Comparator Bandgap Select: AIN0 käytetään positiiviseen tuloon (0 << ACO) | // Analoginen vertailulähtö: Pois (1 << ACI) | // Analogisen vertailijan keskeytyslippu: Tyhjennä odottava keskeytys (1 << ACIE) | // Analogisen vertailijan keskeytys: käytössä (0 << ACIC) | // Analogisen vertailutulon sieppaus: Pois käytöstä (0 << ACIS1 | 0 << ACIS0 // keskeytys lähdön vaihdossa // (0 << ACIS1 | 1 << ACIS0 // varattu // (1 << ACIS1 | 0 << ACIS0 // keskeytys laskevalla lähtöreunalla // (1 << ACIS1 | 1 << ACIS0 // keskeytys nousevalla tuloreunalla;}

// tätä rutiinia kutsutaan joka kerta, kun vertailija luo keskeytyksen

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

// tätä rutiinia kutsutaan joka kerta, kun sisäisessä laskurissa on ylivuoto

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// tätä rutiinia käytetään nollaamaan ajastin arvoon 0

void resetTimer (void) {oldSREG = SREG; cli (); // Keskeytysten poistaminen käytöstä TCNT1 = 0; // alustetaan laskurin arvoksi 0 SREG = oldSREG; // Palauta tilarekisteri TCCR1B | = clockSelectBits; // asettaa esiskaalan ja käynnistää kellon timer1_overflow_count = 0; // nollaa ylivuotolaskurin}

Tämä ajatus ei tietenkään ole täysin uusi. Pääosa tästä koodista löytyy muualta. Hyvä toteutus tällaisesta lähestymistavasta mikrokontrolleriin, joka löytyi TPIMD - Tiny Pulse Induction Metal Detector -sivulta.

www.miymd.com/index.php/projects/tpimd/ (valitettavasti tämä sivu ei ole enää online, tällä hetkellä on varmuuskopio sivustosta osoitteessa www.basic4mcu.com, etsi "TPIMD").

Vaihe 1: Arduino Pulse Induction Idea - Flip Coil

Arduino Pulse Induction Idea - kääntökela
Arduino Pulse Induction Idea - kääntökela
Arduino Pulse Induction Idea - kääntökela
Arduino Pulse Induction Idea - kääntökela

Ajatuksena on käyttää Arduinoa pulssin induktiotunnistimena, kuten TPIMD: ssä, koska hajoamiskäyrän ajoitusidea näyttää toimivan melko hyvin. Pulssininduktiotunnistimien ongelma on, että niiden on normaalisti toimittava eri jännitteellä. Yksi jännite kelan syöttämiseksi ja erillinen jännite hajoamiskäyrän käsittelemiseksi. Nämä kaksi jännitelähdettä tekevät pulssin induktiotunnistimista aina hieman monimutkaisia.

Tarkasteltaessa kelan jännitettä PI -ilmaisimessa tuloksena oleva käyrä voidaan jakaa kahteen eri vaiheeseen. Ensimmäinen vaihe on itse pulssi, joka syöttää kelalle ja rakentaa magneettikentän (1). Toinen vaihe on jännitteen alenemiskäyrä, joka alkaa jännitepiikistä ja sitten säädetään nopeasti kelan "ei-teho" -jännitteeseen (2). Ongelmana on, että kela muuttaa napaisuuttaan pulssin jälkeen. Onko pulssi positiivinen (muuttuja 1. oheisessa kuvassa), hajoamiskäyrä on negatiivinen. Jos pulssi on negatiivinen, hajoamiskäyrä on positiivinen (muuttuja 2 liitteenä olevassa kuvassa)

Tämän perusongelman ratkaisemiseksi kela on "käännettävä" elektronisesti pulssin jälkeen. Tässä tapauksessa pulssi voi olla positiivinen ja hajoamiskäyrä voi olla myös positiivinen.

Tämän saavuttamiseksi kela on eristettävä Vcc: stä ja GND: stä pulssin jälkeen. Tällä hetkellä vaimennusvastuksen läpi virtaa vain virta. Tämä eristetty kelan ja vaimennusvastuksen järjestelmä voi olla "suuntautunut" mihin tahansa vertailujännitteeseen. Tämä luo teoriassa yhdistetyn positiivisen käyrän (piirustuksen alareuna)

Tätä positiivista käyrää voidaan käyttää vertailijan avulla havaitsemaan ajankohta, jolloin hajoamisjännite "ylittää" vertailujännitteen. Jos aarteita on lähellä kelaa, hajoamiskäyrä muuttuu ja referenssijännitteen ylittävä ajankohta muuttuu. Tämä muutos voidaan havaita.

Kokeilun jälkeen seuraava piiri osoittautui toimivaksi.

Piiri koostuu Arduino Nano -moduulista. Tämä moduuli käyttää kahta MOSFET -transistoria, jotka käyttävät kelaa (SV3: ssa) D10: n kautta. Kun pulssi D10: ssä päättyy, molemmat MOSFET -laitteet eristävät kelan 12 V: sta ja GND: stä. Säädetty energia kelassa tyhjenee R2: n (220 ohmia) kautta. Samaan aikaan R1 (560 ohmia) yhdistää kelan entisen positiivisen puolen GND: hen. Tämä muuttaa negatiivisen hajoamiskäyrän R5: ssä (330 ohmia) positiiviseksi. Diodit suojaavat Arduinon tulotappia.

R7 on jännitteenjakaja noin 0,04 V jännitteellä. Tällä hetkellä hajoamiskäyrä D7: ssä on negatiivisempi kuin 0,04 D6: ssa, keskeytys laukaistaan ja pulssin päättymisen jälkeinen kesto tallennetaan.

Jos metalli on lähellä kelaa, hajoamiskäyrä kestää pidempään ja pulssin päättymisen ja keskeytyksen välinen aika pitenee.

Vaihe 2: Ilmaisimen (leipälevyn) rakentaminen

Ilmaisimen rakentaminen (Breadboard)
Ilmaisimen rakentaminen (Breadboard)
Ilmaisimen rakentaminen (Breadboard)
Ilmaisimen rakentaminen (Breadboard)
Ilmaisimen rakentaminen (Breadboard)
Ilmaisimen rakentaminen (Breadboard)

Ilmaisimen rakentaminen on melko helppoa. Tämä voidaan tehdä joko leipälevyllä (kiinni alkuperäisestä piiristä) tai juottamalla osat piirilevylle.

Arduino Nano -levyn D13 -LEDiä käytetään metallin merkkinä

Leipälevyn purkaminen on nopein tapa toimivaan ilmaisimeen. Johdotusta tarvitaan melko paljon, mutta tämä voidaan tehdä pienellä leipälevyllä. Kuvissa tämä näkyy kolmessa vaiheessa, kun Arduino ja MOSFET -laitteet piilottavat johtoja. Testatessani irrotin diodit jotenkin huomaamatta aluksi. Tällä ei ollut negatiivista vaikutusta ilmaisimen käyttäytymiseen. Piirin PCB -versiossa jätin ne kokonaan pois.

Kuvissa ei näy liitännät 0,96 OLED -näyttöön. Tämä näyttö on kytketty:

Vcc - 5V (Arduino -nastassa, ei syöttöjännitettä !!!)

GND - GND

SCL - A5

SDA - A4

Tätä OLED -näyttöä tarvitaan ilmaisimen kalibroimiseksi aluksi. Tämä tehdään asettamalla oikea jännite Arduinon PIN6 -koodiin. Tämän jännitteen tulisi olla noin 0,04 V. Näyttö auttaa oikean jännitteen asettamisessa.

Leipälautaversio toimii melko hyvin, vaikka luultavasti ei sovellu luontoon.

Vaihe 3: PCB: n käyttö

Menossa PCB
Menossa PCB
Menossa PCB
Menossa PCB
Menossa PCB
Menossa PCB
Menossa PCB
Menossa PCB

Mitä tulee juottamiseen, en todellakaan pidä kaksipuolisista korkean teknologian piirilevyistä, joten muutin piiriä sopimaan yksipuoliselle piirilevylle.

Seuraavat muutokset tehtiin:

1. diodit jätettiin pois.

2. MOSFET -laitteiden portit saivat 10 ohmin vastuksen

3. jännitteenjakajan syöttöjännite kohdassa D6 annetaan HIGH-tasosignaalilla kohdassa D8

4. MOSFET -laitteiden ajuritappi vaihdettiin.

Tällä tavalla voitaisiin luoda yksipuolinen piirilevy, joka voidaan juottaa yleispiirilevyihin. Tämän piirin avulla sinulla on toimiva PI-ilmaisin, jossa on vain 8-10 ulkoista komponenttia (riippuen siitä, käytetäänkö OLED-näyttöä ja/tai kaiutinta).

Vaihe 4: Ilmaisimen käyttöönotto ja käyttö

Ilmaisimen käyttöönotto ja käyttö
Ilmaisimen käyttöönotto ja käyttö
Ilmaisimen käyttöönotto ja käyttö
Ilmaisimen käyttöönotto ja käyttö
Ilmaisimen käyttöönotto ja käyttö
Ilmaisimen käyttöönotto ja käyttö

Jos ilmaisin on rakennettu oikein ja ohjelma on kirjoitettu Arduinolle, helpoin (ellei ainoa) tapa asentaa laite on käyttää OLED -näyttöä. Näyttö on liitetty 5V, GND, A4, A5. Näytön pitäisi näyttää "kalibrointi", kun laite käynnistetään. Muutaman sekunnin kuluttua näytössä pitäisi näkyä "kalibrointi suoritettu" ja kolme numeroa.

Ensimmäinen numero on kalibroinnin aikana tunnistettu viitearvo. Toinen arvo on viimeinen mitattu arvo ja kolmas arvo viimeisten 32 mittauksen keskiarvo.

Näiden kolmen arvon pitäisi olla suunnilleen samat (testitapauksissani alle 1000). Keskiarvon pitäisi olla enemmän tai vähemmän vakaa.

Alkuasetusten aloittamiseksi kelan lähellä ei saa olla metallia.

Jännitteenjakaja (trimmauspotentiometri) on nyt leikattava siten, että kaksi alinta arvoa asetetaan maksimiin ja samalla saadaan vakaa lukema. On kriittinen asetus, jossa keskiarvo alkaa antaa outoja lukemia. Käännä trimmeriä taaksepäin saadaksesi vakaat arvot uudelleen.

Näyttö saattaa jäätyä. Paina vain nollauspainiketta ja aloita alusta.

Asennuksessani (kela: 18 kierrosta 20 cm: n kohdalla) vakaa arvo on noin 630-650. Kun asetus on suoritettu, paina nollauspainiketta, laite kalibroi uudelleen ja kaikkien puun arvojen tulee olla jälleen samalla alueella. Jos metalli tuodaan nyt kelaan, Arduino-levyn (D13) LED-valon pitäisi syttyä. Liitetty kaiutin antaa napsautuksia (ohjelmoinnissa on parantamisen varaa).

Voit estää korkeat odotukset seuraavasti:

Ilmaisin havaitsee joitakin juttuja, mutta se on edelleen hyvin yksinkertainen ja rajoitettu ilmaisin.

Antaakseen vaikutelman ominaisuuksista a teki joitain vertailutarkastuksia erilaisten muiden ilmaisimien kanssa. Tuloksia tarkasteltaessa se on silti varsin vaikuttava ilmaisimelle, jossa on vain 8 ulkoista osaa, mutta joka ei vastaa ammattimaisia ilmaisimia.

Piiriä ja ohjelmaa tarkasteltaessa on paljon parantamisen varaa. Vastusten arvot löydettiin kokemuksella, pulssiaika 250 ms valittiin satunnaisesti, myös kelan parametrit. Jos sinulla on parannusideoita, keskustelen niistä mielelläni.

Pidä hauskaa!

Vaihe 5: Päivitys 1: 16x2 LCD -näytön käyttäminen

Päivitys 1: 16x2 LCD -näytön käyttäminen
Päivitys 1: 16x2 LCD -näytön käyttäminen
Päivitys 1: 16x2 LCD -näytön käyttäminen
Päivitys 1: 16x2 LCD -näytön käyttäminen
Päivitys 1: 16x2 LCD -näytön käyttäminen
Päivitys 1: 16x2 LCD -näytön käyttäminen

Parannuksia

Jatkotestauksen aikana huomasin, että I2C OLED -näytön kirjasto käytti paljon aikaa. Joten päätin käyttää sen sijaan 16x2 -näyttöä, jossa on I2C -muunnin.

Joten otin ohjelman LCD -näyttöön lisäämällä hyödyllisiä ominaisuuksia. Näytön ensimmäinen rivi näyttää nyt mahdollisen ilmoituksen signaalin voimakkuuden. Toisella rivillä näkyy nyt kaksi arvoa. Nyrkki osoitti signaalin nykyisen poikkeaman kalibrointiarvoon verrattuna. Tämän arvon tulee olla "0". Jos tämä arvo on jatkuvasti negatiivinen tai positiivinen, ilmaisin on kalibroitava uudelleen painamalla nollauspainiketta. Positiiviset arvot osoittavat metallia kelan lähellä.

Toinen arvo näyttää hajoamiskäyrän todellisen viivearvon. Tämä arvo ei yleensä ole kovin mielenkiintoinen, mutta sitä tarvitaan ilmaisimen alkuasetuksiin.

Ohjelma sallii nyt useita pulssiaikoja peräkkäin (keinot kokeilla / parantaa suorituskykyä). En saavuttanut läpimurtoa. Oletusarvo on siis yksi pulssin kesto.

Ilmaisimen alkuasennus

Kun asennat ilmaisinta, toisen rivin toinen arvo on merkityksellinen (ensimmäinen voidaan jättää huomiotta). Aluksi arvo voi olla "epävakaa" (katso kuva). Kierrä säätövastusta, kunnes arvo on vakaa. Käännä sitä sitten lisätäksesi arvoa vakaan enimmäisarvoon. Kalibroi uudelleen painamalla nollauspainiketta ja ilmaisin on käyttövalmis.

Sain vaikutelman, että asettamalla suurimman vakaan arvon menetin herkkyyteni ei-rautametalleille. Joten saattaa olla syytä kokeilla asetuksia, jotta herkkyys ei-rauta-aineille olisi hyvä.

Kelat

Rakennan 3 kelaa jatkotestausta varten

1 -> 18 kierrosta @ 200 mm

2 -> 25 kierrosta 100 mm: n kohdalla

3 -> 48 kierrosta @ 100 mm

Mielenkiintoista on, että kaikki kelat toimivat melko hyvin, lähes samalla suorituskyvyllä (20 ct kolikko 40-50 mm ilmassa). Tämä voi olla melko subjektiivinen havainto.

Suositeltava: