วันอังคารที่ 26 สิงหาคม พ.ศ. 2557

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

การทดลองที่ 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)
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 มิลลิวินาที
}
โค้ดที่ 1.3.1: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 1)
const byte LED_PIN = 5;
void setup() {
pinMode( LED_PIN, OUTPUT );
}
void loop() {
digitalWrite( LED_PIN, HIGH );
digitalWrite( LED_PIN, LOW );
}
โค้ดที่ 1.3.2: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 2)
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)
}
โค้ดที่ 1.3.3: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 3)
ศึกษาคำสั่ง analogWrite() ได้จาก: http://arduino.cc/en/Reference/analogWrite
#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
}
โค้ดที่ 1.3.4: โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 4)
ศึกษาคำสั่งเกี่ยวกับ Servo Library ได้จาก: http://arduino.cc/en/reference/servo


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

1. จงอธิบายความแตกต่างของสัญญาณเอาต์พุต (ขา D5) ของบอร์ด Arduino ที่ได้จากโค้ด
ตัวอย่างในแต่ละกรณี (ให้เปรียบเทียบค่า Duty Cycle และความถี่ของสัญญาณเอาต์พุตที่ได้
ในแต่ละกรณี)
  1.3.1 Duty cycle = 100%*(10m/20m) = 50%
  1.3.2 Duty cycle = 100%*(4.5u/10u)  = 45%
  1.3.3 Duty cycle = 100%*(0.8m/1m)  = 80%
  1.3.4 Duty cycle = 100%*(2m/20m)   = 10%
2. มีขาใดบ้างของบอร์ด Arduino ในการทดลอง นอกจากขา D5 ที่สามารถใช้สร้างสัญญาณ PWM
ด้วยคำสั่ง analogWrite()
-D3,D6,D9,D10,D11
3. ถ้าต้องการจะสร้างสัญญาณแบบ PWM ที่มีค่า Duty Cycle 20% และ 80% ที่ขา D5 และ D10
ตามลำดับ โดยใช้คำสั่ง analogWrite() จะต้องเขียนโค้ด Arduino อย่างไร (เขียนโค้ดสำหรับ
Arduino Sketch ให้ครบถ้วน สาธิตและตรวจสอบความถูกต้องโดยใช้ออสซิลโลสโคปหรือเครื่อง
วิเคราะห์สัญญาณดิจิทัล)


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







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

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