查看: 3802|回复: 7

MU视觉传感器试用—踢球小车

[复制链接]
  • TA的每日心情
    开心
    2021-1-22 10:01
  • 签到天数: 925 天

    [LV.10]以坛为家III

    发表于 2017-3-4 09:52 | 显示全部楼层 |阅读模式
    本帖最后由 vickywong 于 2017-3-10 18:47 编辑

      过年的时候收到MU视觉传感器,先调试了一下,在等固件更新耽误了一些时间,开学前做好了踢球小车,开学后作业巨多,到现在才发帖子。
    一、MU的调试
    MU可以直接从USB接收和发送数据,传出一行行报文,通过指令来更改不同识别模式(如球、线、人体)或开关一些功能(如舵机、串口输出报文)。具体功能就另行参考说明书吧。
    但是,由于报文不能直观地显示MU所看到的东西,我做了一个Processing程序来显示出MU具体所看到的东西。
    MU和Processing实在是太相配了!一个擅长看图形发串口数据,一个擅长收串口数据显示图形。
    MU-Processing.jpg
    MU和Processing的连接很简单,用MU自带的USB线插到电脑上就可以。Processing程序如下:
    [mw_shl_code=cpp,true]//MU视觉传感器互动
    import processing.serial.*;
    Serial port;

    short head;
    short detected;
    short scoreh8;
    short scorel8;
    short x;
    short y;
    short Width;
    short Height;


    void setup()
    {
      size(1000,1000);
      String Port = Serial.list()[0];
      port = new Serial(this,Port,115200);
      background(255);
      fill(0);
    }
    void draw()
    {
      head = (short)port.read();
      head = (short)port.read();
      detected = (short)port.read();
      scoreh8 = (short)port.read();
      scorel8 = (short)port.read();
      x = (short)port.read();
      y = (short)port.read();
      Width = (short)port.read();
      Height = (short)port.read();
    //  print(scoreh8);  print("  ");  println(scorel8);
      
    //  if(scoreh8 <=3)
    //    detected = 0;
      
      if(detected == 1)
        ellipse(x*10,y*10,Width*10,Height*10);
      else// if(detected == 0)
        background(255);
    }[/mw_shl_code]

    这样,就能更好的根据识别到的物体的位置和大小了来写程序了。

    二、踢球小车    踢球小车本来想用Altar小车改装的,但发现Altar小车底板太低,击球的电磁阀装不上,就用原来一个巡线小车的底板改装一下,只留下主控板、L298N,然后加上MU和电磁阀击球器就好了,小车前边用铁丝弯一下为了能笼住乒乓球的。
    最费工夫的是把MU固定到小车上,MU要垂直放才行,没有弯曲件跟小车底盘固定,找到了能用的东西MU的螺丝孔又太小。最后找了一小块亚克力板在炉子上烤了一下弯过来,再打孔,跟MU固定。
    IMG_20170304_084314.jpg
    电磁阀击球器就是下面这货,是去北师大参观自动化实验室时老师送我的,据说他们用Arduino控制一排这货,敲出了《大河之舞》!这个接线要用三极管,电压是12V的,3个电池就能带起来,这个电压UNO板也能用。(开始三极管接反了,电磁阀就是不动,以为电压不够,加到4个电池,UNO板就烧了,第一次烧板子L)

    IMG_20170304_083621.jpg
    电磁阀接线.jpg
    下面是小车的程序,视频忘记录了。
    [mw_shl_code=cpp,true]//MU Car
    #include <VisionSensor.h>
    VisionSensor MU(Serial, 115200);
    short leftA = 3;
    short leftB = 4;
    short enA = 9;
    short rightA = 8;
    short rightB = 7;
    short enB = 5;
    short hitpin = 10;

    int detected;
    int x;
    int y;
    int width;

    void getmessag();
    void moving(int left, int right);
    void gostop();
    void hitball();

    void setup() {
      MU.begin();

      pinMode(leftA,OUTPUT);
      pinMode(leftB,OUTPUT);
      pinMode(enA,OUTPUT);
      pinMode(rightA,OUTPUT);
      pinMode(rightB,OUTPUT);
      pinMode(hitpin,OUTPUT);

    }

    void loop() {
      getmessag();
      if(MU.valid() > 0){
        if(detected >= 1){
          if(x >= 40 && x <= 60){
            moving(70,70);
          }
          else if(x < 40 && x >= 1){
           moving(50,70);
          }
          else if(x > 60 && x <= 99){
            moving(70,50);
          }
       
          if(y >= 70 && width > 40){
          delay(800);
          gostop();
          hitball();
          delay(800);
         }
       }
        else
          gostop();
        }
    }
    void getmessag(){
      MU.search();
      detected = MU.detected();
      if(detected == 1){
        x = MU.getX();
        y = MU.getY();
        width = MU.getWidth();
      }
    }

    void moving(int left, int right){
      analogWrite(enA,left);
      analogWrite(enB,right);
      digitalWrite(leftA,HIGH);
      digitalWrite(leftB,LOW);
      digitalWrite(rightA,HIGH);
      digitalWrite(rightB,LOW);
    }
    void gostop(){
      analogWrite(enA,0);
      analogWrite(enB,0);
      digitalWrite(leftA,LOW);
      digitalWrite(leftB,LOW);
      digitalWrite(rightA,LOW);
      digitalWrite(rightB,LOW);
    }
    void hitball(){
      digitalWrite(hitpin,HIGH);
      delay(50);
      digitalWrite(hitpin,LOW);
    }[/mw_shl_code]
    三、问题
    这个MU有点近视眼,小球远了就看不见了,只有把球放到它眼前才会挪过去踢。想让它追着球跑的想法没实现。
  • TA的每日心情
    开心
    2017-1-25 08:32
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2017-3-14 14:54 | 显示全部楼层
    Processing配MU大赞!那个直流电磁铁的用法也值得学习!
  • TA的每日心情
    难过
    2017-3-4 19:22
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-3-4 18:34 | 显示全部楼层
    processing代码怎么运行,需要连接mu吗?
  • TA的每日心情
    开心
    2021-1-22 10:01
  • 签到天数: 925 天

    [LV.10]以坛为家III

     楼主| 发表于 2017-3-5 17:49 | 显示全部楼层
    楼上大神 发表于 2017-3-4 18:34
    processing代码怎么运行,需要连接mu吗?

    是的,直接把USB接上就行

    该用户从未签到

    发表于 2017-3-14 21:53 | 显示全部楼层
  • TA的每日心情
    开心
    2016-12-12 14:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-3-14 23:02 | 显示全部楼层
    老哥,,那个MU哪里可以买到啊?有没有网址
  • TA的每日心情
    开心
    2016-12-12 14:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-3-14 23:03 | 显示全部楼层
    老哥,,那个MU哪里可以买到啊?有没有网址?

  • TA的每日心情
    开心
    2021-1-22 10:01
  • 签到天数: 925 天

    [LV.10]以坛为家III

     楼主| 发表于 2017-3-15 16:37 | 显示全部楼层
    本帖最后由 vickywong 于 2017-3-15 16:41 编辑
    曦yyh 发表于 2017-3-14 23:03
    老哥,,那个MU哪里可以买到啊?有没有网址?

    http://mai.morpx.com/goods.php?id=149
    http://www.morpx.com/
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    求助!arduino编译esp32s的板子失败
    求助!arduino编译esp32s
    新安装的mac系统和arduino IDE,开发板都安装好了,测试的代码为示例Blink,可一直编译
    开个帖子,记录我造小车的过程   欢迎大家批评指正
    开个帖子,记录我造小车的
    目的:想做一个可以远程控制的小车车,放在家里在公司都可 以控制的。控制:MEGA2560+
    (开源)微信小程序控制esp8266,可远程
    (开源)微信小程序控制es
    流程说明:首先要使esp8266能够联网,能联网就可以控制,使用示例程序,修改WIFI、
    【Arduino】168种传感器模块系列实验(158)---QMC5883L三轴罗盘
    【Arduino】168种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Arduino 使用Mega2560和LCD1602做的多级菜单显示功能
    Arduino 使用Mega2560和LC
    新手小白一枚,最近在做课程设计。看了社区的一个帖子后自己根据原文作者思路写的,按
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表