https://hellobreak.net/raspberry-pi-pico-dc-motor/ と以下を参考に
https://www.radical-dreamer.com/programming/raspberry-pi-pwm-motordriver/
TB67H450 SINGLE DC-MOTOR DRIVER つかってOK vrefはラズピコの5vに繋ぐ
------ non-pwm は以下の通り
import machine
import utime
IN1 = machine.Pin(1, machine.Pin.OUT)
IN2 = machine.Pin(2, machine.Pin.OUT)
while True:
# 正転
IN1.value(1)
IN2.value(0)
utime.sleep(0.5) # この時間が正転時間をきめる
# 停止
IN1.value(0)
IN2.value(0)
utime.sleep(3)
# 逆転
IN1.value(0)
IN2.value(1)
utime.sleep(1)
# 停止
IN1.value(0)
IN2.value(0)
utime.sleep(3)
-------------------------------- pwmは以下の通り
from machine import PWM, Pin
import utime
IN1 = PWM(Pin(1))
IN2 = PWM(Pin(2))
IN1.freq(100)
IN2.freq(100)
max_duty = 65025
while True:
# 正転
IN2.duty_u16(0)
for i in range(50,53):
IN1.duty_u16(int(max_duty*i*0.01))
utime.sleep(0.1)
# 停止
IN1.duty_u16(0)
IN2.duty_u16(0)
utime.sleep(2)
# 逆転
IN1.duty_u16(0)
for i in range(50,53):
IN2.duty_u16(int(max_duty*i*0.01))
utime.sleep(0.1)
# 停止
IN1.duty_u16(0)
IN2.duty_u16(0)
utime.sleep(2)
-----------------------------------------------------------------
https://www.radical-dreamer.com/programming/raspberry-pi-pwm-motordriver/ :: bt rpi
https://craft-gogo.com/raspberrypi-pwm-motor/ :: by pigpio 以下はクジラのコード
TB67H450 SINGLE DC-MOTOR DRIVER (VMに6Vの電池ボックスから供給必要)簡潔!
import RPi.GPIO as GPIO
from time import sleep
# GPIOのポートを指定 --- (*1)
R_VREF = 13
R_IN1 = 19
R_IN2 = 26
GPIO.setmode(GPIO.BCM)
GPIO.setup([R_VREF,R_IN1,R_IN2], GPIO.OUT)
# モーターを回す
# 回転速度を指定 --- (*2)
pwm_r = GPIO.PWM(R_VREF, 50) # 50hz
pwm_r.start(30) # デューティ比 30%
try:
while True:
# 時計回りにモーターを回す --- (*3)
print("時計回り");
GPIO.output(R_IN1, GPIO.HIGH)
GPIO.output(R_IN2, GPIO.LOW)
sleep(1)
# モーターを停止する
print("停止")
GPIO.output(R_IN1, GPIO.LOW)
GPIO.output(R_IN2, GPIO.LOW)
sleep(1)
# 逆時計回りにモーターを回す
print("逆回り")
GPIO.output(R_IN1, GPIO.LOW)
GPIO.output(R_IN2, GPIO.HIGH)
sleep(1)
except KeyboardInterrupt:
pass
GPIO.cleanup()
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
https://www.micro-bit.info/archives/1141
以下をいれ、モータBにとりつけるだけ、前進せんかったら逆につけるだけ イチにも二にも水漏れ対策につきる
ーーーーーmaqueen cotnroller for v1ーーーーーボタンAでオンオフトグル操作ー
nput.onButtonPressed(Button.A, function () {
動作中 = !(動作中)
})
let 操舵 = 0
let M2の速度 = 0
let M1の速度 = 0
let 速度 = 0
let 左右の傾き = 0
let 前後の傾き = 0
let 動作中 = false
radio.setGroup(36)
動作中 = false
let LED点灯中 = false
basic.showIcon(IconNames.Happy)
basic.forever(function () {
if (動作中) {
前後の傾き = input.acceleration(Dimension.Y)
左右の傾き = input.acceleration(Dimension.X)
速度 = Math.map(前後の傾き, -1023, 1023, 255, -255)
M1の速度 = 速度
M2の速度 = 速度
操舵 = Math.map(左右の傾き, -1023, 1023, -21, 21)
if (操舵 < 0) {
M1の速度 = Math.trunc(M1の速度 * ((操舵 + 11) / 10))
} else if (操舵 > 0) {
M2の速度 = Math.trunc(M2の速度 * ((操舵 - 11) / -10))
}
} else {
M1の速度 = 0
M2の速度 = 0
}
radio.sendValue("M1", M1の速度)
radio.sendValue("M2", M2の速度)
basic.pause(100)
})
---------------- maqueen-car for v2 --------拡張機能必要--------------
radio.onReceivedValue(function (name, value) {
if (name == "M1") {
M1の速度 = value
if (M1の速度 > 0) {
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, M1の速度)
} else if (M1の速度 < 0) {
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CCW, Math.abs(M1の速度))
} else {
maqueen.motorStop(maqueen.Motors.M1)
}
} else if (name == "M2") {
M2の速度 = value
if (M2の速度 > 0) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, M2の速度)
} else if (M2の速度 < 0) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW, Math.abs(M2の速度))
} else {
maqueen.motorStop(maqueen.Motors.M2)
}
}
})
let M2の速度 = 0
let M1の速度 = 0
M1の速度 = 0
M2の速度 = 0
radio.setGroup(36)
basic.showIcon(IconNames.Happy)
-------------------------------------------------
0 件のコメント:
コメントを投稿