颜色识别器
材料准备
硬件连接
硬件连线方式如下:
白红蓝按钮分别接 7,8,9 数字口,颜色传感器的 SDA、SCL、GND、VCC 分别接 SDA,SCL、GND、VCC,LCD 屏幕的 VCC、GND、SCL、SD 分别接 VCC、GND、模拟 5 口、模拟 4 口;
如下图是颜色传感器的接口图:
接线表:
连接实物图:
USB 数据连接电脑,要注意的是扩展板上的 5v 和 3.3v 跳线要跳到 5v。
红色、蓝色、白色纸片:
软件准备
系统推荐:Windows 7 以上 / Mac OS 10.7 Lion 或更新的版本
开发环境推荐:Arduino IDE 1.6.12 以上
开发版支持库推荐:Intel Curie Boards by Intel 1.0.7 以上
下载 LCD 屏幕的库:
LiquidCrystal_I2C.zip
库文件安装方法:
LiquidCrystal_I2C.zip 库下载完成后,在 Arduino IDE 菜单栏中的 “ 项目 -> 加载库 -> 添加一个 .ZIP 库… ” 中选择下载的 “ LiquidCrystal_I2C.zip ” 文件即可自动完成库文件的加载。在 macOS 下载后可能会自动解压成文件夹,我们可以在 “ 添加一个 .ZIP 库… ” 的选择窗口中直接选择库文件夹即可。 )
下载 DFrobot 颜色传感器开发库:
DFRobot_TCS34725-master.zip
库安装方法同上。
示例代码
#include “CurieTimerOne.h”
#include “CurieNeuronsPro.h”
#include “Wire.h”
#include “DFRobot_TCS34725.h”
#include “LiquidCrystal_I2C.h”
LiquidCrystal_I2C lcd(0x20, 16, 2); //set the LCD address to 0x20 for a 16 chars and 2 line display
DFRobot_TCS34725 tcs = DFRobot_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
CurieNeurons hNN;
#define LEN 7
byte pattern[LEN];
int dist, cat, nid, res;
#define white_button 7
#define red_button 8
#define blue_button 9
//const of color
#define RED 1
#define BLUE 3
int white_button_value = 0;
int red_button_value = 0;
int blue_button_value = 0;
void printClassifyResult()
{
if (res == 8 || res == 4)
{
if (res == 8)
Serial.println(“Recognition is certain.”);
else if (res == 4)
Serial.println(“Recognition is uncertain.”);
//Serial.print(“dist:”);
//Serial.println(dist, DEC);
Serial.print(“color is: “);
if (cat == RED)
{
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(“RED”);
Serial.println(“RED\n”);
}
else if (cat == BLUE)
{
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(“BLUE”);
Serial.println(“BLUE\n”);
}
}
else
Serial.println(“Recognition failed.\n”);
}
void setup()
{
Serial.begin(115200);
Serial.println(“Color View Test!”);
if (tcs.begin()) {
Serial.println(“Found sensor”);
} else {
Serial.println(“No TCS34725 found … check your connections”);
while (1); // halt!
}
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.home();
Serial.begin(9600);
while (!Serial);
pinMode(white_button, INPUT);
pinMode(red_button, INPUT);
pinMode(blue_button, INPUT);
hNN.begin();
hNN.forget(50);
}
void loop()
{
uint16_t clear, red, green, blue;
while (1)
{
delay(100);
red_button_value = digitalRead(red_button);
blue_button_value = digitalRead(blue_button);
white_button_value = digitalRead(white_button);
tcs.getRGBC(&red, &green, &blue, &clear);
tcs.lock(); // turn off LED
pattern[0] = (byte)(red / 10);
pattern[1] = (byte)(green / 10);
pattern[2] = (byte)(blue / 10);
// Serial.print(“R = “);
// Serial.print(pattern[0]);
// Serial.print(“, G = “);
// Serial.print(pattern[1]);
// Serial.print(“, B = “);
// Serial.println(pattern[2]);
if (red_button_value == 1 ) {
hNN.learn(pattern, LEN, RED);
Serial.println(“Learned an example of RED.\n”);
delay(200);
red_button_value = 0;
}
if (blue_button_value == 1 ) {
hNN.learn(pattern, LEN, BLUE);
Serial.println(“Learned an example of BLUE.\n”);
delay(200);
blue_button_value = 0;
}
if (white_button_value == 1 ) {
res = hNN.classify(pattern, LEN, &dist, &cat, &nid);
printClassifyResult();
delay(200);
white_button_value = 0;
}
}
}
发布者:Cara,转载请注明出处:http://www.makercollider.com/curie/1160