Я не очень хорош в нахождении мест и определении направлений, но умею читать карты и компас. В наше время навигация при помощи GPS очень популярна и у вас может возникнуть вопрос: зачем мне нужен компас? Итак, я люблю гаджеты и если я смогу сделать что-то сам, то использование такого устройства будет радовать меня намного больше. Поэтому я и решил рассказать вам как сделать компас своими руками.



Я начал с базовой функции, показывающей угол наклона и поворота цифрового магнитометра на ЖК-дисплее, но на микроконтроллере осталось множество неиспользованных аналоговых и цифровых пинов (я использовал совместимый с Ардуино JeonLab mini). Поэтому я подключил к нему цифровой датчик температуры и фототранзистор, подстраивающий яркость подсветки дисплея (одиночный светодиод).

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

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

Шаг 1: Список компонентов



  • LCD: 16×2 HD44780 LCD (белый текст на синем фоне): это очень популярный дисплей, который легко найти и купить.
  • JeonLab mini v1.3: это недорогая плата, совместимая с Arduino. На рынке существует несколько небольших плат, совместимых с Arduino, так что просто выберите ту, которую можно спрятать за экранчиком.
  • Цифровой компас: MAG3110 (купил готовый на Ebay): я пробовал другой цифровой компас пару лет назад и мне не удалось его запустить, а эту модель удалось легко запрограммировать. Всё будет объяснено более детально далее в статье.
  • Датчик температуры TMP36: взгляните на спецификацию с сайта Digikey. Он очень прост в использовании.
  • Фототранзистор LTR-4206E: Я уверен, что любой другой ИК-фототранзистор будет работать не хуже.
  • Регулятор 7805: Вы знаете для чего он нужен. Зарядка автомобиля и напряжение равны примерно 13.8-14.4V, тогда как нам для работы контроллера и монитора нужно 5V.
  • Резисторы и конденсаторы (смотрите схему)
  • Штекер для автомобильного зарядника
  • Плата прототипирования
  • Кнопка-выключатель (нормально открытый, normal open, N.O.) для калибровки магнитометра
  • Цельный медный провод (1мм в диаметре) для крепления девайса
  • Стяжки для кабеля

Шаг 2: Схема устройства


JeonLab mini v1.3 — это Ардуино с минимумом функционала. Для загрузки программы понадобится USB-интерфейс FTDI, который нужен лишь для загрузки кода и последовательной коммуникации.

Подключение дисплея хорошо объяснено в документации к библиотеке на странице руководства к Arduino, для удобства я лишь изменил распиновку. Помните, что вам также нужно изменить пины и в коде программы. Одна важная вещь, о которой стоит сказать — анод светодиодной подсветки дисплея подключен не к V, а к цифровому пину 5, который поддерживает широтно-импульсную модуляцию (ШИМ, pulse-width modulation, PWM), что позволяет управлять яркостью подсветки дисплея.

У датчика температуры TMP36 есть три ножки — V, сигнал и GND. Я соединил сигнальную ножку с одним из аналоговых входов JeonLab mini. Смотрите программу Ардуино в следующем шаге, чтобы понять, как рассчитывается температура по датчику.

Фототранзистор имеет две ножки — положительную и отрицательную. Вы можете держать резистор между отрицательным проводом и GND до тех пор, пока получаете корректные значения в темноте (я тестировал девайс на рассвете) и при ярком освещении (в этом случае вам не нужно ничего измерять, так как мы и так будем получать максимальные значения). Яркость, измеренная этим фототранзистором, используется для регулировки яркости светодиода подсветки дисплея.
Файлы

Шаг 3: Предварительные тесты и рассёт курса


Прежде всего, я собрал и протестировал дисплей, JeonLab mini и магнетометр MAG3110 на макетной плате. У магнетометра есть трёхосевой датчик, но, так как дороги в местности, где я живу, относительно ровные, я решил не заморачиваться со сложными формулами и просто вычислять угол направления при помощи ATAN осей X и Y — всё работает достаточно хорошо.

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

По предварительным испытаниям я определил максимальные и минимальные значения осей X и Y, представляющие север и юг, но значения распределены по углу неравномерно. Другими словами, центральное значение не представляет восток или запад. Это, как мне известно, обыкновенно для всех полупроводниковых магнитометров, если в них нет встроенных алгоритмов компенсации. Чтобы правильно считывать направление (приблизительно), я обнаружил, что если вы знаете значения для севера и юга для каждой оси, X и Y, то достаточно просто вычислить ATAN разностей текущего значения и средние значения X и Y дадут вам угол направления (см. скетч Arduino в следующем шаге), и всё будет отлично работать. Это не идеальный способ вычисления направления, но мы и не говорим о точности до десятых долей. Я ездил с компасом в своём автомобиле около недели и результаты оказались вполне удовлетворительными.

Шаг 4: Скетч Ардуино

Я добавил настолько подробные комментарии к коду, насколько это возможно. Скачайте приложенный файл.

Файлы

Шаг 5: Сборка электронных компонентов





Шаг 6: Собираем из проволки каркас








Шаг 7: Установка и готовый вид