» elektronik » Metal dedektörleri »Arduino Pro Mini'de metal dedektörü. Kolokolov-Shchedrin'in derinliklerinin “İletim” ilkesine göre işlenmesi

Arduino Pro Mini'de Metal Dedektörü. Kolokolov-Shchedrin'in derinliklerinin “İletim” ilkesine göre işlenmesi


Kolokolov-Shchedrin derin su planının geri dönüşümü Orijinal şemadan farklılıklar:
1. k561 .. çipi ve 32 kHz kuvars üzerinde NO kristal osilatör yoktur. 32 kHz sinyali Arduino Pro Mini'yi verir.
2. Birkaç 561 serisi mikro devrede de sesli bildirim devreleri yoktur - hedefleri de seslendirir Arduino (ve yazarın devresine kıyasla mükemmel sesler söylemeliyim).
3. tek kutuplu gerilim 12 v (kurşun-asit pil) tarafından desteklenmektedir.
4. Hassasiyeti düğmeleri ile ayarlayın. 0 ila 1023 arasındaki ADC ölçeği ile yanıt eşiği 1 ila 38 arasında ayarlanabilir (değer çizimde kolayca değiştirilebilir).


Arduino Pro Mini'de Metal Dedektörü. Kolokolov-Shchedrin'in derinliklerinin “İletim” ilkesine göre işlenmesi


En önemlisi, bu makalede, orijinal olarak orijinalinden daha düşük olmayan Arduino'daki MD'leri bir araya getirmenin mümkün olduğunu göstermek istedim (bu işe yaradı, çünkü orijinal devrenin orijinalleri 10 parça sırasına göre toplandı, bu yüzden karşılaştırma için malzeme var). Orijinal devre:


Arduino ile çalışmaya ilk başladığımda, o kadar hevesliydim ki, Arduino'daki İnternet'ten herhangi bir Metal Dedektörü devresini bulabileceğimi ve monte edebileceğimi düşündüm ve büyük çöplükte kolayca bulabildim. Prensipte, bu şekilde ortaya çıktı, ancak devreler, gerçekten iyi bir aralığa ulaşmaya izin vermeyen bir frekans sayacına dayanıyordu. Bazı çocuk oyuncakları ve kalem testi + yeni başlayanlara para kazanmaya çalışır. Bu MD'nin orijinali, 2m mesafede büyük nesneler bulmanızı sağlayan gerçek bir çalışma atıdır (Google'daki Kolokolov-Shchedrin kitabına bakın). Dönüştürülen MD için istatistik yok. Umarım MD ve Arduino hayranlarının desteğiyle görünür. Program Arduino Uno ve Arduino Pro Mini ile çalıştı.

Bağlantıda ayrıca, bu MD'nin bir yıldan fazla süren ve yazarı programlama duayı çalışmaya iten Havya'nın web sitesinde doğum süreci ortaya konmuştur. Belki de kroki birine sefil görünecektir - DÜZELTME'nizi memnuniyetle kabul edeceğim.




Şu anda, duyarlılık bariyerini ayarlamanıza izin veren bir taslak vardır (pim 7 douins +1 bariyere, pim 8 -1 bariyere). .
Mini 5v, 16MHz, ATmega168 hakkında Arduino ve ekran bunları kullandı. Terazinin yanında Mini SD adaptörü


Daha önce de belirtildiği gibi 1602'nin 86 ruble, ProMini - 82 ruble. İsterseniz, çıplak bir ATmega168 bile alabilir, bunun için bir tahta geliştirebilir ve çizimi doğrudan içine doldurabilirsiniz.Örneğin, MD-kartına konektörü kullanarak anne-baba kurdum. Fotoğraf, çizimlerin doğrudan tahtaya döküldüğü Arduino'nun 6 pimli fişini göstermektedir.

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

// Voltmetre için A3 analog giriş
// Sinyal için A4 analog giriş
// 6- Hayvanat bahçesinin sonucu
// 9 - çıkış frekansı 31200 Hz
#include
Likit Kristal lcd (12, 11, 5, 4, 3, 2);
                                       
  bayt z1 [8] = {// pil simgesi
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int sayılır = 0; // ölçek seviyesi değerini saklamak için değişken
 int voltag = 0; // voltaj değerini saklamak için değişken
 int noll = 0; // orta nokta değerini saklamak için değişken
   #define NUM_SAMPLES 10 // 10 analog örnek 1 saniyede okunacak
   int toplamı = 0; // alınan örneklerin toplamı
   int güneş = 0; // aynı, ancak bölü 10
   unsigned char sample_count = 0; // ile geçerli örnek numarası
   şamandıra gerilimi = 0.0; // hesaplanan voltaj
   const int düğmesi1 = 7; // bariyer artı düğmesi
   sabit int düğme2 = 8; // bariyer eksi düğmesi
   int i = 5; // bariyer
   
void setup () {
     lcd başlangıç ​​(16, 2); // başlatmayı görüntüle
     lcd.setİmleç (1, 0);
     lcd.setİmleç (10, 1);
     lcd.print ("Rx-Tx");
     gecikme (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogyaz (9, 126); // pin 10'da PWM =% 50 f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
void loop () {
     int buttonState1 = YÜKSEK; // Düğmenin durumu birdir
     int buttonState2 = YÜKSEK; // İki düğme durumu
   örnek_sayısı = 0; // ekleme sayısının konturunu sıfırla
   toplam = 0; // 10 eklemenin toplamını sıfırla
   while (sample_count & lt; NUM_SAMPLES) {
   sum + = analogOkuma (A4); // toplama bir sonraki ölçüm eklenir
   sample_count ++; // birim ölçüm numarasına eklenir
   sun = sum / 10;} // 10 ölçümden ortalama değeri bul
   
   noll = analogOkuma (A3) / 2; // orta nokta gücü
   şamandıra gerilimi = harita (analogOkuma (A3), 0,1023,0,1500) /100,0;
                                        // A3 girişinde oluşturulan voltmetre
   eğer (güneş> = noll + i) {sayılır = harita (güneş, noll + i, noll * 2 - 250, 9, 14);
                                        // alınan sonuç ölçeğin 9-15. segmentindeyse
    ton (6, sayılır * 100);}
   eğer (sun  noll & sun; = noll + (i-1)) {sayılır = 8;
    noTone (6); } // sanal SIFIR ölçeği adası (8 segment)

   
    {lcd.setCursor (sayılanlar, 0); // imleci sayılanlar sütununa ayarlayın, satır 0
    lcd.print ("\ xff"); // dolu simge
    lcd.setİmleç (0, 1); // 2 satıra git, sütun-0
    lcd.print (karakter (1)); // Pil Simgesi Göstergesi
    lcd.setİmleç (1, 1); // voltaj göstergesine geç
    lcd.print (voltaj); // voltaj
    lcd.setİmleç (7, 0); // 8. sütun 1. sıra
    if (sun & n; noll) {lcd.print ("{");} // yazdır
    lcd.setİmleç (8, 0); // 9. sütun 1. sıra
    if (sun & gt; noll) {lcd.print ("}");} // yazdır
    lcd.setİmleç (7, 1);
    lcd.print ("B =");
    lcd.setİmleç (9, 1); // 11 sütun 2. sıra
    lcd.print (i); // bariyer
    lcd.setİmleç (13, 1); // 13. sütun 2. sıra
    lcd.print (güneş); // ADC değerinin ortalama değerini yazdır
    gecikme (100); // bekle
    
  buttonState1 = digitalRead (düğme1); // Okuma Düğmesi 1 Durumu
  buttonState2 = digitalRead (düğme2); // Oku düğmesi 2 durumu
  if (buttonState1 == DÜŞÜK) {i = i + 1; gecikme (50);}
                                        // Düğmeye basıldığında, bariyer 1 büyür. Gecikme 50
  if (buttonState2 == DÜŞÜK) {i = i - 1; gecikme (50);}
                                        // Düğmeye basıldığında, bariyer 1 azalır. Gecikme 50
  if (i <1) {i = 1;} // Bariyerin alt sınırı
  if (i & gt; 38) {i = 38;} // Bariyerin üst sınırı
 
 lcd.clear ();
    }
}

Arabayı kullanmadım, TL074'ün son iki unsuru boş kaldı. Ancak devre ve kart üzerinde. Biraz sonra çalışma koşullarına getirmek isteyebilirsiniz. Hedefime ulaştığımı düşünüyorum. Ekran ünitesi harika çalışıyor. Diğer her şey MD'ye bağlıdır.
9.8
10
10

Yorum ekle

    • gülümsegülümsemelerxaxatamamdontknowyahoonea
      patronçizikaptalevetevet-evetagresifgizli
      üzgünümdansdance2dance3pardonyardımiçecekler
      Durarkadaşlariyigoodgooddüdükbaygınlıkdil
      dumanzırıltıcraybeyanalaycıDon-t_mentionindir
      ısıöfkelilaugh1mdatoplantımoskingnegatif
      Not_ipatlamış mısırcezalandırmakokumakkorkutmakkorkutuyorarama
      alaythank_youbuto_clueumnikakutanlaşmak
      kötübeeeblack_eyeblum3kızarmakövünçcan sıkıntısı
      sansürlüşakasecret2tehdit etmekzaferyusun_bespectacled
      shokrespektlolPrevedkarşılamaKrutoyya_za
      ya_dobryiyardımcıne_huliganne_othodiFludyasakyakın
24 yorumlar
Yazar
Teşekkürler puteec FU! İkinci kez talep ettim. Arduino uno'yu diktim. Önyükleyici yüklendikten sonra sorun ortadan kalktı. Şimdi nasıl yapılandırılacağına ilgi duyuyor.
puteec fu
Herhangi bir Arduino, atmega168, atmega328 için uygundur. Nano hakkında bu bir usb konektörü ile yanlış değilse. Arduino ide'de Blink çiziminin örneklerinden dikin (pim 13'teki yanıp sönen LED'ler, LED panoya monte edilir). Doğru bağlantı noktasını kullandığınızdan, kartın doğru seçildiğinden, karttaki işlemci doğru seçildiğinden, karttaki kuvars frekansının doğru seçildiğinden ve bellenim yönteminin (μ2) doğru seçildiğinden emin olun.
Hata ile karşılaşılmadı.
Arduino'da yeni bir dosya oluşturun, taslağı buradan yeni ve temiz bir taslağa kopyalayın ve çalışacaktır.Ama önce, Arduino kartındaki LED'i standart yanıp sönen bir örnekle yanıp söner. Sonra devam et.
Arduino p nano'yu sadece Atmega328 işlemciden aldım. Bir grup video ve forumları inceledim ... gelmesi gerektiğini söylediler .... ama sonra bummer yanıp sönmüyor .... #include "FILENAME" veya bekliyor. Bununla karşılaşan var mı?
Yazar
Bir taslak bu tahta ile çalışır. Tapa tam olarak ne oluşturur?
Son çizimi dökerseniz, D3.3 ve D3.4 ile ilgili tüm detaylar ve kendileri yüklenemez. Havyada bu konuda yeniden çizim var
Anjey888
Merhaba Bu konu çok ilgilendi. Cihazı monte etmek istiyorum. Hareket halindeyken bir havya tahtası yaptım ... ve sonra sıkıştım. Yönetim kurulu ve devre arasında birçok anlaşmazlık olduğu için. Tahtanızı karşılaştırmaya başladı ... bu büyük bir fark. Ama Arduino'nun koşum takımı ile karıştı.
Bilgili insanların yardımını istiyorum.
Yazar
Diğer metallerle aynı. Tespit derinliği hedefin alanına bağlıdır. Daha fazla, daha derin.
Konuk Eugene
Nesneleri tespit etmenin sınırları nelerdir? Altın, alüminyum, bakır.
Konuk Alexander
Şimdi ne yapmalı, çünkü hala bir Schottky bariyeri var mı?
Yazar
Peki burada! Hakkında en küçük değer bile söz konusu değil! Açıklama için teşekkürler.
Alıntı: puteec_80
Ve insanlar neden bahsettiğimi daha hızlı ve sezgisel olarak anlayacaklar.
Bu hatada kalmaya devam edebilirsiniz. ((Teknik olarak okuryazar insanlar küçük bir kayıp olacaktır.
BARİYER, koca.
1. Bir engel (bir tür duvar, kiriş) şekilde ayarlanmıştır.
2. Çit, eskrim.

THRESHOLD, eşik, koca.
1. Bilim ve teknolojide, eşik değere en küçük değer, bir şeyin tezahür derecesi denir.
Cihazın hassasiyet eşiği. | İşitme eşiği. | Ağrı eşiği. | Ayarlanan sıcaklık eşiği aşıldığında sensör tetiklenir.
gülümse
Yazar
Kendimizle kalalım. "Bariyeri bir birim arttırmak" ve "alıcının hassasiyeti 5 μV idi" yazacağım. Ve “Birimin çalışma eşiğini arttırmak” ve “alıcının hassasiyet eşiğini” yazıyorsunuz. Üstelik insanlar neden bahsettiğimi daha hızlı ve sezgisel olarak anlayacaklar.
Ve bu örnekte açıklarım. Kesin olarak konuşan bir eşik yoktur, çünkü net bir referans ölçeği yoktur. Kayan bir sinyalden bir tür kesme kayan bant var. Bana öyle geliyor ki, bir bariyer tanımının bu “yüzen” şerit için bir eşik değerden çok daha uygun olduğu görülüyor.
Genellikle anlamsız ve aptalca bir tartışma. Sorunuz mu var?
Alıntı: puteec_80
Alt ve üst eşikleri nelerdir?
Belki çevrilmiş kelimelerin anlamları uyuşmuyor veya biraz uyuşmuyor. Ancak süreci mükemmel bir şekilde tanımlar ve yavaş yavaş argoya girerler.
Tam olarak eşiğin ne olduğu. Yanıt eşiği sizin durumunuzdadır. Lütfen “engel” in süreci nasıl açıkladığını açıklayınız.
Argoya katılmaya gelince - şimdi orada birçok yanlış anlama var. ((
Yazar
Bu durumda, hala "bariyer" kelimesini kullanma eğilimindeyim, çünkü program metninde ayarlanan bariyerdir, ancak aralığına girmeden sinyal mikrodenetleyici tarafından yararlı olarak algılanır. Ve bu bir engel çünkü İki değeri vardır - alıştırma işleminin üst ve alt sınırları, yani. işlem ADC skalasındaki bariyerin "üst" ve "alt" sınırlarının altında gerçekleşir. Ancak, daha iyisini biliyorsun. Alt ve üst eşikleri nelerdir?
Belki çevrilmiş kelimelerin anlamları uyuşmuyor veya biraz uyuşmuyor. Ancak süreci mükemmel bir şekilde tanımlarlar ve yavaş yavaş argoya girerler.
Bu arada. Hassasiyet ve bariyer tamamen farklı şeylerdir.
Evet.Kesişiyorlar. Ama artık yok.
Alıntı: puteec_80
Yabancı MD'de menüde "Barier" yazıyor.

Sizi şaşırtabilirim, ama bizimkine benzeyen birçok İngilizce kelimenin farklı bir anlamı var, bazen yakın, bazen değil. "Sahte çevirmen arkadaşlar" kelimesini arayın.
Şimdi esasen. Rusça teknik belgeleme hayır böyle bir “duyarlılık bariyeri” diye bir ifade yoktur - ve hepsi bu kadar! Bir “duyarlılık eşiği” vardır, bazı durumlarda “duyarlılık sınırı” diyebilir, “duyarlılık engeli” olamaz. Belki de bilginin diğer bazı dallarında kullanılır, ancak elektronikte kullanılmaz.
Yazar
Yani, tüm yabancı mühendisler yolda bir çubuğun üzerinden atlıyorlar. Yabancı MD'de menü "Barier" diyor Yoldaş Ivan, böyle küçük nitpick ile gözlerime düşüyorsun! Esas hakkındaki yorumlarınız nerede? Bundan sonra ellerinizi alnın üzerine düz olarak çırpmanız mı gerekiyor? Beni sık sık şımartırdın cezalandırmak
Fark önemlidir: eşik teknik bir terimdir, bariyer “yol boyunca bir çubuktur”.
Yazar
Belki. Ama farkı görmüyorum.
Belki bir "engel" değil, bir eşik? ;)
Yazar
Diyagram bariyer ayar düğmelerini göstermemektedir. Arduino'nun 7 ve 8 pinlerine bağlanırlar. Her biri artıya 10 k dirençle çekti, kütleye bastığınızda kapanır.
Yazar
void loop () {
int buttonState1 = YÜKSEK; // Düğmenin durumu birdir
int buttonState2 = YÜKSEK; // İki düğme durumu

int pot = analogOkuma (A4); // hızlı sinyal değişimi için filtre
işaret = işaret * (1-K) + pot * K;

noll = noll * (1-L) + işareti * L; // uzun süreli sinyal filtresi
// A3 girişinde oluşturulan voltmetre
şamandıra gerilimi = harita (analogOkuma (A3), 0,1023,0,1500) /100,0;

if (işaret> = noll + i) {sayımlar = harita (işaret, noll + i, 1023, 9, 14);
// alınan sonuç ölçeğin 9-15. segmentindeyse
ton (6, sayılır * 100);}
if (işaret <= noll - i) {sayılır = harita (işaret, 0, noll - i, 0, 7);
// eğer ortaya çıkan sonuç ölçeğin 0-7 segmenti ise
ton (6, sayılar * 50); }
if (işaret = noll - (i-1)) {sayılır = 7;
noTone (6); } // sanal SIFIR adacığı (7 segment)
eğer (sign> noll && sign <= noll + (i-1)) {sayılır = 8;
noTone (6); } // sanal SIFIR ölçeği adası (8 segment)


{lcd.setCursor (sayılanlar, 0); // imleci sayılanlar sütununa ayarlayın, satır 0
lcd.print ("\ xff"); // dolu simge
lcd.setİmleç (0, 1); // 2 satıra git, sütun-0
lcd.print (karakter (1)); // Pil Simgesi Göstergesi
lcd.setİmleç (1, 1); // voltaj göstergesine geç
lcd.print (voltaj); // voltaj
lcd.setİmleç (7, 0); // 8. sütun 1. sıra
if (işaret lcd.setİmleç (8, 0); // 9. sütun 1. sıra
if (sign> noll) {lcd.print ("}");} // yazdır
lcd.setİmleç (7, 1);
lcd.print ("B =");
lcd.setİmleç (9, 1); // 11 sütun 2. sıra
lcd.print (i); // bariyer
lcd.setİmleç (13, 1); // 13. sütun 2. sıra
lcd.print (işaret); // ADC değerinin ortalama değerini yazdır
gecikme (10); // bekle

buttonState1 = digitalRead (düğme1); // Okuma Düğmesi 1 Durumu
buttonState2 = digitalRead (düğme2); // Oku düğmesi 2 durumu
if (buttonState1 == DÜŞÜK) {i = i + 1; gecikme (50);}
// Düğmeye basıldığında, bariyer 1 büyür. Gecikme 50
if (buttonState2 == DÜŞÜK) {i = i - 1; gecikme (50);}
// Düğmeye basıldığında, bariyer 1 azalır. Gecikme 50
if (i <1) {i = 1;} // Bariyerin alt sınırı
if (i> 38) {i = 38;} // Bariyerin üst sınırı

lcd.clear ();
}
}
Yazar
Yeni çizim. Yararlı sinyali tespit etme algoritması değiştirildi. Şema basitleştirilmiştir, tüm bağları ile D3.4 ve D3.3 unsurları yoktur. Kendi imzanızı alırsanız, tüm bu detaylar kolayca kurulamaz. Daha fazla hassasiyet. Yanlış pozitif yok.
eskiz:

// Voltmetre için A3-analog giriş Potansiyometre R32 ile ayarlanabilir.
// Sinyal için A4-analog giriş.D3.2'de minimum sinyal ile ayarlayın
// yaklaşık 510 ADC okumaları için direnç R40.
// 6- Hayvanat bahçesinin sonucu
// 9 - çıkış frekansı 31200 Hz
#include
Likit Kristal lcd (12, 11, 5, 4, 3, 2);

bayt z1 [8] = {// pil simgesi
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int sayılır = 0; // ölçek seviyesi değerini saklamak için değişken

şamandıra gerilimi = 0.0; // hesaplanan voltaj
const int düğmesi1 = 7; // bariyer artı düğmesi
sabit int düğme2 = 8; // bariyer eksi düğmesi
int i = 5; // bariyer
sabit şamandıra K = 0.1; // filtre izleme hızlı değişiklikleri (katsayı. ne kadar küçük o kadar güçlü)
sabit şamandıra L = 0.07; // izleme değişikliklerini uzun süre filtreleyin
kayan işaret = 0; // filtre
şamandıra noll = 0;

void setup () {
lcd başlangıç ​​(16, 2); // başlatmayı görüntüle
lcd.createChar (1, z1);
pinMode (9, ÇIKIŞ);
pinMode (6, ÇIKIŞ);
TCCR1A = TCCR1A ve 0xe0 | 2;
TCCR1B = TCCR1B ve 0xe0 | 0x09;
analogyaz (9, 126); // pin 10'da PWM =% 50 f = 31200Hz
// aslında, PWM =% 50 için, osiloskopa göre en az 220 dolgu ayarlamanız gerekir
// duin halledemez. Bu kritik değil.
}
Yazar
Krokiyi izleyecek olanlar. > = Ve <= işaretlerinin yerine & gt ve

Okumanızı tavsiye ederiz:

Akıllı telefon için verin ...