บทที่ 8: การเขียนโปรแกรมอ่านค่าแรงดันจากตัวต้านทานปรับค่าได้

UTEN BOONLIAM Avatar
บทที่ 8 / 26

บทที่ 8: การเขียนโปรแกรมอ่านค่าแรงดันจากตัวต้านทานปรับค่าได้

สัญญาณอนาล็อก (Analog Signal) เป็นสัญญาณแบบต่อเนื่อง มีลักษณะเป็นคลื่นไซน์ (sinewave)

โดยที่แต่ละคลื่นจะมีความถี่และความเข้มของสัญญาณที่ต่างกัน

โดยทั่วไปแล้วสัญญาณต่าง ๆที่อยู่รอบตัวเรา โดยพื้นฐานแล้วจะเป็นสัญญาณอนาล็อกแทบทั้งสิ้น ไม่ว่าจะเป็นคลื่นน้ำ คลื่นลม คลื่นเสียง ความดันอากาศ แรงดันไฟฟ้า กระแสไฟฟ้า และอีกมากมาย ซึ่งการส่งสัญญาณเหล่านี้ไปให้ไมโครคอนโทรลเลอร์วิเคราะห์หรือประมวลผลอะไรบางอย่าง จึงมีความจำเป็นอย่างยิ่งที่ต้องแปลงสัญญาณอนาล็อกนั้นให้อยู่ในรูปของสัญญาณดิจิทัล

ไมโครคอนโทรลเลอร์ในปัจจุบันโดยส่วนมากจะมีวงจรภาค ADC(Analog to Digital converter) อยู่ภายใน ซึ่งจะสามารถแปลงสัญญาณอนาล็อกเป็นสัญญาณดิจิตอลได้เลย โดยไม่ต้องผ่านวงจรแปลงใดใดภายนอก แต่มีข้อแม้คือแรงดันสูงสุดที่จะรับได้ต้องไปเกินแรงดัน VCC ของไมโครคอนโทรลเลอร์ตัวนั้น ๆ

มาดูในส่วนของบอร์ด Arduino Learning Kit กันครับ บนบอร์ดจะมีตัวต้านทานปรับค่าได้ (potentiometer) ค่า 100k𝛺 อยู่ 3 ตัวคือ VR1, VR2 , VR3 โดยต่อกับขาไมโครคอนโทรลเลอร์ชนิดต่าง ๆตามตารางด้านล่าง

VR1 VR2 VR3
Arduino Uno A0 A1 A2
Arduino Nano A6 A7 A2
ESP32(ESP-WROM-32) 35 34 39

ตารางที่ 8. 1 ตำแหน่งขาที่ต่อกับตัวต้านทานปรับค่าได้

เขียนโปรแกรม Arduino อ่านค่าแรงดันจากตัวต้านทานปรับค่าได้

Arduino Uno และ Arduino Nano จะมีวงจร ADC ความละเอียดขนาด 10บิต (10bits resolution) อยู่ภายใน ดังนั้น ค่าที่อ่านได้เมื่อแปลงเป็นค่าดิจิทัล ออกมาแล้วจะได้ค่าอยู่ในช่วง 0 ถึง 1023

คือที่แรงดัน 0 โวลต์ จะได้ค่าเป็น 0 และที่แรงดัน 5 โวลต์ จะได้ค่าเป็น 1023

แต่สำหรับ ESP32 จะมีวงจร ADC ความละเอียดขนาดถึง12บิต (12bits resolution) อยู่ภายใน โดยค่าที่อ่านได้สูงสุดจะอยู่ในช่วง 0 – 4095 โดยที่แรงดัน 0 โวลต์ จะได้ค่าเป็น 0 และที่แรงดัน 3.3 โวลต์ จะได้ค่าเป็น 4095 (** ADC ของ ESP32 รับแรงดันสูงสุดได้เพียง 3.3V**)

  1. เปิด Example sketch โดยทำการเปิดตัวอย่างโปรแกรมที่มีชื่อว่า AnalogReadSerial โดยคลิกที่ File -> Examples -> 01.Basics -> AnalogReadSerial

  1. ทดลอง upload โปรแกรมให้กับ Arduino Uno เมื่อเสร็จแล้วให้เปิด Serial Monitor

  1. ทดลองหมุน VR1 ดูค่าการเปลี่ยนแปลงที่หน้าจอ Serial Monitor

จากการทดลองจะเห็นได้ว่า เมื่อหมุน VR1 ทวนเข็มนาฬิกาจนสุด ค่าที่ได้จะเป็น 0 (แรงดันที่ขา A0 เท่ากับ 0โวลต์) และเมื่อหมุนไปทิศทางตรงกันข้ามจนสุด ค่าที่ได้จะเท่ากับ 1023(แรงดันที่ขา A0 เท่ากับ 5โวลต์)

อธิบายโค้ดข้างบนดังนี้

  • ในส่วนคำสั่งหลัก ๆของโค้ดด้านบนอยู่ที่บรรทัดที่ 22 คือการประกาศตัวแปรชนิด integer ชื่อว่า sensorValue แล้วนำมารับค่าที่อ่านได้จากคำสั่ง analogRead โดยอ่านค่าแรงดันที่ขา A0 ของ Arduino Uno จากนั้นนำค่าที่ได้แสดงออกทาง Serial Monitor

    1. กลับมาในส่วนของการทดลองต่อนะครับ โดยการทดลองนี้จะทำการแปลงค่าตัวเลขที่อ่านได้กลับไปเป็นค่าแรงดันแล้วแสดงออกทาง Serial Monitor ให้เขียนโปรแกรมเพิ่มตามตัวอย่างด้านล่าง

จากโค้ดด้านบนที่บรรทัดที่ 24 เป็นการประกาศตัวแปรชนิดทศนิยม(float) ชื่อ volt มารับค่าที่ได้จากการคำนวณ โดยนำค่าที่ได้จากการอ่าน ADC มาคูณด้วย 5 และหารด้วย 1024 จากนั้นบรรทัดที่ 26-28 จะแสดงค่าที่ได้หลังจากการคำนวน โดยกำหนดให้แสดงทศนิยม 2 ตำแหน่ง

แบบฝึกหัดสำหรับทบทวนความเข้าใจ

  1. ให้ทำการแสดงค่าที่อ่านได้จาก VR1, VR2 และ VR3 โดยแปลงค่าที่ได้เป็นค่าแรงดันและแสดงจุดทศนิยม 2 ตำแหน่ง

 

 

 

  1. จากความรู้เรื่องการเขียนโปรแกรมติดต่อกับจอ LCD16x2 ให้ทำการแสดงค่าที่อ่านได้จาก VR1, VR2 และ VR3 โดยแปลงค่าที่ได้เป็นค่าแรงดันและแสดงจุดทศนิยม 2 ตำแหน่ง แสดงที่หน้าจอแอลซีดี

 

 

 

  1. จากแบบฝึกหัดข้อ 2 ด้านบน เปลี่ยนไมโครคอนโทรลเลอร์จาก Arduino Uno ไปเป็น ESP32(ESP-WROM-32) แล้วทำการเขียนโค้ด จากนั้นให้อธิบายว่า ทำไมเมื่อหมุนตัวต้านทานปรับค่าได้ ในทิศทางตามเข็มนาฬิกาประมาณ 2/3 ของการหมุนจนสุด ค่าที่ได้ถึงหยุดการเปลี่ยนแปลง

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *