วัตถุประสงค์การทดลอง
1.เพื่อให้สามารถต่อวงจร เพื่อสร้างสัญญาณอะนาล็อคเพื่อเป็นสัญญาณอินพุตให้กับ Arduino2.ฝึกการต่อวงจรโดยใช้ Arduino และ เขียนโค้ด Arduino เพื่อให้ LED ติด/ดับ ตามค่าความเข้มของแสงได้
อุปกรณ์ที่ใช้ในการทดลอง
1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน2. ตัวต้านทานปรับค่าได้ 10kΩ หรือ 20kΩ 1 ตัว
3. ตัวต้านทานไวแสง LDR 1 ตัว
4. ไดโอดเปล่งแสงขนาด 5 มม. 1 ตัว
5. ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
6. ตัวต้านทาน 10kΩ 1 ตัว
7.บอร์ด Arduino (ใช้แรงดัน +5V) 1 บอร์ด
8.สายไฟสําหรับต่อวงจร 1 ชุด
9. มัลติมิเตอร์ 1 เครื่อง
ขั้นตอนการทดลอง
1. ต่อวงจรตาม ผังวงจร รูปที่ 4.4.1 บนเบรดบอร์ด ร่วมกับบอร์ด Arduino ใช้แรงดันไฟเลี้ยงVCC=+5V และ Gnd จากบอร์ด Arduino เท่านั้น (โดยให้ต่อวงจรบนเบรดบอร์ดก่อน จากนั้นจึงเชื่อมต่อ
สัญญาณอินพุตและเอาต์พุตของบอร์ด Arduino เมื่อตรวจสอบความถูกต้อง แล้วจึงป้อนแรงดันไฟ
เลี้ยงและ Gnd ตามลําดับ)
2. เขียนโปรแกรมตามตัวอย่างโค้ดที่กําหนดให้ และทําขั้นตอน Upload จากนั้นให้ทดลองหมุนปรับค่าที่
ตัวต้านทานปรับค่าได้ หรือปิดบริเวณส่วนรับแสงของ LDR เปิดหน้าต่าง Serial Monitor ของ
Arduino IDE แล้วสังเกตข้อความที่ถูกส่งมาจากบอร์ด Arduino
3. ปรับแก้โค้ด เพื่อให้วงจรและบอร์ด Arduino แสดงพฤติกรรมดังนี้ ถ้าปิดส่วนรับแสงของตัว
ต้านทานไวแสง LDR หรือมปริมาณแสงน้อยลง ให้ LED1 “สว่าง” ถ้า LDR ได้รับแสงตาม
สภาวะแสงปรกติ หรือได้รับปริมาณแสงมาก จะทําให LED1 “ ไม่ติด”
4. เขียนรายงานการทดลอง และตอบคําถามท้ายการทดลอง
ผลการทดลอง
ข้อที่ 2
Code Ex
const byte LDR_PIN = A1; //from LDR const byte VREF_PIN = A2; //from Trimpot const byte LED1_PIN = 5; //to LED1 void setup() { pinMode(LED1_PIN,OUTPUT); //กำหนดพฤติกรรมของขาที่เราระบุ digitalWrite(LED1_PIN,LOW); //กำหนดค่า LOW ให้กับ digital pin analogReference(DEFAULT); //เลือกแรงดันอ้างอิงสำหรับป้อนขาอินพุตต์ Serial.begin(9600); //open sesrial port } void loop() { //read analog values int value1 = analogRead(LDR_PIN); int value2 = analogRead(VREF_PIN); //send message to serial port Serial.print("Read"); //พิมพ์ข้อมมูลไปยังพอร์ต จะมีคำว่า Read Serial.print(value1,DEC); //พิมพ์ข้อมมูล ที่เป็นค่าที่ได้จาก พิน (LDR)ไปยังพอร์ต Serial.print(", "); Serial.print(value2,DEC); //พิมพ์ข้อมมูล ที่เป็นค่าที่ได้จาก พิน (Trimpot)ไปยังพอร์ต delay(200); } |
ค่าที่ได้จาก Serial Monitor ของ Arduino IDE
LDR
|
ตัวต้านทานปรับค่าได้
|
||
ปริมาณแสงน้อย
|
ปริมาณแสงมาก
|
R=0kΩ
|
R=20kΩ
|
476
|
805
|
1023
|
0
|
ข้อที่ 3
วงจรที่ใช้ในการทดลอง |
เมื่อ LDR ได้รับปริมาณแสงมาก LED จะดับ |
เมื่อ LDR ได้รับแสงสว่าน้อยลง LED จะติด |
Code
const byte LDR_PIN = A1; //from LDR const byte VREF_PIN = A2; //from Trimpot const byte LED1_PIN = 5; //to LED1 void setup() { pinMode(LED1_PIN,OUTPUT); //กำหนดพฤติกรรมของขาที่เราระบุ digitalWrite(LED1_PIN,LOW); //กำหนดค่า LOW ให้กับ digital pin analogReference(DEFAULT); //เลือกแรงดันอ้างอิงสำหรับป้อนขาอินพุตต์ Serial.begin(9600); //open sesrial port } void loop() { //read analog values int value1 = analogRead(LDR_PIN); //คือใช้อ่านค่าจากพิน ที่ระบุ (LDR) int value2 = analogRead(VREF_PIN); //คือใช้อ่านค่าจากพิน ที่ระบุ (Trimpot ) //send message to serial port if(analogRead(LDR_PIN)>500){ digitalWrite(LED1_PIN,LOW);//โดยถ้าค่าที่อ่านได้จากขา input A1 (LDR_PIN) มากกว่า 500 คือจะเป็นค่าช่วงที่ LDRได้รับปริมาณแสงมาก ก็จะให้ LED มีสถานะเป็น LOW คือดับ }else{ digitalWrite(LED1_PIN,HIGH); //ถ้าไม่ใช่ คือ ค่าที่อ่านได้จากขาอินพุต A1 (LDR_PIN) น้อย กว่า 500 คือจะเป็นช่วงที่ LDRด้รับปริมาณแสงน้อย ก็จะให้ LED มีสถานะเป็น L HIGH คือติด } Serial.print("Read"); //พิมพ์ข้อมมูลไปยังพอร์ต จะมีคำว่า Read Serial.print(value1,DEC); //พิมพ์ข้อมมูล ที่เป็นค่าที่ได้จาก พิน (LDR)ไปยังพอร์ต Serial.print(", "); Serial.print(value2,DEC); //พิมพ์ข้อมมูล ที่เป็นค่าที่ได้จาก พิน (Trimpot)ไปยังพอร์ต delay(200); } |
ผังการต่อวงจรโดยโปรแกรม Fritzing
ผังวงจร Breadboard View |
ผังวงจร Schematic View |
คําถามท้ายการทดลอง
1. ค่าที่ได้ (เลขจํานวนเต็ม) จากบอร์ด Arduino สําหรับสัญญาณอินพุตที่ขา A1 มีค่าอยู่ในช่วงใด(ต่ําสุด-สูงสุด)
Ans ค่าจะอยู่ในช่วง 476 - 805 โดยค่าจะต่ำสุด เมื่อมีแสงสว่างมาก และค่าจะเพิ่มขึ้นเมื่อ LDR ได้รับปริมาณแสงน้อยลง
2. จะต้องปรับแก้โค้ดอย่างไรสําหรับบอร์ด Arduino ถ้าจะทําให้ LED1 มีความสว่างมากน้อยได้ตาม
ปริมาณแสงที่ได้รับ เช่น ถ้า LDR ได้แสงสวางน้อย จะทําให้ LED1 สว่างมาก แต่ถ้า LDR ได้แสง
สว่างมาก จะทําให้ LED1สว่างน้อย หรือไม่ติดเลย
Ans เพิ่มเงื่อนไขและใช้ คำสั่ง analogRead(); //คือใช้อ่านค่าจากพิน ที่ระบุ
if(analogRead(LDR_PIN)>500){
digitalWrite(LED1_PIN,LOW);
}else{
digitalWrite(LED1_PIN,HIGH);
}
//โดยถ้าค่าที่อ่านได้จากขา input A1 (LDR_PIN) มากกว่า 500 คือจะเป็นค่าช่วงที่ LDRได้รับปริมาณแสงมาก ก็จะให้ LED มีสถานะเป็น LOW คือดับ
//ถ้าไม่ใช่ คือ ค่าที่อ่านได้จากขาอินพุต A1 (LDR_PIN) น้อยกว่า 500 คือจะเป็นช่วงที่ LDRด้รับปริมาณแสงน้อย ก็จะให้ LED มีสถานะเป็น L HIGH คือติด
if(analogRead(LDR_PIN)>500){
digitalWrite(LED1_PIN,LOW);
}else{
digitalWrite(LED1_PIN,HIGH);
}
//โดยถ้าค่าที่อ่านได้จากขา input A1 (LDR_PIN) มากกว่า 500 คือจะเป็นค่าช่วงที่ LDRได้รับปริมาณแสงมาก ก็จะให้ LED มีสถานะเป็น LOW คือดับ
//ถ้าไม่ใช่ คือ ค่าที่อ่านได้จากขาอินพุต A1 (LDR_PIN) น้อยกว่า 500 คือจะเป็นช่วงที่ LDRด้รับปริมาณแสงน้อย ก็จะให้ LED มีสถานะเป็น L HIGH คือติด
ไม่มีความคิดเห็น:
แสดงความคิดเห็น