Raspberry Pi - Gyroskop
V predchádzajúcej lekcii, Raspberry Pi - Pripojenie kamery , sme si k Raspberry Pi pripojili kameru.
V tejto lekcii Raspberry Pri tutoriále si k Raspberry pripojíme gyroskop. Napíšeme si k nemu jednoduchý kód, ktorý bude vypisovať polohu gyroskopu a vysvetlíme si, ako gyroskop vlastne funguje.
Schéma zapojenia bola vytvorená pomocou Fritzing.
Potrebné súčiastky
Na úspešné zapojenie budeme potrebovať:
- Raspberry Pi,
- gyroskop mpu-6050,
- najlepšie nepájivé pole a niekoľko drôtov, prípadne iba drôty.
MEMS (mikroelektromechanické systémy) sú systémy s mikro rozmermi, v
ktorých sú súčiastky integrované na jednom čipe. Medzi tieto súčiastky
patrí práve napríklad akcelerometer a
gyroskop. Akcelerometer je zariadenie, ktoré sa používa na
detekciu negravitačného pohybu. Gyroskopický senzor je
naopak zariadenie na detekciu pohybu gravitačného. Tieto dva
senzory sa teda navzájom dopĺňajú. Náš trojosý gyroskop obsahuje ako
funkcie gyroskopu pomocou čipu MPU6050v
, tak aj funkcie
akcelerometra.
Gyroskop
Gyroskopický senzor pracuje na základe uhlovej rýchlosti a hybnosti. V
snímači je rotor (disk), ktorý je nastavený tak, aby sa mohol otáčať. Os,
v ktorej sa otáča, sa nazýva gimbal. V senzoroch gyroskopu
sú dva závesy. Jeden gimbal je naukladaný na druhom. Vďaka tomu má rotor
voľnosť otáčania do všetkých troch osí x,y
a
z
.
Akcelerometer
Akcelerometer pracuje pomocou elektromechanického senzora, ktorý je
navrhnutý na meranie statického alebo dynamického zrýchlenia. Sila vyvolaná
vibráciou alebo zmenou pohybu (zrýchlením) spôsobí, že hmota vo vnútri
akcelerometra stlačí špeciálny materiál, ktorý vytvorí elektrický
náboj. Ten je úmerný pôsobiacej sile. A pretože hmotnosť súčiastky je
konštantná, náboj je potom tiež úmerný zrýchleniu. To je princíp,
ktorým akcelerometer meria zrýchlenie. Rovnako ako gyroskop meria
akcelerometer v troch osiach x,y
z
. Gyroskop teda
meria rotáciu telesa, zatiaľ čo akcelerometer jeho priamy pohyb.
Zapojenie gyroskopu
Pri zapojení gyroskopu je veľmi dôležité poznať zbernicu i2c. Pre detailný popis sa môžeme pozrieť na túto lekciu.
Povolenie I2C
Prvá vec, ktorú musíme urobiť v Raspberry Pi, je povoliť použitie i2c. V defaultnom nastavení je jej použitie zakázané. Do terminálu nášho Raspberry Pi napíšeme tento príkaz:
sudo raspi-config
Ukáže sa nám okno, ktoré je možné ovládať šípkami na klávesnici a
klávesom enter. Vyberieme interfacing options -> I2C
.
Nastavenie sa nás spýta, tu chceme povoliť I2C. Potvrdíme a Raspberry Pi
potom reštartujeme.
Než budeme pokračovať, skontrolujeme si ešte, na akej adrese nám náš gyroskop beží. To docielime príkazom:
i2cdetect -y 1
Príkaz je jednoduchý – i2cdetect
je program, ktorý skenuje
zbernice i2c. Parameter -y
preskakuje čakanie na súhlas
používateľa. Číslo 1
je potom označenie pre číslo zbernice,
ktorú má program scanovať.
Program väčšinou vypíše jedno číslo, ktoré reprezentuje adresu
zbernice pinu i2c. S naším zapojením by to malo byť číslo 68. Zapisuje sa
ako 0x68
:
Zapojenie
Zapojenie gyroskopu je jednoduché. Jediné, čo nás na ňom zaujíma, sú
porty SLA,SLC,VCC
a GND
. GND
zapojíme na
Raspberry Pi do GND
a VCC
do 5V. SDA
potom pripojíme k GPIO portu 2 (SDA port) a
SCL pripojíme k GPIO portu 3 (SCL port). Keď
potom Raspberry Pi spustíme, mala by nám na gyroskope svietiť červená
dióda:
Programová časť
Náš program bude vypisovať dáta dáta získané z gyroskopu. Ako už vieme, gyroskop nám dáva dáta ohľadom jeho otáčania v troch osiach.
Inštalácia knižníc
K práci s kódom budeme potrebovať knižnicu smbus
, ktorá
zariaďuje správnu funkciu i2c
pinov. Nainštalujeme ju pomocou
príkazu:
sudo apt install python3-smbus
Ďalšou nutnou knižnicou bude mpu6050
. Táto knižnica
umožňuje ovládanie nášho gyroskopu s čipom mpu6050:
pip install mpu6050-raspberrypi
Program na detekciu osí
Kód pre obsluhu gyroskopu potom bude vyzerať takto:
from mpu6050 import mpu6050 import time mpu = mpu6050(0X68) while True: gyroskop_data = mpu.get_gyro_data() print("Gyroskop X : "+str(gyroskop_data['x'])) print("Gyroskop Y : "+str(gyroskop_data['y'])) print("Gyroskop Z : "+str(gyroskop_data['z'])) print("-------------") time.sleep(1)
V prvých dvoch riadkoch si naimportujeme dve knižnice. Budú to knižnica
mpu6050
, ktorú sme si pred chvíľou nainštalovali, a nám už
známa knižnica time
. Na treťom riadku si uložíme do premene
mpu
adresu, na ktorej i2c
počúva náš gyroskop. Tú
sme už predtým identifikovali ako 0x68. Ďalej si vytvoríme nekonečnú
slučku while
. To preto, že dáta z gyroskopu chceme načítať a
vypisovať nepretržite. Výpis by sa bez slučky logicky vykonal iba raz a
potom by sa náš program ukončil. Vnútri slučky si potom dáta, ktoré nám
gyroskop posiela, uložíme do premene gyroskop_data
. Príkaz
mpu.get_gyro_data
používa premenu mpu
s adresou
gyroskopu. Z nej si potom berie všetky informácie, ktoré gyroskop posiela.
Potom si pomocou príkazu print
vypíšeme údaje z jednotlivých
osí. Do príkazu print
vložíme nami požadovaný text, napr.
"gyroskop os X:". Pomocou +
potom pripojíme hodnotu zodpovedajúcu
osi z premennej gyroskop_data
, ktorú prevedieme na text. Zo
všetkých dát, ktoré gyroskop posiela, týmto vyfiltrujeme iba tie údaje,
ktoré chceme vidieť. Nakoniec si nastavíme príkaz time.sleep
na
jednu sekundu, aby bol medzi jednotlivými výpismi nejaký časový
interval.
Premena gyroskop_data
ukladá dáta ako list. Preto
môžeme vyššie použitým spôsobom jednoducho oddeliť časti dát a
vypísať ich zvlášť.
Vo výpise potom vidíme, ako sa pri pohybe gyroskopu menia jednotlivé hodnoty pri každej z troch súradníc:
Verím, že sa vám pripojenie a nakódovanie gyroskopu podarilo. Svoje postrehy a prípadné otázky môžete zanechať v diskusii pod článkom 🙂
V ďalšej lekcii, Raspberry Pi - Zavlažovač rastlín , si k Raspberry Pi pripojíme vodné čerpadlo, senzor vlhkosti pôdy a reproduktor.