Inicie sessão na sua conta Altimeter Cloud
Não tem conta? Criar uma
Enviaremos um link de confirmação por e-mail. Verifique a pasta de spam se não o receber.
Já tem uma conta? Entrar
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.
/* * 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