Я не очень хорош в нахождении мест и определении направлений, но умею читать карты и компас. В наше время навигация при помощи GPS очень популярна и у вас может возникнуть вопрос: зачем мне нужен компас? Итак, я люблю гаджеты и если я смогу сделать что-то сам, то использование такого устройства будет радовать меня намного больше. Поэтому я и решил рассказать вам как сделать компас своими руками.
![](https://img.masterclub.online/gs/cdn.instructables.com/F3J/R3QR/HGIEW5RI/F3JR3QRHGIEW5RI.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FCJ/34A5/HFD184V6/FCJ34A5HFD184V6.LARGE.jpg)
Я начал с базовой функции, показывающей угол наклона и поворота цифрового магнитометра на ЖК-дисплее, но на микроконтроллере осталось множество неиспользованных аналоговых и цифровых пинов (я использовал совместимый с Ардуино JeonLab mini). Поэтому я подключил к нему цифровой датчик температуры и фототранзистор, подстраивающий яркость подсветки дисплея (одиночный светодиод).
После этого на контроллере осталось еще несколько свободных пинов и у меня есть планы по добавлению дополнительных датчиков, например наружный термометр, устройство анти-вор и т.д.
Картинка в начальной части этой инструкции иллюстрирует устройство в полной сборке и установленное поверх зеркала заднего вида автомобиля. Девайс отображает направление, наклон и температуру в салоне.
Шаг 1: Список компонентов
![](https://img.masterclub.online/gs/cdn.instructables.com/FK0/ANRA/HFD184UY/FK0ANRAHFD184UY.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/F99/MJYK/HFD0ZDOK/F99MJYKHFD0ZDOK.LARGE.jpg)
- 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: Схема устройства
![](https://img.masterclub.online/gs/cdn.instructables.com/FCO/IJ4O/HFD11OXE/FCOIJ4OHFD11OXE.LARGE.jpg)
JeonLab mini v1.3 — это Ардуино с минимумом функционала. Для загрузки программы понадобится USB-интерфейс FTDI, который нужен лишь для загрузки кода и последовательной коммуникации.
Подключение дисплея хорошо объяснено в документации к библиотеке на странице руководства к Arduino, для удобства я лишь изменил распиновку. Помните, что вам также нужно изменить пины и в коде программы. Одна важная вещь, о которой стоит сказать — анод светодиодной подсветки дисплея подключен не к V, а к цифровому пину 5, который поддерживает широтно-импульсную модуляцию (ШИМ, pulse-width modulation, PWM), что позволяет управлять яркостью подсветки дисплея.
У датчика температуры TMP36 есть три ножки — V, сигнал и GND. Я соединил сигнальную ножку с одним из аналоговых входов JeonLab mini. Смотрите программу Ардуино в следующем шаге, чтобы понять, как рассчитывается температура по датчику.
Фототранзистор имеет две ножки — положительную и отрицательную. Вы можете держать резистор между отрицательным проводом и GND до тех пор, пока получаете корректные значения в темноте (я тестировал девайс на рассвете) и при ярком освещении (в этом случае вам не нужно ничего измерять, так как мы и так будем получать максимальные значения). Яркость, измеренная этим фототранзистором, используется для регулировки яркости светодиода подсветки дисплея.
Файлы
Шаг 3: Предварительные тесты и рассёт курса
![](https://img.masterclub.online/gs/cdn.instructables.com/FZ8/ZV2Q/HFD1E8XQ/FZ8ZV2QHFD1E8XQ.LARGE.jpg)
Прежде всего, я собрал и протестировал дисплей, JeonLab mini и магнетометр MAG3110 на макетной плате. У магнетометра есть трёхосевой датчик, но, так как дороги в местности, где я живу, относительно ровные, я решил не заморачиваться со сложными формулами и просто вычислять угол направления при помощи ATAN осей X и Y — всё работает достаточно хорошо.
Сила и направление магнитного поля отличаются от места к месту. Для точного измерения электронного компаса и карты вам нужно знать магнитное отклонение (разница между севером компаса и настоящим географическим севером). В моем коде я не вычитал и не добавлял отклонение, но если в вашем местоположении оно очень большое, вы можете добавить его, чтобы компенсировать разницу.
По предварительным испытаниям я определил максимальные и минимальные значения осей X и Y, представляющие север и юг, но значения распределены по углу неравномерно. Другими словами, центральное значение не представляет восток или запад. Это, как мне известно, обыкновенно для всех полупроводниковых магнитометров, если в них нет встроенных алгоритмов компенсации. Чтобы правильно считывать направление (приблизительно), я обнаружил, что если вы знаете значения для севера и юга для каждой оси, X и Y, то достаточно просто вычислить ATAN разностей текущего значения и средние значения X и Y дадут вам угол направления (см. скетч Arduino в следующем шаге), и всё будет отлично работать. Это не идеальный способ вычисления направления, но мы и не говорим о точности до десятых долей. Я ездил с компасом в своём автомобиле около недели и результаты оказались вполне удовлетворительными.
Шаг 4: Скетч Ардуино
Я добавил настолько подробные комментарии к коду, насколько это возможно. Скачайте приложенный файл.
ФайлыШаг 5: Сборка электронных компонентов
![](https://img.masterclub.online/gs/cdn.instructables.com/FVQ/QFW1/HFD1KJAM/FVQQFW1HFD1KJAM.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/F8U/2HSR/HFD1FZIS/F8U2HSRHFD1FZIS.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FBY/IWBD/HFD184V1/FBYIWBDHFD184V1.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/F99/MJYK/HFD0ZDOK/F99MJYKHFD0ZDOK.LARGE.jpg)
Шаг 6: Собираем из проволки каркас
![](https://img.masterclub.online/gs/cdn.instructables.com/FYL/3A34/HFD1E8XS/FYL3A34HFD1E8XS.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FAE/6LA0/HFD1E8XT/FAE6LA0HFD1E8XT.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FLH/G0NH/HFD1E8XU/FLHG0NHHFD1E8XU.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/F01/2QR5/HFD1976C/F012QR5HFD1976C.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FVT/6XES/HFD1KJAY/FVT6XESHFD1KJAY.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FQS/8RBO/HFD184V4/FQS8RBOHFD184V4.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FYU/SIVC/HFD1FET2/FYUSIVCHFD1FET2.LARGE.jpg)
Шаг 7: Установка и готовый вид
![](https://img.masterclub.online/gs/cdn.instructables.com/FOG/UV78/HFD10WWK/FOGUV78HFD10WWK.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FCK/ZEUF/HFD1FET5/FCKZEUFHFD1FET5.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FL8/QR82/HFD1KJB0/FL8QR82HFD1KJB0.LARGE.jpg)
![](https://img.masterclub.online/gs/cdn.instructables.com/FCJ/34A5/HFD184V6/FCJ34A5HFD184V6.LARGE.jpg)