ใบงานพื้นฐานการอินเตอร์เฟส สัปดาห์ที่ 15
จงเขียนไมโครคอนโทรลเลอร์ โดยกำหนดให้เชื่อมต่อกับ led โดยใช้งานคำสั่งที่ส่ง input, output สัญญาณ analog และ digital เพื่อควบคุม led ให้ได้ตามโจทย์ที่กำหนด. โดยจะเป็นลักษณะการสื่อสารกันระหว่างคอมพิวเตอร์และอุปกรณ์ไมโครคอนโทรลเลอร์ผ่านการส่งข้อมูลแบบ Serial Transmission (สาย USB) และจงใช้ความรู้ในการเขียนโปรแกรมพื้นฐานที่เรียนในสัปดาห์ที่ผ่านมานำมาประยุกต์ใช้งาน if , if else , while ,for , switch case ให้นักเรียนนักศึกษาทำไปทีละข้อย่อย จนครบโจทย์ที่สมบูรณ์
เนื้อหา arduino analog เบื้องต้นต้องมีความรู้ความเข้าใจอะไรบ้าง ?
หากย้อนกลับไปเนื้อหาก่อนหน้านี้จะเป็นการใช้งานสัญญาณ digital โดยปกติแล้ว การใช้งานการอ่านสัญญาณ digital จะมีค่า 2 สถานะ คือ 0 และ 1 เท่านั้นและสถานะที่เป็นอยู่คือ 1 หรือไม่ก็ 0 ไม่มีนอกเหนือจากนี้ ด้วยการอ่านค่าเพียงแค่สองสถานะทำให้ ง่ายต่อการทำงาน และการประยุกต์ใช้ แต่การนำสัญญาณ analog มาใช้งานนั้นเราจะต้องรู้อะไรบ้างการเขียนสั่งการทำงานให้ microcontroller อ่านค่าที่เป็น analog มีองค์ประกอบอยู่ 2 อย่างคือ
- การรับค่า input ในแรงดันตั้งแต่ต้นถึงค่าสูงสุด 0 -> nmax กล่าวคือ ค่าโวลสู้สุดที่ไมโครคอนโทรลเลอร์ นั้นๆรับได้
- การอ่านค่า analog ค่าที่อ่านได้จะถูกเรียกเป็นระดับ bit คือค่าความละเอียดที่ microcontroller อ่านได้ ว่ามีกี่ระดับ สามารถทำการตรวจเช็คโดยเปิดข้อมูลของไมโครคอนโทรลเลอร์เบอร์นั้นๆ ว่ารองรับการอ่านข้อมูลที่กี่บิต โดยยิ่งระดับ bit ยิ่งเยอะค่าความละเอียดก็จะมากขึ้น หรือละเอียดขึ้นนั้นเอง ดังแสดงตารางต่อไปนี้
bit | จำนวน | ขอบเขต |
---|---|---|
2 bit | 4 | 0 ถึง 3 |
4 bit | 16 | 0 ถึง 15 |
8 bit | 256 | 0 ถึง 255 |
10 bit | 1024 | 0 ถึง 1023 |
12 bit | 4096 | 0 ถึง 4095 |
- กำหนดให้นักเรียนนักศึกษาเชื่อมต่อ ไมโครคอนโทรลเลอร์ กับ led จำนวนทั้งหมด 4 ดวงและมีการเขียนคำสั่งเพื่อควบคุมสัญญาณ analog ขอควรระวังการต่อใช้งาน analog output โดยนักเรียนนักศึกษาจะต้องทำการศึกษาว่าไมโครคอนโทรลเลอร์เบอร์นั้นๆ มีการร้องรับการใช้งาน analog output ที่ตำแหน่งขาใดบ้าง การต่อสายผิดจะทำให้ค่าที่ผลลัพท์ที่ออกมาผิดพลาด
- จากรูปด้านบนแสดงตำแหน่งขา pinout ของ arduino uno r3 โดยการใช้งาน analog output ให้เราเลือกขาที่เป็น PWM (Pulse Width Modulation) เป็นเทคนิคที่ทำให้เราสามารถอ่าน/เขียนข้อมูลแบบ analog ด้วยสัญญาณ digital ได้ โดยตัวควบคุมการสร้างสัญญาณดิจิตอล (Digital control) จะสร้างสัญญาณคลื่นสี่เหลี่ยมออกมา โดยสัญญาณที่สร้างออกมาจะสลับกันระหว่าง เปิด(HIGH) กับ ปิด(LOW) รูปแบบสัญญาณเปิด-ปิดนี้สามารถจำลองเป็นแรงดันไฟฟ้าระหว่าง เปิด (5 Volts) กับ ปิด (0 Volts) หรือสังเกตตำแหน่งขาโดยจะมีการใส่สัญลักษณ ~ ที่บริเวณบอร์ด arduino uno r3
- กำหนดให้ต่อไมโครคอนโทรลเลอร์กับ led จำนวน 4 ดวงในตำแหน่ง (PWM หรือสัญลักษณ ~ )ที่ตำแหน่งขาของบอร์ด arduino uno r3 เท่านั้น เพื่อทำการศึกษาใบงานเกี่ยวกับการเรียกใช้งานสัญญาณ analog ในฝั่ง output ซึ่ง analog output ของ arduino uno r3 จะมี Amplitude ที่ความละเอียดที่ 256 ระดับ
การเรียกใช้งาน analog โดยอ้างอิง code ดังต่อไปนี้
analogWrite(3,255);
- การเรียกใช้งานคำสั่ง analogWrite(ตำแหน่งขา analog, ระดับbit) โดยมีระดับการใช้งานตั้งแต่ 0-255 อ้างอิงจาก 0 volt ไปจนถึงค่าสูงสุด 5 volt หากเรากำหนดค่าระดับบิท ที่ 0 แรงดันที่ออกไปยัง led จะเป็น 0 volt และหากกำหนดค่าระดับบิทที่ 255 แรงดันที่ออกไปจะเป็น 5v แทน *การเปรียบเทียบนี้เป็นลักษณะเบื้อนต้นเท่านั้น เพื่อให้นักเรียนนักศึกษาเข้าใจได้ง่าย หากแต่การทำงานจริง จะเป็นการใช้งานสัญญาณ pwm ซึ่งไม่ได้ส่งค่าแรงดันที่ต่างดับกันโดยตรง กล่าวคือการกำหนดความกว้างของสัญญาณ Pulse เป็นค่า % โดยจะแปรผันตรงกับระดับบิทที่เรากำหนดซึ่งเทียบบัญญัติไตรยางค์ต่อกัน
การเรียกใช้งาน Serial available คือการรับส่งค่าข้อมูลระหว่างคอมพิวเตอร์และไมโครคอนโทรลเลอร์ ตัวอย่าง code ดังต่อไปนี้
void loop(){
while(Serial.available()) {
String a1 = Serial.readString();
Serial.print("your typing : ");
a1.trim();
Serial.println(a1);
}
}
หรือ
void loop() {
if (Serial.available() > 0) {
String msg = Serial.readString();
Serial.print("Echo: ");
Serial.println(msg);
}
}
ชุดคำส่ง Serial available จะทำการรอรับค่าจาก keyboard ที่ผู้ใช้งานป้อนเข้าไป จากนั้นไมโครคอนโทรลเลอร์จะทำการนำค่าที่ถูกป้อนเข้ามาแปลงจากชุดข้อมูลบัฟเฟอร์ให้เป็นรูปแบบชุดข้อความ String ด้วยคำสั่ง Serial.readString() จากนั้นให้นักเรียนนักศึกษาเขียนตัวแปรชนิดชุดข้อความมารองรับ และให้นักเรียนนักศึกษานำชุดข้อความเหล่านั้นไปประยุกต์การทำงานต่อไป
ข้อมูลอ้างอิงเพิ่มเติม
- Arduino Pinout- Arduino PWM
- Arduino PWM ไทย
- Arduino Random
- Arduino substring
- Arduino toInt
ให้นักเรียนนักศึกษาทำไปทีละข้อย่อย จนครบโจทย์ที่สมบูรณ์
- 1 กำหนดให้นักเรียนนักศึกษาเชื่อมต่อ ไมโครคอนโทรลเลอร์กับ led จำนวน 4 ดวงและทำการรับค่าจาก keyboard ให้แสดงใน Serial monitor พิมพ์คำใดๆ ให้แสดงคำนั้นๆปรากฏใน Serial monitor
- 2 (ต่อ)กำหนดให้รับค่าจาก keyboard เมื่อพิมพ์ "led1" แล้ว led ดวงที่ 1 ไฟปรากฏแบบหรี่และติดค้างไว้ 2 วินาทีจากนั้น จะค่อยๆหรี่ดับไปโดยไม่กลับมาทำซ้ำ
- 3 (ต่อ) ทำในหัวข้อย่อยที่ 2 กับ led ดวงอื่นๆโดยอ้างอิงตำแหน่งเลขให้ครบทั้ง 4 ดวง led1, led2, led3, led4
- 4 (ต่อ) กำหนดให้รับค่าจาก keyboard เมื่อพิมพ์ "ChangeStepLed2" ให้ทำการเขียนโปรแกรมโดยเปลี่ยนรูปแบบการแสดงผลข้อย่อยที่ 2 และ 3 จากการหรี่ไฟติดค้างไว้ 2 วิแล้วหรี่ดับ ให้เป็นติด2วิแล้วดับ (digital) (หมายเหตการพิมพ์คำสั่ง "ChangeStepLed2 จะไม่เกี่ยวข้องกับการแสดงผล led โดยตรง เป็นเพียงแค่การเปลี่ยนรูปแบบแสดงผล โดยการแสดงผล led ยังคงใช้คำสั่งในข้อย่อยที่ 2,3 )
- 5 (ต่อ) กำหนดให้รับค่าจาก keyboard เมื่อพิมพ์ "ChangeStepLed1" ให้ทำการเขียนโปรแกรมโดยเปลี่ยนรูปแบบการแสดงผลข้อย่อยที่ 2 และ 3 เป็นการหรี่ไฟติดค้างไว้ 2 วิแล้วหรี่ดับ กล่าวคือกลับไปเป็นรูปแบบแรกก่อนข้อย่อยที่ 4 (หมายเหตการพิมพ์คำสั่ง "ChangeStepLed1 จะไม่เกี่ยวข้องกับการแสดงผล led โดยตรง เป็นเพียงแค่การเปลี่ยนรูปแบบแสดงผล โดยการแสดงผล led ยังคงใช้คำสั่งในข้อย่อยที่ 2,3 )
- 6 (ต่อ) กำหนดให้เขียนโปรแกรมเพิ่มความสามารถในหัวข้อย่อยที่ 4 และ 5 เมื่ออยู่ในสถานะนั้นๆอยู่แล้ว ไม่ต้องแสดงคำใน serial monitor ซ้ำ (เช่น เมื่อพิมพ์คำว่า "ChangeStepLed2" จะเปลี่ยนรูปแบบแสดงผล led และแสดงคำใน serial monitor แต่เมื่อพิมพ์คำเดิม "ChangeStepLed2"จะไม่แสดงใน serial monitor แล้วเพราะถือว่าเป็นคำสั่งที่เป็นปัจจุบันอยู่แล้ว (ไม่ต้องแสดงผลใน serial monitor แล้วจนกว่าจะมีการพิมพ์คำอื่นๆ)
- 7 ข้อย่อยจะแสดงเมื่อเวลา 10.00
ความคิดเห็น
แสดงความคิดเห็น