КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Тестирование модуля IMU-10 на базе ICM20948 и BMP280

Обнаружение проблем:

  • ICM20948: FAIL - проблема с подключением или питанием IMU
  • BMP280: FAIL - конфликт адресов I2C или неисправность датчика
  • INT pin: FAIL - провод отключен или обрыв соединения
  • FSINC pin: FAIL - провод отключен или обрыв соединения

Преимущества

  • Быстрота: тест выполняется за 0.2-0.5 секунды
  • Надежность: точное определение подключения проводов
  • Простота: не требует дополнительных компонентов
  • Информативность: подробный вывод для диагностики

Схема подключения:

Модуль IMUArduino PinНазначение
VCC3.3VПитание 3.3V
GNDGNDЗемля
SDAA4 (SDA)I2C данные
SCLA5 (SCL)I2C тактовая
INTD10Прерывание
FSINCD12Синхронизация

Использование в проектах

После успешного тестирования модуль готов к использованию. Для работы с данными датчиков рекомендуются библиотеки:

  • Adafruit_ICM20948 для ICM20948
  • Adafruit_BMP280 для BMP280

Программа является идеальным инструментом для первоначальной проверки модуля перед использованием в сложных проектах.

#include <wire.h>

void setup() {
  Serial.begin(9600);
  
  // Настройка пинов с подтяжкой к VCC
  pinMode(13, OUTPUT);
  pinMode(10, INPUT_PULLUP);  // INT с подтяжкой
  pinMode(12, INPUT_PULLUP);  // FSINC с подтяжкой
  
  digitalWrite(13, LOW);
  
  Wire.begin();
  
  Serial.println("=== ТЕСТ С ПРОВЕРКОЙ ПОДКЛЮЧЕНИЯ ПРОВОДОВ ===");
  
  bool allTestsPassed = true;
  
  // Тест датчиков
  allTestsPassed &= testSensor(0x68, 0x00, 0xEA, "ICM20948");
  allTestsPassed &= testSensor(0x77, 0xD0, 0x58, "BMP280");
  
  // Тест пинов с проверкой подключения проводов
  allTestsPassed &= testPinWithWireCheck(10, "INT");
  allTestsPassed &= testPinWithWireCheck(12, "FSINC");
  
  // Итоговый результат
  Serial.println("========================");
  if (allTestsPassed) {
    Serial.println("✅ ALL TESTS PASSED!");
    digitalWrite(13, HIGH);
  } else {
    Serial.println("❌ SOME TESTS FAILED!");
  }
  
  // Дополнительная информация о пинах
  Serial.println("\n=== ТЕКУЩЕЕ СОСТОЯНИЕ ПИНОВ ===");
  Serial.print("INT (D10): "); Serial.println(digitalRead(10));
  Serial.print("FSINC (D12): "); Serial.println(digitalRead(12));
  Serial.println("0 = подключен, 1 = отключен");
}

void loop() {}

bool testSensor(uint8_t addr, uint8_t reg, uint8_t expected, const char* name) {
  Serial.print(name); Serial.print(": ");
  
  Wire.beginTransmission(addr);
  Wire.write(reg);
  if (Wire.endTransmission() != 0) {
    Serial.println("FAIL");
    return false;
  }
  
  Wire.requestFrom(addr, 1);
  if (!Wire.available()) {
    Serial.println("FAIL");
    return false;
  }
  
  bool result = (Wire.read() == expected);
  Serial.println(result ? "OK" : "FAIL");
  return result;
}

bool testPinWithWireCheck(int pin, const char* name) {
  Serial.print(name); Serial.print(" pin: ");
  
  // При INPUT_PULLUP отключенный провод = HIGH
  // Подключенный провод = LOW (активный низкий уровень)
  int state = digitalRead(pin);
  
  if (state == LOW) {
    Serial.println("OK (провод подключен)");
    return true;
  } else {
    Serial.println("FAIL (провод отключен!)");
    return false;
  }
}</wire.h>

Итоговые результаты:
✅ ICM20948: исправен
✅ BMP280: исправен
✅ INT пин (D10): подключен, активный низкий уровень
✅ FSINC пин (D12): подключен, активный низкий уровень
✅ Функции прерываний: работают
✅ Светодиод на D13: загорится при успехе




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями