原理:
- UNO R3中写入控制舵机转动度数的程序,该程序一直检测:serial是否又数据,有则操作舵机。
- python程序负责向 serial 写入数据,并可以通过serial读取 舵机角度的信息。
1、硬件连接
说明:示例中的信号线接的是10号引脚。
2、通过usb数据线,上传控制舵机的程序到UNR R3
说明:这里的舵机引脚 是10
/*
舵机的控制
*/
//导入舵机的库
#include <Servo.h>
Servo servo_pin_1;
int state=0; //初始状态
int t=10; //延时毫秒
void setup()
{
Serial.begin(9600);//这个一定要设置为9600 否则乱码 python也要保证一致
servo_pin_1.attach(10);//使用第10号引脚为信号输出
}
void loop()
{
while(!Serial)//检测是否有串口接通
{}
if(Serial.available()>0) //判断是否具有输入
{
state=Serial.parseInt(); //接收数据
servo_pin_1.write( state ); //定义舵机的转动角度
delay( 30 );//延时1000毫秒
Serial.print(state);
}
}
3、执行python程序
# -*- coding: utf-8 -*-
"""
Created on Sat Feb 6 16:44:35 2021
@author: Admin
"""
"""
python:tkinter控制舵机的角度
"""
# 导入模块
import serial
import tkinter as tk
import time
# 建立串口连接
ser = serial.Serial('COM5', 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,ser.read())
if __name__ == '__main__':
app = ButtonsApp()
app.title('滚动条控制舵机')
app.mainloop()
ser.close()
参考博客:python与arduino结合控制舵机_张一根的博客-CSDN博客
下一步:检测 物体偏移多少度,并让舵机也执行多少度。CSDN