电子说
步骤1:所需零件
我使用了PIC 16F887单片机,但几乎具有脉冲宽度调制功能的设备将起作用。
1 RGB LED
1微处理器
1标准红色LED
1 1k欧姆电阻器
1光敏电阻(根据其上照射的光量来改变电阻)
某些电线
》我只需要微控制器和RGB LED即可拥有广泛的颜色检测器,但是如果您只想检测一种颜色的电路,则不需要微控制器-您只需要一个想要的颜色的明亮LED检测。标准的红色LED是“指示灯LED”-在检测到正确的颜色时会点亮。
步骤2:构建电路
原理图非常简单,下面以一般形式显示。 RGB LED由PWM信号从外部供电。
我将胶带缠在光敏电阻上,这样环境光就不会进入-仅能检测到正上方的光。
第3步:代码
该代码是为Microchip PIC 16F887编写的,但希望您能得到大致的认识。我使用了开发板上的内置电位计来改变RGB LED的光谱(由于没有3个PWM模块,所以它无法遍历整个光谱,但这已经足够了)
评论包括在内。
#include 《16F887.h》
#include
#include“ delay.c”
#include
#include
#use delay(时钟= 4000000)
#FUSES INTRC,NOWDT,NOPUT,NOMCLR,NOPROTECT,NOCPD,NOBROWNOUT,NOIESO,NOFCMEN,NOLVP
#byte CCP1CON = 0x17
#byte CCP2CON = 0x1D
#byte PWM1CON = 0x9B
int值= 128;
int p1 = 0;
int p2 = 0;
void my_setup_ccp1(int8值)
{
output_low (PIN_C2);
CCP1CON =值;
PWM1CON = 0;
}
void my_setup_ccp2(int8值)
{
output_low(PIN_C1);
CCP2CON =值;
}
//=================================
void main( )
{
//A4 =光电二极管的电源
output_high(PIN_A4);
output_high(PIN_B1);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
》 setup_adc_ports(sAN0);
//定时器/中断设置
enable_interrupts(INT_TIMER2);
my_setup_ccp1(CCP_PWM);
my_setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY) ;
//setup_compare(2,COMPARE_PWM | COMPARE_TIMER2);
while(1){//防止PI
//设置PWM占空比
output_high(PIN_A5);
//Pin A3是光电二极管连接
if(input(PIN_A3)== 1)
output_high(PIN_A4);
else
output_low(PIN_A4);//读取电位器的值以更改LED的颜色
value = read_adc();
开关(值){
case 0:
p1 =值;
output_low(PIN_C0);
p2 =值;
break;
case 50:
p1 =值;
output_high(PIN_C0 );
p2 =值;
break;
情况100:
p1 =值;
output_high(PIN_C0);
p2 =值;
break;
情况150:
output_high(PIN_C0);
p1 = 50;
p2 =值;
break;
情况200:
output_low(PIN_C0);
p1 = 0 ;
p2 =值;
break;
case 250:
p1 = 0;
p2 =值;
output_low(PIN_C0);
break;
}
p1 =值;
p2 = 128-p1;
set_pwm1_duty(p1);
set_pwm2_duty(p2);
}
}
第4步:应用程序!
像这样的简单颜色检测器可以用于机器人技术,也可以用于很酷的项目,例如用col分隔legos。或对M&M进行分类,或作为色盲的辅助。
全部0条评论
快来发表一下你的评论吧 !