Lekce 17 - Raspberry Pi - Gyroskop
V předchozí lekci, Raspberry Pi - Připojení kamery, jsme si k Raspberry Pi připojili kameru.
V této lekci Raspberry Pi tutoriálu si k Raspberry připojíme gyroskop. Napíšeme si k němu jednoduchý kód, který bude vypisovat polohu gyroskopu a vysvětlíme si, jak gyroskop vlastně funguje.
Schéma zapojení bylo vytvořené pomocí Fritzing.
Potřebné součástky
K úspěšnému zapojení budeme potřebovat:
- Raspberry Pi,
- gyroskop mpu-6050,
- nejlépe nepájivé pole a několik drátů, případně pouze dráty.
Co je gyroskop, akcelerometr a jak fungují?
MEMS (mikroelektromechanické systémy) jsou systémy s mikro rozměry, ve
kterých jsou součástky integrovány na jednom čipu. Mezi tyto součástky
patří právě například akcelerometr a
gyroskop. Akcelerometr je zařízení, které se používá k
detekci negravitačního pohybu. Gyroskopický senzor je naopak
zařízení k detekci pohybu gravitačního. Tyto dva senzory
se tedy navzájem doplňují. Náš tříosý gyroskop obsahuje jak funkce
gyroskopu pomocí čipu MPU6050v
, tak i funkce akcelerometru.
Gyroskop
Gyroskopický senzor pracuje na základě úhlové rychlosti a hybnosti. Ve
snímači je rotor (disk), který je nastaven tak, aby se mohl otáčet. Osa, ve
které se otáčí, se nazývá gimbal. V senzorech gyroskopu
jsou dva závěsy. Jeden gimbal je naskládaný na druhém. Díky tomu má rotor
volnost otáčení do všech tří os x,y
a z
.
Akcelerometr
Akcelerometr pracuje pomocí elektromechanického senzoru, který je navržen
k měření statického nebo dynamického zrychlení. Síla vyvolaná vibrací
nebo změnou pohybu (zrychlením) způsobí, že hmota uvnitř akcelerometru
stlačí speciální materiál, který vytvoří elektrický náboj. Ten je
úměrný působící síle. A protože hmotnost součástky je konstantní,
náboj je pak také úměrný zrychlení. To je princip, jímž akcelerometr
měří zrychlení. Stejně jako gyroskop měří akcelerometr ve třech osách,
a to v x,y
a z
. Gyroskop tedy měří rotaci tělesa,
zatímco akcelerometr jeho přímý pohyb.
Zapojení gyroskopu
U zapojení gyroskopu je velmi důležité znát sběrnici i2c. Pro detainí popis se můžeme podívat na tuto lekci.
Povolení I2C
První věc, kterou musíme udělat v Raspberry Pi, je povolit použití i2c. V defaultním nastavení je její použití zakázáno. Do terminálu našeho Raspberry Pi napíšeme tento příkaz:
sudo raspi-config
Ukáže se nám okno, které lze ovládat šipkami na klávesnici a klávesou
enter. Vybereme interfacing options -> I2C
. Nastavení se nás
zeptá, zde chceme povolit I2C. Potvrdíme a Raspberry Pi poté
restartujeme.
Než budeme pokračovat, zkontrolujeme si ještě, na jaké adrese nám náš gyroskop běží. Toho docílíme příkazem:
i2cdetect -y 1
Příkaz je jednoduchý - i2cdetect
je program, který skenuje
sběrnice i2c. Parametr -y
přeskakuje čekání na souhlas
uživatele. Číslo 1
je pak označení pro číslo sběrnice,
kterou má program scanovat.
Program většinou vypíše jedno číslo, které reprezentuje adresu
sběrnice pinu i2c. S naším zapojením by to mělo být číslo 68. Zapisuje
se jako 0x68
:

Zapojení
Zapojení gyroskopu je jednoduché. Jediné, co nás na něm zajímá, jsou
porty SLA,SLC,VCC
a GND
. GND
zapojíme na
Raspberry Pi do GND
a VCC
do 5V. SDA
pak připojíme k GPIO portu 2 (SDA port) a
SCL připojíme k GPIO portu 3 (SCL port).
Když poté Raspberry Pi spustíme, měla by nám na gyroskopu svítit červená
dioda:

Programová část
Náš program bude vypisovat data data získaná z gyroskopu. Jak již víme, gyroskop nám dává data ohledně jeho otáčení ve třech osách.
Instalace knihoven
K práci s kódem budeme potřebovat knihovnu smbus
, která
zařizuje správnou funkci i2c
pinů. Nainstalujeme ji pomocí
příkazu:
sudo apt install python3-smbus
Další nutnou knihovnou bude mpu6050
. Tato knihovna umožňuje
ovládání našeho gyroskopu s čipem mpu6050:
pip install mpu6050-raspberrypi
Program na detekci os
Kód pro obsluhu gyroskopu pak bude vypadat 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 prvních dvou řádcích si naimportujeme dvě knihovny. Bude to knihovna
mpu6050
, kterou jsme si před chvílí nainstalovali, a nám už
známá knihovna time
. Na třetím řádku si uložíme do
proměné mpu
adresu, na níž i2c
poslouchá náš
gyroskop. Tu jsme již dříve identifikovali jako 0x68. Dále si vytvoříme
nekonečnou smyčku while
. To proto, že data z gyroskopu chceme
načítat a vypisovat nepřetržitě. Výpis by se bez smyčky logicky provedl
pouze jednou a pak by se náš program ukončil. Uvnitř smyčky si pak data,
která nám gyroskop posílá, uložíme do proměné
gyroskop_data
. Příkaz mpu.get_gyro_data
používá
proměnou mpu
s adresou gyroskopu. Z ní si pak bere všechny
informace, které gyroskop posílá. Poté si pomocí příkazu
print
vypíšeme údaje z jednotlivých os. Do příkazu
print
vložíme námi požadovaný text, např. "gyroskop osa X :".
Pomocí +
pak připojíme hodnotu odpovídající osy z proměnné
gyroskop_data
, kterou převedeme na text. Ze všech dat, která
gyroskop posílá, tímto vyfiltrujeme pouze ty údaje, které chceme vidět.
Nakonec si nastavíme příkaz time.sleep
na jednu sekundu, aby byl
mezi jednotlivými výpisy nějaký časový interval.
Proměná gyroskop_data
ukládá data jako list.
Proto můžeme výše použitým způsobem jednoduše oddělit části dat a
vypsat je zvlášť.
Ve výpisu potom vidíme, jak se při pohybu gyroskopu mění jednotlivé hodnoty u každé ze tří souřadnic:

Věřím, že se vám připojení a nakódování gyroskopu podařilo. Své postřehy a případné dotazy můžete zanechat v diskusi pod článkem 🙂
V další lekci, Raspberry Pi - Zavlažovač rostlin, si k Raspberry Pi připojíme vodní čerpadlo, senzor vlhkosti půdy a reproduktor.