first commit
This commit is contained in:
commit
a5a0434432
1126 changed files with 439481 additions and 0 deletions
|
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Library for using the Grove - I2C Motor Driver(http://www.seeedstudio.com/depot/Grove-I2C-Motor-Driver-p-907.html)
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this library? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
|
||||
# Released under the MIT license (http://choosealicense.com/licenses/mit/).
|
||||
# For more information see https://github.com/DexterInd/GrovePi/blob/master/LICENSE
|
||||
|
||||
import time,sys
|
||||
import RPi.GPIO as GPIO
|
||||
import smbus
|
||||
|
||||
# use the bus that matches your raspi version
|
||||
rev = GPIO.RPI_REVISION
|
||||
if rev == 2 or rev == 3:
|
||||
bus = smbus.SMBus(1)
|
||||
else:
|
||||
bus = smbus.SMBus(0)
|
||||
|
||||
class motor_driver:
|
||||
|
||||
MotorSpeedSet = 0x82
|
||||
PWMFrequenceSet = 0x84
|
||||
DirectionSet = 0xaa
|
||||
MotorSetA = 0xa1
|
||||
MotorSetB = 0xa5
|
||||
Nothing = 0x01
|
||||
EnableStepper = 0x1a
|
||||
UnenableStepper = 0x1b
|
||||
Stepernu = 0x1c
|
||||
I2CMotorDriverAdd = 0x0f #Set the address of the I2CMotorDriver
|
||||
|
||||
def __init__(self,address=0x0f):
|
||||
self.I2CMotorDriverAdd=address
|
||||
|
||||
#Maps speed from 0-100 to 0-255
|
||||
def map_vals(self,value, leftMin, leftMax, rightMin, rightMax):
|
||||
#http://stackoverflow.com/questions/1969240/mapping-a-range-of-values-to-another
|
||||
# Figure out how 'wide' each range is
|
||||
leftSpan = leftMax - leftMin
|
||||
rightSpan = rightMax - rightMin
|
||||
|
||||
# Convert the left range into a 0-1 range (float)
|
||||
valueScaled = float(value - leftMin) / float(leftSpan)
|
||||
|
||||
# Convert the 0-1 range into a value in the right range.
|
||||
return int(rightMin + (valueScaled * rightSpan))
|
||||
|
||||
#Set motor speed
|
||||
def MotorSpeedSetAB(self,MotorSpeedA,MotorSpeedB):
|
||||
MotorSpeedA=self.map_vals(MotorSpeedA,0,100,0,255)
|
||||
MotorSpeedB=self.map_vals(MotorSpeedB,0,100,0,255)
|
||||
bus.write_i2c_block_data(self.I2CMotorDriverAdd, self.MotorSpeedSet, [MotorSpeedA,MotorSpeedB])
|
||||
time.sleep(.02)
|
||||
|
||||
#Set motor direction
|
||||
def MotorDirectionSet(self,Direction):
|
||||
bus.write_i2c_block_data(self.I2CMotorDriverAdd, self.DirectionSet, [Direction,0])
|
||||
time.sleep(.02)
|
||||
|
||||
if __name__ == "__main__":
|
||||
m= motor_driver()
|
||||
while True:
|
||||
m.MotorSpeedSetAB(100,100)
|
||||
m.MotorDirectionSet(0b1010)
|
||||
time.sleep(2)
|
||||
m.MotorSpeedSetAB(100,100)
|
||||
m.MotorDirectionSet(0b0101)
|
||||
time.sleep(2)
|
||||
76
Software/Python/grove_i2c_motor_driver/motor_example.py
Normal file
76
Software/Python/grove_i2c_motor_driver/motor_example.py
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Example for using the Grove - I2C Motor Driver(http://www.seeedstudio.com/depot/Grove-I2C-Motor-Driver-p-907.html)
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
# NOTE:
|
||||
# * Refer to the wiki to make sure that the address is correct: http://www.seeedstudio.com/wiki/Grove_-_I2C_Motor_Driver_V1.3
|
||||
# * The I2C motor driver is very sensitive to the commands being sent to it
|
||||
# * Do not run i2cdetect or send a wrong command to it, the motor driver will stop working and also pull down the I2C clock line, which makes the GrovePi or any other device to stop working too
|
||||
# *Press reset when if you keep getting errors
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
|
||||
import grove_i2c_motor_driver
|
||||
import time
|
||||
|
||||
try:
|
||||
# You can initialize with a different address too: grove_i2c_motor_driver.motor_driver(address=0x0a)
|
||||
m= grove_i2c_motor_driver.motor_driver()
|
||||
|
||||
#FORWARD
|
||||
print("Forward")
|
||||
m.MotorSpeedSetAB(100,100) #defines the speed of motor 1 and motor 2;
|
||||
m.MotorDirectionSet(0b1010) #"0b1010" defines the output polarity, "10" means the M+ is "positive" while the M- is "negtive"
|
||||
time.sleep(2)
|
||||
|
||||
#BACK
|
||||
print("Back")
|
||||
m.MotorSpeedSetAB(100,100)
|
||||
m.MotorDirectionSet(0b0101) #0b0101 Rotating in the opposite direction
|
||||
time.sleep(2)
|
||||
|
||||
#STOP
|
||||
print("Stop")
|
||||
m.MotorSpeedSetAB(0,0)
|
||||
time.sleep(1)
|
||||
|
||||
#Increase speed
|
||||
for i in range (100):
|
||||
print("Speed:",i)
|
||||
m.MotorSpeedSetAB(i,i)
|
||||
time.sleep(.02)
|
||||
|
||||
print("Stop")
|
||||
m.MotorSpeedSetAB(0,0)
|
||||
|
||||
except IOError:
|
||||
print("Unable to find the motor driver, check the addrees and press reset on the motor driver and try again")
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue