Мой импульсный металлодетектор на Arduino

Информация предоставлена исключительно в образовательных целях.
Администратор сайта не несет ответственности за возможные последствия использования предоставленной информации.

Плату Arduino можно использовать в импульсном металлодетекторе (Pulse Induction Metal Detector (PI)) и как генератор импульсов, так и для обработки и отображения результатов.

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

Мой импульсный металлодетектор на Arduino - проект FoxyPI

версия 1 (FoxyPI v1) (устаревшая)
Что нового: первая версия.
Лицензия исходного кода скетча: GNU General Public License v3.0, доступен на Github в репозитарии https://github.com/Dreamy16101976/foxyPIv1.
Видео испытаний прототипа: https://youtu.be/VWCA6jYK5tY

версия 2 (FoxyPI v2) (устаревшая)

Что нового:

  • добавлено усреднение анализируемой длительности импульса катушки по алгоритму "скользящего среднего" (moving average, MA);
  • добавлена возможность настройки длительности импульсов, интервалов между ними, времени задержки и ширины окна скользящего среднего с помощью меню, а также сохранение настроек в EEPROM;
  • добавлено изменение тональности сигнала при изменении длительности импульса катушки;
  • добавлен динамический режим работы металлодетектора;
  • модифицирован драйвер MOSFET;
  • объединены переключатели "+5 В" и "+12 В", а освободившийся переключтель использован для управления подсветкой LCD-экрана;
  • добавлены светодиоды для индикации уровня сигнала.

прошивка
Hex
-файл
прошивки FoxyPI (версия 2.11) для Arduino Nano 3.0 - FoxyPIv2_11.ino.eightanaloginputs.hex.
Как прошить hex-файл в плату Arduino, я описал здесь.

Схема металлодетектора (версия 2) :
схема импульсного металлодетектора

версия 3 (FoxyPI v3) NEW

Что нового:

  • для определения уровня сигнала используется не компаратор, как в предыдущей версии, а АЦП Arduino;
  • используется взвешенное скользящее среднее;
  • изменены пункты меню;
  • короткое нажатие кнопки вызывает автобалансировку, а длинное - выводит на экран график сигнала;
  • используются три уровня аудио- и визуальной индикации вместо четырех.

Схема металлодетектора (версия 3) :
металлодетектор на Arduino FoxyPi

  • исключаются элементы, связанные с использованием компаратора - R5, R6;
  • для повышения коэффициента усиления ОУ изменен номинал резистора R3 на 320 кОм (составлен из двух резисторов номиналами 220 кОм и 100 кОм);
  • изменена схема питания микроконтроллера.

прошивка
Hex
-файл
прошивки FoxyPI (версия 3.xx) для Arduino Nano 3.0 - скоро будет доступен

Как прошить hex-файл в плату Arduino, я описал здесь.

ОПИСАНИЕ НАХОДИТСЯ В ПРОЦЕССЕ ИЗМЕНЕНИЯ ДЛЯ СООТВЕТСТВИЯ ТРЕТЬЕЙ ВЕРСИИ

Функции контактов и ресурсов Arduino и  совместимость:

Я использовал Arduino Nano 3.0 (на микроконтроллере ATmega328 - 32 кБайт Flash, 2 кБайт SRAM, 1 кБайт EEPROM, 3 таймера)
Arduino Nano

контакты Arduino:

вывод Arduino назначение
D08 выход сигнала генератора импульсов в катушке
D13 выход для подключения светодиода
D11 выход для подключения пьезодинамика
A00 вход АЦП - для ограниченного и усиленного сигнала с поисковой катушки
A01 выход для подключения зеленого светодиода
A02 выход для подключения красного светодиода
D02 вход подключения кнопки
REF вход опорного напряжения для АЦП

ресурсы Arduino:

ресурс Arduino назначение
таймер Timer1 управление MOSFET
таймер Timer2 вывод звука
канал АЦП 0 измерение напряжения сигнала на выходе ОУ

Внешний вид электронного блока:
внутренности металлодетектора
вид внутри

электронный блок металлодетектора
вид сверху:
1 - LCD-экран
2 - светодиод
3 - пьезодинамик
4 - кнопка управления
5 - выключатель подсветки LCD-экрана
6 - выключатель питания "+5/12 В"
7 - светодиоды индикации уровня сигнала

Внешний вид металлодетектора:
импульсный металлодетектор на Arduino
("полевые" испытания 19 марта 2016 года)

Эксплуатация металлодетектора

Включение и запуск металлодетектора

При включении питания металлодетектора (выключателя 6) сначала запускается отсчет:
импульсный металлодетектор на Arduino

Если при включении удерживать нажатой кнопку (4) до начала отсчета, то затем происходит вход в меню, позволяющее изменить настройки металлодетектора.

После завершения отсчета на дисплее (1) отображается сообщение с обозначением устройства и номером версии программного обеспечения ("FoxyPI v3"), логотипом, а из пьезодинамика (3) звучит звуковой сигнал с изменяющейся тональностью, соответствующий различным уровням сигнала и сопровождающийся миганием светодиодов:
самодельный металлодетектор

Обнаружение мишеней с помощью металлодетектора

Затем, если не выбран вход в меню, отображаются текущие настройки прибора:
импульсный металлодетектор

После этого запускается основной цикл работы металлодетектора (металлодетектор работает в статическом режиме).

При этом сначала выполняется автобалансировка (zeroing), которая длится несколько десятков секунд:
самодельный металлодетектор

При автобалансировке режим подсветки экрана должен соответствовать планируемому рабочему режиму ее использования!

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

После окончания автобалансировки подается короткий звуковой сигнал и отображается "нулевое" значение длительности RX-сигнала с катушки (максимальное, в условных единицах):
импульсный металлодетектор на Arduino

В помещении "нулевое" значение составляет 42.01.

При изменении текущей минерализации грунта может происходить нарушение режима работы, из-за чего либо возникают ложные срабатывания, либо снижается чувствительность. По этой причине необходимо периодически выполнять автобалансировку. Для повторного выполнения автобалансировки необходимо кратковременно нажать кнопку (4). Необходимо выполнять автобалансировку над чистым участком грунта (не над мишенью), не содержащем минералы.

При обнаружении металлического объекта-"мишени" звучит звуковой сигнал и загорается зеленый светодиод (2).
При этом зажигаются зеленый либо красный светодиоды (7) в соответствии с тремя градациями длительности регистрируемого RX-импульса:

индикация сигнала металлодетектора нет мишени
индикация сигнала металлодетектора уровень сигнала 1
индикация сигнала металлодетектора уровень сигнала 2
индикация в металлодетекторе уровень сигнала 3

Тональность сигнала возрастает при приближении катушки к "мишени" и, соответственно, увеличении длительности RX-импульса (VCO-режим).

Настройка металлодетектора

Если при включении удерживать нажатой кнопку (4) до начала отсчета, то затем происходит вход в меню, позволяющее изменить настройки металлодетектора.

Структура меню (выделена значения настроек по умолчанию):

  • PULSE LENGTH - длина импульса (100/150/200/250 us)
  • PULSE RATE - частота следования импульсов (10/20/30/40 pps)
  • GUARD - защитный интервал (0.005/0.01/0.015/0.02/0.025/0.03/0.035/0.04/0.045/0.05/0.055)
  • THRESHOLD - граничный уровень сигнала (128/192/256/320)
  • SOUND - звук (ON/OFF)
  • EXIT - выход из меню

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

После выбора EXIT происходит выход из меню и сохранение настроек в EEPROM.

Испытания металлодетектора

Для испытаний металлодетектора я использовал различные  мишени:
тестовые мишени для металлодетектора
 
 1 - алюминиевая пластина из "винчестера" (жесткого диска) (толщина 1,3 мм, внешний диаметр 3,75 дюйма, диаметр отверсия 1 дюйм)
2 - советские 3 копейки 1979 года из медно-цинкового сплава ЛМц 58-2 (диаметр 22 мм, толщина 1,25 мм, масса 3 грамма)
3 - золотое колечко

Дальности обнаружения мишеней "в воздухе":

Мишень Дальность обнаружения, см
1 36
2 15
3 10
При снижении напряжения батареи дальность обнаружения заметно снижается.
В зарубежных металлодетекторах в качестве тестовой мишени часто используется монета Великобритании 10 пенсов - 10p диаметром 24,5 мм, которая ранее (до января 2012 года) изготавливалась из медно-никелевого сплава (медь 75 %, никель 25 %):
10 пенсов
Аналог такой монеты - монета США 25 центов - 25 US cent (U.S. quarter) диаметром 24,26 мм толщиной 1,75 мм массой 5,67 грамма:
25 центов
Заявленная глубина обнаружения таких монет для различных металлодетекторов (max. depth for a US quarter):
Altai Treasure Seeker 2 hobby metal detector - 15 см;
Prestige Metal Detector - 16 см;
Supereye S3000 Metal Detector - 18 см;
EE Treasure Hunter - 20 см.

Я провел тестирование дальности обнаружения "больших" мишеней - металлических ворот гаража, металлической трубы и забора с металлической сеткой:
мишень металлодетектора    мишень металлодетектора     мишень металлодетектора

ворота гаража - 130 см; труба - 80 см; сетка - 50 см.

Используя лабораторный стенд, как цифровой осциллограф, я снял ряд осциллограмм:

лабораторный стенд -

стенд для металлодетектора

напряжение на поисковой катушке -

напряжение на катушке металлодетектора

YouTube
Полевые испытания и поиск (26.03.2016):
https://youtu.be/Xk4X6O1646M

Испытания прототипа (4.01.2016):
https://youtu.be/ikJbqUCbyvw

Устройство металлодетектора

Корпус
В качестве корпуса электронного блока металлодетектора я использовал распределительную коробку Tyco со степенью защиты IP55 (от воды и пыли) из ПВХ c десятью вводами диаметром 30 мм.

Для штанги металлодетектора я использовал ПВХ-трубу диаметром 25 мм с толщиной стенок 1,6 мм (PN16):
ПВХ труба для металлодетектора

На трубе электронный блок закрепляется посредством U-образных держателей:
закрепление блока на штанге металлодетектора

Рукоятка металлодетектора крепится к штанге с помощью компрессионного фитинга:
рукоятка металлодетектора

Микроконтроллер
Я использую плату Arduino Nano 3.0.

Arduino Nano 3-й версии основана на 8-битном AVR микроконтроллере ATmega328P (2-й версии - на ATmega168), причем буква "P" обозначает "picoPower".
Для сопряжения с USB-портом в моей плате Arduino используется микросхема преобразователя CH340G.

Источники питания

Питание микроконтроллера

Для питания Arduino я использую два соединенных последовательно литий-ионных аккумулятора UltraFire ZX 18650 емкостью 4200 мА·ч каждый:
аккумуляторы UltraFire
Напряжение холостого хода такого полностью заряженного аккумулятора составляет 4,21 В, а на нагрузке 10 Ом через 1 минуту работы - 3,61 В.

Номинальное напряжение такой батареи составляет 7,4 В.

Напряжение батареи 7,4 В преобразуется в напряжение 5 В для питания платы Arduino с помощью интегрального стабилизатора 78L05 (на схеме обозначен VR1):
питание металлодетектора

Питание силовой части

Я использую в качестве источника питания силовой части 10 щелочных батарей размера AA (LR6).

Я оценил некоторые из использованных мной батарей:

Тип батареи Напряжение х.х., В Напряжение
под нагрузкой
(через 1 минуту работы), В
Camelion Plus Alkaline1
батареи Camelion
... ... (10 Ом)
Panasonic Alkaline Power
Panasonic Alkaline Power
... ... (10 Ом)
Duracell Duralock (Alkaline)2
батарейки Duracell
1,54 1,47 (10 Ом)
Ермак (алкалиновые)
батарейки Ермак
1,62 1,43 (10 Ом)
Energizer Max (Alkaline)3
батарейки  Energizer
1,62 1,51 (10 Ом)
Energy (алкалиновые)
батарейки Energy
1,62 1,48 (10 Ом)

1 - номинальная емкость составляет 2700 мА·ч (при непрерывном разряде до 0,8 В током 25 мА)
2 - технология Duralock позволяет сохранять заряд при хранении до 10 лет,
на батарейках при этом на полоске нанесена надпись "DURALOCK":
Duralock
1 - батарейки Duracell, произведенные с использованием технологии Duralock
2 - обычные батарейки Duracell
3 - по данным производителя:
номинальное внутреннее сопротивление (Nominal IR) - 150...300 мОм;
диаграмма зависимости емкости от тока разряда:
емкость батарейки Energizer

Для размещения батарей размера AA я использую батарейный отсек на 10 элементов:
батарейный отсек

Номинальное напряжение такой батареи составляет 15 В.

питание металлодетектора

Катушка L2 предназначена для снижения помех, вызванных импульсами тока поисковой катушки. Диод VD3 шунтирует батарею питания для отрицательных выбросов напряжения, возникающих на индуктивности поисковой катушки, и защищает от неправильной полярности батареи питания. Конденсатор C1 большой емкости является накопителем энергии - играет важную роль при генерации импульсов тока в катушке.

Отсек питания

Для размещения элементов питания я использую распределительную коробку.
Для подключения источников питания используется четырехконтактный разъем на боковой стороне корпуса электронного блока:
разъем для питания металлодетектора
1 - "+" батареи 12 В
2 - "-" батареи 12 В
3 - "-" батареи 3 В
4 - "+" батареи 3 В

Ток потребления от батареи 7,4 В составляет ... мА, от батареи 15 В - ... мА.

Катушка

Параметры катушки

Поисковая катушка со средним диаметром $D$ = 25 см (средний радиус $R$ = 12,5 см) и радиусом сечения катушки $a$ = 0,29 см содержит $w$ = 27 витков эмалированного медного (удельное сопротивление $\rho$ = 0,0175 Ом·мм2/м) провода диаметром $d$ = 0,7 мм (радиус провода $r$ = 0,35 мм,площадь сечения провода $S$ = 0,385 мм2):
катушка металлоискателя

Предполагаемое сопротивление катушки $R = {\rho {{\pi D w} \over {S}}}$ = 0,964 Ом, а измеренное составило $R$ = 1,3 Ом:
измерение сопротивления катушки металлодетектора

Для вычисления индуктивности такой катушки существует несколько формул.

 индуктивность катушки металлодетектора

приближенная формула:

$L = {{w^2}{{\mu}_0}R[{ln({{8R} \over a})}-2]}$ ,

 где $a$ - радиус сечения катушки.

Эта формула приведена в книге [F. W. Grover, Inductance Calculations: Working Formulas and Tables, New York: Dover, 1946].

Для моей катушки:
$L$ = 440 мкГн.

более точная формула:

$L = {{{\mu}_0} \over {4 \pi}} {w^2} D \Phi $, где $\Phi$ - вспомогательный коэффициент:
$\Phi = {2 \pi  [{(1 +  {{{\gamma}^2} \over 2} )} {ln ({4 \over \gamma})} - 1,75 + {{{\gamma} ^2} \over 6} ] } $, где $\gamma = {a \over D}$, $a$ - радиус сечения катушки

Эта формула используется в плагине multiloop для программы Coil32 (http://coil32.net/multi-winding-round-loop.html) для расчета индуктивности многовитковой круглой катушки с круговым сечением (англ. multi-winding round loop with round cross-section).

Для моей катушки:
$\gamma$ = 0,0116;
$\Phi$ = 25,7;
$L$ = 468 мкГн.

интегральная формула:

$L = {{\mu}_0} {w^2} {\pi} R {{\int_0^{1-{a \over R}}} B_{rel}({\rho}) {\rho} \, {d{\rho}} } $,

где $B_{rel}({\rho}) = { {1 \over \pi} {\int_0^{\pi}} {{1 - {{\rho} cos {\phi} }} \over {{(1+{{\rho}^2}-2{\rho}cos{\phi})}^{3 \over 2}}} \, d{\phi}   }$ - относительная магнитная индукция в плоскости катушки на расстоянии ${\rho} \over R$ по сравнению с индукцией в центре катушки, $a$ - радиус сечения катушки

Магнитное поле катушки

При протекании по такой катушке тока $I$ в точке на оси катушки, находящейся на расстоянии $z$ от плоскости катушки, создается магнитное поле, напряженность которого определяется известным выражением:

$H = {w {I \over 2} {{R^2} \over {{(R^2 + z^2)}^{3 \over 2}}}}$

Конструкция катушки

Для защиты катушки можно использовать гофрированный шланг для электропроводки (обычно серого цвета) который разрезается вдоль:
защита катушки металлодетектора
В него вставляется катушка, а затем он скрепляется изоляционной лентой. Катушка закрепляется в монтажной коробке с помощью термоклея и нейлоновых стяжек.
Катушка закрепляется на штанге с помощью компрессионного фитинга, резьбовая часть которого вкручена в полипропиленовую трубку диаметром 26 мм, закрепленную на крышке монтажной коробки с помощью нейлоновой стяжки и термоклея:
узел поисковой катушки

Для подключения катушки используется двухконтактный разъем на боковой стороне корпуса:
разъем для поисковой катушки

Генератор
Для выдачи импульсов я использую цифровой вывод D08, установив его как "выход" (цифровой вывод D08 соответствует выводу PB0 микроконтроллера ATmega) .
Для ускорения я использую не команду digitalWrite, а прямую запись в порт, что быстрее примерно в 10 раз!

Соответствие цифровых выводов Arduino и выводов портов ATmega

цифровой вывод Arduino вывод порта ATmega
D00 PD0
D01 PD1
D02 PD2
D03 PD3
D04 PD4
D05 PD5
D06 PD6
D07 PD7
D08 PB0
D09 PB1
D10 PB2
D11 PB3
D12 PB4
D13 PB5

Временные параметры генератора задаются через меню настроек при включении прибора.

Силовая часть

Так как напряжение на MOSFET-е при его выключении резко возрастает (из-за индуктивности катушки), то транзистор может перейти в режим лавинного пробоя ("avalanche breakdown"). Это происходит, если напряжение "сток-исток" $V_{DS}$ на MOSFET-е превышает его напряжение пробоя $V_{DS (BR)}$.
Для современных транзисторов работа в этом режиме является штатной (они маркируются как "Repetitive Avalanche Rated" или "100% AVALANCHE TESTED"). При этом важно учитывать такие лавинные характеристики транзистора как максимальный повторяющийся лавинный ток $I_{AR}$ и максимальная энергия повторяющегося лавинного пробоя $E_{AR}$.
Необходимо, чтобы максимальный ток в катушке перед выключением не превышал значения $I_{AR}$, а максимальная энергия, запасенная в катушке, не превышала значения $E_{AR}$. Энергия магнитного поля катушки определяется как ${E_M} = {{{L {I^2}} \over {2}}}$ (например, для катушки индуктивностью $L$ = 700 мкГн с током $I$ = 3 А энергия составит 3,2 мДж).

Параметры некоторых MOSFET:

Наименование $V_{DS (BR)}$, В $I_{AR}$, А $E_{AR}$, мДж
IRF540 100 28 15
IRF740 400 10 13
IRF840 500 8 13
FQP12N60C 600 12 22,5

Я использую MOSFET IRF840, обладающий подходящими характеристиками:
характеристики IRF840

Цоколевка IRF840:
цоколевка IRF840
G - затвор, D - сток, S - исток

драйвер MOSFET

Управление MOSFET осуществляется с помощью оптопары PC817C (обладает быстродействием 3...4 мкс, выдерживает выходной ток 50 мА и напряжение в закрытом состоянии до 35 В) и дискретной транзисторной схемы:

цоколевка PC817:
цоколевка PC817

цоколевка BC547/BC557:
цоколевка BC547 BC557
C - коллектор, B - база, E - эмиттер

драйвер MOSFET для металлодетектора

Подобный драйвер описан в статье http://radiohlam.ru/raznoe/driver_polevikov.htm.

Я исследовал характеристики такого драйвера (при подаче на светодиод оптодрайвера напряжения 5 В через резистор 470 Ом):
ток потребления во "включенном" состоянии (MOSFET открыт) очень мал, в "выключенном" (MOSFET закрыт) - меняется от 5,8 до 12 мА при росте напряжения питания от 7 до 15 В; напряжение на выходе драйвера составляет 12,15 / 1,83 В ("вкл"/"выкл") при напряжении питания 13 В.

Детектор

В основе работы импульсного металлодетектора лежит принцип электромагнитной индукции - Electromagnetic Pulse Induction (EMI).

Схема детектора моего металлоискателя:
детектор металлоискателя

Сигнал с поисковой катушки $L1$ через токоограничивающий резистор $R2$ поступает на включенные встречно-параллельно диоды $VD1$ и $VD2$, ограничивающие величину сигнала до ~ 1 В. Это ограничение не вносит заметной погрешности, так как для детектирования "мишени" имееет значение "хвостик" сигнала, напряжение на котором составляет малые доли вольта (вплоть до милливольт) - подтверждено моделированием:
ограничительные диоды металлодетектора

Такой слабый сигнал для надежного детектирования необходимо усилить, для чего я использовал операционный усилитель $OP1$ LM358N, включенный по традиционной схеме неинвертирующего усилителя. Коэффициент усиления определяется выражением $1+ {R3 \over R4}$, при указанных номиналах элементов он составляет 570.

Особенностью ОУ LMx58 является возможность однополярного питания (single supply) - в отличие от, например, LM318, LF356, LF357 не требуется источник отрицательного напряжения.
Цоколевка LM358N (N - в DIP-корпусе):
 цоколевка LM358

Вид сигнала на выходе ОУ отображается на экране металлодетектора при долгом (дольше двух секунд) нажатии на кнопку (4):
сигнал катушки металлодетектора

Для обработки сигнала с поисковой катушки я использую встроенный в микроконтроллер ATmega аналого-цифровой преобразователь.

На опорный вход АЦП VREF подается опорное напряжение uref, равное 1,235 В, которое берется с эталонного источника LM385Z-1.2 (используется режим работы АЦП EXTERNAL).
Цоколевка LM385Z:
цоколевка LM385Z

На сигнальный вход АЦП ADC In подается усиленное операционным усилителем напряжение сигнала с поисковой катушки, ограниченное диодами VD1 и VD2. АЦП дискретизирует сигнал с катушки в виде последовательности 256 чисел со значениями 0 (минимальный уровень, 0 В)...1023 (максимальный уровень uref).

1 шаг измерения АЦП длится около 6 микросекунд (я добился этого, изменив множитель АЦП со стандартного значения 128 на 4 - биты ADPS0 и ADPS2 регистра ADCSRA сброшены, бит ADPS1 установлен) - из них 3,25 микросекунды на собственно измерение (функция analogRead блокирует выполнение до окончания измерения), а остальное время - накладные расходы на цикл. Таким образом весь интервал измерения занимает 6 × 256 ≈ 1500 микросекунд.

Наличие мишени вблизи катушки проявляется следующим образом:
(1023 - уровень сигнала, соответствующий перегрузке АЦП)
реакция металлодетектора на мишень

  • смещение точки A вправо;
  • увеличение интервала A-B;
  • смещение кривой вверх.

Сравните этот график сигнала с приведенным выше:
работа импульсного металлоискателя

Подсчет $N$ - длительности интервала $t_{sample}$, в течение которого уровень сигнала превышает заданный порог V_THRES, (в условных единицах) позволяет определить наличие "мишени" по удлинению этого интервала.

подсчет длительности сигнала в металлодетекторе

Я использую пороговый уровень V_THRES = 256, что соответствует ${{256 \cdot 1,235} \over 1023}$ = 0,309 В на входе АЦП и $0,309 \over 570$ = 0,00054 В (540 мкВ) на входе ОУ.

Выбор порогового уровня влияет на стабильность работы металлодетектора.

Для усреднения результатов и снижения влияния шумов используется метод "взвешенного скользящего среднего" (Weighted Moving Average, WMA).
Я использую окно "скользящего среднего" шириной в  $n$ = 20 отсчетов:
усреднение в металлодетекторе

Среднее взвешенное значение вычисляется как
$WMA = {{\sum_{i=0}^{N-1} {w_i \cdot u_i}} \over {\sum_{i=0}^{N-1} {w_i}}}$ , где $i$ - номер отсчета, $u_i$ - отсчет  АЦП, $w_i$ - вес отсчета.

Веса при этом определяются экспоненциальной формулой:
$w_i = {e^{-\alpha \cdot i}}$ , где $i$ - номер отсчета.
Коэффициент  $\alpha$ я взял равным 0,25, что определило значения весов:

$i$ 0 1 2 3 4 5 6 7 8 9
$w_i$ 1 0,779 0,607 0,472 0,368 0,287 0,223 0.174 0,135 0,105

 

$i$ 10 11 12 13 14 15 16 17 18 19
$w_i$ 0.082 0,064 0,050 0,039 0,030 0,024 0,018 0,014 0,011 0,009

усреднение в металлодетекторе

Такой подход (недавние отсчеты имеют больший вес, чем прошлые) позволяет обеспечить более быструю реакцию на "мишень".

При автобалансировке определяется максимальное среднее взвешенное значение длительности сигнала за 200 измерений (импульсов), к нему добавляется защитный интервал (я использую 0,04) и выполняется проверка на наличие ложных срабатываний в течение 400 измерений.

Звуковая индикация

Я использую для звуковой индикации пьезоэлемент от автономного пожарного извещателя. Громкость звучания пьезоэлемента весьма причудливым образом зависит от частоты сигнала. Я смог найти набор частот 900 (самый слабый сигнал) )- 1000 - 1100 (самый сильный сигнал), для которых громкость звучания увеличивается. Для управления звучанием пьезоэлемента, подключенного к контакту 11 платы, я используют таймер 2 Arduino.

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

Визуальная индикация

Для индикации я использую LCD-дисплей от мобильного телефона Nokia 5110:
Nokia 5110
Дисплей для этого телефона - монохромный c разрешением 84×48:
дисплей Nokia 5110
Контроллер дисплея - Philips PCD8544.
Подключение дисплея:

Вывод дисплея Вывод Arduino Назначение вывода дисплея
RST D07 сброс контроллера дисплея
CE (или CS) D06 разрешение ввода данных в контроллер дисплея
DC D05 режим ввода - данные/команды
Din D04 данные шины SPI
CLK (или SCLK) D03 команды шины SPI
VCC * напряжение питания (2,7 ... 3,3 В)
BL ** подсветка
GND GND "земля"

Существует два варианта дисплея LCD 5110 - с синим (именно такой я использую) или красным текстолитом:
дисплей Nokia 5110  дисплей Nokia 5110

* напряжения питания контроллера -
синий - строго 3,3 В (можно подключить к выводу 3V3 Arduino)
красный - по некоторым непроверенным сведениям выдерживает напряжение питания 5 В (можно питать от выводов 5V или 3V3 Arduino)
** напряжение питания подсветки -
синий - на вывод подсветки можно подать напряжение 3,3 или 5 В
красный - на вывод подсветки подключается "земля" (?)
Проблемой такого дисплея является ненадежный контакт ЖК-панели с печатной платой посредством соединителя ZEBRA, который устраняется, например, припаиванием проводника, прижимающего панель к плате - как рекомендовано здесь:
экран LCD 5110
Если эту проблему не устранить, то она приводит к "почернению" экрана, требующей повторной инициализации.

Для работы с таким дисплеем в Arduino я использую библиотеку Adafruit-PCD8544 от Adafruit Industries.

Выключатель (5) управляет подсветкой экрана. При хорошем внешнем освещении подсветку дисплея можно не использовать, так как она потребляет заметную мощность.

При автобалансировке режим подсветки экрана должен соответствовать планируемому рабочему режиму ее использования!

Помехи

О мешающем влиянии грунта на импульсный металлодетектор Вы можете прочитать здесь.

Также в импульсном металлодетекторе на катушке будет наводиться некоторое небольшое напряжение даже просто при перемещении катушки над землей. Наводимое при этом напряжение часто называется EFE-(earth field effect) сигнал.

При таком перемещении поисковой катушки изменяется магнитный поток $\Phi$ через нее:

EFE в металлодетекторе

Это объясняется тем, что магнитный поток определяется выражением:
$\Phi = {B \, S \, sin \, \alpha}$, где $B$ - индукция магнитного поля Земли, $S$ - площадь сечения катушки, $\alpha$ - угол между плоскостью катушки и направлением силовых линий магнитного поля Земли.
На приведенном рисунке в первом положении катушки магнитный поток равен нулю, а при перемещении приобретает ненулевое значение. Из-за изменения магнитного потока через катушку в ней согласно закону электромагнитной индукции наводится ЭДС, которая искажает принимаемый сигнал.

Сильные помехи на работу металлодетектора оказывают работающие вблизи электронные устройства, например, вот так проявляются помехи от LCD-телевизора:
помехи для металлодетектора

Дискриминация

Моя статья на Хабре о применении нейросети для дискриминации в импульсном металлодетекторе - https://habr.com/ru/post/435884/

Работа над проектом продолжается

Яндекс.Метрика