Analog入出力があると便利
温度センサー(MCP9700)を題材に、ArduinoのAnalog入力とADコンバータとを比較してみた。
使ったもの
温度センサー(MCP9700):データシートはこちら。
ADコンバーター(MCP3008):データシートはこちら。Arduino IDEで用いたライブラリはこちら。
ソースコードと結果
温度センサー(MCP9700)のデータシートを読み解く。
温度が0度のときは500mVの出力、温度が1度上がると10mV出力が上がることがわかる。
ArduinoのAnalogおよびMCP3008の分解能は、いずれも1024(0-1023)。
Analog入力利用
const int analogInPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int read_val = analogRead(analogInPin);
float voltage = read_val * 5.0f / 1024.0f; // V
// MCP9700 spec: 500 mv at 0 degree and 10 mv / degree
float temperature = (voltage - 0.5) / 0.01;
Serial.println(temperature);
delay(3000);
}
ADコンバーター利用
#include <Adafruit_MCP3008.h>
Adafruit_MCP3008 adc;
const int mcp3008_ch = 0;
void setup() {
Serial.begin(9600);
// (sck, mosi, miso, cs);
adc.begin(13, 11, 12, 10);
}
void loop() {
int read_val = adc.readADC(mcp3008_ch);
float voltage = read_val * 5.0f / 1024.0f; // V
// MCP9700 spec: 500 mv at 0 degree and 10 mv / degree
float temperature = (voltage - 0.5) / 0.01;
Serial.println(temperature);
delay(3000);
}
対して違いはないように見えるが、、。
本当の比較
配線図
ブレッドボードの左にあるものがAnalog入力に接続されている温度センサー、中央にあるものがADコンバーター(ArduinoとはSPI接続)、中央下にあるものがADコンバーターに接続されている温度センサーである。
写真
ADコンバーターMCP3008ライブラリ
TempSensor_MCP3008.inoで使っているadc.begin()とadc.readADC()とがライブラリで何行あるか調べると、
- adc.begin() 20行
- adc.readADC() 56行
通常はライブラリを利用するであろう。ただ、スクラッチから作ると、ADコンバーターのデータシートとSPIとを理解する必要がある。それになりに面倒。
感想
あるものは使ったほうがいい。Analog入力があるのは便利。