วันศุกร์ที่ 19 กันยายน พ.ศ. 2557

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

วัตถุประสงค์

  • ฝึกต่อวงจรเพื่อสร้างสัญญาณแอนะล็อค และป้อนให้บอร์ด Arduino เพื่อใช้เป็นสัญญาณอินพุต
  • เขียนโปรแกรมสำหรับ Arduino เพื่อเปิด/ปิด LED ตามสภาวะแสง

วัสดุอุปกรณ์

  • แผงต่อวงจร (เบรดบอร์ด)                                   1 อัน
  • บอร์ด Arduino (ใช้แรงดัน +5V)                         1 บอร์ด
  • ตัวต้านทานปรับค่าได้ 10kΩ หรือ 20kΩ           1 ตัว
  • ตัวต้านทานไวแสง LDR                                      1 ตัว
  • ไดโอดเปล่งแสงขนาด 5 มม.                               1 ตัว
  • ตัวต้านทาน 330Ω หรือ 470Ω                           1 ตัว
  • ตัวต้านทาน 10kΩ                                               1 ตัว
  • สายไฟสำหรับต่อวงจร                                        1 ชุด
  • มัลติมิเตอร์                                                           1 เครื่อง


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

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

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

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


4. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคำอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบนเบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจริงพร้อมคำอธิบายโค้ด/การทำงานของโปรแกรมโดยละเอียด และตอบคำถามท้ายการทดลอง


รูป4.4.1 รูปผังวงจรสำหรับต่อวงจรบนเบรดบอร์ดร่วมกับบอร์ด Arduino 

โค้ดที่ 4.4.1  โค้ดตัวอย่างสำหรับ Arduino
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 );
   analogReference( DEFAULT );
   Serial.begin( 9600 ); // open serial port
}
void loop() {
   // read analog values
   int value1 = analogRead( LDR_PIN );
   int value2 = analogRead( VREF_PIN );
   // send message to serial port
   Serial.print( "Read " );
   Serial.print( value1, DEC );
   Serial.print( ", " );
   Serial.println( value2, DEC );
   delay( 200 );
}

แก้ไขโค้ดเพื่อทำตามโจทย์ ข้อ 3
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 );
   analogReference( DEFAULT );
   Serial.begin( 9600 ); // open serial port
}
void loop() {
   int value1 = analogRead( LDR_PIN );
   int value2 = analogRead( VREF_PIN );
   if(value1<750){
      digitalWrite( LED1_PIN, HIGH );
   }
   else{
      digitalWrite( LED1_PIN, LOW );
   }
}


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

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

ตอบ 359 - 996

2. จะต้องปรับแก้โค้ดอย่างไรสำหรับบอร์ด Arduino ถ้าจะทำให้ LED1 มีความสว่างมากน้อยได้ตามปริมาณแสงที่ได้รับ เช่น ถ้า LDR ได้แสงสว่างน้อย จะทำให้ LED1 สว่างมาก แต่ถ้า LDR ได้แสงสว่างมาก จะทำให้ LED1สว่างน้อย หรือไม่ติดเลย
ตอบ

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 );
   analogReference( DEFAULT );
   Serial.begin( 9600 ); // open serial port
}
void loop() {
   int value1 = analogRead( LDR_PIN );
   int value2 = analogRead( VREF_PIN );
   int light = (1023-value1)*255/1023 ;
   analogWrite( LED1_PIN, light);
}


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

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