Делаем простой компас на основе Arduino и магнитометра
В рамках данного проекта вы узнаете, как создать свой собственный цифровой компас с помощью Arduino и магнитометра HMC5883L. Повторив проект, вы сможете изучить работу датчика HMC5883L.
Для проекта мы создадим собственную электронную плату компаса и будем использовать ее с Arduino. На ней установлены светодиоды, каждый из которых будет указывать на текущее направление (север, северо-восток, восток и т.д.). Если у вас нет возможности сделать подобную плату, то можете просто установить светодиоды по кругу.

Эти 8 светодиодов с токоограничивающими резисторами в нашем случае соединены с разъемом платы компаса следующим образом.

Плата с направляющими светодиодами.

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

Далее приведен код программы для Arduino Nano.
#include <Wire.h>
#include <MechaQMC5883.h>
MechaQMC5883 bussola;
int x = 0, y = 0, z = 0;
int angulo = 0;
void setup()
{
Wire.begin();
Serial.begin(9600);
bussola.init();
for(byte pino = 2; pino <= 9; pino++)
{
pinMode(pino, OUTPUT);
}
}
void loop()
{
bussola.read(&x,&y,&z);
angulo = atan2(x, y)/0.0174532925;
if(angulo < 0)
angulo+=360;
angulo = 360-angulo;
Serial.println(angulo);
if (angulo > 338 || angulo < 22)
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
Serial.println("Norte");
}
if (angulo > 22 && angulo < 68)
{
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
Serial.println("Nordeste");
}
if (angulo > 68 && angulo < 113)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
Serial.println("Leste");
}
if (angulo > 113 && angulo < 158)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
Serial.println("Suldeste");
}
if (angulo > 158 && angulo < 203)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
Serial.println("Sul");
}
if (angulo > 203 && angulo < 248)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
Serial.println("Suldoste");
}
if (angulo > 248 && angulo < 293)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
Serial.println("Oeste");
}
if (angulo > 293 && angulo < 338)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
Serial.println("Noroeste");
}
delay(500);
}
Электронный трехосевой компас GY-273 HMC5883L
Электронный трехосевой компас GY-273 HMC5883L
Written by Admin
1 комментарий к Компас на основе Arduino и HMC5883L своими руками
Обсуждение закрыто.
Неплохо