https://www.gravitechthai.com/guru2.php?p=276

Arduino startup kit บทที่ 8: Analog to Digital



     คราวนี้เราจะมาทำความรู้จักกับการอ่านค่าสัญญาณ Analog ของ Arduino Nano


  


     สัญญาณ Analog เป็นสัญญาณที่มีความต่อเนื่องขนาดของสัญญาณเปลี่ยนแปลงตามเวลา ต่างจากสัญญาณแบบ digital ที่มีแค่  0 กับ 1 เท่านั้น ใน Arduino Nano ของเรานั้นมี PIN สำหรับอ่านค่าสัญญาณ Analog อยู่ทั้งหมด 8 pin ครับ โดยการอ่านค่า analog ของ Arduino Nano จะแปลงค่าที่อ่านได้เป็นค่า digital แบบ 10 บิต หรือมีค่าเป็นจำนวนเต็มคือ 0 ถึง 1023


  


     วงจรแบ่งแรงดัน (Voltage Divider)



     ในการเรียนรู้เรื่อง Analog เพื่อความเข้าใจและเพื่อทำให้สามารถนำไปประยุกต์ใมช้ได้หลาก
หลายเราจำเป็นต้องรู้ในเรื่องของวงจรแบ่งแรงดัน โดยเป็นวงจรที่มีประโยชน์ครับ เริ่มจากถ้าเรา
นำตัวต้านทานสองตัวมาต่ออนุกรมกัน แล้วป้อนแรงดัน (Vin) ให้กับตัวต้านทานสองตัวนั้น
ค่าแรงดันที่ออกมาจากวงจรนี้ (Vout) จะมีค่าเป็นไปตามสมการด้านล่าง
  

  


     อธิบายง่ายๆคือ วงจรแบ่งแรงดัน สามารถแบ่งแรงดันให้ลดน้อยลงได้ โดยแรงดันที่ลดลง
จะเป็นสัดส่วนเท่ากับค่าความต้านทานของตัวต้านทาน R2 ต่อค่าความต้านทานรวมทั้งหมด
และต่อไปเป็นตัวอย่างครับ
  



     จากตัวอย่างเมื่อเรานำตัวต้านทานที่เท่ากันมาต่ออนุกรมกัน แล้วป้อนแรงดันขนาด 5V ให้กับมัน สัดส่วนของ R2 ที่อยู่ด้านล่างกับ R1+R2 จะเป็น 1 ต่อ 2 พอดี ดังนั้นแรงดันที่ป้อนเข้ามา 5V จะถูกแบ่งให้ลดลงเหลือ 2.5V ตามที่เห็นในภาพด้านบน



     Variable Resistor (VR)



  

     ตัวต้านทานแบบปรับค่าได้ ส่วนใหญ่จะมีทั้งหมด 3 ขา ซึ่งภายใน VR นั้นก็คือวงจรแบ่งแรงดันนั่นเอง แต่ค่าของตัวต้านทานที่อยู่ในวงจรสามารถเปลี่ยนแปลงได้ด้วยการหมุนจากมือของเราเอง ดังนั้นเมื่อเราป้อนแรงดันขนาด 5V ให้กับขาทั้งสองของ VR เราจะสามารถปรับแรงดันฝั่งขาออกได้ 0 – 5V



  

     ทดลองต่อวงจรให้กับ Arduino โดยต่อตามวงจรด้านบนครับ
  



      เมื่อต่อวงจรแล้วลักษณะของ โปรโตบอร์ดจะออกมาแบบนี้ครับ และเมื่อต่อวงจรเสร็จเรียบร้อยแล้วคราวนี้เรามาของเขียนโปรแกรมเพื่ออ่านค่า Analog กันครับ โดยฟังก์ชันที่ใช้สำหรับอ่านค่า Analog คือ


analogRead(PIN);


     โดยในส่วนของ PIN นั้นคือหมายเลขขาของ Arduino ที่เราต้องการให้มันอ่านค่า Analog ยกตัวอย่างเช่นถ้าเราต้องให้ ขา A7 ของ Arduino Nano อ่านสัญญาณ Analog เราต้องใช้ คำสั่งว่า


analogRead(7);


     Arduino จะทำการอ่านค่า Analog มาให้เรา โดยค่าที่ Return กลับมาจะเป็นจำนวนเต็มตั้งแต่ 0 ไปจนถึง 1023 ดังนั้งการใช้คำสั่ง analogRead จำเป็นต้องมีตัวแปรมาเก็บค่าที่อ่านได้จากฟังก์ชั้นนี้ โดยต้องประกาศตัวแปรเป็นจำนวนเต็ม (Integer) ตามตัวอย่าง


int value;
value = analogRead(7);


     เป็นการสั่งให้ Arduino อ่านค่า analog จากขา 7 แล้วนำค่าที่ได้มาเก็บไว้ตัวแปรชนิดจำนวนเต็มที่ชื่อว่า value คราวนี้เรามาลองดูโปรแกรมแบบเต็มๆกันดีกว่า กับโปรแกรมที่สั่งให้ Arduino อ่านค่า Analog จากขา 7 แล้วแสดงผลผ่านทาง serial ทุกๆ  1 วินาที โปรแกรมตัวอย่างเป็นดังนี้


int value; //declare integer parameter
void setup() {
  Serial.begin(9600); //Start Serial Comunication with baud rate 9600
}
void loop() {
  value = analogRead(7); //Read analog signal
  Serial.println(value); //Print value to Serial Port
  delay(1000); //delay for 1 second
}


อัพโหลดให้กับ Arduino Nano เมื่ออัพโหลดเสร็จแล้ว เปิด Serial Monitor เพื่อดูว่า Arduino ส่งอะไรมาที่Serial port โดยกดที่ไอคอนดังรูป



  
     สำหรับ Arduino Nano เมื่อเรากดเปิด Serial monitor ขึ้นมา ตัวบอร์ดจะมีการรีเซตตัวเอง 1 ครั้ง แล้วเริ่มทำงานตั้งแต่บรรทัดแรกใหม่อีกครั้ง ในจุดนี้ต้องควรระวังเอาไว้ครับสำหรับโปรแกรมที่ต้องทำงานเป็นระยะเวลานาน เมื่อเราเปิด Serial monitor ขึ้นมาจะพบว่า Arduino Nano ได้ส่งค่า ตัวเลขที่เกิดจากการแปลง analog เป็น digital มาให้เราทุกๆ 1 วินาที เมื่อเราทดลองหมุนเพื่อปรับค่าให้ตัวตานทานปรับค่าได้ สังเกตุว่าค่าที่อ่านได้บน Serial monitor มีการเปลี่ยนแปลงไปด้วย โดยค่าน้อยสุดที่เกิดขึ้นก็คือ 0 และสำหรับค่ามากสุดก็คือ 1023 ครับ และบทนี้ก็คือการใช้งานฟังก์ชันสำหรับการแปลงค่า Analog ให้เป็นค่า Digital ของ Arduino ซึ่งมีประโยชน์ในการติดต่อกับอุปกรณ์ภายนอก หรือเซนเซอร์บางชนิดที่ให้ค่าสัญญาณเป็น Analog

ความคิดเห็น

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

https://www.arduitronics.com/article/22/arduino-and-motor-control-part-1

https://medium.com/sathittham/arduino-lcd-16x2-hello-world-dca09fd904f8

อธิบายโปรแกรมHow To Make Arduino Based Home Automation Project via Bluetooth