红外传感器

Arduino 开源 红外 定位探头 IIC 协议 processing互动

字号+ 作者:PLC工程师 来源:未知 2016-03-26 22:07 我要评论( )

Arduino 开源 红外 定位探头 IIC 协议 processing互动

产品简介
 
红外定位摄像头可以用arduino、AVR等各种有I2C接口的控制器控制。最多可以追踪4个移动的红外点,并且把这些数据提供给主机。水平视角是33度,垂直视角是23度。一次返回四个点的坐标,当红外定位摄像头识别一个对象。它相应的坐标就是在第一组坐标位置,其他坐标位置为空(返回1023,1023)。如果识别多个目标则,按照检测到的先后顺序依次排列,如果其中有的运动目标移动出了视野,则相应的位置为空(返回1023,1023)。其余坐标位置保持不变。
 
红外定位摄像头可追踪4个移动的红外点,分辨率是1024 X 768.
 
与processing互动
 
 
红外定位摄像头可以通过arduino等各种具有I2C接口的控制器通过串口连接到processing上面,实时的显示出检测到的目标的坐标位置及数值。不要感觉这些是很不可思议的事情,强大的红外摄像头还具有更多好玩的功能,可以和processing做出各种各样的互动产品,只要你是喜欢玩的人、肯花心思思考这些都可以轻松实现。
 
应用实例
 
机器人自动寻源装置
机器人足球比赛
移动轨迹识别
 
技术规格
 
工作电压:5V、3.3V
检测距离:0~3m
接口:I2C接口
不同距离可检测的范围
距离(cm)——水平距离(cm)—— 垂直距离(cm)
10(cm)————8.5(cm)————7.5(cm)
50(cm)————42(cm)—————32(cm)
100(cm)———7(cm)——————60(cm)
注:其他距离规律相同。


 
引脚定义
 
红线:接电源5V或者3.3V
黄线:接地
绿线:SDA
蓝线:SCL
 
配送清单
 
红外定位探头      x1
 
Arduino代码:

// Wii Remote IR sensor  test sample code  by kako http://www.kako.com
// modified output for Wii-BlobTrack program by RobotFreak http://www.letsmakerobots.com/user/1433
// modified for http://DFRobot.com by Lumi, Jan. 2014
 
#include <Wire.h>
 
int IRsensorAddress = 0xB0;
//int IRsensorAddress = 0x58;
int slaveAddress;
int ledPin = 13;
boolean ledState = false;
byte data_buf[16];
int i;
 
int Ix[4];
int Iy[4];
int s;
 
void Write_2bytes(byte d1, byte d2)
{
    Wire.beginTransmission(slaveAddress);
    Wire.write(d1); Wire.write(d2);
    Wire.endTransmission();
}
 
void setup()
{
    slaveAddress = IRsensorAddress >> 1;   // This results in 0x21 as the address to pass to TWI
    Serial.begin(19200);
    pinMode(ledPin, OUTPUT);      // Set the LED pin as output
    Wire.begin();
    // IR sensor initialize
    Write_2bytes(0x30,0x01); delay(10);
    Write_2bytes(0x30,0x08); delay(10);
    Write_2bytes(0x06,0x90); delay(10);
    Write_2bytes(0x08,0xC0); delay(10);
    Write_2bytes(0x1A,0x40); delay(10);
    Write_2bytes(0x33,0x33); delay(10);
    delay(100);
}
void loop()
{
    ledState = !ledState;
    if (ledState) { digitalWrite(ledPin,HIGH); } else { digitalWrite(ledPin,LOW); }
 
    //IR sensor read
    Wire.beginTransmission(slaveAddress);
    Wire.write(0x36);
    Wire.endTransmission();
 
    Wire.requestFrom(slaveAddress, 16);        // Request the 2 byte heading (MSB comes first)
    for (i=0;i<16;i++) { data_buf[i]=0; }
    i=0;
    while(Wire.available() && i < 16) { 
        data_buf[i] = Wire.read();
        i++;
    }
 
    Ix[0] = data_buf[1];
    Iy[0] = data_buf[2];
    s   = data_buf[3];
    Ix[0] += (s & 0x30) <<4;
    Iy[0] += (s & 0xC0) <<2;
 
    Ix[1] = data_buf[4];
    Iy[1] = data_buf[5];
    s   = data_buf[6];
    Ix[1] += (s & 0x30) <<4;
    Iy[1] += (s & 0xC0) <<2;
 
    Ix[2] = data_buf[7];
    Iy[2] = data_buf[8];
    s   = data_buf[9];
    Ix[2] += (s & 0x30) <<4;
    Iy[2] += (s & 0xC0) <<2;
 
    Ix[3] = data_buf[10];
    Iy[3] = data_buf[11];
    s   = data_buf[12];
    Ix[3] += (s & 0x30) <<4;
    Iy[3] += (s & 0xC0) <<2;
 
    for(i=0; i<4; i++)
    {
      if (Ix[i] < 1000)
        Serial.print("");
      if (Ix[i] < 100)  
        Serial.print("");
      if (Ix[i] < 10)  
        Serial.print("");
      Serial.print( int(Ix[i]) );
      Serial.print(",");
      if (Iy[i] < 1000)
        Serial.print("");
      if (Iy[i] < 100)  
        Serial.print("");
      if (Iy[i] < 10)  
        Serial.print("");
      Serial.print( int(Iy[i]) );
      if (i<3)
        Serial.print(",");
    }
    Serial.println("");
    delay(15);
}



如需更详细资料,如有好资源分享,请加入QQ交流群:214461008

欢迎阅读,欢迎转载,不用注明出处!本站只提供入门和进阶资料,做您学习的小伙伴!

老司机也欢迎光临指导!有好内容请加群:214461008 不要看声明了,看内容吧!

相关文章
网友点评
Arduino