Компас – гениальное изобретение человечества, позволившее вывести ориентацию на местности на новый уровень. А современные технологии, позволяют в свою очередь вывести на новый уровень сам компас.
На текущий момент производители предлагают достаточное количество различных датчиков, которые можно использовать в своих устройствах, все они имеют свои особенности (точность измерения, интерфейс обмена данными, питание и т.п.). Ниже мы остановимся только на одном из чипов, который доступен по цене и совместим с программируемыми микросхемами.
HMC5883L
Микросхема представляет собой магнитометр, позволяющий позиционировать направление по трем осям (x, y, z). Может использоваться в портативной электронике (имеет небольшие размеры), но радиолюбители могут внедрять его в состав радиоуправляемых моделей, в роботов и другую технику.
Рис. 1. Микросхема HMC5883L
Технология его изготовления - анизотропная магниторезистивная (AMR).
Взаимодействие с микроконтроллером осуществляется по протоколу I²C (он же IIC).
Для построения устройств, где используются прерывания (сигнал формируется магнитометром после изменения предыдущих показателей), имеется специальный вывод DRDY.
Специально для микросхем HMC5883L продаются готовые печатные платы с обвязкой (этот путь будет наиболее простым для проектов "на коленке" или для использования с программируемыми микроконтроллерами).
Один из вариантов выглядит так.
Рис. 2. Печатная плата с обвязкой
Модули могут поставляться для самостоятельной пайки или уже в готовом виде (с припаянной микросхемой).
Все что остается – подключить к Atmega, Arduino или другому микроконтроллеру, и "прошить" правильную логику работы.
Перед построением своих электронных компасов на HMC5883L стоит учесть, что датчик может проявлять чувствительность к электрическим полям, создаваемым бытовыми приборами, кабелями и т.п. Поэтому в процессе тестирования, калибровки и эксплуатации желательно обеспечить достаточное расстояние от всех потенциальных помех.
Реализация электронного компаса на Atmega8
Схема подключения датчика к АТмеге выглядит следующим образом.
Рис. 3. Схема подключения датчика
Информацию в числовом выражении угла относительно севера будет отображать небольшой LCD дисплей SC1602. За регулировку яркости последнего будет отвечать переменный резистор R2.
Микроконтроллер PCA9517 в схеме используется для согласования уровней (HMC5883L, как и говорилось выше, "понимает" IIC и питается напряжением 3,3 В, в то время как дисплей питается 5 В). Если вы приобрели готовый модуль с датчиком, на котором уже имеется встроенная система согласования уровней, то PCA9517 из схемы можно исключить.
Перед использованием устройство необходимо откалибровать. Для этого нажимается ключ S2 и датчик вращается на 360°.
В прошивке применяется дополнительный алгоритм для снижения погрешности измерения, который вычисляет среднеарифметическое число из min и max по осям. Поэтому истинность измерения при постоянном вращении существенно снижается. Обнулить регистры можно ключом S1.
Готовая прошивка и исходный листинг можно найти во вложениях (все функции детально прокомментированы, при необходимости программу можно изменить под свои нужды).
Расстановка фьюзов на скрине ниже.
Рис. 4. Расстановка фьюзов
Собрать схему для тестирования можно и на макетной плате, при желании можно аккуратно упаковать все в корпус.
Тестовый вариант электронного компаса в работе можно увидеть на фото ниже.
Рис. 5. Тестовый вариант электронного компаса в работе
Символ перед числами означает знак "минус" (то есть значение координат отрицательное).
Дисплей показывает только значения координат (слева-направо – x,y,z). Сверху – вычисленный угол относительно сервера.
Реализация электронного компаса на Arduino UNO
В случае с Arduino все гораздо проще. Готовый модуль подключается к основной плате напрямую (смотри схему ниже).
Рис. 6. Схема подключения модуля к плате
На примере выше питание подается с контакта 3,3 В, если у вас модуль с согласованием уровней, то подключение следует производит к питанию 5 В.
Для программы использовалась готовая библиотека с GitHub (скачать актуальную версию можно здесь https://github.com/bildr-org/HMC5883L). Во вложении эта библиотека тоже есть.
В данной связке отображения результатов на встроенном дисплее не предусмотрено. Получить данные угла относительно севера (0- север, 180 – юг) можно с COM-порта.
Вот вывод с тестового устройства.
Рис. 7. Вывод с тестового устройства
Датчик показывает правильные результаты только в горизонтальном положении.
Пошивка и исходники находятся здесь.
Автор: RadioRadar