วิธีอ่านค่า Analog บน Arduino ด้วย analogRead()
วิธีอ่านค่า Analog บน Arduino ด้วย analogRead()
Arduino สามารถรับสัญญาณแบบต่อเนื่อง (Analog) ได้ ต่างจากสัญญาณดิจิทัลที่มีแค่ 0 กับ 1 อุปกรณ์ภายนอกหลายตัว เช่น ตัวต้านทานปรับค่าได้ (potentiometer), เซ็นเซอร์วัดแสง, เซ็นเซอร์วัดอุณหภูมิ จะส่งค่าเป็นระดับแรงดันไฟฟ้ามาให้เราอ่าน
Analog Input บน Arduino ทำงานอย่างไร
บอร์ด Arduino มี Analog to Digital Converter (ADC) ในตัว จำนวน 6 ช่อง คือ A0-A5
- รับแรงดันได้ช่วง 0-5 โวลต์
- แปลงเป็นตัวเลข 10-bit คือ ค่า 0-1023
- ไม่มีหน่วย (เป็นค่าดิจิทัลที่ Arduino คำนวณให้)
การใช้งาน analogRead()
ฟังก์ชันที่ใช้อ่านค่า Analog คือ analogRead(pin) โดยกำหนด pin เป็นช่อง A0-A5
// กำหนดช่องที่ต่ออุปกรณ์ Analog
const int sensorPin = A0;
void setup() {
Serial.begin(9600); // เปิด Serial Monitor ดูค่าที่อ่านได้
}
void loop() {
int value = analogRead(sensorPin); // อ่านค่า 0-1023
Serial.println(value); // แสดงค่าออกมาทาง Serial
delay(100);
}
ตัวอย่าง: หรี่ไฟ LED ด้วย potentiometer
ต่อ potentiometer เข้ากับ A3 แล้วใช้ค่าที่อ่านได้ควบคุมความเร็วการกระพริบของ LED ที่ขา 13
[image: ภาพตัวอย่างการต่อ potentiometer เข้ากับ Arduino บน breadboard แสดงตำแหน่งขา A3 และ LED ที่ขา 13]
// กำหนดขา potentiometer และ LED
const int sensorPin = A3;
const int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// อ่านค่า Analog จาก potentiometer
int sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
// ส่งค่าไปควบคุม LED ผ่านฟังก์ชัน Blinky
Blinky(sensorValue);
}
void Blinky(int timeMs) {
digitalWrite(ledPin, HIGH);
delay(timeMs); // หน่วงเวลาเท่ากับค่าที่อ่านได้
digitalWrite(ledPin, LOW);
delay(timeMs);
}
หลักการที่ควรเข้าใจ
ความละเอียดของ ADC
ADC 10-bit หมายความว่า Arduino แบ่งช่วงแรงดัน 0-5V ออกเป็น 1024 ระดับ (0-1023) ถ้าแรงดันเปลี่ยนน้อยมาก ค่าที่อ่านได้อาจไม่เปลี่ยน ซึ่งเป็นข้อจำกัดของฮาร์ดแวร์
การเปลี่ยนค่าแรงดันเป็นโวลต์
ถ้าต้องการค่าเป็นโวลต์จริง ให้คำนวณจากสูตร:
โวลต์ = (ค่าที่อ่าน / 1023) × 5
float voltage = (analogRead(A0) / 1023.0) * 5.0;
Serial.println(voltage); // แสดงค่าเป็นโวลต์ เช่น 2.34
ห้ามใช้ขา Digital เป็น Analog Input
ขา Digital (D0-D13) ใช้สำหรับสัญญาณดิจิทัลเท่านั้น ถ้าต้องการอ่าน Analog ต้องใช้ขา A0-A5
[image: แผนผังบอร์ด Arduino UNO เน้นขา A0-A5 พร้อมระบุว่าเป็นช่อง Analog Input]
วิดีโออ้างอิง
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก
จ้างทำโปรเจคเลย