Ejemplo n.º 1
0
    description=
    'Example sketch that controls an LED strip via Spacebrew. It uses the 	LED Strip Python library for Adafruit\'s LPD8806 LED strips.'
)

# Define the server optional parameter
parser.add_argument('-s',
                    '--server',
                    nargs=1,
                    type=str,
                    default='sandbox.spacebrew.cc',
                    help='the spacesb server hostname')

# read all command line parameters
args = parser.parse_args()

pwm = PWM(0x40, debug=True)
pwm.setPWMFreq(250)

base_pos = 1024
bars = [0, 0, 0, 0]
bars_prev = [0, 0, 0, 0]


def updateBar1(val):
    updateBar(1, val)


def updateBar2(val):
    updateBar(2, val)

Ejemplo n.º 2
0
class ServoDriver:

	##
	# Constructor method for ServoDriver class 
	# @param {integer} address	i2c address of the 16-channel PWM driver
	# @param {integer} begin	Default pulse length in nanosecs to set servo to beginning position 
	# @param {integer} end		Default pulse length in nanosecs to set servo to end position 
	# @param {integer} freq		number of pwn windows per second (frequency), determine max and min pulse length
	# @partm {boolean} debug	flag that turns on and off debug messages 
	def __init__ (self, address = 0x40, begin = 570, end = 2650, freq = 60, debug = False):
		self.debug = debug
		self.freq = freq

		# minimum pulse length in nanoseconds based on freq and 12-bit resolution of PWM driver
		self.nanosec_res = 1.0 / freq * 1000000.0 / 4096.0

		# make sure the begin and end pulse length in nanoseconds is supported with current frequency 
		if begin < self.nanosec_res: begin = self.nanosec_res
		if begin > (self.nanosec_res * 4096): begin = (self.nanosec_res * 4096)
		if end < self.nanosec_res: end = self.nanosec_res
		if end > (self.nanosec_res * 4096): end = (self.nanosec_res * 4096)

		# initialize the configuration array that holds config settings for all servos
		self.configurations = [{"begin": begin, "end": end, "range": (end - begin), "stop": 400, "continuous": False} for x in range(16)]

		# connect to PWM driver at specified i2c address
		self.connect(address)

	##
	# connect 	Method initializes that connects to PWM driver and sets the appropriate PWM frequency
	# @param {integer} address	i2c address of the 16-channel PWM driver
	def connect (self, address):
		if self.debug: print "[connect:ServoDriver] connecting to the servo driver at i2c address ", address
		self.pwm = PWM(address, debug = self.debug)
		self.pwm.setPWMFreq(self.freq)

	##
	# continuous	Method that configures specified servos as continous rotation servos
	# @param {integer} servo 		Number of the servo channel
	# @param {boolean} continuous 	Sets whether the servo at the specified channel should be set to continuous
	def continous (self, servo, continuous = True):
		if self.debug: print "[continuous:ServoDriver] setting servo ", servo, " continuous mode to ", continuous
		self.configurations[servo]["continuous"] = continuous

	##
	# calibrationTest	Method that runs a calibration test designed to enable user to figure out
	# 					the pulse length that sets a specific servo to its beginning and end positions.
	# 					The test consists of changing the pulse length at a specified interval, and 
	# 					printing the current pulse length to the terminal/console.
	# @param {integer} servo 		Number of the servo channel
	# @param {integer} start_pulse	Length in nanosecs of the pulse to start the calibration process. If
	# 								this is set to shorter value than the minimum supported pulse length
	# 								then it is adjusted appropriately.
	# @param {integer} inc_pulse 	Increase in pulse length in nanosec during each step in the 
	# 								calibration process
	# @param {integer} inc_inter 	Interval in seconds between each step in the calibration process. 
	# 
	def calibrationTest (self, servo, start_pulse = 1, inc_pulse = 25, inc_inter = 1):
		# adjust start_pulse if it is shorter than minimum pulse length
		if start_pulse < self.nanosec_res: start_pulse = self.nanosec_res

		# convert starting pulse length, and pulse increment to format required for setting PWM driver
		rel_cur_pulse = int(start_pulse / self.nanosec_res)
		rel_inc_pulse = int(inc_pulse / self.nanosec_res)

		# if the current pulse length is longer than supported by current frequency then abort
		if rel_cur_pulse > 4098: return

		print "*******************************************************************************"
		print "Calibration Test "
		print " - starting with pulse length (nanosecs): ", start_pulse
		print " - increment per step (nanosecs): ", inc_pulse
		print " - starting pulse length as 12-bit relative pos based on full window: ", rel_cur_pulse
		print "--------------------------------------------------------------------------------"

		# send pulse to take servo to starting position
		self.pwm.setPWM(servo, 0, rel_cur_pulse)
		time.sleep(3)

		# increase pulse length until we reach the maximum pulse length
		while rel_cur_pulse < 4098 :
			print " - updated pulse length, nanosecs: ", (rel_cur_pulse * self.nanosec_res), ", 12-bit rel pos: ", rel_cur_pulse
			self.pwm.setPWM(servo, 0, rel_cur_pulse)	# set pulse length
			rel_cur_pulse += rel_inc_pulse				# increase the pulse length				
			time.sleep(inc_inter)						# wait for interval time

	## 
	# calibratePos	Method used to calibrate a normal servo that is attached to the specified channel 
	# 				on the PWM driver
	# @param {integer} servo 	Number of the servo channel
	# @param {integer} begin	Pulse length in nanosecs to set specified servo to beginning position 
	# @param {integer} end		Pulse length in nanosecs to set specified servo to end position 
	def calibratePos (self, servo, begin, end):
		if self.debug: print "[calibratePos:ServoDriver] calibrating servo ", servo, " begin pulse to ", begin, ", and end ", end
		self.configurations[servo]["begin"] = begin
		self.configurations[servo]["end"] = end
		self.configurations[servo]["range"] = end - begin

	## 
	# calibrateCont	Method used to calibrate a continuous rotation servo that is attached to the specified 
	# 				channel on the PWM driver
	# @param {integer} servo 	Number of the servo channel
	# @param {integer} stop		Pulse length in nanosecs to stop the servo from rotating
	def calibrateCont (self, servo, stop):
		if self.debug: print "[calibrateCont:ServoDriver] calibrating continous servo ", servo, " to stop pulse ", stop
		self.configurations[servo]["stop"] = stop

	##
	# move 		Method that updates the position of the specified servo. For normal servos, this method
	# 			enables you to set a specific position; for continuous rotation serovs this method
	# 			enables you to set their rotation direction and speed.
	# @param {integer} servo 	Number of the servo channel
	# @param {integer} pos 		Values between 90 and -90 translate into a position for normal servos,
	# 							For continuous rotation servos 0 will stop their rotation, a higher value
	# 							will rotate it left, and a lower value will rotate it to the right. 
	def move (self, servo, pos):
		if pos < -90: degress = -90
		elif pos > 90: degree = 90
		pos += 90
		
		# handle normal servos
		if self.configurations[servo]["continuous"] == False:
			if self.debug: print "[move:ServoDriver] moving servo ", servo, " to pos ", pos

			range_mult = self.configurations[servo]["range"] / 180.0
			pos = self.configurations[servo]["begin"] + (pos * range_mult)
			pos_int = int(pos / self.nanosec_res)

			self.pwm.setPWM(servo, 0, pos_int)

		# handle continuous servos
		else:
			if self.debug: print "[move:ServoDriver] moving continous servo ", servo, " to ", pos
			pos = pos * (2048 / 90)
			self.pwm.setPWM( servo, 0, (self.configurations[servo]["stop"] + pos) )
Ejemplo n.º 3
0
	def connect (self, address):
		if self.debug: print "[connect:ServoDriver] connecting to the servo driver at i2c address ", address
		self.pwm = PWM(address, debug = self.debug)
		self.pwm.setPWMFreq(self.freq)
import argparse
import random

# Define app description and optional paramerters
parser = argparse.ArgumentParser(description='Example sketch that controls an LED strip via Spacebrew. It uses the 	LED Strip Python library for Adafruit\'s LPD8806 LED strips.')

# Define the server optional parameter
parser.add_argument('-s', '--server', 
					nargs=1, type=str, 
					default='sandbox.spacebrew.cc',
					help='the spacesb server hostname')

# read all command line parameters
args = parser.parse_args()

pwm = PWM(0x40, debug=True)
pwm.setPWMFreq(250)

base_pos = 1024
bars = [0,0,0,0]
bars_prev = [0,0,0,0]

def updateBar1(val):
	updateBar(1, val)

def updateBar2(val):
	updateBar(2, val)

def updateBar3(val):
	updateBar(3, val)