“SKU:RB-02S103 复眼传感器”的版本间的差异
来自ALSROBOT WiKi
(以“右 ==产品概述== 复眼传感是奥松机器人推出的复眼传感器由许多对红外线敏感的晶体管和发光...”为内容创建页面) |
(→产品参数) |
||
第9行: | 第9行: | ||
===基本参数=== | ===基本参数=== | ||
− | + | #品名 红外线复眼传感器<br/> | |
− | + | #货号 RB-02S103<br/> | |
− | + | #品牌 AlsRobot<br/> | |
− | + | #产地 哈尔滨<br/> | |
− | + | #尺寸 50mm×48mm<br/> | |
− | + | #重量 9g<br/> | |
− | + | #包装 防静电包装<br/> | |
− | + | #固定孔 M3*4个<br/> | |
− | + | ||
===电气参数=== | ===电气参数=== | ||
#产品类型:数字传感器<br/> | #产品类型:数字传感器<br/> |
2018年4月17日 (二) 11:53的版本
目录 |
产品概述
复眼传感是奥松机器人推出的复眼传感器由许多对红外线敏感的晶体管和发光二极管组成。它可以追踪20厘米范围内物体的移动。尽管传感器是一个整体,但是你依然可以读取到每一个红外线(IR)光敏晶体管的信息。复眼传感器采用IIC通讯方式,数据传输更加简便。
校正周围光线是通过关闭IR LED和比较数值完成的。如果要改善从复眼中读取的数值,你必须要进行校准。最好等到晚上当IR光线不存在时进行。注意红外线可以穿过关闭的百合窗,所以如果你不想等到晚上,可以去地下室,或者是没有窗户的房间,这样就可以测量数值了。将一张纸置于传感器的前方(约20厘米远),观察每支引脚的数值差异。使用纸张时数值差异不大(+/- 100)。如果某个数值过高,可以使用不透明的胶带或热收缩膜阻挡部分红外线。如果数值过低,则阻挡一部分分散到其他传感器上的红外线。
产品参数
基本参数
- 品名 红外线复眼传感器
- 货号 RB-02S103
- 品牌 AlsRobot
- 产地 哈尔滨
- 尺寸 50mm×48mm
- 重量 9g
- 包装 防静电包装
- 固定孔 M3*4个
电气参数
- 产品类型:数字传感器
- 接口类型:4P防插反接口
- 信号类型:IIC数字信号
- 工作电压:3.0V~5.0V
- 工作电流:100mA
- 引脚定义:+ 电源正;- 电源负;SDA IIC数据引脚;SCL IIC时钟引脚
- 连接线: 4P 传感器连接线
- 检测范围:0~20cm
- 工作温度:-20℃~70℃
- 测试范围:上、下、左、右输出四路模拟值范围(0-255)
- 固定孔:M3*4个
- 产品尺寸(mm):50mm*48mm
使用方法
1、连接图
2、例子程序
#include "Wire.h" #include <Servo.h> #define PCF8591 (0x90 >> 1) // I2C bus address byte value0, value1, value2, value3; Servo jjdyz_shang; Servo jjdyz_xia; Servo jjdyz_zhong; Servo myservo; //创建一个舵机控制对象 //const int buttonPin = A0; // 定义红外传感器的接收引脚为模拟A0引脚 //int buttonState = 0; // 定义红外传感器的状态缓存 //定义每个舵机的旋转角度的缓存值 int pos=0; int pos1=0; int pos2=0; int gongji = 0; //定义一个是否处于攻击状态的标志缓存 void jjdyz() { if(value0<2&&value1>value0&&value2>value0&&value3>value0) { if(gongji == 1) //处于攻击状态时,但敌人走了,慢慢恢复到初始位置 { for(pos = 40; pos <= 88; pos += 1) //上面的舵机恢复初始位置 { jjdyz_shang.write(pos); delay(300); } gongji = 0; //解除攻击状态 } } if (value2<2&&value1>value2&&value0>value2&&value3>value2) //检测到前方有猎物,进行攻击,(红外传感器返回低电平) { jjdyz_shang.write(70); delay(200); jjdyz_xia.write(88); delay(200); jjdyz_zhong.write(40); delay(200); gongji = 1; //设置攻击状态缓存为正在攻击 } if (value1<2&&value0>value1&&value2>value1&&value3>value1) { for(pos1 = 88; pos1 < 160; pos1 += 1) // 从0度到180度运动 { // 每次步进一度 jjdyz_xia.write(pos1); // 指定舵机转向的角度 delay(15); // 等待15ms让舵机到达指定位置 } for(pos1 = 160; pos1>=88; pos1-=1) //从180度到0度运动 { jjdyz_xia.write(pos1); // 指定舵机转向的角度 delay(15); // 等待15ms让舵机到达指定位置 } } if (value3<2&&value0>value3&&value0>value3&&value2>value3) { for(pos1 = 88; pos1>=10; pos1-=1) //从180度到0度运动 { jjdyz_xia.write(pos1); // 指定舵机转向的角度 delay(15); // 等待15ms让舵机到达指定位置 } for(pos1 = 10; pos1 < 88; pos1 += 1) // 从0度到180度运动 { // 每次步进一度 jjdyz_xia.write(pos1); // 指定舵机转向的角度 delay(15); // 等待15ms让舵机到达指定位置 } } else { jjdyz_shang.write(88); delay(15); jjdyz_xia.write(88); delay(15); jjdyz_zhong.write(88); delay(15); } } void readvalues(){ Wire.beginTransmission(PCF8591); // wake up PCF8591 Wire.write(0x04); // control byte - read ADC0 then auto-increment Wire.endTransmission(); // end tranmission Wire.requestFrom(PCF8591, 5); value0=Wire.read(); //上 value0=Wire.read(); //上 value1=Wire.read(); // 右 value2=Wire.read(); //下 value3=Wire.read(); //左 Serial.print(value0); Serial.print(" "); Serial.print(value1); Serial.print(" "); Serial.print(value2); Serial.print(" "); Serial.print(value3); Serial.print(" "); Serial.println(); } void setup() { Wire.begin(); gongji = 0; jjdyz_shang.attach(10); //上面的舵机引脚为2 jjdyz_xia.attach(6); //下面的舵机引脚为4 jjdyz_zhong.attach(7); // 中间的舵机引脚为3 //三路舵机初始化 jjdyz_shang.write(88); delay(15); jjdyz_xia.write(88); delay(15); jjdyz_zhong.write(88); delay(15); Serial.begin(9600); } void loop() { readvalues(); jjdyz(); }
说明:通过串口监视器,即可读取传感器返回的数据。