Manual Mercury V1
Descubra como voar rapidamente com facilidade, conecte seu altímetro para fazer upload para o site Altimeter Cloud e todas as funcionalidades avançadas também. Se você está com dificuldades ou apenas começando, este é o lugar certo para estar.

Exemplo de código: acelerômetro e giroscópio LSM6DSO32

PDF

Este exemplo mostra como você pode se conectar ao IMU LSM6DSO32 (Acelerômetro & Giroscópio) e ler os valores.
Você precisa se certificar de ligar os sensores usando o pino VACC conforme este código.

Uma vez programado, pressione o botão de energia para reiniciar o Mercury e conecte um monitor Serial.

Usando Arduino IDE? Nosso programador online inclui Mercury_Pins.h por padrão, então os nomes dos pinos funcionam sem problemas. Se você estiver usando Arduino IDE ou outro programador, copie o conteúdo da aba Mercury_Pins.h e cole-o no topo do seu programa.
/*
 * Exemplo Mercury LSM6DSO32
 * Lê dados do acelerômetro e giroscópio do IMU LSM6DSO32
 * e envia para Serial a cada 500ms.
 *
 * Fiação: Conecte LSM6DSO32 à porta I2C (SDA/SCL)
 * Endereço I2C: 0x6B (SDO/SA0 ALTO na placa Mercury)
 *
 * Biblioteca: Adafruit LSM6DS (instalada automaticamente pelo compilador)
 */

#include "Wire.h"
#include "Adafruit_LSM6DS.h"
#include "Adafruit_LSM6DSO32.h"
#include "Mercury_Pins.h"

Adafruit_LSM6DSO32 imu;

void setup() {
    Serial.begin(115200);
    delay(1000);

    Serial.println("Exemplo IMU LSM6DSO32");
    Serial.println("=====================");

    // Ligar o trilho de sensores
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Iniciar I2C nos pinos Mercury
    Wire.begin(SDA, SCL);

    // Inicializar o IMU no endereço 0x6B
    if (!imu.begin_I2C(0x6B)) {
        Serial.println("ERRO: LSM6DSO32 não encontrado em 0x6B!");
        Serial.println("Execute o exemplo I2C Scanner para verificar seu endereço.");
        while (1) delay(100);
    }

    Serial.println("LSM6DSO32 conectado em 0x6B");

    // ââ Configuração do Acelerômetro ââ
    // Opções de intervalo: 4G, 8G, 16G, 32G
    imu.setAccelRange(LSM6DSO32_ACCEL_RANGE_16_G);

    // Opções de taxa de dados: 12.5, 26, 52, 104, 208, 416, 833, 1660, 3330, 6660 Hz
    imu.setAccelDataRate(LSM6DS_RATE_104_HZ);

    // ââ Configuração do Giroscópio ââ
    // Opções de intervalo: 125, 250, 500, 1000, 2000 graus por segundo
    imu.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS);

    // Taxa de dados (mesmas opções do acelerômetro)
    imu.setGyroDataRate(LSM6DS_RATE_104_HZ);

    Serial.println("Aceler.: intervalo 16G | Giro: intervalo 250 dps | Taxa: 104Hz");
    Serial.println();
}

void loop() {
    // Ler todos os dados do sensor em uma única chamada
    sensors_event_t accel, gyro, temp;
    imu.getEvent(&accel, &gyro, &temp);

    // Acelerômetro (m/s^2)
    Serial.printf("Acelerômetro (X/Y/Z) m/s2: %+7.2f  %+7.2f  %+7.2f",
        accel.acceleration.x,
        accel.acceleration.y,
        accel.acceleration.z);

    // Separador
    Serial.print("    |    ");

    // Giroscópio (graus por segundo)
    Serial.printf("Giro (X/Y/Z) dps: %+7.2f  %+7.2f  %+7.2f\n",
        gyro.gyro.x,
        gyro.gyro.y,
        gyro.gyro.z);

    delay(500);
}

#pragma once
/*
 * Definições de Pinos do Mercury (ESP32-C6)
 * Atribuições de GPIO específicas da placa
 */

// ââ LED de Status (NeoPixel) ââ
#define LEDPOWER      3    // Energia do NeoPixel (coloque em ALTO para ativar)
#define LED           2    // Sinal de dados do NeoPixel

// ââ Barramento I2C ââ
#define SDA           21   // Dados I2C
#define SCL           22   // Relógio I2C

// ââ Energia do Sensor ââ
#define VACC          20   // Trilho de energia do sensor (coloque em ALTO para ativar)

// ââ Portas de Uso Geral ââ
#define GP06          6    // Porta GP06
#define GP07          7    // Porta GP07

// ââ Saída de Alta Corrente ââ
#define OUT1          5    // Saída de alta corrente (ex. pirotécnico / relé)

// ââ LEDs da Barra de Bateria ââ
#define BL1           4    // LED de Bateria 1 (mais baixo)
#define BL2           14   // LED de Bateria 2
#define BL3           15   // LED de Bateria 3
#define BL4           18   // LED de Bateria 4
#define BL5           19   // LED de Bateria 5 (mais alto)

// ââ Indicadores ââ
#define DISK          8    // LED de atividade de disco

// ââ Analógico / Detecção ââ
#define BATIN         0    // Voltagem da bateria (divisor 1:1)
#define USBDETECT     1    // Detecção de energia USB (ALTO = USB presente)
#define BUTTON        9    // BOTÃO na placa, botão de inicialização mas pode ser usado