中文乐高

 找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 442|回复: 5

【EV3与物联网系列教程】16实战:陀螺仪遥控海龟画图

[复制链接]
发表于 2022-12-13 15:42:41 | 显示全部楼层 |阅读模式
本帖最后由 蒙德·究史尼 于 2022-12-13 15:53 编辑

上一篇:https://bbs.cmnxt.com/forum.php?mod=viewthread&tid=65475




这一篇讲的是运用EV3的陀螺仪传感器遥控电脑上的海龟画图的方法。


实战:陀螺仪遥控海龟画图
在前面的几个实验中,我们已经学会了在Python中让EV3和电脑互相发送消息的方法。接下来,我们就要把刚才学到的知识投入实战。用EV3的陀螺仪传感器遥控电脑上的海龟画图。

原理陀螺仪传感器
EV3的陀螺仪传感器可以检测自身在特定轴向旋转的角度。
ev3dev2函数库调用陀螺仪传感器的相关函数可以在这里查到:

海龟画图
海龟画图(turtle)是Python自带的一个很流行的绘制图像的函数库。

遥控
EV3运用UDP通信的方法把陀螺仪传感器的值发送给电脑端的程序,电脑端的程序根据此值调整turtle(海龟)的移动方向。

搭建
搭建过程非常简单。我只放一张图片。
ev3_gyro_remote_015.png
图中的传感器是陀螺仪传感器,接到EV3的2号口。
经过我测试,陀螺仪传感器必须是EV3原装的。国产的高仿版不能被正确地识别。

电脑端的程序
打开电脑端的IDLE,我在电脑上使用的Python版本是3.7.0。输入以下代码:
中文乐高的代码块有25行的限制,放不下。所以我直接放文本。


#电脑端程序,使用python3运行
#显示提示语,让用户先启动EV3端的程序
input('请先启动EV3端的程序,然后按回车键继续运行本程序')

#ev3地址
ev3_address=('192.168.0.112', 9999)

#电脑端本地绑定地址,端口号设定为8888
pc_address=('0.0.0.0', 8888)

#导入socket库和turtle库
import socket
import turtle

#创建套接字对象s1
s1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#电脑端绑定端口
s1.bind(pc_address)

#创建窗口
window01=turtle.Screen()
#退出程序用的函数
def say_bye(x, y):
        #向EV3发送退出命令
        s1.sendto('exit'.encode('UTF-8'), ev3_address)
        #关闭套接字
        s1.close()
        #关闭窗口
        window01.bye()
        print('exit')
#让窗口被点击后自动执行退出函数“say_bye”
window01.onclick(say_bye)

#设置海龟速度为0(最快速度)
turtle.speed(0)

#用try...except语句捕获异常
try:
        while True:
                #发送“angle”消息,向EV3查询陀螺仪传感器的角度值
                s1.sendto('angle'.encode('UTF-8'), ev3_address)
                #等待接收消息,因为只需要接收消息内容,所以只要recvfrom函数返回值的第一个对象
                message=s1.recvfrom(1024)[0]
                #用UTF-8解码
                text=message.decode('utf8')
                print(text)
                #计算海龟的朝向
                #由于turtle库中默认0朝向是向右的,所以要让它转90度,变成向上的
                heading=int(text)+90
                #设置海龟的朝向
                turtle.setheading(heading)
                #海龟前进1像素
                turtle.forward(1)
except:
        pass


保存,先不着急运行。
02.png

EV3端的程序
在Thonny里输入以下代码:


游客,如果您要查看本帖隐藏内容请回复


保存,先不着急运行。
03.png


运行程序
把一个EV3陀螺仪传感器连接到EV3的2接口。确保你的电脑和EV3的网络是连接到同一个路由器的。
在程序启动之前,EV3必须水平放置在桌子上,不能有晃动。
先在Thonny里让EV3运行程序,稍等几秒,EV3会输出“准备好接收消息了,等待消息中”,此时EV3已经准备就绪,可以运行电脑端的程序了。
在电脑端的IDLE里,按F5键运行程序,屏幕里会输出“请先启动EV3端的程序,然后按回车键继续运行本程序”。按下回车键,海龟画图就会开始。屏幕上出现海龟画图窗口。(海龟画图窗口可能不会主动弹出来,有时候它只会出现在电脑桌面上的任务栏里,你需要手动把它的窗口切换出来)
用手拿起EV3,让EV3沿着如图所示的方向旋转,就可以控制电脑屏幕上海龟的移动方向。
ev3_gyro_remote_016_rotate.png
效果如下图所示。
05.png
鼠标左键单击此窗口的空白处,就可以退出电脑端程序。电脑端程序退出之前会给EV3发送“exit”消息,所以EV3端的程序也会退出。

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2022-12-17 10:33:19 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2022-12-23 16:39:01 | 显示全部楼层
谢谢分享
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2023-1-11 19:04:52 | 显示全部楼层
我最近在忙别的事情。等以后有空了再更新一些关于MQTT协议的EV3物联网教程。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2023-1-18 19:16:40 | 显示全部楼层
看看
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
感谢分享
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|中文乐高 ( 桂ICP备11003955号-1 )

GMT+8, 2023-2-3 06:05 , Processed in 0.025142 second(s), 22 queries .

快速回复 返回顶部 返回列表