Სარჩევი:

არდუინოზე დაფუძნებული პულსის ინდუქციური დეტექტორი - გადაბრუნების ხვეული: 5 ნაბიჯი (სურათებით)
არდუინოზე დაფუძნებული პულსის ინდუქციური დეტექტორი - გადაბრუნების ხვეული: 5 ნაბიჯი (სურათებით)

ვიდეო: არდუინოზე დაფუძნებული პულსის ინდუქციური დეტექტორი - გადაბრუნების ხვეული: 5 ნაბიჯი (სურათებით)

ვიდეო: არდუინოზე დაფუძნებული პულსის ინდუქციური დეტექტორი - გადაბრუნების ხვეული: 5 ნაბიჯი (სურათებით)
ვიდეო: Arduino, Bluetooth Receiver, Remote Power Dimmer, HC-05 - არდუინო ბლუთუზი და დისტანციური კონტროლი 2024, ივლისი
Anonim
Arduino დაფუძნებული პულსის ინდუქციური დეტექტორი - Flip Coil
Arduino დაფუძნებული პულსის ინდუქციური დეტექტორი - Flip Coil
Arduino დაფუძნებული პულსის ინდუქციური დეტექტორი - Flip Coil
Arduino დაფუძნებული პულსის ინდუქციური დეტექტორი - Flip Coil

Იდეა

წარსულში სხვადასხვა ლითონის დეტექტორების შექმნისას, სხვადასხვა შედეგით, მსურდა არდუინოს შესაძლებლობების შესწავლა ამ მიმართულებით.

არსებობს რამდენიმე კარგი მაგალითი იმისა, თუ როგორ უნდა ავაშენოთ ლითონის დეტექტორები არდუინოსთან ერთად, ზოგი აქ ინსტრუქციის სახით. როდესაც მათ უყურებთ, ისინი ჩვეულებრივ მოითხოვენ ან გარე კომპონენტებს ანალოგური სიგნალის სამკურნალოდ, ან მგრძნობელობა საკმაოდ დაბალია.

ლითონის დეტექტორებზე ფიქრისას მთავარი თემაა თუ როგორ იგრძნოს ძაბვის უმნიშვნელო ცვლილებები სიგნალებში ძებნის ხვევასთან დაკავშირებით. ეს ცვლილებები ჩვეულებრივ ძალიან მცირეა. ყველაზე აშკარა მიდგომა იქნება ATmega328– ის ანალოგური საშუალებების გამოყენებით. მაგრამ სპეციფიკაციების გათვალისწინებით ორი ძირითადი პრობლემაა: ისინი (ხშირად) შენელებულია და რეზოლუცია (უმეტეს შემთხვევაში) დაბალია.

მეორეს მხრივ, Arduino მუშაობს 16 MHz– ზე და აქვს საკმაოდ გარკვეული დროის შესაძლებლობები. ე საათის სიჩქარის გამოყენებისას რეზოლუცია 0.0625µS ასე რომ, ანალოგური შეყვანის გამოსაყენებლად ნაცვლად, ძაბვის მცირე დინამიური ცვლილებების შეგრძნების უმარტივესი გზაა ძაბვის ვარდნის ცვლილების შედარება დროთა განმავლობაში ფიქსირებული საცნობარო ძაბვის დროს.

ამ მიზნით ATmega328– ს აქვს შიდა შედარების სისუფთავე D6 და D7 შორის. ამ შედარებელს შეუძლია გამოიწვიოს შეფერხება, რაც შესაძლებელს გახდის მოვლენების ზუსტი დამუშავებას. მიტოვებულია დროულად დაშიფრული რუტინების გარდა, როგორიცაა millis () და micos () და ATmega328– ის შიდა ტაიმერში გაცილებით მაღალი გარჩევადობით, Arduino არის დიდი საფუძველი ლითონის გამოვლენის მიდგომებისთვის.

ასე რომ, წყაროს კოდის თვალსაზრისით, კარგი დასაწყისი იქნებოდა შიდა შედარების პროგრამირება შეყვანის პოლარობის "ცვლილებისთვის" და შიდა მრიცხველის გამოყენება მაქსიმალური სიჩქარით, ცვლილებების დროში შესაცვლელად.

Arduido– ს ზოგადი კოდი ამის მისაღწევად არის:

// ყველა საჭირო წინასწარი ცვლადის და ა.შ. და რეგისტრების დაყენება

ხელმოუწერელი char clockSelectBits = _BV (CS10); // წინასწარი მასშტაბის გარეშე, სრული xtal void setup () {pinMode (6, INPUT); // + შედარების - მათი შეყვანის სახით, ისინი // დაყენებულია მაღალი წინაღობის pinMode (7, INPUT); // - შედარების - მათი შეყვანის სახით, ისინი // დაყენებულია მაღალი წინაღობის cli (); // შეწყვეტა წყვეტს TCCR1A = 0; // დააყენეთ მთელი TCCR1A რეესტრი 0 TCCR1B = 0; // იგივე TCCR1B -> ნორმალური რეჟიმიTCNT1 = 0; // ინიციალიზაცია counter მნიშვნელობის 0; TCCR1B | = clockSelectBits; // აყენებს წინასწარგამრიცხველს და იწყებს საათს TIMSK1 = _BV (TOIE1); // ადგენს ტაიმერის გადავსების შეწყვეტას bit sei () ჩართვის საშუალებას; // დაშვების დაშვება ACSR = (0 << ACD) | // ანალოგური შედარება: ჩართულია (0 << ACBG) | // ანალოგური შედარების Bandgap აირჩიეთ: 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; // ინიციალიზაცია counter მნიშვნელობის 0 SREG = oldSREG; // სტატუსის რეგისტრის აღდგენა TCCR1B | = clockSelectBits; // ადგენს წინასწარგამრიცხველს და იწყებს საათის ტაიმერს 1_overflow_count = 0; // აღადგენს გადავსების მრიცხველს}

რა თქმა უნდა, ეს იდეა არ არის სრულიად ახალი. ამ კოდის ძირითადი ნაწილი შეგიძლიათ იხილოთ სხვაგან. მიკროკონტროლერისთვის ასეთი მიდგომის კარგი განხორციელება 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 ინდუქციური იდეა - Flip Coil
Arduino Pulse ინდუქციური იდეა - Flip Coil
Arduino Pulse ინდუქციური იდეა - Flip Coil
Arduino Pulse ინდუქციური იდეა - Flip Coil

იდეა არის არდუინოს გამოყენება როგორც პულსის ინდუქციის დეტექტორი, როგორც TPIMD– ში, რადგან გაფუჭების მრუდის დროული იდეა საკმაოდ კარგად მუშაობს. პულსის ინდუქციური დეტექტორების პრობლემა ის არის, რომ მათ ჩვეულებრივ სჭირდებათ სხვადასხვა ძაბვა სამუშაოდ. ერთი ძაბვა კოჭის დასატენად და ცალკეული ძაბვა გაფუჭების მრუდთან გამკლავებისთვის. ძაბვის ეს ორი წყარო პულსის ინდუქციის დეტექტორებს ყოველთვის ართულებს.

PI დეტექტორში კოჭის ძაბვის დათვალიერებისას, მრუდი შეიძლება დაიყოს ორ სხვადასხვა ეტაპზე. პირველი ეტაპი არის პულსი, რომელიც აძლიერებს კოჭას და აყალიბებს მაგნიტურ ველს (1). მეორე ეტაპი არის ძაბვის დაშლის მრუდი, დაწყებული ძაბვის პიკიდან, შემდეგ კი სწრაფად მიემართება კოჭის "არასაკმარისი" ძაბვისკენ (2). პრობლემა ის არის, რომ კოჭა ცვლის თავის პოლარობას პულსის შემდეგ. პულსი დადებითია (Var 1. თანდართულ სურათზე) დაშლის მრუდი უარყოფითია. პულსი უარყოფითია, დაშლის მრუდი იქნება დადებითი (ვარ 2. თანდართულ სურათზე)

ამ ძირითადი პრობლემის გადასაჭრელად, გრაგნილი საჭიროა ელექტრონულად „გადატრიალდეს“პულსის შემდეგ. ამ შემთხვევაში პულსი შეიძლება იყოს დადებითი და დაშლის მრუდიც დადებითი.

ამის მისაღწევად, კოჭა უნდა იყოს იზოლირებული Vcc და GND პულსის შემდეგ. ამ მომენტში, მხოლოდ დენი მიედინება ამორტიზატორის რეზისტორში. კოჭისა და ამორტიზაციის რეზისტორის ეს იზოლირებული სისტემა შეიძლება იყოს "ორიენტირებული" ნებისმიერ საცნობარო ძაბვაზე. ეს, თეორიულად შექმნის კომბინირებულ დადებით მრუდს (ნახატის ქვედა ნაწილი)

ეს დადებითი მრუდი შეიძლება გამოყენებულ იქნას შედარების საშუალებით იმ დროის დასადგენად, როდესაც დაშლის ძაბვა „კვეთს“საცნობარო ძაბვას. გრაგნილის მახლობლად განძის შემთხვევაში, იცვლება დაშლის მრუდი და იცვლება საცნობარო ძაბვის დრო. ამ ცვლილების დადგენა შესაძლებელია.

გარკვეული ექსპერიმენტების შემდეგ, შემდეგი წრე აღმოჩნდა ეფექტური.

წრე შედგება Arduino Nano მოდულისგან. ეს მოდული ამოძრავებს ორ MOSFET ტრანზისტორს, რომელიც აძლიერებს ხვეულს (SV3– ზე) D10– ის საშუალებით. როდესაც პულსი D10- ზე მთავრდება, ორივე MOSFET- ი იზოლირებს კოჭას 12V- დან და GND- დან. კოჭში დაზოგული ენერგია გამოდის R2 (220 Ohms) მეშვეობით. ამავე დროს R1 (560 Ohms) აკავშირებს კოჭის ყოფილ დადებით მხარეს GND– სთან. ეს ცვლის უარყოფითი დაშლის მრუდს R5 (330 Ohms) დადებით მრუდზე. დიოდები იცავს არდუინოს შეყვანის პინს.

R7 არის ძაბვის გამყოფი დაახლოებით 0.04V. იმ მომენტში, D7– ზე დაშლის მრუდი უფრო უარყოფითი ხდება, ვიდრე 0.04 D6– ის დროს ხდება შეწყვეტის გაჩერება და პულსის დასრულების შემდეგ ხანგრძლივობის შენახვა.

ლითონის შემთხვევაში კოჭასთან ახლოს, დაშლის მრუდი უფრო დიდხანს გრძელდება, ხოლო პულსის დასრულებასა და შეწყვეტას შორის დრო უფრო გრძელი ხდება.

ნაბიჯი 2: დეტექტორის აგება (პურის დაფა)

დეტექტორის აგება (პურის დაფა)
დეტექტორის აგება (პურის დაფა)
დეტექტორის აგება (პურის დაფა)
დეტექტორის აგება (პურის დაფა)
დეტექტორის აგება (პურის დაფა)
დეტექტორის აგება (პურის დაფა)

დეტექტორის აგება საკმაოდ ადვილია. ეს შეიძლება გაკეთდეს როგორც დაფაზე (გამყარებაში თავდაპირველ წრეზე), ასევე ნაწილების შედუღებით PCB- ზე.

Arduino Nano დაფაზე D13 LED გამოიყენება როგორც ლითონის მითითება

პურის დაფის ამოღება არის ყველაზე სწრაფი გზა სამუშაო დეტექტორთან. საკმაოდ ბევრი გაყვანილობაა საჭირო, მაინც ამის გაკეთება შესაძლებელია პატარა პურის დაფაზე. სურათებში ეს ნაჩვენებია 3 საფეხურად, რადგან არდუინო და MOSFET– ები მალავენ ზოგიერთ მავთულს. ტესტირებისას დიოდები როგორმე გავთიშე, თავიდან რომ არ შევამჩნიე. ამან უარყოფითი გავლენა არ მოახდინა დეტექტორის ქცევაზე. მიკროსქემის PCB ვერსიაში მე ისინი მთლიანად გამოვტოვე.

სურათებზე არ არის ნაჩვენები კავშირი 0.96 OLED დისპლეით. ეს ჩვენება დაკავშირებულია:

Vcc - 5V (არდუინოს პინთან, არა მიწოდების ძაბვა !!!)

GND - GND

SCL - A5

SDA - A4

ეს OLED ეკრანი საჭიროა დეტექტორის დასადგენად. ეს კეთდება Arduino– ს PIN6– ზე სწორი ძაბვის დაყენებით. ეს ძაბვა უნდა იყოს დაახლოებით 0.04 ვ. ჩვენება ხელს უწყობს სწორი ძაბვის დაყენებას.

პურის დაფის ვერსია საკმაოდ კარგად მუშაობს, თუმცა ალბათ არ არის შესაფერისი ველურ ბუნებაში წასასვლელად.

ნაბიჯი 3: გადადით PCB– ზე

მიდის PCB
მიდის PCB
მიდის PCB
მიდის PCB
მიდის PCB
მიდის PCB
მიდის PCB
მიდის PCB

რაც შეეხება შედუღებას, მე ნამდვილად არ მომწონს ორმაგი ცალმხრივი მაღალტექნოლოგიური PCB, ამიტომ მე შევცვალე წრე, რათა მოერგოს ცალმხრივ PCB- ს.

შემდეგი ცვლილებები განხორციელდა:

1. დიოდები გამოტოვებული იყო.

2. MOSFET– ის კარიბჭემ მიიღო რეზისტორი 10 Ohm

3. ძაბვის გამყოფი D6– ზე მიწოდების ძაბვა მოცემულია მაღალი დონის სიგნალით D8– ზე

4. შეიცვალა MOSFET– ის დრაივერის პინი.

ამ გზით შეიძლება შეიქმნას ცალმხრივი PCB, რომელიც შეიძლება გაერთიანდეს უნივერსალურ PCB– ზე. ამ წრის გამოყენებით გექნებათ სამუშაო PI დეტექტორი მხოლოდ 8-10 გარე კომპონენტით (ეს დამოკიდებულია OLED დისპლეის და/ან დინამიკის გამოყენებაზე).

ნაბიჯი 4: დეტექტორის დაყენება და გამოყენება

დეტექტორის დაყენება და გამოყენება
დეტექტორის დაყენება და გამოყენება
დეტექტორის დაყენება და გამოყენება
დეტექტორის დაყენება და გამოყენება
დეტექტორის დაყენება და გამოყენება
დეტექტორის დაყენება და გამოყენება

თუ დეტექტორი სწორად არის აშენებული და პროგრამა ჩაწერილია Arduino– ში, ერთეულის შექმნის ყველაზე მარტივი (თუ არა ერთადერთი) გზა არის OLED ეკრანის გამოყენება. ეკრანი ერთვის 5V, GND, A4, A5. ეკრანი უნდა აჩვენებდეს „დაკალიბრებას“ერთეულის ჩართვის შემდეგ. რამდენიმე წამის შემდეგ უნდა ეწეროს „დაკალიბრება დასრულებულია“და ეკრანზე გამოჩნდება სამი ნომერი.

პირველი ნომერი არის კალიბრაციის დროს გამოვლენილი „საცნობარო მნიშვნელობა“. მეორე მნიშვნელობა არის ბოლო გაზომილი მნიშვნელობა და მესამე მნიშვნელობა არის ბოლო 32 გაზომვის საშუალო მნიშვნელობა.

ეს სამი მნიშვნელობა მეტ-ნაკლებად იგივე უნდა იყოს (ჩემს საცდელ შემთხვევებში 1000-ზე ნაკლები). საშუალო მნიშვნელობა მეტ -ნაკლებად სტაბილური უნდა იყოს.

პირველადი კონფიგურაციის დასაწყებად, კოჭის მახლობლად არ უნდა იყოს ლითონი.

ახლა ძაბვის გამყოფი (მორთვა პოტენომეტრი) უნდა შემცირდეს ისე, რომ ქვედა ორი მნიშვნელობა მაქსიმალურად იყოს დადგენილი, ხოლო სტაბილურ კითხვას მაინც იძლევა. არსებობს კრიტიკული გარემო, სადაც საშუალო მნიშვნელობა იწყებს უცნაური კითხვის გაკეთებას. დააბრუნეთ საპარსები, რათა კვლავ მიიღოთ სტაბილური მნიშვნელობები.

შეიძლება მოხდეს, რომ ეკრანი იყინება. უბრალოდ დააჭირეთ გადატვირთვის ღილაკს და დაიწყეთ თავიდან.

ჩემი კონფიგურაციისთვის (კოჭა: 18 ბრუნვა @ 20 სმ) სტაბილური მნიშვნელობაა დაახლოებით 630-650. დაყენების შემდეგ დააჭირეთ გადატვირთვის ღილაკს, ერთეული ხელახლა დაკალიბრდება და ყველა ხის მნიშვნელობა ისევ იმავე დიაპაზონში უნდა იყოს. თუ ლითონი ახლა მოვიდა კოჭამდე, არდუინო-დაფაზე (D13) LED უნდა აინთოს. თანდართული სპიკერი იძლევა დაწკაპუნების რამდენიმე ხმას (იქ არის პროგრამირების გაუმჯობესების ადგილი).

მაღალი მოლოდინების თავიდან ასაცილებლად:

დეტექტორი აღმოაჩენს რაღაცას, მაგრამ ის რჩება ძალიან მარტივი და შეზღუდული დეტექტორი.

შესაძლებლობების შთაბეჭდილების მიზნით, ჩვენ გავაკეთეთ რამდენიმე საცნობარო აღმოჩენა სხვადასხვა სხვა დეტექტორებთან. შედეგების დათვალიერებისას, ის მაინც საკმაოდ შთამბეჭდავია დეტექტორისთვის, რომელსაც აქვს მხოლოდ 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". თუ ეს მნიშვნელობა მუდმივად უარყოფითი ან დადებითია, დეტექტორი ხელახლა უნდა დაკალიბრდეს გადატვირთვის ღილაკზე დაჭერით. დადებითი მნიშვნელობები მიუთითებს ლითონზე კოჭასთან ახლოს.

მეორე მნიშვნელობა გვიჩვენებს დაშლის მრუდის ფაქტობრივ დაგვიანებულ მნიშვნელობას. ეს მნიშვნელობა ჩვეულებრივ არც ისე საინტერესოა, მაგრამ საჭიროა დეტექტორის საწყისი კონფიგურაციისთვის.

პროგრამა ახლა იძლევა მრავალჯერადი პულსის ხანგრძლივობას თანმიმდევრობით (ექსპერიმენტის / შესრულების გაუმჯობესების საშუალებები). მე ვერ მივაღწიე რაიმე გარღვევას. ასე რომ, ნაგულისხმევი არის მითითებული ერთი პულსის ხანგრძლივობა.

დეტექტორის საწყისი დაყენება

დეტექტორის დაყენებისას მეორე ხაზის მეორე მნიშვნელობა აქტუალურია (პირველი შეიძლება იგნორირებული იყოს). თავდაპირველად მნიშვნელობა შეიძლება იყოს "არასტაბილური" (იხ. სურათი). ჩართეთ მორთვის რეზისტორი მანამ, სანამ მნიშვნელობა არ მიაღწევს სტაბილურ მაჩვენებელს. შემდეგ გადააბრუნეთ, რომ გაზარდოთ მნიშვნელობა მაქსიმალურ სტაბილურ მნიშვნელობამდე. დააჭირეთ გადატვირთვის ღილაკს ხელახალი დაკალიბრებისთვის და დეტექტორი მზად არის გამოსაყენებლად.

მე მივიღე შთაბეჭდილება, რომ მაქსიმალური სტაბილური მნიშვნელობის დადგენით, მე დავკარგე მგრძნობელობა არა რკინის ლითონების მიმართ. ასე რომ, შეიძლება ღირდეს გარკვეული ექსპერიმენტი იმ პარამეტრებზე, რომ ჰქონდეთ კარგი მგრძნობელობა უთო მასალების მიმართ.

კოჭები

მე ვაშენებ 3 კოჭას შემდგომი ტესტირებისთვის

1 -> 18 ბრუნვა @ 200 მმ

2 -> 25 ბრუნვა @ 100 მმ

3 -> 48 შემობრუნება @ 100 მმ

საინტერესოა, რომ ყველა კოჭა საკმაოდ კარგად მუშაობდა, თითქმის ერთნაირი შესრულებით (20 კენტიანი მონეტა 40-50 მმ ჰაერში). ეს შეიძლება იყოს საკმაოდ სუბიექტური დაკვირვება.

გირჩევთ: