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

Публикация 25.05.2017

Переработанная версия всеми известного импульсного металлоискателя - "Пирата", но на Arduino. Имеет неплохую чувствительность даже на мелкие монеты. Стабилен в не зависимости от температуры и заряда батареи. Схема максимально упрощена.

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

Из недостатков можно отметить отсутствие возможности определять тип металла. Определять тип могут только металлоискатели с радио излучающим принципом детектирования (сложны в устройстве и требуют точной настройки). Импульсный металлоискатель в свою очередь работает на магнитном детектировании индукционных токов в металле. Индукция при поиске не различима для черный и цветных металлов.

К слову сказать, что есть еще третий тип металлоискателей - частотный. Малоэффективная и очень простая конструкция в основе которой генератор колебаний магнитного контура, который чувствителен к изменению величины индукции катушки. Мы ее рассматривать не будем из-за низкой чувствительности. Личный эксперименты по разработке такой конструкции в лучшем случае позволяли детектировать сковородку на 20 см глубины. На монет реагировал только в "упор". Практически бесполезная штука. По тому от нее сразу отказался.

Arduino металлоискатель

Наша схема импульсного металлоискателя имеет в себе несколько основных компонентов. Arduino генерирует импульсы, они усиливаются полевым транзистором (силовым ключом) который в свою очередь индуцирует импульсы магнитное поле в катушке. Магнитный импульс проходит до искомого металла и индуцирует в нем ток, а затем обратный сигнал магнитного поля. Этот обратный магнитный поток через небольшую задержку возвращается обратно в катушку металлодетектора и генерирует импульс. Сигнал проходит мимо пары диодов (диоды нужны что бы ограничить напряжение до 1 вольта) и уходит на вход операционного усилителя. Усиленный сигнал попадает в arduino в котором высчитывается "спадающий хвост" после отключения катушки силовым ключем. Т.е. как раз ответ от искомого металлического предмета. В зависимости от времени спада мы можем судить о величине или удаленности объекта. Индикатор показывает эту величину в 8-и уровнях индикаторов.

К слову о катушке. Она должна быть диаметром 20 см с 20-ю витками провода 0,4 - 0,8 мм. Толщина провода так же влияет на индукцию всей катушки. Сильное отклонение от толщины провода приведет к ухудшению чувствительности прибора. Катушка вставлена в водопроводную ПВХ трубу и не имеет никаких дополнительных металлический соединений.

Сборка металлоискателя ПиратПлата металлискателя Пират

Скетч программы содержит генератор импульсов и алгоритм обработки входящего сигнала с усилителя.

int ss0 = 0;
int ss1 = 0;
int ss2 = 0;
long c0 = 0;
long c1 = 0;
long c2 = 0;
byte i = 0;
int sss0 = 0;
int sss1 = 0;
int sss2 = 0;
int s0 = 0;
int s1 = 0;
int s2 = 0;

void setup()
{
  DDRB = 0xFF; // port B - all out
  DDRD = 0xFF; // port D - all out

  for (i = 0; i <255; i++) // калибровка
  {
    PORTB = B11111111; 
    delayMicroseconds(200); 
    PORTB = 0; 
    delayMicroseconds(20);
    s0 = analogRead(A0);
    s1 = analogRead(A0);
    s2 = analogRead(A0);
    c0 = c0 + s0;
    c1 = c1 + s1;
    c2 = c2 + s2;

    delay(3);
  }
  c0 = c0 / 255;
  c0 = c0 - 5;
  c1 = c1 / 255;
  c1 = c1 - 5;
  c2 = c2 / 255;
  c2 = c2 - 5;
}

void loop()
{
  PORTB = B11111111; 
  delayMicroseconds(200); 
  PORTB = 0; 
  delayMicroseconds(20); 
  s0 = analogRead(A0);
  s1 = analogRead(A0);
  s2 = analogRead(A0);
  ss0 = s0 - c0;

  if (ss0 < 0) 
  {
    sss0 = 1;
  } 
  ss0 = ss0 / 16; 
  PORTD = ss0; // посылаем на индикатор (send to LEDs)
  delay(1);

  ss1 = s1 - c1; 
  if (ss1 < 0) 
  {
    sss1 = 1; 
  } 
  ss1 = ss1 / 16;
  PORTD = ss1; // посылаем на индикатор (send to LEDs)
  delay(1);

  ss2 = s2 - c2;
  if (ss2 < 0)
  {
    sss2 = 1;
  }
  ss2 = ss2 / 16;
  PORTD = ss2; // посылаем на индикатор (send to LEDs)
  delay(1);

  if ( sss0+sss1+sss2 > 2)
  {
    digitalWrite(7,HIGH);
    digitalWrite(6,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(2,HIGH);
    digitalWrite(1,HIGH);
    digitalWrite(0,HIGH);
    delay(1);
    sss0 = 0;
    sss1 = 0;
    sss2 = 0;
  }
}
Металлоискатель Пират на Arduino микроконтроллереМеталлоискатель Пират на Arduino микроконтроллереМеталлоискатель Пират на Arduino микроконтроллереМеталлоискатель Пират на Arduino микроконтроллереМеталлоискатель Пират на Arduino микроконтроллереМеталлоискатель Пират на Arduino микроконтроллереМеталлоискатель Пират на Arduino микроконтроллере
* комментарии публикуются после модерации
21.06.2023 14:26
Металлоискатель у кого нибудь заработал? Как именно должны светиться светодиоды?
27.02.2018 17:40
мертвый сайт
16.02.2018 10:49
Здравствуйте. Можно-ли использовать плату Мини USB NANO V3.0 ATmega328P CH340G 5 В 16 м и какие изменения нужно внести в скетч.
07.02.2018 17:57
вопрос.А почему отказались в этой схеме от озвучки или хотя-бы от вибро.
05.02.2018 10:33
Для stm есть плагин под arduino ide. т.е. если настроить, то можно использовать этот код под ней. Только на stm питание может быть в районе 3.3 вольта - нужен стабилизатор.
07.07.2017 17:45
Даже не знаю. Сейчас у китайцев можно такое же купить по стоимости деталей))
25.05.2017 13:30
Не думал, что костыль может быть таким стильным) Ха) Классно получилось! Почти как промышленный.
25.05.2017 12:19
На удивление очень простая схема. Интересно как у нее с чувствительностью. Опишите пожалуйста с какой глубины можно обнаружить монетку а-ля советский рубль?