import sys import time import RPi.GPIO as GPIO import smbus import math
mode=GPIO.getmode() print(mode) #GPIO.cleanup() print("Start") Forward1=38 Backward1=37 Forward2=36 Backward2=35 sleeptime=0.1
Power management registers
power_mgmt_1 = 0x6b power_mgmt_2 = 0x6c
bus = smbus.SMBus(1) # or bus = smbus.SMBus(1) for Revision 2 boards address = 0x68 # This is the address value read via the i2cdetect command
#motor pins initialization GPIO.setmode(GPIO.BOARD) GPIO.setup(Forward1, GPIO.OUT) GPIO.setup(Backward1, GPIO.OUT) GPIO.setup(Forward2, GPIO.OUT) GPIO.setup(Backward2, GPIO.OUT)
#motor forward def forward(x): GPIO.output(Forward1, GPIO.HIGH) GPIO.output(Forward2, GPIO.HIGH) print("Moving Forward") time.sleep(x) GPIO.output(Forward1, GPIO.LOW) GPIO.output(Forward2, GPIO.LOW)
#motor reverse def reverse(x): GPIO.output(Backward1, GPIO.HIGH) GPIO.output(Backward2, GPIO.HIGH) print("Moving Backward") time.sleep(x) GPIO.output(Backward1, GPIO.LOW) GPIO.output(Backward2, GPIO.LOW)
mpu6050 read
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((aa)+(bb))
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)
def get_direction():
import sys
import time
import RPi.GPIO as GPIO
import smbus
import math
mode=GPIO.getmode()
print(mode)
#GPIO.cleanup()
print("Start")
Forward1=38
Backward1=37
Forward2=36
Backward2=35
sleeptime=0.1
# Power management registers
power_mgmt_1 = 0x6b
power_mgmt_2 = 0x6c
bus = smbus.SMBus(1) # or bus = smbus.SMBus(1) for Revision 2 boards
address = 0x68 # This is the address value read via the i2cdetect command
#motor pins initialization
GPIO.setmode(GPIO.BOARD)
GPIO.setup(Forward1, GPIO.OUT)
GPIO.setup(Backward1, GPIO.OUT)
GPIO.setup(Forward2, GPIO.OUT)
GPIO.setup(Backward2, GPIO.OUT)
#motor forward
def forward(x):
GPIO.output(Forward1, GPIO.HIGH)
GPIO.output(Forward2, GPIO.HIGH)
print("Moving Forward")
time.sleep(x)
GPIO.output(Forward1, GPIO.LOW)
GPIO.output(Forward2, GPIO.LOW)
#motor reverse
def reverse(x):
GPIO.output(Backward1, GPIO.HIGH)
GPIO.output(Backward2, GPIO.HIGH)
print("Moving Backward")
time.sleep(x)
GPIO.output(Backward1, GPIO.LOW)
GPIO.output(Backward2, GPIO.LOW)
# mpu6050 read
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)
def get_direction():
# 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("")
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))
return get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)
# while loop begins
margin = 7
try:
while (1):
dir = get_direction()
if(dir < -margin):
print("move forward")
forward(sleeptime)
elif(dir > margin):
print("move reverse")
reverse(sleeptime)
except:
print("Some error")
GPIO.cleanup()
while loop begins
margin = 7 try: while (1): dir = get_direction() if(dir < -margin): print("move forward") forward(sleeptime) elif(dir > margin): print("move reverse") reverse(sleeptime)
except: print("Some error")
GPIO.cleanup()