Python Forum
Thread Rating:
  • 1 Vote(s) - 4 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Help with gyro code
#1
Hello everyone. I am new to coding and I am working on a personal project at home. I have built an led matrix and I am using a Raspberry pi 3 with an MPU6050 gyro/accelerometer. My goal is to light up individual leds based on readings from both the gyro/accel. I have worked out the accelerometer part of this, however the gyro returns to zero everyone it takes a reading since it only measures angular velocity. Is there a way to add the new values it takes to each preceding value and use that sum for my ranges to activate gpio pins? Or if anyone has any other ideas I would really appreciate it. Here is my code: 
# Import the MPU6050 class from the MPU6050.py file
from MPU6050 import MPU6050
from time import sleep
import RPi.GPIO as gpio
import math

# Create a new instance of the MPU6050 class
sensor = MPU6050(0x68)

#Prepare gpio pin use
gpio.setwarnings(False)
gpio.setmode(gpio.BOARD)

#Setup gpio pin outputs for accelerometer
gpio.setup(16, gpio.OUT)
gpio.setup(18, gpio.OUT)
gpio.setup(22, gpio.OUT)
gpio.setup(24, gpio.OUT)
gpio.setup(26, gpio.OUT)
gpio.setup(32, gpio.OUT)
gpio.setup(36, gpio.OUT)
gpio.setup(38, gpio.OUT)
gpio.setup(40, gpio.OUT)

#Setup gpio pin outputs for gyro
gpio.setup(15, gpio.OUT)
gpio.setup(19, gpio.OUT)
gpio.setup(21, gpio.OUT)
gpio.setup(23, gpio.OUT)
gpio.setup(29, gpio.OUT)
gpio.setup(31, gpio.OUT)
gpio.setup(33, gpio.OUT)
gpio.setup(35, gpio.OUT)
gpio.setup(37, gpio.OUT)

#Set accelerometer range values
A = range(0, 1)
B = range(2, 3)
C = range(4, 5)
D = range(6, 7)
E = range(8, 9)
F = range(10, 11)
G = range(12, 13)
H = range(14, 15)
I = range(16, 17)

#Set gyro range values
J = range(176, 225)
K = range(126, 175)
L = range(76, 125)
M = range(26, 75)
N = range(-25, 25)
P = range(-75, -26)
R = range(-125, -76)
S = range(-175, -126)
T = range(-225, -176)

while True:
    accel_data = sensor.get_accel_data()
    gyro_data = sensor.get_gyro_data()
    y = gyro_data['y']
    x = accel_data['x']

    print( "gyro" )
    print("y: " + str(int(gyro_data['y'])))
    print( "------------------------- ")
    print( "accelerometer" )
    print("x: " + str(int(accel_data['x'])))
    print( "---------------------------------------------------------------" )
    if x in A:
        gpio.output(16, True)
        gpio.output(18, False)
        gpio.output(22, False)
        gpio.output(24, False)
        gpio.output(26, False)
        gpio.output(32, False)
        gpio.output(36, False)
        gpio.output(38, False)
        gpio.output(40, False)
    if x in B:
        gpio.output(18, True)
        gpio.output(16, False)
        gpio.output(22, False)
        gpio.output(24, False)
        gpio.output(26, False)
        gpio.output(32, False)
        gpio.output(36, False)
        gpio.output(38, False)
        gpio.output(40, False)
    if x in C:
        gpio.output(22, True)
        gpio.output(18, False)
        gpio.output(16, False)
        gpio.output(24, False)
        gpio.output(26, False)
        gpio.output(32, False)
        gpio.output(36, False)
        gpio.output(38, False)
        gpio.output(40, False)
    if x in D:
        gpio.output(24, True)
        gpio.output(18, False)
        gpio.output(22, False)
        gpio.output(16, False)
        gpio.output(26, False)
        gpio.output(32, False)
        gpio.output(36, False)
        gpio.output(38, False)
        gpio.output(40, False)
    if x in E:
        gpio.output(26, True)
        gpio.output(18, False)
        gpio.output(22, False)
        gpio.output(24, False)
        gpio.output(16, False)
        gpio.output(32, False)
        gpio.output(36, False)
        gpio.output(38, False)
        gpio.output(40, False)
    if x in F:
        gpio.output(32, True)
        gpio.output(18, False)
        gpio.output(22, False)
        gpio.output(24, False)
        gpio.output(26, False)
        gpio.output(16, False)
        gpio.output(36, False)
        gpio.output(38, False)
        gpio.output(40, False)
    if x in G:
        gpio.output(36, True)
        gpio.output(18, False)
        gpio.output(22, False)
        gpio.output(24, False)
        gpio.output(26, False)
        gpio.output(32, False)
        gpio.output(16, False)
        gpio.output(38, False)
        gpio.output(40, False)
    if x in H:
        gpio.output(38, True)
        gpio.output(18, False)
        gpio.output(22, False)
        gpio.output(24, False)
        gpio.output(26, False)
        gpio.output(32, False)
        gpio.output(36, False)
        gpio.output(16, False)
        gpio.output(40, False)
    if x in I:
        gpio.output(40, True)
        gpio.output(18, False)
        gpio.output(22, False)
        gpio.output(24, False)
        gpio.output(26, False)
        gpio.output(32, False)
        gpio.output(36, False)
        gpio.output(38, False)
        gpio.output(16, False)

    if y in J:
        gpio.output(15, True)
        gpio.output(19, False)
        gpio.output(21, False)
        gpio.output(23, False)
        gpio.output(29, False)
        gpio.output(31, False)
        gpio.output(33, False)
        gpio.output(35, False)
        gpio.output(37, False)
    if y in K:
        gpio.output(19, True)
        gpio.output(15, False)
        gpio.output(21, False)
        gpio.output(23, False)
        gpio.output(29, False)
        gpio.output(31, False)
        gpio.output(33, False)
        gpio.output(35, False)
        gpio.output(37, False)
    if y in L:
        gpio.output(21, True)
        gpio.output(19, False)
        gpio.output(15, False)
        gpio.output(23, False)
        gpio.output(29, False)
        gpio.output(31, False)
        gpio.output(33, False)
        gpio.output(35, False)
        gpio.output(37, False)
    if y in M:
        gpio.output(23, True)
        gpio.output(19, False)
        gpio.output(21, False)
        gpio.output(15, False)
        gpio.output(29, False)
        gpio.output(31, False)
        gpio.output(33, False)
        gpio.output(35, False)
        gpio.output(37, False)
    if y in N:
        gpio.output(29, True)
        gpio.output(19, False)
        gpio.output(21, False)
        gpio.output(23, False)
        gpio.output(15, False)
        gpio.output(31, False)
        gpio.output(33, False)
        gpio.output(35, False)
        gpio.output(37, False)
    if y in P:
        gpio.output(31, True)
        gpio.output(19, False)
        gpio.output(21, False)
        gpio.output(23, False)
        gpio.output(29, False)
        gpio.output(15, False)
        gpio.output(33, False)
        gpio.output(35, False)
        gpio.output(37, False)
    if y in R:
        gpio.output(33, True)
        gpio.output(19, False)
        gpio.output(21, False)
        gpio.output(23, False)
        gpio.output(29, False)
        gpio.output(31, False)
        gpio.output(15, False)
        gpio.output(35, False)
        gpio.output(37, False)
    if y in S:
        gpio.output(35, True)
        gpio.output(19, False)
        gpio.output(21, False)
        gpio.output(23, False)
        gpio.output(29, False)
        gpio.output(31, False)
        gpio.output(33, False)
        gpio.output(15, False)
        gpio.output(37, False)
    if y in T:
        gpio.output(37, True)
        gpio.output(19, False)
        gpio.output(21, False)
        gpio.output(23, False)
        gpio.output(29, False)
        gpio.output(31, False)
        gpio.output(33, False)
        gpio.output(35, False)
        gpio.output(15, False)
        
    gpio.cleanup()
    sleep(.5)
Moderator nilamo: Please use code tags in the future, it makes reading code much easier.
Reply
#2
Is the gyro value always an int?  I think you might not get the output you're looking for if it's a float...
>>> L = range(76, 125)
>>> 78.3 in L
False
Also, you could make your life much easier if you used functions, so you didn't list all of the pins for each possible if block.  And using labels instead of the actual pin number could make it easier to look at.  Something like:
# i'm guessing for labels, and I'm assuming there's more of a difference that just where the led is plugged in
pin_map = {
   "red": 16,
   "blue": 18,
   "green": 22,
#etc
}

def enable_pin(pin):
   for key, val in pin_map.items():
       enabled = key == pin:
       gpio.output(val, enabled)
       
while True:
   gyro_data = sensor.get_gyro_data()
   y = gyro_data["y"]

   if y in L:
       enable_pin("red")
   if y in M:
       enable_pin("green")
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020