Digital compass arduino

Цифровой компас на основе Arduino и магнитометра HMC5883L

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

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

Необходимые компоненты

  1. Плата Arduino Pro mini (купить на AliExpress).
  2. Магнитометр (Magnetometer sensor) HMC5883L (купить на AliExpress).
  3. Светодиоды – 8 шт. (купить на AliExpress).
  4. Резисторы 470 Ом – 8 шт. (купить на AliExpress).
  5. Разъем типа Barrel Jack.
  6. Изготовленная печатная плата.
  7. FTDI программатор.
  8. Компьютер/ноутбук.

Что такое магнитометр и как он работает

Надеемся, что слово магнитометр не ассоциируется у вас с мутантом по имени «Магнето» из популярной киноэпопеи «Люди Х» – но он там был реально крут, не правда ли? ))

На самом деле магнитометр представляет собой устройство, которое может ощущать («чувствовать») магнитные полюса Земли и указывать направление к ним. Все мы знаем что Земля представляет собой огромный сферический магнит с северным и южным полюсами. Естественно, этот огромный магнит создает магнитное поле. Магнитометр улавливает (ощущает) это магнитное поле и на основании направления этого магнитного поля он может определять направление (в котором мы смотрим или развернуты лицом).

Как работает датчик (магнитометр) HMC5883L

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

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

Разница между HMC5883L и QMC5883L

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

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

Работа схемы

Схема цифрового компаса на основе платы Arduino и магнитометра HMC5883L представлена на следующем рисунке.

Как видите, схема достаточно проста. Нам просто необходимо подключить датчик HMC5883L к плате Arduino и соединить 8 светодиодов с контактами платы Arduino Pro mini.

Магнитометр HMC5883L имеет 5 контактов. Его контакт DRDY (Data Ready) мы не будем использовать поскольку в нашем проекте датчик будет работать в непрерывном режиме. Контакты Vcc и ground (земля) датчика используются для питания модуля от платы Arduino. Контакты SCL и SDA используются для связи по протоколу I2C и подключены к контактам A4 и A5 (которые также являются контактами для связи по протоколу I2C) платы Arduino Pro mini. Поскольку контакты датчика имеют внутренние подтягивающие резисторы, то нет необходимости добавлять в схему внешние подтягивающие резисторы.

Для индикации направления в проекте мы используем 8 светодиодов, подключенных к контактам платы Arduino с помощью ограничивающих ток резисторов сопротивлением 470 Ом. Схема запитывается от батарейки 9V через переходник типа barrel Jack – на фотографиях хорошо видно что он из себя представляет. Эти 9V попадают на контакт Vin платы Arduino, затем с помощью встроенного регулятора платы Arduino это напряжение понижается до 5V, которое и используется для питания нашей схемы.

Изготовление печатной платы для цифрового компаса

Основная идея проекта состоит в том, чтобы расположить 8 светодиодов по периметру круга на плате. Каждый из этих светодиодов будет обозначать свое направление. Соответственно, будет 8 направлений – Север, Северо-Восток, Восток, Юго-Восток, Юг, Юго-Запад, Запад и Северо-Запад. На перфорированной плате красиво расположить эти светодиоды достаточно затруднительно, поэтому мы использовали печатную плату. Файлы разработанной для этого проекта печатной платы можно скачать по следующей ссылке — Gerber файл для проекта цифрового компаса.

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

Шаг 1. Перейдите по адресу https://www.pcbgogo.com/?code=t, зарегистрируйтесь там если это ваше первое посещение. Затем на вкладке PCB Prototype введите размеры вашей печатной платы, число ее слоев и какое количество печатных плат вам необходимо. Мы использовали размер печатной платы 80mm×80mm.

Шаг 2. Нажмите на кнопку Quote Now (рассчитать цену сейчас). После этого вас перебросит на страницу, где вам будет необходимо ввести дополнительные параметры печатной платы: материал, цвет и т.д. Обычно значения, выставленные на этой странице по умолчанию, работают превосходно. Единственное, на что вам обязательно необходимо обратить внимание – это на цену и на время изготовления. Для наших плат стоимость составила $5 и время изготовления 2-3 дня. Также вы можете выбрать удобный для себя вид доставки.

Шаг 3. Загрузите в сервис свои Gerber файлы и оплатите заказ. После загрузки сервис PCBGOGO проверяет ваши Gerber файлы на корректность.

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

Сборка печатной платы

Нам платы пришли в отличном состоянии, их внешний вид вы можете посмотреть на следующих рисунках.

Нам понадобилось около 10 минут чтобы припаять к плате необходимые компоненты, после этого мы получили следующий вид нашей платы:

Объяснение программы для Arduino

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

Полный код программы приведен в конце статьи, здесь же мы рассмотрим его основные фрагменты.

Мы используем микросхему магнитометра QMC5883L, для взаимодействия с ней нам необходимо знать I2C адрес ее регистров, который можно найти в даташите. Но к счастью, как говорится «все уже сделано за нас» и на Github можно скачать готовую библиотеку для работы с QMC5883L. По этой ссылке вы скачаете ZIP файл, который затем можно добавить в вашу Arduino IDE открыв там пункт меню Sketch -> Include Library -> Add .ZIP library.

После добавления библиотеки мы можем приступать к написанию программы. Первым делом нам в программе необходимо подключить используемые библиотеки – библиотека wire используется для осуществления связи по протоколу I2C, а MechaQMC5883 – для работы с магнитометром (ее мы только что добавили в Arduino IDE).

Источник

Светодиодный компас на Arduino

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

В этой статье попробуем разобраться, как работает датчик магнитометра, и как он может взаимодействовать с микроконтроллером, таким как 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 по приведенной ниже ссылке.

Она разработана в виде двухсторонней платы. 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.

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

for (int thisPin=0; thisPin 338 || heading 22 && heading 68 && heading 113 && heading 158 && heading 203 && heading 248 && heading 293 && heading

Направление Градус, соответствующий направлению Диапазон для этого направления СЕВЕР 0 ° / 360 ° > 338 ° или СЕВЕРО-ВОСТОК 45 ° От 22 ° до 68 ° ВОСТОК 90 ° От 68 ° до 113 ° ЮГО-ВОСТОК 135 ° 113 ° до 158 ° ЮГ 180 ° От 158 ° до 203 ° ЮГО-ЗАПАД 225 ° От 203 ° до 248 ° ЗАПАД 170 ° 248 ° до 293 ° СЕВЕРО-ЗАПАД 315 ° От 293 ° до 338 °

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

Источник

Adblock
detector