アナログピンを増設する「ADコンバータ」の使い方 [Arduino]
Arduino UNOのアナログピンはA0からA5ピンで合計6ピンあります。
今回の「ADコンバータ」(MCP3002)を使用すると2ピンが増設されて合計8ピンを使用する事が可能です。また、増設されたピンはSPI接続でアナログ値を取得する事が可能です。
※ADコンバータ(A/D変換)は「アナログからデジタルへ変換」の意味です。
使用部品・材料
総額で約730円です。(Arduino本体の値段を除く)
| 部品/材料 | 値段 | 備考 |
|---|---|---|
| サンハヤト SAD-101 ニューブレッドボード | ¥500 | Amazon.com |
| 10bit 2ch ADコンバータ MCP3002-I/P | ¥180 | 秋月電子の通販コード(I-02584) |
| 半固定ボリューム 10kΩ [103] | ¥50 | 秋月電子の通販コード(P-08012) |
配線図
アナログ入力はCH0とCH1ピンの2つあります。
次は公式データシートより(mcp3002.pdf)
通信用のフラグはスケッチから意味を読み取ってください。
SPI接続用のピン
マスターはArduino。スレーブはMCP3002です。
| 番号 | 名称 | 内容 |
|---|---|---|
| 13 | SCK | Serial ClocK。データ転送の同期の為のマスターからのクロ ック信号。 |
| 12 | MISO | Master In Slave Out。スレーブからマスターへデータを送る。 |
| 11 | MOSI | Master Out Slave In。マスターからスレーブへデータを送る。 |
| (10) | SS | Slave Select pin。スレーブ選択ピン。10ピン以外でも使用可能です。 SPI接続でデバイス間の通信をする場合は、このピンをLOWにしている間に行います。通信を終了する場合はHIGHにします。 |
このピン番号と名称はArduinoで使用されているものです。デバイスによって異なる場合があります。
スケッチ(プログラム)
シリアルモニターに2つのアナログ入力の結果を表示します。
CH0には5V電源をそのまま入力していますので常に1023ぐらいです。CH1は半固定抵抗器のつまみを動かすと値が変化するようにしています。
#include <SPI.h>
// SCK : pin 13 (Serial ClocK)
// MISO : pin 12 (Master In Slave Out)
// MOSI : pin 11 (Master Out Slave In)
// SS : pin 10 (Slave Select pin)
// 通信用のフラグ
const int START_BIT = 0x40; // 2進 1000000
const int CH0 = 0x20; // 2進 100000
const int CH1 = 0x30; // 2進 110000
const int MSBF = 0x08; // 2進 1000
void setup() {
Serial.begin(9600);
// SPIの初期化
// ※自動的に「SCK、MOSI、SSのピンの動作はOUTPUT」となり「SSはHIGH」となる
SPI.begin();
// SPI転送モード
// クロック位相(CPOL) = 0 クロック極性(CPHA) = 0
SPI.setDataMode(SPI_MODE0);
// SPI送受信用のビットオーダー(MSBFIRST)
SPI.setBitOrder(MSBFIRST);
// SPIクロック分周器 4MHz = 16MHz/4
SPI.setClockDivider(SPI_CLOCK_DIV4);
}
void loop() {
uint8_t hi,lo;
uint16_t value;
// CH0の読み込み
digitalWrite(SS, LOW);
hi = SPI.transfer(START_BIT | CH0 | MSBF);
lo = SPI.transfer(0x00);
digitalWrite(SS, HIGH);
value = ((hi << 8) | lo) & 0x03FF;
Serial.print("CH0 : ");
Serial.print(value);
Serial.print(" ");
// CH1の読み込み
digitalWrite(SS, LOW);
hi = SPI.transfer(START_BIT | CH1 | MSBF);
lo = SPI.transfer(0x00);
digitalWrite(SS, HIGH);
value = ((hi << 8) | lo) & 0x03FF;
Serial.print("CH1 : ");
Serial.println(value);
delay(250);
}
実行例
最後に
今回のようにアナログピンが不足している時に、180円のMCP3002でピンを増設する方法がありますが、250円でArduinoを作る方法もあります。
スポンサーリンク
掲示板
ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。
関連記事
公開日:2017年08月23日
記事NO:02537
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









