[25/08/2567] ใบงานรายวิชาไมโครคอนโทรลเลอร์และโปรเซส สัปดาห์ที่ 15
ใบงานประจำสัปดาห์ที่ 14 รายวิชาไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์
จงเขียนไมโครคอนโทรลเลอร์ โดยกำหนดให้เชื่อมต่อกับ led โดยใช้งานคำสั่งที่ส่ง output ให้ได้ตามใบงานที่กำหนดและต่ออุปกรณ์ Potentiometer เพื่อรับสัญญาณเข้ามาที่ไมโครคอนโทรลเลอร์ตามโจทย์ที่กำหนด. โดยใช้ความรู้ในการเขียนโปรแกรมพื้นฐานที่เรียนในสัปดาห์ที่ผ่านมา นำมาประยุกต์ใช้งาน if , if else , while ,for , switch case ให้นักเรียนนักศึกษาทำไปทีละข้อย่อย จนครบโจทย์ที่สมบูรณ์
การทำงานของ Analog Input บน Arduino Uno
Analog input บนบอร์ด Arduino Uno ถูกใช้ในการรับค่าจากเซ็นเซอร์หรืออุปกรณ์ที่ส่งสัญญาณแบบแอนะล็อก (Analog Signal)เข้ามา ซึ่งโดยทั่วไปแล้วสัญญาณแอนะล็อกคือสัญญาณที่มีค่าต่อเนื่องกัน (Continuous Value) เช่น แรงดันไฟฟ้า (Voltage) ที่เปลี่ยนแปลงไปได้ตามเวลาหรือสภาวะแวดล้อมซึ่งหากนักเรียนนักศึกษาเคยเขียนไมโครมาบ้างก็จะทราบว่ามีโมดูลหรืออุปกรณ์จำนวนมากที่ส่งค่าผ่านสัญญาณ analog ดังนั้นการเรียนรู้ในสัปดาห์นี้เราจะทำความเข้าใจเกี่ยวกับการรับค่าด้วยสัญญาณ analog
รายละเอียดการทำงานของ Analog Input บน Arduino Uno
-
-
Analog-to-Digital Converter (ADC) : ขา Analog Input ของ Arduino Uno เชื่อมต่อกับตัวแปลงสัญญาณแอนะล็อกเป็นดิจิทัล (ADC) ซึ่งมีความละเอียด 10 บิต หมายความว่ามันสามารถแปลงสัญญาณแอนะล็อกที่รับเข้ามาเป็นค่าเลขฐานสองที่มีค่าระหว่าง 0 ถึง 1023 โดยค่า 0 แทนแรงดัน 0V และค่า 1023 แทนแรงดัน 5V ดังนั้นค่าที่ได้จากฟังก์ชัน
analogRead(pin)
จึงอยู่ในช่วง 0 ถึง 1023 -
การอ่านค่าด้วยฟังก์ชัน analogRead() : การอ่านค่าสัญญาณแอนะล็อกสามารถทำได้โดยใช้ฟังก์ชัน
analogRead(pin)
โดยที่pin
คือตัวเลขที่ระบุขา (A0 ถึง A5) ที่ต้องการอ่านค่า ตัวอย่างเช่น:
ตัวแปร sensorValue จะเก็บค่าที่อ่านได้จากขา A0 โดยค่าที่ได้จะอยู่ในช่วง 0 ถึง 1023 ซึ่งพารามิเตอร์ที่อยู่ภายในวงเล็บนักเรียนต้องกำหนดให้สอดคล้องกับ pin ที่ต่อกับตัวอุปกรณ์ (A0 ถึง A5)int sensorValue = analogRead(A0);
- การใช้งานร่วมกับเซ็นเซอร์ต่างๆ : ขา Analog Input มักจะใช้ในการเชื่อมต่อกับเซ็นเซอร์ที่ส่งสัญญาณแอนะล็อก เช่น เซ็นเซอร์อุณหภูมิ, เซ็นเซอร์แสง, หรือโพเทนชิโอมิเตอร์ ตัวอย่างเช่น การใช้เซ็นเซอร์วัดแสง (Light Dependent Resistor - LDR) ในการวัดค่าความสว่างของแสง
-
การคำนวณค่าแรงดันไฟฟ้าจากค่าที่อ่านได้ : หากต้องการทราบแรงดันไฟฟ้าที่ขา Analog Input รับเข้ามา สามารถคำนวณได้โดยใช้สูตรซึ่งค่าเซ็นเซอร์ที่อ่านได้มีจำนวน = 10 bit หรือ 210 แล้วคูณด้วย 5.0 แล้วนำมาหารด้วย 1023 จะได้เป็นผลลัพท์เป็นโวลต์ (Voltage) :
ตัวอย่างเช่น :
float voltage = sensorValue * (5.0 / 1023.0);
ตัวอย่างคำสั่งใช้งาน
ต่อไปนี้คือตัวอย่างโค้ดการอ่านค่าแอนะล็อกจากโพเทนชิโอมิเตอร์และแสดงผลบน Serial Monitor:
void setup() {
pinMode(A0,OUTPUT); // กำหนดการทำงานขา A0 ให้มีการรับค่าเข้ามา
Serial.begin(9600); // เริ่มต้นการสื่อสารแบบ Serial ที่อัตรา 9600 baud
}
void loop() {
float sensorValue = analogRead(A0); // อ่านค่าแอนะล็อกจากขา A0
Serial.print(sensorValue);
delay(500); // รอครึ่งวินาที
}
ข้อควรระวัง
- แรงดันไฟฟ้าสูงสุด: แรงดันไฟฟ้าที่สามารถป้อนเข้าสู่ขา Analog Input ได้อย่างปลอดภัยคือตั้งแต่ 0V ถึง 5V หากป้อนแรงดันสูงเกินไปอาจทำให้บอร์ดเสียหายได้
- Noise และความแม่นยำ: เนื่องจาก ADC มีความละเอียด 10 บิต = 28 (ในส่วนของการรับ input เข้ามาในไมโครคอนโทรลเลอร์จะสามารถอ่านข้อมูลได้มากกว่าการส่ง analog output ผ่าน pwm ซึ่งทำได้ 8 bit เท่านั้น) การอ่านค่าสัญญาณแอนะล็อกอาจมี Noise หรือการแปรปรวนเล็กน้อย ซึ่งสามารถใช้การเฉลี่ยค่า หรือปรับแต่งฮาร์ดแวร์เพื่อลด Noise ได้
สัปดาห์ที่ 15 กำหนดให้เปลี่ยนแปลงการปฏิบัติจากการต่ออุปกรณ์จริงเป็นการใช้งานด้วยโปรแกรมจำลอง
กำหนดให้นักเรียนนักศึกษาทดลองการใช้งาน การเขียนไมโครคอนโทรลเลอร์ด้วยการต่อวงจรและการเขียนโปรแกรมด้วยการจำลอง (simulator) ผ่านโปรแกรมเว็บบราวเซอร์ กำหนดให้เรียนนักเรียนนักศึกษาเข้าใช้งานโปรแกรมกับเว็บไซต์ tinkercad.com และฟังคำชี้แจงและอธิบายจากครูผู้สอน
ให้นักเรียนนักศึกษาทำไปทีละข้อย่อย จนครบโจทย์ที่สมบูรณ์
- 1 กำหนดให้นักเรียนนักศึกษาทำการเชื่อมต่อไมโครคอนโทรลเลอร์เข้ากับ potentiomiter แล้วเขียนให้แสดงผลค่า analog ที่รับเข้ามาผ่าน Serial monitor เขียนด้วยโปรแกรมจำลองการทำงาน ผ่านเบราว์เซอร์ผ่านเว็บไซต์ tinkercad ให้นักเรียนฟังคำอธิบายจากครูผู้สอน
- 2 (ต่อ) กำหนดให้นักเรียนนักศึกษาทำการgเขียนโปรแกรมเพิ่มเติมจากการอ่านค่าจาก potentiomiter ให้อยู่ในช่วงข้อมูล 0 ถึงประมาณ 100 (ต่ำสุดคือ 0 หมุนไปด้านสูงสุดคือ 100-102) แสดงผลลัพท์ออกเป็นจำนวนเต็ม
- 3 กำหนดให้นักเรียนนักศึกษาทำการเชื่อมต่อไมโครคอนโทรลเลอร์เข้ากับ led จำนวน 4 ดวงแล้วเขียนโปรแกรมเพื่อสั่งงานให้ led 4 ดวงกระพริบติดและดับสลับกัน (ทบทวนคำสั่งไฟติด)
- 4 (ต่อ) กำหนดให้นักเรียนนักศึกษาเขียนโปรแกรมควบคุมสั่งงาน led และ potentiomiter ให้สอดคล้องกัน โดยกำหนดให้ led ติดขึ้นแบบต่อแถวเรียงกันไปจากค่าต่ำสุดไปหาค่าสูงที่สุดให้สัมพันธ์กัน หากหมุนย้อนกลับแล้ว led จะไม่ดับ
- 5 กำหนดให้นักเรียนนักศึกษาเขียนโปรแกรมควบคุมสั่งงาน led และ potentiomiter ให้สอดคล้องกันโดยติดแบบดาวตกจากค่าต่ำสุดไปหาค่าสูงที่สุดให้สัมพันธ์กัน led จะต้องติดครั้งละ 1 ดวงเท่านั้น
ความคิดเห็น
แสดงความคิดเห็น