python与arduino结合控制舵机

python与arduino结合控制舵机

文章目录

  • python与arduino结合控制舵机
    • 一.任务说明:
    • 二.环境说明:
    • 三实现说明:
    • 四代码说明:
      • 1. arduino代码
      • 2.python代码

一.任务说明:

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

python与arduino结合控制舵机_第1张图片

二.环境说明:

  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 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程序。

你可能感兴趣的:(控制硬件的学习)