ソロでたのしむ

キャンプ、電子工作、DIY、乗り物などの趣味を紹介

超簡単な電気・電子回路を使えば、もっとArduinoが使える。「日常で使えるArduino作品」別冊

以前の記事で、車やバイクとキャンプにおけるArduino実用例をいくつか紹介しました。

www.solocamptouring.com

 

そこで紹介した作品でも実践していますが、Arduinoを実用するにあたり電子部品を使ってArduinoに適したデジタル信号をつくることがあります。

今回は、実際に電子部品を使った例について紹介いたします。

記事内の回路図はFritzingで作りました。


デジタルについて

まず簡単にデジタル回路について紹介します。

デジタル信号の基本構成は、

  •  1  か  0

です。

同じ状態に対して、他にも使い方(呼び方)があります。

  •  1   か   0
  • ON   か OFF
  • High か Low
  • 5V   か  0V

5Vで動かす電子回路の場合、最後の「5Vか0V」を回路内で作れば、その電圧を電子回路のデジタル信号として使えます。
5Vを使うArduinoでは、デジタルピンにかかっている電圧が「5Vか0V」を読み取って、「HIGHかLOW」と読み替えて制御用の情報にします。

HIGHとLOWの境目は、Arduinoの種類によっても違いますが、ここでは中央値の2.5V近辺としておきます。

スイッチ操作をデジタル信号に変える

スイッチのON/OFF状態を正しくArduinoに認識させるために抵抗を使います。

まず下の抵抗を使わない回路で考えてみます。

f:id:solocamptouring:20180304194503j:plain

スイッチS1がつながると、ArduinoのD7ピンには5Vがかかります。その時ArduinoはD7ピンが「HIGH」だと認識します。

スイッチS1がつながっていない時のD7ピンが問題です。「5Vかかっていないのだから0V」だと勘違いしそうですが、D7ピンはどこにもつながっていないので、「電圧がわからない状態」が正解です。

スイッチS1がつながっていない時にArduinoからD7のデジタル状態を読もうとしても、場合によってHIGHだったりLOWだったりして安定しません。

プルダウン抵抗とプルアップ抵抗

どこにもつながっていないArduinoのデジタルピンは、HIGHでもLOWでもないことを紹介しました。

スイッチの状態を正しくArduinoに教えるためには、積極的に5Vと0Vを作ることが必要です。

下の回路で考えてみます。

f:id:solocamptouring:20180304195045j:plain

スイッチS1がつながっていると、ArduinoのD7ピンには5Vがかかります。この時、抵抗R1には5Vがかかっていますが、10KΩなど高い抵抗値を設定しておけば、ほとんど電流は流れません。

スイッチS1がつながっていない時、ArduinoのD7ピンは抵抗R1を中継してグランドに接続されています。電子回路では電流はほとんど流れないので抵抗R1での電圧変化はなく、D7ピンは約0Vの状態に保たれます。

この抵抗R1をプルダウン抵抗と呼びます。

 

次に、プルダウン抵抗の回路からスイッチと抵抗のつなぎ方を変えてみます。

f:id:solocamptouring:20180304195246j:plain

スイッチS1がつながっている時、ArduinoのD7ピンはグランドに接続されてるので0Vです。

スイッチS1がつながっていない時、ArduinoのD7ピンは抵抗R1を中継して5Vに接続されており、プルダウン回路と同様に抵抗には電流がほとんど流れないので、D7ピンは約5Vになります。

この抵抗R1をプルアップ抵抗と呼びます。

Arduino内部のプルアップ抵抗を使う

プルダウン抵抗、プルアップ抵抗について紹介しましたが、実はArduinoの内部にプルアップ抵抗が準備されており、少しスケッチを変えるだけで簡単に使うことができます。
たとえば、これまで紹介してきた回路でデジタルピン7の状態(HIGH,LOW)を調べた結果を”sw1Status”に代入する場合、スケッチ(抜粋)は

void setup() {
pinMode(7, INPUT);
}
void loop(){
int sw1Status = digitalRead(7);
}

となります。

これが、Arduino内部のプルアップ抵抗を使う場合は、

void setup() {
pinMode(7, INPUT_PULLUP);
}
void loop(){
int sw1Status = digitalRead(7);
}

として、「7番ピンはインプットで使うけど、ついでに内部のプルアップ抵抗も使います」と宣言するだけです。

ただし、そのピンに何も接続していない状態では、常に5Vがかかっている事になるので、隣りのピンなどとショートしないように注意しないといけません。

12V電圧をデジタル信号に変える

一般的に、車やバイクのブレーキ灯、ウインカー、リバース灯から並列で得られる電圧は約12~14Vです。

Arduinoで使える「HIGHかLOW」という信号にするために、下の回路で変換します。

12Vをデジタル信号(5V)に変える_回路図

 

スイッチがつながっている時、ArduinoのD7ピンの電圧は約4.5V(5V×10÷11)になっています。

スイッチがつながっていない時、ArduinoのD7ピンはプルダウン抵抗R1を中継してグランドに接続されてるので、D7ピンは約0Vになります。


可変抵抗をセレクタとして使う

最後に、Arduinoのアナログピンで、可変抵抗(ボリューム)をセレクタとして使う方法を紹介します。

可変抵抗をセレクタとして使う

可変抵抗に5Vを印加して、可変抵抗で変えた電圧を、Arduinoのアナログピン(下の回路図ではA5)に接続します。

可変抵抗をセレクタとして使う

電圧とArduinoの読み取り値は、下記の条件で比例しています。

  • 電圧; 0〜5V
  • Arduinoの読み取り値; 0〜1023(整数)

セレクターとして使う場合は、1023を選択肢数で割って、それぞれの範囲での条件式を作ります。

下のスケッチは、以前に8x8カラーLEDボードを6種類で光らせた時に紹介した記事からの抜粋です。

void loop()
{
val = analogRead(analogPin);

if (val < 150) {
gCurrentPatternNumber = 0;
} else if (val < 300){
gCurrentPatternNumber = 1;
} else if (val < 450){
gCurrentPatternNumber = 2;
} else if (val < 600){
gCurrentPatternNumber = 3;
} else if (val < 750){
gCurrentPatternNumber = 4;
} else if (val < 900){
gCurrentPatternNumber = 5;
} else {
gCurrentPatternNumber = 6; 
}
}

測定した電圧に応じて、パターン番号を0~6まで変えています。

パターン「0」では何も光らせていないので、実際は6種類の光らせ方をコントロールしています。

ボリュームは、変化を確認しながらワンモーションで狙いのパターンに変更できるので、車のような手元に視線を集中できない環境化ではプッシュ式の切り替えスイッチよりも操作性がいいです。

www.solocamptouring.com

以上が、Arduinoを使った作品で、私がよく使う回路です。

DCモーターなど電力消費が多いものを動かす場合は、トランジスタやリレーをを使うこともありますが、小電流の作品であれば今回紹介した回路の応用で、ほとんど事足ります。