耗材:
1x面包板
1x RGB LED(適用于12V RGB燈條的LED)
2x 470歐姆電阻
1x 240歐姆電阻
1x 10 Kohm電阻器
電線
Arduino(任何5V型號都可以工作)
步驟1:制作電路
接線圖非常簡單。
你可以在面包板上制作電路,或者如果你可以蝕刻或銑削電路板空白,當然,這將是更好的選擇。
綠色和藍色LED需要470歐姆,紅色LED需要240歐姆。這是因為LED的工作電壓不同。 LED必須全部以相同的亮度發光。
光電晶體管配有一個10k歐姆的下拉電阻。
就是這樣。
唯一要記住的是晶體管直接放在LED旁邊
步驟2:它是如何工作的?
設置簡單,操作非常簡單。 LED的顏色交替切換。首先是紅色然后是綠色然后是藍對于每種顏色,測量反射強度。例如,對于紅色物體,紅色的反射比其他兩種顏色的反射強。對于紫色物體,紅色和藍色比綠色更強烈。剩下要做的就是通過Arduino的ADC讀取模擬值,這樣就可以得到物體的RGB值。
在正常光線下查看填充動物的例子,所有顏色都很正常。在紅光的情況下,毛皮反射一點,綠色幾乎是黑色,藍色反射很多,這意味著紫羅蘭具有高藍色含量
為什么傳感器如此快?光電晶體管的每種顏色的響應時間為14μs,這意味著所有顏色的響應時間為42μs。
如果計算f = 1/t,則得到23.8 KHz。這意味著在一秒鐘內進行了23800次測量。
你的ADC從來沒有這么快,他的性能達到了極限。
然而,通過給傳感器更多的時間進行調整可以獲得最佳效果,所以大約1 ms每種顏色,仍然意味著166赫茲。
為了最大限度地降低傳感器的噪音,您應該進行大約5次測量并計算這些測量的算術平均值。
步驟3:將其連接到您的Arduino和Use It
要將傳感器連接到Arduino,你應該有四個空閑引腳。
gnd - 》 gnd
5V - 》 5V
輸出 - 》 A0
r - 》 2
b - 》 3
g - 》 4
現在將代碼復制到Arduino IDE中并進行編譯。
這是一個沒有降噪的極簡代碼(步驟2中描述)。
#include
int sensor = A0;
int red = 2;
int blue = 3;
int green = 4;
int colour[] = {0,0,0};
char text[20];
int n =0;
void setup() {
// put your setup code here, to run once:
pinMode(red,OUTPUT);
pinMode(blue,OUTPUT);
pinMode(green,OUTPUT);
Serial.begin(9600);
} void loop() {
// put your main code here, to run repeatedly:
detect();
n=sprintf(text,“r %d g %d b %d ” ,colour[1],colour[2],colour[3]);
Serial.write(text,n);
delay(1000);
} void detect() {
digitalWrite(red, HIGH);
delay(1);
colour[1]=analogRead(sensor);
digitalWrite(red, LOW);
delay(1);
digitalWrite(green, HIGH);
delay(1);
colour[2]=analogRead(sensor);
digitalWrite(green, LOW);
delay(1);
digitalWrite(blue, HIGH);
delay(1);
colour[3]=analogRead(sensor);
digitalWrite(blue, LOW);
delay(1);
colour[1]=colour[1]/4;
colour[2]=colour[2]/4;
colour[3]=colour[3]/4;
}
上傳到您的arduino后,您必須啟動串行監視器才能看到RGB值。
傳感器最佳工作距離在0.5到1厘米之間。在更遠的距離,顏色變得更暗。該傳感器是色彩檢測任務和尋線儀的理想選擇。您可以將PCB和部件涂成啞光黑色,以減少反射。不要忘記讓組件的窗口自由。
這個傳感器不是原型。該傳感器用于德國南符騰堡州學生研究中心的Robocup德國救援隊。為此,我構建了一個帶有綜合評估的8倍傳感器。他將已經完成并校準的RGB值發送到中央處理器。
-
顏色傳感器
+關注
關注
2文章
96瀏覽量
18193
發布評論請先 登錄
相關推薦
評論