10 января 2022 - Admin

Металлоискатель на Ардуино

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

В этой статье разберём схему одного из простейших металлоискателей, собранную с  Ардуино. Конечно, по своим характеристикам такой металлоискатель очень далёк от профессиональных моделей, но, как экспериментальная схема для изучения основ Ардуино вполне сгодится.

В основе схемы лежит LC-генератор, собранный на логической микросхеме. Катушка этого генератора является чувствительным элементом: когда вблизи появляется металлический предмет, индуктивность немного меняется, что вызывает изменение частоты генерации. Это изменение и анализируется с помощью «мозгового центра» схемы, собранного на Ардуино.

Некоторые типы металлодетекторов

Есть разные способы детектирования металлов. Например, металлодетектор на принципе срыва генерации разобран здесь. Ну а герой данной статьи родился из другого класса металлодетекторов: на биениях частоты. Принцип их работы основан на том, что сравниваются частоты двух генераторов: опорного и измерительного.

Металлоискатель на биениях

Металлоискатель на биениях

Перед началом работы схема настраивается таким образом, чтобы частоты генераторов совпадали. Когда в поле зрения катушки измерительного генератора появляется металл, его частота «уходит». Из-за этого на нелинейном элементе, на который поступают сигналы обоих генераторов, возникают разностные частоты (биения), которые и сигнализируют о присутствии металла.

По моему опыту, такие металлоискатели довольно капризны. Частоты генераторов могут плавать сами по себе, из-за случайных факторов, что приводит к ложным срабатываниями и необходимости постоянно подстраивать металлоискатель.

Применение Ардуино позволяет запрограммировать более умную и сложную реакцию на изменение частоты.

  • Во-первых, становится не нужен опорный генератор.
  • Во-вторых, алгоритм обучен не реагировать на плавный уход частоты и самоподстраивается под небольшие изменения.
  • В-третьих, можно дифференцировать несколько уровней сигнала.

Таким образом, металлоискатель на принципе биений превратился в металлоискатель на принципе измерения частоты.

Cхема

Схема металлоискателя на Ардуино

Схема металлоискателя на Ардуино

Измерительный генератор собран на двух элементах 2И-НЕ. Можно использовать микросхему К561ЛА7 или зарубежный аналог CD4011.

Простейший LC-генератор выглядел бы так:

Простейший LC-генератор

Простейший LC-генератор на логической микросхеме

Но в нашей модели использована чуть более сложная схема, ёмкостная трёхточка. По отзывам, она даёт более стабильную частоту генерации. В итоге наш генератор вырабатывает импульсы с частотой примерно 70-100 кГц, которые поступают на цифровой вход 5 Ардуинки.

К аналоговому входу А0 подцеплен делитель напряжения R2-R3, он будет задавать чувствительность. Для индикации сигнала используются выводы 9 и 10, которые через токоограничивающие резисторы R4 и R5 подключены к светодиодам. Питание для генератора берётся с платы Ардуино.

Металлоискатель на макетной плате

Металлоискатель на макетной плате

Пара слов про измерительную катушку. Удобно её сделать из провода витой пары, которая повсеместно используется для подключения интернет. Диаметр катушки около 18 см, в ней 6 витков витой пары, это значит 48 витков провода. Главное, аккуратно соединить концы проводочков, чтобы получились последовательные витки и не было короткозамкнутых или оборванных витков.

Для более стабильной работы катушку рекомендуется экранировать, а экран подключить к общему проводу.

Скетч

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

// подключаем библиотеку для измерения частоты
#include <FreqCount.h>

// опорное значение частоты, с которым будем сравнивать текущую частоту
unsigned long grnd = 0;


// **** задействованные номера входов-выходов

// FreqCount.h по умолчанию измеряет частоту на выходе #5, его задавать не нужно
// потенциометр установки чувствительности
int sensPin = 0;
// светодиоды уровень 1,2
int sigLed1 = 9;
int sigLed2 = 10;


void setup() {
  
  // устанавливаем светодиодные пины в режим выходов
  pinMode(sigLed1, OUTPUT);
  pinMode(sigLed2, OUTPUT);
  
  // запускаем измерение частоты: в течение 100мс считаем импульсы
  // затем вычисляем частоту
  FreqCount.begin(100);
  
}



void loop() {
    
  // замеряем текущее значение частоты
  // FreqCount.available вернёт истину, если прошло 100 мс и значение готово
  // иначе просто уходим на следующий цикл, таким образом ждём результата измерения
  if (FreqCount.available()) {
    
    // считываем частоту, тем самым освобождаем буфер 
    // и сразу инициируем следующий 100мс цикл измерения
    unsigned long count = FreqCount.read();

    // если калибровка отсутствует (только что включили прибор)
    // запоминаем опорное значение частоты и уходим на следующее измерение
    if(!grnd){
      grnd = count;
      
    } else {
      //работаем в штатном режиме

      // насколько ушла частота от опорной?
      int delta = count - grnd;

      // автоподстройка калибровки
      // добавляем четверть от дельты
      // делать это нужно до применения abs()
      grnd += delta / 4;

      // частота может отклоняться и в плюс, и в минус,
      // поэтому берём по модулю
      delta = abs(delta);
      
      // какая чувствительность установлена? 
      // пересчитываем в более удобную шкалу
      // на входе sensPin у нас от половины до полного напряжения питания (см. схему)
      // значит, в соответствии с нижеследующей формулой 
      // переменная sens примет значения примерно от 22 до 43
      int sens = analogRead(sensPin)/25+2;      
      
      // в зависимости от соотношения sens и delta зажигаем или гасим
      // наши индикаторные светодиоды
      
      // превысили порог, частота ушла на более чем sens Гц
      if(delta > sens){
        digitalWrite(sigLed1, HIGH);
      } else {
        digitalWrite(sigLed1, LOW);
      }

      // превысили порог в два раза
      if(delta > sens*2){
        digitalWrite(sigLed2, HIGH);
      } else {
        digitalWrite(sigLed2, LOW);
      }
   
    }
  }
}

Видео работы металлоискателя

В заключение, видео работающей схемы. Лучше всего металлоискатель реагирует на металлические предметы большой площади, поэтому для демонстрации я взял кусочек фольгированного текстолита. Хотя это и не совсем честно. На видео хорошо заметно, что схема реагирует именно на резкое изменение частоты генератора, что равно происходит и при приближении металла, и при удалении его из поля действия катушки.

Поделиться в соцсетях:

Добавить комментарий