วันอาทิตย์ที่ 24 สิงหาคม พ.ศ. 2557

การทดลองที่ 1.3 การตรวจวัดสัญญาณดิจิทัล-เอาต์พุตจากบอร์ด Arduino

การทดลองที่ 1.3การตรวจวัดสัญญาณดิจิทัล-เอาต์พุตจากบอร์ด Arduino


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


รายการอุปกรณ์
  • บอร์ด Arduino                                                 1 อัน
  • สายไฟสำหรับต่อวงร                                          1 ชุด
  • ออสซิลโลสโคปแบบดิจิทัล                                  1 เครื่อง
  • เครื่องกำเนิดสัญญาณ                                         1 เครื่อง
ขั้นตอนการทดลอง
    1. คอมไพล์โค้ดตัวอย่างที่ 1.3.1 แล้วอัพโหลดไปยังบอร์ด Arduino จากนั้นใชออสซิลโลสโคปวัด               สัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ (ให้ระบุ ความถี่ และค่า Duty Cycle ของสัญญาณตามที่วัดได้จริง

                    Duty Cycle (%) = 100% x (ความกว้างของคลื่นในช่วงที่เป็น High / คาบของสัญญาณ)

    2.ทำขั้นตอนที่ 1 ซ้ำ สำหรับโค้ดตัวอย่างที่ 1.3.2 - 1.3.4 ตามลำดับ
    3. ใช้เครื่องกำเนิดสัญญาณ สร้างคลื่นแบบ PWM (รูปคลื่นแบบ Pulse) ที่มีความถี่ 50Hz มีค่า Duty Cycle = 7.5% และมีระดับแรงดันต่ำและสูงในช่วง 0V และ 5V และให้ใช้ออสซิลโลสโคปตรจดูรูปคลื่นสัญญาณที่ได้และบันทึกภาพที่ปรากฏ (เปรียบเทียบผลกับการสร้างสัญญาณเอาต์พุตด้วยบอร์ด Arduino)





ต่อบอร์ด arduino เข้ากับ ออสซิสโลสโคป


ต่อ เครื่องกำเนิดสัญญาณ เข้ากับ ออสซิสโลสโคป



ผลการทดลอง


   โค้ดที่ 1.3.1: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 1)


const byte LED_PIN = 5; //ใช้ขาหมายเลข D5 เพื่อสร้างสัญญาณดิจิทัล

void setup(){

        pinMode(LED_PIN,OUTPUT); // ใช้ขา D5 เป็นเอาต์พุต
}

void loop(){
        digitalWrite(LED_PIN,HIGH); // ให้เอาต์พุตที่ขา D5 เป็น High

        delay(10); // รอบเวลาประมาณ 10 มิลลิวินาที
        digitalWrite(LED_PIN,LOW); // ให้เอาต์พุตที่ขา D5 เป็น Low
        delay(10); // รอบเวลาประมาณ 10 มิลลิวินาที
}


OutPut (ออสซิลโลสโคป)




  




โค้ดที่ 1.3.2: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 2)


const byte LED_PIN = 5; //ใช้ขาหมายเลข D5 เพื่อสร้างสัญญาณดิจิทัล

void setup(){

        pinMode(LED_PIN,OUTPUT); // ใช้ขา D5 เป็นเอาต์พุต
}

void loop(){
        digitalWrite(LED_PIN,HIGH); // ให้เอาต์พุตที่ขา D5 เป็น High

        digitalWrite(LED_PIN,LOW); // ให้เอาต์พุตที่ขา D5 เป็น Low
}


OutPut (ออสซิลโลสโคป)











โค้ดที่ 1.3.3: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 3)

ศึกษาคำสั่ง analogWrite() ได้จาก: http://arduino.cc/en/Reference/analogWrite


const byte LED_PIN = 5; // Digital Pin 5 (D5)


void setup(){

        pinMode(LED_PIN,OUTPUT); // ใช้ขา D5 เป็นเอาต์พุต
        analogWrite(LED_PIN,191); // สร้างสัญญาณ PWM ที่ขา D5
}

void loop(){
        // empty ( ไม่มีคำสั่งใดๆ ในฟังก์ชัน loop)

}


OutPut (ออสซิลโลสโคป)







โค้ดที่ 1.3.4: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 4)

ศึกษาคำสั่งเกี่ยวกับ Servo Library ได้จาก: http://arduino.cc/en/Reference/servo

#include <Servo.h>

Servo servo;
int minPulse = 600; // minimum servo position, in us
int maxPulse = 2400; // maximum servo position, in us

void setup(){

      servo.attach(5,minPulse,maxPulse); // use D5 for PWM output(servo)
      servo.write(90); // set rotation angle (value between 0 to 180 degree)
}

void loop(){
        // empty ( ไม่มีคำสั่งใดๆ ในฟังก์ชัน loop)

}


OutPut (ออสซิลโลสโคป)











การทดลองข้อ 3
                      ครื่องกำเนิดสัญญาณ สร้างคลื่นแบบ PWM (รูปคลื่นแบบ Pulse) ที่มีความถี่ 50Hz มีค่า Duty Cycle = 7.5% และมีระดับแรงดันต่ำและสูงในช่วง 0V และ 5V 




คำถามท้ายการทดลอง
      1. จงอธิบายความแตกต่างของสัญญาณเอาต์พุต (ขา D5) ของบอร์ด Arduino ที่ได้จากโค้ดตัวอย่างในแต่ละกรณี ( ให้เปรียบเทียบค่า Duty Cycle และความถี่ของสัญญาณเอาต์พุตที่ได้ในแต่ละกรณี

            ans


      2. มีขาใดบ้างของบอร์ด Arduino ในการทดลอง นอกจากขา D5 ที่สามารถใช้สร้างสัญญาณ PWM ด้วยคำสั่ง analogWrite()

ans ขา D(3,5,6,9,10,11) 
       อ้างอิงจาก http://arduino.cc/en/Reference/analogWrite


      3. ถ้าต้องการจะสร้างสัญญาณแบบ PWM ที่มีค่า Duty Cycle 20% และ 80% ที่ขา D5 และขา D10 ตามลำดับ โดยใช้คำสั่ง analogWrite() จะเขียนโค้ด Arduino อย่างไร (เขียนโค้ดสำหรับ Arduino Sketch ให้ครบถ้วน สาธิตและตรวจสอบความถูกต้องโดยใช้ออสซิลโลสโคปหรือเครื่องวิเคราะห์สัญญาณดิจิทัล)

            ans  Code

const byte LED_PIN_1 = 5;
const byte LED_PIN _2= 10;

void setup(){
     pinMode(LED_PIN_1,OUTPUT); // ใช้ขา D5 เป็นเอาต์พุต
     pinMode(LED_PIN_2,OUTPUT); // ใช้ขา D10 เป็นเอาต์พุต
     analogWrite(LED_PIN_1,50); // สร้างสัญญาณ PWM ที่ขา D5
     analogWrite(LED_PIN_2,204); // สร้างสัญญาณ PWM ที่ขา D10
}

void loop(){
     // empty ( ไม่มีคำสั่งใดๆ ในฟังก์ชัน loop)
}



     4. สัญญาณเอาต์พุตที่ได้จากการใช้คำสั่งของ Servo Library มีความถี่เท่าไหร่

            ans  50 Hz

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

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