(1)tkinter:用于GUI图形界面的搭建
(2)pyserial::用于arduino与Python的串口通信
- 舵机:MG995
python的tkinter库实现图形界面的搭建,用户拖动鼠标来改变转动的角度数据,通过serial库从串口通信把数据传送给arduino,然后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毫秒
}
}
"""
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程序。
因篇幅问题不能全部显示,请点此查看更多更全内容