Arduinoの勉強　第12弾：スイッチの仕組み・種類・利用

# #スイッチの仕組み・種類・利用
##はじめに
ハードウェアの勉強のためにArduinoを復習も兼ねて参考教材に沿って，勉強する．細かな部分の理解までして，自在に扱えるようになることが目的である．その第11弾として，「スイッチの仕組み・種類・利用」を扱う．

## スイッチとは
**オン・オフの切り替えができる部品**

<img width="500" alt="スイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/6e72fc41-88e9-2b8f-19b5-68c8b9771008.png">

スイッチの回路図（左：プッシュスイッチ，右：トグルスイッチやロッカースイッチ）

### 動作の種類
- **モーメンタリ動作**
    - 押すとオンになり，離すとオフになる（逆もある）

<img width="1000" alt="モーメンタリ動作" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/068d3a55-f993-8e8b-ab1e-850045ebcdfa.png">

- **オルタネート動作**
    - 押すとオンになり，離してもオフにならない
    - もう一度押すとオフになる
    - 状態を持続的に保ちたいときなどの用途に利用される

<img width="900" alt="オルタネート動作" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/b10a7587-3843-f375-6b70-5e05251a3ab0.png">

### 端子の種類
- **2端子**
    - オンにすることで離れている端子間が導通

<img width="700" alt="2端子スイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/c6467aa3-b18f-d42e-9140-1ae486663139.png">

- **3端子**
    - 両端に異なる電位があり，中心と一端が導通する
    - 例えば，両端を0Vと5Vにすると，それらの切り替えが可能

<img width="500" alt="3端子スイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/ff97646e-d6eb-655a-7e34-b45205943a55.png">

### スイッチの種類
<img width="300" alt="押しボタンスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/2f9392da-ad80-b978-09ca-103f9832258b.jpeg">

- **押しボタンスイッチ（プッシュスイッチ）**
    - 押すことで切り替えられる
    - モーメンタリ動作とオルタネート動作それぞれに対応したものがある

<img width="300" alt="タクトスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/3b6ef59a-73b9-36f2-5fe4-f68386386366.jpeg">

- **タクトスイッチ（タクタイルスイッチ）**
    - 安定して固定できるように通常4つの端子を搭載
    - ただし，内部では2端子ずつつながっているため，実際には2端子スイッチとして動作

<img width="300" alt="スライドスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/2615aa66-0770-4bea-e89b-73bec4bc0683.jpeg">



- **スライドスイッチ**
    - スライドすることで両端の端子に切り替えられる
    - 一般的にオルタネート動作

　　　　<img width="200" alt="トグルスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/1c66befd-ab86-a4ef-c80a-0e29992794a5.jpeg">

- **トグルスイッチ**
    - 棒状の部品を両端に倒して切り替えられる
    - 構造上，スイッチを倒した逆の端子が導通
    - モーメンタリ動作とオルタネート動作それぞれに対応したものがある

　　　<img width="220" alt="ロッカースイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/42e1eb28-90c3-42c8-8c47-0455ee7d963d.jpeg">

- **ロッカースイッチ**
    - 両端がシーソーのように切り替えられる，よく見るスイッチ
    - オルタネート動作が一般的

　<img width="300" alt="ディップスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/ae6621d9-cc96-c6f2-2daa-45305513ae3e.png">

- **DIP（ディップ）スイッチ（DIP: Dual In-line Package）**
    - 複数の小型スイッチを搭載したスイッチ
    - 各スイッチは非常に小さいため，頻繁にスイッチを切り替えるような用途には向いていない


## プルアップ・プルダウン
### 2端子スイッチの不安定性
- **2端子スイッチはオフのときには何もつながっておらず不安定！**
    - 何もつながっていない状態では電圧が不安定になる（ハイインピーダンス状態）
    - 手を近づけたり，端子に触れるだけで電あるが大きく変化する

　　　　　　　　　　<img width="300" alt="ディップスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/9243e3a3-b20f-a578-2a40-76080de425f2.png">

この状態では，入力がLOWになったりHIGHになるなど，不安定になる．
入力が不安定になると，スイッチを操作していないのに，プログラムが「スイッチが切り替わった」と判断して，動作がおかしくなる場合がある．

- 3端子スイッチはオンでもオフでも何かしらとつながっており，明示的に0Vの状態にできるため安定している

### 安定化のための工夫
- プルアップ抵抗
    - スイッチを押していない時に，出力をHIGHにしておく

　　　　　<img width="500" alt="プルアップ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/293d02c9-35dc-98f5-09d4-408e23f37626.png">

**OFFのとき**には，5Vからマイコンの抵抗（出力）を通ってGNDへの直列つなぎとなる．抵抗が2つあるため，分圧が生じる．ただし，プルアップ抵抗に比べてマイコン側の抵抗がはるかに大きいため，結果として**5Vがマイコン側に印加**される．

**ONのとき**には，スイッチ部分とマイコン側が並列となる．そのため，**マイコン側も0V**となる．

したがって，**スイッチOFFのときにHIGHとなり，スイッチONのときにLOW**となる．


- プルダウン抵抗
    - スイッチを押していない時に，出力をLOWにしておく

　　　　　<img width="550" alt="プルダウン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/ad5f24b8-2486-4876-1707-2846f60b8742.png">

プルダウンは分かりやすく，常にマイコン側と並列になる部分があり，その部分と同じ電圧となる．

したがって，**スイッチOFFのときにLOWとなり，スイッチONのときにHIGH**となる．

#### プログラム上での工夫
- プログラム上でArduino内のプルアップ抵抗を有効にできる
    - ただし，プルダウン抵抗は搭載されていなく，別途用意が必要
- 内蔵のプルアップ抵抗を使うことで，作成する回路が単純になる

## 様々なスイッチの利用
### マイクロスイッチ（確実に押せる）

　　　　　　　<img width="150" alt="マイクロスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/22cc51f0-fa42-6749-269a-149ef842953b.jpeg">

- ボタンの上に広い板がついており，軽く押すだけでスイッチが押される
    - 扉や箱のふたを閉めた際に確実にスイッチが押される

- ボタンを一定以上に押し込む
    - 所定の力以上で押した場合に信号を検知する用途にも利用される

- 離している場合に導通する端子には「NC」と記載
    - Normal Close: 何もしないと閉じている
- 押されたときに導通する端子には「NO」と記載
    - Normal Open: 何もしないと開いている

### チルトスイッチ（傾きを検知できる）

<img width="450" alt="チルトスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/e3de63c0-660e-3223-0d46-14c4bb1632dc.png">

- ストーブなど火気を利用する機器では，機器が転倒していないかを常に確かめて，転倒した場合には緊急停止させることが危険を回避する必要がある

- 通常は導通しているが，**傾くことでスイッチが切れるようになってる

- 複数のチルトスイッチを使えば，右や左，逆さになったなど傾いた方向についても調べられる
    - 正確な傾き具合について把握したい場合は，加速度センサを使う
        - 加速度センサのように細かな傾き具合は分からない
        - 単にある方向に傾いたかどうかが分かる

### リードスイッチ（磁気を検知できる）

<img width="650" alt="チルトスイッチ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/2eaacc26-2761-d3bf-8f20-b1b69a26500c.png">

　　　　　　　　　　　　　　　　　引用：カメットマメ知識　第31回　『リードスイッチとは？』

- 磁気を検知して切り替わるスイッチ

- スイッチに触れずに状態を切り替えることができる
    - ガソリンのような危険物のカサを調べたり，移動する物体の通過を検知したりといった用途で活用されている

- 車輪に磁石を付け，リードスイッチで磁石の通過を検知できれば，車輪の回転数をカウントできる
    - さらに車輪の大きさが分かれば，回転数から走行距離を導きだすこともできる

## チャタリング

### 現象
スイッチは金属板を使って端子と端子を接続することで導通

- 金属板を端子に接続する際，反動で「付いたり離れたり」を**ごく短い時間繰り返す**．
- **人間には振動しているのが分からない**ほど短い時間
    - そのため，すぐにオン状態になっていると感じる
- 電子回路上では，この振動を感知してしまう
    - それにより，**「オンとオフ」を繰り返している**とみなされてしまう

　　　　　　　　<img width="400" alt="チャタリング" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/a0881b65-e26f-49cd-aa0a-2a2f0f0005c9.png">

**このような現象をチャタリング**という

### チャタリング防止
- プログラムの工夫
    - チャタリングはごく短い時間の情報を読み取ってしまっている
    - プログラム内で入力情報を取得後，次の取得までに遅延を設けることで，チャタリングを防ぐ
    - 手軽ではあるが，**プログラム全体の遅延にもつながる**
    - 特にチャタリングが長く続く場合には，よくない

- 回路の工夫
    - チャタリング防止回路をボタンの出力後に作成することで軽減

　　　　　　　　　　　<img width="350" alt="チャタリング防止回路" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/c4e69d3c-13f7-1ee6-cb41-75a77a3ce887.png">

- 抵抗の役割
    - 電流を抑え，急激に電荷が流れるのを抑止する
- コンデンサの役割
    - 両端に電荷を貯めることで，電圧の変化を緩やかにする特性がある

### チャタリング防止回路のさらなる工夫
先ほどのチャタリング防止回路で変化が緩やかになったことで，**状態が不安定**になったり，スイッチが**反応するまでの時間が遅く**なったりすることがある．

解決策として，**シュミットトリガ**の機能を搭載したICの利用がある

- **シュミットトリガ**
    - 一定の電圧（閾値）を超えると5Vや0Vに切り替わる
    - IC例：74HC14 ← NOTゲートが実装され，入力を反転する特性を持つ

シュミットトリガ機能を搭載した汎用ロジックIC（ここでは74HC14）を組み込んだチャタリング防止回路を以下に示す．これで，チャタリング防止回路において生じる不安定性，遅延を考慮したチャタリング防止回路ができる．

<img width="700" alt="チャタリング防止回路_改" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/dde4f875-9347-878a-46f8-ebe23223e239.png">

### 汎用ロジックICシリーズ
論理ICにはいくつかのシリーズが存在し，動作速度や消費電力，動作電圧，サイズなどが異なる

- **「74LS」シリーズ**：トランジスタの動作を用いて作成される
    - **動作速度が速い**
    - 消費電力が74HCシリーズよりも大きい
        - 駆動に5V必要としているため，**3.3V入出力しかないArduinoには不向き** 
- **「74HC」シリーズ**：MOSFET（電界効果トランジスタ）の構造をもつ
    - 74LSシリーズよりも**低消費電力で動作**する
    - MOSFETはトランジスタに比べて遅いという欠点があったが，
     74HCシリーズは74LSシリーズと**同等な速度で動作**する

## ボリューム（可変抵抗器）
スイッチのようにオン・オフのような出力ではなく，範囲に応じて自由な値を出力することが可能となる．

### 仕組み

<img width="600" alt="チャタリング防止回路_改" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/b80c1674-da06-2c8a-dc82-88bb7fedd65d.png">



- 線状の抵抗素子が入っている
- 一般的に3端子
    - うち2本の端子は抵抗素子の両端に取り付けられる
    - 中央の端子は抵抗素子上を動かせる

**中央と両端のそれぞれの端子間の距離に応じて変わるようになる．**

### ボリュームの形状

<img width="250" alt="回転式ボリューム" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/72f1d85e-60ea-1ba6-fb77-dd1ddb9ffd50.jpeg">

- **回転式ボリューム**
    - 上部についた棒状の回転軸を回すと抵抗値が変化するボリューム

　　　<img width="200" alt="スライドボリューム" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/4f80e2f5-54f0-b266-893b-75568c47a791.jpeg">

- **スライドボリューム**
    - 直線状に動かして調整するボリューム
    - ボリュームの**位置を一目で把握**できる

　　　　<img width="180" alt="半固定抵抗" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/c4d3e673-366c-aa22-4bbb-8571a68a0868.jpeg">

- **半固定抵抗**
    - ドライバなどの**工具を使って回転させる**
        **理由**：センサの感度を調整する場合など，調整後にほとんど動かすことがなく，逆に容易に動くと
調整がずれて正しい動作をしなくなる恐れもある．
    - 不用意にボリュームが動くことはない

### ボリュームの抵抗値

　　　　<img width="600" alt="半固定抵抗" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/0cb7b737-0fc6-b580-14c8-9ab5ae52ddb0.png">

基本的に，半固定抵抗の抵抗値は，3桁の数値で表されている．
- 上2桁の数値に，下1桁の数だけゼロを付け足した値

### 内部抵抗の変化を電圧に変換する（分圧回路）
　　　　<img width="400" alt="分圧回路" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/1a2f339e-ae45-ad2b-2238-d56439c545d0.png">

ボリュームにより得られる出力電圧は上図のように分圧によって求められる．

**ただし，内部抵抗の変化としては，ボリュームの製品ごとに変化具合が異なる．**
　　　　　　　<img width="400" alt="カーブ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/e1a6a1a7-2aaf-ac48-000f-b075eedf551e.jpeg">
引用：ナルガッキ【Aカーブ？Bカーブ？】 ボリューム、トーンに適したポットのカーブの特徴と違い
- **Aカーブ**
    - 最初の内は変化が少なく、回すほどに変化が急激になっていく特性を持つ
        - 人間の耳の特性によく合っている
        - 人の耳の特性上、電気的な信号の大きさ＝音量が倍になっても、人間の耳には倍には感じられない
    - 音量を変える時に比較的自然に推移するように聴こえる
- **Bカーブ**
    - 動かした度合と抵抗の変化が比例的に変化する
- **Cカーブ**
    - 少し回しただけで急激にパラメーターが変わり、後になるほどその変化が緩やか

**カーブの使い分けにより挙動が異なる**
例）スピーカー
Bカーブのボリュームを利用すると，音が鳴らない状態から途中まで音の変化がなく，**ボリュームを大きく動かさないと音は大きくならない**．

そこで，Cカーブを使うと，音が鳴らない状態から**少ないボリュームの調整で音の大きさが変化する**．

## 感想
今回は，スイッチに関して学んだことすべてをまとめて1つの記事に書いたため，非常に長くなってしまった．スイッチというカテゴリでもこれほど多くの学ぶべきことがあった．まだまだ広く網羅しきれてはいないが，これだけ抑えていれば，基本は大丈夫だと思う．これ以上のことは，実践していく中で経験を積んでいくものと思われる．最後のカーブの話については，教材のカーブが間違っているのではないかと考えている．実際にネットで検索しても，教材にあるカーブと同じものは見つけられなかった．教材のカーブはAとCが逆になっていた．私自身がこのカーブに関しての知見がないためにどれが正しいかは分からないが，とりあえずネット検索で見つけた記事を参考にその部分について記述した．とりあえず，これでスイッチに関する学習を終えた．次回以降は，いよいよモータについての学習ということで，非常に楽しみである．

## 参考文献
- 電子部品ごとの制御を学べる！Arduino電子工作実践講座 改訂第2版 福田和宏 著 ソーテック社
- カメットマメ知識　第31回　『リードスイッチとは？』 関西オートメイション株式会社

https://kansai-automation.co.jp/blog/?p=1643

- プルアップ抵抗・プルダウン抵抗とは？電子回路に必須の考え方 VOLTECHNO（ボルテクノ）

https://voltechno.com/blog/pullup-pulldown/

- 【Aカーブ？Bカーブ？】 ボリューム、トーンに適したポットのカーブの特徴と違い ナルガッキ

https://naru-gakki.com/pot-curve/