CNK Arduino 教程(五)

颜色识别器

材料准备

硬件连接

硬件连线方式如下:
白红蓝按钮分别接 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

发表评论

登录后才能评论
QR code