Satura rādītājs:

Arduino bāzes impulsa indukcijas detektors - pagrieziena spole: 5 soļi (ar attēliem)
Arduino bāzes impulsa indukcijas detektors - pagrieziena spole: 5 soļi (ar attēliem)

Video: Arduino bāzes impulsa indukcijas detektors - pagrieziena spole: 5 soļi (ar attēliem)

Video: Arduino bāzes impulsa indukcijas detektors - pagrieziena spole: 5 soļi (ar attēliem)
Video: Торий: энергетическое решение - THORIUM REMIX 2011 2024, Jūlijs
Anonim
Arduino bāzes impulsa indukcijas detektors - Flip spole
Arduino bāzes impulsa indukcijas detektors - Flip spole
Arduino bāzes impulsa indukcijas detektors - Flip spole
Arduino bāzes impulsa indukcijas detektors - Flip spole

Ideja

Iepriekš izveidojot dažus metāla detektorus ar dažādiem rezultātiem, es vēlējos izpētīt Arduino iespējas šajā virzienā.

Ir daži labi piemēri, kā izveidot metāla detektorus, izmantojot Arduino, daži šeit ir norādījumi. Bet, aplūkojot tos, analogā signāla apstrādei parasti ir vajadzīgi daži ārēji komponenti vai arī jutība ir diezgan zema.

Domājot par metāla detektoriem, galvenā tēma ir par to, kā uztvert nelielas sprieguma izmaiņas signālos, kas saistīti ar meklēšanas spoli. Šīs izmaiņas parasti ir ļoti nelielas. Acīmredzamākā pieeja būtu izmantot ATmega328 analogās ieejas. Bet, aplūkojot specifikācijas, ir divas pamata problēmas: tās (bieži) ir lēnas un izšķirtspēja (vairumā gadījumu) ir zema.

No otras puses, Arduino darbojas ar frekvenci 16MHz, un tam ir diezgan daudz laika iespēju, t.i. e. izšķirtspēja ir 0,0625 µS, ja tiek izmantots pulksteņa ātrums. Tātad, tā vietā, lai sensori izmantotu analogo ieeju, vienkāršākais veids, kā noteikt nelielas dinamiskas sprieguma izmaiņas, ir salīdzināt sprieguma krituma izmaiņas laika gaitā ar fiksētu atsauces spriegumu.

Šim nolūkam ATmega328 ir laba iekšējā salīdzinājuma iezīme starp D6 un D7. Šis salīdzinātājs var izraisīt pārtraukumu, nodrošinot precīzu notikumu apstrādi. Arduino ir lielisks kodēta laika noteikšanas režīms, piemēram, millis () un micos () un ATmega328 iekšējais taimeris ar daudz augstāku izšķirtspēju, un tas ir lielisks pamats metālu noteikšanas pieejām.

No avota koda viedokļa labs sākums būtu ieprogrammēt iekšējo salīdzinātāju, lai “mainītu” ievades polaritāti un izmantotu iekšējo skaitītāju ar vislielāko iespējamo ātrumu izmaiņu laika maiņai.

Vispārējais kods Arduido, lai to panāktu, ir šāds:

// Visu nepieciešamo mainīgo definēšana utt. Un reģistru iestatīšana

unsigned char clockSelectBits = _BV (CS10); // nav iepriekšēja mēroga, pilna xtal void setup () {pinMode (6, INPUT); // + salīdzinājuma - nosakot tos kā INPUT, tie tiek // iestatīti uz augstas pretestības pinMode (7, INPUT); // - salīdzinātājam - nosakot tos kā IEVADI, tie tiek // iestatīti uz augstas pretestības cli (); // stop pārtrauc TCCR1A = 0; // iestatīt visu TCCR1A reģistru uz 0 TCCR1B = 0; // tas pats TCCR1B -> normāls režīmsTCNT1 = 0; // inicializēt skaitītāja vērtību uz 0; TCCR1B | = clockSelectBits; // iestata prescaler un iedarbina pulksteni TIMSK1 = _BV (TOIE1); // iestata taimera pārplūdes pārtraukšanas iespējošanas bitu sei (); // atļaut pārtraukumus ACSR = (0 << ACD) | // Analog Comparator: Enabled (0 << ACBG) | // Analog Comparator Bandgap Select: AIN0 tiek lietots pozitīvajai ievadei (0 << ACO) | // Analogā salīdzinātāja izeja: izslēgta (1 << ACI) | // Analog Comparator Interrupt Flag: Clear Pending Interrupt (1 << ACIE) | // Analog Comparator Interrupt: Enabled (0 << ACIC) | // Analogā salīdzinātāja ievades uztveršana: atspējota (0 << ACIS1 | 0 << ACIS0 // pārtraukt, izejot pārslēgšanai // (0 << ACIS1 | 1 << ACIS0 // rezervēts // (1 << ACIS1 | 0 << ACIS0 // pārtraukt uz krītošas izvades malas // (1 << ACIS1 | 1 << ACIS0 // pārtraukt, pieaugot ievades malai;}

// šī rutīna tiek izsaukta katru reizi, kad salīdzinātājs rada pārtraukumu

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

// šī rutīna tiek izsaukta katru reizi, kad iekšējā skaitītājā notiek pārpilde

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// šī kārtība tiek izmantota, lai taimeri atiestatītu uz 0

void resetTimer (void) {oldSREG = SREG; cli (); // Atspējot pārtraukumus TCNT1 = 0; // inicializēt skaitītāja vērtību uz 0 SREG = oldSREG; // Atjaunot statusa reģistru TCCR1B | = clockSelectBits; // iestata prescaler un sāk pulksteni timer1_overflow_count = 0; // atiestata pārpildes skaitītāju}

Protams, šī ideja nav pilnīgi jauna. Šī koda galveno daļu var atrast citur. Laba šāda ieviešana mikrokontrolleram, kas atrasts TPIMD - Tiny Pulse Induction Metal Detector mājas lapā.

www.miymd.com/index.php/projects/tpimd/ (diemžēl šī lapa vairs nav tiešsaistē, pašlaik ir vietnes rezerves kopija vietnē www.basic4mcu.com, meklējiet "TPIMD").

1. solis: Arduino impulsa indukcijas ideja - Flip spole

Arduino impulsa indukcijas ideja - Flip spole
Arduino impulsa indukcijas ideja - Flip spole
Arduino impulsa indukcijas ideja - Flip spole
Arduino impulsa indukcijas ideja - Flip spole

Ideja ir izmantot Arduino kā impulsa indukcijas detektoru, tāpat kā TPIMD, jo šķiet, ka sabrukšanas līknes laika ideja darbojas diezgan labi. Pulsa indukcijas detektoru problēma ir tāda, ka tiem parasti ir nepieciešams atšķirīgs spriegums, lai tie darbotos. Viens spriegums spoles barošanai un atsevišķs spriegums, lai tiktu galā ar sabrukšanas līkni. Šie divi sprieguma avoti padara impulsu indukcijas detektorus vienmēr mazliet sarežģītus.

Aplūkojot spoles spriegumu PI detektorā, iegūto līkni var sadalīt divos dažādos posmos. Pirmais posms ir impulss, kas baro spoli un veido magnētisko lauku (1). Otrais posms ir sprieguma samazināšanās līkne, sākot ar sprieguma maksimumu, pēc tam ātri pielāgojoties spoles "bez strāvas" spriegumam (2). Problēma ir tā, ka spole pēc impulsa maina savu polaritāti. Vai pulss ir pozitīvs (1. attēls pievienotajā attēlā), sabrukšanas līkne ir negatīva. Ja pulss ir negatīvs, sabrukšanas līkne būs pozitīva (2. variants pievienotajā attēlā)

Lai atrisinātu šo pamatproblēmu, spole pēc impulsa ir elektroniski “jāapgriež”. Šajā gadījumā pulss var būt pozitīvs, un sabrukšanas līkne var būt arī pozitīva.

Lai to panāktu, spole pēc impulsa ir jāizolē no Vcc un GND. Šobrīd caur slāpēšanas rezistoru plūst tikai strāva. Šī izolētā spoles un amortizācijas rezistora sistēma var būt “orientēta” uz jebkuru atskaites spriegumu. Tas teorētiski radīs kombinēto pozitīvo līkni (zīmējuma apakšdaļa)

Šo pozitīvo līkni var izmantot, izmantojot salīdzinātāju, lai noteiktu laiku, kad sabrukšanas spriegums “šķērso” atsauces spriegumu. Dārgumu gadījumā spoles tuvumā mainās sabrukšanas līkne un mainās atskaites sprieguma šķērsošanas laiks. Šīs izmaiņas var atklāt.

Pēc dažiem eksperimentiem izrādījās, ka šī shēma darbojas.

Ķēde sastāv no Arduino Nano moduļa. Šis modulis vada divus MOSFET tranzistorus, kas baro spoli (pie SV3), izmantojot D10. Kad impulss D10 beidzas, abi MOSFET izolē spoli no 12 V un GND. Spolē ietaupītā enerģija izplūst caur R2 (220 omi). Tajā pašā laikā R1 (560 omi) savieno spoles bijušo pozitīvo pusi ar GND. Tas maina negatīvās sabrukšanas līkni pie R5 (330 omi) uz pozitīvu līkni. Diodes aizsargā Arduino ievades tapu.

R7 ir sprieguma sadalītājs pie aptuveni 0,04 V. Šobrīd sabrukšanas līkne pie D7 kļūst negatīvāka nekā 0,04 pie D6, tiek pārtraukts un tiek saglabāts ilgums pēc impulsa beigām.

Ja metāls atrodas spoles tuvumā, sabrukšanas līkne ilgst ilgāk, un laiks starp impulsa beigām un pārtraukumu kļūst garāks.

2. darbība. Detektora (maizes dēļa) izveide

Detektora izveide (maizes dēlis)
Detektora izveide (maizes dēlis)
Detektora izveide (maizes dēlis)
Detektora izveide (maizes dēlis)
Detektora izveide (maizes dēlis)
Detektora izveide (maizes dēlis)

Detektora izveide ir diezgan vienkārša. To var izdarīt vai nu uz maizes dēļa (pieturoties pie sākotnējās shēmas), vai pielodējot detaļas uz PCB.

D13 gaismas diode uz Arduino Nano plates tiek izmantota kā norāde uz metālu

Maizes dēļa atvienošana ir ātrākais veids, kā strādāt ar detektoru. Nepieciešama diezgan liela elektroinstalācija, tomēr to var izdarīt ar nelielu maizes dēli. Attēlos tas ir parādīts 3 soļos, jo Arduino un MOSFET slēpj dažus vadus. Pārbaudot, es kaut kā, sākotnēji nemanot, atvienoju diodes. Tam nebija negatīvas ietekmes uz detektora uzvedību. Ķēdes PCB versijā es tos pilnībā atstāju.

Attēlos nav parādīti savienojumi ar 0,96 OLED displeju. Šis displejs ir savienots:

Vcc - 5V (pie Arduino tapas, nevis barošanas sprieguma !!!)

GND - GND

SCL - A5

SDA - A4

Šis OLED displejs ir nepieciešams, lai sākotnēji kalibrētu detektoru. Tas tiek darīts, iestatot pareizo spriegumu Arduino PIN6. Šim spriegumam jābūt aptuveni 0,04 V. Displejs palīdz iestatīt pareizo spriegumu.

Maizes dēļa versija darbojas diezgan labi, lai gan, iespējams, nav piemērota iziešanai savvaļā.

3. solis: iet PCB

Notiek PCB
Notiek PCB
Notiek PCB
Notiek PCB
Notiek PCB
Notiek PCB
Notiek PCB
Notiek PCB

Kas attiecas uz lodēšanu, man īsti nepatīk divpusēji augsto tehnoloģiju PCB, tāpēc es pārveidoju ķēdi, lai tā ietilptu vienpusējā PCB.

Tika veiktas šādas izmaiņas:

1. diodes tika izlaistas.

2. MOSFET vārti ieguva 10 omu rezistoru

3. barošanas spriegumu sprieguma dalītājam pie D6 nosaka HIGH līmeņa signāls pie D8

4. tika nomainīta MOSFET draivera tapa.

Tādā veidā varētu izveidot vienpusēju PCB, ko var pielodēt uz universālajiem PCB. Izmantojot šo shēmu, jums būs strādājošs PI detektors ar tikai 8-10 ārējiem komponentiem (atkarībā no tā, vai tiek izmantots OLED displejs un/vai skaļrunis).

4. darbība. Detektora uzstādīšana un lietošana

Detektora uzstādīšana un lietošana
Detektora uzstādīšana un lietošana
Detektora uzstādīšana un lietošana
Detektora uzstādīšana un lietošana
Detektora uzstādīšana un lietošana
Detektora uzstādīšana un lietošana

Ja detektors ir pareizi uzbūvēts un programma ir ierakstīta Arduino, vienkāršākais (ja ne vienīgais) ierīces iestatīšanas veids ir OLED displeja izmantošana. Displejs ir pievienots 5V, GND, A4, A5. Displejā vajadzētu parādīties “kalibrēšana” pēc iekārtas ieslēgšanas. Pēc dažām sekundēm vajadzētu redzēt “kalibrēšana pabeigta”, un displejā jāparāda trīs cipari.

Pirmais skaitlis ir “atsauces vērtība”, kas identificēta kalibrēšanas laikā. Otrā vērtība ir pēdējā izmērītā vērtība, bet trešā-pēdējo 32 mērījumu vidējā vērtība.

Šīm trim vērtībām vajadzētu būt vairāk vai mazāk vienādām (manos testa gadījumos zem 1000). Vidējai vērtībai jābūt vairāk vai mazāk stabilai.

Lai sāktu sākotnējo iestatīšanu, spoles tuvumā nedrīkst būt metāla.

Tagad sprieguma dalītājs (apdares potenciometrs) ir jāapgriež tā, lai abas zemākās vērtības būtu maksimāli iestatītas, vienlaikus saglabājot stabilu rādījumu. Pastāv kritisks iestatījums, kurā vidējā vērtība sāk sniegt dīvainus rādījumus. Pagrieziet trimmeri atpakaļ, lai atkal iegūtu stabilas vērtības.

Var gadīties, ka displejs sasalst. Vienkārši nospiediet atiestatīšanas pogu un sāciet no jauna.

Manai iestatīšanai (spole: 18 pagriezieni @ 20 cm) stabila vērtība ir aptuveni 630-650. Kad iestatīts, nospiediet atiestatīšanas pogu, iekārta veic atkārtotu kalibrēšanu, un visām koku vērtībām atkal jābūt vienā diapazonā. Ja metāls tagad tiek savests uz spoles, Arduino-Board (D13) gaismas diodei vajadzētu iedegties. Pievienotais skaļrunis rada dažus klikšķu trokšņus (tur ir dažas iespējas uzlabot programmēšanu).

Lai novērstu lielas cerības:

Detektors atklāj dažas lietas, taču tas paliek ļoti vienkāršs un ierobežots detektors.

Lai radītu iespaidu par iespējām, a veica dažus atsauces atklājumus ar dažādiem citiem detektoriem. Aplūkojot rezultātus, tas joprojām ir diezgan iespaidīgs detektoram, kurā ir tikai 8 ārējās daļas, bet kas neatbilst profesionāliem detektoriem.

Aplūkojot ķēdi un programmu, ir daudz iespēju uzlabot. Rezistoru vērtības tika atrastas pēc pieredzes, impulsa laiks 250 ms tika izvēlēts nejauši, spoles parametri arī. Ja jums ir idejas uzlabojumiem, es labprāt tos apspriestu.

Izklaidējieties!

5. darbība. Atjaunināšana1: 16x2 LCD ekrāna izmantošana

Atjauninājums 1: izmantojot 16x2 LCD
Atjauninājums 1: izmantojot 16x2 LCD
Atjauninājums 1: izmantojot 16x2 LCD
Atjauninājums 1: izmantojot 16x2 LCD
Atjauninājums 1: izmantojot 16x2 LCD
Atjauninājums 1: izmantojot 16x2 LCD

Uzlabojumi

Turpmākās pārbaudes laikā es sapratu, ka I2C OLED displeja bibliotēka patērē ievērojamu laiku. Tāpēc es nolēmu tā vietā izmantot 16x2 displeju ar I2C pārveidotāju.

Tāpēc es pieņēmu programmu LCD displejā, pievienojot dažas noderīgas funkcijas. Displeja pirmā rinda tagad parāda iespējamās indikācijas signāla stiprumu. Otrajā rindā tagad ir redzamas divas vērtības. Dūra norādīja pašreizējo signāla novirzi salīdzinājumā ar kalibrēšanas vērtību. Šai vērtībai jābūt "0". Ja šī vērtība pastāvīgi ir negatīva vai pozitīva, detektors ir jākalibrē, nospiežot atiestatīšanas pogu. Pozitīvas vērtības norāda metālu, kas atrodas spoles tuvumā.

Otrā vērtība parāda sabrukšanas līknes faktisko aizkaves vērtību. Šī vērtība parasti nav tik interesanta, bet ir nepieciešama detektora sākotnējai uzstādīšanai.

Programma tagad atļauj vairākus impulsa ilgumus secīgi (līdzekļi eksperimentiem / veiktspējas uzlabošanai). Es nesasniedzu nekādu izrāvienu. Tātad noklusējuma iestatījums ir viens impulsa ilgums.

Detektora sākotnējā uzstādīšana

Iestatot detektoru, ir svarīga otrās rindas otrā vērtība (pirmo var ignorēt). Sākotnēji vērtība var būt "nestabila" (skatīt attēlu). Pagrieziet apdares rezistoru, līdz vērtība ir stabila. Pēc tam pagrieziet to, lai palielinātu vērtību līdz maksimāli stabilai vērtībai. Nospiediet atiestatīšanas pogu, lai veiktu atkārtotu kalibrēšanu, un detektors ir gatavs lietošanai.

Man radās iespaids, ka, nosakot maksimālo stabilo vērtību, es zaudēju jutību pret dzelzs metāliem. Tāpēc, iespējams, ir vērts eksperimentēt ar iestatījumiem, lai būtu laba jutība pret lietām, kas nav dzelzs.

Spoles

Es uzbūvēju 3 spoles turpmākai pārbaudei

1 -> 18 pagriezieni @ 200 mm

2 -> 25 pagriezieni @ 100 mm

3 -> 48 pagriezieni @ 100 mm

Interesanti, ka visas spoles strādāja diezgan labi, ar gandrīz tādu pašu veiktspēju (20 ct monēta 40-50 mm gaisā). Tas varētu būt diezgan subjektīvs novērojums.

Ieteicams: