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

Добавил пользователь Алексей Ф.
Обновлено: 20.09.2024

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

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

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


[/URL]

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

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

Вложения:

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

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

Shuravi

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

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

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

Вложения:

Схема в Splan70.

Вложения:

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

Вложения:

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

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

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

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

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

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


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

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

Необходимые материалы

Что такое магнитометр и как он работает?
Прежде чем мы углубимся в схему, давайте немного разберемся с магнитометрами и их работой. Магнитометр на самом деле представляет собой часть оборудования, которое может определять магнитные полюса Земли и определять направление в соответствии с ними. Все мы знаем, что Земля - ​​это огромный кусок сферического магнита с Северным и Южным полюсами. И из-за этого возникает магнитное поле. Магнитометр определяет это магнитное поле и на основании этого определяет направление, в котором мы смотрим.

Как работает модуль датчика QMC5883L
Датчик магнитометра QMC5883L делает то же самое. На нем установлена ​​микросхема HMC5883L от Honeywell. Эта микросхема имеет внутри 3 магниторезистивных материала, расположенных по осям x, y и z. Величина тока, протекающего через эти материалы, чувствительна к магнитному полю Земли. Итак, измеряя изменение тока, протекающего через эти материалы, мы можем обнаружить изменение магнитного поля Земли. Как только изменение магнитного поля будет определено, значения могут быть отправлены на любой встроенный контроллер, такой как микроконтроллер или процессор, по протоколу I2C.

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

Разница между HMC5883L и QMC5883L
Между датчиками HMC5883L и QMC5883L часто возникает путаница. Это связано с тем, что некоторые поставщики (на самом деле большинство) продают датчики QMC5883L вместо оригинального HMC5883L от Honeywell. В основном это связано с тем, что QMC5883L намного дешевле модуля HMC5883L. Однако работа этих двух датчиков несколько отличается, и один и тот же код нельзя использовать для обоих. Это связано с тем, что адреса I2C обоих датчиков не совпадают. Код, приведенный в этом руководстве, будет работать только с QMC5883L.


Чтобы узнать, какая у вас модель датчика, вам просто нужно внимательно посмотреть на саму микросхему и прочитать, что на ней написано. Если написано что-то вроде L883, то это HMC58836L, а если написано что-то вроде DA5883, то это IC QMC5883L. Оба модуля показаны на рисунке ниже.


Схема цифрового компаса
Схема цифрового компаса на основе Arduino довольно проста, нужно просто связать датчик QMC5883 с Arduino и подключить 8 светодиодов к контактам GPIO Arduino Pro mini.


Модуль датчика имеет 5 контактов, из которых DRDY (Data Ready) не используется в нашем проекте, поскольку мы работаем с датчиком в постоянном режиме. Вывод Vcc и заземления используется для питания модуля напряжением 5 В от платы Arduino. SCL и SDA - это линии шины связи I2C, которые подключены к контактам A4 и A5 I2C Arduino Pro mini соответственно. Поскольку в самом модуле есть резистор с высоким сопротивлением на линиях, нет необходимости добавлять их извне.
Чтобы указать направление, мы использовали 8 светодиодов, все из которых подключены к контактам GPIO Arduino через токоограничивающий резистор на 470 Ом. Схема питается от кроны 9В через цилиндрический разъем. 9 В подаются непосредственно на вывод Vin Arduino, где регулируется до 5 В с помощью встроенного регулятора Arduino. Эти 5 В затем используются для питания датчика и Arduino.

Изготовление печатных плат для цифрового компаса
Идея схемы состоит в том, чтобы разместить 8 светодиодов по кругу так, чтобы каждый светодиод указывал на все 8 направлений, а именно на север, северо-восток, восток, юго-восток, юг, юго-запад, запад и северо-запад соответственно. Не так то и легко разместить их аккуратно на макете или на перфорированной плате. Поэтому разработка печатной платы сделает ее более аккуратной и простой в использовании. Для этого можно использовать программу для проектирования печатных плат Dip Trace, расположить светодиоды и резистор аккуратным по окружности и соединить дорожки, чтобы сформировать соединения. После завершения, дизайн выглядит примерно так, как показано ниже. Вы можете скачать файл Gerber по приведенной ниже ссылке.

dip trace


Она разработана в виде двухсторонней платы. Arduino размещается на нижней стороне печатной платы.

Зайдите на сайт https://www.pcbway.ru/, зарегистрируйтесь, если вы впервые. Затем на вкладке "Моментальный расчет стоимости платы" введите размеры вашей печатной платы, количество слоев и количество требуемых печатных плат. Размер моей печатной платы 8 см × 8 см, поэтому вкладка выглядит так, как показано ниже.


В большинстве случаев значений по умолчанию будет достаточно. Единственное, что я обычно меняю, это толщина платы. Ставлю 1,2 мм. Так мне кажется лучше выглядит. Еще маску делаю синего цвета. Но тут уже как нравится.
Как видите, время сборки составляет всего 2-3 дня, а для нашей платы это всего лишь 5 долларов. Затем вы выбираете предпочтительный способ доставки в зависимости от ваших требований.


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

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

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

Ниже представлены некоторые фотографии платы после пайки.

Программирование Arduino
Теперь, когда наше устройство готово, давайте посмотрим на программу, которую нужно загрузить в нашу плату Arduino. Цель кода - считывать данные с датчика магнитометра QMC5883L и преобразовывать их в градусы (от 0 до 360). Как только мы узнаем градус, мы должны включить светодиод, указывающий определенное направление. Направление, которое я использовал в этой программе, - север. Таким образом, независимо от того, где вы находитесь, на вашей плате будет гореть только один светодиод, а направление светодиода будет указывать на СЕВЕР.

Мы используем микросхему QMC5883, для связи с ней нам необходимо знать адрес I2C ее регистров, который можно найти в таблице данных. Но, к счастью для нас, все это уже сделано и упаковано в виде библиотеки парнем по имени keepworking на Github. Поэтому все, что вам нужно сделать, это просто загрузить библиотеку для QMC5883, щелкнув ссылку, чтобы получить ZIP-файл. Затем этот ZIP-файл можно добавить в вашу Arduino IDE, выполнив Sketch -> Include Library -> Add .ZIP library.
После добавления библиотеки мы можем продолжить нашу программу. Начинаем с включения необходимых файлов библиотеки, как показано ниже. Библиотека "wire.h" используется для включения связи I2C, а MechaHMC5883L - это та, которую мы только что добавили в Arduino. Эта библиотека содержит всю информацию о том, как работать с датчиком QMC5883L.

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

Далее переходим к объявлениям глобальных переменных. Здесь, поскольку у нас есть 8 светодиодов в качестве выходов, трудно ссылаться на каждый через имя контакта, поэтому мы используем параметр массива для ссылки на все светодиоды. Имя массива - ledPins, а переменная led_count - это количество светодиодов, которые у нас есть. Начинается с 0.

int ledPins[] = <2,3,4,5,6,7,8,9>; //Array of output pin to which the LED is connected to
char led_count = 7; //Total number of LED pins

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

void setup() <
Wire.begin(); //Begin I2C communication
Serial.begin(9600); //Begin Serial Communication
qmc.init(); //Initialise the QMC5883 Sensor

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

Каждый, кто пробовал ставить на своего робота электронный компас задавался таким вопросом: а как, собственно, получить из этого прибора некую виртуальную стрелку, которая бы показывала на север? Если мы подключим к Ардуино самый популярный датчик HMC5883L, то получим поток чисел, которые ведут себя странным образом при его вращении. Что делать с этими данным? Попробуем разобраться, ведь полноценная навигация робота без компаса невозможна.

Калибровка магнитометра/компаса hmc5883l

Во первых, устройство, которое часто называют компасом на самом деле является магнитометром. Магнитометр — это прибор, который измеряет напряженность магнитного поля. Все современные электронные магнитометры изготавливаются по технологии МЭМС и позволяют проводить измерения сразу по трем перпендикулярным осям. Так вот тот поток чисел, которые выдает прибор — это на самом деле проекции магнитного поля на три оси в системе координат магнитометра. Такой же формат данных имеют и другие устройства, используемые для позиционирования и навигации: акселерометр и гиротахометр (он же гироскоп).

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

round2

Казалось бы, вот оно! Катет равен катету на тангенс противолежащего угла. Для того чтобы получить угол направления придется взять арктангенс отношения катетов:

Если мы проведем эти несложные вычисления, мы действительно получим какой-то результат. Жаль только, что мы всё еще не получим верный ответ, ведь мы не учли кучу факторов:

  1. Смещение и искажение вектора магнитного поля Земли, вследствие внешних воздействий.
  2. Влияние тангажа и крена на показания компаса.
  3. Разница между географическим и магнитным полюсами — магнитное склонение.

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

Визуализация показаний магнитометра

Указанный плагин позволяет загружать в SketchUp массивы точек из файла вида:
212 -321 -515
211 -320 -515
209 -318 -514
213 -319 -516

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

Самый простой способ сохранить показания магнитометра — передавать их через COM-порт на персональный компьютер в монитор последовательного порта, с последующим сохранением их в текстовый файл. Второй способ — подключить к Ардуино SD карту и записывать данные магнитометра в файл на SD карте.

Разобравшись с записью данных и с импортом их в SketchUp, попробуем теперь провести эксперимент. Будем вращать магнитометр вокруг оси Z, а управляющая программа в это время будет записывать показания датчика каждые 100 мс. Всего будет записано 500 точек. Результат этого эксперимента приведен ниже:

ringz

Что можно сказать, глядя на этот рисунок? Во-первых, видно, что ось Z действительно была зафиксирована — все точки расположены, более или менее, в плоскости XY. Во-вторых, плоскость XY немного наклонена, что может быть вызвано либо наклоном моего стола, либо наклоном магнитного поля Земли 🙂

Теперь взглянем на эту же картину сверху:

ringz_top

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

А что получится, если вращать компас вокруг всех осей одновременно? Правильно, получится не круг, а сфера (точнее сфероид). Вот такая сфера получилась у меня:

fullxyz

Дополнительно к основным 500 точкам сферы, добавлены еще три массива, по 500 точек в каждом. Каждая из добавленных групп точек отвечает за вращение магнитометра вокруг фиксированной оси. Так, нижний круг получен вращением прибора вокруг оси Z. Круг справа — вращением вокруг оси Y. Наконец, плотное кольцо точек слева отвечает за вращение магнитометра вокруг оси X. Почему эти круги не опоясывают шар по экватору, читаем ниже.

Магнитное наклонение

На самом деле, последний рисунок может показаться немного странным. Почему будучи в горизонтальном состоянии, датчик показывает почти максимальное значение по оси Z?? Ситуация повторяется если мы наклоним прибор, например, осью X вниз — опять получим максимальное значение (левый круг). Получается, что на датчик постоянно действует поле направленное сквозь датчик вниз к поверхности земли!

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


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

Теперь же перейдем, непосредственно к проблемам.

Искажения магнитного поля: Hard & Soft Iron

В зарубежной литературе, искажения магнитного поля принято делить на две группы: Hard Iron и Soft Iron. Ниже приведена картинка, иллюстрирующая суть этих искажений.

magnetic-field-distortion-web

Hard Iron

Даю справку. Интенсивность магнитного поля земли сильно зависит от земных координат, в которых оно измеряется. Например, в Кейп Тауне (Южная Африка) поле составляет около 0.256 Гс (Гаусс), а в Нью-Йорке в два раза больше — 0.52 Гс. В целом по планете, интенсивность магнитного поля варьируется в диапазоне от 0.25 Гс до 0.65 Гс.

Для сравнения, поле обычного магнитика на холодильник составляет 50 Гс, — это в сто раз больше чем магнитное поле в Нью Йорке!! Понятно, что чуткий магнитометр может легко запутаться, если рядом с ним возникнет один из таких магнитов. На квадрокоптере, конечно, таких магнитиков нет, но зато есть куда более мощные редкоземельные магниты вентильных двигателей, а еще электронные цепи контроллера, провода питания и аккумуляторная батарея.

Такие источники паразитного магнитного поля называют Hard Iron. Воздействуя на магнитометр, они придают некоторое смещение измеряемым значениям. Посмотрим, имеются ли Hard Iron искажения у нашей сферы. Проекция точек сферы на плоскость XY, выглядит следующим образом:

full_side

Видно, что облако точек имеет некоторое заметное смещение по оси Y влево. По оси Z смещение практически отсутствует. Ликвидировать такое искажение очень просто: достаточно увеличить или уменьшить получаемые от прибора значения на величину смещения. Например, калибровка Hard Iron для оси Y будет иметь вид:

Ycal_hard = Y — Ybias

где Ycal_hard — калиброванное значение;
Y — исходное значение;
Ybias — величина смещения.

Чтобы вычислить Ybias нам потребуется зафиксировать максимальное и минимальное значение Y, а затем воспользоваться простым выражением:

Ybias = (Ymin-Ymax)/2 — Ymin

где Ybias — искомая величина смещения;
Ymin — минимальное значение оси Y;
Ymax — максимальное значение оси Y.

Soft Iron

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

Ycal_soft = Y * Yscale

где Ycal_hard — калиброванное значение;
Y — исходное значение;
Yscale — коэффициент масштабирования.

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

где Yscale — искомый коэффициент искажения по оси Y;
Amax — максимальное значение на некоторой оси;
Amin — минимальное значение на некоторой оси;
Ymax — максимальное значение на оси Y;
Ymin — минимальное значение на оси Y.

Автоматическая калибровка

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

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

В интернете можно найти несколько программ, пригодных для этого. Например, MagCal, или еще одна — Magneto. В отличие от MagCal, в Magneto рассчитанные параметры выводятся в готовом к использованию виде, без необходимости дополнительных преобразований. Именно этой программой мы и воспользуемся. Главная и единственная форма программы выглядит следующим образом:

magneto

Затем жмем кнопку Calibrate и получаем:

  1. значения смещения по всем трем осям: Combined bias (b);
  2. и матрицу масштаба и ортогонализации: Correction for combined scale factors, misalignments and soft iron (A-1).

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

Vcal = A-1 * (V — Vbias)

где Vcal — вектор калиброванных значение магнитометра для трех осей;
A-1 — матрица масштаба и ортогонализации;
Vbias — вектор смещения по трем осям.

Влияние наклона магнитометра на вычисляемое направление

На очереди проблема номер два. В начале статьи мы уже попробовали вычислить угол между севером и стрелкой компаса. Для этого годится простая формула:

где H — угол отклонения стрелки компаса от северного направления;
X,Y — калиброванные значения магнитометра.

Представим теперь, что мы фиксируем ось X строго по направлению к северу, и начинаем вращать датчик вокруг этой оси (придаем крен). Получается, что проекция поля на ось X остается неизменной, а вот проекция на Y меняется. Согласно формуле, стрелка компаса будет показывать либо на северо-запад, либо на северо-восток, в зависимости от того, в какую сторону делаем крен. Это и есть, заявленная в начале статьи, вторая проблема электронного компаса.

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

где Vcal — магнитный вектор, очищенный от Hard и Soft искажений;
Rx и Ry — матрицы поворота вокруг осей X и Y;
Vcal2 — магнитный вектор, очищенный от влияния крена и тангажа.

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

Xcal2 = Xcal*cos(pitch) + Ycal*sin(roll)*sin(pitch) + Zcal*cos(roll)*sin(pitch)
Ycal2 = Ycal*cos(roll) — Zcal*sin(roll)
H = atan2( -Ycal2, Xcal2 )

где roll и pitch — наклоны вокруг осей X и Y;
Xcal,Ycal,Zcal — вектор магнитометра (Vcal);
Ycal2, Ycal2 — калиброванные значения магнитометра (Zcal2 не считаем — он нам не пригодится);
H — угол между севером и стрелкой компаса.

Разница между географическим и магнитным полюсом

Для нивелирования этих различий, к показаниям датчика необходимо прибавить (или вычесть) определенный угол, называемый магнитным склонением. Например, в Екатеринбурге магнитное склонение имеет величину +14 градусов, а значит измеренные показания магнитометра следует уменьшить на эти же 14 градусов.

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

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

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

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

Любой металлоискатель состоит из трех основных блоков:

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

Принцип работы и устройства металлоискателя

  • операционного двухканального усилителя TL072 и его аналога К157УД2 (приемный модуль);
  • чипа NE555 (передающий узел системы).

Схема металлоискателя пират

Но в последнее время становятся популярны варианты на Arduino. Причина этого — простота, дешевизна, хорошая изученность семейства Ардуино и мощные программные возможности платформы.

Принцип работы

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

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

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

  • L — значение индуктивности в Генри;
  • μο — магнитная проницаемость;
  • N — количество витков катушки;
  • A — площадь сечения провода;
  • L — длина намотанного на катушку провода в метрах.

При наличии металла рядом с катушкой индуктивность меняется:

  • немагнитные металлы ее снижают;
  • магнитные, наподобие железа — увеличивают.

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

Уровень индуктивности зависит от сердечника. Бессердечниковые катушки с небольшим количеством витков имеют сравнительно невысокую итоговую чувствительность.

Катушки без сердечника

Для получения высоких значений нужны варианты на ферритовом сердечнике и с несколькими десятками (а лучше — сотнями) витков.

Катушки с сердечником

Простая катушка

Простой металлоискатель на базе Arduino

Для постройки понадобятся:

Схема устройства

Готовый металлоискатель на Arduino схематически выглядит так:

Все элементы монтируются на макетной плате. Вид в сборе:

Детектор в сборе на плате

Схема действует следующим образом:

  • на выходе Ардуино мы создаем импульсы прямоугольной формы;
  • они поступают на LR фильтр верхних частот;
  • с каждым переходом уровня на катушке возникнет быстрый остроконечный импульс. Долгота его пропорциональна значению индуктивности нашей катушки.

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

Прошивка

Пример окна среды разработки

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

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

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

Прибор может быть собран в любом удобном корпусе, покупном или самодельном. В самом простом случае его можно смонтировать даже на селфи-палке.

Металлодетектор на селфи палке

Более сложная схема с шестью катушками

Для лучших результатов можно использовать несколько катушек и плату Arduino Nano.

  • контроллер Ардуино;
  • 9-вольтовый источник питания;
  • счетверенный компаратор LM339 — 2 шт.;
  • макетная плата Veroboard 50 на 80 мм;
  • резисторы на 1 кОм — 5 шт.;
  • резисторы на 100 Ом — 5 шт.;
  • диод сигнальный IN4148 — 5 шт.;
  • конденсатор на 0.1 мкФ — 5 шт.;
  • конденсатор керамический на 330 пФ — 5 шт.;
  • резистор на 10К — 1 шт.;
  • светодиодная лента с резистором на 150 Ом, под напряжение 3 В — для визуальной индикации.

Проводником здесь служит медный провод сечением 0.26 мм и 25 метров в длину. Также нужны 3 мяча для пинг-понга, лист пластика, 6-мм МДФ 22 на 23 см для основы катушек (два листа), двухкомпонентный эпоксидный клей и экранированный кабель сечением 2–3 мм и длиной 30 см. Под рукоять можно взять пластиковую ручку швабры с гибким шарниром или другую похожую конструкцию.

Металлодетектор 5 катушек в корпусе

Подготовка

Сперва создадим на картоне шаблон, нарисовав на нем круг радиусом 40 мм и разделив его на 8 одинаковых сегментов. Должна получиться шестиугольная форма. С ее помощью рисуется контур на листе бумаги. Всего должно получиться пять форм, которые следует скопировать на доску МДФ, как показано на картинке. Получившееся следует вырезать в двух экземплярах.

Шаблон

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

Лист с отверстиями под катушки

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

Затем на 40-мм цилиндр наматывается 40 витков проволоки. Должно получиться пять таких катушек. Обмотки можно склеить горячим клеем, оставляя в начале и конце по 20 см для соединения с платой.

Катушки

После этого в каждом узле катушки высверливается 3-мм отверстие для подвода проводов, и намотанные блоки приклеиваются на место.

Катушки в гнездах

Заготовка с выведенными проводами

Монтаж

Схема будущего металлоискателя:

Схема детектора

Монтажная плата размечается по созданному ранее макету.

Монтажная плата

Сперва ставится контроллер Arduino и чип LM339. Затем добавляются конденсаторы и резисторы, с ними же ставится экранированный кабель.

Сборка элементов на плате

Конденсаторы на 0.1 мкФ можно разместить прямо на МДФ для экономии места и провода, там же ставятся диоды.

Установка на мдф

Готовый вид смонтированной системы:

Собранная система

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

Источник питания в данном случае заключен в контейнер на крышке.

Готовый вид конструкции:

Металлодетектор в корпусе

Программная часть

Полный текст скетча для Ардуино можно найти по ссылке ниже.

Заключение

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

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

Читайте также: