312浏览
查看: 312|回复: 0

[M10项目] 行空板----智慧机场行李车

[复制链接]
本帖最后由 刘睿鹏 于 2024-9-27 19:22 编辑
开箱:
        有幸参加行空板双路电机驱动I/O扩展板试用活动,此产品专为行空板(UNIHIKER)开发适配的扩展板,乍一眼看上去和普通的扩展板没有太大区别,实则暗藏玄机。先放一张图片。
       1、可单独使用电
源供电      
       2、板载了RGB灯,红外发射,红外接收      
       3、扩展10路3Pin口和4路I2C口
      
       4、集成了两路直流电机驱动
【项目背景】
去了一次北京大兴国际机场,虽然有指路牌,但还是被搞得乱七八糟,绕了好久才找到登机口,差点赶掉飞机。

【软硬件】
硬件:
· 行空板*1
· 行空板双电路驱动IO扩展板*1
· Gravity HUSKYLENS 人工智能摄像头*1
· DHT11 数字温湿度传感器V2*1
· 马达*2
软件:
· Mind+ V1.8.0 RC3.1

【项目设想】
    1、开机后,首页内容包括机场背景图、标题、按钮;   
    2、按下”自助托运“,则可以使用Husky自动识别机票信息;

    3、按下”安检须知“则可显示安检须知图片;
    4
、可以带旅客到登机口;
【操作思路】

【硬件连接】
行空板扩展板M1,M2接电机+,-(上面会标)
行空板接温湿度传感器,husky;
下面接电池盒(扩展板要外接电池盒才能用电机)

项目实现】
Mind+ 图形化:
难点:
     threading库:‌

threading模块允许Python程序创建、启动和管理线程,以实现并行执行任务,提高程序效率。

‌基本用法‌:

‌继承Thread类‌:通过继承threading.Thread类并重写run()方法,可以创建一个线程。

‌使用Thread类的target参数‌:实例化Thread对象时,通过target参数指定一个要在线程中执行的函数。

‌线程同步‌:

threading模块提供了锁(Lock)、事件(Event)等同步机制,用于协调线程之间的操作,避免数据竞争。

‌注意事项‌:

Python中的全局解释器锁(GIL)限制了多线程在执行CPU密集型任务时的并行性。

设计多线程程序时需要考虑线程安全问题。

‌应用场景‌:

网络编程:并行处理多个网络连接。

图形界面编程:避免UI线程阻塞。

大数据处理:并行处理数据集。

总之,threading库是Python中处理多线程编程的重要工具,可以显著提高程序的执行效率和响应速度。但使用时需要谨慎设计线程间的同步和通信机制。

我们本次主要用了threading库的threading.Timer(执行时间,返回函数).start()的函数。

步骤:
  • 请使用python模式;
  • 点击界面左下角“扩展”按钮;
  • 点击官方库并添加“行空板”,”代码生成器“;
  • 点击pingpong库并添加"温湿度传感器","pingpong初始化","husky人工智能摄像头";
行空板----智慧机场行李车图6行空板----智慧机场行李车图7
注意事项:
  • 初始化温湿度记得勾选DHT11,引脚使用"行空板引脚模块";
  • 用husky记得加pingpong初始化;
  • 记得添加threading库,这样可以自动计时并退出;
  • 运行前需点击连接远程终端(行空板),否则会报错;
代码:


python代码:
  1. #  -*- coding: UTF-8 -*-
  2. # MindPlus
  3. # Python
  4. import threading
  5. from unihiker import GUI
  6. from pinpong.board import Board
  7. from pinpong.board import DHT11
  8. from pinpong.board import Board,Pin
  9. from pinpong.extension.unihiker import *
  10. from pinpong.libs.dfrobot_huskylens import Huskylens
  11. # 自定义函数
  12. def ZhuoMian():
  13.     global button2,button3,button4
  14.     u_gui.draw_image(image="背景.jpg",x=0,y=0)
  15.     u_gui.draw_round_rect(x=20,y=100,w=100,h=50,r=5,width=1,color="#0000FF")
  16.     u_gui.draw_round_rect(x=130,y=100,w=100,h=50,r=5,width=1,color="#0000FF")
  17.     u_gui.draw_text(text="温度:",x=20,y=100,font_size=15, color="#0000FF")
  18.     u_gui.draw_text(text="湿度:",x=130,y=100,font_size=15, color="#0000FF")
  19.     wendu=u_gui.draw_digit(text="1234",x=60,y=110,font_size=13, color="#0000FF")
  20.     shidu=u_gui.draw_digit(text="1234",x=170,y=110,font_size=13, color="#0000FF")
  21.     u_gui.draw_text(text="(°C)",x=20,y=130,font_size=10, color="#0000FF")
  22.     u_gui.draw_text(text="(%rh)",x=130,y=130,font_size=10, color="#0000FF")
  23.     u_gui.draw_text(text="欢迎使用智慧机场服务",x=10,y=30,font_size=16, color="#0000FF")
  24.     u_gui.draw_text(text="自助托运",x=0,y=160,font_size=13, color="#0000FF")
  25.     button2=u_gui.add_button(text="托运行李",x=80,y=160,w=80,h=30,onclick=button_click2)
  26.     u_gui.draw_text(text="安检1",x=0,y=200,font_size=13, color="#0000FF")
  27.     button3=u_gui.add_button(text="安检须知",x=75,y=200,w=80,h=30,onclick=button_click3)
  28.     u_gui.draw_text(text="安检2",x=0,y=240,font_size=13, color="#0000FF")
  29.     button4=u_gui.add_button(text="安检须知",x=75,y=240,w=80,h=30,onclick=button_click4)
  30.     while True:
  31.         wendu.config(text=round(dht1.temp_c(),2))
  32.         shidu.config(text=round(dht1.humidity(),2))
  33. def picture():
  34.     u_gui.draw_image(image="安检 (1).jpg",x=0,y=0)
  35.     threading.Timer(5, ZhuoMian).start()
  36. # 事件回调函数
  37. def button_click2():
  38.     u_gui.draw_image(image="背景.jpg",x=0,y=0)
  39.     button2.config(x=10000)
  40.     button3.config(x=10000)
  41.     button4.config(x=10000)
  42.     n = 0
  43.     while not ((n >= 1)):
  44.         p_huskylens.command_request()
  45.         if p_huskylens.is_appear(1, "blocks"):
  46.             u_gui.draw_text(text="请确认您的信息",x=0,y=0,font_size=20, color="#0000FF")
  47.             u_gui.draw_text(text="航班号:3U6780",x=0,y=40,font_size=20, color="#0000FF")
  48.             u_gui.draw_text(text="姓名:A/Mr.",x=0,y=80,font_size=20, color="#0000FF")
  49.             u_gui.draw_text(text="登机口:3",x=0,y=120,font_size=20, color="#0000FF")
  50.             n = (n + 1)
  51.             u_gui.draw_text(text="-----------------------------",x=0,y=140,font_size=20, color="#0000FF")
  52.             u_gui.draw_text(text="正在打印行李凭条,请稍候",x=0,y=160,font_size=14, color="#0000FF")
  53.             break
  54.         elif p_huskylens.is_appear(2, "blocks"):
  55.             u_gui.draw_text(text="请确认您的信息",x=0,y=0,font_size=20, color="#0000FF")
  56.             u_gui.draw_text(text="航班号:KN5428",x=0,y=40,font_size=20, color="#0000FF")
  57.             u_gui.draw_text(text="姓名:B/Ms.",x=0,y=80,font_size=20, color="#0000FF")
  58.             u_gui.draw_text(text="登机口:2",x=0,y=120,font_size=20, color="#0000FF")
  59.             n = (n + 1)
  60.             u_gui.draw_text(text="-----------------------------",x=0,y=140,font_size=20, color="#0000FF")
  61.             u_gui.draw_text(text="正在打印行李凭条,请稍候",x=0,y=160,font_size=14, color="#0000FF")
  62.             break
  63.         elif p_huskylens.is_appear(3, "blocks"):
  64.             u_gui.draw_text(text="请确认您的信息",x=0,y=0,font_size=20, color="#0000FF")
  65.             u_gui.draw_text(text="航班号:MU2471",x=0,y=40,font_size=20, color="#0000FF")
  66.             u_gui.draw_text(text="姓名:C/Mr.",x=0,y=80,font_size=20, color="#0000FF")
  67.             u_gui.draw_text(text="登机口:1",x=0,y=120,font_size=20, color="#0000FF")
  68.             n = (n + 1)
  69.             u_gui.draw_text(text="-----------------------------",x=0,y=140,font_size=20, color="#0000FF")
  70.             u_gui.draw_text(text="正在打印行李凭条,请稍候",x=0,y=160,font_size=14, color="#0000FF")
  71.             break
  72.     threading.Timer(20, ZhuoMian).start()
  73. def button_click4():
  74.     button2.config(x=10000)
  75.     button3.config(x=10000)
  76.     button4.config(x=10000)
  77.     u_gui.draw_image(image="安检 (1).jpg",x=0,y=0)
  78.     threading.Timer(5, picture).start()
  79. def button_click3():
  80.     button2.config(x=10000)
  81.     button3.config(x=10000)
  82.     button4.config(x=100000)
  83.     u_gui.draw_image(image="安检须知.png",x=0,y=0)
  84. Board().begin()
  85. u_gui=GUI()
  86. p_huskylens = Huskylens()
  87. dht1 = DHT11(Pin((Pin.P21)))
  88. ZhuoMian()
  89. while True:
  90.     pass
复制代码


【结尾】
此款扩展板有4路I2C口,可以满足4个传感器的连接,比如语音识别和语音模块可以同时使用。安排的10路3Pin,也非常给力。最喜欢的设计是USB转接,可以保证扩展板稳定供电的同时,还能调试程序。因为之前的扩展板如果要接语音识别模块,需要另外外接电源,连接线增多,不方便,现在就方便多了。
不过usb连接线是真难弄,希望df能把这里改一下。------------------------------------------------------------------------------------------------------------------------------------------------------------------------------完结撒花
程序附件:
行空板----智慧机场行李车图1
行空板----智慧机场行李车图2
行空板----智慧机场行李车图3
行空板----智慧机场行李车图4
行空板----智慧机场行李车图5







您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail