Code python สำหรับ GY-521 (MPU-6050)

หายาก เจอแล้วขอเอามาแปะไว้ก่อน กันลืม Code python สำหรับ GY-521 (MPU-6050)

===== code for GY-521 (MPU-6050)======

#!/usr/bin/python

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(1)
address = 0x68

# 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)

=======================

รายละเอียดเพิ่มเติม : http://blog.bitify.co.uk/2013/11/reading-data-from-mpu-6050-on-raspberry.html

MPU-6050 data sheet : http://invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf

การใช้งาน stepper motor บน raspberry pi ด้วย Python

การใช้งาน stepper motor บน raspberry pi ด้วย Python  แอดมินซื้อของมาดองไว้ทำ lab หลายอาทิตย์ วันนี้ได้เลิกขี้เกียจ จับเอา stepper กับ driver มาลองยำเล่นดู รวมทั้งแงะเอา stepper เก่าๆ จากเครื่อง scanner มาเล่นด้วย ซึ่งใช้ได้กับของโคลนราคาถูกๆ ด้วย มาดูกันครับ

stepper motor stepper motor scanner

เตรียมของ

  1. Raspbian OS ลง python-dev
  2. Stepper motor พร้อม driver  (120 บาท)

การต่อสาย

  1. จากตัว stepper มาที่วงจร driver จะมีสายอยู่ 5 เส้น น้ำเงิน ชมพู เหลือง ส้ม (IN1-4) แดง (+)  ถ้าเป็นชุดที่มากับสามารถเสียบลง socket ได้เลย แต่ถ้าแงะมาจากเครื่องอื่น ต้องลองไล่สายดู สายแดงปรกติจะเป็นไฟเลี้ยง (+) อยู่แล้ว
  2. จากบอร์ด driver ไปหา Raspberry Pi จะมีอยู่ 6 เส้น คือ
    1. ground ต่อกับขา PIN 2 ของ Raspberry Pi
    2. +5v ต่อกับขา PIN 6 ของ Raspberry Pi
    3. IN1 ต่อกับขา PIN 18 ของ Raspberry Pi
    4. IN2 ต่อกับขา PIN 22 ของ Raspberry Pi
    5. IN3 ต่อกับขา PIN 24 ของ Raspberry Pi
    6. IN4 ต่อกับขา PIN 26 ของ Raspberry Pi

Python Code

#———————————–
# Name: Stepper Motor
#
# Author: matt.hawkins
#
# Created: 11/07/2012
# Copyright: (c) matt.hawkins 2012
#———————————–
#!/usr/bin/env python
 
# Import required libraries
import time
import RPi.GPIO as GPIO
 
# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)
 
# Define GPIO signals to use
# Pins 18,22,24,26
# GPIO24,GPIO25,GPIO8,GPIO7
StepPins = [24,25,8,7]
 
# Set all pins as output
for pin in StepPins:
  print “Setup pins”
  GPIO.setup(pin,GPIO.OUT)
  GPIO.output(pin, False)
 
# Define some settings
StepCounter = 0
WaitTime = 0.5
 
# Define simple sequence
StepCount1 = 4
Seq1 = []
Seq1 = range(0, StepCount1)
Seq1[0] = [1,0,0,0]
Seq1[1] = [0,1,0,0]
Seq1[2] = [0,0,1,0]
Seq1[3] = [0,0,0,1]
 
# Define advanced sequence
# as shown in manufacturers datasheet
StepCount2 = 8
Seq2 = []
Seq2 = range(0, StepCount2)
Seq2[0] = [1,0,0,0]
Seq2[1] = [1,1,0,0]
Seq2[2] = [0,1,0,0]
Seq2[3] = [0,1,1,0]
Seq2[4] = [0,0,1,0]
Seq2[5] = [0,0,1,1]
Seq2[6] = [0,0,0,1]
Seq2[7] = [1,0,0,1]
 
# Choose a sequence to use
Seq = Seq1
StepCount = StepCount1
 
# Start main loop
while 1==1:
 
  for pin in range(0, 4):
    xpin = StepPins[pin]
    if Seq[StepCounter][pin]!=0:
      print ” Step %i Enable %i” %(StepCounter,xpin)
      GPIO.output(xpin, True)
    else:
      GPIO.output(xpin, False)
 
  StepCounter += 1
 
  # If we reach the end of the sequence
  # start again
  if (StepCounter==StepCount):
    StepCounter = 0
  if (StepCounter<0):
    StepCounter = StepCount
 
  # Wait before moving on
  time.sleep(WaitTime)

sudo nano stepper.py แล้ว copy code ข้างบน มาวาง  sudo python stepper.py เพื่อรัน

ทดลองแก้ จาก

Seq1[0] = [1,0,0,0]
Seq1[1] = [0,1,0,0]
Seq1[2] = [0,0,1,0]
Seq1[3] = [0,0,0,1]

เป็น

Seq1[3] = [1,0,0,0]
Seq1[2] = [0,1,0,0]
Seq1[1] = [0,0,1,0]
Seq1[0] = [0,0,0,1]

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera