python - 如何将 Micropython 上的电机导入 DFRobot Quad Motor Shield
问题描述
我正在尝试将两个电机导入到我的 pyboard 中,它们连接到我的 DFRobot DC Quad Motor Shield。他们的示例代码是用 Arduino 编写的,我无法翻译。附上我之前的代码,该代码不起作用,以及电机护罩及其速度和连接的视图。
任何帮助表示赞赏!
这是我所拥有的
i2c = machine.I2C(scl=machine.Pin('Y9'), sda=machine.Pin('Y10'))
motors = motor.DCMotors(i2c)
MOTOR1 = 3
MOTOR2 = 4
#Initiate Communication from Sonar sensor
sensor_front = adafruit_hcsr04.HCSR04(trigger_pin=board.Pin('X3'), echo_pin=board.Pin('X4'))
sensor_back = adafruit_hcsr04.HCSR04(trigger_pin=board.Pin('X6'), echo_pin=board.Pin('X7'))
#Create minimum distance For Ultrasonic sensor
min_distance = sensor.distance(70)
button = pyb.switch()
def autonomy():
#no_problem = True
while (True):
if (button()):
dist_front = sensor1.distance(15)
dist_back = sensor2.distance(15)
if dist_front > min_distance:
print('Nothing can stop me!')
motors.speed(MOTOR1, 1500)
motors.speed(MOTOR2,-1500)
这是arduino代码
/*!
* @file QuadMotorDriverShield.ino
* @brief QuadMotorDriverShield.ino Motor control program
*
* Every 2 seconds to control motor positive inversion
*
* @author linfeng(490289303@qq.com)
* @version V1.0
* @date 2016-4-5
*/
const int E1 = 3; ///<Motor1 Speed
const int E2 = 11;///<Motor2 Speed
const int E3 = 5; ///<Motor3 Speed
const int E4 = 6; ///<Motor4 Speed
const int M1 = 4; ///<Motor1 Direction
const int M2 = 12;///<Motor2 Direction
const int M3 = 8; ///<Motor3 Direction
const int M4 = 7; ///<Motor4 Direction
void M1_advance(char Speed) ///<Motor1 Advance
{
digitalWrite(M1,LOW);
analogWrite(E1,Speed);
}
void M2_advance(char Speed) ///<Motor2 Advance
{
digitalWrite(M2,HIGH);
analogWrite(E2,Speed);
}
void M3_advance(char Speed) ///<Motor3 Advance
{
digitalWrite(M3,LOW);
analogWrite(E3,Speed);
}
void M4_advance(char Speed) ///<Motor4 Advance
{
digitalWrite(M4,HIGH);
analogWrite(E4,Speed);
}
void M1_back(char Speed) ///<Motor1 Back off
{
digitalWrite(M1,HIGH);
analogWrite(E1,Speed);
}
void M2_back(char Speed) ///<Motor2 Back off
{
digitalWrite(M2,LOW);
analogWrite(E2,Speed);
}
void M3_back(char Speed) ///<Motor3 Back off
{
digitalWrite(M3,HIGH);
analogWrite(E3,Speed);
}
void M4_back(char Speed) ///<Motor4 Back off
{
digitalWrite(M4,LOW);
analogWrite(E4,Speed);
}
void setup() {
for(int i=3;i<9;i++)
pinMode(i,OUTPUT);
for(int i=11;i<13;i++)
pinMode(i,OUTPUT);
}
void loop() {
M1_advance(100);
M2_advance(100);
M3_advance(100);
M4_advance(100);
delay(2000); ///<Delay 2S
M1_back(100);
M2_back(100);
M3_back(100);
M4_back(100);
delay(2000); ///<Delay 2S
}
解决方案
这是尝试之一。考虑使用保险丝,直到我们确定这是将 DFRobot Motor HAT 连接到 pyboard 的方法。电机帽上的连接点是绿色数字总线。
import pyb
# don't use timers 2,3,5,6
'''
connect:
pyboard Motor Hat
X1 4
X3 3
GND GND
'''
FREQ = 50
backward = pyb.Pin('X1' ,pyb.Pin.OUT_PP)
speed = pyb.Timer(9, freq=FREQ).channel(1, pyb.Timer.PWM,\
pin = pyb.Pin('X3'))
while True:
backward.high()
for percent in range(100):
speed.pulse_width_percent(percent + 1)
pyb.delay(10)
speed.pulse_width_percent(0)
backward.low()
for percent in range(100):
speed.pulse_width_percent(percent + 1)
pyb.delay(10)
speed.pulse_width_percent(0)
我猜 FREQ 是 50Hz,对于许多伺服系统来说,我猜 arduino 使用它作为 PWM(脉冲宽度调制)的默认值。
将电机连接到连接器 M1,将电池连接到电机帽的电源插座。不要连接到 pyboard 上的 v+。使用自己的电源为您的 pyboard 供电。你的电机帽可能会产生很多电噪声。
电机应向后加速然后突然停止,然后向前加速然后突然停止。
祝你好运
推荐阅读
- kubernetes - kubernetes 为 echo 服务器抛出 CrashLoopBackOff
- javascript - 需要制作一个简单的应用程序,模拟一个 HMI 并且可以远程访问
- entity-framework - 一个项目中有多组迁移文件?
- python - Python 获取 abs() 函数以获取字典值
- javascript - 如何判断两种颜色是否相似?
- javascript - 按下表格行中的按钮将单元格复制到剪贴板 - Javascript
- vsto - Outlook VSTO 插件:根据 AppointmentItem.Body 中输入的文本更新 RibbonBar
- python - 将 .csv 文件从本地上传到 django Admin
- google-cloud-platform - 如何连接 oauth2 客户端以在我的谷歌云虚拟机中使用谷歌表格 API 的服务
- html - 如何打破 HTML 中的长文本,使其适合图像的宽度并继续到下一行?