[29/08/2567] ใบงานรายวิชาพื้นฐานการอินเตอร์เฟส สัปดาห์ที่ 15

ใบงานประจำสัปดาห์ที่ 15 รายวิชาพื้นฐานการอินเตอร์เฟส

เพื่อเป็นการทบทวนการเขียนโปรแกรมไมโครคอนโทรลเลอร์และคอมพิวเตอร์ซึ่งเป็นอินเตอร์เฟสระหว่างกันในสัปดาห์นี้ให้นักเรียนนักศึกษาทำการทบทวนพื้นฐานในการเขียนโปรแกรม โดยกำหนดให้เขียนไมโครคอนโทรลเลอร์ให้เชื่อมต่อกับ led โดยใช้งานคำสั่งที่ส่ง output สัญญาณ digital เพื่อควบคุม led ให้ได้ตามโจทย์ที่กำหนด. โดยใช้ความรู้ในการเขียนโปรแกรมพื้นฐานที่เรียนในสัปดาห์ที่ผ่านมา นำมาประยุกต์ใช้งาน 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

  1. logic
    จำนวนขา Analog Input : บอร์ด Arduino Uno มีขา Analog Input อยู่ทั้งหมด 6 ขา คือ A0 ถึง A5 โดยที่แต่ละขาสามารถอ่านสัญญาณแอนะล็อกในช่วงแรงดัน 0V ถึง 5V แสดงตัวอย่างในการต่อใช้งานไมโครคอนโทรลเลอร์ Arduino uno กับ potentiometer จากรูปจะเห็นได้ว่าการสื่อสารระหว่างกันต่อ ณ ตำแหน่งขา A0 (สายไฟเส้นสีเขียว)
  2. Analog-to-Digital Converter (ADC) : ขา Analog Input ของ Arduino Uno เชื่อมต่อกับตัวแปลงสัญญาณแอนะล็อกเป็นดิจิทัล (ADC) ซึ่งมีความละเอียด 10 บิต หมายความว่ามันสามารถแปลงสัญญาณแอนะล็อกที่รับเข้ามาเป็นค่าเลขฐานสองที่มีค่าระหว่าง 0 ถึง 1023 โดยค่า 0 แทนแรงดัน 0V และค่า 1023 แทนแรงดัน 5V ดังนั้นค่าที่ได้จากฟังก์ชัน analogRead(pin) จึงอยู่ในช่วง 0 ถึง 1023
  3. การอ่านค่าด้วยฟังก์ชัน analogRead() : การอ่านค่าสัญญาณแอนะล็อกสามารถทำได้โดยใช้ฟังก์ชัน analogRead(pin) โดยที่ pin คือตัวเลขที่ระบุขา (A0 ถึง A5) ที่ต้องการอ่านค่า ตัวอย่างเช่น:
    int sensorValue = analogRead(A0);
    ตัวแปร sensorValue จะเก็บค่าที่อ่านได้จากขา A0 โดยค่าที่ได้จะอยู่ในช่วง 0 ถึง 1023 ซึ่งพารามิเตอร์ที่อยู่ภายในวงเล็บนักเรียนต้องกำหนดให้สอดคล้องกับ pin ที่ต่อกับตัวอุปกรณ์ (A0 ถึง A5)
  4. การใช้งานร่วมกับเซ็นเซอร์ต่างๆ : ขา Analog Input มักจะใช้ในการเชื่อมต่อกับเซ็นเซอร์ที่ส่งสัญญาณแอนะล็อก เช่น เซ็นเซอร์อุณหภูมิ, เซ็นเซอร์แสง, หรือโพเทนชิโอมิเตอร์ ตัวอย่างเช่น การใช้เซ็นเซอร์วัดแสง (Light Dependent Resistor - LDR) ในการวัดค่าความสว่างของแสง
  5. การคำนวณค่าแรงดันไฟฟ้าจากค่าที่อ่านได้ : หากต้องการทราบแรงดันไฟฟ้าที่ขา 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 ได้

กำหนดให้นักเรียนนักศึกษาทดลองการใช้งาน การเขียนไมโครคอนโทรลเลอร์ด้วยการต่อวงจรและการเขียนโปรแกรมด้วยการจำลอง (simulator) ผ่านโปรแกรมเว็บบราวเซอร์ กำหนดให้เรียนนักเรียนนักศึกษาเข้าใช้งานโปรแกรมกับเว็บไซต์ tinkercad.com และฟังคำชี้แจงและอธิบายจากครูผู้สอน







ให้นักเรียนนักศึกษาทำไปทีละข้อย่อย จนครบโจทย์ที่สมบูรณ์

  • 1 กำหนดให้นักเรียนนักศึกษาทำการเชื่อมต่อไมโครคอนโทรลเลอร์เข้ากับ potentiomiter แล้วเขียนให้แสดงผลค่า analog ที่รับเข้ามาผ่าน Serial monitor (เรียนรู้การอินเตอร์เฟสระหว่างไมโครคอนโทรลเลอร์กับอุปกรณ์อิเล็กทรอนิกที่มีการส่งสัญญาณ analog เป็นตัวกลาง)
  • 2 (ต่อ) กำหนดให้นักเรียนนักศึกษาทำการเขียนโปรแกรมเชื่อมต่ออินเตอร์เฟสด้วยการรับค่าจาก keyboard เมื่อมีการป้อนข้อมูลที่เป็นตัวเลขจำนวนเต็มเข้าไป ให้แสดงผลตัวเลขนั้นๆที่ Serial monitor แล้ว เมื่อมีการหมุน potentiomiter ตัวเลขที่ Serial monitor จะมีการเพิ่มขึ้นหากหมุนกลับมาเลขก็จะกลับมาเท่าเดิมมีขอบเขตข้อมูลการหมุนอยู่ที่ 0 ถึง 100 จำนวน เช่นหากนักเรียนป้อน 30 แล้วเมื่อมีการหมุน potentiomiter ไปสูงสุดค่าที่ได้จะกลายเป็น 130 เมื่อหมุนลดลงต่ำสุดค่าจะกลับมาเหลือ 30 เท่าเดิม (potentiomiter ต้องอยู่ในตำแหน่ง 0 หรือตำแหน่งเริ่มต้นก่อนเท่านั้น)
  • 3 กำหนดให้นักเรียนนักศึกษาทำการเชื่อมต่อไมโครคอนโทรลเลอร์เข้ากับ led จำนวน 4 ดวงแล้วเขียนโปรแกรมเพื่อสั่งงานให้ led 4 ดวงกระพริบติดและดับสลับกัน (ทบทวนคำสั่งไฟกระพริบ r330 โอห์ม)
  • 4 (ต่อ) กำหนดให้นักเรียนนักศึกษาเขียนโปรแกรมควบคุมสั่งงาน led และ potentiomiter ให้สอดคล้องกัน โดยกำหนดให้ led ติดขึ้นแบบต่อแถวเรียงกันไปจากค่าต่ำสุดไปหาค่าสูงที่สุดให้สัมพันธ์กัน หากหมุนย้อนกลับแล้ว led จะไม่ดับ
  • 5 กำหนดให้นักเรียนนักศึกษาเขียนโปรแกรมควบคุมสั่งงาน led และ potentiomiter ให้สอดคล้องกันโดยติดแบบดาวตกจากค่าต่ำสุดไปหาค่าสูงที่สุดให้สัมพันธ์กัน led จะต้องติดครั้งละ 1 ดวงเท่านั้น
  • ตัวอย่างแสดงการทำงานของข้อย่อยที่ 5




ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ใบงาน รายวิชาโปรแกรมโครงสร้าง(ซัมเมอร์)

[16/07/67] ใบงานรายวิชาไมโครโปรเซสเซอร์และ ไมโครคอนโทรลเลอร์ สัปดาห์ที่ 9

[11/08/2567] ใบงานรายวิชาไมโครคอนโทรลเลอร์และโปรเซส สัปดาห์ที่ 13