2020年12月8日星期二

[Arduino] analogRead 基礎

 Arduino UNO 具有多通道 10-bit 類比轉換數位功能(analog to digital converter 簡稱: ADC)。範圍介於 0 ~ 工作電壓 (5V 或是 3.3V),而 10 bit 意味著是解析度。和大部分的 ADC 功能晶片一樣,都會需要參考基準電壓。以 UNO 板來說,沒有特別指定就會以輸入電壓為準 (AVCC / 5V)。所以 每單位是 5V / 1024 = 0.0049V(4.9mV)。

既然運算時會用到  參考基準電壓 做為基礎,所以這個電壓值會影響到後面運算結果,例如: 5.1V  和 5.5V 的運算結果肯定會不一樣 。如果您對輸出精準度非常在意,就會需要使用 UNO 板上的 AREF 外接準確的電壓值做為參考電壓,例如: 完美的 5.0V 或是 完美的 3.3V。不過,這裡先敘述基本概念。往後如果有機會再做延伸。

做個簡單測試:

用一條導線連接 A0 與 3V3

Arduino 教學

程式碼:



const int analogPin = A0;
int value;

void setup() {
  Serial.begin(9600);
}

void loop() {
  value = analogRead(analogPin);
  Serial.print("val:");
  Serial.println(value);
  delay(1000);
}

開啟 Tool / Serial Montior  看會出現甚麼數值

這個數值是原生數位資料,代表3.3V呈現出來的資料。那如果是接 5V 是多少數值?

(切記!  不要連接超過 5V以上的電壓)

如果要轉換成實質電壓,可以套這個公式:


5.0 * value/1023
所以,可以將上一個程式改成


const int analogPin = A0;
int value;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  value = analogRead(analogPin);
  Serial.print("Value:");
  Serial.println(value);

  Serial.print("Voltage:");
  Serial.print((5.0 * value)/1023);
  Serial.println(" V");
  Serial.println("");
  delay(1000);
}

輸出顯示
analogRead



這裡顯示輸出的值,會是實際量測到的"接近值"。這個小小程式碼在類比應用除錯時會時常使用到,當找不出問題時。量測原生資料是不錯的方法之一。

量測電壓 可以在 電阻分壓電路 (Voltage Divider Calculator) 上可以做更多的應用,例如: NTC 感測器可以量測溫度,CDS 光敏電阻 可以量測光線明暗度,或是直接量測電池電壓.... 等。

原始碼連結:

相關連結

analogRead應用-使用熱敏電阻量測溫度 -斯坦哈特-哈特公式

analogRead應用-使用熱敏電阻量測溫度-查表法