Mündəricat:

Arduino əsaslı nəbz induksiya detektoru - çevirmə bobini: 5 addım (şəkillərlə birlikdə)
Arduino əsaslı nəbz induksiya detektoru - çevirmə bobini: 5 addım (şəkillərlə birlikdə)

Video: Arduino əsaslı nəbz induksiya detektoru - çevirmə bobini: 5 addım (şəkillərlə birlikdə)

Video: Arduino əsaslı nəbz induksiya detektoru - çevirmə bobini: 5 addım (şəkillərlə birlikdə)
Video: Heart rate measurement with Arduino, OLED display and KY-039 heartbeat sensor. 2024, Iyul
Anonim
Arduino Əsaslı Pulse İndüksiyon Detektoru - Flip Bobin
Arduino Əsaslı Pulse İndüksiyon Detektoru - Flip Bobin
Arduino Əsaslı Pulse İndüksiyon Detektoru - Flip Bobin
Arduino Əsaslı Pulse İndüksiyon Detektoru - Flip Bobin

Fikir

Keçmişdə fərqli nəticələrlə bəzi metal detektorlar qurduqdan sonra Arduinonun bu istiqamətdəki imkanlarını araşdırmaq istədim.

Arduino ilə metal detektorların necə qurulacağına dair yaxşı nümunələr var, bəziləri burada təlimat olaraq. Ancaq onlara baxanda normal olaraq analoq siqnal müalicəsi üçün ya bir qədər xarici komponent tələb edir, ya da həssaslıq olduqca aşağıdır.

Metal detektorlar haqqında düşünərkən əsas mövzu axtarış bobini ilə əlaqəli siqnallarda gərginliyin kiçik dəyişikliklərini necə hiss etməkdir. Bu dəyişikliklər ümumiyyətlə çox kiçikdir. Ən açıq yanaşma ATmega328 -in analoq girişlərindən istifadə etmək olardı. Ancaq spesifikasiyalara baxanda iki əsas problem var: onlar (çox vaxt) yavaşlayır və həll (çox hallarda) aşağıdır.

Digər tərəfdən, Arduino 16MHz -də işləyir və kifayət qədər vaxtlama qabiliyyətinə malikdir. e. saat sürətindən istifadə edildikdə 0.0625µS qətnamə. Algılama üçün analoq girişdən istifadə etmək əvəzinə, gərginlikdəki kiçik dinamik dəyişiklikləri hiss etməyin ən sadə yolu, sabit bir istinad gərginliyində zamanla geriliyin dəyişməsini müqayisə etməkdir.

Bu məqsədlə ATmega328, D6 ilə D7 arasındakı daxili müqayisə xüsusiyyətinə malikdir. Bu müqayisə, hadisənin dəqiq idarə edilməsinə imkan verən bir kəsilməyə səbəb ola bilər. Millis () və micos () kimi səliqəli kodlaşdırılmış vaxt rejimlərinin yanında və daha yüksək qətnamə ilə ATmega328 -in daxili taymerinə daxil olaraq, Arduino metal aşkarlama yanaşmaları üçün əla bir əsasdır.

Mənbə kodu baxımından, girişlərin polaritesində "dəyişiklik" üçün daxili müqayisə cihazını proqramlaşdırmaq və dəyişikliklərin vaxtını dəyişdirmək üçün mümkün olan ən yüksək sürətə malik daxili sayğacdan istifadə etmək yaxşı bir başlanğıc olardı.

Buna nail olmaq üçün Arduido'da ümumi kod:

// Bütün lazımi əvvəlcədən dəyişənlərin təyin edilməsi və s

işarəsiz char saatSelectBits = _BV (CS10); // əvvəlcədən ölçmə yoxdur, tam xtal boşluğu qurulumu () {pinMode (6, INPUT); // + müqayisənin - onları GİRİŞ olaraq təyin edərək // yüksək impedance pinMode (7, INPUT) olaraq təyin olunur; // - müqayisənin - onları GİRİŞ olaraq təyin edərək // yüksək impedance cli (); // dayandırma fasilələri TCCR1A = 0; // bütün TCCR1A reyestrini 0 olaraq təyin edin TCCR1B = 0; // TCCR1B üçün eyni -> normal rejimTCNT1 = 0; // sayğac dəyərini sıfıra endirmək; TCCR1B | = clockSelectBits; // prescaler təyin edir və saatı işə salır TIMSK1 = _BV (TOIE1); // bit sei () timer daşqınının kəsilməsini təmin edir; // fasilələrə icazə verin ACSR = (0 << ACD) | // Analog Müqayisəçi: Aktivdir (0 << ACBG) | // Analog Comparator Bandgap Select: AIN0 müsbət girişə tətbiq olunur (0 << ACO) | // Analog Komparator Çıxışı: Off (1 << ACI) | // Analog Müqayisəçi Kəsmə Bayrağı: Gözləyən Ardıcıllığı Sil (1 << ACIE) | // Analog Müqayisəçi Arası: Aktivdir (0 << ACIC) | // Analog Müqayisəçi Giriş Çəkmə: Əlil (0 << ACIS1 | 0 << ACIS0 // çıxış keçidində kəsmə // (0 << ACIS1 | 1 << ACIS0 // ayrılmış // (1 << ACIS1 | 0 <<) ACIS0 // düşən çıxış kənarında kəsmə // (1 << ACIS1 | 1 << ACIS0 // yüksələn giriş kənarında kəsmə;}

// müqayisə hər dəfə kəsici yaratdıqda bu rutin çağırılır

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

// bu sayğac hər dəfə daxili sayğacda daşqın olduqda çağırılır

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// bu prosedur taymeri sıfıra qaytarmaq üçün istifadə olunur

void resetTimer (void) {oldSREG = SREG; cli (); // TCNT1 fasilələrini deaktiv edin = 0; // sayaç dəyərini 0 -a sıfırlayın SREG = oldSREG; // TCCR1B status qeydini bərpa edin | = clockSelectBits; // prescaler qurur və saatı işə salır timer1_overflow_count = 0; // daşma sayğacını sıfırlayır}

Əlbəttə ki, bu fikir tamamilə yeni deyil. Bu kodun əsas hissəsini başqa yerdə tapa bilərsiniz. TPIMD - Tiny Pulse İnduksiya Metal Dedektoru ana səhifəsində tapılan bir mikrokontrolör üçün yaxşı bir tətbiq.

www.miymd.com/index.php/projects/tpimd/ (təəssüf ki, bu səhifə artıq onlayn deyil, hazırda www.basic4mcu.com saytında "TPIMD" üçün axtarış aparın).

Addım 1: Arduino Pulse İndüksiyon Fikri - Flip Bobin

Arduino Pulse İndüksiyon Fikri - Flip Bobin
Arduino Pulse İndüksiyon Fikri - Flip Bobin
Arduino Pulse İndüksiyon Fikri - Flip Bobin
Arduino Pulse İndüksiyon Fikri - Flip Bobin

Fikir, Arduino -nu TPIMD -də olduğu kimi Pulse İnduksiya detektoru kimi istifadə etməkdir, çünki çürümə əyrisinin zamanlama fikri olduqca yaxşı işləyir. Pulse İnduksiya detektorlarının problemi normal işləmələri üçün fərqli gərginliyə ehtiyac duymalarıdır. Bobini gücləndirmək üçün bir gərginlik və çürümə əyrisi ilə məşğul olmaq üçün ayrı bir gərginlik. Bu iki gərginlik mənbəyi nəbz induksiya detektorlarını həmişə bir az çətinləşdirir.

Bir PI detektorunda bobinin gərginliyinə baxdıqda ortaya çıxan əyri iki fərqli mərhələyə bölünə bilər. Birinci mərhələ, nəbzin özü bobinə enerji verməsi və maqnit sahəsinin qurulmasıdır (1). İkinci mərhələ, bir gərginlik zirvəsi ilə başlayan, sonra bobinin "gücsüz" gərginliyinə (2) qədər sürətlə gedən geriləmə əyrisidir. Problem ondadır ki, nəbzdən sonra bobin polaritesini dəyişir. Nəbz pozitivdirmi (Əlavə olunmuş şəkildəki Var 1.) çürümə əyrisi mənfidir. Nəbz neqativdirsə, çürümə əyrisi müsbət olacaq (Əlavə olunmuş şəkildəki 2. Var)

Bu əsas problemi həll etmək üçün nəbzdən sonra bobinin elektron şəkildə "çevrilməsi" lazımdır. Bu vəziyyətdə nəbz pozitiv ola bilər və çürümə əyrisi də müsbət ola bilər.

Buna nail olmaq üçün bobin nəbzdən sonra Vcc və GND -dən təcrid olunmalıdır. Bu anda söndürmə rezistorundan yalnız bir cərəyan axır. Bu izolyasiya edilmiş bobin və söndürmə müqavimət sistemi, hər hansı bir gərginliyə "yönəldilə" bilər. Bu, nəzəri olaraq birləşmiş müsbət əyri yaradacaq (rəsmin alt hissəsi)

Bu pozitiv əyri, çürümə gərginliyinin istinad gerilimini "keçdiyi" zaman nöqtəsini aşkar etmək üçün müqayisədə istifadə edilə bilər. Bobin yaxınlığında xəzinələr varsa, çürümə əyrisi dəyişir və istinad gerilimini keçən zaman nöqtəsi dəyişir. Bu dəyişikliyi aşkar etmək mümkün deyil.

Bir az sınaqdan sonra aşağıdakı sxem işlədiyini sübut etdi.

Dövrə Arduino Nano modulundan ibarətdir. Bu modul, bobini (SV3 -də) D10 vasitəsilə gücləndirən iki MOSFET tranzistorunu idarə edir. D10 -dakı nəbz bitəndə hər iki MOSFET bobini 12V və GND -dən təcrid edir. Bobindəki qənaət olunan enerji R2 (220 Ohm) vasitəsilə axır. Eyni zamanda R1 (560 Ohm), rulonun əvvəlki müsbət tərəfini GND ilə birləşdirir. Bu, R5 -də (330 Ohm) mənfi çürümə əyrisini müsbət əyriyə dəyişir. Diodlar Arduino giriş pinini qoruyur.

R7, təxminən 0,04V olan bir gərginlik ayırıcısıdır. D7 -dəki çürümə əyrisi D6 -da 0.04 -dən daha çox mənfi olur, bir fasilə tetiklenir və nəbzin bitməsindən sonrakı müddət saxlanılır.

Bobin yaxınlığında metal olması halında çürümə əyrisi daha uzun sürər və nəbzin sonu ilə kəsilmə arasındakı müddət uzanır.

Addım 2: Detektorun qurulması (Breadboard)

Detektorun qurulması (Çörək lövhəsi)
Detektorun qurulması (Çörək lövhəsi)
Detektorun qurulması (Çörək lövhəsi)
Detektorun qurulması (Çörək lövhəsi)
Detektorun qurulması (Çörək lövhəsi)
Detektorun qurulması (Çörək lövhəsi)

Detektor qurmaq olduqca asandır. Bu ya bir çörək taxtasında (orijinal dövrə yapışaraq) və ya hissələri bir PCB üzərində lehimləməklə edilə bilər.

Arduino Nano lövhəsindəki D13 LED metal üçün göstərici olaraq istifadə olunur

Çörək taxtasının açılması, işləyən detektorun ən sürətli yoludur. Kiçik bir çörək taxtasından istifadə etməklə kifayət qədər telə ehtiyac var. Şəkillərdə bu 3 addımda göstərilir, çünki Arduino və MOSFET -lər bəzi telləri gizlədir. Test edərkən əvvəlcə fərq etmədən diodları birtəhər ayırdım. Bu detektorun davranışına heç bir mənfi təsir göstərmədi. Dövrün PCB versiyasında onları tamamilə tərk etdim.

0.96 OLED ekrana olan bağlantılar şəkillərdə göstərilməyib. Bu ekran bağlıdır:

Vcc - 5V (Arduino pinində, təchizat gərginliyi deyil !!!)

GND - GND

SCL - A5

SDA - A4

Bu OLED Ekran əvvəlcə detektoru kalibr etmək üçün lazımdır. Bu, Arduinonun PIN6 -da doğru gərginliyi təyin etməklə edilir. Bu gərginlik 0,04 V ətrafında olmalıdır. Ekran düzgün gərginliyi təyin etməyə kömək edir.

Çörək taxtası versiyası olduqca yaxşı işləyir, baxmayaraq ki, vəhşi təbiətə getmək üçün uyğun deyil.

Addım 3: PCB -yə keçin

PCB gedir
PCB gedir
PCB gedir
PCB gedir
PCB gedir
PCB gedir
PCB gedir
PCB gedir

Lehimləmə məsələsinə gəldikdə, iki tərəfli yüksək texnologiyalı PCB-ni həqiqətən sevmirəm, buna görə də dövrə tərəfli bir PCB-yə uyğun olaraq dəyişdirdim.

Aşağıdakı dəyişikliklər edildi:

1. diodlar kənarda qaldı.

2. MOSFET -lərin qapıları 10 Ohm müqavimət aldı

3. D6-dakı gərginlik bölücü üçün təchizat gərginliyi D8-də YÜKSƏK səviyyəli siqnalla verilir

4. MOSFET -lər üçün sürücü pimi dəyişdirildi.

Bu yolla universal PCB -lərdə lehimlənə bilən tək tərəfli PCB yaradıla bilər. Bu dövrəni istifadə edərək, yalnız 8-10 xarici komponentdən ibarət olan işləyən bir PI detektoruna sahib olacaqsınız (OLED ekranın və/və ya dinamikin istifadə olunmasından asılı olaraq).

Addım 4: Detektorun qurulması və istifadəsi

Detektorun qurulması və istifadəsi
Detektorun qurulması və istifadəsi
Detektorun qurulması və istifadəsi
Detektorun qurulması və istifadəsi
Detektorun qurulması və istifadəsi
Detektorun qurulması və istifadəsi

Detektor düzgün qurulubsa və proqram Arduinoya yazılıbsa, cihazı qurmağın ən asan yolu (yeganə olmasa da) OLED displeydən istifadə etməkdir. Ekran 5V, GND, A4, A5 -ə bağlıdır. Cihaz işə salındıqdan sonra ekranda "kalibrləmə" göstərilməlidir. Bir neçə saniyə sonra "kalibrləmə tamamlandı" yazmalı və ekranda üç rəqəm göstərilməlidir.

Birinci nömrə, kalibrləmə zamanı müəyyən edilən "istinad dəyəri" dir. İkinci dəyər, son ölçülən son dəyər və üçüncü dəyər, son 32 ölçmənin ortalamasıdır.

Bu üç dəyər az-çox eyni olmalıdır (test hallarımda 1000-dən aşağı). Orta dəyər az və ya çox sabit olmalıdır.

İlkin qurulmaya başlamaq üçün bobinin yaxınlığında heç bir metal olmamalıdır.

İndi gərginlik bölücü (trim potansiometr) kəsilməlidir ki, sabit oxu verərkən aşağı iki dəyər maksimuma qoyulsun. Orta dəyərin qəribə oxunuşlar verməyə başladığı kritik bir parametr var. Yenidən sabit dəyərlər əldə etmək üçün trimeri geri çevirin.

Elə ola bilər ki, ekran donacaq. Yalnız sıfırlama düyməsini basın və yenidən başlayın.

Quruluşum üçün (bobin: 20 sm-də 18 dönüş) sabit dəyər 630-650 civarındadır. Quraşdırıldıqdan sonra sıfırlama düyməsini basın, vahid yenidən kalibrlənir və bütün ağac dəyərləri yenidən eyni aralıqda olmalıdır. Metal hal-hazırda sarım halına gətirilirsə, Arduino-Board (D13) üzərindəki LED yanmalıdır. Əlavə edilmiş dinamik bəzi klik səsləri verir (orada proqramlaşdırmanın təkmilləşdirilməsi üçün yer var).

Yüksək gözləntilərin qarşısını almaq üçün:

Detektor bəzi şeyləri aşkar edir, amma çox sadə və məhdud bir detektor olaraq qalır.

Bacarıqlar haqqında təəssürat yaratmaq üçün fərqli detektorlar ilə bir sıra istinadlar etdi. Nəticələrə baxdıqda, yalnız 8 xarici hissəyə malik, lakin peşəkar detektorlara uyğun olmayan bir detektor üçün hələ də olduqca təsir edicidir.

Dövrə və proqrama baxanda təkmilləşdirmək üçün çox yer var. Rezistorların dəyərləri təcrübə nəticəsində tapıldı, 250ms -lik nəbz vaxtı təsadüfi olaraq seçildi, bobin parametrləri də. Təkmilləşdirmə üçün fikirləriniz varsa, bunları müzakirə etməkdən çox məmnun olaram.

Əylənin!

Addım 5: Yeniləmə1: 16x2 LCD istifadə edin

Yeniləmə1: 16x2 LCD istifadə
Yeniləmə1: 16x2 LCD istifadə
Yeniləmə1: 16x2 LCD istifadə
Yeniləmə1: 16x2 LCD istifadə
Yeniləmə1: 16x2 LCD istifadə
Yeniləmə1: 16x2 LCD istifadə

Təkmilləşdirmələr

Əlavə testlər zamanı I2C OLED Ekran kitabxanasının xeyli vaxt sərf etdiyini anladım. Bunun əvəzinə I2C çeviricisi olan 16x2 ekran istifadə etmək qərarına gəldim.

Buna görə proqramı bəzi faydalı xüsusiyyətlər əlavə edərək LCD ekrana qəbul etdim. Ekranın ilk sətri indi mümkün bir işarənin siqnal gücünü göstərir. İkinci sətir indi iki dəyər göstərir. Yumruq, kalibrləmə dəyəri ilə müqayisədə cari siqnalın sapmasını göstərir. Bu dəyər "0" olmalıdır. Bu dəyər daim mənfi və ya pozitivdirsə, sıfırlama düyməsinə basaraq detektor yenidən kalibrlənməlidir. Müsbət dəyərlər, rulonun yaxınlığında metal olduğunu göstərir.

İkinci dəyər, çürümə əyrisinin faktiki gecikmə dəyərini göstərir. Bu dəyər ümumiyyətlə o qədər də maraqlı deyil, ancaq detektorun ilkin qurulması üçün lazımdır.

Proqram artıq ardıcıl olaraq birdən çox nəbz müddətinə imkan verir (təcrübəni sınamaq / performansını artırmaq vasitələri). Heç bir fasilə əldə etməmişəm. Beləliklə, standart bir nəbz müddətinə təyin olunur.

Detektorun İlkin Quraşdırılması

Detektor qurarkən, ikinci xəttin ikinci dəyəri aktualdır (birincisi göz ardı edilə bilər). Əvvəlcə dəyər "qeyri -sabit" ola bilər (şəklə baxın). Dəyər sabit bir oxunana qədər trim rezistorunu çevirin. Sonra dəyəri maksimum sabit bir dəyərə qaldırmaq üçün çevirin. Yenidən kalibr etmək üçün sıfırlama düyməsini basın və detektor istifadəyə hazırdır.

Maksimum sabit dəyəri təyin edərək, dəmir olmayan metallara qarşı həssaslığımı itirdiyim təəssüratını aldım. Deməli, dəmir olmayan əşyalar üçün yaxşı bir həssaslığa sahib olmaq üçün parametrləri sınaqdan keçirməyə dəyər ola bilər.

Bobinlər

Əlavə sınaq üçün 3 rulon qururam

1 -> 200 mm -də 18 növbə

2 -> 25 mm -də 100 mm

3 -> 100 mm -də 48 dönmə

Maraqlıdır ki, bütün bobinlər demək olar ki, eyni performansla (havada 40-50 mm olan 20ct sikkə) olduqca yaxşı işlədilər. Bu olduqca subyektiv bir müşahidə ola bilər.

Tövsiyə: