リレーのみでCPUなどを作る方法

# リレー


**リレー**って知ってますか？

メカニカルでかっこいいですよね

**制御盤**や**配電盤**にたくさん入っています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/0e48a1c3-7342-3fe6-c3b8-dea8e064a0f2.png)
>画像は制御盤で有名な**リタール**のページより持ってきました

https://blog.rittal.jp/1171/

<div align="center">
<img width = "400" src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/183f18be-b430-98cf-4c96-7f1692b637da.png">
</div>
これくらい大きなリレーもあります。定格電流は9Aです。
これぐらいの電流になると **内部にガスを封入** するなどの工夫も行われます。

# リレーとは
リレーは電磁石によってスイッチを切り替える部品です。

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/4a607aab-5c1a-f7e3-b602-bb32b66a143a.jpeg)

https://www.mskw.co.jp/support/car/relay 

コイルのON,OFFで端子C,D間の導通が切り替わります

# 組み合わせ回路
## NOT回路![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/f204d70d-bd9b-0080-a62d-5a47691bb8a5.png)

|IN|OUT|
|--|-|
|Low|High|
|High|Low|

## AND回路
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/823d0f98-2c69-1ee9-4ce9-b54d80f69c6f.png)

|IN_A|IN_B|OUT|
|--|-|-|
|0|0|0|
|1|0|0|
|0|1|0|
|1|1|1|

## Low状態について
リレーにおいてLow状態は電圧がかかっていない状態(ハイインピーダンス状態)です。
GNDにつなぐことももちろんできます。

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/7d688741-aa12-ada6-8c7e-1a5a3121ff45.png)

こんな感じで。

しかし、つなぐ必要はありません。
なぜなら、**コイルはハイインピーダンス状態ではONにならない**からです。

## 切り替え時のハイインピーダンス状態について
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/75bb94c0-76d6-0093-313e-4a17d6e92e19.png)
この場合、出力はスイッチのON,OFF動作の間で一瞬ハイインピーダンス状態を取ります。
後段のリレーが影響を受けないようにコンデンサ等を挟むことが必要になる場合があります。


## 重要な欠点：逆流

リレーで論理回路を組むときに重要なこととして**逆流**があります。

リレーのスイッチには方向性がありません。
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/e05b4c3d-0630-7cb0-be35-467f5763e477.png)

OUT端子がHIGHになったことで入力AもHIGHになります。

入力A端子がHIGHになったことで前段のリレーの出力端子がHIGHになってと連鎖して誤動作する可能性があります。

ただし、LOW状態がハイインピーダンス状態なので、**ショートは起きません**

## 忘れがちなこと:リレーのコイルに極性がない場合がある
これは知らなかったのですが、リレーのコイルに極性がない場合があります。
**どちらの方向から流してもONになります**

もちろん、極性があるリレーもあります。

## 忘れがちなこと：リレーは電流駆動

![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/060fcdc2-dfbf-af84-8327-6a8fdc319078.png)

このような回路の場合、コンデンサが充電放電する一瞬のみ電流が流れます。
コイルは電流が流れた時、磁性を持つので充電放電する一瞬のみONになります。


（注）リレー回路はGNDの代わりにハイインピーダンス状態なので、放電させるために抵抗を並列に挟む必要がある。

## ワイヤードOR
リレーのみから外れますが、OR回路に関しては
![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/e5e2bb4a-25c8-1acf-c441-db21ab5a8d24.png)
ダイオードの並列接続でOR回路を実現すれば、だいぶリレーの数を減らせます。

ダイオード無しでつなぐと、前述の逆流が起きる可能性があるので注意がいります。


その他の論理回路に関しては

http://www.tsystem.jp/freecircuit/freecircuitrelay.html

こちらのサイトが詳しいです。

# 順序回路
### 自己保持回路
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/181cb304-9e18-ca60-75b2-4d0c226ddd9c.png)

端子AをONにするとスイッチが切り替わります。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/c8aeb485-30b3-c32a-506f-359456ffdecc.png)

端子AをOFFにしてもスイッチは戻りません
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/5e302329-3607-e7ed-3e61-e8074c8d681c.png)

欠点
* "1"になったら二度と"0"にならないので、”Reset”を別に用意する必要がある
* CLKで動作するのではなく、「”1”になったことがある」ということを記憶する
* つまり、いつでも入力が”1”になれば、「”1”になったことがある」ということを記憶する


# レジスタ回路

http://www.tsystem.jp/freecircuit/freecircuitrelay19.html

をもとにしています。

基本的なアイデアは

![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/7d740bef-1349-ccfe-0f20-f353026664af.png)

この2段の自己保持回路を1bitのレジスタになるようにする考えです。

* RA0,RB0は自己保持回路で入力の状態を保持します
* R6,R5のスイッチを切ることで自己保持回路をリセットします
* 2段にすることで、「自己保持回路の「”1”になったことがある」ということを記憶する」能力をレジスタへと変化させます

流れ
1. RA0をリセットします（R6をOFF）
1. R8をONにしてRA0が入力を記憶します。
1. RB0をリセットします（R5をOFF）
1. R7をONにしてRB0がRA0を記憶します。

これで入力がレジスタに保持されました。
（注意）前述の出力の逆流が起きる可能性があるので後段に注意してください

## 1段じゃダメなのか（追記）
RA0の一段じゃダメなのかという疑問もあると思います。
**1段で問題ないです！**

![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/820dfc05-d9e6-2cd5-9039-91f9f9be47da.png)
これでも問題ない！

ただし、記憶するためには一度リセットする必要があります。つまり、保持するために一度出力が”0”に落ちます。
シフトレジスタのように前段レジスタを後段にどんどん移動させる場合、前段のレジスタとリセットを同時にすると全部忘れてしまうので2段必要になります。

CPUの場合は選択的にReset,CLKを入れることになるので1段でも大丈夫でしょう。


## カウンタ回路・エッジ検出など

http://www.tsystem.jp/freecircuit/freecircuitrelay14.html

こちらのサイトが詳しいです。