2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
MMA8452Q to inteligentny, energooszczędny, trójosiowy, pojemnościowy akcelerometr z 12-bitową rozdzielczością. Elastyczne opcje programowalne przez użytkownika są dostarczane za pomocą wbudowanych funkcji w akcelerometrze, konfigurowalnych do dwóch styków przerwań. Posiada wybierane przez użytkownika pełne skale ±2g/±4g/±8g z filtrowanymi danymi filtra górnoprzepustowego, a także niefiltrowanymi danymi dostępnymi w czasie rzeczywistym. Oto jego demonstracja z Arduino nano.
Krok 1: Czego potrzebujesz.
1. Arduino Nano
2. MMA8452Q
3. Kabel I²C
4. Tarcza I²C dla Arduino Nano
Krok 2: Połączenie:
Weź nakładkę I2C dla Arduino Nano i delikatnie wepchnij ją na piny Nano.
Następnie podłącz jeden koniec kabla I2C do czujnika MMA8452Q, a drugi koniec do ekranu I2C.
Połączenia prezentuje powyższy obrazek.
Krok 3: Kod:
Kod arduino dla MMMA8452Q można pobrać z naszego repozytorium github - DCUBE Store.
Tutaj jest link.
Dołączamy bibliotekę Wire.h ułatwiającą komunikację I2c czujnika z płytką Arduino.
Możesz również skopiować kod stąd, jest on podany w następujący sposób:
// Rozprowadzane z wolną licencją.
// Używaj go w dowolny sposób, z zyskiem lub za darmo, pod warunkiem, że pasuje do licencji powiązanych z nim dzieł.
// MMA8452Q
// Ten kod jest przeznaczony do pracy z minimodułem MMA8452Q_I2CS I2C.
#włączać
// Adres MMA8452Q I2C to 0x1C(28)
#define Addr 0x1C
pusta konfiguracja()
{
// Zainicjuj komunikację I2C jako MASTER
Wire.początek();
// Zainicjuj komunikację szeregową, ustaw szybkość transmisji = 9600
Serial.początek(9600);
// Rozpocznij transmisję I2C
Wire.beginTransmisja(Addr);
// Wybierz rejestr kontrolny
Wire.write(0x2A);
// Tryb czuwania
Wire.write(0x00);
// Zatrzymaj transmisję I2C
Wire.endTransmission();
// Rozpocznij transmisję I2C
Wire.beginTransmisja(Addr);
// Wybierz rejestr kontrolny
Wire.write(0x2A);
// Tryb aktywny
Wire.write(0x01);
// Zatrzymaj transmisję I2C
Wire.endTransmission();
// Rozpocznij transmisję I2C
Wire.beginTransmisja(Addr);
// Wybierz rejestr kontrolny
Wire.write(0x0E);
// Ustaw zakres na +/- 2g
Wire.write(0x00);
// Zatrzymaj transmisję I2C
Wire.endTransmission();
opóźnienie(300);
}
pusta pętla()
{
dane int bez znaku[7];
// Żądaj 7 bajtów danych
Wire.requestFrom(Addr, 7);
// Odczytaj 7 bajtów danych
// stan, xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb
if(Przewód.dostępny() == 7)
{
dane[0] = Przewód.odczyt();
dane[1] = Drut.odczyt();
dane[2] = Przewód.odczyt();
dane[3] = Przewód.odczyt();
dane[4] = Przewód.odczyt();
dane[5] = Wire.read();
dane[6] = Przewód.odczyt();
}
// Konwertuj dane na 12-bitowe
int xAccl = ((dane[1] * 256) + dane[2]) / 16;
jeśli (xAccl > 2047)
{
xAccl -= 4096;
}
int yAccl = ((dane[3] * 256) + dane[4]) / 16;
jeśli (yAccl > 2047)
{
yAccl -= 4096;
}
int zAccl = ((dane[5] * 256) + dane[6]) / 16;
jeśli (zAccl > 2047)
{
zAccl -= 4096;
}
// Dane wyjściowe do monitora szeregowego
Serial.print("Przyspieszenie w osi X: ");
Serial.println(xAccl);
Serial.print("Przyspieszenie w osi Y: ");
Serial.println(yAccl);
Serial.print("Przyspieszenie w osi Z: ");
Serial.println(zAccl);
opóźnienie (500);
}
Krok 4: Aplikacje:
MMA8452Q ma różne aplikacje, w tym aplikacje E-kompas, wykrywanie orientacji statycznej, która obejmuje orientację pionową/poziomą, góra/dół, lewo/prawo, tył/przód, notebook, czytnik e-booków oraz wykrywanie upadku i upadku laptopa, w czasie rzeczywistym wykrywanie orientacji, w tym wirtualna rzeczywistość i informacje zwrotne o pozycji użytkownika w grach 3D, analiza aktywności w czasie rzeczywistym, taka jak liczenie kroków krokomierza, wykrywanie swobodnego spadania na dysk twardy, kopia zapasowa GPS z funkcją martwego liczenia i wiele więcej.