Përmbajtje:

Detektor i induksionit të impulsit të bazuar në Arduino - Spiralja e rrokullisjes: 5 hapa (me fotografi)
Detektor i induksionit të impulsit të bazuar në Arduino - Spiralja e rrokullisjes: 5 hapa (me fotografi)

Video: Detektor i induksionit të impulsit të bazuar në Arduino - Spiralja e rrokullisjes: 5 hapa (me fotografi)

Video: Detektor i induksionit të impulsit të bazuar në Arduino - Spiralja e rrokullisjes: 5 hapa (me fotografi)
Video: Mos e bëni më këtë gabim: Ja pse këto elektroshtëpiake harxhojnë dyfish energji elektrike 2024, Korrik
Anonim
Detektor i induksionit të impulsit të bazuar në Arduino - Spil Spiral
Detektor i induksionit të impulsit të bazuar në Arduino - Spil Spiral
Detektor i induksionit të impulsit të bazuar në Arduino - Spil Spiral
Detektor i induksionit të impulsit të bazuar në Arduino - Spil Spiral

Ideja

Duke ndërtuar disa detektorë metali në të kaluarën me rezultate të ndryshme, doja të eksploroja aftësitë e Arduino në atë drejtim.

Ka disa shembuj të mirë se si të ndërtoni detektorë metali me Arduino, disa këtu si udhëzues. Por kur i shikoni ato, ata normalisht kërkojnë ose mjaft përbërës të jashtëm për trajtimin e sinjalit analog ose ndjeshmëria është mjaft e ulët.

Kur mendoni për detektorët metalikë, tema kryesore është se si të ndjeni ndryshimet e vogla të tensionit në sinjalet që lidhen me spiralen e kërkimit. Këto ndryshime janë zakonisht shumë të vogla. Qasja më e qartë do të ishte përdorimi i hyrjeve analoge të ATmega328. Por, duke parë specifikimet, ka dy probleme themelore: ato (shpesh) ngadalësohen dhe zgjidhja (në shumicën e rasteve) është e ulët.

Nga ana tjetër, Arduino po punon në 16MHz dhe ka mjaft aftësi kohore i. e një rezolutë prej 0.0625µS nëse përdorni shpejtësinë e orës. Pra, në vend që të përdorni hyrjen analoge për të ndjerë, mënyra më e thjeshtë për të ndjerë ndryshime të vogla dinamike në tension është të krahasoni ndryshimin e rënies së tensionit me kalimin e kohës në një tension fiks reference.

Për këtë qëllim ATmega328 ka veçorinë e duhur të një krahasuesi të brendshëm midis D6 dhe D7. Ky krahasues është në gjendje të shkaktojë një ndërprerje, duke mundësuar trajtimin e saktë të ngjarjeve. Duke lënë mënjanë rutinat e sakta të kohës si millis () dhe micos () dhe duke hyrë në kohëmatësin e brendshëm të ATmega328 me rezolucion shumë më të lartë, Arduino është një bazë e shkëlqyeshme për qasjet e zbulimit të metaleve.

Pra, nga pikëpamja e kodit burimor, një fillim i mirë do të ishte programimi i krahasuesit të brendshëm për "ndryshim" në polaritetin e hyrjeve dhe përdorimi i një numëruesi të brendshëm me shpejtësinë më të lartë të mundshme për ndryshimin në kohën e ndryshimeve.

Kodi i përgjithshëm në Arduido për të arritur këtë është:

// Përcaktimi i të gjitha para -ndryshoreve të kërkuara etj. Dhe vendosja e regjistrave

ora e shenjës pa shenjëSelectBits = _BV (CS10); // pa paracaktim, konfigurim i plotë i zbrazëtisë xtal () {pinMode (6, INPUT); // + e krahasuesit - duke i vendosur ato si INPUT, ato janë // vendosur në pinMode me rezistencë të lartë (7, INPUT); // - e krahasuesit - duke i vendosur ato si INPUT, ato janë // vendosur në rezistencë të lartë cli (); // stop interrupts TCCR1A = 0; // vendosni të gjithë regjistrin TCCR1A në 0 TCCR1B = 0; // e njëjtë për TCCR1B -> modaliteti normalTCNT1 = 0; // inicoj vlerën e kundërsulmit në 0; TCCR1B | = clockSelectBits; // vendos parashkruesin dhe fillon orën TIMSK1 = _BV (TOIE1); // vendos ndërprerjen e tejkalimit të kohëmatësit të aktivizojë bit sei (); // lejoni ndërprerjet ACSR = (0 << ACD) | // Krahasuesi analog: Aktivizuar (0 << ACBG) | // Bandgap i Krahasuesit Analog Zgjedh: AIN0 aplikohet në hyrjen pozitive (0 << ACO) | // Dalja analoge e krahasuesit: Fikur (1 << ACI) | // Flamuri i ndërprerjes analoge krahasuese: Ndërprerja në pritje të qartë (1 << ACIE) | // Ndërprerja Analog Krahasuese: Aktivizuar (0 << ACIC) | // Regjistrimi i hyrjes krahasuese analoge: i paaftë (0 << ACIS1 | 0 << ACIS0 // ndërprerje në ndërrimin e daljes // (0 << ACIS1 | 1 << ACIS0 // rezervuar // (1 << ACIS1 | 0 << ACIS0 // ndërprerje në rënien e skajit të prodhimit // (1 << ACIS1 | 1 << ACIS0 // ndërprerje në rritjen e buzës së hyrjes;}

// kjo rutinë quhet sa herë që krahasuesi krijon një ndërprerje

ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); timeStamp = TCNT1; SREG = SREG e vjetër; }

// kjo rutinë quhet sa herë që ka një tejmbushje në banakun e brendshëm

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// kjo rutinë përdoret për të rivendosur kohëmatësin në 0

void resetTimer (void) {oldSREG = SREG; cli (); // Çaktivizo ndërprerjet TCNT1 = 0; // inicoj vlerën e kundërsulmit në 0 SREG = oldSREG; // Rivendos regjistrin e statusit TCCR1B | = clockSelectBits; // vendos parakalues dhe fillon orën timer1_overflow_count = 0; // rivendos numëruesin e tejmbushjes}

Sigurisht që kjo ide nuk është krejtësisht e re. Pjesa kryesore e këtij kodi mund të gjendet diku tjetër. Një zbatim i mirë një qasje e tillë për një mikrokontrollues të gjetur në faqen kryesore të TPIMD - Tiny Pulse Induction Detektor Metal.

www.miymd.com/index.php/projects/tpimd/ (për fat të keq kjo faqe nuk është më në internet, aktualisht ekziston një kopje rezervë e faqes në www.basic4mcu.com, kërko për "TPIMD").

Hapi 1: Ideja e Induksionit të Pulsit Arduino - Spil Spil

Ideja e Induksionit të Pulsit Arduino - Spiralja e Rrokullisjes
Ideja e Induksionit të Pulsit Arduino - Spiralja e Rrokullisjes
Ideja e Induksionit të Pulsit Arduino - Spiralja e Rrokullisjes
Ideja e Induksionit të Pulsit Arduino - Spiralja e Rrokullisjes

Ideja është që të përdoret Arduino si një detektor i induksionit të pulsit, si në TPIMD, pasi ideja e kohës së kurbës së prishjes duket se funksionon mjaft mirë. Problemi me detektorët e induksionit të pulsit është se ata normalisht kanë nevojë për tension të ndryshëm për të punuar. Një tension për të fuqizuar spiralen dhe një tension i veçantë për t'u marrë me kurbën e prishjes. Këto dy burime të tensionit i bëjnë detektorët e induksionit të impulsit gjithnjë pak të komplikuar.

Duke parë tensionin e spirales në një detektor PI, kurba që rezulton mund të ndahet në dy faza të ndryshme. Faza e parë është vetë pulsi që fuqizon spiralen dhe ndërton fushën magnetike (1). Faza e dytë është kurba e prishjes së tensionit, duke filluar me një kulm të tensionit, pastaj duke u ngjitur shpejt në tensionin "pa fuqi" të spirales (2). Problemi është se spiralja ndryshon polaritetin pas pulsit. A është pulsi pozitiv (Var 1. në figurën e bashkangjitur) kurba e prishjes është negative. A është pulsi negativ, kurba e prishjes do të jetë pozitive (Var 2. në foton e bashkangjitur)

Për të zgjidhur këtë problem themelor, spiralja duhet të "përmbyset" elektronikisht pas pulsit. Në këtë rast pulsi mund të jetë pozitiv dhe kurba e prishjes gjithashtu mund të jetë pozitive.

Për të arritur këtë, spiralja duhet të izolohet nga Vcc dhe GND pas pulsit. Në këtë moment, ekziston vetëm një rrymë që rrjedh përmes një rezistence të shuarjes. Ky sistem i izoluar i spirales dhe rezistencës së amortizimit mund të "orientohet" në çfarëdo tensioni referues. Kjo, në teori do të krijojë kurbën pozitive të kombinuar (fundi i vizatimit)

Kjo kurbë pozitive mund të përdoret përmes krahasuesit për të zbuluar pikën e kohës kur voltazhi i prishjes "kalon" një tension referimi. Në rast të thesareve pranë spirales, kurba e prishjes ndryshon dhe pika e kohës që kalon ndryshon tensionin referues. Ky ndryshim mund të zbulohet.

Pas disa eksperimenteve, qarku i mëposhtëm doli të funksionojë.

Qarku përbëhet nga një modul Arduino Nano. Ky modul drejton dy transistorë MOSFET që fuqizojnë spiralen (në SV3) nëpërmjet D10. Kur mbaron pulsi në D10, të dy MOSFET -et izolojnë spiralen nga 12V dhe GND. Energjia e kursyer në spirale rrjedh përmes R2 (220 Ohms). Në të njëjtën kohë R1 (560 Ohms) lidh anën pozitive të mëparshme të spirales me GND. Kjo ndryshon kurbën e prishjes negative në R5 (330 Ohms) në një kurbë pozitive. Diodat mbrojnë kunjin hyrës të Arduino.

R7 është një ndarës i tensionit në rreth 0.04V. Për momentin kurba e prishjes në D7 bëhet më negative sesa 0.04 në D6, shkaktohet një ndërprerje dhe ruhet kohëzgjatja pas përfundimit të pulsit.

Në rastin e metalit pranë spirales, kurba e prishjes zgjat më shumë, dhe koha midis fundit të pulsit dhe ndërprerjes bëhet më e gjatë.

Hapi 2: Ndërtimi i Detektorit (Breadboard)

Ndërtimi i detektorit (bordi i bukës)
Ndërtimi i detektorit (bordi i bukës)
Ndërtimi i detektorit (bordi i bukës)
Ndërtimi i detektorit (bordi i bukës)
Ndërtimi i detektorit (bordi i bukës)
Ndërtimi i detektorit (bordi i bukës)

Ndërtimi i detektorit është mjaft i lehtë. Kjo mund të bëhet ose në një dërrasë buke (duke iu përmbajtur qarkut origjinal) ose duke bashkuar pjesët në një PCB.

LED D13 në tabelën Arduino Nano përdoret si një tregues për metalin

Heqja e një pllake buke është mënyra më e shpejtë për detektorin që punon. Duhen mjaft instalime elektrike, megjithatë kjo mund të bëhet me një dërrasë të vogël buke. Në fotografi kjo tregohet në 3 hapa pasi Arduino dhe MOSFET janë duke fshehur disa nga telat. Kur testova, i shkëputa diodat disi pa e vënë re në fillim. Kjo nuk kishte asnjë efekt negativ në sjelljen e detektorit. Në versionin PCB të qarkut i lashë jashtë plotësisht.

Lidhjet me një ekran 0.96 OLED nuk tregohen në fotografi. Ky ekran është i lidhur:

Vcc - 5V (në kunjin Arduino, jo tensionin e furnizimit !!!)

GND - GND

SCL - A5

SDA - A4

Ky ekran OLED është i nevojshëm për të kalibruar detektorin fillimisht. Kjo bëhet duke vendosur tensionin e duhur në PIN6 të Arduino. Ky tension duhet të jetë rreth 0.04V. Ekrani ndihmon për të vendosur tensionin e duhur.

Versioni i bukës punon mjaft mirë, edhe pse ndoshta nuk është i përshtatshëm për të shkuar në natyrë.

Hapi 3: Shkoni në PCB

Duke shkuar në PCB
Duke shkuar në PCB
Duke shkuar në PCB
Duke shkuar në PCB
Duke shkuar në PCB
Duke shkuar në PCB
Duke shkuar në PCB
Duke shkuar në PCB

Sa i përket bashkimit, nuk më pëlqen shumë PCB e teknologjisë së lartë të dyanshme, kështu që modifikova qarkun që të përshtatet në një PCB të njëanshme.

Ndryshimet e mëposhtme janë bërë:

1. diodat u lanë jashtë.

2. portat e MOSFETs morën një rezistencë prej 10 Ohm

3. tensioni i furnizimit për ndarësin e tensionit në D6 jepet nga një sinjal i nivelit të Lartë në D8

4. kunja e shoferit për MOSFET -et u ndryshua.

Në këtë mënyrë mund të krijohet një PCB e njëanshme e cila mund të ngjitet në PCB universale. Duke përdorur këtë qark, do të keni një detektor PI të punës me vetëm 8-10 përbërës të jashtëm (në varësi të ekranit OLED dhe/ose altoparlantit).

Hapi 4: Vendosja dhe përdorimi i detektorit

Vendosja dhe përdorimi i detektorit
Vendosja dhe përdorimi i detektorit
Vendosja dhe përdorimi i detektorit
Vendosja dhe përdorimi i detektorit
Vendosja dhe përdorimi i detektorit
Vendosja dhe përdorimi i detektorit

Nëse detektori është ndërtuar siç duhet dhe programi është shkruar në Arduino, mënyra më e lehtë (nëse jo e vetmja) për të vendosur njësinë është të përdorni një ekran OLED. Ekrani është i lidhur me 5V, GND, A4, A5. Ekrani duhet të tregojë "kalibrim" pasi njësia të jetë ndezur. Pas disa sekondash duhet të thotë "kalibrimi i kryer" dhe tre numra duhet të shfaqen në ekran.

Numri i parë është "vlera e referencës" e identifikuar gjatë kalibrimit. Vlera e dytë është vlera e fundit e matur dhe vlera e tretë një vlerë mesatare e 32 matjeve të fundit.

Këto tre vlera duhet të jenë pak a shumë të njëjta (në rastet e mia të testimit nën 1000). Vlera e mesme duhet të jetë pak a shumë e qëndrueshme.

Për të filluar ngritjen fillestare, nuk duhet të ketë asnjë metal pranë spirales.

Tani ndarësi i tensionit (trim potenciometri) duhet të shkurtohet në mënyrë që dy vlerat më të ulëta të vendosen në një maksimum duke dhënë ende lexim të qëndrueshëm. Ekziston një mjedis kritik, ku vlera e mesme fillon të japë lexime të çuditshme. Kthejeni krasësin për të marrë përsëri vlera të qëndrueshme.

Mund të ndodhë që ekrani të ngrijë. Thjesht shtypni butonin e rivendosjes dhe filloni nga e para.

Për konfigurimin tim (spiralja: 18 rrotullime @ 20cm) vlera e qëndrueshme është rreth 630-650. Pasi të jetë vendosur, shtypni butonin e rivendosjes, njësia ri-kalibrohet dhe të gjitha vlerat e pemës duhet të jenë përsëri në të njëjtën gamë. Nëse metali tani është sjellë në spirale, LED në Arduino-Board (D13) duhet të ndizet. Një altoparlant i bashkangjitur jep disa zhurma klikimi (aty ka vend për përmirësim në programimin atje).

Për të parandaluar pritjet e larta:

Detektori vërtet zbulon disa gjëra, por mbetet një detektor shumë i thjeshtë dhe i kufizuar.

Për të dhënë një përshtypje të aftësive, a bëri disa zbulime referimi me detektorë të ndryshëm të tjerë. Duke parë rezultatet, është akoma mjaft mbresëlënëse për një detektor me vetëm 8 pjesë të jashtme, por që nuk përputhen me detektorë profesionistë.

Duke parë qarkun dhe programin, ka shumë vend për përmirësim. Vlerat e rezistorëve u gjetën nga përvoja, koha e pulsit prej 250ms u zgjodh rastësisht, parametrat e spirales gjithashtu. Nëse keni ide për përmirësime, do të isha më se i lumtur t'i diskutoja ato.

Argëtohu!

Hapi 5: Përditësimi 1: Përdorimi i një LCD 16x2

Përditësimi 1: Përdorimi i një LCD 16x2
Përditësimi 1: Përdorimi i një LCD 16x2
Përditësimi 1: Përdorimi i një LCD 16x2
Përditësimi 1: Përdorimi i një LCD 16x2
Përditësimi 1: Përdorimi i një LCD 16x2
Përditësimi 1: Përdorimi i një LCD 16x2

Përmirësimet

Gjatë testimit të mëtejshëm kuptova se biblioteka për Ekranin OLED I2C po konsumonte kohë të konsiderueshme. Kështu që vendosa të përdor një ekran 16x2 me një konvertues I2C.

Kështu që e miratova programin në ekranin LCD duke shtuar disa veçori të dobishme. Linja e parë e ekranit tani tregon fuqinë e sinjalit të një treguesi të mundshëm. Linja e dytë tani tregon dy vlera. Grushti tregoi devijimin e sinjalit aktual në krahasim me vlerën e kalibrimit. Kjo vlerë duhet të jetë "0". Nëse kjo vlerë është vazhdimisht negative ose pozitive, detektori duhet të kalibrohet duke shtypur butonin e rivendosjes. Vlerat pozitive tregojnë metalin pranë spirales.

Vlera e dytë tregon vlerën aktuale të vonesës së kurbës së prishjes. Kjo vlerë normalisht nuk është aq interesante, por është e nevojshme për konfigurimin fillestar të detektorit.

Programi tani lejon zgjatje të shumta të pulsit në një sekuencë (mjete për të eksperimentuar / përmirësuar performancën). Unë nuk kam arritur asnjë thyerje. Pra, parazgjedhja është vendosur në një kohëzgjatje të pulsit.

Konfigurimi fillestar i detektorit

Kur vendosni detektorin, vlera e dytë e rreshtit të dytë është e rëndësishme (e para mund të injorohet). Fillimisht vlera mund të jetë "e paqëndrueshme" (shiko figurën). Kthejeni rezistencën e zbukurimit derisa vlera të arrijë një lexim të qëndrueshëm. Pastaj kthejeni atë për të rritur vlerën në një vlerë maksimale të qëndrueshme. Shtypni butonin e rivendosjes për të rikalibruar dhe detektori është gati për përdorim.

Kam marrë përshtypjen se duke vendosur vlerën maksimale të qëndrueshme, kam humbur ndjeshmërinë për metalet jo-hekuri. Pra, mund të jetë e vlefshme të eksperimentosh me cilësimet për të pasur një ndjeshmëri të mirë për gjërat jo hekuri.

Mbështjellje

Unë ndërtoj 3 spirale për testime të mëtejshme

1 -> 18 kthesa @ 200mm

2 -> 25 kthesa @ 100mm

3 -> 48 kthesa @ 100mm

Shtë interesante që të gjitha mbështjelljet punuan mjaft mirë, me pothuajse të njëjtën performancë (monedhë 20ct në 40-50mm në ajër). Ky mund të jetë një vëzhgim mjaft subjektiv.

Recommended: