Вам понадобится
  • - Цифровой компас HMC5883;
  • - Arduino;
  • - макетная плата и соединительные провода;
  • - компьютер.
Инструкция
1
Вот основные характеристики магнитного компаса:
- 3-осевой магниточувствительный датчик;
- 12-разрядный АЦП с разрешением 2 мГс (миллигаусс);
- встроенная самопроверка;
- низкое рабочее напряжение и малое потребление;
- цифровой интерфейс I2C;
- высокая скорость опроса – до 160 раз в секунду (время одного измерения примерно 6 мс);
- точность определения направления 1°…2°;
- может применяться в сильных магнитных полях (до ±8 Гаусс).
Схема подключения магнитного датчика HMC5883L к Arduino приведена на рисунке. Она очень компактная и простая, т.к. двухпроводной интерфейс I2C тем и хорош, что требует малого количества соединений. Можно воспользоваться макетной платой.
2
Должно получиться примерно так, как на фотографии. Я ещё подключу к шинам SCL и SDA логический анализатор, чтобы контролировать информационный обмен между Arduino и модулем HMC5883. Это не обязательно.
3
Давайте в качестве первого знакомства попробуем прочитать идентификационный регистры 10 (0xA), 11 (0xB) и 12 (0xC) цифрового компаса HMC5883 и напишем вот такой скетч, как на рисунке. Он снабжён подробными комментариями.
4
Сигнал, полученный с помощью логического анализатора, будет таким, как на иллюстрации.
Что это значит? Первый байт – I2C адрес, с которым мы (ведущее устройство, Arduino) устанавливаем связь (старшие 7 бит 0x1E), и режим записи (младший бит – 0x0); получается число 0x3C. Второй байт – число 0xA, которое мы записали по адресу 0x1E и бит подтверждения от датчика HMC5883L, которое является ведомым. Это номер регистра, с которого мы начнём считывать данные. На этом первая транзакция закончилась. Начинается следующая. Третий байт – это запрос чтения у ведомого (старшие 7 бит – адрес 0x1E, 8-ой бит – операция чтения 0x1; получается число 0x3D). Последние 3 три байта – это ответ ведомого устройства HMC5883L из регистров 0xA, 0xB и 0xC, соответственно.
Цифровой компас HMC5883L при непрерывном считывании перемещается по регистрам самостоятельно. Т.е. каждый раз указывать регистр не обязательно (но и не запрещено). Например, если мы вместо 0xA записали бы 0x3 и 10 раз считали, то получили бы значения в 10-ти регистрах, начиная с 3-го по 12-ый.
А что это за три числа – 0x48, 0x34, 0x33? Снова воспользовавшись паспортом на цифровой компас HMC5883L, мы увидим, что это значения по умолчанию для трёх идентификационных регистров.
5
Чтобы получить данные цифрового компаса по магнитному полю, нужно прочитать регистры с 3-го по 8-ой подобно тому, как мы прочитали идентификационные регистры. С той лишь разницей, что данные по каждой из трёх осей X, Y и Z представлены в виде двухбайтовых чисел. Переведя их в десятичные числа, мы получим направления по каждой из трёх осей.