[25/08/2567] ใบงานรายวิชาไมโครคอนโทรลเลอร์และโปรเซส สัปดาห์ที่ 16 (ส่งสมุด)
ใบงานประจำสัปดาห์ที่ 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 กำหนดให้นักเรียนนักศึกษาทำการเชื่อมต่อไมโครคอนโทรลเลอร์เข้ากับ button ปุ่มกดจำนวน 1 ปุ่มแล้วเขียนให้แสดงผลเมื่อกดปุ่ม 1 ครั้งแสดงผลคำ "test" ผ่าน Serial monitor
- 2 กำหนดให้นักเรียนนักศึกษาทำการเชื่อมต่อไมโครคอนโทรลเลอร์เข้ากับ potentiomiter แล้วเขียนให้แสดงผลค่า analog ที่รับเข้ามาผ่าน Serial monitor (ห้ามใช้งานขา A0)
- (ต่อ) 3 กำหนดให้นักเรียนนักศึกษาเขียนโปรแกรมไมโครคอนโทรลเลอร์โดยเมื่อมีการกดปุ่ม 1 ครั้งการทำงานของ potentiomiter จะแสดงผล
- 4 (ต่อ) กำหนดให้ปรับปรุงโจทย์โดยเมื่อมีการกดปุ่มเดิมซ้ำจะหยุดการทำงานของ potentiomiter และสลับสถานะเมื่อมีการกดซ้ำ (กล่าวคือการกดปุ่ม 1 ครั้งเสมือนเปิดการทำงานและกดอีกครั้งจะเป็นการปิดการทำงานทำซ้ำได้ ขณะเปิดการทำงาน นักเรียนสามารถหมุนแสดงค่า potentiomiter ได้)
- (ต่อ) 5 กำหนดให้ปรับปรุงโปรแกรมเมื่อการทำงานของ potentiomitor หมุนมาถึงค่ามากกว่า 1000 แล้วจะไม่สามารถใช้งานปุ่มกดได้ (การกดปุ่มจะไม่มีผลเมื่อค่า potentiomiter เกินกว่า 1000)
ความคิดเห็น
แสดงความคิดเห็น