Оглавление:

Магнитометр Arduino: 5 шагов (с изображениями)
Магнитометр Arduino: 5 шагов (с изображениями)

Видео: Магнитометр Arduino: 5 шагов (с изображениями)

Видео: Магнитометр Arduino: 5 шагов (с изображениями)
Видео: Инерционный трекер на базе Arduino и GY-85 2024, Ноябрь
Anonim
Магнитометр Arduino
Магнитометр Arduino

Что мы строим?

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

Что такое Ардуино?

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

Прежде чем приступить к этому руководству, загрузите среду разработки Arduino, а также любые библиотеки, необходимые для вашей конкретной модели. Среда разработки доступна по адресу https://www.arduino.cc/en/main/software, а инструкции по установке доступны по адресу

Что такое магнитное поле?

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

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

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

Мы можем изобразить магнитное поле в одном месте в виде стрелки. Мы можем изобразить магнитное поле во всем пространстве множеством стрелок в разных местах, возможно, разного размера и указывающих в разных направлениях. Хорошая визуализация доступна по адресу https://www.falstad.com/vector3dm/. Магнитометр, который мы строим, отображает магнитное поле в месте расположения датчиков в виде стрелки на дисплее.

Что такое датчик на эффекте Холла и как он работает?

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

Физика эффекта Холла резюмируется уравнением силы Лоренца. Это уравнение описывает силу, действующую на движущийся заряд, вызванную внешним электрическим и магнитным полями.

Изображение
Изображение

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

Изображение
Изображение

Что такое изометрическая проекция?

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

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

Шаг 1. Соберите припасы

Ардуино и кабель

Arduino - это мозг магнитометра. Эти инструкции описывают, как использовать Arduino Uno или Arduino MKR1010. В любом случае для подключения к компьютеру необходим кабель.

Вариант 1: кабель Arduino Uno и USB AB

www.digikey.com/product-detail/en/arduino/A000066/1050-1024-ND/2784006

www.digikey.com/product-detail/en/stewart-connector/SC-2ABE003F/380-1424-ND/8544570

Вариант 2: Arduino MKR1010 и кабель microUSB

www.digikey.com/product-detail/en/arduino/ABX00023/1050-1162-ND/9486713

www.digikey.com/product-detail/en/stewart-connector/SC-2AMK003F/380-1431-ND/8544577

TFT-дисплей

TFT - это тонкопленочный транзистор. Этот 1,44-дюймовый дисплей содержит 128 на 128 пикселей. Он маленький, яркий и красочный. Он прикреплен к коммутационной плате. Однако контакты разъема отделены друг от друга, поэтому вам придется их припаять. нужный.)

www.digikey.com/product-detail/en/adafruit-industries-llc/2088/1528-1345-ND/5356830

    Изображение
    Изображение
  • Аналоговые датчики на эффекте Холла

Требуются три датчика Холла. Ссылка ниже предназначена для номера детали Allegro A1324LUA-T. Для этого датчика контакт 1 - это напряжение питания, контакт 2 - земля, а контакт 3 - выход. Другие датчики Холла тоже должны работать, но убедитесь, что они аналоговые, а не цифровые. Если вы используете другой датчик, проверьте распиновку и при необходимости отрегулируйте проводку. (На самом деле я использовал другой датчик той же компании для целей тестирования. Однако тот, который я использовал, устарел, и этот датчик является его заменой.)

www.digikey.com/product-detail/en/allegro-microsystems-llc/A1324LUA-T/620-1432-ND/2728144

Малая макетная плата и провод

www.digikey.com/product-detail/en/adafruit-industries-llc/239/1528-2143-ND/7244929

Постоянные магниты для тестирования

Магниты на холодильник подойдут.

Шаг 2: Подключение

Проводка
Проводка

Припаиваем заголовки к дисплею.

Изображение
Изображение

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

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

Изображение
Изображение

Схема подключения MKR1010 и Uno немного отличается по двум причинам. Во-первых, Arduino и дисплей обмениваются данными по SPI. Разные модели Arduino имеют разные выделенные контакты для определенных линий SPI. Во-вторых, аналоговые входы Uno могут принимать до 5 В, в то время как аналоговые входы MKR1010 могут принимать только до 3,3 В. Рекомендуемое напряжение питания для датчиков на эффекте Холла составляет 5 В. Выходы датчиков подключены к аналоговым входам Arduino, и они могут быть такими же большими, как напряжение питания. Для Uno используйте рекомендованный источник питания 5 В для датчиков. Для MKR1010 используйте 3,3 В, чтобы аналоговый вход Arduino никогда не видел напряжения больше, чем он может выдержать.

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

Подключение к Arduino Uno

Изображение
Изображение

Дисплей имеет 11 контактов. Подключите их к Arduino Uno следующим образом. (NC означает, что не подключен.)

  • Вин → 5В
  • 3.3 → NC
  • Земля → Земля
  • SCK → 13
  • SO → NC
  • СИ → 11
  • ТКС → 10
  • RST → 9
  • D / C → 8
  • CCS → NC
  • Lite → NC

Подключите Vin датчиков к 5V Arduino. Подключите землю датчика к земле Arduino. Подключите выход датчиков к аналоговым входам A1, A2 и A3 Arduino.

Изображение
Изображение

Подключение к Arduino MKR1010

Изображение
Изображение

Дисплей имеет 11 контактов. Подключите их к Arduino следующим образом. (NC означает, что не подключен.)

  • Вин → 5В
  • 3.3 → NC
  • Земля → Земля
  • SCK → SCK 9
  • SO → NC
  • SI → MOSI 8
  • ТКС → 5
  • RST → 4
  • D / C → 3
  • CCS → NC
  • Lite → NC

Подключите Vin датчиков к Vcc на Arduino. На этом выводе 3,3 В, а не 5 В. Подключите землю датчика к земле Arduino. Подключите выход датчиков к аналоговым входам A1, A2 и A3 Arduino.

Изображение
Изображение

Шаг 3. Проверьте дисплей

Заставим работать TFT-дисплей. К счастью, у Adafruit есть несколько удобных библиотек и отличный учебник для них. Эти инструкции точно соответствуют руководству

Откройте среду разработки Arduino. Перейдите в Инструменты → Управление библиотеками. Установите библиотеки Adafruit_GFX, Adafruit_ZeroDMA и Adafruit_ST7735. Перезапустите среду разработки Android.

Пример графического теста включен в библиотеки. Открой это. Файл → Примеры → Библиотека Adafruit ST7735 и ST7789 → graphicstest. Чтобы выбрать 1,44-дюймовый дисплей, закомментируйте строку 95 и раскомментируйте строку 98.

Оригинальная версия:

94 // Используйте этот инициализатор при использовании 1,8-дюймового TFT-экрана:

95 tft.initR (INITR_BLACKTAB); // Инициируйте микросхему ST7735S, черная вкладка 96 97 // ИЛИ используйте этот инициализатор (раскомментируйте) при использовании 1,44-дюймового TFT: 98 //tft.initR(INITR_144GREENTAB); // Инициируйте микросхему ST7735R, зеленую вкладку

Правильная версия для дисплея 1,44 дюйма:

94 // Используйте этот инициализатор при использовании 1,8-дюймового TFT-экрана:

95 //tft.initR(INIT_BLACKTAB); // Инициализация микросхемы ST7735S, черная вкладка 96 97 // ИЛИ использовать этот инициализатор (раскомментировать) при использовании 1,44-дюймового TFT: 98 tft.initR (INITR_144GREENTAB); // Инициализировать микросхему SST35R, зеленая вкладка

Дисплей обменивается данными с помощью SPI, а разные модели Arduinos используют разные выделенные контакты для некоторых линий связи. Пример graphicstest настроен для работы с выводами Uno. Если вы используете MKR1010, добавьте следующие строки между строками 80 и 81.

Исправления для MKR1010:

80

#define TFT_CS 5 #define TFT_RST 4 #define TFT_DC 3 #define TFT_MOSI 8 #define TFT_SCLK 9 Adafruit_ST7735 tft = Adafruit_ST7735 (TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK), TFT_SCLK; 81 поплавок p = 3,1415926;

Сохраните измененный пример графического теста. Подключите Arduino к компьютеру, если вы еще этого не сделали. Перейдите в Инструменты → Плата и инструменты → Порт, чтобы убедиться, что компьютер может найти Arduino. Перейдите в Скетч → Загрузить. Если пример работает, на дисплее будут отображаться линии, прямоугольники, текст и полная демонстрация. В руководстве Adafruit вы найдете более подробную информацию, если необходимо устранение неполадок.

Шаг 4: Код магнитометра

Загрузите прикрепленный код и откройте его в среде разработки Arduino.

Эта программа использует шесть функций:

Setup () инициализирует дисплей

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

DrawAxes3d () рисует и маркирует оси x, y и z

DrawArrow3d () принимает значения x, y и z в диапазоне от 0 до 1023. По этим значениям он вычисляет конечные точки стрелки в пространстве. Затем он использует функции isometricxx () и isometricyy () для вычисления конечных точек на экране. Наконец, он рисует стрелку и печатает напряжения в нижней части экрана

Isometricxx () находит координату x изометрической проекции. Он принимает координаты x, y и z точки и возвращает соответствующее положение x пикселя на экране

Isometricyy () находит координату y изометрической проекции. Он принимает координаты x, y и z точки и возвращает соответствующее положение пикселя y на экране

Перед запуском кода нам нужно указать, какие контакты использовать для связи SPI с дисплеем, и нам нужно указать напряжение источника для датчиков. Если вы используете MKR1010, закомментируйте строки 92-96, а также строку 110. Затем раскомментируйте строки 85-89, а также строку 108. Если вы используете Uno, закомментируйте строки 85-89, а также строку 108. Затем раскомментируйте строки 92-96 и 110.

Загрузите код, Скетч → Загрузить.

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

Изображение
Изображение

Шаг 5: Дальнейшая работа

Будущая работа
Будущая работа

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

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

Магнитное поле зависит от положения, поэтому оно разное в каждой точке пространства. В этом устройстве используются три датчика: один для измерения компонент x, y и z магнитного поля в точке. Датчики расположены близко друг к другу, но не в одной точке, что ограничивает разрешающую способность магнитометра. Было бы здорово сохранить показания магнитного поля в разных точках, а затем отображать их в виде набора стрелок в соответствующих местах. Однако это проект на другой день.

использованная литература

Информация о графических библиотеках Adafruit Arduino

https://learn.adafruit.com/adafruit-1-44-color-tft-with-micro-sd-socket/overview

Визуализация магнитного поля

https://www.falstad.com/vector3dm/

Информация о датчиках эффекта Холла и Холла

  • https://sensing.honeywell.com/index.php?ci_id=47847
  • https://www.allegromicro.com/~/media/Files/Datasheets/A1324-5-6-Datasheet.ashx

Информация об изометрической проекции

  • https://en.wikipedia.org/wiki/3D_projection
  • https://en.wikipedia.org/wiki/Isometric_projection

Рекомендуемые: