Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. import pyb
  2. import mpu6050
  3. import move
  4. import time
  5. import oled_938
  6.  
  7. gary = move.Robot()
  8. imu = mpu6050.MPU6050(1, False)
  9. gary.changeSpeed(30)
  10.  
  11. pot = pyb.ADC(Pin('X11'))
  12.  
  13. oled = oled_938.OLED_938(pinout={'sda': 'Y10', 'scl': 'Y9', 'res': 'Y8'}, height=64, external_vcc=False, i2c_devid=61)
  14. oled.poweron()
  15. oled.init_display()
  16.  
  17. K_p = 5
  18. K_i = 0.5
  19. K_d = 1
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. data = ""
  28.  
  29. def pitch_estimate(pitch, dt, alpha):
  30. theta = imu.pitch()
  31. pitch_dot = imu.get_gy()
  32. pitch = alpha * (pitch + pitch_dot * dt) + (1 - alpha) * theta
  33. return (pitch, pitch_dot)
  34.  
  35. def PID(pitch, pitch_dot, target, pError, pError_old, pError_sum, i, data):
  36. i = i + 1
  37. pError = pitch - target
  38. if 1 < abs(pitch) < 70:
  39. pError_sum += 0.005*pError
  40. differential = imu.get_gy()
  41. speed = K_p * pError - K_d * differential + K_i * pError_sum
  42. pError_old = pError
  43. else:
  44. speed = 0
  45.  
  46. return speed, pError, pError_old, pError_sum, i, data
  47.  
  48. pitch = imu.pitch()
  49. pError = 0
  50. pError_old = 0
  51. pError_sum = 0
  52. tic = pyb.millis()
  53. cf = 0
  54. i = 0
  55. trigger = pyb.Switch()
  56.  
  57. scale_kp = 5
  58. scale = 2
  59.  
  60.  
  61. oled.draw_text(0, 30, 'Press usr to begin')
  62. oled.display()
  63.  
  64. while not trigger(): pass
  65. while trigger(): pass
  66.  
  67. oled.clear()
  68. oled.draw_text(0, 10, 'Kp = {:5.2f}'.format(K_p))
  69. oled.draw_text(0, 30, 'Ki = {:5.2f}'.format(K_i))
  70. oled.draw_text(0, 50, 'Kd = {:5.2f}'.format(K_d))
  71. oled.display()
  72.  
  73. while True:
  74. if pyb.millis() - tic > 5:
  75.  
  76. pitch, pitch_dot = pitch_estimate(pitch, (pyb.millis() - tic)*0.001, 0.75)
  77. speed, pError, pError_old, pError_sum, i, data = PID(pitch, pitch_dot, 0, pError, pError_old, pError_sum, i, data)
  78.  
  79. print("Speed: {0}".format(speed))
  80.  
  81. if speed > 100:
  82. speed = 100
  83. elif speed < -100:
  84. speed = -100
  85.  
  86. gary.changeSpeed(abs(speed))
  87. if speed > 0:
  88. gary.moveBackwards()
  89. else:
  90. gary.moveForwards()
  91. tic = pyb.millis()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement