วันเสาร์ที่ 20 กันยายน พ.ศ. 2557

การทดลองที่ 4.4

สัญญาณอินพุต-แอนะล็อก

และการใช้งานร่วมกับบอร์ด Arduino 



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

1.    ฝึกการต่อวงจรบนเบรดบอร์ด อย่างถูกต้อง
2.   ฝึกการป้อนสัญญาณอินพุตเป็นแอนะล็อคให้กับบอร์ด Ardunio
3.   ฝึกทักษะในการเขียนโปรแกรม Ardunio เพื่อติด/ดับ ตามปริมาณแสง


อุปกรณ์ที่ใช้ในการทดลอง  

1.    แผงต่อวงจร (เบรดบอร์ด)                                          1 อัน
2.   บอร์ด Ardunio (ใช้แรงดัน +5v.)                              1 บอร์ด
3.   ตัวต้านทานปรับค่าได้ 10kโอห์ม หรือ 20k โอห์ม     1 ตัว
4.   ตัวต้านทานไวแสง LDR                                             1 ตัว
5.   ไดโอดเปล่งแสงขนาด 5 มม.                                      1 ตัว
6.   ตัวต้านทาน 330 หรือ 470 โอห์ม                               1 ตัว
7.   ตัวต้านทาน 10k โอห์ม                                                1 ตัว
8.   สายไฟสำหรับต่อวงจร                                                1 ชุด
9.   มัลติมิเตอร์                                                                   1 เครื่อง

ขั้นตอนและผลการทดลอง


1.  ต่อวงจรตามผังวงจรในรูปที่4.4.1 บนเบรดบอร์ด ร่วมกับบอร์ด Arduino โดยใช้แรงดันไฟเลี้ยง

VCC=+5V และ Gnd จากบอร์ด Arduino เท่านั้น (ต่อวงจรบนเบรดบอร์ดก่อน จากนั้นจึงเชื่อมต่อ
สัญญาณอินพุตและเอาต์พุตของบอร์ด Arduino เมื่อตรวจสอบความถูกต้อง แล้วจึงป้อนแรงดันไฟ
เลี้ยงและ Gnd ตามลําดับ)

ผังวงจร  4.4.1 


 ภาพการต่อวงจรตามรูปที่ 4.4.1  

ภาพการต่อวงจรบนเบรดบอร์ด



2.  เขียนโปรแกรมตามตัวอย่างโค้ดที่กําหนดให้และทําขั้นตอน Upload จากนั้นให้ทดลองหมุนปรับค่าที่
ตัวต้านทานปรับค่าได้หรือปิดบริเวณส่วนรับแสงของ LDR เปิดหน้าต่าง Serial Monitor ของ
Arduino IDE แล้วสังเกตข้อความที่ถูกส่งมาจากบอร์ด Arduino


โค้ดตัวอย่างสำหรับ Ardunio


3. ปรับแก้โค้ดตัวอย่าง เพื่อให้วงจรและบอร์ด Arduino แสดงพฤติกรรมดังนี้ถ้าปิดส่วนรับแสงของตัว
ต้านทานไวแสง LDR หรือมปรี ิมาณแสงนอยลง ้ จะทําให LED1 “ ้ สว่าง” แต่ถ้า LDR ได้รับแสงตาม
สภาวะแสงปรกติหรือได้รับปริมาณแสงมาก จะทําให LED1 “ ้ ไม่ติด” 


ภาพวงจร

บันทึกผลการทดลอง

จากการทดลองข้อที่ 2 : ผลคือ LED ไม่ติด เนื่องจากใน code คำสั่งไม่มีการกำหนดค่าให้ไฟให้ติด แต่เมื่อสังเกตจากข้อความที่ถูกส่งออกมาจาก Ardunio แล้วพบว่า ค่าที่ออกมา ยกตัวอย่างเช่น Read802, 954 ค่าตัวเลขข้างหลัง Read คือค่าความต้านทานของ LDR และตัวเลขข้างหลัง (,) คือ ค่าตัวต้านทานที่หมุนปรับค่าได้ (Trimport)  

จากการทดลองข้อที่ 3 : เราสามารถปรับแก้ code ตัวอย่างได้โดย สร้างเงื่อนไข ให้ LDR_PIN มีค่ามากกว่า 420 (ค่าที่ได้เกิดจากการสังเกตค่า LDR เมื่อใช้นิ้วปิดไร้แสง) ให้ LED1_PIN มี OUTPUT ที่ออกมามีค่าเป็น LOW และถ้าน้อยกว่าหรือเท่ากับ 420 ให้แสดลงผลเป็น  HIGH
ดั่งเช่น Code ต่อไปนี้

const byte LDR_PIN = A1;
const byte VREF_PIN = A2;
const byte LED1_PIN = 5;

void setup() {
  pinMode (LED1_PIN, OUTPUT);
  digitalWrite (LED1_PIN, LOW);
  analogReference (DEFAULT);
  Serial.begin (9600);
}

void loop() {
  int value1 = analogRead (LDR_PIN);
  int value2 = analogRead (VREF_PIN);
  if (value1 >= 420) {
    digitalWrite (LED1_PIN, LOW);
  }
  else {
      digitalWrite (LED1_PIN, HIGH);
  }
  Serial.print ("Read");
  Serial.print (value1, DEC);
  Serial.print (",");
  Serial.println (value2, DEC);
  delay (200);
}

วีดิโอเมื่อปรับแก้ code ตามที่โจทย์บอกแล้ว

คำถามท้ายการทดลอง

       1. ค่าที่ได้ (เลขจํานวนเต็ม) จากบอร์ด Arduino สําหรับสัญญาณอินพุตที่ขา A1 มีค่าอยู่ในช่วงใด (ต่ําสุด-สูงสุด) 
      ตอบ  ต่ำสุด 0 ถึงสูงสุด 1023

      2. จะต้องปรับแก้โค้ดอย่างไรสําหรับบอร์ด Arduino ถ้าจะทําให้ LED1 มีความสว่างมากน้อยได้ตามปริมาณแสงที่ได้รับ เช่น ถ้า LDR ได้แสงสวางน้อย จะทําให้ LED1 สว่างมาก แต่ถ้า LDR ได้แสงสว่างมาก จะทําให้ LED1 สว่างน้อย หรือไม่ติดเลย
      ตอบ  สังเกตค่าที่ Ardunio ส่งออกมา โดยสร้างเงื่อนไข ให้ LDR_PIN มีค่ามากกว่า 420 ให้ LED1_PIN มี OUTPUT ที่ออกมามีค่าเป็น LOW และถ้าน้อยกว่าหรือเท่ากับ 420 (ค่าที่ได้เกิดจากการสังเกตค่า LDR เมื่อใช้นิ้วปิดไร้แสง) ให้แสดลงผลเป็น  HIGH
ดั่งเช่น Code ต่อไปนี้

if (value1 >= 420) {
    digitalWrite (LED1_PIN, LOW);
  }
  else {
      digitalWrite (LED1_PIN, HIGH);
  }


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

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