記事一覧

直列スイッチを考えてみる

2013.03.05

秋月で大気圧センサーを買いました。600円のと350円のがあって、ピンが半田付けされているかどうかの違いと考えやすい方を買ったのですが、帰ってネットで調べるとSPIとI2Cというインターフェイスの違いもあったようで・・・
安い方→MPL115A1使用大気圧センサーモジュール(SPI)
高い方→MPL115A2使用大気圧センサーモジュール(I2C)(丸ピン実装済み完成品)
I2CならArduinoとは2本の線でデータのやり取りをできますが、SPIだと都合4本のピンが消費されることになります。ので、お金の余裕がある人はケチらずI2C用のMPL115A2を購入されることをお勧めします。(私の場合100%道楽なので、ちょっとした苦労も楽しみの一部と割り切ることに・・・)
MPL115A1に関しては、「Arduinoの動かせ方入門」の以下のページが参考になります。
気圧センサー(MPL115A1)で大気圧と標高を測定して見ます
こちらで提供されているスケッチで何の苦労もなく、適度な気圧が求められました。

と、前置きはこれくらいにして、
ArduinoにLCD、気圧計をぶっ刺していって、使えるデジタルピンが残り一本となってしまいました。
今後、操作系の機能を付け加えるのにはスイッチ類を追加することになるので、入力ピンが1本では心細いです。
で、アナログ側を見ると、今のところ湿度センサと、温度センサが刺さっているくらいで余裕があります。
で、ちょっと考えてみたのが、直列につないだ抵抗それぞれにスイッチをぶら下げて、それぞれのスイッチが押された時にあるポイントの電圧が変化する(かも?)ので、そこをアナログ計測してやれば、どのスイッチが押されたか分かるのでは?
ということで、回路にするとこんなイメージです。
ファイル 27-2.png

スケッチはサラサラッとこんな感じ

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

void loop() {
int data = analogRead(5);
Serial.println(data);
delay(1000);
}

で、ブレッドボードに抵抗とスイッチを並べて組んでみました(スイッチ後半はリード線で代用)
ファイル 27-1.jpg

エクセルにて計測したアナログ値を比較
ファイル 27-3.png

アナログピンで読み取った値をxとすると、
1024 ÷ ( 1024 - x )
の答えが押されたスイッチの番号だと判別できます。
また、複数のボタンが押された場合は番号の小さい方のボタンが識別されます。
この方法だと1つのポートで複数のボタンを共有できそうです。

タグ:Arduino