硬件设备

主板原理图网址:https://wiki.dfrobot.com.cn/_SKU_DFR0421_Romeo_for_Education_MainBoard_%E5%85%BC%E5%AE%B9Arduino
主板上2脚连接按钮,D4低D5pwm或者D7低D6pwm。分别对应M1和M2的正转速度。4高5pwm或者7高6pwm。分别对应M1和M2的反转速度。
主板效果图
电路原理图

1.按下电机转,松开电机停。

import time
import pyfirmata

# 设置Arduino的串口
port = 'COM3'#'/dev/ttyUSB0'  # 根据你的连接设置正确的串口

# 创建Arduino对象
board = pyfirmata.Arduino(port)

# 启动模拟输入的迭代器
it = pyfirmata.util.Iterator(board)
it.start()

# 获取按钮引脚
button_pin = 2  # 根据你的连接设置正确的引脚
motor_direction_pin = 4  # 电机方向控制引脚
motor_speed_pin = 5  # 电机PWM转速控制引脚

# 获取按钮和电机对象
button = board.get_pin('d:' + str(button_pin) + ':i')
motor_direction = board.get_pin('d:' + str(motor_direction_pin) + ':o')
motor_speed = board.get_pin('d:' + str(motor_speed_pin) + ':p')

try:
    while True:
        # 读取按钮状态
        button_state = button.read()

        if button_state is not None:
            print("按钮状态:", button_state)

            # 如果按钮被按下,控制电机
            if button_state == 1:
                # 设置电机方向为正向
                motor_direction.write(0)

                # 设置电机转速(可以根据需要调整范围(0.0到1.0之间))
                motor_speed.write(0.8)

            else:
                # 如果按钮未被按下,电机停止
                motor_speed.write(0)

        time.sleep(0.1)

except KeyboardInterrupt:
    # 清理资源
    board.exit()

2.按一下转,按一下停。

import time
import pyfirmata

# 设置Arduino的串口
port = 'COM3' #'/dev/ttyUSB0'  # 根据你的连接设置正确的串口

# 创建Arduino对象
board = pyfirmata.Arduino(port)

# 启动模拟输入的迭代器
it = pyfirmata.util.Iterator(board)
it.start()

# 获取按钮引脚和电机引脚
button_pin = 2  # 根据你的连接设置正确的引脚
motor_direction_pin = 4  # 电机方向控制引脚
motor_speed_pin = 5  # PWM转速控制引脚

# 获取按钮对象和电机对象
button = board.get_pin('d:' + str(button_pin) + ':i')
motor_direction = board.get_pin('d:' + str(motor_direction_pin) + ':o')
motor_speed = board.get_pin('d:' + str(motor_speed_pin) + ':p')

motor_running = False  # 电机状态标志

try:
    while True:
        # 读取按钮状态
        button_state = button.read()
        if button_state is not None:
            print("按钮状态:", button_state)
            
            # 如果按钮被按下且电机当前处于停止状态
            if button_state == 1 and not motor_running:
                print("启动电机")
                motor_direction.write(1)  # 设置电机方向
                motor_speed.write(0.8)  # 设置电机转速(0.0到1.0之间)
                motor_running = True
                time.sleep(0.05)
            # 如果按钮被按下且电机当前处于运行状态
            elif button_state == 1 and motor_running:
                print("停止电机")
                motor_speed.write(0)  # 停止电机
                motor_running = False
                time.sleep(0.05)

        time.sleep(0.1)

except KeyboardInterrupt:
    # 清理资源
    board.exit()

发表评论