Daftar Isi:

Detektor Induksi Pulsa Berbasis Arduino - Flip Coil: 5 Langkah (dengan Gambar)
Detektor Induksi Pulsa Berbasis Arduino - Flip Coil: 5 Langkah (dengan Gambar)

Video: Detektor Induksi Pulsa Berbasis Arduino - Flip Coil: 5 Langkah (dengan Gambar)

Video: Detektor Induksi Pulsa Berbasis Arduino - Flip Coil: 5 Langkah (dengan Gambar)
Video: Literasi (Team Teaching) - #20 SensorJarak, Sensor Obstacle (Sensor Ping, Infrared, Proximity) (M11) 2024, November
Anonim
Detektor Induksi Pulsa Berbasis Arduino - Flip Coil
Detektor Induksi Pulsa Berbasis Arduino - Flip Coil
Detektor Induksi Pulsa Berbasis Arduino - Flip Coil
Detektor Induksi Pulsa Berbasis Arduino - Flip Coil

Ide

Setelah membangun beberapa detektor logam di masa lalu dengan hasil yang bervariasi, saya ingin menjelajahi kemampuan Arduino ke arah itu.

Ada beberapa contoh bagus tentang cara membuat detektor logam dengan Arduino, beberapa di sini sebagai petunjuk. Tetapi ketika melihatnya, mereka biasanya memerlukan beberapa komponen eksternal untuk perawatan sinyal analog atau sensitivitasnya cukup rendah.

Saat memikirkan detektor logam, topik utamanya adalah bagaimana merasakan sedikit perubahan tegangan pada sinyal yang terkait dengan kumparan pencarian. Perubahan ini biasanya sangat kecil. Pendekatan yang paling jelas adalah menggunakan input analog ATmega328. Tetapi melihat spesifikasinya ada dua masalah mendasar: mereka (sering) lambat dan resolusi (dalam banyak kasus) rendah.

Di sisi lain, Arduino berjalan pada 16MHz dan memiliki beberapa kemampuan pengaturan waktu i. e. resolusi 0,0625µS jika menggunakan kecepatan clock. Jadi, alih-alih menggunakan input analog untuk penginderaan, cara paling sederhana untuk merasakan perubahan dinamis kecil pada tegangan adalah dengan membandingkan perubahan penurunan tegangan dari waktu ke waktu pada tegangan referensi tetap.

Untuk tujuan ini ATmega328 memiliki fitur yang rapi dari sebuah komparator internal antara D6 dan D7. Komparator ini mampu memicu interupsi, memungkinkan penanganan kejadian yang tepat. Meninggalkan rutinitas pengaturan waktu yang dikodekan dengan rapi seperti milis() dan micos() dan masuk ke pengatur waktu internal ATmega328 dengan resolusi yang jauh lebih tinggi, Arduino adalah dasar yang bagus untuk pendekatan pendeteksian logam.

Jadi dari tampilan kode sumber, awal yang baik adalah memprogram komparator internal untuk "mengubah" polaritas input dan menggunakan penghitung internal dengan kecepatan tertinggi untuk perubahan waktu perubahan.

Kode umum di Arduido untuk mencapai ini adalah:

// Mendefinisikan semua variabel pra yang diperlukan dll. dan menyiapkan register

unsigned char clockSelectBits = _BV(CS10); // tidak ada prescale, xtal penuh void setup() { pinMode(6, INPUT); // + dari komparator - dengan mengaturnya sebagai INPUT, mereka // disetel ke pinMode impedansi tinggi(7, INPUT); // - dari komparator - dengan menyetelnya sebagai INPUT, mereka // disetel ke cli impedansi tinggi(); // hentikan interupsi TCCR1A = 0; // setel seluruh register TCCR1A ke 0 TCCR1B = 0; // sama untuk TCCR1B -> mode normalTCNT1 = 0; //inisialisasi nilai counter ke 0; TCCR1B |= clockSelectBits; // menetapkan prescaler dan memulai jam TIMSK1 = _BV(TOIE1); // menyetel timer overflow interrupt aktifkan bit sei(); //izinkan interupsi ACSR = (0 << ACD) | // Komparator Analog: Diaktifkan (0 << ACBG) | // Analog Comparator Bandgap Select: AIN0 diterapkan ke input positif (0 << ACO) | // Output Komparator Analog: Mati (1 << ACI) | // Bendera Interupsi Komparator Analog: Hapus Interupsi Tertunda (1 << ACIE) | // Interupsi Komparator Analog: Diaktifkan (0 << ACIC) | // Tangkap Input Komparator Analog: Dinonaktifkan (0 << ACIS1 | 0 << ACIS0 // interupsi pada output beralih // (0 << ACIS1 | 1 << ACIS0 // dicadangkan // (1 << ACIS1 | 0 << ACIS0 // interupsi pada tepi keluaran yang turun // (1 << ACIS1 | 1 << ACIS0 // interupsi pada tepi masukan yang naik; }

// rutin ini dipanggil setiap kali komparator membuat interupsi

ISR(ANALOG_COMP_vect) { oldSREG=SREG; kli(); cap waktu=TCNT1; SREG = SREG lama; }

// rutin ini dipanggil setiap kali ada overflow di counter internal

ISR(TIMER1_OVF_vect){ timer1_overflow_count++; }

// rutin ini digunakan untuk me-reset timer ke 0

void resetTimer(void){ oldSREG = SREG; kli(); // Nonaktifkan interupsi TCNT1 = 0; //inisialisasi nilai counter ke 0 SREG = oldSREG; // Kembalikan status register TCCR1B |= clockSelectBits; // menyetel prescaler dan memulai pengatur waktu jam1_overflow_count=0; // mengatur ulang penghitung luapan }

Tentu saja ide ini tidak sepenuhnya baru. Bagian utama dari kode ini dapat ditemukan di tempat lain. Implementasi yang baik seperti pendekatan untuk mikrokontroler ditemukan di TPIMD - halaman rumah Detektor Logam Induksi Pulsa Kecil.

www.miymd.com/index.php/projects/tpimd/ (sayangnya halaman ini tidak online lagi, saat ini ada cadangan situs di www.basic4mcu.com, cari "TPIMD").

Langkah 1: Ide Induksi Pulsa Arduino - Flip Coil

Ide Induksi Pulsa Arduino - Flip Coil
Ide Induksi Pulsa Arduino - Flip Coil
Ide Induksi Pulsa Arduino - Flip Coil
Ide Induksi Pulsa Arduino - Flip Coil

Idenya adalah menggunakan Arduino sebagai detektor Induksi Pulsa, seperti di TPIMD, karena ide waktu dari kurva peluruhan tampaknya bekerja dengan cukup baik. Masalah dengan detektor Induksi Pulsa adalah, bahwa mereka biasanya membutuhkan tegangan yang berbeda untuk bekerja. Satu tegangan untuk memberi daya pada koil dan tegangan terpisah untuk menangani kurva peluruhan. Kedua sumber tegangan ini membuat detektor induksi pulsa selalu sedikit rumit.

Melihat tegangan kumparan pada detektor PI, kurva yang dihasilkan dapat dibagi dalam dua tahap yang berbeda. Tahap pertama adalah pulsa itu sendiri yang memberi daya pada koil dan membangun medan magnet (1). Tahap kedua adalah kurva peluruhan tegangan, dimulai dengan puncak tegangan, kemudian disetel cepat ke tegangan "tanpa daya" kumparan (2). Masalahnya adalah, koil mengubah polaritasnya setelah pulsa. Apakah pulsa positif (Var 1. pada gambar terlampir) kurva peluruhan negatif. Apakah pulsa negatif, kurva peluruhan akan positif (Var 2. pada gambar terlampir)

Untuk mengatasi masalah dasar ini, kumparan perlu "dibalik" secara elektronik setelah pulsa. Dalam hal ini pulsa bisa positif dan kurva peluruhan bisa positif juga.

Untuk mencapai ini, koil harus diisolasi dari Vcc dan GND setelah pulsa. Pada saat ini, hanya ada arus yang mengalir melalui resistor redaman. Sistem koil dan resistor redaman yang terisolasi ini dapat "diorientasikan" ke tegangan referensi apa pun. Ini, secara teori akan menciptakan kurva positif gabungan (bagian bawah gambar)

Kurva positif ini kemudian dapat digunakan melalui komparator untuk mendeteksi titik waktu di mana tegangan peluruhan "melintasi" tegangan referensi. Dalam kasus harta karun di dekat koil, kurva peluruhan berubah dan titik waktu melintasi tegangan referensi berubah. Perubahan ini tidak dapat dideteksi.

Setelah beberapa percobaan, rangkaian berikut terbukti berhasil.

Rangkaian ini terdiri dari modul Arduino Nano. Modul ini menggerakkan dua transistor MOSFET yang memberi daya pada koil (pada SV3) melalui D10. Ketika pulsa pada D10 berakhir, kedua MOSFET mengisolasi koil dari 12V dan GND. Energi yang disimpan dalam koil mengalir keluar melalui R2 (220 Ohm). Pada saat yang sama R1 (560 Ohm) menghubungkan sisi positif bekas koil ke GND. Ini mengubah kurva peluruhan negatif pada R5 (330 Ohm) menjadi kurva positif. Dioda melindungi pin input Arduino.

R7 adalah pembagi tegangan sekitar 0,04V. Pada saat kurva peluruhan di D7 menjadi lebih negatif daripada 0,04 di D6, interupsi dipicu dan durasi setelah akhir pulsa disimpan.

Dalam kasus logam dekat kumparan, kurva peluruhan berlangsung lebih lama, dan waktu antara akhir pulsa dan interupsi menjadi lebih lama.

Langkah 2: Membangun Detektor (Breadboard)

Membangun Detektor (Breadboard)
Membangun Detektor (Breadboard)
Membangun Detektor (Breadboard)
Membangun Detektor (Breadboard)
Membangun Detektor (Breadboard)
Membangun Detektor (Breadboard)

Membangun detektor cukup mudah. Ini dapat dilakukan baik pada papan tempat memotong roti (menempel pada sirkuit asli) atau dengan menyolder bagian-bagian pada PCB.

LED D13 pada papan Arduino Nano digunakan sebagai indikasi untuk logam

Menghapus papan tempat memotong roti adalah cara tercepat ke detektor yang berfungsi. Cukup banyak kabel yang dibutuhkan, tetap saja ini bisa dilakukan dengan papan tempat memotong roti kecil. Dalam gambar ini ditunjukkan dalam 3 langkah karena Arduino dan MOSFET menyembunyikan beberapa kabel. Saat menguji saya memutuskan dioda entah bagaimana tanpa memperhatikan pada awalnya. Ini tidak memiliki efek negatif pada perilaku detektor. Dalam versi sirkuit PCB saya meninggalkannya sepenuhnya.

Tidak ditampilkan pada gambar adalah koneksi ke layar OLED 0,96. Tampilan ini terhubung:

Vcc – 5V (pada pin Arduino, bukan tegangan suplai!!!)

GND – GND

SCL – A5

SDA – A4

Tampilan OLED ini diperlukan untuk mengkalibrasi detektor pada awalnya. Ini dilakukan dengan mengatur tegangan yang tepat pada PIN6 Arduino. Tegangan ini harus sekitar 0,04V. Layar membantu mengatur voltase yang tepat.

Versi papan tempat memotong roti bekerja cukup baik, meskipun mungkin tidak cocok untuk pergi ke alam liar.

Langkah 3: Pergi ke PCB

Pergi PCB
Pergi PCB
Pergi PCB
Pergi PCB
Pergi PCB
Pergi PCB
Pergi PCB
Pergi PCB

Untuk penyolderan, saya tidak terlalu suka PCB berteknologi tinggi dua sisi, jadi saya memodifikasi sirkuit agar pas dengan PCB sisi.

Modifikasi berikut dibuat:

1. dioda ditinggalkan.

2. gerbang MOSFET mendapat resistor 10 Ohm

3. tegangan suplai untuk pembagi tegangan di D6 diberikan oleh sinyal level TINGGI di D8

4. pin driver untuk MOSFET diubah.

Dengan cara ini PCB satu sisi dapat dibuat yang dapat disolder pada PCB universal. Dengan menggunakan sirkuit ini, Anda akan memiliki detektor PI yang berfungsi dengan hanya 8-10 komponen eksternal (tergantung apakah layar OLED dan/atau speaker digunakan).

Langkah 4: Menyiapkan dan Menggunakan Detektor

Menyiapkan dan Menggunakan Detektor
Menyiapkan dan Menggunakan Detektor
Menyiapkan dan Menggunakan Detektor
Menyiapkan dan Menggunakan Detektor
Menyiapkan dan Menggunakan Detektor
Menyiapkan dan Menggunakan Detektor

Jika detektor dibangun dengan benar dan program ditulis ke Arduino, cara termudah (jika bukan satu-satunya) untuk mengatur unit adalah dengan menggunakan tampilan OLED. Layar terpasang ke 5V, GND, A4, A5. Layar harus menunjukkan "kalibrasi" setelah unit dinyalakan. Setelah beberapa detik ia akan mengatakan "kalibrasi selesai" dan tiga angka akan ditampilkan di layar.

Angka pertama adalah "nilai referensi" yang diidentifikasi selama kalibrasi. Nilai kedua adalah nilai terukur terakhir dan nilai ketiga adalah nilai rata-rata dari 32 pengukuran terakhir.

Ketiga nilai ini harus kurang lebih sama (dalam kasus pengujian saya di bawah 1000). Nilai tengah harus lebih atau kurang stabil.

Untuk memulai pengaturan awal, tidak boleh ada logam di dekat koil.

Sekarang pembagi tegangan (trim potensiometer) harus dipangkas sehingga dua nilai yang lebih rendah harus diatur ke maksimum sambil tetap memberikan pembacaan yang stabil. Ada pengaturan kritis, di mana nilai tengah mulai memberikan pembacaan yang aneh. Putar kembali pemangkas untuk mendapatkan nilai stabil lagi.

Itu mungkin terjadi, bahwa layar membeku. Cukup tekan tombol reset dan mulai dari awal.

Untuk setup saya (coil: 18 putaran @ 20cm) nilai stabilnya sekitar 630-650. Setelah diatur, tekan tombol reset, unit mengkalibrasi ulang dan semua nilai pohon harus berada dalam kisaran yang sama lagi. Jika logam sekarang dibawa ke koil, LED pada Arduino-Board (D13) akan menyala. Speaker yang terpasang memberikan beberapa suara klik (ada beberapa ruang untuk perbaikan dalam pemrograman di sana).

Untuk mencegah harapan yang tinggi:

Detektor memang mendeteksi beberapa hal, tetapi tetap menjadi detektor yang sangat sederhana dan terbatas.

Untuk memberikan kesan kemampuan, a melakukan beberapa deteksi referensi dengan detektor lain yang berbeda. Melihat hasilnya, masih cukup mengesankan untuk detektor dengan hanya 8 bagian luar tetapi tidak cocok dengan detektor profesional.

Melihat sirkuit dan programnya, ada banyak ruang untuk perbaikan. Nilai resistor ditemukan oleh pengalaman, waktu pulsa 250ms dipilih secara acak, parameter koil juga. Jika Anda memiliki ide untuk perbaikan, saya akan dengan senang hati mendiskusikannya.

Selamat bersenang-senang!

Langkah 5: Perbarui1: Menggunakan LCD 16x2

Pembaruan1: Menggunakan LCD 16x2
Pembaruan1: Menggunakan LCD 16x2
Pembaruan1: Menggunakan LCD 16x2
Pembaruan1: Menggunakan LCD 16x2
Pembaruan1: Menggunakan LCD 16x2
Pembaruan1: Menggunakan LCD 16x2

Perbaikan

Selama pengujian lebih lanjut, saya menyadari bahwa perpustakaan untuk Tampilan OLED I2C menghabiskan banyak waktu. Jadi saya memutuskan untuk menggunakan layar 16x2 dengan konverter I2C.

Jadi saya mengadopsi program ke layar LCD menambahkan beberapa fitur yang berguna. Baris pertama tampilan sekarang menunjukkan kekuatan sinyal dari indikasi yang mungkin. Baris kedua sekarang menunjukkan dua nilai. Tinju menunjukkan penyimpangan sinyal saat ini dibandingkan dengan nilai kalibrasi. Nilai ini harus "0". Jika nilai ini terus-menerus negatif atau positif, detektor harus dikalibrasi ulang dengan menekan tombol reset. Nilai positif menunjukkan logam di dekat koil.

Nilai kedua menunjukkan nilai delay aktual dari kurva peluruhan. Nilai ini biasanya tidak terlalu menarik, tetapi diperlukan untuk pengaturan awal detektor.

Program sekarang memungkinkan beberapa durasi pulsa secara berurutan (sarana untuk bereksperimen / meningkatkan kinerja). Saya tidak mencapai terobosan. Jadi default diatur ke satu durasi pulsa.

Pengaturan Awal Detektor

Saat mengatur detektor, nilai kedua dari baris kedua relevan (yang pertama dapat diabaikan). Awalnya nilainya bisa "tidak stabil" (lihat gambar). Putar resistor trim hingga nilainya mencapai pembacaan yang stabil. Kemudian putar untuk meningkatkan nilai ke nilai stabil maksimum. Tekan tombol reset untuk mengkalibrasi ulang dan detektor siap digunakan.

Saya mendapat kesan bahwa dengan menetapkan nilai stabil maksimum, saya kehilangan sensitivitas untuk logam non-besi. Jadi mungkin perlu beberapa percobaan pengaturan untuk memiliki sensitivitas yang baik untuk hal-hal non-besi.

kumparan

Saya membuat 3 kumparan untuk pengujian lebih lanjut

1 -> 18 putaran @ 200mm

2 -> 25 putaran @ 100mm

3 -> 48 putaran @ 100mm

Menariknya semua kumparan bekerja dengan cukup baik, dengan kinerja yang hampir sama (koin 20 karat pada 40-50mm di udara). Ini mungkin pengamatan yang cukup subjektif.

Direkomendasikan: