วันพฤหัสบดีที่ 18 กันยายน พ.ศ. 2557

การทดลองที่ 4.4 สัญญาณอินพุต-แอนะล็อกและการใช้งานร่วมกับบอร์ด Arduino

วัตถุประสงค์การทดลอง

1.เพื่อให้สามารถต่อวงจร เพื่อสร้างสัญญาณอะนาล็อคเพื่อเป็นสัญญาณอินพุตให้กับ Arduino
2.ฝึกการต่อวงจรโดยใช้ 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 คือติด


ไม่มีความคิดเห็น:

แสดงความคิดเห็น