Металлоискатель на Arduino

Металлоискатель на Arduino
Датский инженер Dzl, вместе со своим сыном собрали себе металлоискатель на базе контроллера Arduino.

Схема
Схема металлоискателя на Arduino

Частота работы генератора на транзисторе 2n222 зависит от индуктивности поисковой катушки и в отсутствии металла равна ~160кГц (это при авторских параметрах схемы — ёмкость конденсаторов у катушки по 22н и катуша диаметром 15см в 30 витков).
При приближении металлических предметов(особенно железа), индуктивность катушки меняется, меняется и частота генератора, за которой на pin 5 следит программа на Arduino.
Начальное нажатие NULL SW (pin 12) записывает эталонную частоту(начальная калибровка в отсутствии металла вблизи катушки).
При изменении частоты, пьезоизлучатель (pin 13) издаёт «щелчки», которые тем чаще, чем ближе металл.

Скетч ардуино
// Arduino based metal detector
// (C)Dzl july 2013
// http://dzlsevilgeniuslair.blogspot.dk/

// Connect search coil oscillator (20-200kHz) to pin 5
// Connect piezo between pin 13 and GND
// Connect NULL button between pin 12 anf GND

// REMEMBER TO PRESS NULL BUTTON AFTER POWER UP!!


#define SET(x,y) (x |=(1<<y))		        //-Bit set/clear macros
#define CLR(x,y) (x &= (~(1<<y)))       	// |
#define CHK(x,y) (x & (1<<y))           	// |
#define TOG(x,y) (x^=(1<<y))            	//-+

unsigned long t0=0;         //-Last time
int t=0;                    //-time between ints
unsigned char tflag=0;      //-Measurement ready flag

float SENSITIVITY= 1000.0;  //-Guess what

//-Generate interrupt every 1000 oscillations of the search coil
SIGNAL(TIMER1_COMPA_vect)
{
  OCR1A+=1000;
  t=micros()-t0;
  t0+=t;
  tflag=1;
}

void setup()
{
  pinMode(13,OUTPUT);    //-piezo pin
  digitalWrite(12,HIGH); //-NULL SW. pull up
  //-Set up counter1 to count at pin 5
  TCCR1A=0;
  TCCR1B=0x07;
  SET(TIMSK1,OCF1A);
}
//-Float ABS
float absf(float f)
{
  if(f<0.0)
    return -f;
  else
    return f;
}

int   v0=0;  //-NULL value
float f=0;   //-Measurement value
unsigned int FTW=0;    //-Click generator rate
unsigned int PCW=0;    //-Click generator phase
unsigned long timer=0; //-Click timer
void loop()
{
  if(tflag)
  {
    if(digitalRead(12)==LOW)  //-Check NULL SW.
      v0=t;                   //-Sample new null value
    f=f*0.9+absf(t-v0)*0.1;   //-Running average over 10 samples
    tflag=0;                  //-Reset flag

    float clf=f*SENSITIVITY;  //-Convert measurement to click frequency
    if(clf>10000)            
      clf=10000;
    FTW=clf;
  }
  
  //-Click generator
  if(millis()>timer)
  {
    timer+=10;
    PCW+=FTW;
    if(PCW&0x8000)
    {
      digitalWrite(13,HIGH);
      PCW&=0x7fff; 
    }
    else
      digitalWrite(13,LOW);
  }
}


Ссылки
Diy Arduino based metal detector.

Arduino
Arduino, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
  • 0
  • 27 июля 2013, 11:52
  • admin

Комментарии (28)

RSS свернуть / развернуть
+
0
Интересный проект, сегодня заеду куплю транзистор этот и попробую собрать
avatar

iwizard7

  • 29 июля 2013, 06:30
+
0
Уточнение параметров катушки. ...Wire is just plain 0,12mm2 plastic coated wire… диаметр провода ~0.4мм
avatar

Deemega

  • 2 августа 2013, 05:23
+
0
катушку нужно мотать именно проводом 0.4 30 витков? собрал, намотал 15 витков проводом 1.4мм, нивкакую не работает
avatar

iwizard7

  • 4 августа 2013, 06:51
+
0
Да, мотать по рецепту 30 витков D0.4мм. У меня есть только 0.33мм из размагничивающей рамки кинескопа. Но и он работает при тех же количествах витков. Транзистор взял BC107B в металлостеклянном корпусе.
avatar

Deemega

  • 6 августа 2013, 12:32
+
0
Паять схему прямо на концах катушки. Ардуина наверху, а к ней длинные провода от частотной схемы. Кондёры(керамику) лучше брать с компьютерных девайсов. Ноги всех компонентов как можно короче и ближе друг к другу
avatar

Deemega

  • 6 августа 2013, 13:39
+
0
Спасибо, сегодня-завтра попробую, подскажите на какой глубине он видит допустим монету?
avatar

iwizard7

  • 7 августа 2013, 05:39
+
0
Распространенные аналоги 2n2222 — КТ3117А(Б),BC107B,BC109
avatar

Deemega

  • 2 августа 2013, 05:27
+
0
Сделал вот такую печатку на смд, транзистор bc107b, катушка 30 витков провода 0.33, все работает. Помогите пожалуйста теперь разобраться с настройкой, а то что то чувствительность не радует.
avatar

Alexryabkov

  • 7 августа 2013, 14:26
+
0
float SENSITIVITY= 1000.0; //-Guess what
Чувствительность или фильтр или девиация. Уменьшите значение SENSITIVITY
avatar

Deemega

  • 7 августа 2013, 18:19
+
0
Собрал. в целом работает. Делаю сброс, светодиод мигает, подношу металл мигает быстрее. Удаляю — медленнее.
Однако спустя, некоторое время, начинает мигать бешено не зависимо от наличия металла, приходится делать снова сброс. Что это, что то переполняется?
avatar

rgsv

  • 9 августа 2013, 09:38
+
0
А может частота генератора гуляет? частоту на 5пин проверяли? напишите простенький скеч — делитель на 100-1000 входной частоты и послушайте через пьезо.
avatar

Deemega

  • 9 августа 2013, 16:01
+
0
имхо, эта схема — затея для идеи. интереснее взять опорную частоту от ардуины, а измеряющую часть построить по принципу фазосдвигающей и улавливать биения опорной и сдвинутой. то же самое делает скеч в данном случае, но ему по барабану частота внешнего генератора. вот и кнопка появилась.
avatar

Deemega

  • 9 августа 2013, 16:14
+
0
Не подскажите какого диаметра мотать кольцо?
avatar

aspo

  • 9 августа 2013, 21:29
+
0
катушка должна быть плоская, начальный диаметр 15см, я мотал одной жилой от витухи
avatar

iwizard7

  • 11 августа 2013, 08:06
+
0
Народ поскажите к какому пину цеплять 5 аналогоговый или 5 цифровой? и еще такой момент, собрал схему, не работает, все перепроверил раз на 50, транзистор как написано 2n2222 номиналы деталей тоже все как в схеме, катушка по рецепту, когда подаешь питание на ардуину тишина, если делаешь сброс на ардуине происходит три щелчка через пьезу и тишина, схема на работает, транзистор целый, измерял через мультиметр, резюки тоже, кондюки измерить не могу, не мериит у меня их мультиметр, может быть что изза них схема может не рааботать?
avatar

iwizard7

  • 11 августа 2013, 08:13
+
0
У меня такая же история. Точно так же 3 щелчка и тишина…
avatar

DenisUfa

  • 4 сентября 2014, 11:30
+
0
Всё сделал как здесь написано, но к сожалению не работает. Использую Arduino Leonardo. Выдаёт однотонное пищяние. С стандартным значением SENSITIVITY пищит как не нормальный. Все детали как написано брал только транзистор биполярный 2N2222A. Может проблема заключаться в нём? И ещё не могу понять принцип работы программы. Она отсчитывает промежуток времени между двумя импульсами и сравнивает его? Прав ли я? И на последок какой порт использовать аналоговый или цыфровой?
avatar

aspo

  • 20 августа 2013, 17:13
+
0
Цифровой.
avatar

DenisUfa

  • 4 сентября 2014, 11:32
+
0
Кто бы ещё написал по шагам, как схема работает. Я вижу что это Генератор Колпитца, но не понимаю как он работает.
avatar

rgsv

  • 2 сентября 2013, 14:51
+
0
Я повторил — работает, только 22 нанофарада я заменил на 2 параллельно по 10, и сопротивление 1,2КОм составил из последовательно подключенных 1КОм и 220Ом. Ну и транзистор у меня был только bc337. Кроме пьезопищалки, параллельно на 13 пин повесил светодиод белый через 220Ом.
Всё это добро я разместил на шилде для Uno.
Катушку пока серьезную не мотал, лишь проверочную — диаметром жилы 0,3мм, кольцо 10 см, 15 витков. Больше кабеля не было.
Парогенератор Ego-Tank и канцелярский металлический нож засекает за 10 см, а вот на боковые кусачки и мелкие узкогубцы очень слабо реагирует.
Монеты 10 и 5 рублей «чует» за 5 см от катушки.
В планах прикрутить дисплей 16 на 2 и прошивку доработать.
avatar

jishi

  • 14 февраля 2014, 09:01
+
0
Собрал на 2n2222a, не работает и все(
avatar

DenisUfa

  • 4 сентября 2014, 11:28
+
0
Ребят подскажите как на Arduino nano 3.0 назначить 5 pin? Вообще где обозначен 5 pin в скетче?
avatar

DenisUfa

  • 4 сентября 2014, 18:04
+
0
а кто-нибуть считал какая индуктивности у катушки сего девайса — зная индуктивность можно пересчитать на любой размер и провод, у меня получаются разные цифры или 90 или 380 милиГенри, в зависимости от чего считать от емкости кондеров или от параметров катушки.
На симуляторе очень сильно частота бегает в зависимости от того какой транзюк, при 2n2222 и катушке 90 осцилограф выдает что то очень близкое к заявленным 160 килогерцам, но при этом катушка должны быть на 15 витков указанного провода, если я правильно перевел что она намотана в плоскости толщиной в одну жилу.
avatar

deathbel

  • 1 октября 2014, 22:11
+
0
Наматывать нужно вокруг диаметра 15 см 30 витков? То есть можно использовать пятилитровую бутылку? Второй вариант — это обмотка вокруг предмета меньшего диаметра, типа лампы из ИКЕИ. Тогда вопрос — какой должен быть диаметр, сколько витков? И нужно получается наматывать в горизонтальной плоскости?
avatar

wmakc

  • 11 марта 2015, 10:52
+
0
Помогите, пожалуйста. Собрал все по схеме, но без светодиода. После включения ардуино уно в сеть из пьезоизлучателя доносится короткий звук и все. Пропобовал сбрасывать все то же самое. Конденсаторы керамические на 12в, транзистор 2n2222 на 3в, пьезоизлучатель на 12в. Это первый мой проект, понимаю пока мало.
avatar

Novikovi

  • 28 июля 2016, 11:38
+
0
А светодиод надо подключать параллельно с пьезоизлучателем?
avatar

Novikovi

  • 28 июля 2016, 11:56
+
0
Надо вписывать какие то значение в скетч?
avatar

Novikovi

  • 28 июля 2016, 14:40
+
0
Собрали по схеме, добавили двух цветовой светодиод (немного изменили программный код)
Снял осциллограмму и вот самое интересно:
при поднесении металлического диска частот почему-то увеличивается, хотя по формуле Томсона она должна уменьшаться… Как объяснить это явление?
ссылка на видео https://www.youtube.com/watch?v=wzDUtW9iKmA
или вот здесь www.fizikaotfizika.ru/forum/6-19-1
помогите разобраться с чем связан прирост частоты
С уважением
avatar

Jurius

  • 22 марта 2017, 15:18

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.