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

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

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

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

รายการอุปกรณ์

  1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
  2. บอร์ด Arduino (ใช้แรงดัน +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 ตามลําดับ)


2. เขียนโปรแกรมตามตัวอย่างโค้ดที่กําหนดให้และทําขั้นตอน Upload จากนั้นให้ทดลองหมุนปรับค่าที่
    ตัวต้านทานปรับค่าได้หรือปิดบริเวณส่วนรับแสงของ LDR เปิดหน้าต่าง Serial Monitor ของ
    Arduino IDE แล้วสังเกตข้อความที่ถูกส่งมาจากบอร์ด 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. ปรับแก้โค้ดตัวอย่าง เพื่อให้วงจรและบอร์ด Arduino แสดงพฤติกรรมดังนี้ถ้าปิดส่วนรับแสงของตัว
    ต้านทานไวแสง 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() {
     // read analog values
         int value1 = analogRead( LDR_PIN );
         int value2 = analogRead( VREF_PIN );
        if(value1>500){
            digitalWrite(LED1_PIN,1);
        }else{
            digitalWrite(LED1_PIN,0
);
        }
     // send message to serial port
         Serial.print( "Read " );
         Serial.print( value1, DEC );
         Serial.print( ", " );
         Serial.println( value2, DEC );
         delay( 200 );
    }


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



คําถามท้ายการทดลอง
1. ค่าที่ได้ (เลขจํานวนเต็ม) จากบอร์ด Arduino สําหรับสัญญาณอินพุตที่ขา A1 มีค่าอยู่ในช่วงใด
    (ต่ําสุด-สูงสุด)  334 - 844
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() {
     // read analog values
         int value1 = analogRead( LDR_PIN );
     //    int value2 = analogRead( VREF_PIN );
         value1=map(value1,300,880,0,255);
         analogWrite(LED1_PIN,255-value1);
     // send message to serial port
    //     Serial.print( "Read " );
    //     Serial.print( value1, DEC );
    //     Serial.print( ", " );
    //     Serial.println( value2, DEC );
         delay( 200 );
    }

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

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