實驗目的
練習用光敏電阻控制伺服馬達(Servo motor)。以兩顆光敏電阻做一個簡單的光源追蹤系統,當發現左邊比較亮時,就控制伺服馬達旋轉到左邊,當發現右邊比較亮時,就控制伺服馬達旋轉到右邊。
讀者必備知識
為了順利進行本項實驗,你必須先知道底下這些基礎知識:
- 認識光敏電阻。相關資訊可參考「Lab8 使用光敏電阻控制 LED 的開關」一文。
- 知道如何控制伺服馬達。相關資訊可參考「Lab16 使用可變電阻控制伺服馬達」一文。
材料
- 麵包板 x 1
- Arduino 主板 x 1
- 光敏電阻(photocell) x 2
- 伺服馬達(Servo Motor) x 1
- 10k ohm 電阻 x 2
- 單心線 x N
接線
伺服馬達有三條線,電源(紅線)、接地(黑線),以及訊號線。
- 伺服馬達紅線接到 +5v,黑線接到 GND,訊號線接到 pin 9
- 左手邊的光敏電阻一支腳接到 5V,另一支腳串接一顆 10k 電阻接到 analog pin 0
- 右手邊的光敏電阻一支腳接到 5V,另一支腳串接一顆 10k 電阻接到 analog pin 1
下圖是本實驗的接法,為了判斷哪一邊光線比較強,所以稍微折彎了兩顆光敏電阻,讓它一顆往左彎,另一顆往右彎:
電路圖
程式碼
版本一(PhotocellServo.pde): 底下是這個簡單光源追蹤系統的程式碼,程式的邏輯是,當發現左邊比較亮時,就控制伺服馬達旋轉到左邊(旋轉到 0 度),當發現右邊比較亮時,就控制伺服馬達旋轉到右邊(旋轉到 180 度)。程式同時把左右兩顆光敏電阻的讀值印到了 Serial port,到時就可以用 Serial Monitor 觀察光敏電阻數值的變化。
編譯這支程式,然後上傳到 Arduino,接著打開 Serial Monitor 就可以看到左右兩顆光敏電阻數值的變化:
底下是示範影片:
版本二(PhotocellServoV2.pde): 這個版本增加一個功能,當左右兩邊光敏電阻光線相差不多時,就控制伺服馬達讓它旋轉到 90 度。
動動腦
光敏電阻加上伺服馬達,像這樣的組合可以應用在哪些地方呢?
你好,想請問關於第一個程式碼以及第二個程式碼的19行:
回覆刪除int readingLeft, readingRight、 int readingLeft, readingRight, difference 這樣寫是甚麼意思呢?如果沒有這一行,會有甚麼影響呢?
int readingLeft, readingRight, difference;
回覆刪除這行是宣告 3 個 int 的變數,readingLeft 是用來儲存左邊光敏電阻的讀值,readingRight 是用來儲存右邊光敏電阻的讀值,而 difference 則是左邊跟右邊光敏電阻的差值。
C/C++ 還有 Arduino 程式的變數,在使用前都要事先宣告變數的型別,如果沒有這一行的話,程式就不能通過編譯囉。
這張電路圖是不是畫錯了?
回覆刪除SensorLeft怎直接拉到GND?
沒有啊,SensorLeft 有接一顆 10k 電阻,沒有直接拉到 GND 啊。哇~ pizgchen 我每一篇文章你都看啊!哈,你太捧場了,謝謝。
回覆刪除請您仔細看一下, 是線條那一張電路圖畫錯了,麵包板那一張圖是對的.
回覆刪除呵~~是啊...我是您的超級大粉絲...您的每一篇文章我都看了.
真的耶!我電路圖畫錯了,你眼力真好。
回覆刪除Fritzing 電路圖通常都還需要整理,不然會有點亂,之前為了把電路圖整理得清楚一點,所以我把電路圖位置重新安排,結果沒注意到電阻放錯位置了。謝謝您的提醒。
太感謝您的捧場了!
我是個初學者,我想寫一個用單一個光敏电阻用來控制Sevro motor,motor可以左右轉動,容易寫出來?請指點?kwtam70@Yahoo.com.hk
回覆刪除你打算怎麼控制?
回覆刪除比較亮時向某個方向轉,比較暗時向另一個方轉嗎?
如果是這樣,應該是很簡單的,就:
if (sensorReading > 512)
myservo.write(0);
else
myservo.write(180);
當然角度最好要根據光線強度算一下
thankyou。我會嘗試。
回覆刪除如果我想用dc relay或者用dc motor來代替servo motor.可以嗎?如果用relay 和dc motor代替servo motor ,程式上要有什麼改變?
回覆刪除要看你想怎麼控制,這篇的控制邏輯是「當發現左邊比較亮時,就控制伺服馬達旋轉到左邊,當發現右邊比較亮時,就控制伺服馬達旋轉到右邊。」也許你可以改成「當發現左邊比較亮時,就打開 relay,當發現右邊比較亮時,就關掉 relay」....
回覆刪除「當發現左邊比較亮時,就控制伺服馬達旋轉到左邊,當發現右邊比較亮時,就控制伺服馬達旋轉到右邊。」也許你可以改成「當發現左邊比較亮時,就打開 relay,當發現右邊比較亮時,就關掉 relay。
回覆刪除如果我想用以上的功能,程式是否改變(將伺服馬達改為relay)?
光敏电阻,要用什麼型號和什麼阻值?是否光敏电阻的阻值越小越好?
光敏電阻大部份都可以用啊
回覆刪除阻值 10k 左右就可以了,阻值愈高讀值會愈大