Arduino металлоискатель своими руками

Металлоискатель на Ардуино своими руками – как самому собрать импульсную флип-катушку на микроконтроллере

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

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

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

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

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

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

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

Конечно, эта идея не совсем новая. Основная часть этого кода может быть другой. Попробуйте поискать в других источниках, например 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 мм в воздухе). Это может быть весьма субъективное наблюдение.

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

Источник

Полноценный IB металлодетектор на ARDUINO

ФОРУМ › Металлоискатели › Полноценный IB металлодетектор на ARDUINO

  • В этой теме 1,374 ответа, 37 участников, последнее обновление , сделано .

Задумка проекта такая — по возможности доступная для повторения схема и открытый код, и естественно я выбрал среду ARDUINO, и хотя многие утверждают что ничего серьёзного на Ардуине не сделать — я попробую доказать обратное. Схема реализована на любой Ардуине с камнем Atmega328, и модуле АЦП ADS1115. Выходной каскад я не стал изобретать и использовал хорошо зарекомендовавшую себя схемку на IRF7105, но и ту я соригинальничал и в качестве драйвера мосфетов использовал таймер 555, он вполне для этого подходит — на входе компараторы, выход от нуля до напряжения питания при токе до 200мА. Я в первые использую накачку меандром(до этого всё на синусе) для меня это некий эксперимент(пока всё идёт нормально) но говорят что при такой накачке будет больше ложняков на грунте, и судя по тому как на грунте работает Квазар — я склонен этому верить.

Читайте также:  Виброразвязка для квадрокоптера своими руками

Если будут вопросы по схеме -задавайте. Резистором R27 подбираем ток в датчике, с Garrett 6.5×9 ACE PROformance и 10Ом получился ток в 120ма — это приемлемо.

Это прототип, и он не без недостатков. Надо сделать программную регулировку тока и громкости звука, у меня есть пару идей как это реализовать но это несколько усложнит схему, а оно и так нормально работает.

Тест проводил с датчиком Garrett 6.5×9 ACE PROformance он крайне устойчив к ЭМ помехам, не каждый датчик так работает у меня дома, ещё это датчик у меня индикатор чуйки, если удалось получить больше 20см на пятак ссср — значит прибор имеет право на жизнь.

Для баланса грунта надо просто пару раз качнуть датчиком над грунтом.

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

Вложения:

У вас есть более читабельная схема? А то больше времени трачу чтоб разобраться где-что.

Кликаешь по картинке, затем правый клик *Открыть картинку в новой вкладке*.. Там она уже с зумом будет

Shuravi

Делал по этой схеме -другой нет, если что-то не понятно — спрашивайте.

Для подключения датчика Garrett 6.5×9 ACE PROformance надо кое что добавить к схеме или сделать переходник, датчики от Квазаров-Фортун — подключаются напрямую.

Ниже — схема подключения датчика ACE,

Вложения:

Схема в Splan70.

Вложения:

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

Вложения:

[quote quote=4832]Примерка посадочных мест[/quote]

Вы хотите использовать просто Atmega328 в DIP? это надо предварительно загрузчик ещё прошивать, я предполагал использовать готовые модули типа Arduino Pro Mini . Ещё надо учесть место для конденсаторов фильтра (те что зелёные на схеме) вот такие.

По разводке и размещению элементов есть пару рекомендаций.

Входные каскады должны быть подальше от проводников дисплея, кнопок и самого МК, все плюсовые и минусовые дорожки от входных и выходных каскадов должны сходиться к конденсатору фильтрующему питание +5V C18 который как можно ближе к стабилизатору питания+5V, конденсатор С24 как можно ближе к выводам модуля IRF7105.

Из за желания упростить схему и уменьшить количество элементов я отказался от отдельных стабилизаторов на каскады, при неправильной разводке возможно самовозбуждение, по хорошему надо добавить маломощный стабилизатор на входные каскады MCP602, 4053, ADS1115, и возможно стабилизатор на каскад TX , но это если при повторении у кого-будет нестабильно работать прибор, у меня всё нормально, главное не экономить на конденсаторах фильтров питания каскадовС18, С19,С22,С24.

Shuravi вы можете заложить в печатку возможность установки дополнительных стабилизаторов типа ams1117 5.0, а ставить их или просто запаять перемычки — уже будет видно при повторении схемы. Если нужна схема с стабилизаторами могу нарисовать.

Вот компоновка прототипа, я там пытался усадить всё в слишком маленький объём для DIP, отсюда все проблемы с разводкой — много проводов. Выходной каскад на отдельной плате так как изначально схема была вообще без выходного каскада, накачка ТХ выводами контроллера, не поверите но это работало. правда слишком много шумов от МК и пришлось отказаться от этой идеи.

Источник

Оцените статью