ツタンラーメンの忘備録

プログラミングや精神疾患、ラーメンについて書いていきます。たぶん。

Arduino analog入力 足りない 増やす

意外とまとまっているサイトがなかったのでまとめておく。
Arduinoのアナログ信号はA0~A5の6つしかない。

が、増やす方法がないわけではない。

方法は二つ(初心者なので厳密にはいろいろ違うことを許してほしい)
・ADコンバータを使う
・MUX(マルチプレクサ)を使う

これら。デジタル信号を増やしたいときはIOエキスパンダーとか言うのがある。これも面白いのであとで記載したい。

とりあえず方法を教えろ、原理はあとで勉強するという人向けの記事であることを最初に述べておく。


まずADコンバータ
f:id:hungrykirby:20170826191005j:plain
こんな回路になる。詳しい説明はいつか解説したい。
画像では薄くてわかりづらいが、小さな丸と凹みの部分をちゃんと確認してください(名前の方向は関係ない)

用いたのは

である。
コードは下に記載されている二つの記事のうち上のやつものがそのまま動く

電子部品使い方:マイコンのADC(MCP3208)変換
sites.google.com
参考にした記事

上記記事を見るといろいろ注意書きがあるので、ちゃんと使う人はちゃんと勉強した方がいいと思う。


次にMUX

f:id:hungrykirby:20170911160658j:plain
こんな回路になる

用いたのは

である。
コードは下記ライブラリが古いが使える。

github.com

適当に描いたコードを

#include <Mux.h>

Mux mux;
int counter=0;
void setup(){
  Serial.begin(9600);
  mux.setup(5,4,3,2,A0);
}

void loop(){
  
  int val = mux.read(counter);
  
  if(counter==15){
    Serial.println(val);
    delay(1000);
  }else{
    Serial.print(counter);
    Serial.print(":");
    Serial.print(val);
    Serial.print(", "); 
  }
  
  counter = ++counter & 15;
  
  delay(50);
}

このうち0しか使っていないので、他の値は乱れがち