Analog入出力内蔵の威力


Analog入出力があると便利

温度センサー(MCP9700)を題材に、ArduinoのAnalog入力とADコンバータとを比較してみた。

使ったもの

温度センサー(MCP9700):データシートはこちら
ADコンバーター(MCP3008):データシートはこちら。Arduino IDEで用いたライブラリはこちら

ソースコードと結果

温度センサー(MCP9700)のデータシートを読み解く。

温度が0度のときは500mVの出力、温度が1度上がると10mV出力が上がることがわかる。

ArduinoのAnalogおよびMCP3008の分解能は、いずれも1024(0-1023)。

Analog入力利用

TempSensor_Analog_.ino
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コンバーター利用

TempSensor_MCP3008.ino
#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コンバーターに接続されている温度センサーである。

写真

Analog入力ではこうなる。すっきり。

ADコンバーターではこうなる。少々カオス。

ADコンバーターMCP3008ライブラリ

TempSensor_MCP3008.inoで使っているadc.begin()とadc.readADC()とがライブラリで何行あるか調べると、
- adc.begin() 20行
- adc.readADC() 56行

通常はライブラリを利用するであろう。ただ、スクラッチから作ると、ADコンバーターのデータシートとSPIとを理解する必要がある。それになりに面倒。

感想

あるものは使ったほうがいい。Analog入力があるのは便利。