class ESC(object): ''' This class is made to use ESC device in Raspberry Pi. Becareful when you connect ESC to your Raspberry Pi board. It needs very large current, it can make broken your circuit. ''' def __init__(self, bus_number=None, address=0x40, frequency = 60, drive = 0, steer = 1, drive_n = 369, steer_c = 390): ''' This is very important part of set ESC. If you want to drive motor by this source, you have to use pca9685 drive. Because the ESC circuit is connected with PCA9685 PWM circuit board's channel pins Argument bus_number : bus type of raspberry Pi. If it doesn't set, pca9685 module set value as default. address : I2C slave address frequency : driving motor(forward/backward motor) PWM frequency. driver : pca9685 channel number of driving motor steer : pca9685 channel number of steering motor ''' self.pwm = PWM(bus_number, address) self.pwm.frequency = frequency self.pwm.setup() self.drive = drive self.steer = steer #self.steer_NEUTRAL = 390 #default value. It needs to calibrate self.steer_NEUTRAL = steer_c self.steer_MIN = 280 self.steer_MAX = 500 #self.drive_NEUTRAL = 369 #default value. It needs to calibrate self.drive_NEUTRAL = drive_n self.drive_MIN = 280 self.drive_MAX = 450 self.steer_val = self.steer_NEUTRAL self.drive_val = self.drive_NEUTRAL self.speed_forward = self.steer_NEUTRAL self.speed_backward = self.steer_NEUTRAL self.steer_diff = 35 self.drive_diff = 5 self.is_stop = True def calibrate_drive_NEUTRAL(self, cal_value = 390): if cal_value > self.drive_MAX or cal_value < self.drive_MIN: print "Calibration value Fail" else: print "Drive Calib set to %d" % cal_value self.drive_NEUTRAL = cal_value def calibrate_steer_NEUTRAL(self, cal_value = 390): if cal_value > self.steer_MAX or cal_value < self.steer_MIN: print "Stree Calibration value Fail" else: print "Steer Calib set to %d" % cal_value self.steer_NEUTRAL = cal_value def set_steer_strength(self, strength = 35): if strength > (self.steer_MAX - self.steer_NEUTRAL): strength = self.steer_MAX - self.steer_NEUTRAL elif strength < (self.steer_NEUTRAL - self.steer_NEUTRAL): strength = self.steer_NEUTRAL - self.steer_NEUTRAL self.steer_diff = strength
class WheelCalibration(object): ''' This class is made to use ESC device in Raspberry Pi. Becareful when you connect ESC to your Raspberry Pi board. It needs very large current, it can make broken your circuit. ''' def __init__(self, drive, steer, bus_number=None, address=0x40, frequency = 60, drive_ch = 0, steer_ch = 1): ''' This is very important part of set ESC. If you want to drive motor by this source, you have to use pca9685 drive. Because the ESC circuit is connected with PCA9685 PWM circuit board's channel pins Argument bus_number : bus type of raspberry Pi. If it doesn't set, pca9685 module set value as default. address : I2C slave address frequency : driving motor(forward/backward motor) PWM frequency. driver : pca9685 channel number of driving motor steer : pca9685 channel number of steering motor ''' #mode - 0 : forward, 1 : backward, 2 : Neutral, 3 : None self.set_mode = 3 self.steer_value_loaded = False self.drive_value_loaded = False self.current_mode = ["Forward", "Backward", "Neutral", "None"] #Set Channel self.drive_ch = drive_ch self.steer_ch = steer_ch #Default values for steer #self.steer_NEUTRAL = 390 self.steer_center = steer self.steer_MIN = 280 self.steer_MAX = 500 self.steer_val = 0 self.steer_diff = 15 #Default values for drive(engine) #self.drive_NEUTRAL = 369 self.drive_neutral = drive self.drive_MIN = 280 self.drive_MAX = 450 #self.drive_val = self.drive_neutral self.speed_forward = 0 self.speed_backward = 0 self.drive_diff = 5 # PWM init self.pwm = PWM(bus_number, address) self.pwm.frequency = frequency self.pwm.setup() time.sleep(0.1) self.pwm.write(self.drive_ch,0,0) self.pwm.write(self.steer_ch,0,0) """ def left(self): if(self.steer_value_loaded == True): if self.steer_val < self.steer_MAX: self.steer_val += self.steer_diff if self.steer_val > self.steer_MAX: self.steer_val = self.steer_MAX self.pwm.write(self.steer_ch,0,self.steer_val) def right(self): if(self.steer_value_loaded == True): if self.steer_val > self.steer_MIN: self.steer_val -= self.steer_diff if self.steer_val < self.steer_MIN : self.steer_val = self.steer_MIN self.pwm.write(self.steer_ch,0,self.steer_val) """ def left(self): if(self.steer_value_loaded == True): self.steer_val += self.steer_diff if self.steer_val >= self.steer_MAX: self.steer_val = self.steer_MAX else: self.pwm.write(self.steer_ch,0,self.steer_val) def right(self): if(self.steer_value_loaded == True): self.steer_val -= self.steer_diff if self.steer_val <= self.steer_MIN : self.steer_val = self.steer_MIN else: self.pwm.write(self.steer_ch,0,self.steer_val) def set_steer_center(self): self.steer_val = self.steer_center self.pwm.write(self.steer_ch,0,self.steer_val) time.sleep(0.1) self.pwm.write(self.steer_ch,0,0) self.steer_value_loaded = True def increase_speed(self): if(self.set_mode == 0): #if forward if self.speed_forward < self.drive_MAX: self.speed_forward += self.drive_diff if self.speed_forward > self.drive_MAX: self.speed_forward = self.drive_MAX self.pwm.write(self.drive_ch, 0, self.speed_forward) elif(self.set_mode == 1): #if backward if self.speed_backward > self.drive_MIN: self.speed_backward -= self.drive_diff if self.speed_backward < self.drive_MIN : self.speed_backward = self.drive_MIN self.pwm.write(self.drive_ch, 0, self.speed_backward) else: pass def decrease_speed(self): if(self.set_mode == 0): #if forward """ if self.speed_forward > self.drive_neutral: self.speed_forward -= self.drive_diff if self.speed_forward < self.drive_neutral: self.speed_forward = self.drive_neutral """ if self.speed_forward > self.drive_MIN: self.speed_forward -= self.drive_diff self.pwm.write(self.drive_ch, 0, self.speed_forward) elif(self.set_mode == 1): #if backward """ if self.speed_backward < self.drive_neutral: self.speed_backward += self.drive_diff if self.speed_backward > self.drive_neutral : self.speed_backward = self.drive_neutral """ if self.speed_backward < self.drive_MAX: self.speed_backward += self.drive_diff self.pwm.write(self.drive_ch, 0, self.speed_backward) else: pass def set_drive_forward(self): if(self.drive_value_loaded == True): if(self.set_mode == 2 or self.set_mode == 3): self.set_mode = 0 def set_drive_backward(self): if(self.drive_value_loaded == True): if(self.set_mode == 2 or self.set_mode == 3): self.set_mode = 1 def set_drive_neutral(self): self.set_mode = 2 self.pwm.write(self.drive_ch, 0,self.drive_neutral) self.speed_forward = self.drive_neutral self.speed_backward = self.drive_neutral self.drive_value_loaded = True """ def set_speed_manually(self,speed): self.pwm.write(self.drive_ch, 0,speed) def set_steer_manually(self,steer): self.pwm.write(self.drive_ch, 0,steer) """ def pwm_off(self): self.pwm.write(self.drive_ch, 0,0) self.pwm.write(self.steer_ch, 0,0) self.set_mode = 3
class ESC(object): ''' This class is made to use ESC device in Raspberry Pi. Becareful when you connect ESC to your Raspberry Pi board. It needs very large current, it can make broken your circuit. ''' def __init__(self, bus_number=None, address=0x40, frequency=60, drive=0, steer=1): ''' This is very important part of set ESC. If you want to drive motor by this source, you have to use pca9685 drive. Because the ESC circuit is connected with PCA9685 PWM circuit board's channel pins Argument bus_number : bus type of raspberry Pi. If it doesn't set, pca9685 module set value as default. address : I2C slave address frequency : driving motor(forward/backward motor) PWM frequency. driver : pca9685 channel number of driving motor steer : pca9685 channel number of steering motor ''' self.pwm = PWM(bus_number, address) self.pwm.frequency = frequency self.pwm.setup() self.drive = drive self.steer = steer self.steer_NEUTRAL = 390 #default value. It needs to calibrate self.steer_MIN = 280 self.steer_MAX = 500 self.drive_NEUTRAL = 390 #default value. It needs to calibrate self.drive_MIN = 280 self.drive_MAX = 450 self.steer_val = self.steer_NEUTRAL self.drive_val = self.drive_NEUTRAL self.speed_forward = self.steer_NEUTRAL self.speed_backward = self.steer_NEUTRAL self.steer_diff = 35 self.drive_diff = 5 self.is_stop = True def calibrate_drive_NEUTRAL(self, cal_value=390): if cal_value > self.drive_MAX or cal_value < self.drive_MIN: print "Calibration value Fail" else: self.drive_NEUTRAL = cal_value def calibrate_steer_NEUTRAL(self, cal_value=390): if cal_value > self.steer_MAX or cal_value < self.steer_MIN: print "Stree Calibration value Fail" else: self.steer_NEUTRAL = cal_value def set_steer_strength(self, strength=35): if strength > (self.steer_MAX - self.steer_NEUTRAL): strength = self.steer_MAX - self.steer_NEUTRAL elif strength < (self.steer_NEUTRAL - self.steer_NEUTRAL): strength = self.steer_NEUTRAL - self.steer_NEUTRAL self.steer_diff = strength def left(self): if self.steer_val < self.steer_MAX: self.steer_val += self.steer_diff if self.steer_val > self.steer_MAX: self.steer_val = self.steer_MAX self.pwm.write(self.steer, 0, self.steer_val) def right(self): if self.steer_val > self.steer_MIN: self.steer_val -= self.steer_diff if self.steer_val < self.steer_MIN: self.steer_val = self.steer_MIN self.pwm.write(self.steer, 0, self.steer_val) def center(self): self.steer_val = self.steer_NEUTRAL self.pwm.write(self.steer, 0, self.steer_val) time.sleep(0.1) self.pwm.write(self.steer, 0, 0) def increase_speed(self): if self.speed_forward < self.drive_MAX: self.speed_forward += self.drive_diff if self.speed_forward > self.drive_MAX: self.speed_forward = self.drive_MAX if self.speed_backward > self.drive_MIN: self.speed_backward -= self.drive_diff if self.speed_backward < self.drive_MIN: self.speed_backward = self.drive_MIN print "set_speed === fwd : ", self.speed_forward, "bwd : ", self.speed_backward def decrease_speed(self): if self.speed_forward > self.drive_NEUTRAL: self.speed_forward -= self.drive_diff if self.speed_forward < self.drive_NEUTRAL: self.speed_forward = self.drive_NEUTRAL if self.speed_backward < self.drive_NEUTRAL: self.speed_backward += self.drive_diff if self.speed_backward > self.drive_NEUTRAL: self.speed_backward = self.drive_NEUTRAL print "set_speed === fwd : ", self.speed_forward, "bwd : ", self.speed_backward def set_speed(self, speed_val=1): ''' speed_val : it should set number between 1 to 12 ''' if speed_val > 12: speed_val = 12 self.speed_forward = self.drive_NEUTRAL + self.drive_diff * speed_val self.speed_backward = self.drive_NEUTRAL - self.drive_diff * speed_val print "set_speed === fwd : ", self.speed_forward, "bwd : ", self.speed_backward def forward(self): if self.is_stop: self.pwm.write(self.drive, 0, self.steer_NEUTRAL) time.sleep(0.1) self.is_stop = False self.pwm.write(self.drive, 0, self.speed_forward) def backward(self): if self.is_stop: self.pwm.write(self.drive, 0, self.steer_NEUTRAL) time.sleep(0.1) self.is_stop = False self.pwm.write(self.drive, 0, self.speed_backward) def stop(self): self.pwm.write(self.drive, 0, 0) self.is_stop = True