Amateur Radio Station R9AL






Модуль GY-86 включает в себя:



Файлы:
  1. Справочные данные MPU-6000, MPU-6050
  2. Справочные данные на HMC5883L
  3. Справочные данные на MS5611





Тестовые программы:

MPU6050
#include "MPU6050.h"
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int16_t temp;
void setup() {
  Wire.begin();
  Serial.begin(9600);
  mpu.initialize();
  // состояние соединения
  Serial.println(mpu.testConnection() ? "MPU6050 OK" : "MPU6050 FAIL");
  delay(1000);
}
void loop() {
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  Serial.print((float)ax/ 32768 * 2); Serial.print('\t');
  Serial.print((float)ay/ 32768 * 2); Serial.print('\t');
  Serial.print((float)az/ 32768 * 2); Serial.print('\t');
  Serial.print((float)gx/ 32768 * 250); Serial.print('\t');
  Serial.print((float)gy/ 32768 * 250); Serial.print('\t');
  Serial.println((float)gz/ 32768 * 250);
  delay(5);
}


HMC5883
#include < Wire.h> // подключаем I2C библиотеку
#define addr 0x1E // I2C 7-битный адрес датчика HMC5883

void setup() {
    Serial.begin(9600); // инициализация последовательного порта 
    Wire.begin(); // инициализация I2C
  
    // Задаём режим работы датчика HMC5883:
    Wire.beginTransmission(addr);
    Wire.write(0x00); // выбираем регистр управления CRA (00)
    Wire.write(0x70); // записываем в него 0x70 [усреднение по 8 точкам, 15 Гц, нормальные измерения]
    Wire.write(0xA0); // записываем в регистр CRB (01) 0xA0 [чувствительность = 5]
    Wire.write(0x00); // записываем в регистр Mode (02) 0x00 [бесконечный режим измерения]
    Wire.endTransmission();
}

void loop() { 
  
  Wire.beginTransmission(addr);
  Wire.write(0x03); // переходим к регистру 0x03
  Wire.endTransmission();
  
  Wire.requestFrom(addr, 6); // запрашиваем 6 байтов
  while( Wire.available() )  
  { 
    int h = Wire.read(); // старший байт значения по оси X
    int l = Wire.read(); // младший байт значения по оси X
    int x = word(h, l);  // объединяем в двухбайтовое число

    int y = Wire.read(); // старший байт значения по оси Y
    y = y << 8; // сдвигаем влево на 8 битов
    y = y | Wire.read(); // объединяем с младшим байтом по OR

    int z = Wire.read() << 8; // читаем байт и сдвигаем влево на 8 битов
    z |= Wire.read(); // сокращённый синтаксис операции OR

    Serial.print("X = ");  
    Serial.println(x, DEC); 
    Serial.print("Y = ");  
    Serial.println(y, DEC); 
    Serial.print("Z = ");  
    Serial.println(z, DEC); 
    Serial.println();    
  }
    delay(100);
}


MS5611
#include < Wire.h> // библиотека встроенная, скачивать отдельно ее не нужно
#include < MS5611.h>
 
MS5611 ms5611;
double referencePressure;
 
void setup()
{
  Serial.begin(9600);
 
  // Initialize MS5611 sensor
  Serial.println("Initialize MS5611 Sensor");
 ms5611.begin();
  
 
  // Get reference pressure for relative altitude
  referencePressure = ms5611.readPressure();
 
 
}
 
 
void loop()
{
  // Read raw values
  uint32_t rawTemp = ms5611.readRawTemperature();
  uint32_t rawPressure = ms5611.readRawPressure();
 
  // Read true temperature & Pressure
  double realTemperature = ms5611.readTemperature();
  long realPressure = ms5611.readPressure();
 
  // Calculate altitude
  float absoluteAltitude = ms5611.getAltitude(realPressure);
  float relativeAltitude = ms5611.getAltitude(realPressure, referencePressure);
 
  Serial.println("--");
 
  Serial.print(" rawTemp = ");
  Serial.print(rawTemp);
  Serial.print(", realTemp = ");
  Serial.print(realTemperature);
  Serial.println(" *C");
 
  Serial.print(" rawPressure = ");
  Serial.print(rawPressure);
  Serial.print(", realPressure = ");
  Serial.print(realPressure);
  Serial.println(" Pa");
 
  Serial.print(" absoluteAltitude = ");
  Serial.print(absoluteAltitude);
  Serial.print(" m, relativeAltitude = ");
  Serial.print(relativeAltitude);
  Serial.println(" m");
 
  delay(1000);
}




Copyright © R9AL 2022 Все права защищены
Рейтинг@Mail.ru Яндекс цитирования