Arduino металлоискатель с дискриминацией. Как сделать хороший и мощный самодельный металлоискатель цветных металлов в домашних условиях, схема детектора

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

Есть несколько хороших примеров того, как собрать металлоискатель своими руками. Однако, для них обычно необходимо либо довольно много внешних компонентов для обработки аналогового сигнала, либо чувствительность на выходе довольно слабая.

Когда мы думаем об импульсных металлодетекторах, основной темой является то, как фиксировать небольшие изменения напряжения в сигналах, связанных с поисковой катушкой. Эти изменения обычно очень малы. Наиболее очевидный подход заключается в использовании аналоговых входов «ATmega328». Но, глядя на спецификации, есть две основные проблемы: они в основном медленные, а разрешение (в большинстве случаев) низкое.

С другой стороны, металлоискатель на микроконтроллере работает на частоте 16 МГц и имеет довольно неплохие возможности синхронизации, а именно разрешение 0,0625 мкс при использовании тактовой частоты. Таким образом, вместо того, чтобы использовать аналоговый вход для считывания, самым простым способом восприятия небольших динамических изменений напряжения является сравнение изменения падения напряжения с течением времени при фиксированном опорном напряжении.

Для этой цели ATmega328 имеет подходящие особенности внутреннего компаратора между D6 и D7. Этот компаратор способен инициировать прерывание, что позволяет точно обрабатывать события. Используя его вместе с аккуратно закодированными процедурами синхронизации, такими как millis () и micos (), а также используя внутренний таймер ATmega328 с гораздо более высоким разрешением, Arduino — отличная основа для подобного рода металлоискателя.

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

Итоговый вариант кода для Arduino:

// Defining all required pre variables etc. and setting up the registers unsigned char clockSelectBits = _BV(CS10); // no prescale, full xtal void setup() { pinMode(6,INPUT); // + of the comparator - by setting them as INPUT, they are // set to high impedance pinMode(7,INPUT); // - of the comparator - by setting them as INPUT, they are // set to high impedance cli(); // stop interrupts TCCR1A = 0; // set entire TCCR1A register to 0 TCCR1B = 0; // same for TCCR1B TCNT1 = 0; // initialize counter value to 0; TCCR1B |= clockSelectBits; // sets prescaler and starts the clock TIMSK1 = _BV(TOIE1); // sets the timer overflow interrupt enable bit sei(); //allow interrupts ACSR = (0 << ACD) | // Analog Comparator: Enabled (0 << ACBG) | // Analog Comparator Bandgap Select: AIN0 is applied to the positive input (0 << ACO) | // Analog Comparator Output: Off (1 << ACI) | // Analog Comparator Interrupt Flag: Clear Pending Interrupt (1 << ACIE) | // Analog Comparator Interrupt: Enabled (0 << ACIC) | // Analog Comparator Input Capture: Disabled (0 << ACIS1 | 0 << ACIS0 // interrupt on output toggle // (0 << ACIS1 | 1 << ACIS0 // reserved // (1 << ACIS1 | 0 << ACIS0 // interrupt on falling output edge // (1 << ACIS1 | 1 << ACIS0 // interrupt on rising input edge ; } // this routine is called every time the comparator creates an interrupt ISR(ANALOG_COMP_vect) { oldSREG=SREG; cli(); timeStamp=TCNT1; SREG = oldSREG; } // this routine is called every time there is an overflow in internal counter ISR(TIMER1_OVF_vect){ timer1_overflow_count++; } // this routine is used to reset the timer to 0 void resetTimer(void){ oldSREG = SREG; cli(); // Disable interrupts TCNT1 = 0; //initialize counter value to 0 SREG = oldSREG; // Restore status register TCCR1B |= clockSelectBits; // sets prescaler and starts the clock timer1_overflow_count=0; // resets overflow counter }

Конечно, эта идея не совсем новая. Основная часть этого кода может быть другой. Попробуйте поискать в других источниках, например TPIMD.

Шаг 1: Идея индукционного детектора на Arduino — флип-катушка


Идея состоит в том, чтобы использовать Arduino как детектор импульсной индукции, как и в TPIMD, поскольку задумка с кривой затухания, похоже, работает очень хорошо. Проблема с импульсными индукционными детекторами заключается в том, что они обычно нуждаются в разном напряжении для работы. Одно напряжение для питания катушки и отдельное напряжение для обработки кривой затухания. Эти два источника напряжения всегда усложняют процесс постройки импульсных индукционных детекторов.

Рассматривая напряжение катушки в детекторе PI, полученную кривую можно разделить на две разные стадии. Первый этап — это сам импульс, питающий катушку и создающий магнитное поле (1). Второй этап — это кривая спада напряжения, начиная с пика напряжения, а затем быстро изменяясь на «безмощностное» напряжение катушки(2).

Проблема в том, что катушка меняет свою полярность после импульса. Если импульс положительный (Var 1. на прилагаемом рисунке) кривая распада отрицательна. Если импульс отрицательный, кривая затухания будет положительной (Var 2. на прилагаемом рисунке).

Чтобы решить эту основную проблему, катушку нужно «перевернуть» электронным путем после импульса. В этом случае импульс может быть положительным, и кривая затухания также останется положительной.

Для этого катушка должна быть изолирована от Vcc и GND после импульса. В этот момент существует только ток, протекающий через демпфирующий резистор. Эта изолированная система катушки и демпфирующего резистора может быть «ориентирована» на любое опорное напряжение. Это теоретически создаст комбинированную положительную кривую (см. нижнюю часть чертежа).

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

После некоторых экспериментов я остановился на следующей схеме:

Схема состоит из модуля Arduino Nano. Этот модуль управляет двумя МОП-транзисторами, питающими катушку (на SV3) через D10. Когда импульс на конце D10 заканчивается, оба МОП-транзистора изолируют катушку от 12V и GND.

Сохраненная энергия в катушке выходит через резистор R2 (220 Ом). В то же время резистор R1 (560 Ом) соединяет первую положительную сторону катушки с GND. Это изменяет отрицательную кривую затухания на резисторе R5 (330 Ом) до положительной кривой. Диоды защищают входной вывод Arduino.

R7 является делителем напряжения около 0,04 В. В настоящее время кривая затухания на D7 становится более отрицательной, чем 0,04 на D6, прерывание срабатывает, а длительность после окончания импульса сохраняется.

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

Шаг 2: Строим детектор (макет)






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

Светодиод D13 на плате Arduino Nano используется в качестве индикатора для металла.

Использование макета — самый быстрый способ сделать работающий детектор. Нужно провести некоторую проводку, но это может быть сделано на отдельном маленьком макете. На снимках это показано в 3 этапа, так как Arduino и МОП-транзисторы скрывают некоторые из проводов. При тестировании я случайно отключил диоды, не заметив сразу. Это особо не повлияло на поведение детектора. В версии на печатной плате я их оставил.

На рисунках не показаны подключения к OLED-дисплею 0,96. Этот дисплей подключен таким образом:

Vcc — 5В (на выводе Arduino, а не на блоке питания!)
GND — GND
SCL — A5
SDA — A4

Этот OLED-дисплей необходим для первоначальной калибровки детектора. Это делается путем установки правильного напряжения на PIN6 Arduino. Это напряжение должно быть около 0,04 В. Дисплей помогает установить правильное напряжение.

Макетная версия работает очень хорошо, хотя, вероятно, не подходит использования в полевых условиях.

Шаг 3: Проект на печатной плате




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

Сделаны следующие изменения:

  1. Диоды были исключены.
  2. На контакты МОП-транзисторов добавлен резистор 10 Ом
  3. Напряжение питания делителя напряжения на D6 задается сигналом высокого уровня на D8
  4. Пин драйвера для МОП-транзисторов был изменен.

Таким образом можно создать одностороннюю печатную плату, которая может быть спаяна на универсальной печатной плате. Используя эту схему, вы получите рабочий PI-детектор с 8-10 внешними компонентами (в зависимости от того, используется ли OLED-дисплей и / или динамик).

Шаг 4: Настройка и использование детектора




Если детектор правильно построен и программа записана в Arduino, самым простым (если не единственным) способом настройки устройства является использование OLED-дисплея. Дисплей подключен к 5V, GND, A4, A5. Дисплей должен показывать «калибровку» после включения питания устройства. Через несколько секунд он должен сказать «калибровка окончена», и на дисплее должны отобразиться три цифры.

Первое число — это «контрольное значение», указанное во время калибровки. Второе значение — это последнее измеренное значение, а третье значение — среднее значение последних 32 измерений.

Эти три значения должны быть более или менее одинаковыми (в моих тестах до 1000). Среднее значение должно быть более или менее стабильным.

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

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

Может случиться, что дисплей зависает. Просто нажмите кнопку сброса и начните заново.

Для моей конфигурации (катушка: 18 оборотов\20 см) стабильное значение составляет около 630-650. После установки нажмите кнопку сброса, аппарат снова откалибрует и все три значения будут в одном диапазоне. Если металл теперь поднести к катушке, светодиод на плате Arduino (D13) должен загореться. Прилагаемый динамик издает несколько щелчков (в исходном коде есть пространство для улучшений).

Во избежание высоких ожиданий:

Детектор обнаруживает некоторые вещи, но он остается очень простым и ограниченным.

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

Глядя на схему и программу, я вижу много возможностей для улучшения. Значения резисторов были подобраны исходя из опыта, время импульса 250 мс было выбрано случайным образом, параметры катушки тоже.

Файлы

Шаг 5: Подключение дисплея 16х2



Во время тестирования я понял, что библиотека для OLED-дисплея I2C потребляла слишком много ресурсов, поэтому я решил использовать 16×2-дисплей с конвертером I2C.

Я адаптировал программу для ЖК-дисплея, добавив некоторые полезные функции. В первой строке дисплея теперь отображается уровень сигнала возможной индикации. Вторая строка теперь показывает два значения. Первое указывает на отклонение текущего сигнала по сравнению с калибровочным значением. Это значение должно быть «0». Если это значение постоянно отрицательное или положительное, детектор должен быть откалиброван нажатием кнопки сброса. Положительные значения указывают на металл вблизи катушки.

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

Теперь программа позволяет отслеживать множественные длительности импульсов в последовательности (средство для экспериментов / улучшения производительности). Тем не менее, я не добился какого-нибудь прорыва, поэтому значение по умолчанию установлено на одну длительность импульса.

Начальная настройка детектора

При настройке детектора важно второе значение второй строки (первое можно игнорировать). Первоначально значение может быть «неустойчивым» (см. Рисунок). Поверните подстроечный резистор, пока значение не достигнет стабильного показания. Затем поверните его, чтобы увеличить значение до максимального стабильного значения. Нажмите кнопку сброса для повторной калибровки, и детектор готов к использованию.

У меня сложилось впечатление, что, установив максимальную стабильную величину, я потерял чувствительность к цветным металлам. Поэтому, возможно, стоит поэкспериментировать с настройками, чтобы это исправить.

Катушки

Я сделал 3 катушки для дальнейшего тестирования схемы импульсного металлоискателя:

  • 1 -> 18 витков/ 200 мм
  • 2 -> 25 витков/100 мм
  • 3 -> 48 витков/100 мм

Интересно, что все катушки работали довольно хорошо, с почти одинаковой производительностью (рублевая монета на 40-50 мм в воздухе). Это может быть весьма субъективное наблюдение.

Из этой инструкции вы узнаете как сделать самодельный металлоискатель в домашних условиях. Поиск различных металлических объектов — отличное хобби, которое обеспечит вам прогулки на свежем воздухе, позволит обнаружить новые места и, возможно, найти что-то интересное. Прежде чем узнать как сделать металлоискатель своими руками, выясните местные законы о том, как действовать в случае возможной находки, в частности, в случае опасных объектов, археологических реликвий или объектов значительной экономической или эмоциональной ценности.

В сети довольно много инструкций по самодельной сборке дома мощных металлоискателей для цветных металлов своими руками, однако, особенность этой инструкции в том, что в дополнение к Arduino требуется всего несколько компонентов: обычный конденсатор, резистор и диод, образующие сердечник вместе с поисковой катушкой, состоящей из 20 обмоток электропроводящего кабеля. Светодиод, динамик и / или наушники. Дополнительным преимуществом является то, что всё может питаться от 5 В, для чего достаточно общей мощности USB 2000 мАч.

Для того, чтобы интерпретировать сигнал и понять, какие материалы и какой формы предметы детектор может обнаруживать, необходимо углубиться в физику. Согласно правилу большого пальца, детектор чувствителен к объектам на расстоянии или глубине не превышающей радиус катушки. Он наиболее чувствителен к объектам, в которых ток может течь в плоскости катушки. Таким образом, металлический диск в плоскости катушки даст гораздо более сильный отклик, чем тот же металлический диск, перпендикулярный катушке. Вес объекта не имеет большого значения. Тонкая алюминиевая фольга, ориентированная в плоскости катушки, даст гораздо более сильный отклик, чем тяжелый металлический болт.

Шаг 1: Принцип работы

Когда электричество начинает проходить через катушку, оно создает магнитное поле. Согласно закону индукции Фарадея, изменяющееся магнитное поле приведет к электрическому полю, которое противостоит изменению магнитного поля. Таким образом, напряжение будет развиваться по катушке, что будет противодействовать увеличению тока. Этот эффект называется самоиндукцией, а единицей индуктивности является Генри, где катушка 1 Генри развивает разность потенциалов на 1 В, когда ток изменяется на 1 Ампер в секунду. Индуктивность катушки с N обмотками и радиусом R составляет приблизительно 5 мкГн x N ^ 2 x R, с R в метрах.

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

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

Таким образом, измеряя индуктивность катушки можно обнаружить присутствие металлов поблизости. С Arduino, конденсатором, диодом и резистором можно измерить индуктивность катушки следующим образом: делая катушку частью высокочастотного LR фильтра и питая его волновыми блоками, будут создаваться короткие всплески на каждом переходе. Длительность этих всплесков пропорциональна индуктивности катушки. Фактически, характерное время фильтра LR равно tau = L / R. Для катушки с двадцатью витками и диаметром 10 см L ~ 5muH x 20 ^ 2 x 0,05 = 100 мкГн.

Для защиты Arduino от избыточного тока минимальное сопротивление составляет 200 Ом. Таким образом, мы ожидаем импульсы длиной около 0,5 микросекунды. Их трудно измерить напрямую с высокой точностью, учитывая, что тактовая частота Arduino составляет 16 МГц.

Вместо этого восходящий импульс можно использовать для зарядки конденсатора, который затем может быть считан аналого-цифровым преобразователем (ADC) Arduino. Ожидаемый заряд от импульса 25 мА длительностью 0,5 микросекунд составляет 12,5 нК, что даст 1,25 В на конденсаторе 10 нФ. Падение напряжения на диоде уменьшит это значение. Если импульс повторяется несколько раз, заряд конденсатора возрастает до ~ 2 В. Эти параметры можно получить с помощью Arduino ADC, используя analogRead (). Затем конденсатор можно быстро разрядить, изменив считывающий разъем на выходной и установив его на 0 В на несколько микросекунд.

Все измерения занимают около 200 микросекунд, 100 для зарядки и сброса конденсатора и 100 для преобразования ADC. Точность может быть значительно увеличена путем повторения измерения и усреднения результата: в среднем 256 измерений занимают 50 мс и улучшают точность в 16 раз. Таким образом, 10-битный ADC достигает точности 14-битного ADC.

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

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

Используя различные цвета лампочек и звуки, можно так же видеть разницу – увеличивается или уменьшается индукция.

Шаг 2: Список необходимых компонентов

Электрическая основа:

  • Arduino UNO R3 + макетная плата или Arduino Nano с 5×7см макетной платой
  • 10nF конденсатор
  • Маленький сигнальный диод, например, 1N4148
  • 220- ом резистор

Для питания:

  • Переносная зарядка с USB кабелем

Для визуального вывода:

  • 2 светодиода разного цвета, например, синий и зеленый
  • 2 резистора 220 Ом для ограничения тока

Для вывода звука:

  • Пассивный зуммер
  • Микровыключатель для отключения звука

Для выхода наушников:

  • Разъем для наушников
  • Резистор 1 кОм
  • Наушники

Чтобы легко подключить / отключить поисковую катушку:

  • 2-контактный винтовой зажим (клемма)

Для поисковой катушки:

  • ~ 5 метров тонкого электрического кабеля

Конструкция для катушки. Должна быть жесткой, но не должна быть круглой. Для конструкции: Около 1 метра — палка деревянная, пластиковая или селфи-палка.

Шаг 3: Поисковая катушка

Для поисковой катушки я намотал примерно 4 м многожильного провода вокруг картонного цилиндра диаметром 9 см, в результате чего получилось 18 витков. Тип кабеля не имеет значения, если сопротивление по меньшей мере в десять раз меньше значения R в фильтре RL, поэтому убедитесь, что оно осталось ниже 20 Ом. Я измерил, вышло 1 Ом, так что это безопасно. Так же подходит 10 метровый рулон соединительной проволоки с разветвленными концами.

Шаг 4: Собираем прототип




Учитывая небольшое количество внешних компонентов, вполне возможно собрать схему на маленькой макетной плате. Однако конечный результат довольно громоздкий и не очень надежный. Поэтому, лучше использовать Arduino nano и припаять с дополнительными компонентами на панели прототипов 5×7 см (см. Следующий шаг)

Для обнаружения металлов используются всего 2 контакта Arduino, один для обеспечения импульсов к фильтру LR и один для считывания напряжения на конденсаторе. Пульсирование может производиться с любого выходного контакта, но считывание должно проводиться с помощью одного из аналоговых контактов A0-A5. Еще 3 контакта используются для 2 светодиодов и для вывода звука.

Последовательность сборки:

  1. На макетной плате последовательно подключите резистор 220 Ом, конденсатор и диод, направленный отрицательной клеммой (черная линия) к конденсатору.
  2. Подключите A0 к резистору (конец, не подключенный к диоду)
  3. Подключите A1 к месту пересечения диода и конденсатора
  4. Подключите один конец катушки к точке пересечения резистора и диода
  5. Подключите другой конец катушки к земле
  6. Подключите один светодиод его положительной клеммой к выводу D12 и его отрицательной клеммой через резистор 220 Ом к земле
  7. Подключите другой светодиод его положительной клеммой к выводу D11 и его отрицательной клеммой через резистор 220 Ом к земле
  8. При желании, подключите наушники или динамики между контактом 10 и землей. Конденсатор или резистор можно добавить последовательно для уменьшения громкости.

На этом все!

Шаг 5: Делаем окончательную версию устройства


Для того, чтобы использовать металлоискатель на улице, необходимо надежно припаять все компоненты. Обычная макетная плата 7х5см прекрасно подойдет к Arduino nano и все остальным компонентам. Используйте ту же схему, что и в прошлом шаге. Я так же решил добавить выключатель последовательно с зуммером, чтобы иметь возможность отключать звук, когда он не нужен. При помощи винтового зажима, можно быстро попробовать различные катушки, без необходимости заново паять. Все питание осуществляется через 5В mini- или microUSB порт Arduino Nano.

Шаг 6: Программное обеспечение

Скетч Arduino вы можете скачать ниже. Загрузите и запустите его. Я использовал Arduino 1.6.12 IDE. Рекомендуется запускать с debug = true в начале, чтобы настроить количество импульсов на измерение. Лучше всего иметь показания АЦП между 200 и 300. Увеличьте или уменьшите количество импульсов в случае, если ваша катушка дает совершенно другие показания.

Скетч делает некоторую самокалибровку. Достаточно расположить катушку вдали от металлов на некоторое время. Небольшие перемены в индуктивности будут наблюдаться, но внезапные большие изменения не повлияют на долгосрочное среднее значение.

Файлы

Шаг 7: Закрепляем устройство


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

Шаг 8: Инструкция по применению

Для того, чтобы установилось референсное значение, достаточно отдалить самодельный металлоискатель от металлов примерно на 5 секунд. Затем, когда катушка будет приближаться к металлу, зеленый или синий светодиод начнут мигать, а так же будут слышны звуковые сигналы.

Синие вспышки и звуковые сигналы низкой частоты указывают на присутствие неферромагнитных металлов. Зеленые вспышки и звуковые сигналы высокой частоты указывают на присутствие ферромагнитных металлов. Учтите, что когда катушка находится более 5 секунд вблизи металла, то полученное значение будет считаться референсным, и звуковой сигнал будет издаваться, когда вы отведете детектор от металла, который затихнет через несколько секунд. Частота моргания диодов и звуковых сигналов зависит от мощности сигнала.

Металлоискатель – это устройство, используемое для обнаружения присутствия металла в некоторой близости от этого металлоискателя, не касаясь самого металла. Такие устройства широко используют для поиска металлических предметов в земле, например, мин, кладов с драгоценными металлами, предметы старины и прочие вещи. Процесс бесконтактного обнаружения, используемый в металлоискателе, объясняется с помощью метода индуктивного зондирования. Основная концепция состоит в том, что наличие металла может изменять индуктивность индуктора (катушки). Таким образом, электронная начинка металлоискателя попросту определяет индуктивность катушки, которая зондирует исследуемую поверхность, и благодаря динамику или другому интерфейсному устройству оповещает пользователя о металлическом объекте поблизости.



Металлоискатели в официальных точках продаж стоят не так дешево, как хотелось бы. Но сегодня благодаря развитию радиолюбительской техники маталлоискатель можно сделать самостоятельно на основе Arduino.


По сути, с помощью Arduino можно создать простой индуктивный измеритель, то есть устройство, которое может использоваться для измерения неизвестной индуктивности катушки. В данном проекте используется обычный резонансный контур, в котором параллельно соединены конденсатор и катушка индуктивности. Естественная резонансная частота LC-контура изменяется в зависимости от присутствия металла поблизости от катушки. Для получения приемлемого для считывания сигнала с резонансного контура используется компаратор LM339. Поскольку колебания от LC-контура всегда будут в форме синусоидальной волны, то в этом проекте и используется детектор пересечения нуля на основе компаратора, чтобы преобразовать синусоидальную волну в прямоугольные частотные импульсы, чтобы плата Arduino могла измерять период этих импульсов, и на основе полученных данных о периоде оповещать о присутствии металла вблизи прибора. Благодаря встроенной в Arduino IDE функции pulseIn() можно измерять период времени импульса. Например, pulse = pulseIn (11, HIGH, 5000). В этом случае функция возвращает значение периода времени, в течение которого импульс оставался высоким на линии 11. Третий параметр является необязательным, он устанавливает время ожидания до появления импульса на указанной линии.


Схема металлоискателя на основе Arduino представлена ниже.




double pulse; void setup() { pinMode(11,INPUT); pinMode(13,OUTPUT); pinMode(8,OUTPUT); } void loop() { digitalWrite(13,HIGH); delayMicroseconds(5000); digitalWrite(13,LOW); delayMicroseconds(100); pulse = pulseIn(11,HIGH,5000); if(pulse > 920) { tone(8, 1); delay(3000); noTone(8); } }

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

Плату 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
-файл
прошивки (версия 2.11) для - .
Как прошить hex -файл в плату Arduino , я описал .

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

Схема металлодетектора (версия 2 ) :

версия 3 (FoxyPI v3)

Что нового в версии 3.5:

  • добавлена возможность настройки контраста дисплея с помощью пункта CONTRAST сервисного меню

Что нового в версии 3.4:

  • исключен перегрев MOSFET- а;
  • повышена стабильность работы;
  • добавлена автонастройка интервала между сэмплами АЦП;
  • добавлено отображение кривой сигнала после автобалансировки

Что нового в версии 3.3:

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

Дискриминация мишеней в этой версии отсутствует .

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

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

В схеме металлодетектора две изолированные друг от друга "земли" - аналоговая (значок заземления ) и цифровая (значок корпуса ).

Лицензия исходного кода скетча : проприетарная .


версия 3.5

Hex -файл прошивки -

Elf -файл прошивки (версия 3.5 от 11.11.2019) для -

версия 3.4

Hex -файл прошивки -

Elf -файл прошивки (версия 3.4 от 25.09.2019) для -

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


Видео "воздушных" испытаний в динамическом режиме (7.04.2019, версия 3.2) - https://youtu.be/HzIiA9ws0Ak
Видео "воздушных" и "подземных" испытаний в динамическом режиме (11.04.2019, версия 3.3) - https://youtu.be/GwRvhjCmOE4
Видео "воздушных" испытаний в статическом режиме (13.04.2019, версия 3.3) - https://youtu.be/1ulevNWBZ9A

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


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

Металлодетектор транспортируется разобранным на три части - блоки электроники и питания с ручкой, штанга, катушка с проводом:

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

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

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

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


Для перехода между пунктами меню требуется короткое нажатие кнопки (4) (при этом загорается зеленый светодиод), а для выбора пункта меню - длинное нажатие кнопки (4) (при этом загорается красный светодиод):

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

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

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

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

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

L - длительность импульса (мкс, us )
R - частота следования импульсов (имп./с, pps )
I - коэффициент интегратора
F - коэффициент фильтра
S - звук (вкл/выкл, ON /OFF )
C - величина контраста дисплея

Затем выполняется балансировка (zeroing ) в статическом режиме:
HEATING - установление стационарного режима интегратора

ZEROING - обновление "нулевого" уровня

Металлодетектор работает в двух режимах:

  • статический режим (static/non-motion mode ) (по умолчанию) - учитывается уровень сигнала, не требует постоянного перемещения катушки (может использоваться как для уточнения расположения мишени (pinpointing ), так и как основной режим поиска);
  • динамический режим (dynamic/motion mode ) - учитывается динамика изменения сигнала, в процессе поиска катушку необходимо перемещать над поверхностью грунта

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

Важно стараться перемещать (sweep ) катушку параллельно поверхности земли, иначе из-за влияния магнитного поля Земли на катушке будет наводиться некоторое напряжение (EFE - earth field effect ), которое может вызвать появление ложных сигналов: даже просто при перемещении катушки над землей:

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

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

Неаккуратное перемещение катушки увеличивает уровень сигнала на 4000...5000, а энергичное перемещение катушки из горизонтального положения в вертикальное - на 15000...20000.

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

При прекращении обновления "нулевого" уровня балансировку нужно остановить нажатием кнопки (4).

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

После этого запускается основной цикл работы металлодетектора, при этом на экране отображается текущий режим (MODE ) работы детектора, ZERO - значение "нулевого" уровня, заданное при балансировке (для статического режима типичные значения 120 000 - 125 000 , при изменении длительности импульса от 150 до 250 мкс меняется незначительно), и RX - начальная и конечная точки (диапазон) анализируемого сигнала (типичные значения - 16...43, , при изменении длительности импульса от 150 до 250 мкс меняются незначительно) для длительности импульса 150 мкс) (переключение между режимами выполняется долгим нажатием кнопки (4)):

Признаки неисправностей (нулевой уровень / диапазон)

  • обрыв в катушке - 12250 / 3...4 или 23000 / 2...4
  • неиндуктивная катушка (замена резистором 10 Ом) - 23000 / 0...2 или 1...3

Пример разброса начальных "нулевых" уровней:

111289 111701 111762 111819 112029
111907 112067 111871 111827 111625

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

Светодиоды Статический режим Динамический режим
нет мишени нет мишени
слабый уровень сигнала уровень сигнала уменьшается
средний уровень сигнала уровень сигнала увеличивается
сильный уровень сигнала -

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

помехи от LCD -телевизора (ощущаются на расстоянии до метра):

помехи от КЛЛ (ощущаются вблизи лампы):

помехи от магнитного поля включенного в сеть трансформатора проявляются в виде трели - очень частых срабатываний:

При эксплуатации прибор должен находиться на удалении от работающих телевизоров, компьютеров, силовых трансформаторов, КЛЛ !

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

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

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


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

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

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

Для тестирования металлодетектора при сборке можно загрузить в Arduino тестовую прошивку (для версии 3):

Hex -файл тестовой прошивки -

Elf -файл тестовой прошивки (версия 3.T от 24.04.2019) для -

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

Примеры сигналов:
1 - без мишени, 2 - с мишенью:

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

Испытания металлодетектора я провожу на расчищенной земляной площадке:

Мишени

Для испытаний используются различные мишени:


1 - алюминиевая пластина из "винчестера" (жесткого диска) (толщина 1,3 мм, внешний диаметр 3,75 дюйма, диаметр отверсия 1 дюйм)
2 - российская монета достоинством 5 рублей из меди, плакированной мельхиором (диаметр 25 мм, масса 6,45 грамма)
3 - золотое колечко

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

Любопытно, что при наложении друг на друга двух пластин (мишеней 1) дальность обнаружения снижается !

При снижении напряжения батареи дальность обнаружения заметно снижается:
В зарубежных металлодетекторах в качестве тестовой мишени часто используется монета Великобритании 10 пенсов - 10p диаметром 24,5 мм, которая ранее (до января 2012 года) изготавливалась из медно-никелевого сплава (медь 75 %, никель 25 %):
Аналог такой монеты - монета США 25 центов - 25 US cent (U.S. quarter ) диаметром 24,26 мм толщиной 1,75 мм массой 5,67 грамма:
Заявленная глубина обнаружения таких монет для различных металлодетекторов (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 см.

Дальности обнаружения массивных мишеней в статическом режиме:

Изделия из порошкового железа и многие ферритовые детали (1) металлодетектор не обнаруживает, но некоторые изделия из феррита (2) детектируются внутри катушки на расстоянии нескольких см от обмотки:

При быстром перемещении ферритового магнита внутри катушки возникают ложные срабатывания:

Результат первого поиска в саду с v3.3 (21.04.2019):

Результат второго поиска в саду с v3.3 (27.04.2019):

А вот еще находки, но уже после электролитической очистки (о ней ниже):

Про некоторые интересные находки можно прочитать .

Очистка находок от ржавчины

Найденные находки часто покрыты слоем ржавчины (оксида железа Fe 2 O 3).
Для очистки находок от ржавчины можно использовать несколько методов:

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

  • щавелевая кислота;
  • ортофосфорная кислота.

электролитический метод - наиболее эффективен, применяется для удаления грязи и продуктов коррозии, в том числе и в археологии:

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

Ниже я опишу применяемый мной катодный способ очистки.

пластиковая или стеклянная (не подверженная коррозии) емкость наполняется:
2 % (по другим сведениями, 5 - 10 %) водным раствором щелочи - едкого натра NaOH ;
водным раствором кальцинированной соды Na 2 CO 3 (1 столовая ложка на три литра воды, но я использую более насыщенный раствор):

Один электрод (анод) - пластинка из стали, в том числе нержавеющей, листового железа, алюминия или латуни, иногда применяются и угольные электроды. Я использую нержавеющую сталь:

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

Анод и катод опускаются в раствор, к аноду подключается "+" источника питания, а к очищаемой детали подключается "-" (я обматываю очищаемый предмет медной проволокой). Начинается процесс электролиза воды, сопровождаемый выделением пузырьков газа и образованием хлопьев ржавчины (на катоде - очищаемом предмете - выделяются пузырьки водорода, разрушающие ржавчину: 4H 2 0 + 4e - = 4OH +2H 2).

Также существует альтернативное описание реакции при катодной очистке:
4H + + 4e - = 2H 2 (но в этом случае требуется кислотная среда для образования достаточного количества ионов водорода).

В ходе процесса ржавчина начинает собираться возле анода:

В конце процесса вся емкость заполнена частицами ржавчины:

Ржавчина в процессе электролиза покрывает анод:

Лакмусовая бумажка, погруженная в раствор, показывает реакцию на щелочную среду:

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

После электролитической очистки находка выглядит так:

Осциллограммы

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

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

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

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

Конструктивное исполнение

Штанга

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

Рукоятка

Рукоятка металлодетектора крепится к трубе, на которой закреплены электронный блок и блок питания, с помощью компрессионного фитинга:

Электронный блок

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

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


На ПВХ-трубе электронный блок закрепляется посредством U -образных держателей, которые фиксируются нейлоновыми стяжками:

Блок питания

Для размещения элементов питания я использую распределительную коробку. На ПВХ-трубе блок питания закрепляется посредством U -образных держателей, которые фиксируются нейлоновыми стяжками.

Электроника

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

3-й версии основана на 8-битном AVR микроконтроллере ATmega328P (32 кБайт Flash , 2 кБайт SRAM , 1 кБайт EEPROM , 3 таймера) (2-й версии - на ATmega168 ), причем буква "P " обозначает "picoPower ".

контакты Arduino :

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

ресурсы Arduino :

Для сопряжения с USB -портом в моей плате Arduino используется микросхема преобразователя CH340G .

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

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

Для питания Arduino я использую два соединенных последовательно литий-ионных аккумулятора UltraFire ZX 18650 емкостью 4200 мА·ч каждый:

Напряжение холостого хода такого полностью заряженного аккумулятора составляет 4,21 В, а на нагрузке 10 Ом через 1 минуту работы - 3,61 В.

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

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

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

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

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

Тип батареи Напряжение х.х., В Напряжение
под нагрузкой
(через 1 минуту работы), В
Camelion Plus Alkaline 1
... ... (10 Ом)

... ... (10 Ом)
Duracell Duralock (Alkaline) 2
1,54 1,47 (10 Ом)
Ермак (алкалиновые)
1,62 1,43 (10 Ом)
Energizer Max (Alkaline) 3
1,62 1,51 (10 Ом)
Energy (алкалиновые)
1,62 1,48 (10 Ом)

1 - номинальная емкость составляет 2700 мА·ч (при непрерывном разряде до 0,8 В током 25 мА)
2 - технология позволяет сохранять заряд при хранении до 10 лет,
на батарейках при этом на полоске нанесена надпись "":

1 - батарейки Duracell , произведенные с использованием технологии
2 - обычные батарейки Duracell
3 - по данным производителя:
номинальное внутреннее сопротивление (Nominal IR ) - 150...300 мОм;
диаграмма зависимости емкости от тока разряда:

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

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

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

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

1 - "+" батареи 15 В
2 - "-" батареи 15 В
3 - "-" батареи 7,4 В
4 - "+" батареи 7,4 В

Катушка

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

Поисковая катушка со средним диаметром $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}}}}$

Если принять внутреннее сопротивление одной батарейки как 0,3 Ом, ЭДС - 1,45 В, то для десяти батареек общая ЭДС $E$ составит 14,5 В, а общее сопротивление $R$ цепи с учетом сопротивления поисковой катушки 1 Ом составит 4 Ом. Принимая индуктивность катушки, равной 450 мкГн, получаем, что за длительность $T$ импульса, равную 150 мкс, ток в катушке достигнет значения ${E \over R} (1 - e^{-{T R}\over L}) = 2,7 А$.

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

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

В него вставляется катушка, а затем он скрепляется изоляционной лентой. Катушка закрепляется в монтажной коробке с помощью термоклея и нейлоновых стяжек.
Катушка закрепляется на штанге с помощью компрессионного фитинга, резьбовая часть которого вкручена в полипропиленовую трубку диаметром 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 :

G - затвор, D - сток, S - исток

При лавинном пробое транзистора затухающий ток катушки проходит по участку "сток-исток MOSFET -а - батарея питания", обладающему малым сопротивлением, что приводит к замедлению затухания тока.

драйвер MOSFET

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

цоколевка PC817 :

цоколевка BC547 /BC557 :

C - коллектор, B - база, E - эмиттер

При логической "единице" на выходе Arduino происходит гашение светодиода оптопары U2 , закрывается ее транзистор, из-за чего повышается потенциал базы транзистора Q1 , и он открывается, что приводит к открытию транзистора Q2 и закрытию транзистора Q3 . В результате повышается потенциал затвора MOSFET Q4 и он открывается, пропуская ток через катушку.

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

Детектор

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

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

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

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

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

Вид сигнала на выходе ОУ:

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

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

На сигнальный вход АЦП ADC In подается усиленное операционным усилителем напряжение сигнала с поисковой катушки, ограниченное диодами D1 и D2 . АЦП дискретизирует сигнал с катушки в виде последовательности чисел (fast-time signal ) со значениями 0 (минимальный уровень, 0 В)...1023 (максимальный уровень u ref).

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

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

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

Для определения наличия мишени выполняется вычисление суммы (slow-time signal ) заданного числа дискретизированных уровней сигнала, расположенных на одинаковых интервалах друг от друга, во временном "окне" (evaluation window ). При этом значения, расположенные ранее заданной при балансировке начальной точки, не учитываются (для повышения чувствительности ).


Затем выполняется интегрирование последовательности получаемых суммарных значений (интегратор эмулируется программно). Параметром фильтра является коэффициент $K$, который равен числу импульсов, приходящихся на постоянную времени интегратора.
Уровень сигнала на выходе интегратора анализируется в статическом режиме работы металлодетектора.

При работе металлодетектора в динамическом режиме результаты интегрирования дополнительно проходят через фильтр высоких частот (high-pass filter , HPF ), который эмулируется программно. Параметром фильтра является коэффициент $K$, который показывает, во сколько раз частота следования импульсов больше частоты среза фильтра.
На выходе фильтра получается сигнал, характеризующий динамику изменения RX -сигнала.

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

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

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

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

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

Для индикации я использую LCD -дисплей от мобильного телефона :

Дисплей для этого телефона - монохромный c разрешением 84×48:


Контроллер дисплея - Philips PCD8544 .
Подключение дисплея:

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

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

* напряжения питания контроллера -
синий - строго 3,3 В (можно подключить к выводу 3V3 Arduino )
красный - по некоторым непроверенным сведениям выдерживает напряжение питания 5 В (можно питать от выводов 5V или 3V3 Arduino )
** напряжение питания подсветки -
синий - на вывод подсветки можно подать напряжение 3,3 или 5 В
красный - на вывод подсветки подключается "земля" (?)

Проблемой такого дисплея является ненадежный контакт ЖК-панели с печатной платой посредством соединителя ZEBRA , который устраняется, например, припаиванием проводника, прижимающего панель к плате - как рекомендовано :

Если эту проблему не устранить, то она приводит к "почернению" экрана, требующей повторной инициализации.

Для работы с таким дисплеем в Arduino я использую библиотеку Adafruit-PCD8544 от Adafruit Industries (сайт компании - https://www.adafruit.com).

"Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! "

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

Дискриминация мишеней

Вихревые токи затухают из-за наличия электрического сопротивления у "мишени". Это затухание описывается экспоненциальным законом $i = k H_0 {e^{ {-t} \over \tau}}$. Коэффициент $k$ определяется формой и размерами "мишени". Постоянная времени $\tau = {L G} = {L \over R}$, определяющая длительность протекания вихревых токов, определяется электрической проводимостью материала мишени $G$ (или сопротивлением $R$) и ее индуктивностью $L$.
В таблице я привел относительную электрическую проводимость различных материалов по отношению к золоту:

Вихревые токи применяются для исследования свойств материалов посредством измерения электрической проводимости, так как материалы имеют уникальное значение проводимости в зависимости от их состава и способа изготовления. В качестве стандарта используется при этом значение проводимости химически чистой меди при температуре 20 ºC - стандарт International Annealed Copper Standard (IACS ) - удельное сопротивление 1,7241x10 -8 Ом·м или 5,8001x10 7 См/м (100% IACS ). Железо, например, имеет значение проводимости, равное 18% от проводимости меди.

Как утверждается (например, в статье исследователя Reg Sniff) , мишени из золота или из тонкой фольги имеют очень малую постоянную времени и вихревые токи в них быстро затухают, в отличие от мишеней из железа, меди или серебра.

Начальная напряженность магнитного поля $H_0$ определяется начальным током в катушке и уменьшается по кубическому закону $1 \over {h^3}$ при удалении от катушки. Величина напряженности магнитного поля $H_0$ вдоль оси катушки на расстоянии $z$ от ее центра, создаваемого током $I_0$, определяется выражением: ${H_0} = { {w {R^2} {I_0}} \over {2 { {({R^2}+{z^2})}^{3 \over 2} } } }$.

Вихревые токи создают собственное затухающее магнитное поле, которое наводит экспоненциально затухающее (с той же постоянной времени $\tau$) напряжение в поисковой катушке. Величина этого напряжения уменьшается как шестая степень расстояния $1 \over {h^6}$ при удалении "мишени" от катушки. Это приводит к удлинению импульса напряжения на поисковой катушке, что и регистрируется металлодетектором.

Дополнительный анализ кривой сигнала (напряжения на поисковой катушке) может быть выполнен с целью дискриминации (выделения разных типов) мишеней. Наклон кривой в ее начале можно оценить отношением $K = {{x_t} \over {x_{t+{\Delta}t}}}$ величин выборок, отделенных, например, пятью интервалами (${\Delta}t=5$). При этом постоянная времени определяется выражением: ${\tau} = {{{\Delta}t} \over {ln K}}$

Для иссследования вихревых токов могут использоваться программные пакеты для моделирования электромагнитных процессов. В качестве примера можно привести моделирование электромагнитного тормоза на вихревых токах в пакете COMSOL Multiphysics (описание - https://www.comsol.com/blogs/simulating-eddy-current-brakes/):

Существуют отрицательные мнения по поводу возможности эффективной дискриминации для импульсных металлодекторов.

"The most reliable discriminator is you, by digging the target!" (http://www.gold-prospecting-wa.com) - "Самый надежный дискриминатор - это вы, при выкапывании мишени" .

В книге "" авторов Ahmet S. Turk, Koksal A. Hocaoglu, Alexey A. Vertiy

приведены следующие утверждения:


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

В качестве примера импульсного металлодетектора, для которого заявлена возможность дискриминации (ферромагнитные (FERROUS )/неферромагнитные (N-FERROUS ) материалы), можно привести модель PULSE STAR II .
Особенности дискриминации в таком детекторе:

  • возможна только для мишеней не менее 10 см в диаметре (в отличие от VLF/TR -детекторов, которые обладают способностью дискриминации даже для маленьких объектов);
  • объекты меньшего размера отображаются как ферромагнитные;
  • несколько маленьких неферромагнитных объектов отображаются как один большой ферромагнитный.

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

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

Этот проект на основе Bolt IoT показывает, как сделать металлодетектор с системой оповещения на основе Ардуино.

Данный проект должен дать общее понимание того, как можно сделать металлоискатель с системой мониторинга и оповещения. Цель проекта в обнаружении посторонних предметов, а также в создании прототипа системы безопасности. Итогом дальнейших процессов может стать проектирование подвижного робота с металлоискателем. Всё это, в целом, может быть выполнено с использованием любого микроконтроллера, но мы будем использовать .

Предлагаемая система содержит схему передатчика (Tx) и приемника (Rx). Эта плата основана на TDA0161, монолитной интегральной схеме, предназначенной для обнаружения металлических тел путем определения вариаций высокочастотных потерь на вихревые токи. Используя внешне настроенную цепь, устройство действует как генератор. Уровень выходного сигнала изменяется при приближении к металлическому объекту.

Выходной сигнал определяется изменениями тока питания. Независимо от напряжения питания, этот ток является высоким или низким, в зависимости от близости металлического предмета. Данное устройство сможет предупредить об обнаружении, например, мины впереди, а также будет полезно для обнаружения металлических объектов, спрятанных под землей или находящихся внутри других объектов. Состоит из портативного устройства с сенсорным датчиком, который может обнаруживать изменение магнитного поля, вызванного металлическим предметом.

Комплектующие

Для нашего металлодетектора/металлоискателя Ардуино понадобится приличный список комплектующих:

  • Датчик на основе TDA0161 × 1
  • Резистор 220 Ом × 1
  • Конденсатор 47 мкФ × 1
  • Резистор 330 Ом × 1
  • Резистор 100 Ом × 1
  • Резистор 1 кОм × 1
  • Зуммер × 1
  • Многооборотный прецизионный потенциометр - 10 кОм (25 витков) × 1
  • Bolt IoT Bolt WiFi модуль × 1
  • Arduino UNO × 1
  • Кабель USB-A - Micro-USB × 1

Из программного обеспечения нам пригодятся:

  • Bolt IoT Bolt Cloud (облако)
  • Bolt IoT Android App (приложение для Андроид)

Принципиальная схема

Сначала мы должны сделать датчик металлоискателя, подключив его, как указано на принципиальной схеме выше. В итоге как только всё будет сделано согласно шагам ниже, вам нужно будет установить систему таким образом, чтобы датчик указывал на пол, включить питание системы и обеспечить постоянный доступ Bolt к Интернету через ваш WiFi.

Настройка модуля Bolt WiFi и подключение через облако

После выполнения всех соединений нам нужно подключить металлодетектор Ардуино через облако Bolt iOT, используя процесс, описанный на этом шаге. Мы узнаем как настроить новый WiFi-модуль Bolt, используя сеть Wi-Fi и мобильный телефон.

Если вы внимательно посмотрели список комплектующих, то увидели, что нам нужны: модуль Bolt IoT Bolt WiFi, кабель Micro-USB - USB (на ваш выбор), облако Bolt IoT Bolt Cloud, приложение Bolt IoT Android App (ссылки выше).

Этот набор поможет нам подключить модуль Bolt к Wi-Fi и привязать его к облачной учетной записи Bolt, чтобы вы могли начать с ним работать. Весь процесс настройки займет не более 10 минут.

Подключаем модуль к питанию

После того как вы взяли в руки модуль WiFi Bolt iOT вам нужно найти зарядное устройство 5В/1A, которое имеет порт micro-usb и обычно используется для зарядки мобильного телефона на Android. Вы также можете использовать свой ноутбук для включения устройства Bolt.

Теперь, когда у вас есть все компоненты, давайте начнем с загрузки мобильного приложения Bolt IoT и установки его на мобильный телефон. Прежде чем начать, проверьте, работает ли сеть WiFi, к которой вы будете подключать Bolt, на частоте 2,4 ГГц. На данный момент Bolt НЕ поддерживает сети WiFi 5 ГГц.

Скачиваем приложение Bolt App

Загрузите приложение «Bolt IoT» для Android или iOS. Вы можете выполнить поиск «Bolt IoT» или отсканировать QR-код ниже.

Примечание . Ниже приведены инструкции для приложения под Android, но то же самое можно выполнить и для приложения под iOS с некоторыми незначительными отличиями.

Создание аккаунта

Вам нужно будет создать учетную запись в облаке Bolt для управления устройством Bolt iOT. Создание учетной записи в облаке Bolt БЕСПЛАТНО.

Откройте приложение Bolt и нажмите «РЕГИСТРАЦИЯ» (англ. - REGISTER), чтобы создать новую учетную запись.

Заполните все необходимые детали и согласитесь с условиями использования (кто-то это вообще читает?). Наконец, нажмите «Создать новую учетную запись» (CREATE A NEW ACCOUNT), чтобы создать бесплатную учетную запись.

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

Следуйте инструкциям в электронном письме, чтобы активировать свою учетную запись Bolt Cloud. Теперь потяните пальцем по экрану, чтобы обновить экран мобильного приложения, который выглядит примерно так, как показано ниже.

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

Добавляем Bolt на ваш аккаунт

Теперь нажмите кнопку «ДОБАВИТЬ УСТРОЙСТВО» (англ. - ADD DEVICE), чтобы настроить устройство Bolt для работы в сети WiFi.

Включите устройство Bolt, вставив кабель Micro USB в порт USB на модуле, а другой конец кабеля подключите к зарядному устройству Android или к ноутбуку.

Примечание . На Bolt iOT нет кнопок включения/выключения. Как только вы подключите питание, можно начинать работу.

Как только вы включите устройство Bolt, синий светодиод на Bolt начнет медленно мигать, а зеленый светодиод выключится.

Если синий светодиод медленно мигает, это означает, что теперь Bolt передает свою собственную сеть точек доступа WiFi и готов к настройке с помощью приложения Bolt IoT на вашем телефоне. Нажмите на символ «> » в приложении, чтобы продолжить.

Только для Android: перед тем как продолжить, отключите мобильные данные, включите службу определения местоположения на своем мобильном телефоне, если это еще не сделано, и нажмите кнопку «ГОТОВ» (англ.- Ready). Это требуется только в приложении Android из-за API Google. Приложение не собирает и не хранит ваши данные о местоположении.

Если приложение обнаружило Bolt, оно отобразит экран, аналогичный показанному ниже. Синий светодиод на устройстве теперь будет быстро мигать. Это означает, что он находится в процессе установки. Чтобы продолжить, нажмите «ПРОДОЛЖИТЬ» (англ. - CONTINUE).

Пароль для точки доступа WiFi, передаваемой модулем WiFi Bolt: bolt1234 . При настройке с помощью мобильного приложения Android ваш мобильный телефон автоматически подключится к точке доступа, когда вы нажмете «Далее». На iOS вам нужно будет подключиться к Hotspot, зайдя в Настройки -> WIFi . Теперь нам нужно сообщить Bolt, к какой WiFi-сети он должен подключиться.

Важно . Модуль WiFi от Bolt не может обнаруживать сети WiFi на базе 5 ГГц и не сможет подключиться к ним.

Выберите сеть WiFi к которой должен быть подключен Bolt. Вы можете нажать на имя WiFi, чтобы выбрать сеть WiFi для подключения.

Примечание . Для приложения iOS вам придется вручную ввести SSID или имя WiFi-устройства, к которому вы хотите подключиться.

Введите пароль сети WiFi, которую вы выбрали на предыдущем экране.

Приложение теперь отправит учетные данные WiFi в модуль Bolt WiFi.

Теперь нажмите «Готово» (англ. - Done) и на следующем экране выберите свою страну и нажмите «Сохранить» (англ. - Save), чтобы завершить последний этап настройки.

Если все прошло по плану, устройство Bolt теперь перезапустится автоматически. Сине-зеленый светодиод на устройстве Bolt теперь будет постоянно светиться. Если Bolt смог подключиться к сети WiFi и подключился к облаку, рядом с идентификатором устройства Bolt появится зеленая точка, как показано ниже.

Отладка

Если Bolt не может подключиться к сети Wi-Fi, зеленый светодиод будет выключен, а синий светодиод будет медленно мигать. Обычно это происходит, если вы ввели неправильные учетные данные WiFi (SSID или пароль) во время установки. Пожалуйста, попробуйте процесс установки еще раз с правильными учетными данными WiFi.

Проверьте, работает ли ваш WiFi роутер на частоте 2,4 ГГц. На данный момент Bolt не поддерживает 5 ГГц.

Доступ к облаку Bolt для создания проектов IoT

Посетите Bolt Cloud (cloud.boltiot.com) и войдите в свою зарегистрированную учетную запись, используя тот же идентификатор электронной почты и пароль, которые вы использовали в мобильном приложении Bolt IoT.

Вы увидите свое устройство Bolt со статусом «ONLINE» в своей учетной записи на панели инструментов.

Поздравляем, вам удалось настроить Bolt и привязать его к своей учетной записи менее чем за 10 минут.

Код для проекта

После подключения через модуль Bolt вы должны скачать или скопировать код ниже в формате.json:

{ "name": "Metal Detection", "flow": [ { "id": 15, "module": "app#bolt-iot:executeCommand", "version": 1, "parameters": { "__IMTCONN__": 445281 }, "mapper": { "command": "serialBegin", "parameters": { "baud": "9600", "deviceName": "" } }, "metadata": { "designer": { "x": 8, "y": -3 }, "restore": { "command": { "label": "Initialize serial communication" }, "__IMTCONN__": { "label": "My Bolt connection" } }, "parameters": [ { "name": "__IMTCONN__", "type": "account", "label": "Connection", "required": true } ], "expect": [ { "name": "command", "type": "select", "label": "Command", "required": true, "validate": { "enum": [ "digitalWrite", "digitalRead", "analogRead", "analogWrite", "serialBegin", "serialWrite", "serialRead", "version", "restart", "isAlive" ] } }, { "name": "parameters", "spec": [ { "name": "deviceName", "type": "text", "label": "Device name", "required": true }, { "name": "baud", "type": "number", "label": "Baud", "required": true } ], "type": "collection", "label": "Parameters" } ] } }, { "id": 1, "module": "app#bolt-iot:executeCommand", "version": 1, "parameters": { "__IMTCONN__": 445281 }, "mapper": { "command": "serialWrite", "parameters": { "data": "Get detected", "deviceName": "" } }, "metadata": { "designer": { "x": 300, "y": 0 }, "restore": { "command": { "label": "Send serial data output" }, "__IMTCONN__": { "label": "My Bolt connection" } }, "parameters": [ { "name": "__IMTCONN__", "type": "account", "label": "Connection", "required": true } ], "expect": [ { "name": "command", "type": "select", "label": "Command", "required": true, "validate": { "enum": [ "digitalWrite", "digitalRead", "analogRead", "analogWrite", "serialBegin", "serialWrite", "serialRead", "version", "restart", "isAlive" ] } }, { "name": "parameters", "spec": [ { "name": "deviceName", "type": "text", "label": "Device name", "required": true }, { "name": "data", "type": "text", "label": "Data", "required": true } ], "type": "collection", "label": "Parameters" } ] } }, { "id": 14, "module": "app#bolt-iot:executeCommand", "version": 1, "parameters": { "__IMTCONN__": 445281 }, "mapper": { "command": "serialRead", "parameters": { "till": "10", "deviceName": "" } }, "metadata": { "designer": { "x": 600, "y": 0 }, "restore": { "command": { "label": "Read incoming serial data" }, "__IMTCONN__": { "label": "My Bolt connection" } }, "parameters": [ { "name": "__IMTCONN__", "type": "account", "label": "Connection", "required": true } ], "expect": [ { "name": "command", "type": "select", "label": "Command", "required": true, "validate": { "enum": [ "digitalWrite", "digitalRead", "analogRead", "analogWrite", "serialBegin", "serialWrite", "serialRead", "version", "restart", "isAlive" ] } }, { "name": "parameters", "spec": [ { "name": "deviceName", "type": "text", "label": "Device name", "required": true }, { "name": "till", "type": "number", "label": "Till", "required": true, "validate": { "max": 127, "min": 0 } } ], "type": "collection", "label": "Parameters" } ] } }, { "id": 18, "module": "math:EvaluateExpression", "version": 1, "parameters": {}, "mapper": { "expression": "100-{{parseNumber(14.value)}}" }, "metadata": { "designer": { "x": 869, "y": -2 }, "expect": [ { "name": "expression", "type": "text", "label": "Expression", "required": true } ] } }, { "id": 13, "module": "google-email:ActionSendEmail", "version": 1, "parameters": { "account": 445282 }, "filter": { "name": "Check if metal is detected", "conditions": [ [ { "a": "{{18.result}}", "b": "30", "o": "number:greater" } ] ] }, "mapper": { "cc": , "to": , "bcc": , "html": "metal detection", "subject": "Warning! metal detected", "attachments": }, "metadata": { "designer": { "x": 1145, "y": -3 }, "restore": { "cc": { "mode": "chose", "items": }, "to": { "mode": "chose", "items": [ "undefined" ] }, "bcc": { "mode": "chose", "items": }, "account": { "label": "" }, "attachments": { "mode": "chose", "items": } }, "parameters": [ { "name": "account", "type": "account", "label": "Connection", "required": true } ], "expect": [ { "name": "to", "spec": { "name": " ", "type": "email", "label": "Email address", "required": true }, "type": "array", "label": "To", "labels": { "add": "Add a recipient", "edit": "Edit a recipient" }, "required": true }, { "name": "subject", "type": "text", "label": "Subject" }, { "name": "html", "type": "text", "label": "Content" }, { "name": "attachments", "spec": [ { "name": "fileName", "type": "filename", "label": "File name", "required": true, "semantic": "file:name" }, { "name": "data", "type": "buffer", "label": "Data", "required": true, "semantic": "file:data" }, { "name": "cid", "type": "text", "label": "Content-ID" } ], "type": "array", "label": "Attachments", "labels": { "add": "Add an attachment", "edit": "Edit an attachment" } }, { "name": "cc", "spec": { "type": "email", "label": "Email address" }, "type": "array", "label": "Copy recipient", "labels": { "add": "Add a copy recipient", "edit": "Edit a copy recipient" } }, { "name": "bcc", "spec": { "type": "email", "label": "Email address" }, "type": "array", "label": "Blind copy recipient", "labels": { "add": "Add a blind copy recipient", "edit": "Edit a blind copy recipient" } } ] } } ], "metadata": { "version": 1, "scenario": { "roundtrips": 1, "maxErrors": 3, "autoCommit": false, "sequential": false, "confidential": false, "dataloss": false, "dlq": false }, "designer": { "orphans": }, "zone": "eu1.integromat.com" } }

Код, который мы должны загрузить на плату Ардуино через ниже:

#define capPin A0 #define buz 9 #define pulsePin A4 #define led 10 long sumExpect=0; //running sum of 64 sums long ignor=0; //number of ignored sums long diff=0; //difference between sum and avgsum long pTime=0; long buzPeriod=0; void setup() { Serial.begin(9600); pinMode(pulsePin, OUTPUT); digitalWrite(pulsePin, LOW); pinMode(capPin, INPUT); pinMode(buz, OUTPUT); digitalWrite(buz, LOW); pinMode(led, OUTPUT); } void loop() { int minval=1023; int maxval=0; long unsigned int sum=0; for (int i=0; i<256; i++) { //reset the capacitor pinMode(capPin,OUTPUT); digitalWrite(capPin,LOW); delayMicroseconds(20); pinMode(capPin,INPUT); applyPulses(); //read the charge of capacitor int val = analogRead(capPin); //takes 13x8=104 microseconds minval = min(val,minval); maxval = max(val,maxval); sum+=val; long unsigned int cTime=millis(); char buzState=0; if (cTime0) buzState=1; else if(diff<0) buzState=2; } if (cTime>pTime+buzPeriod) { if (diff>0) buzState=1; else if (diff<0) buzState=2; pTime=cTime; } if (buzPeriod>300) buzState=0; if (buzState==0) { digitalWrite(led, LOW); noTone(buz); } else if (buzState==1) { tone(buz,2000); digitalWrite(led, HIGH); } else if (buzState==2) { tone(buz,500); digitalWrite(led, HIGH); } } //subtract minimum and maximum value to remove spikes sum-=minval; sum-=maxval; if (sumExpect==0) sumExpect=sum<<6; //set sumExpect to expected value long int avgsum=(sumExpect+32)>>6; diff=sum-avgsum; if (abs(diff)>10) { sumExpect=sumExpect+sum-avgsum; ignor=0; } else ignor++; if (ignor>64) { sumExpect=sum<<6; ignor=0; } if (diff==0) buzPeriod=1000000; else buzPeriod=avgsum/(2*abs(diff)); } void applyPulses() { for (int i=0;i<3;i++) { digitalWrite(pulsePin,HIGH); //take 3.5 uS delayMicroseconds(3); digitalWrite(pulsePin,LOW); //take 3.5 uS delayMicroseconds(3); } }

Настройка оповещений

Прежде чем перейти к почтовым оповещениям и после того как мы загрузили код в нам нужно создать идентификатор на ресурсе integromat.com . Если у вас есть уже аккаунт на этом сайте - просто войдите в аккаунт.


Используйте следующие шаги для настройки сценария обнаружения металла.


На этом всё. Как только будет собран весь проект, всё, что вам нужно сделать, это установить систему таким образом, чтобы датчик указывал на пол, включить питание системы и обеспечить постоянный доступ Bolt к Интернету через ваш WiFi. Желаем вам найти побольше ценных предметов.

Loading...Loading...