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

[教程] 【智控万物】二哈大麦

[复制链接]
【智控万物】二哈大麦图1


【项目意图】
在Mind+python模式下,利用Tkinter库,物联网库siot,实现在电脑显示,二哈识别到的物体的位置。

【智控万物】二哈大麦图2

【硬件】
1、麦昆Plus
【智控万物】二哈大麦图3

2、二哈
【智控万物】二哈大麦图4

二哈识图(HuskyLens)是一款简单易用的人工智能视觉传感器,内置6种功能:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签识别。仅需一个按键即可完成AI训练,摆脱繁琐的训练和复杂的视觉算法,让你更加专注于项目的构思和实现。
3、WIFI IoT模块
【智控万物】二哈大麦图5

WIFI IoT Module是一款支持多编程平台,多物联网平台的WIFI模块。它支持micro:bitArduino主控,MakeCode、Mind+、ArduinoIDE多种编程环境;支持EasyIoT、IFTTT、Thingspeak等多种流行的物联网平台。

WIFI IoT Module采用易用的Gravity接口,I2C和URAT两种通讯协议,UART模式兼容OBLOQ物联网模块的功能和用法,I2C模式兼容更多主控板,并可以最大限度避免传感器之间的冲突。不论是用于课堂IoT教学,还是家电的物联网改装,选用WIFI IoT Module都是非常好的方案。

【Microbit硬件程序】

上传到麦昆Plus上Micro:bit程序(Arduino C)
  1. /*!
  2. * MindPlus
  3. * microbit
  4. *
  5. */
  6. #include <Microbit_Obloq.h>
  7. #include <Microbit_Matrix.h>
  8. #include <DFRobot_HuskyLens.h>
  9. #include <DFRobot_MaqueenPlus.h>
  10. // 动态变量
  11. String         mind_s_MingLing, mind_s_WeiZhiXinXi;
  12. volatile float mind_n_CheSu, mind_n_ShuangShan;
  13. // 函数声明
  14. void obloqMqttEventT0(String& obloq_message);
  15. void obloqMqttEventT1(String& obloq_message);
  16. // 静态常量
  17. const String topics[5] = {"5n92uqBMg","dH6_dBZ7g","QMM4DKG7R","",""};
  18. const uint8_t bbcBitmap[][5] = {
  19.         {B01010,B10101,B10001,B01010,B00100}
  20. };
  21. const MsgHandleCb msgHandles[5] = {obloqMqttEventT0,obloqMqttEventT1,NULL,NULL,NULL};
  22. // 创建对象
  23. DFRobot_HuskyLens   huskylens;
  24. Microbit_Obloq      olq;
  25. DFRobot_MaqueenPlus maqueenPlus;
  26. // 主程序开始
  27. void setup() {
  28.         olq.registerMqttHandle(msgHandles);
  29.         huskylens.beginI2CUntilSuccess();
  30.         huskylens.writeAlgorithm(ALGORITHM_OBJECT_TRACKING);
  31.         olq.startConnect(0, 1, "sxs", "smj080823", "RNZYsQIWg", "gHWLswIWgz", topics, "iot.dfrobot.com.cn", 1883);
  32.         MMatrix.show(bbcBitmap[0]);
  33.         maqueenPlus.writePid(maqueenPlus.ON);
  34.         maqueenPlus.servoRun(maqueenPlus.S3, 110);
  35.         mind_n_CheSu = 30;
  36.         mind_n_ShuangShan = 0;
  37.         Serial.begin(9600);
  38. }
  39. void loop() {
  40.         if ((mind_n_ShuangShan==1)) {
  41.                 maqueenPlus.setRGB(maqueenPlus.ALL, maqueenPlus.RED);
  42.                 delay(500);
  43.                 maqueenPlus.setRGB(maqueenPlus.ALL, maqueenPlus.PUT);
  44.                 delay(500);
  45.         }
  46.         else {
  47.                 huskylens.request();
  48.                 if (huskylens.isLearned(1)) {
  49.                         if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
  50.                                 mind_s_MingLing = "";
  51.                                 mind_s_WeiZhiXinXi = (String((String(huskylens.readBlockParameter(1).xCenter))) + String(":"));
  52.                                 mind_s_WeiZhiXinXi = (String(mind_s_WeiZhiXinXi) + String((String((String(huskylens.readBlockParameter(1).yCenter))) + String(":"))));
  53.                                 mind_s_WeiZhiXinXi = (String(mind_s_WeiZhiXinXi) + String((String((String(huskylens.readBlockParameter(1).width))) + String(":"))));
  54.                                 mind_s_WeiZhiXinXi = (String(mind_s_WeiZhiXinXi) + String((String(huskylens.readBlockParameter(1).height))));
  55.                                 olq.publish(olq.topic_2, mind_s_WeiZhiXinXi);
  56.                                 Serial.println(mind_s_WeiZhiXinXi);
  57.                                 delay(500);
  58.                         }
  59.                 }
  60.         }
  61. }
  62. // 事件回调函数
  63. void obloqMqttEventT0(String& obloq_message) {
  64.         mind_s_MingLing = obloq_message;
  65.         Serial.println(mind_s_MingLing);
  66.         if ((mind_s_MingLing==String("A"))) {
  67.                 maqueenPlus.motorRun(maqueenPlus.ALL, maqueenPlus.CW, mind_n_CheSu);
  68.                 maqueenPlus.setRGB(maqueenPlus.ALL, maqueenPlus.PUT);
  69.         }
  70.         if ((mind_s_MingLing==String("B"))) {
  71.                 maqueenPlus.motorRun(maqueenPlus.ALL, maqueenPlus.CCW, mind_n_CheSu);
  72.                 maqueenPlus.setRGB(maqueenPlus.ALL, maqueenPlus.RED);
  73.         }
  74.         if ((mind_s_MingLing==String("C"))) {
  75.                 maqueenPlus.motorStop(maqueenPlus.LEFT);
  76.                 maqueenPlus.motorRun(maqueenPlus.RIGHT, maqueenPlus.CW, mind_n_CheSu);
  77.                 maqueenPlus.setRGB(maqueenPlus.LEFT, maqueenPlus.RED);
  78.                 maqueenPlus.setRGB(maqueenPlus.RIGHT, maqueenPlus.PUT);
  79.         }
  80.         if ((mind_s_MingLing==String("D"))) {
  81.                 maqueenPlus.motorStop(maqueenPlus.RIGHT);
  82.                 maqueenPlus.motorRun(maqueenPlus.LEFT, maqueenPlus.CW, mind_n_CheSu);
  83.                 maqueenPlus.setRGB(maqueenPlus.RIGHT, maqueenPlus.RED);
  84.                 maqueenPlus.setRGB(maqueenPlus.LEFT, maqueenPlus.PUT);
  85.         }
  86.         if ((mind_s_MingLing==String("E"))) {
  87.                 maqueenPlus.motorStop(maqueenPlus.ALL);
  88.                 maqueenPlus.setRGB(maqueenPlus.ALL, maqueenPlus.PUT);
  89.         }
  90.         if ((mind_s_MingLing==String("F"))) {
  91.                 maqueenPlus.servoRun(maqueenPlus.S3, 50);
  92.         }
  93.         if ((mind_s_MingLing==String("G"))) {
  94.                 maqueenPlus.servoRun(maqueenPlus.S3, 100);
  95.         }
  96.         if ((mind_s_MingLing==String("H"))) {
  97.                 mind_n_ShuangShan = 1;
  98.         }
  99.         if ((mind_s_MingLing==String("I"))) {
  100.                 mind_n_ShuangShan = 0;
  101.         }
  102. }
  103. void obloqMqttEventT1(String& obloq_message) {
  104.         mind_n_CheSu = (String(obloq_message).toInt());
  105. }
复制代码


mind+上传模式下图形代码
【智控万物】二哈大麦图6


被遮挡部分
【智控万物】二哈大麦图7

【电脑Mind+python代码】



  1. #  -*- coding: UTF-8 -*-
  2. # MindPlus
  3. # Python
  4. import siot
  5. import tkinter as tk
  6. from tkinter import *
  7. from PIL import Image, ImageTk#图像控件
  8. x0=0
  9. y0=0
  10. x2=0
  11. y2=0
  12. #连接物联网
  13. siot.init(client_id="sxs12345678",server="iot.dfrobot.com.cn",port=1883,user="RNZYsQIWg",password="gHWLswIWgz")
  14. siot.connect()
  15. # 事件回调函数
  16. def on_message_callback(client, userdata, msg):
  17.     global x0,y0,x2,y2
  18.     infor=str(msg.payload.decode("utf-8"))
  19.     list_me=infor.split(":")
  20.     x0=int(list_me[0])-int(list_me[2])/2
  21.     y0=int(list_me[1])-int(list_me[3])/2
  22.     x1=int(list_me[0])+int(list_me[2])/2
  23.     y1=int(list_me[1])-int(list_me[3])/2
  24.     x2=int(list_me[0])+int(list_me[2])/2
  25.     y2=int(list_me[1])+int(list_me[3])/2
  26.     x3=int(list_me[0])-int(list_me[2])/2
  27.     y3=int(list_me[1])+int(list_me[3])/2
  28.   
  29.     print(x0)
  30.     print(y0)
  31. siot.getsubscribe(topic="QMM4DKG7R")
  32. siot.set_callback(on_message_callback)
  33. siot.loop()
  34. #定义函数,向物联网发送相应控制指令
  35. def forward():#前进
  36.     siot.publish(topic="5n92uqBMg", data="A")
  37. def back():#后退
  38.     siot.publish(topic="5n92uqBMg", data="B")
  39. def left():#左转
  40.     siot.publish(topic="5n92uqBMg", data="C")
  41. def right():#右转
  42.     siot.publish(topic="5n92uqBMg", data="D")
  43. def stop():#停止
  44.     siot.publish(topic="5n92uqBMg", data="E")
  45. def open_s():#张开
  46.     siot.publish(topic="5n92uqBMg", data="F")
  47. def stop_s():#闭合
  48.     siot.publish(topic="5n92uqBMg", data="G")
  49. def light_open():#双闪开
  50.     siot.publish(topic="5n92uqBMg", data="H")
  51. def light_close():#双闪关
  52.     siot.publish(topic="5n92uqBMg", data="I")
  53. #生成窗体,布置相应文本框和按钮
  54. top = tk.Tk()
  55. top.title('控制窗口')
  56. top.geometry('900x600')
  57. image_width = 900
  58. image_height = 600
  59. canvas = Canvas(top,bg = 'white',width = image_width,height = image_height )#绘制画布
  60. canvas.pack()
  61. canvas2 = Canvas(top,bg = 'white',width = 320,height = 240 )#绘制画布
  62. canvas.pack()
  63. canvas2.place(x = 290,y = 100)
  64. img = Image.open('bg.jpg')
  65. bg = ImageTk.PhotoImage(img)
  66. bgid = canvas.create_image(0, 0, image=bg, anchor='nw')
  67. canvas.place(x = 0,y = 0)
  68. #产生标签文本背景透明效果
  69. txtid=canvas.create_text(350,20, fill = 'red',font=("黑体", 35),anchor="nw")
  70. canvas.insert(txtid,1,"二哈大麦")
  71. #Label(top,text = '物联网大麦!',font = ("黑体",14),width =15,height = 1).place(x =400,y = 20,anchor = 'nw')
  72. E1 = Entry(top, bd =5)
  73. E1.pack(side = RIGHT)
  74. E1.place(x=100,y=100)
  75. wx=20
  76. hy=350
  77. def setV():#设置车速
  78.     siot.publish(topic="dH6_dBZ7g", data=str(E1.get()))
  79. #生成按钮,并指定相应功能
  80. left = tk.Button(top,text='左转',height=2,width=15,command=left)
  81. left.place(x=wx,y=hy+100)
  82. forward = tk.Button(top,text='前进',height=2,width=15,command=forward)
  83. forward.place(x=wx+150,y=hy)
  84. right = tk.Button(top,text='右转',height=2,width=15,command=right)
  85. right.place(x=wx+300,y=hy+100)
  86. back = tk.Button(top,text='后退',height=2,width=15,command=back)
  87. back.place(x=wx+150,y=hy+200)
  88. stop = tk.Button(top,text='停止',height=2,width=15,command=stop)
  89. stop.place(x=wx+150,y=hy+100)
  90. wx=450
  91. hy=350
  92. open_s = tk.Button(top,text='张开',height=2,width=15,command=open_s)
  93. open_s.place(x=wx+150,y=hy)
  94. stop_s = tk.Button(top,text='闭合',height=2,width=15,command=stop_s)
  95. stop_s.place(x=wx+150,y=hy+200)
  96. light_open = tk.Button(top,text='闪开',height=2,width=15,command=light_open)
  97. light_open.place(x=wx,y=hy+100)
  98. light_close = tk.Button(top,text='闪关',height=2,width=15,command=light_close)
  99. light_close.place(x=wx+300,y=hy+100)
  100. setV = tk.Button(top,text='设速',height=2,width=15,command=setV)
  101. setV.place(x=wx+150,y=hy+100)
  102. while True:
  103.   canvas2.delete("all")
  104.   canvas2.create_rectangle(x0,y0,x2,y2,fill='blue')
  105.   top.update()
  106.   top.after(100)
  107. top.mainloop()  
复制代码
【智控万物】二哈大麦图8


【智控万物】二哈大麦图9

【演示视频】


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

本版积分规则

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

硬件清单

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

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

mail