Для электронщиков и радиолюбителей

Компас на основе Arduino и HMC5883L своими руками

Компас на основе Arduino и HMC5883L своими руками

Делаем простой компас на основе Arduino и магнитометра

В рамках данного проекта вы узнаете, как создать свой собственный цифровой компас с помощью Arduino и магнитометра HMC5883L. Повторив проект, вы сможете изучить работу датчика HMC5883L.

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

Компас на основе Arduino и HMC5883L своими руками

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

Компас на основе Arduino и HMC5883L своими руками

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

Компас на основе Arduino и HMC5883L своими руками

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

Компас на основе Arduino и HMC5883L своими руками

Далее приведен код программы для 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);
}

1 комментарий к Компас на основе Arduino и HMC5883L своими руками

Обсуждение закрыто.