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
|
ความคิดเห็น
แสดงความคิดเห็น