Hackster Inc.
Z merilnikom pospeška in žiroskopom PSOC™ 6 lahko enostavno zaznavate gibanje in orientacijo!
Ste se kdaj spraševali, kako naši telefoni vedo, kdaj jih obrnemo, ali kako dron ohranja ravnotežje med letom? Predstavljajte si, da bi lahko našim projektom dali enako sposobnost zaznavanja gibanja – da bi se odzivali na nagibe, tresljaje in vrtenje, tako kot najpametnejše naprave okoli nas.
S kompletom PSOC™ 6 AI Kit in njegovim vgrajenim merilnikom pospeška in žiroskopom lahko to tudi storimo. Kot radovedni ustvarjalci vedno iščemo načine, kako premostiti vrzel med kodo in resničnim svetom. Zdaj imamo idealno igrišče, na katerem lahko raziskujemo, kako deluje zaznavanje gibanja na napredni strojni opremi – brez zapletenega programiranja.
Ta vsebina je samo za naročnike
V tem prototipu se bomo družno lotili branja in vizualizacije gibanja v realnem času z uporabo merilnika pospeška in žiroskopa neposredno na naši plošči PSOC™ 6, vse to z MicroPython.



Strojna oprema
Za to potrebujemo le naš PSOC™ 6 AI Kit, priključen na napajanje, saj že vsebuje senzor gibanja BMI270 s 6-osnim merilnikom pospeška in žiroskopom 🙂
Programska oprema
Za programsko opremo najprej naložimo MicroPython na naš PSOC™ AI komplet, kot je bilo že prej pojasnjeno tukaj [1], nato pa uvozimo potrebne knjižnice:
import time
from machine import I2C
import bmi270
Za BMI270 morate iti v Orodja > Upravljanje paketov > iskanje bmi270 in nato klikniti namestitev, kot je prikazano na spodnjih sliki 2.
Nato vzpostavimo povezavo I2C z uporabo pravilnih pinov za PSOC™ AI Kit, ki jih najdemo v dokumentaciji tukaj [2], in nato ustvarimo primer zaznavanja senzorja BMI270.
i2c = I2C(scl=’P0_2′, sda=’P0_3′) # Correct I2C pins for PSOC6 AI Kit
bmi = bmi270.BMI270(i2c)
Sedaj nastavimo neskončno zanko (while True:) za neprekinjeno branje in prikazovanje podatkov o pospešku v realnem času iz senzorja:
whileTrue:
accx, accy, accz = bmi.accel()
gyrox, gyroy, gyroz = bmi.gyro()
print(»-« * 40)
print(»ACCELERATION (m/s²) :«)
print(f« X: {accx:6.2f} Y: {accy:6.2f} Z: {accz:6.2f}«)
print(»GYROSCOPE (°/s) :«)
print(f« X: {gyrox:6.2f} Y: {gyroy:6.2f} Z: {gyroz:6.2f}«)
print(»-« * 40)
print()
time.sleep(0.5)
bmi.accel(): Prebere linearen pospešek iz senzorja na vseh treh oseh (X, Y, Z), izmerjeno v metrih na sekundo na kvadrat (m/s²). To nam pove, kako hitro se naprava premika v ravni črti ali če je nagnjena.
bmi.gyro(): Prebere hitrost vrtenja (kako hitro se naprava vrti) okoli vsake osi, izraženo v stopinjah na sekundo (°/s). To je koristno za zaznavanje vrtenja, zasukov ali hitrih gibov plošče.
Da bi bili podatki senzorja lažje berljivi, združimo vrednosti pospeška in vrtenja v lepo oblikovanem bloku.
V serijskem monitorju vidimo oba sklopa podatkov senzorja združena. Ko ploščo nagnete, stresete ali zavrtite, lahko takoj opazite, katere vrednosti se spremenijo in za koliko.


Če želite vizualizirati izhod z risalnikom, lahko kodo prilagodimo na naslednje:
import time
from machine import I2C
import bmi270
i2c = I2C(scl=’P0_2′, sda=’P0_3′)
bmi = bmi270.BMI270(i2c)
Plotter configuration
Options: ‘acc’ -> plot acceleration XYZ
‘gyro’ -> plot gyroscope XYZ
‘both’ -> plot acceleration XYZ
and gyroscope XYZ (6 series)
plot_mode = ‘both’
sample_hz = 25
_sleep_s = 1.0 / sample_hz
time.sleep(0.2)
try:
whileTrue:
ax, ay, az = bmi.accel()
gx, gy, gz = bmi.gyro()
if plot_mode == ‘acc’:
print(f«{ax:.3f} {ay:.3f} {az:.3f}«)
elif plot_mode == ‘gyro’:
print(f«{gx:.3f} {gy:.3f} {gz:.3f}«)
else: # ‘both’
print(f«{ax:.3f} {ay:.3f} {az:.3f} {gx:.3f} {gy:.3f} {gz:.3f}«)
time.sleep(_sleep_s)
except KeyboardInterrupt:
pass bmi270.BMI270(i2c)
Plotter configuration
Options: ‘acc’ -> plot acceleration XYZ
‘gyro’ -> plot gyroscope XYZ
‘both’ -> plot acceleration XYZ and gyroscope XYZ (6 series)
plot_mode = ‘both’
sample_hz = 25
_sleep_s = 1.0 / sample_hz
time.sleep(0.2)
try:
whileTrue:
ax, ay, az = bmi.accel()
gx, gy, gz = bmi.gyro()
if plot_mode == ‘acc’:
print(f«{ax:.3f} {ay:.3f} {az:.3f}«)
elif plot_mode == ‘gyro’:
print(f«{gx:.3f} {gy:.3f} {gz:.3f}«)
else: # ‘both’
print(f«{ax:.3f} {ay:.3f} {az:.3f} {gx:.3f} {gy:.3f} {gz:.3f}«)
time.sleep(_sleep_s)
except KeyboardInterrupt:
pass
Nato morate odpreti risalnik v Thonnyju (view > označite Plotter).
Po izbiri v kodi, kaj želite natančno prikazati (acc/gyro/oba), lahko dobite rezultat, podoben temu kot kaže slika 5.
Zaključek
V zaključku je ta članek pokazal, kako uporabiti PSOC™ 6 AI Kit in MicroPython za branje in vizualizacijo podatkov o gibanju v realnem času iz merilnika pospeška in žiroskopa. Upamo, da vas je to navdihnilo, da raziščete možnosti zaznavanja gibanja v svojih projektih, in ostajajte na tekočem.
Povzeto po:
https://www.hackster.io/Infineon_Team/accelerometer-gyroscope-with-psoc-6-and-micropython-757eb3
Viri:
1: https://www.hackster.io/Infineon_Team/micropython-on-psoc-fcf1d0
