szjuliet 发表于 2019-5-28 16:38:24

Pixy CMUcam5图像识别传感器教程(三):连接PIXY与Arduino

(三)连接Pixy与Arduino
Pixy CMUcam5图像识别传感器教程(一):教PIXY识别物体
Pixy CMUcam5图像识别传感器教程(二):与PIXY对话
Pixy CMUcam5图像识别传感器教程(三):连接PIXY与Arduino
Pixy CMUcam5图像识别传感器教程(四):连接PIXY与树莓派
Pixy CMUcam5图像识别传感器教程(五):摄像头云台安装

原文链接

本教程说明如何使用Arduino与Pixy通信

开箱即用,Pixy已准备好与Arduino对话。 它以1 Mbits /秒的速度向Arduino发送块信息,这意味着Pixy每秒可以发送超过6000个检测到的对象,每帧发送135个检测到的对象(Pixy可以每秒处理50帧)。
下面我们让Pixy和Arduino对话。

[*]使用Pixy包装中提供的Arduino线将Pixy连接到Arduino主控板。
注意:如果主控板是Arduino Nano,带状线缆要面向Nano的内部,而不会像Uno上那样从侧面退出(如图)。如果电缆向外插入,程序会无法上传到Nano,也无法与其进行串行通信。https://docs.pixycam.com/wiki/lib/exe/fetch.php?w=400&tok=83c56e&media=wiki:img:ce5166e65a245cce097741efef288fe09b08da8a.jpg注意观察图中线缆的插入方式。上图是UNO,线缆是朝外的;如果是Nano,线缆是朝里的。
https://docs.pixycam.com/wiki/lib/exe/fetch.php?w=400&tok=b9c87f&media=wiki:img:2b73fb3a56aa3673396578f13e2496ef3ea06616.jpgPixy线缆的插入方向只有一种,如上图。
接好后Arduino线缆如下图(图中我用的是Pixy2代,1代的接线方法完全一样):

[*]接下来,在这里下载最新的Arduino库“arduino_pixy-x.y.z.zip”(x, y, z为数字,代表版本)。
在Arduino IDE中选择Sketch项目➜Include Library加载库➜Add .ZIP添加.ZIP库 ...(如果使用的是旧版本的Arduino IDE,则是:Sketch项目➜Import Library导入库),将刚才下载的Arduino zip添加到库中。

[*]接下来在File文件➜Examples➜Pixy中选择“hello_world”加载示例。


[*]示例代码如下:
//
// begin license header
//
// This file is part of Pixy CMUcam5 or "Pixy" for short
//
// All Pixy source code is provided under the terms of the
// GNU General Public License v2 (https://www.gnu.org/licenses/gpl-2.0.html).
// Those wishing to use Pixy source code, software and/or
// technologies under different licensing terms should contact us at
// cmucam@cs.cmu.edu. Such licensing terms are available for
// all portions of the Pixy codebase presented here.
//
// end license header
//
// This sketch is a good place to start if you're just getting started with
// Pixy and Arduino.This program simply prints the detected object blocks
// (including color codes) through the serial console.It uses the Arduino's
// ICSP port.For more information go here:
//
// http://cmucam.org/projects/cmuca ... _a_Microcontroller_(like_an_Arduino)
//
// It prints the detected blocks once per second because printing all of the
// blocks for all 50 frames per second would overwhelm the Arduino's serial port.
//
   
#include <SPI.h>
#include <Pixy.h>

// This is the main Pixy object
Pixy pixy;

void setup()
{
Serial.begin(9600);
Serial.print("Starting...\n");

pixy.init();
}

void loop()
{
static int i = 0;
int j;
uint16_t blocks;
char buf;

// grab blocks!
blocks = pixy.getBlocks();

// If there are detect blocks, print them!
if (blocks)
{
    i++;
   
    // do this (print) every 50 frames because printing every
    // frame would bog down the Arduino
    if (i%50==0)
    {
      sprintf(buf, "Detected %d:\n", blocks);
      Serial.print(buf);
      for (j=0; j<blocks; j++)
      {
      sprintf(buf, "block %d: ", j);
      Serial.print(buf);
      pixy.blocks.print();
      }
    }
}
}

[*]上传并启动串行监视器。


[*]串口监视器如下显示:

注意,hello_world示例仅在Pixy运行“默认程序Default Program”时才会打印消息(可以在Action菜单下选择PixyMon中的默认模式),在打印出来的消息中我们可以看到有一个与颜色特征匹配的对象。当Pixy运行默认程序并检测到对象时,PixyMon显示如下图。Pixy检测到了两个颜色特征:https://docs.pixycam.com/wiki/lib/exe/fetch.php?w=400&tok=5bbc6e&media=wiki:img:9e4222b818ff727d712f5203d8be68b86031d318.jpg
Arduino API在Arduino上使用Pixy非常简单。只需在代码中包含SPI和Pixy的头文件:#include <SPI.h>#include <Pixy.h>

将下面这行代码放在setup()和loop()函数之外来创建Pixy的全局实例:
Pixy pixy;

Arduino库中最重要的方法是getBlocks(),它返回Pixy检测​​到的对象数目。然后在pixy.blocks[]数组中查找每个检测到的对象信息(每个对象对应一个​​数组成员)。每个数组成员(i)包含以下字段:

[*]pixy.blocks.signature检测到的对象的颜色特征号(正常特征号为1-7)
[*]pixy.blocks.x检测到的对象中心的x位置(0~319)
[*]pixy.blocks.y检测到的对象中心的y位置(0~199)
[*]pixy.blocks.width检测到的对象的宽度(1~320)
[*]pixy.blocks.height检测到的对象的高度(1~200)
[*]pixy.blocks.angle检测到的对象的角度,如果检测到的对象是颜色代码color code。
[*]pixy.blocks.print()一个成员函数,用于将检测到的对象信息输出到串口


有关Arduino库和API的更多信息,请转到此处。

为Arduino更新Pixy库
在安装新版本的Arduino Library之前,建议删除现有的库。
方法:进入C:\Users\<yourname>\Documents\Arduino\libraries删除Pixy目录。 然后重新运行Arduino IDE,按照上面所述方法重新添加库。



gada888 发表于 2019-6-26 15:53:22

这个摄像头很不错哟
页: [1]
查看完整版本: Pixy CMUcam5图像识别传感器教程(三):连接PIXY与Arduino