情境:當小偷進門,手電筒照到Robi的眼睛,Robi會轉頭向比較亮的那邊,並且發出幽幽綠光來嚇人。影片最後有一個很吵的聲音,那個是按壓式手電筒的聲音,不是伺服馬達喲。
材料:
Arduino Uno Rev 3. | 1 |
10K ohm 電阻,接光敏電阻 | 2 |
220 ohm 電阻,接LED | 2 |
光敏電阻 | 2 |
綠光LED | 2 |
伺服馬達 | 1 |
線路接續圖
※因改造引起的Robi故障,本人及本站都不負賠償任,進行改造前需有小朋友出走的覺悟。
程式碼下載https://box.nctu.edu.tw/public.php?service=files&t=f44de60f2b6cd3c2455a8c42b0de4fde
程式碼
// 使用光敏電阻控制 Servo
// 引用 Servo Library
#include <Servo.h>
// 建立一個 Servo 物件
Servo myservo;
// 兩顆光敏電阻接在 Analog pin 0 及 pin 5
int sensorLeft = 0;
int sensorRight = 5;
//一定要接到第11腳,因為第10腳不支援模擬類比輸出,所以無法營造出燈光幽幽亮起的樣子。
int LED_Right = 11;
int LED_Left = 11;
void setup()
{
Serial.begin(9600);
myservo.attach(9); // Servo 接在 pin 9
pinMode(LED_Right, OUTPUT);
//pinMode(LED_Left, OUTPUT);
}
void loop()
{
int readingLeft, readingRight;
int i;
// 讀取左右兩顆光敏電阻的讀值
readingLeft = analogRead(sensorLeft);
readingRight = analogRead(sensorRight);
// 印出左右兩顆光敏電阻的讀值,DEBUG用
Serial.print("left: "); Serial.print(readingLeft);
Serial.print(" right: "); Serial.println(readingRight);
//如果二隻眼睛的光敏電阻讀值相差大於等於30才轉頭
if (abs(readingLeft-readingRight)>=30) {
if (readingLeft > readingRight) {
myservo.write(50); // 設定 Servo 旋轉角度
delay(150); // 等 Servo 旋轉
Ghost_LED ();
} else {
// 右邊光敏電阻較亮,控制 Servo 轉到 120 度
myservo.write(120); // 設定 Servo 旋轉角度
delay(150); // 等待 Servo 旋轉
Ghost_LED ();
}
}
delay(1000) ;
}
void Ghost_LED ()
{
for (int i=0;i<=127;i++) //從最暗開始慢慢亮起
{
//analogWrite(LED_Left, i*2+1);
analogWrite(LED_Right, i*2+1);
delay(50);
}
for (int i=127;i>=0;i--) //從最亮開始慢慢熄掉
{
//analogWrite(LED_Left, i*2+1);
analogWrite(LED_Right, i*2+1);
delay(25);
}
for (int i=0;i<=255;i++) //從最暗開始慢慢亮起,這次拉長燈光變亮的時間
{
//analogWrite(LED_Left, i);
analogWrite(LED_Right, i);
delay(50);
}
for (int j=0;j<=2;j++) //快速閃爍二下,營造嚇人的氣氛
{
//analogWrite(LED_Left, 0);
analogWrite(LED_Right, 0);
delay(1000);
//analogWrite(LED_Left, 255);
analogWrite(LED_Right, 255);
delay(1000);
}
//analogWrite(LED_Left, 0); //最後把燈光熄滅,等下一個事件觸發。
analogWrite(LED_Right, 0);
}
|
全站熱搜
留言列表