Բովանդակություն:

Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - մատով խփել. 5 քայլ (նկարներով)
Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - մատով խփել. 5 քայլ (նկարներով)

Video: Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - մատով խփել. 5 քայլ (նկարներով)

Video: Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - մատով խփել. 5 քայլ (նկարներով)
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Նոյեմբեր
Anonim
Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - Flip Coil
Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - Flip Coil
Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - Flip Coil
Arduino- ի վրա հիմնված իմպուլսային ինդուկցիայի դետեկտոր - Flip Coil

Գաղափարը

Նախկինում տարբեր արդյունքների հասնելով մետաղական դետեկտորներ կառուցելով, ես ցանկացա ուսումնասիրել Arduino- ի հնարավորություններն այդ ուղղությամբ:

Կան մի քանի լավ օրինակներ, թե ինչպես կարելի է Arduino- ով մետաղական դետեկտորներ կառուցել, ոմանք այստեղ ՝ որպես հրահանգներ: Բայց երբ դրանք նայում են, դրանք սովորաբար պահանջում են անալոգային ազդանշանի բուժման համար կամ բավականին արտաքին բաղադրիչներ, կամ զգայունությունը բավականին ցածր է:

Մետաղական դետեկտորների մասին մտածելիս հիմնական թեման այն է, թե ինչպես զգալ որոնման կծիկի հետ կապված ազդանշանների լարման փոքր փոփոխությունները: Այս փոփոխությունները սովորաբար շատ փոքր են: Առավել ակնհայտ մոտեցումը կլինի ATmega328- ի անալոգային մուտքերի օգտագործումը: Տեխնիկական պայմաններին նայելով ՝ կա երկու հիմնական խնդիր. Դրանք (հաճախ) դանդաղում են, իսկ լուծումը (շատ դեպքերում) ցածր է:

Մյուս կողմից, Arduino- ն աշխատում է 16 ՄՀց հաճախականությամբ և ունի բավականին ժամանակային հնարավորություններ, i. ե. 0,0625µS լուծում, եթե օգտագործում եք ժամացույցի արագություն: Այսպիսով, անալոգային մուտքը զգայարան օգտագործելու փոխարեն, լարման փոքր դինամիկ փոփոխություններ զգալու ամենապարզ միջոցը ժամանակի ընթացքում լարման անկման փոփոխությունը համեմատել ֆիքսված հղման լարման ժամանակ:

Այդ նպատակով ATmega328- ն ունի D6- ի և D7- ի միջև ներքին համեմատիչի կոկիկ հատկություն: Այս համեմատիչը ի վիճակի է առաջացնել ընդհատում ՝ հնարավորություն տալով իրադարձությունների ճշգրիտ մշակմանը: Միլիս () և միկոս () կոշտ կոդավորված ռեժիմների կողքին թողնելով և ATmega328- ի ներքին ժամաչափ մտնելը շատ ավելի բարձր լուծմամբ, Arduino- ն հիանալի հիմք է մետաղների հայտնաբերման մոտեցումների համար:

Այսպիսով, սկզբնաղբյուրի տեսանկյունից, լավ սկիզբ կլինի ծրագրել ներքին համեմատիչին մուտքերի բևեռայնության «փոփոխության» համար և օգտագործել ներքին հաշվիչ `առավելագույն հնարավոր արագությամբ` փոփոխությունների ժամանակի փոփոխման համար:

Arduido- ում սա հասնելու համար ընդհանուր կոդն է.

// Բոլոր նախնական փոփոխականների և այլնի սահմանում և գրանցամատյանների ստեղծում

անստորագիր char clockSelectBits = _BV (CS10); // ոչ նախնական, ամբողջական xtal void setup () {pinMode (6, INPUT); // + համեմատիչի - դրանք որպես INPUT դնելով, դրանք // սահմանվում են բարձր դիմադրողականության pinMode (7, INPUT); // - համեմատիչի - դրանք INPUT դնելով, դրանք // սահմանվում են բարձր դիմադրողականության cli (); // stop ընդհատում TCCR1A = 0; // ամբողջ TCCR1A գրանցամատյանը սահմանել 0 TCCR1B = 0; // նույնը TCCR1B -> նորմալ ռեժիմի համար TTCNT1 = 0; // նախաստորագրել հաշվիչի արժեքը 0 -ի համար; TCCR1B | = clockSelectBits; // սահմանում է նախալեզվիչ և սկսում ժամացույցը TIMSK1 = _BV (TOIE1); // սահմանում է ժմչփի արտահոսքի ընդհատումը հնարավորություն տալիս bit sei (); // թույլ տալ ընդհատումներ ACSR = (0 << ACD) | // Անալոգային համեմատիչ `միացված (0 << ACBG) | // Անալոգային համեմատիչ Bandgap Select: AIN0 կիրառվում է դրական մուտքի վրա (0 << ACO) | // Անալոգային համեմատիչի ելք. Անջատված (1 << ACI) | // Անալոգային համեմատիչի ընդհատման դրոշ. Հստակ ջնջման ընդհատում (1 << ACIE) | // Անալոգային համեմատիչի ընդհատում. Միացված է (0 << ACIC) | // Անալոգային համեմատիչի մուտքային նկարահանում. Հաշմանդամ (0 << ACIS1 | 0 << ACIS0 // ընդհատում ելքային միացման/ // (0 << ACIS1 | 1 << ACIS0 // վերապահված // (1 << ACIS1 | 0 << ACIS0 // ընդհատում ելքի եզրին ընկնելիս // (1 << ACIS1 | 1 << ACIS0 // ընդհատում մուտքի եզրին բարձրանալիս;}

// այս ռեժիմը կոչվում է ամեն անգամ, երբ համեմատիչը ստեղծում է ընդհատում

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

// այս ռեժիմը կոչվում է ամեն անգամ, երբ ներքին հաշվիչում հեղեղ է լինում

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// այս ռեժիմը օգտագործվում է ժամաչափը 0 -ի վերակայելու համար

void resetTimer (void) {oldSREG = SREG; cli (); // Անջատել ընդհատումները TCNT1 = 0; // նախաստորագրել 0 -ի SREG = oldSREG արժեքը; // Վերականգնել կարգավիճակի գրանցամատյանը TCCR1B | = clockSelectBits; // սահմանում է նախալեզվիչ և սկսում ժամացույցի ժամաչափը 1_հոսքի_հաշիվ = 0; // վերականգնում է գերհոսքի հաշվիչը}

Իհարկե, այս գաղափարը բոլորովին նոր չէ: Այս ծածկագրի հիմնական մասը կարելի է գտնել այլուր: TCIMD - TPIMD - Tiny Pulse Induction Metal Detector- ի գլխավոր էջում հայտնաբերված նման մոտեցման լավ իրականացում:

www.miymd.com/index.php/projects/tpimd/ (ցավոք, այս էջն այլևս առցանց չէ, ներկայումս կա կայքի կրկնօրինակում ՝ www.basic4mcu.com հասցեով, որը փնտրում է «TPIMD»):

Քայլ 1. Arduino Pulse Induction Idea - Flip Coil

Arduino Pulse Induction Idea - Flip Coil
Arduino Pulse Induction Idea - Flip Coil
Arduino Pulse Induction Idea - Flip Coil
Arduino Pulse Induction Idea - Flip Coil

Գաղափարն այն է, որ Arduino- ն օգտագործվի որպես զարկերակային ինդուկցիայի դետեկտոր, ինչպես TPIMD- ում, քանի որ քայքայման կորի ժամանակացույցի գաղափարը բավականին լավ է աշխատում: Իմպուլսային ինդուկցիայի դետեկտորների խնդիրն այն է, որ դրանք սովորաբար տարբեր լարման կարիք ունեն աշխատելու համար: Մեկ լարումը ՝ կծիկին սնուցելու համար, և առանձին լարվածություն ՝ քայքայման կորը հաղթահարելու համար: Լարման այս երկու աղբյուրները զարկերակային ինդուկցիայի դետեկտորները դարձնում են միշտ մի փոքր բարդ:

Նայելով կծիկի լարմանը PI դետեկտորում, արդյունքում կորը կարող է բաժանվել երկու տարբեր փուլերով: Առաջին փուլը ինքնին զարկերակն է, որը սնուցում է կծիկը և կառուցում մագնիսական դաշտը (1): Երկրորդ փուլը լարման անկման կորն է ՝ սկսած լարման գագաթնակետից, այնուհետև արագ շարժվելով դեպի կծիկի «առանց էներգիայի» լարման (2): Խնդիրն այն է, որ կծիկը զարկերակից հետո փոխում է իր բևեռականությունը: Արդյո՞ք զարկերակը դրական է (Var 1. կցված նկարում) քայքայման կորը բացասական է: Արդյո՞ք զարկերակը բացասական է, քայքայման կորը կլինի դրական (Վար 2. կցված նկարում)

Այս հիմնական խնդիրը լուծելու համար կծիկը պետք է «շրջվի» էլեկտրոնային եղանակով ՝ զարկերակից հետո: Այս դեպքում զարկերակը կարող է լինել դրական, իսկ քայքայման կորը ՝ նույնպես:

Դրան հասնելու համար կծիկը զարկերակից հետո պետք է մեկուսացված լինի Vcc- ից և GND- ից: Այս պահին կա միայն հոսանք, որը հոսում է թուլացնող ռեզիստորի միջով: Կծիկի և թուլացման դիմադրության մեկուսացված այս համակարգը կարող է «կողմնորոշվել» ցանկացած հղման լարման վրա: Սա, տեսականորեն, կստեղծի համակցված դրական կորի (գծագրի ներքևում)

Այս դրական կորը կարող է օգտագործվել համեմատիչի միջոցով `ժամանակի այն կետը հայտնաբերելու համար, որտեղ քայքայման լարումը« հատում է »հղման լարումը: Կծիկին մոտ գտնվող գանձերի դեպքում քայքայման կորը փոխվում է, և տեղեկամատյան լարման անցման ժամանակը: Այս փոփոխությունը կարելի է հայտնաբերել:

Որոշ փորձարկումներից հետո հետևյալ միացումն աշխատեց:

Շղթան բաղկացած է Arduino Nano մոդուլից: Այս մոդուլը վարում է երկու MOSFET տրանզիստոր, որոնք սնուցում են կծիկը (SV3- ում) D10- ի միջոցով: Երբ D10- ում զարկերակն ավարտվում է, երկու MOSFET- երը մեկուսացնում են 12V- ից և GND- ից ոլորուն: Կծիկի խնայված էներգիան արյունահոսում է R2 (220 Օմ) միջով: Միևնույն ժամանակ, R1 (560 Օմ) միացնում է կծիկի նախկին դրական կողմը tho GND- ին: Սա փոխում է R5- ի (330 Օմ) բացասական քայքայման կորը դեպի դրական կոր: Դիոդները պաշտպանում են Arduino- ի մուտքային քորոցը:

R7- ը լարման անջատիչ է `մոտ 0.04 Վ: Այս պահին D7- ի քայքայման կորը դառնում է ավելի բացասական, քան D6- ում 0.04 -ը, ընդմիջումը գործարկվում է, և զարկերակի ավարտից հետո տևողությունը պահպանվում է:

Կծիկին մոտ մետաղի դեպքում քայքայման կորը տևում է ավելի երկար, իսկ զարկերակի ավարտի և ընդհատման միջև ընկած ժամանակահատվածը երկարում է:

Քայլ 2. Ստեղծեք դետեկտոր (Breadboard)

Կառուցեք դետեկտոր (Breadboard)
Կառուցեք դետեկտոր (Breadboard)
Կառուցեք դետեկտոր (Breadboard)
Կառուցեք դետեկտոր (Breadboard)
Կառուցեք դետեկտոր (Breadboard)
Կառուցեք դետեկտոր (Breadboard)

Դետեկտոր կառուցելը բավականին հեշտ է: Դա կարելի է անել կամ տախտակի վրա (կպչելով սկզբնական շրջանին), կամ մասերը կպցնելով PCB- ի վրա:

Arduino Nano տախտակի վրա D13 LED- ն օգտագործվում է որպես մետաղի ցուցում

Հացաթուղթ բացելը աշխատանքային դետեկտորին հասնելու ամենաարագ ճանապարհն է: Բավականին մի շարք էլեկտրագծեր են անհրաժեշտ, այնուամենայնիվ դա կարելի է անել մի փոքրիկ տախտակով: Նկարներում սա ցուցադրվում է 3 քայլով, քանի որ Arduino- ն և MOSFET- ը թաքցնում են լարերի մի մասը: Փորձարկման ժամանակ ես ինչ -որ կերպ անջատեցի դիոդները ՝ սկզբում չնկատելով: Սա բացասական ազդեցություն չի ունեցել դետեկտորի վարքագծի վրա: Շղթայի PCB տարբերակում ես դրանք ամբողջությամբ դուրս եմ թողել:

Նկարներում ցուցադրված չեն 0.96 OLED էկրանին միացումները: Այս ցուցադրումը միացված է.

Vcc - 5V (Arduino- ի կապում, ոչ թե մատակարարման լարման !!!)

GND - GND

SCL - A5

SDA - A4

Այս OLED էկրանը անհրաժեշտ է սկզբում դետեկտորը չափաբերելու համար: Դա արվում է Arduino- ի PIN6- ում ճիշտ լարումը սահմանելով: Այս լարումը պետք է լինի մոտ 0.04 Վ: Theուցադրումն օգնում է ճիշտ լարումը սահմանել:

Գրատախտակի տարբերակը բավականին լավ է աշխատում, չնայած, հավանաբար, պիտանի չէ բնություն գնալու համար:

Քայլ 3: Գնացեք PCB

Անցնելով PCB
Անցնելով PCB
Անցնելով PCB
Անցնելով PCB
Անցնելով PCB
Անցնելով PCB
Անցնելով PCB
Անցնելով PCB

Ինչ վերաբերում է զոդմանը, ես իսկապես չեմ սիրում երկկողմանի բարձր տեխնոլոգիական PCB, այնպես որ ես փոխեցի սխեման, որպեսզի այն տեղավորվի միակողմանի PCB- ի վրա:

Հետևյալ փոփոխությունները կատարվեցին.

1. դիոդները դուրս են մնացել:

2. MOSFET- ի դարպասները ստացել են 10 Օմ դիմադրություն

3. D6- ում լարման բաժանարարի մատակարարման լարումը տրվում է D8- ի Բարձր մակարդակի ազդանշանով

4. MOSFET- երի վարորդի քորոցը փոխվեց:

Այս կերպ կարելի է ստեղծել միակողմանի PCB, որը կարող է զոդվել ունիվերսալ PCB- ներով: Այս սխեմայի միջոցով դուք կունենաք աշխատող PI դետեկտոր `ընդամենը 8-10 արտաքին բաղադրիչներով (կախված այն բանից, թե OLED էկրանը և/կամ բարձրախոսը օգտագործվում են):

Քայլ 4. Դետեկտորի կարգավորում և օգտագործում

Դետեկտորի տեղադրում և օգտագործում
Դետեկտորի տեղադրում և օգտագործում
Դետեկտորի տեղադրում և օգտագործում
Դետեկտորի տեղադրում և օգտագործում
Դետեկտորի տեղադրում և օգտագործում
Դետեկտորի տեղադրում և օգտագործում

Եթե դետեկտորը ճիշտ է կառուցված, և ծրագիրը գրված է Arduino- ում, միավորը տեղադրելու ամենահեշտ (եթե ոչ միակ) եղանակը OLED էկրան օգտագործելն է: Էկրանը կցված է 5V, GND, A4, A5: Սարքը միացնելուց հետո էկրանը պետք է ցուցադրի «չափաբերում»: Մի քանի վայրկյան հետո այն պետք է ասի «calibration done», իսկ էկրանին պետք է ցուցադրվի երեք թիվ:

Առաջին համարը ճշգրտման ընթացքում հայտնաբերված «տեղեկատու արժեքն» է: Երկրորդ արժեքը վերջին չափված արժեքն է, իսկ երրորդը `վերջին 32 չափումների միջին արժեքը:

Այս երեք արժեքները պետք է լինեն քիչ թե շատ նույնը (իմ 1000-ից ցածր թեստային դեպքերում): Միջին արժեքը պետք է լինի քիչ թե շատ կայուն:

Նախնական կարգավորումը սկսելու համար կծիկին մոտ չպետք է մետաղ լինի:

Այժմ լարման բաժանարարը (պոտենցիոմետր) պետք է կտրել այնպես, որ ստորին երկու արժեքները պետք է սահմանվեն առավելագույնի վրա ՝ միևնույն ժամանակ կայուն ընթերցում տալով: Գոյություն ունի կրիտիկական պարամետր, որտեղ միջին արժեքը սկսում է տարօրինակ ընթերցումներ տալ: Հետ շրջեք հարմարվողական սարքը `կրկին կայուն արժեքներ ստանալու համար:

Կարող է պատահել, որ էկրանը սառչի: Պարզապես սեղմեք վերականգնման կոճակը և սկսեք նորից:

Իմ տեղադրման համար (կծիկ ՝ 18 պտույտ @ 20 սմ) կայուն արժեքը մոտ 630-650 է: Տեղադրվելուց հետո սեղմեք վերակայման կոճակը, միավորը նորից չափագրվում է, և ծառի բոլոր արժեքները կրկին պետք է լինեն նույն տիրույթում: Եթե այժմ մետաղը կծիկ է բերվում, ապա Arduino-Board (D13)-ի LED- ը պետք է լուսավորվի: Կցված բարձրախոսը տալիս է սեղմման մի քանի ձայներ (այնտեղ ծրագրավորման բարելավման տեղ կա):

Բարձր ակնկալիքները կանխելու համար.

Դետեկտորն իսկապես հայտնաբերում է որոշ իրեր, բայց մնում է շատ պարզ և սահմանափակ դետեկտոր:

Հնարավորությունների մասին տպավորություն թողնելու համար a- ն որոշ տեղեկատու հայտնաբերումներ կատարեց տարբեր այլ դետեկտորների հետ: Նայելով արդյունքներին ՝ այն դեռևս բավականին տպավորիչ է միայն 8 արտաքին մասերով, բայց չհամապատասխանող պրոֆեսիոնալ դետեկտորների համար նախատեսված դետեկտորի համար:

Շրջանակին և ծրագրին նայելով ՝ բարելավման շատ տեղ կա: Ռեզիստորների արժեքները հայտնաբերվել են փորձով, 250 մգ զարկերակի ժամանակը ընտրվել է պատահականորեն, կծիկի պարամետրերը ՝ նույնպես: Եթե ունեք բարելավումների գաղափարներ, ես ավելի քան ուրախ կլինեի դրանք քննարկել:

Զվարճանալ!

Քայլ 5: Թարմացնել 1. Օգտագործելով 16x2 LCD էկրան

Թարմացում 1. Օգտագործելով 16x2 LCD էկրան
Թարմացում 1. Օգտագործելով 16x2 LCD էկրան
Թարմացում 1. Օգտագործելով 16x2 LCD էկրան
Թարմացում 1. Օգտագործելով 16x2 LCD էկրան
Թարմացում 1. Օգտագործելով 16x2 LCD
Թարմացում 1. Օգտագործելով 16x2 LCD

Բարելավումներ

Հետագա փորձարկումների ընթացքում ես հասկացա, որ I2C OLED էկրանին ներկայացվող գրադարանը զգալի ժամանակ է ծախսում: Այսպիսով, ես որոշեցի դրա փոխարեն օգտագործել 16x2 էկրան ՝ I2C փոխարկիչով:

Այսպիսով, ես ընդունեցի ծրագիրը LCD էկրանին `ավելացնելով որոշ օգտակար հատկություններ: Էկրանի առաջին տողը այժմ ցույց է տալիս հնարավոր ցուցման ազդանշանի ուժը: Երկրորդ տողը այժմ ցույց է տալիս երկու արժեք: Բռունցքը ցույց տվեց ընթացիկ ազդանշանի շեղումը `չափաբերման արժեքի համեմատ: Այս արժեքը պետք է լինի «0»: Եթե այս արժեքը մշտապես բացասական կամ դրական է, ապա դետեկտորը պետք է նորից չափաբերվի ՝ սեղմելով վերակայման կոճակը: Դրական արժեքները ցույց են տալիս մետաղը կծիկին մոտ:

Երկրորդ արժեքը ցույց է տալիս քայքայման կորի փաստացի հետաձգման արժեքը: Այս արժեքը սովորաբար այնքան էլ հետաքրքիր չէ, բայց անհրաժեշտ է դետեկտորի սկզբնական կարգավորման համար:

Programրագիրը այժմ թույլ է տալիս մի քանի զարկերակային տևողություն հաջորդականությամբ (փորձարկումներ / կատարողականի բարելավման միջոցներ): Ես ոչ մի ճեղքման չեմ հասել: Այսպիսով, կանխադրվածը սահմանվում է մեկ զարկերակի տևողության վրա:

Դետեկտորի նախնական կարգավորումը

Դետեկտորը տեղադրելիս երկրորդ տողի երկրորդ արժեքը տեղին է (առաջինը կարող է անտեսվել): Սկզբում արժեքը կարող է լինել «անկայուն» (տես նկարը): Պտտեք զարդանախշերի դիմադրությունը մինչև արժեքը հասնի կայուն ընթերցման: Այնուհետև շրջեք ՝ արժեքը առավելագույն կայուն արժեքի հասցնելու համար: Սեղմեք «Վերականգնել» կոճակը ՝ նորից չափագրելու համար, և դետեկտորը պատրաստ է օգտագործման համար:

Ինձ մոտ տպավորություն ստեղծվեց, որ սահմանելով առավելագույն կայուն արժեքը `ես կորցրեցի զգայունությունը ոչ երկաթե մետաղների նկատմամբ: Այսպիսով, գուցե արժե մի քանի անգամ փորձարկել պարամետրերը `ոչ երկաթե իրերի նկատմամբ լավ զգայունություն ունենալու համար:

Կծիկներ

Ես կառուցում եմ 3 կծիկ ՝ հետագա փորձարկման համար

1 -> 18 պտույտ @ 200 մմ

2 -> 25 պտույտ @ 100 մմ

3 -> 48 պտույտ @ 100 մմ

Հետաքրքիր է, որ բոլոր կծիկներն աշխատել են բավականին լավ ՝ գրեթե նույն կատարմամբ (20 կիթ մետաղադրամ ՝ 40-50 մմ օդում): Սա կարող է լինել բավականին սուբյեկտիվ դիտարկում:

Խորհուրդ ենք տալիս: