Pixy CMUcam5图像识别传感器教程(三):连接PIXY与Arduino
(三)连接Pixy与ArduinoPixy 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,按照上面所述方法重新添加库。
这个摄像头很不错哟
页:
[1]