1、代码
1.1 arduino代码
一个传感器,绿色置高,白色置低,通过引脚判别这两种颜色
int num = 0;
int green_num=0;
void setup(){
Serial.begin(9600); //Start serial communication boud rate at 9600
pinMode(7,INPUT); //Pin 2 as signal input
}
void loop(){
while(1){
delay(500);
if(digitalRead(7)==LOW){
// If no signal print collision detected
Serial.println("WHITE");
// num++;
// Serial.println(num);
}
else{
// If signal detected print collision detected
Serial.println("GREEN");
// green_num++;
// Serial.println(green_num);
}
}
1.2 python代码(K210,使用maixpy IDE)
四个传感器,绿色置高,白色置低,通过引脚判别这两种颜色
from fpioa_manager import fm, board_info
from board import board_info
from Maix import GPIO
#32 30 28 26
#class GPIO(ID,MODE,PULL,VALUE)
fm.register(board_info.SPI0_MISO,fm.fpioa.GPIO1)
fm.register(board_info.SPI0_MOSI,fm.fpioa.GPIO2)
fm.register(board_info.MIC0_WS,fm.fpioa.GPIO3)
fm.register(board_info.MIC0_BCK,fm.fpioa.GPIO4)
sensor1=GPIO(GPIO.GPIO1,GPIO.IN)
sensor2=GPIO(GPIO.GPIO2,GPIO.IN)
sensor3=GPIO(GPIO.GPIO3,GPIO.IN)
sensor4=GPIO(GPIO.GPIO4,GPIO.IN)
if sensor1.value()==1 :
sensor_value &= 0b1110
else :
sensor_value |= 0b0001
if sensor2.value()==1 :
sensor_value &= 0b1101
else :
sensor_value |= 0b0010
if sensor3.value()==1 :
sensor_value &= 0b1011
else :
sensor_value |= 0b0100
if sensor4.value()==1 :
sensor_value &= 0b0111
else :
sensor_value |= 0b1000
print(sensor_value)
2、原理与连线
E18-F10NK是一种集发射与接收于一体的色标传感器,类型为:NPN常开型输出。单色光源经过调制后发出,被检测物反射后,经接收头对进行解调输出。有效的避免了环境可见光的干扰。
双透镜的使用,延长了传感器的检测距离。另外在实际使用中,还可以通过传感器尾部的电位器旋钮改变传感器的探测范围。
本色标传感器,具有探测距离远、不受可见光干扰、易于装配、使用方便等特点,可以被应用于物品定位、颜色识别等用途,可以用作广告卷帘灯箱、包装机、切割机等多种生活化工产品上。
色标传感器就其原理来说并不是检测颜色,它是通过检测色标对光束的反射或吸收量与周围材料相比的不同而实现检测的。所以,颜色的识别要严格与照射在目标上的光谱成分相对应。
在单色光源中,绿光LED(565mm)和红光LED(660mm)各有所长。绿光在很宽的颜色范围内比红光源灵敏度高。红光LED对有限的颜色组合有响应,但它的检测距离比绿光LED远。通常红光源传感器的检测距离是绿光源传感器的6~8倍。
3、拓展
利用继电器控制,需要时开启
from fpioa_manager import fm, board_info
from board import board_info
from Maix import GPIO
#控制sensor0的开关 12 LED_B
#sensor信号线 13 LED_G
fm.register(board_info.LED_B,fm.fpioa.GPIO5)
sensor_switch = GPIO(GPIO.GPIO5,GPIO.OUT)
fm.register(board_info.LED_G,fm.fpioa.GPIO0)
sensor0 = GPIO(GPIO.GPIO0,GPIO.IN)
def check_color():
#0为开,1为关
global num_timer
global flag
//开色标传感器
sensor_switch.value(0)
utime.sleep_ms(500)
#红色
if sensor0.value()==0:
//做一些事,然后关掉
sensor_switch.value(1)
#蓝色
else :
//做一些事,然后关掉
sensor_switch.value(1)
4、评价
4.1 优点
(1)色标传感器便宜,25块钱左右
(2)简单稳定,只有正负极和信号线,包装好,连线简单
4.2 缺点
(1)只能判别两种颜色,而且两种颜色有要求
(2)便宜质量参差不齐
5、对比
与颜色传感器TCS3200的对比:色标传感器更稳定,简单易用,但是不能区分多种颜色,只能区分对比度大的两种颜色。便宜的颜色传感器只适合静态,连线多易出故障难以排查。
颜色传感器相关信息:https://blog.csdn.net/chotin/article/details/103001186