Собираем переносной магнитометр
Перевод статьи с сайта обучающих материалов Instructables
Магнитометр, который иногда ещё называют гауссометром, измеряет силу магнитного поля [в данном случае магнитную индукцию / прим. перев.]. Это прибор, необходимый при измерении силы постоянных магнитов и электромагнитов, а также для установления формы поля нетривиальных комбинаций из магнитов. Он достаточно чувствительный для того, чтобы определить намагниченность металлических предметов. В случае, если зонд будет работать достаточно быстро, он сможет определять изменяющиеся во времени поля от моторов и трансформаторов.
В мобильных телефонах обычно есть трёхосевой магнитометр, однако он оптимизирован для слабого магнитного поля Земли силой в 1 Гаусс = 0,1 мТл [миллитесла] и насыщается в полях с индукцией в несколько мТл. Где именно в телефоне расположен этот датчик, обычно непонятно, и расположить его внутри узкого места типа разреза магнита часто невозможно. Более того, лучше вообще не подносить смартфон к сильным магнитам.
В данной статье я опишу, как сделать простейший переносной магнитометр из распространённых комплектующих: нам потребуются линейный датчик Холла, Arduino, дисплей и кнопка. Общая стоимость прибора не выходит за пределы €5, а измерять он будет индукцию от -100 до +100 мТл с погрешностью в 0,01 мТл – гораздо лучше, чем можно было ожидать. Для получения точных абсолютных показателей его понадобится откалибровать: я опишу, как это делается при помощи длинного самодельного соленоида.
Эффект Холла часто применяется для измерения магнитных полей. Когда электроны проходят через проводник, помещённый в магнитное поле, их относит в сторону, в результате чего в проводнике появляется поперечная разность потенциалов. Правильно выбрав материал и геометрию полупроводника, можно получить измеряемый сигнал, который затем можно будет усилить и выдать измерение одной компоненты магнитного поля.
Я использую SS49E, поскольку он дешёвый и доступный. Что стоит отметить из его документации:
Датчик компактный, 4х3х2 мм, и измеряет компоненту магнитного поля, перпендикулярную его лицевой стороне. Он выдаёт положительное значение для полей, идущих от задней части к передней – к примеру, когда он стоит лицом к южному полюсу магнита. У датчика есть три контакта, +5 В, 0 В и выход – слева направо, если смотреть с лица.
Для зонда:
Для портативной версии:
Сначала всегда собирайте прототип, чтобы проверить работу всех компонентов и софта! Подключение видно на картинке: датчик Холла соединяется с контактами Arduino +5V, GND, A1 (слева направо). Дисплей соединяется с GND, +5V, A5, A4 (слева направо). Кнопка при нажатии должна замыкать землю и A0.
Код написан в Arduino IDE v. 1.8.10. Требуется установка библиотек Adafruit_SSD1306 и Adafruit_GFX.
Если всё сделано правильно, то дисплей должен выдавать значения DC и AC.
Если вам неинтересен код, эту часть можно пропустить.
Ключевая особенность кода состоит в том, что магнитное поле измеряется 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 В, красный 0 В, серый – сигнал), просто так мне их проще запомнить.
Чтобы использовать зонд с прототипом, припаяйте кусочки проводов на конец кабеля и заизолируйте их термоусадкой. Позже их можно отрезать и припаять провода прямо к Arduino.
Батарейка на 9В, OLED-экран и Arduino Nano с комфортом умещаются внутри большой коробки Tic-Tac. Её преимущество в прозрачности – экран легко читается, даже находясь внутри. Все фиксированные компоненты (зонд, выключатель и кнопка) ставятся на крышку, чтобы всё можно было вынимать из коробки для замены батареи или обновления кода.
Я никогда не любил батарейки на 9В – у них высокая цена и малая ёмкость. Но в моём супермаркете внезапно стали продавать их перезаряжаемую версию NiMH по €1, и я обнаружил, что их легко зарядить, если подать 11 В через резистор на 100 Ом и оставить на ночь. Я заказал себе дешёвые разъёмы для батареек, но мне их так и не прислали, поэтому я разобрал старую батарейку на 9 В, чтобы сделать из неё коннектор. Плюс батарейки на 9В в её компактности, и в том, что на ней хорошо работает Arduino при подключении её к Vin. На +5 В будет регулируемое напряжение в 5 В, которое понадобится для OLED и датчика Холла.
Датчик Холла, экран и кнопка подсоединяются так же, как было на прототипе. Добавляется только кнопка выключения, между батарейкой и Arduino.
Калибровочная константа в коде соответствует числу, прописанному в документации (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. Готово – магнитометр откалиброван!
Магнитометр, который иногда ещё называют гауссометром, измеряет силу магнитного поля [в данном случае магнитную индукцию / прим. перев.]. Это прибор, необходимый при измерении силы постоянных магнитов и электромагнитов, а также для установления формы поля нетривиальных комбинаций из магнитов. Он достаточно чувствительный для того, чтобы определить намагниченность металлических предметов. В случае, если зонд будет работать достаточно быстро, он сможет определять изменяющиеся во времени поля от моторов и трансформаторов.
В мобильных телефонах обычно есть трёхосевой магнитометр, однако он оптимизирован для слабого магнитного поля Земли силой в 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. Готово – магнитометр откалиброван!