サーボモーターSG90をラズパイで動かす方法は、
aspberry サーボSG90をpython で動かす にまとめました。
シンプルなリモコンプログラムはこちら。
- ■実行環境
- + Python2.7
- + OpenCV3 (OpenCV2でも動くのではと思います)
- – OpenCV2のinstall の方法はこちらが参考になりました。https://qiita.com/suppy193/items/91609e75789e9f458c39
- – OpenCV3のinstall 方法はこちらが参考になりました。
https://qiita.com/mt08/items/e8e8e728cf106ac83218
- ■動かし方
- + [u][j] で第一関節、[i][j]で第二関節、[o][l]で第三関節が動きます。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091# -*- coding: utf-8 -*-import RPi.GPIO as GPIOimport timeimport numpy as npimport cv2A1_GPIO = 23A2_GPIO = 24A3_GPIO = 25RNG_DIG = np.array([-90, 90])RNG_RATE = np.array([2.5, 12])def mapping(x, rx, ry):a = (ry[0] - ry[1]) / (rx[0] - rx[1])b = ry[0] - a * rx[0]y = a * x + breturn yA1 = 0dA1 = 10A2 = 0dA2 = 10A3 = 0dA3 = 10GPIO.setmode(GPIO.BCM)GPIO.setup(A1_GPIO, GPIO.OUT)p1 = GPIO.PWM(A1_GPIO, 50)GPIO.setup(A2_GPIO, GPIO.OUT)p2 = GPIO.PWM(A2_GPIO, 50)GPIO.setup(A3_GPIO, GPIO.OUT)p3 = GPIO.PWM(A3_GPIO, 50)p1.start(0)p2.start(0)p3.start(0)img = np.zeros((100, 100, 3), dtype = np.uint8)while True:d1 = mapping(A1, RNG_DIG, RNG_RATE)d2 = mapping(A2, RNG_DIG, RNG_RATE)d3 = mapping(A3, RNG_DIG, RNG_RATE)cv2.imshow('img', img)p1.ChangeDutyCycle(d1)p2.ChangeDutyCycle(d2)p3.ChangeDutyCycle(d3)INPUT = cv2.waitKey(100) & 0xFFif INPUT == ord('q'):breakif INPUT == ord('u'):A1 += dA1if A1 > RNG_DIG[1]:A1 = RNG_DIG[1]print('A1', A1)if INPUT == ord('j'):A1 -= dA1if A1 < RNG_DIG[0]:A1 = RNG_DIG[0]print('A1', A1)if INPUT == ord('i'):A2 += dA2if A2 > RNG_DIG[1]:A2 = RNG_DIG[1]print('A2', A2)if INPUT == ord('k'):A2 -= dA2if A2 < RNG_DIG[0]:A2 = RNG_DIG[0]print('A2', A2)if INPUT == ord('o'):A3 += dA3if A3 > RNG_DIG[1]:A3 = RNG_DIG[1]print('A3', A3)if INPUT == ord('l'):A3 -= dA3if A3 < RNG_DIG[0]:A3 = RNG_DIG[0]print('A3', A3)p1.stop()p2.stop()p3.stop()GPIO.cleanup()