步驟1:所需零件
我使用了PIC 16F887單片機,但幾乎具有脈沖寬度調制功能的設備將起作用。
1 RGB LED
1微處理器
1標準紅色LED
1 1k歐姆電阻器
某些電線
》我只需要微控制器和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( )
{
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進行分類,或作為色盲的輔助。
-
led
+關注
關注
242文章
23141瀏覽量
658543 -
PIC16F887
+關注
關注
1文章
17瀏覽量
6747
發布評論請先 登錄
相關推薦
評論