» Elektronik » Pengesan logam »Pengesan logam pada Arduino Pro Mini. Pemprosesan kedalaman Kolokolov-Shchedrin mengikut prinsip "Transmisi"

Pengesan Logam pada Arduino Pro Mini. Pemprosesan kedalaman Kolokolov-Shchedrin mengikut prinsip "Transmisi"


Mengitar semula skim dalam air Kolokolov-Shchedrin. Perbezaan dari skim asal:
1. Tidak ada pengayun kristal pada k561 .. cip dan 32 kHz kuarza. Isyarat 32 kHz memberikan Arduino Pro Mini.
2. Litar pemberitahuan bunyi pada 561 siri microcircuits juga tidak hadir, Arduino juga menyuarakan sasaran (Dan saya mesti katakan, ia adalah penyataan yang sangat baik, berbanding skim pengarang).
3. Dikuasakan oleh voltan unipolar 12v (bateri asid plumbum).
4. Laraskan kepekaan dengan butang. Dengan skala ADC dari 0 hingga 1023, ambang tindak balas boleh dilaraskan dari 1 hingga 38 (nilai dengan mudah boleh diubah dalam lakaran).


Pengesan Logam pada Arduino Pro Mini. Pemprosesan kedalaman Kolokolov-Shchedrin mengikut prinsip


Yang paling penting, saya ingin menunjukkan dalam artikel ini bahawa ia mungkin untuk memasang MD pada Arduino tidak kalah dengan kepekaan yang asli (ini dihasilkan, kerana asal litar asli dikumpulkan atas perintah 10 keping, jadi terdapat bahan perbandingan). Litar asal:


Apabila saya mula bekerja dengan Arduino, saya sangat terinspirasi sehingga saya fikir saya dapat mencari dan memasang litar Detektor Logam dari Internet di Arduino yang saya dapat dengan mudah mencari di tempat pembuangan sampah yang luas. Pada dasarnya, ia ternyata seperti itu, tetapi litar-litar itu didasarkan pada kaunter kekerapan, yang tidak membenarkan jangkauan yang sangat baik. Sesetengah mainan kanak-kanak dan ujian pen + percubaan untuk membuat wang pada pemula. Asal MD ini adalah kerja keras sebenar yang membolehkan anda mencari objek besar pada jarak 2m (lihat buku Kolokolov-Shchedrin di Google). Tiada statistik mengenai perubahan md. Saya berharap dia muncul dengan sokongan peminat MD dan Arduino. Skim ini bekerja dengan Arduino Uno dan Arduino Pro Mini.

Lebih lanjut mengenai pautan itu dibentangkan proses kelahiran MD ini di laman web Iron Pematerian, yang berlangsung lebih dari satu tahun dan mendorong penulis untuk mempelajari pengaturcaraan duin. Mungkin lakaran itu kelihatannya celaka kepada seseorang - Saya dengan senang hati akan menerima FIXES anda.




Pada masa ini, ada lakaran yang membolehkan anda melaraskan halangan sensitiviti (pin 7 douins +1 ke halangan, pin 8 -1 ke halangan). .
Arduino mengenai mini 5v, 16MHz, ATmega168 dan paparan yang digunakan. Di sebelah skala adalah penyesuai Mini SD


Seperti yang dikatakan 1602 kos 86 Rubles, ProMini - 82 Rubles. Sekiranya anda mahu, anda boleh secara amnya mengambil ATmega168 telanjang, membangun papan untuknya dan mengisi lakaran terus ke dalamnya.Dan sebagainya, sebagai contoh, saya memasang ibu-bapa di papan MD menggunakan penyambung. Foto menunjukkan palam 6 pin Arduino, di mana sketsa dituangkan terus di papan.

Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

// Input analog A3 untuk voltmeter
// Input analog analog untuk isyarat
/ / 6 kesimpulan zook
// 9 - kekerapan output 31200 Hz
#include
Lcd kristal cecair (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// icon bateri
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // berubah untuk menyimpan nilai tahap skala
 int voltag = 0; // berubah untuk menyimpan nilai voltan
 int noll = 0; // pemboleh ubah untuk menyimpan nilai titik tengah
   #define NUM_SAMPLES 10 // 10 sampel analog untuk dibaca dalam 1 saat
   int sum = 0; // jumlah sampel diambil
   int sun = 0; / sama, tetapi dibahagikan dengan 10
   char unsigned sample_count = 0; // nombor sampel semasa dengan
   voltan terapung = 0.0; // voltan dikira
   const int button1 = 7; / // penghalang ditambah butang
   const int button2 = 8; / // butang halangan-tolak
   int i = 5; // halangan
   
void setup () {
     lcd.begin (16, 2); // paparan inisialisasi
     lcd.setCursor (1, 0);
     lcd.setCursor (10, 1);
     lcd.print ("Rx-Tx");
     kelewatan (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); / // pada pin 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
kekosongan gelung () {
     int buttonState1 = HIGH; / // Butang butang adalah satu
     int buttonState2 = HIGH; / // Dua butang butang
   sample_count = 0; / / reset semula kontur bilangan penambahan
   jumlah = 0; / / reset semula jumlah 10 penambahan
   sementara (sample_count & lt; NUM_SAMPLES) {
   jumlah + = analogRead (A4); // pengukuran seterusnya ditambah kepada jumlah
   sample_count ++; // unit ditambah ke nombor pengukuran
   matahari = jumlah / 10;} // mencari nilai purata dari 10 ukuran
   
   nol = analogRead (A3) / 2; // kuasa midpoint
   voltan terapung = peta (analogRead (A3), 0,1023,0,1500) /100.0;
                                        // Voltmeter dibina pada input A3
   jika (sun & gt; = noll + i) {dikira = peta (matahari, nol + i, nol * 2 - 250, 9, 14);
                                        // jika hasil yang diterima adalah pada skala 9-15 skala
    nada (6, dikira * 100);}
   jika (sun & lt; = noll - i) {dikira = peta (matahari, 116, nol - i, 0, 7);
                                        // jika hasil yang dihasilkan adalah skala segmen 0-7
    nada (6, dikira * 50); }
     jika (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {dikira = 7;
    noTone (6); } // pulau maya ZERO (7 segmen)
     jika (sun & gt; noll & amp; sun & lt; = noll + (i-1)) {diketepikan = 8;
    noTone (6); } // pulau skala ZERO maya (8 segmen)

   
    {lcd.setCursor (dikhitungkan, 0); // tetapkan kursor ke lajur yang dikira, baris 0
    lcd.print ("\ xff"); / // ikon diisi
    lcd.setCursor (0, 1); // berpindah ke 2 baris, lajur-0
    lcd.print (char (1)); // Indikasi Ikon Bateri
    lcd.setCursor (1, 1); // berpindah ke petunjuk voltan
    lcd.print (voltan); // voltan
    lcd.setCursor (7, 0); / // 8 baris 1 baris pertama
    jika (matahari & lt; noll) {lcd.print ("{");} // cetak
    lcd.setCursor (8, 0); // Barisan ke-9 berturut-turut 1
    jika (sun & gt; noll) {lcd.print ("}");} // print
    lcd.setCursor (7, 1);
    lcd.print ("B =");
    lcd.setCursor (9, 1); // 11 lajur baris 2
    lcd.print (i); // halangan
    lcd.setCursor (13, 1); / // Kolum ke-13 ke-2
    lcd.print (sun); / / mencetak nilai purata nilai ADC
    kelewatan (100); // tunggu
    
  buttonState1 = digitalRead (button1); // Baca Butang 1 Status
  buttonState2 = digitalRead (button2); // Tekan butang 2 negeri
  jika (buttonState1 == LOW) {i = i + 1; kelewatan (50);}
                                        // Apabila butang ditekan, penghalang bertambah dengan 1. Tunda 50
  jika (buttonState2 == LOW) {i = i - 1; kelewatan (50);}
                                        // Apabila tombol ditekan, penghalang berkurang dengan 1. Tunda 50
  jika (i & lt; 1) {i = 1;} // Batas bawah penghalang
  jika (i & gt; 38) {i = 38;} // Batas atas penghalang
 
 lcd.clear ();
    }
}

Saya tidak menggunakan kereta. Dua elemen terakhir TL074 telah dibiarkan terbiar. Tetapi di litar dan papan mereka. Anda mungkin mahu membawa mereka ke keadaan kerja sedikit kemudian. Saya percaya bahawa saya telah mencapai matlamat saya. Unit paparan berfungsi dengan hebat. Segala-galanya bergantung kepada MD.
9.8
10
10

Tambah komen

    • senyumtersenyumxaxaokdontknowyahoonea
      bosawalbodohyaya-yaagresifrahsia
      maaftariandance2dance3pengampunanmembantuminuman
      berhentikawan-kawanbaikgoodgoodwiseltolaklidah
      asapbertepuk tangancraymengisytiharkanderisivejangan dengarmuat turun
      panasberalunketawa1mdamesyuaratmoskingnegatif
      not_ipopcornmenghukumbacamenakutkanmenakutkancarian
      mengejekterima kasihinito_clueumnikakutbersetuju
      burukbeeeblack_eyeblum3memerahbermegahkebosanan
      ditapiskesenanganrahsia2mengancamkemenanganyusun_bespectacled
      shokrespektloldiingatiselamat datangkrutoyya_za
      ya_dobryipembantune_huliganne_othodifludlarangantutup
24 ulasan
Penulis
Terima kasih puteec FU! Saya memohon dari kedua kali. Saya menyusun Arduino uno. Masalahnya hilang selepas mengemas kini pemuat but. Sekarang minat bagaimana untuk mengkonfigurasi lagi.
puteec fu
Mana-mana Arduino sesuai untuk atmega168, atmega328. Mengenai nano ini dengan penyambung usb jika tidak salah. Jahit dalam ide Arduino dari contoh lakaran Blink (LED berkelip pada pin 13, LED dipasang pada papan). Pastikan anda menggunakan port yang betul, lembaga dipilih dengan betul, pemproses di papan dipilih dengan betul, frekuensi kuarza di papan dipilih dengan betul, dan kaedah firmware (μ2) dipilih dengan betul.
Ralat tidak ditemui.
Buat fail baru di Arduino, salin lakaran dari sini ke lakaran baru dan bersih dan ia akan berfungsi.Tetapi pertama, buat LED di papan Arduino berkedip dengan contoh berkelip piawai. Kemudian teruskan.
Saya membeli Arduino p nano hanya pada pemproses Atmega328. Saya meninjau sekumpulan video dan forum ... mereka berkata bahawa ia perlu datang .... tetapi kemudian peminjam TIDAK berkelip .... memberikan #include mengharapkan "FILENAME" atau . Adakah sesiapa yang menemui ini?
Penulis
Lakaran kerja dengan papan ini. Apa sebenarnya palam yang terbentuk?
Jika anda mencurahkan lakaran terakhir, maka semua butiran yang berkaitan dengan D3.3 dan D3.4 serta mereka sendiri tidak boleh dipasang. Pada besi pematerian terdapat penyahkodan semula pada topik ini
Anjey888
Hello. Topik ini sangat berminat. Saya mahu memasang peranti ini. Saya membuat papan besi pematerian di luar ... dan kemudian terjebak. Oleh kerana terdapat banyak perselisihan antara lembaga dan litar. Bermula membandingkan papan anda ... itu perbezaan yang besar. Tetapi keliru dengan memanfaatkan Arduino.
Saya meminta pertolongan dari orang yang berpengetahuan.
Penulis
Sama seperti logam lain. Kedalaman pengesanan bergantung pada kawasan sasaran. Lebih-lebih lagi, lebih mendalam.
Eugene tetamu
Apakah had untuk mengesan objek? Emas, aluminium, tembaga.
Tetamu Alexander
Apa yang perlu dilakukan sekarang, kerana masih terdapat halangan Schottky?
Penulis
Nah di sini! Malah nilai terkecil adalah masalah! Terima kasih atas penjelasannya.
Quote: puteec_80
Dan orang akan lebih cepat dan intuitif memahami apa yang saya bicarakan.
Anda boleh terus kekal dalam kesilapan ini. ((Secara teknikal orang celik akan kehilangan sedikit.
BARRIER, suami.
1. Rintangan (sejenis tembok, salib) ditetapkan dalam perjalanan.
2. Pagar, pagar.

THRESHOLD, ambang, suami.
1. Dalam sains dan teknologi, ambang itu dipanggil nilai terkecil, tahap manifestasi sesuatu.
Ambang sensitiviti peranti. | Ambang pendengaran. | Ambang kesakitan. | Sensor dicetuskan apabila ambang suhu yang ditetapkan terlampaui.
senyum
Penulis
Mari kita tinggal dengan kita sendiri. Saya akan menulis "meningkatkan penghalang oleh satu unit" dan "kepekaan penerima adalah 5 μV." Dan anda menulis "Meningkatkan ambang operasi oleh satu unit" dan "ambang kepekaan penerima." Tambahan pula, orang akan lebih cepat dan intuitif memahami apa yang saya bicarakan.
Dan saya menerangkan dalam contoh ini. Tiada ambang tegas, kerana tidak terdapat skala rujukan yang jelas. Terdapat beberapa jenis band terapung dari isyarat terapung. Oleh itu, saya berpendapat definisi halangan lebih sesuai untuk jalur "terapung" ini daripada ambang.
Hujah yang tidak masuk akal dan bodoh. Adakah anda mempunyai sebarang pertanyaan?
Quote: puteec_80
Apakah yang dimaksudkan dengan ambang rendah dan tinggi?
Mungkin makna perkataan diterjemahkan tidak sepadan atau sedikit tidak sepadan. Tetapi mereka betul-betul menerangkan prosesnya dan secara beransur-ansur masuk ke dalam slang.
Betul apa ambang itu. Ambang tindak balas adalah dalam kes anda. Sila terangkan bagaimana "penghalang" menerangkan prosesnya.
Bagi menyertai slang - kini terdapat pelbagai jenis salah faham di sana. ((
Penulis
Dalam kes ini, saya masih menggunakan perkataan "halangan", kerana ia adalah halangan yang ditetapkan dalam teks program, hanya tidak jatuh ke julatnya, isyarat itu dilihat oleh mikrokontroler sebagai berguna. Dan itu halangan kerana Ia mempunyai dua nilai - had atas dan bawah run-in i.e. operasi berlaku di atas "atas" dan di bawah sempadan "bawah" penghalang pada skala ADC. Walau bagaimanapun, anda tahu lebih baik. Apakah yang dimaksudkan dengan ambang rendah dan tinggi?
Mungkin makna perkataan diterjemahkan tidak sepadan atau sedikit tidak sepadan. Tetapi mereka betul-betul menerangkan prosesnya dan secara beransur-ansur masuk ke dalam slang.
By the way. Kepekaan dan penghalang adalah perkara yang sama sekali berbeza.
YaMereka bersilang. Tetapi tidak lebih.
Quote: puteec_80
Di MD asing, menu tersebut mengatakan "Barier".

Saya mungkin akan mengejutkan anda, tetapi banyak perkataan bahasa Inggeris yang kelihatan sama dengan kita mempunyai makna yang berbeza, kadang-kadang dekat, kadang-kadang tidak. Cari perkataan "rakan penterjemah palsu."
Sekarang pada dasarnya. Dalam bahasa Rusia teknikal dokumentasi tidak tidak ada ungkapan "halangan kepekaan" seperti itu - dan itu sahaja! Terdapat "ambang sensitiviti", dalam sesetengah kes seseorang boleh mengatakan "had sensitiviti", tetapi bukan "penghalang kepekaan". Mungkin dalam beberapa cabang ilmu yang digunakan, tetapi tidak dalam bidang elektronik.
Penulis
Nah, ini bermakna semua jurutera asing melompat ke atas satu batang di jalan raya. Di dalam MD asing, menu itu mengatakan "Barier". Kawan Ivan, anda jatuh di mata saya dengan natal kecil! Di manakah komen anda mengenai merit? Selepas itu, anda perlu memegang tangan anda rata di dahi? Anda sering merosakkan saya menghukum
Perbezaannya adalah penting: ambang adalah istilah teknikal, halangan adalah "melekat di jalan."
Penulis
Mungkin. Tetapi saya tidak nampak perbezaannya.
Mungkin bukan "penghalang", tetapi ambang? ;)
Penulis
Rajah tidak menunjukkan butang pelarasan halangan. Mereka disambungkan kepada pin 7 dan 8 Arduino. Setiap ditarik dengan rintangan 10k ke tambah, ditutup apabila anda menekan jisim.
Penulis
kekosongan gelung () {
int buttonState1 = HIGH; / // Butang butang adalah satu
int buttonState2 = HIGH; / // Dua butang butang

int pot = analogRead (A4); / / penapis untuk perubahan isyarat cepat
tanda = tanda * (1-K) + periuk * K;

nol = noll * (1-L) + tanda * L; // penapis isyarat jangka panjang
// Voltmeter dibina pada input A3
voltan terapung = peta (analogRead (A3), 0,1023,0,1500) /100.0;

jika (tanda> = nol + i) {dikira = peta (tanda, nol + i, 1023, 9, 14);
// jika hasil yang diterima adalah pada skala 9-15 skala
nada (6, dikira * 100);}
jika (tanda <= noll - i) {dikira = peta (tanda, 0, nol - i, 0, 7);
// jika hasil yang dihasilkan adalah skala segmen 0-7
nada (6, dikira * 50); }
jika (tanda = noll - (i-1)) {dikira = 7;
noTone (6); } // pulau maya ZERO (7 segmen)
jika (tanda> tiada & & tanda <= nol + (i-1)) {dikira = 8;
noTone (6); } // pulau skala ZERO maya (8 segmen)


{lcd.setCursor (dikhitungkan, 0); // tetapkan kursor ke lajur yang dikira, baris 0
lcd.print ("\ xff"); / // ikon diisi
lcd.setCursor (0, 1); // berpindah ke 2 baris, lajur-0
lcd.print (char (1)); // Indikasi Ikon Bateri
lcd.setCursor (1, 1); // berpindah ke petunjuk voltan
lcd.print (voltan); // voltan
lcd.setCursor (7, 0); / // 8 baris 1 baris pertama
jika (tandakan lcd.setCursor (8, 0); // Barisan ke-9 berturut-turut 1
jika (tanda> nol) {lcd.print ("}");} // cetak
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 lajur baris 2
lcd.print (i); // halangan
lcd.setCursor (13, 1); / // Kolum ke-13 ke-2
lcd.print (tandatangan); / / mencetak nilai purata nilai ADC
kelewatan (10); // tunggu

buttonState1 = digitalRead (button1); // Baca Butang 1 Status
buttonState2 = digitalRead (button2); // Tekan butang 2 negeri
jika (buttonState1 == LOW) {i = i + 1; kelewatan (50);}
// Apabila butang ditekan, penghalang bertambah dengan 1. Tunda 50
jika (buttonState2 == LOW) {i = i - 1; kelewatan (50);}
// Apabila tombol ditekan, penghalang berkurang dengan 1. Tunda 50
jika (i <1) {i = 1;} // Batas bawah penghalang
jika (i> 38) {i = 38;} // Had sempadan atas

lcd.clear ();
}
}
Penulis
Lakaran baru. Algoritma untuk mengesan isyarat berguna telah diubah. Skim ini dipermudahkan, tidak ada elemen D3.4 dan D3.3 dengan semua pengikatan mereka. Sekiranya anda mengambil soket anda sendiri, maka semua butiran ini tidak boleh dipasang. Lebih kepekaan. Tiada kesan palsu.
Lakaran:

/ // Input A3-analog untuk voltmeter. Diukur oleh potensiometer R32.
/ Input A4-analog untuk isyarat. Tetapkan dengan isyarat minimum pada D3.2
// Ristor resistor R40 untuk pembacaan ADC sekitar 510.
/ / 6 kesimpulan zook
// 9 - kekerapan output 31200 Hz
#include
Lcd kristal cecair (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// icon bateri
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // berubah untuk menyimpan nilai tahap skala

voltan terapung = 0.0; // voltan dikira
const int button1 = 7; / // penghalang ditambah butang
const int button2 = 8; / // butang halangan-tolak
int i = 5; // halangan
const float K = 0.1; // penapis pengesanan cepat perubahan (pekali, yang lebih kecil semakin kuat)
const float L = 0.07; // perubahan penjejakan penapis dalam masa yang lama
tanda terapung = 0; // penapis
float noll = 0;

void setup () {
lcd.begin (16, 2); // paparan inisialisasi
lcd.createChar (1, z1);
pinMode (9, OUTPUT);
pinMode (6, OUTPUT);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); / // pada pin 10 PWM = 50% f = 31200Hz
/ / sebenarnya, untuk PWM = 50% anda perlu menetapkan sekurangnya 220 pengisian, menurut oscilloscope
// duin tidak dapat mengatasinya. Ini tidak kritikal.
}
Penulis
Mereka yang akan menonton lakaran. Tanda-tanda> = dan <= telah digantikan oleh kombinasi aneh & gt dan & lt. Mengapa saya tidak tahu. Apabila debug adalah normal.

Kami menasihati anda untuk membaca:

Bawa ia untuk telefon pintar ...