lsm9ds1 — IMU pe 9 axe LSM9DS1¶
Driver pentru modulul inerțial ST LSM9DS1 iNEMO prin I2C. LSM9DS1 combină un accelerometru pe 3 axe, un giroscop pe 3 axe și un magnetometru pe 3 axe într-un singur pachet; accelerometrul și giroscopul partajează o adresă I2C, în timp ce magnetometrul răspunde la o a doua adresă. Acest driver activează, de asemenea, FIFO-ul giroscop/accelerometru de adâncime 16 de pe cip, astfel încât cele mai recente eșantioane să poată fi golite eficient prin iter_accel_gyro().
Exemplu:
import time
from machine import Pin, I2C
from lsm9ds1 import LSM9DS1
imu = LSM9DS1(I2C(1, scl=Pin("P15"), sda=Pin("P14")))
while True:
print("Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.accel()))
print("Magnetometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.magnet()))
print("Gyroscope: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.gyro()))
time.sleep_ms(100)
Clase¶
- class lsm9ds1.LSM9DS1(bus: machine.I2C, address_imu: int = 0x6B, address_magnet: int = 0x1E, gyro_odr: float = 952, gyro_scale: int = 245, accel_odr: float = 952, accel_scale: int = 4, magnet_odr: int = 80, magnet_scale: int = 4)¶
Construiește o instanță
LSM9DS1, verifică registrele WHO_AM_I ale ambelor sub-dispozitive, configurează toți cei trei senzori și activează FIFO-ul accelerometru/giroscop în modul continuu.busO magistrală
machine.I2Cconfigurată la care este atașat senzorul.address_imuAdresa I2C pe 7 biți a sub-dispozitivului accelerometru/giroscop. Valoarea implicită este
0x6B.address_magnetAdresa I2C pe 7 biți a sub-dispozitivului magnetometru. Valoarea implicită este
0x1E.gyro_odrRata de ieșire a datelor giroscopului în Hz. Trebuie să fie una dintre
0(oprit),14.9,59.5,119,238,476sau952.gyro_scaleDomeniul la scară completă al giroscopului în grade pe secundă. Trebuie să fie una dintre
245,500sau2000.accel_odrRata de ieșire a datelor accelerometrului în Hz. Același set de valori ca
gyro_odr.accel_scaleDomeniul la scară completă al accelerometrului în g. Trebuie să fie una dintre
2,4,8sau16.magnet_odrRata de ieșire a datelor magnetometrului în Hz. Trebuie să fie una dintre
0.625,1.25,2.5,5,10,20,40sau80.magnet_scaleDomeniul la scară completă al magnetometrului în gauss. Trebuie să fie una dintre
4,8,12sau16.
- calibrate_magnet(offset: tuple[float, float, float]) None¶
Scrie un vector de compensare hard-iron în registrele
OFFSET_REG_*_Male magnetometrului. Compensarea este dată în aceleași unități pe care le returneazămagnet()(gauss); fiecare componentă este convertită în LSB-uri brute folosind scara configurată a magnetometrului înainte de a fi scrisă.
- gyro_id() bytes¶
Returnează valoarea pe un octet a registrului
WHO_AM_Ial sub-dispozitivului accelerometru/giroscop.
- magent_id() bytes¶
Returnează valoarea pe un octet a registrului
WHO_AM_Ial sub-dispozitivului magnetometru.
- accel() tuple[float, float, float]¶
Returnează vectorul de accelerație
(x, y, z)în unități de gravitație standard (1 g = 9,81 m/s²).
- iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]¶
Generator care produce tupluri
(gyro, accel)pentru fiecare eșantion disponibil în prezent în FIFO și se oprește odată ce FIFO-ul este gol. Fiecare vector de componente are aceleași unități cagyro()și, respectiv,accel().