MakerLab创客实验室 — Let's Make something.
现在注册
已注册用户请 登入

CMUcam5 Pixy:开源机器视觉传感器

13年在Kickstarter上买的,最近马上发货了,但是对于大陆地区资料文件有诸多限制,故译为中文,以飨读者
快速开始7 PixyMon在Mac下的安装0 PixyMon在XP下的安装0 PixyMon在Win7/8下的安装2 教Pixy一个物体2 让Pixy与Arduino连接5 上传新固件2 安装云台系统0 云台系统测试2
Andy large avatar
MakerLab创客实验室  ›  学习系统  ›  传感器  ›  CMUcam5 Pixy:开源机器视觉传感器

让Pixy与Arduino连接

By Andy at 3 年前 , 12558 次浏览

Pixy被设计为可以与微控制器进行通讯,并且Pixy可以直接与Arduino进行通讯。它会以1Mbits/s的速度发送块信息给Arduino,这意味着Pixy每秒可以发送超过6000个识别的物体或每帧135个被识别的物体(Pixy每秒可以处理50帧画面)。
OK,想让Pixy与Arduino进行通讯,使用Pixy自带的数据线连接Pixy到Arduino。

接下来,下载Arduino库在这里:http://pan.baidu.com/s/1dDpDlvV ,打开Arduino IDE并且通过菜单Sketch->Import Library导入Pixy库文件,然后浏览到Pixy库文件解压的地方。
然后,通过菜单File➜Examples➜Pixy载入“hello_world”例子。上传代码到Arduino并且打开Serial Monitor(串口监视器)。你应该可以看到一些类似于下面的数据信息:

Detected 1:  block 0: sig: 1 x: 159 y: 109 width: 61 height: 61Detected 1:  block 0: sig: 1 x: 173 y: 114 width: 60 height: 61Detected 1:  block 0: sig: 1 x: 146 y: 111 width: 70 height: 65... 

注意,这个例子中,如果Pixy运行了默认的固件,并且一个物体被识别才会打印这些信息。

Arduino API

在Arduino中使用Pixy是非常简单的,你只需要包含SPI和Pixy的头文件:


#include <SPI.h>
#include <pixy.h>

并且在setup()和loop()函数外面创建一个全局的Pixy实例变量:

Pixy pixy;

API包含一个函数:getBlocks(),这个函数将返回Pixy所识别的物体数量。然后你就可以通过pixy.blocks[]的数组得到每个识别到的物体数据(每个数组成员对应一个被识别的物体)。每个成员(i)包含下列元素:
pixy.blocks[i].signature:被识别物体的标记编号;
pixy.blocks[i].x:被识别物体中心位置在x方向的坐标;
pixy.blocks[i].y:被识别物体中心位置在y方向的坐标;
pixy.blocks[i].width:被识别物体的宽度(1~320);
pixy.blocks[i].height:被识别物体的高度(1~200);
pixy.blocks[i].print():一个成员函数用来打印被识别物体的信息到串口上;
所以Pixy与Arduino通讯很简单。

其它微控制器或设备

Pixy支持多种方式输出被识别物体的数据。它支持SPI,I2C,UART或模拟/数字 I/O口(通过10Pin接口)。Pixy还支持USB2.0 。你可以通过PixyMon的对话框来配置Pixy使用哪种方式。“Data out port”参数决定了输出方式。

如果你将鼠标指针移动到“Data out port”文字上,会有提示信息显示各个类型的接口对应的文字:
SPI:这是默认的输出端口,使用了三根心(IO口的第Pin1、3、4)并且用于与Arduino通讯;
I2C:两线接口(IO口的Pin5和9),可以支持一个主机与127个从机的通讯(多大127个Pixy);
UART:这是普通的串口(IO口的Pin1和4)。Pixy通过Pin1(输入)接受数据,Pin4(输出)发送数据;
模拟/数字 X:这种方式将在Pin3口输出0~3.3V的模拟电压,表示监测到的最大物体的X值;
模拟/数字 Y:这种方式将在Pin3口输出0~3.3V的模拟电压,表示监测到的最大物体的Y值;

本文最后更新于:3 个月前
5 回复
49743363 medium avatar
#1 - 2 年前
49743363

编程时出现了error,说“pixy”does not name a type,和was not declared in this scope。能解决下么?

起司猫 medium avatar
#3 - 一年前
起司猫

arduino的串口监视器怎么没有反应?

LittleChen medium avatar
#4 - 7 个月前
LittleChen

怎么将两块pixy接到同一块Arduino(或者一个pixy接到另一个pixy上再接到Arduino)上呢?有没有成功的?

angel725 medium avatar
#5 - 3 个月前
angel725

这个东西好贵啊