การทดลองที่ 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)
ผลการทดลอง
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 และความถี่ของสัญญาณเอาต์พุตที่ได้ในแต่ละกรณี
2. มีขาใดบ้างของบอร์ด Arduino ในการทดลอง นอกจากขา D5 ที่สามารถใช้สร้างสัญญาณ PWM ด้วยคำสั่ง 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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น