# Arduino筆記 05. 使用光敏電阻(CdS)控制Servo ## 實驗項目: 利用讀取光敏電阻的類比輸入值來控制Servo作動 ## 學習重點: 1. 了解光敏電阻元件特性類似可變電阻,唯其為隨環境照度而改變阻值,相對其分壓值也會改變。(參考Arduino 互動設計入門 p.6-6 電阻分壓公式) > [color=#e52b02]電阻分壓計算待深入了解 2. 了解如何利用函式write()控制Servo。 ## 實驗電路:  {%youtube nRbz5OOk4is %} > [color=#e52b02]**注意:** 因為Arduino 5V電源只有一孔, 因此Servo應採外接電源。外接電源接法可參考Arduino 互動設計入門 p.11-7或以下論壇。 > [power your servo externally](https://arduino.stackexchange.com/questions/57508/connecting-an-arduino-to-a-servo-with-an-external-power-supply)  ## 程式碼: ```cpp= //使用光敏電阻控制Servo轉動 #include <Servo.h> Servo myservo; //建立一個servo const byte photocellPin = A2; //定義光敏電阻腳位 int photocellVal = 0; //光敏電阻類比值 int minLight = 100; //最小光線臨界值 int pos = 0; //servo位置變數 int reset = 0; //servo校正位置0度 int flag = 0; //判斷serveo順時針(0)或逆時針(1)的旗標 void setup() { Serial.begin(9600); myservo.attach(9); // attaches the servo on pin 9 to the servo object myservo.write(reset); // servo校正至0度 } void loop() { photocellVal = analogRead(photocellPin); // 讀取光敏電阻類比值 Serial.println(photocellVal); // 監測光敏電阻類比值or Servo角度 if(photocellVal < minLight){ if (flag == 0){ pos++; myservo.write(pos); // 告訴 servo 走到 'pos' 的位置 delay(5); // 等待 5ms 讓 servo 走到指定位置 if (pos == 180) // 角度++到180度時,改逆時針轉 flag = 1 ; } if (flag == 1){ pos--; myservo.write(pos); // 告訴 servo 走到 'pos' 的位置 delay(5); // 等待 5ms 讓 servo 走到指定位置 if (pos == 0) // 角度--到0度時,改順時針轉 flag = 0 ; } } } ``` ## 延伸學習: * N/A ## 參考資料: * Arduino 互動設計入門動手做6-2 (p.6-7)。 * 2021 交大創客營超級電子元件課程第一題。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.