37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗七十七:模擬灰度傳感器 (反射式光電模塊)
灰度
灰度使用黑色調表示物體,即用黑色為基准色,不同的飽和度的黑色來顯示圖像。 每個灰度對象都具有從 0%(白色)到100%(黑色)的亮度值。 使用黑白或灰度掃描儀生成的圖像通常以灰度顯示。使用灰度還可將彩色圖稿轉換為高質量黑白圖稿。 在這種情況下,Adobe Illustrator 放棄原始圖稿中的所有顏色信息;轉換對象的灰色級別(陰影)表示原始對象的亮度。將灰度對象轉換為 RGB 時,每個對象的顏色值代表對象之前的灰度值。 也可以將灰度對象轉換為 CMYK 對象。自然界中的大部分物體平均灰度為18%。在物體的邊緣呈現灰度的不連續性,圖像分割就是基於這個原理。
灰度色
所謂灰度色,就是指純白、純黑以及兩者中的一系列從黑到白的過渡色。我們平常所說的黑白照片、黑白電視,實際上都應該稱為灰度照片、灰度電視才確切。灰度色中不包含任何色相,即不存在紅色、黃色這樣的顏色。灰度的通常表示方法是百分比,范圍從0%到100%。Photoshop中只能輸入整數,在Illustrator和GoLive允許輸入小數百分比。 注意這個百分比是以純黑為基准的百分比。與RGB正好相反,百分比越高顏色越偏黑,百分比越低顏色越偏白。
在計算機領域中,灰度(Gray scale)數字圖像是每個像素只有一個采樣顏色的圖像。這類圖像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個采樣可以任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色。灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑白兩種顏色,灰度圖像在黑色與白色之間還有許多級的顏色深度。但是,在數字圖像領域之外,“黑白圖像”也表示“灰度圖像”,例如灰度的照片通常叫做“黑白照片”。在一些關於數字圖像的文章中單色圖像等同於灰度圖像,在另外一些文章中又等同於黑白圖像。 灰度圖像經常是在單個電磁波頻譜如可見光內測量每個像素的亮度得到的。
用於顯示的灰度圖像通常用每個采樣像素8 bits的非線性尺度來保存,這樣可以有256種灰度(8bits就是2的8次方=256)。這種精度剛剛能夠避免可見的條帶失真,並且非常易於編程。在醫學圖像與遙感圖像這些技術應用中經常采用更多的級數以充分利用每個采樣10或12 bits的傳感器精度,並且避免計算時的近似誤差。在這樣的應用領域流行使用16 bits即65536個組合(或65536種顏色)。 灰度最高相當於最高的黑,就是純黑。灰度最低相當於最低的黑,也就是“沒有黑”,那就是純白。 雖然灰度共有256級,但是由於Photoshop的灰度滑塊只能輸入整數百分比,因此實際上從灰度滑塊中只能選擇出101種(0%也算一種)灰度。大家可以在灰度滑塊中輸入遞增的數值然后切換到RGB滑塊察看,可以看到:0%的灰度RGB數值是255,255,255;1%灰度的RGB數值是253,253,253;2%灰度RGB值為250,250,250。也就是說,252,252,252這樣的灰度是無法用Photoshop的灰度滑塊選中的。相比之下Illustrator的灰度允許輸入兩位小數,使得選色的精確性大大提高了 。
256級灰度卡
灰度傳感器是模擬傳感器,與Arduino 傳感器擴展板v5.0結合使用,可以感知地面或桌面不同的顏色而產生相應的信號,可實現與顏色有相關的互動作品,也可以作為巡線小車的巡線傳感器或者足球機器人的場地灰度識別。電源需要和控制器一致,通常為3.3V或5V。
規格參數
工作電壓 :3.3V或5V
工作電流 :< 20mA
工作溫度范圍:-10℃~+70℃
探測分辨率:10%
接口類型:模擬信號輸出
尺寸大小:24mm x 21mm
重量大小:3g
模塊電原理圖
工作原理
灰度傳感器包括一個白色高亮發光二極管和一個光敏電阻,由於發光二極管照射到灰度不同的紙張上返回的光是不同的,光敏電阻接收到返回的光,根據光的強度不同,光敏電阻的阻值也不同,從而實現灰度值的測試。基於半導體的光電效應原理所開發的光線與灰度傳感器,其主要部件為光電晶體管。在有效的檢測距離內,發光二極管發出白光,照射在檢測面上,檢測面反射部分光線,光電晶體管電阻隨光的強度增加而減小,通過和電阻串聯,輸出電阻的分壓值,便能將變化的光信號變換為變化的電氣信號,並從模擬口輸出,板上的LED可以用來調試。例如:LED的光照在不同顏色的材料上,通過觀察光傳感器讀取的值的范圍,來制作顏色識別器或者循跡小車。
模塊編程原理
灰度傳感器共引出三個引腳,分別是電源正Vcc、電源地GND、信號端OUT,實際使用時可以直接將傳感器連接到 Arduino 控制器的模擬接口,例如模擬口 A0,給 Arduino 通電后,傳感器白色高亮 LED 亮起,將傳感器扣放在灰度不同的紙張上,通過 Arduino 控制器自帶的 AD 轉換進行數據的讀取,然后通過串口打印出測量的模擬量即可。
發光二極管與1K電阻串聯,發光二極管作為光源,照射在檢測物體上,1K電阻起限流作用。光敏電阻與10K電阻串聯,光敏電阻具有光越強阻值越小的特性。當發光二極管照在白色物體上時,白色物體反射所有光,亮度強,光敏電阻阻值小,分壓小,out點輸出的電壓值高;當發光二極管照在黑色物體上時,黑色物體吸收所有光,亮度弱,光敏電阻阻值大,分壓大,out點輸出的電壓值低。
實驗開源代碼
/* 【Arduino】166種傳感器模塊系列實驗(79) 實驗七十九: 模擬灰度傳感器 (反射式光電模塊) OUT——A0 讀取串口灰度模擬數值 板載燈——D13 */ void setup() { Serial.begin(9600); pinMode(A0, INPUT); } void loop() { int val; val=analogRead(0); Serial.println(val,DEC); delay(1000); }
程序效果
當你檢測到不同灰度值時,反饋回此時的測量值。如下圖所示,此圖是當灰度傳感器檢測到85%的灰度值,串口反饋回來的數據示意圖。 實測白色(灰度高)數值為800多,黑色(低灰度)數值大約400多。
實驗場景圖
實驗二開源代碼
/* 【Arduino】66種傳感器模塊系列實驗(79) 實驗七十九: 模擬灰度傳感器 (反射式光電模塊) OUT——A0 板載燈——D13 程序之二,控制板載燈,低灰度時燈暗,反之燈亮 */ int Led = 13; int buttonpin = A0; int val; void setup() { pinMode(Led, OUTPUT); pinMode(buttonpin, INPUT); } void loop() { val = digitalRead(buttonpin); if (val == HIGH) { digitalWrite(Led, HIGH); } else { digitalWrite(Led, LOW); } }
實驗開源圖形編程(Mind+、編玩邊學)
實驗開源仿真編程(Linkboy V4.2)