[04/09/2567] ใบงานรายวิชาพื้นฐานการอินเตอร์เฟส สัปดาห์ที่ 16 (ส่งสมุด)

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

  • ตัวอย่างแสดงการทำงานของข้อย่อยที่ 5




ความคิดเห็น

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

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

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

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