python与arduino结合控制舵机

python与arduino结合控制舵机

一.任务说明:

我们要实现的是使用一个图像软件来控制舵机的角度,例如下图,直接使用鼠标来拖到滚动条,来实现舵机不同角度的控制。

在这里插入图片描述

二.环境说明:

  1. 本机系统:Ubuntu19.4

  2. python版本:3.71

  3. arduino版本:2:1.0.5

  4. 需要到的Python第三方库:

​ (1)tkinter:用于GUI图形界面的搭建

​ (2)pyserial::用于arduino与Python的串口通信

  1. 舵机:MG995

三实现说明:

python的tkinter库实现图形界面的搭建,用户拖动鼠标来改变转动的角度数据,通过serial库从串口通信把数据传送给arduino,然后arduino根据传过来的数据去控制舵机转动不同的角度。

四代码说明:

1. arduino代码

(特别注意:舵机的控制需要的是模拟信号,所以舵机信号线所接的引脚应该是模拟输出端口)

/*
  舵机的控制
*/

//导入舵机的库
#include <Servo.h>

Servo servo_pin_1;

int state=0; //初始状态
int t=10; //延时毫秒
void setup()
{
  Serial.begin(9600);
  servo_pin_1.attach(1);//使用第1号引脚为信号输出
}

void loop()
{
  while(!Serial)//检测是否有串口接通
  {} 
  if(Serial.available()>0) //判断是否具有输入
  {
    state=Serial.parseInt(); //接收数据
    servo_pin_1.write( state ); //定义舵机的转动角度
//    delay( t );//延时1000毫秒
  }
}

2.python代码

"""
    python:tkinter控制舵机的角度

"""
# 导入模块
import serial
import tkinter as tk
import time

# 建立串口连接
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5)


# 创建一个按钮的窗体
class ButtonsApp(tk.Tk):
    def __init__(self):
        super().__init__()
        # 开灯按钮 resolution=50 表示步长为50
        self.scale = tk.Scale(self, from_=0,
                              tickinterval=30,
                              resolution=30,
                              to=180, length=800,
                              width=50,  orien=tk.HORIZONTAL,
                              cursor="hand2",
                              command=self.on)
        self.scale.pack(padx=40, pady=10)

    # 控制函数,特别注意event参数的使用
    def on(self, event):
        val = str(self.scale.get())
        ser.write(val.encode('utf-8'))
        print(val)


if __name__ == '__main__':
    app = ButtonsApp()
    app.title('滚动条控制舵机')
    app.mainloop()


接好各电源线之后,应该先运行arduino程序,再运行Python程序。

  • 17
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值