Перевод статьи с сайта обучающих материалов Instructables



Магнитометр, который иногда ещё называют гауссометром, измеряет силу магнитного поля [в данном случае магнитную индукцию / прим. перев.]. Это прибор, необходимый при измерении силы постоянных магнитов и электромагнитов, а также для установления формы поля нетривиальных комбинаций из магнитов. Он достаточно чувствительный для того, чтобы определить намагниченность металлических предметов. В случае, если зонд будет работать достаточно быстро, он сможет определять изменяющиеся во времени поля от моторов и трансформаторов.

В мобильных телефонах обычно есть трёхосевой магнитометр, однако он оптимизирован для слабого магнитного поля Земли силой в 1 Гаусс = 0,1 мТл [миллитесла] и насыщается в полях с индукцией в несколько мТл. Где именно в телефоне расположен этот датчик, обычно непонятно, и расположить его внутри узкого места типа разреза магнита часто невозможно. Более того, лучше вообще не подносить смартфон к сильным магнитам.

В данной статье я опишу, как сделать простейший переносной магнитометр из распространённых комплектующих: нам потребуются линейный датчик Холла, Arduino, дисплей и кнопка. Общая стоимость прибора не выходит за пределы €5, а измерять он будет индукцию от -100 до +100 мТл с погрешностью в 0,01 мТл – гораздо лучше, чем можно было ожидать. Для получения точных абсолютных показателей его понадобится откалибровать: я опишу, как это делается при помощи длинного самодельного соленоида.

Шаг 1: датчик Холла


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

Я использую SS49E, поскольку он дешёвый и доступный. Что стоит отметить из его документации:

  • Питание: 2.7 — 6.5 В, что прекрасно совместимо с 5 В для Arduino.
  • Нулевой сигнал: 2.25-2.75 В, примерно посередине между 0 и 5 В.
  • Чувствительность: 1.0-1.75 мВ/Гс, поэтому для получения точных результатов потребуется калибровка.
  • Выходное напряжение: 1,0 – 4,0 В (при работе от 5 В): диапазон покрывается АЦП Arduino.
  • Диапазон: минимум ± 650 Гс, обычно +/1 1000 Гс.
  • Время отклика: 3 мкс, то есть можно проводить измерения с частотой в десятки кГц.
  • Рабочий ток: 6-10 мА, достаточно немного для батарейки.
  • Температурная ошибка: 0,1% на градус Цельсия. Вроде немного, однако отклонение на 0,1% даёт ошибку в 3 мТл.

Датчик компактный, 4х3х2 мм, и измеряет компоненту магнитного поля, перпендикулярную его лицевой стороне. Он выдаёт положительное значение для полей, идущих от задней части к передней – к примеру, когда он стоит лицом к южному полюсу магнита. У датчика есть три контакта, +5 В, 0 В и выход – слева направо, если смотреть с лица.

Шаг 2: Требуемые материалы


  • Линейный датчик Холла SS49E. €1 за 10 штук.
  • Arduino Uno с доской для прототипирования или Arduino Nano без штырьков для портативного варианта.
  • Монохромный OLED дисплей SSD1306 0.96” с интерфейсом I2C.
  • Кнопка.

Для зонда:

  • Шариковая ручка или другая прочная трубка.
  • 3 тонких провода чуть длиннее трубки.
  • 12 см термоусадки диаметром 1,5 мм.


Для портативной версии:
  • Большая коробка Tic-Tac (18x46x83) или нечто похожее.
  • Контакты для батарейки на 9 В.
  • Выключатель.

Шаг 3: Первая версия – с использованием доски для прототипирования






Сначала всегда собирайте прототип, чтобы проверить работу всех компонентов и софта! Подключение видно на картинке: датчик Холла соединяется с контактами Arduino +5V, GND, A1 (слева направо). Дисплей соединяется с GND, +5V, A5, A4 (слева направо). Кнопка при нажатии должна замыкать землю и A0.

Код написан в Arduino IDE v. 1.8.10. Требуется установка библиотек Adafruit_SSD1306 и Adafruit_GFX.

Если всё сделано правильно, то дисплей должен выдавать значения DC и AC.

Шаг 4: Немного о коде


Если вам неинтересен код, эту часть можно пропустить.

Ключевая особенность кода состоит в том, что магнитное поле измеряется 2000 раз подряд. На это уходит 0,2 – 0,3 сек. Отслеживая сумму и квадрат суммы измерений, можно вычислять среднее и стандартное отклонения, которые выдаются как DC и AC. Усредняя по большому количеству измерений мы увеличиваем точность, теоретически на √2000 ≈ 45. Получается, что используя 10-битное АЦП, мы получаем точность 15-битного АЦП! И это имеет значение: 1 шаг АЦП – 4 мВ, то есть, ~ 0,3 мТл. Благодаря усреднению, мы уменьшаем ошибку от 0,3 мТл до 0,01 мТл.

В качестве бонуса мы получаем стандартное отклонение, определяя таким образом изменяющееся поле. Поле, колеблющееся с частотой 50 Гц проходит порядка 10 циклов за время измерения, поэтому можно измерить величину AC.

У меня после компиляции получилась следующая статистика: Sketch uses 16852 bytes (54%) of program storage space. Maximum is 30720 bytes. Global variables use 352 bytes (17%) of dynamic memory, leaving 1696 bytes for local variables. Maximum is 2048 bytes.

Большую часть места занимают библиотеки Adafruit, однако ещё полно места для добавления функциональности.

Шаг 5: Готовим зонд






Зонд лучше всего закреплять на конце узкой трубки: так его просто будет помещать и удерживать в узких местах. Подойдёт любая трубка из немагнитного материала. Мне идеально подошла старая шариковая ручка.

Подготовьте три тонких гибких провода чуть длиннее трубки. В моём кабеле логики в цветах проводов нет (оранжевый +5 В, красный 0 В, серый – сигнал), просто так мне их проще запомнить.

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

Шаг 6: Собираем переносной прибор




Батарейка на 9В, OLED-экран и Arduino Nano с комфортом умещаются внутри большой коробки Tic-Tac. Её преимущество в прозрачности – экран легко читается, даже находясь внутри. Все фиксированные компоненты (зонд, выключатель и кнопка) ставятся на крышку, чтобы всё можно было вынимать из коробки для замены батареи или обновления кода.

Я никогда не любил батарейки на 9В – у них высокая цена и малая ёмкость. Но в моём супермаркете внезапно стали продавать их перезаряжаемую версию NiMH по €1, и я обнаружил, что их легко зарядить, если подать 11 В через резистор на 100 Ом и оставить на ночь. Я заказал себе дешёвые разъёмы для батареек, но мне их так и не прислали, поэтому я разобрал старую батарейку на 9 В, чтобы сделать из неё коннектор. Плюс батарейки на 9В в её компактности, и в том, что на ней хорошо работает Arduino при подключении её к Vin. На +5 В будет регулируемое напряжение в 5 В, которое понадобится для OLED и датчика Холла.

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

Шаг 7: Калибровка








Калибровочная константа в коде соответствует числу, прописанному в документации (1,4 мВ/Гс), однако в документации разрешён диапазон этого значения (1.0-1.75 мВ/Гс). Чтобы получать точные результаты, нужно откалибровать зонд.

Самый простой способ получить магнитное поле хорошо определённой силы – использовать соленоид. Магнитная индукция поля соленоида равняется B = μ0 * n * I. Магнитная постоянная (или магнитная проницаемость вакуума) – это природная константа: μ0 = 1,2566 x 10-6 Тл/м/А. Поле однородно и зависит только от плотности намотки n и тока I, которые можно измерить с погрешностью около 1%. Формула работает для соленоида бесконечной длины, однако служит очень хорошим приближением для поля в его центре, если соотношение его длины к диаметру превышает 10.

Чтобы собрать подходящий соленоид, возьмите полую цилиндрическую трубу, длина которой в 10 раз больше диаметра, и сделайте намотку из изолированного провода. Я использовал ПВХ-трубку с внешним диаметром 23 мм и сделал 566 витков, протянувшихся на 20,2 см, что даёт нам n = 28/см = 2800 / м. Длина провода 42 м, сопротивление – 10 Ом.

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

Перед калибровкой я получил 6,04 мТл/A, хотя по теории должно было быть 3,50 мТл/A. Поэтому я умножил константу калибровки в 18-й строчке кода на 0,58. Готово – магнитометр откалиброван!