Op de electronica markt zijn een groot aantal sensoren beschikbaar die je kunt aansluiten op een Raspberry Pi. Naast de vele displays en temperatuur gerelateerde sensoren is het ook mogelijk om een gyroscoop aan te sluiten.
Een gyroscoop is een rotatiesymmetrische massa die om zijn as kan draaien. Vaak is een gyroscoop, net als een kompas op een schip, in een Cardanische ophanging gevat zodat hij in alle dimensies vrij kan draaien. In zo’n ophanging blijft de as altijd één kant op wijzen. Door deze eigenschap is de gyroscoop praktisch onmisbaar geworden als richtinginstrument in bijvoorbeeld vliegtuigen.
De GY-521 module is een elektronische MPU-6050 gyroscoop voorzien van versnellingsmeters. Hiermee wordt bepaald in welke stand de sensor zich bevindt: staand, liggend of schuin. Door de versnellingsmeters kan naast richting ook bewegingssnelheid, aantal graden en het rotatieaantal berekend worden. Er kan met de sensor drie assen gemeten worden. De sensor zelf kun je via I2C aansluiten op de Raspberry Pi.
Gebruikte componenten
• GY-521 MPU-6050 Module 3 Axis gyro sensors+Accelerometer
• 10x Dupont verbindingskabel (female/female)
Aansluitschema MPU-6050
Raspberry Pi | RPI Pin | HC-SR04 |
---|---|---|
VCC 3.3V | #1 | VCC |
GND | #6 | GND |
SDA | #3 | SDA |
SCL | #5 | SCL |
I2C Activeren
Om de Gyroscoop waarden uit te lezen gebruiken we een speciaal Python script dat de I2C interface aanstuurt. Om toegang te krijgen tot de interface dient deze in de Raspberry Pi geactiveerd te zijn. Je kunt deze activeren met behulp van raspi-config.
sudo raspi-config
Selecteer de optie ‘Advanced Options’ ▸ ‘I2C’ en kies ‘YES’ om de I2C interface te activeren.
Controleren werking I2C
Nadat de module is aangesloten op de I2C bus kun je controleren of deze ook daadwerkelijk wordt gedetecteerd. Dit kun je doen met de I2C tools, heb je deze niet geïnstalleerd dan kun je dit doen met behulp van:
sudo apt-get install i2c-tools
Controleer hierna of de module zichtbaar is:
sudo i2cdetect -y 1
De Gyroscoop module heeft als ID #0x68. Mocht de module niet zichtbaar zijn controleer dan of de kabels goed zijn aangesloten.
Gyroscoop Python script
Een demo script om de werking van de Gyroscoop MPU-6050 te testen:
#!/usr/bin/python | |
# Control MPU-6050 Gyroscoop + Accelerometer from Raspberry Pi | |
# https://raspberrytips.nl/mpu-6050-gyroscoop-raspberry-pi/ | |
import smbus | |
import math | |
# Power management registers | |
power_mgmt_1 = 0x6b | |
power_mgmt_2 = 0x6c | |
def read_byte(adr): | |
return bus.read_byte_data(address, adr) | |
def read_word(adr): | |
high = bus.read_byte_data(address, adr) | |
low = bus.read_byte_data(address, adr+1) | |
val = (high << 8) + low | |
return val | |
def read_word_2c(adr): | |
val = read_word(adr) | |
if (val >= 0x8000): | |
return -((65535 - val) + 1) | |
else: | |
return val | |
def dist(a,b): | |
return math.sqrt((a*a)+(b*b)) | |
def get_y_rotation(x,y,z): | |
radians = math.atan2(x, dist(y,z)) | |
return -math.degrees(radians) | |
def get_x_rotation(x,y,z): | |
radians = math.atan2(y, dist(x,z)) | |
return math.degrees(radians) | |
bus = smbus.SMBus(0) # or bus = smbus.SMBus(1) for Revision 2 boards | |
address = 0x68 # This is the address value read via the i2cdetect command | |
# Now wake the 6050 up as it starts in sleep mode | |
bus.write_byte_data(address, power_mgmt_1, 0) | |
print "gyro data" | |
print "---------" | |
gyro_xout = read_word_2c(0x43) | |
gyro_yout = read_word_2c(0x45) | |
gyro_zout = read_word_2c(0x47) | |
print "gyro_xout: ", gyro_xout, " scaled: ", (gyro_xout / 131) | |
print "gyro_yout: ", gyro_yout, " scaled: ", (gyro_yout / 131) | |
print "gyro_zout: ", gyro_zout, " scaled: ", (gyro_zout / 131) | |
print "accelerometer data" | |
print "------------------" | |
accel_xout = read_word_2c(0x3b) | |
accel_yout = read_word_2c(0x3d) | |
accel_zout = read_word_2c(0x3f) | |
accel_xout_scaled = accel_xout / 16384.0 | |
accel_yout_scaled = accel_yout / 16384.0 | |
accel_zout_scaled = accel_zout / 16384.0 | |
print "accel_xout: ", accel_xout, " scaled: ", accel_xout_scaled | |
print "accel_yout: ", accel_yout, " scaled: ", accel_yout_scaled | |
print "accel_zout: ", accel_zout, " scaled: ", accel_zout_scaled | |
print "x rotation: " , get_x_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled) | |
print "y rotation: " , get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled) |
Kopieer of download het Python script:
wget https://raspberrytips.nl/gyro.py
Activeer het script:
python gyro.py
Hierna verschijnen de gemeten X,Y & Z waarden van de gyroscoop en de accelerometer.
Wil je meer weten over de werking van een Gyroscoop of Accelerometer dan kun je op de Hobbytronics.co.uk website terecht.