エレキ素人が何か考える（その16）：NE555（タイマーIC）

# タイマーIC NE555
秋月電子で購入した、タイマーICとして有名な[NE555](https://akizukidenshi.com/catalog/g/gI-14051/)を使ったときの記録である。データシートは[こちら](https://akizukidenshi.com/download/ds/unisonic/ne555_akizuki_20190622.pdf)。

## 参考サイト
1. [タイマーIC　NE555P　を使ってみよう](https://875s.com/kousaku/8ic1_timer.html)
1. [５５５タイマー　回路説明](http://www.piclist.com/images/www/hobby_elec/ckt4_2.htm
)
1. [タイマーIC555を利用した回路の設計](http://yamatyuu.net/el/555/index.html)

ここでは、#1の回路をほぼそのまま使って、マイコン（Arduino）有無で、NE555の動作を確認する。#2には、NE555の原理がわかりやすく説明されており、#3には、タイマー値の計算式が記載されている。

## ピンアサイン
データシートより引用。
![ピンアサイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/a488d858-d763-bada-9bce-3677daaf0a85.png)

## 検証
回路関連は、[falstad](https://www.falstad.com/circuit/circuitjs.html)利用。

### マイコンなし
下記は、タクトスイッチ押下後、しばらくの間、LEDが点灯し、その後消灯する回路。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/a8172abd-5083-00cc-4d9c-949f12afde1e.png", width=70%>
また、上記回路を実施している様子が下記となる。
![スイッチ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f345b4d1-3925-5425-f275-f6e93b11b7bd.gif)

繰り返し回路例（ここではLEDの定期的なオンオフ）は下記のようなもの。（実演省略）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/b7562875-7424-7f48-9197-203895022b72.png", width=70%>

### マイコンあり
タクトスイッチの代わりに、ArduinoのGPIOアウトプットをトリガーピン2（tr）に入力してみた。まずは、回路およびシミュレーションは下記のとおり。
![シミュレーションHL.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e32f6cc5-48e4-18e2-bac2-0f60cbdacdbb.gif)
わずかの間、トリガーピンを”Ｌ”にセットしている。下部に見えるのは、アウトプットピン3(out)の電圧の変化である。参考サイトで引用した#2のNE555の内部回路をみるとわかるとおり、内部にコンパレーターがあるので、電圧の変化は一瞬となる（矩形）。

次にArduinoから制御。
```c++
#define PIN_OUT   6
#define ANALOG_IN A0

void setup() {
  Serial.begin(9600);
  pinMode(PIN_OUT, OUTPUT);
  digitalWrite(PIN_OUT, HIGH);
}

void loop() {
  int val;
  float volt;
  if (Serial.available() > 0) {
    (void)Serial.readStringUntil('\n');
    val = analogRead(ANALOG_IN);
    volt = val * 5.0/ 1023.0;
    Serial.print("Start: "); Serial.println(volt);
    digitalWrite(PIN_OUT, LOW);
    delay(1);
    digitalWrite(PIN_OUT, HIGH);
    do {
      val = analogRead(ANALOG_IN);
      volt = val * 5.0/ 1023.0;
      Serial.println(volt);
      delay(20);
    } while (val >= 10);
  }
}
```
GPIOピン6をNE555のトリガーピンに接続、アナログピンA0をアウトプットピンに接続する。シリアル(PC)から入力があったときに、わずかな時間（ここでは1msでも十分だった）”Ｌ”にセットし、その時のアウトプットの電圧を測定するもの。結果は下記のとおり。
```
09:33:50.478 -> Start: 0.00
09:33:50.524 -> 4.35
09:33:50.524 -> 4.35
09:33:50.524 -> 4.35
09:33:50.570 -> 4.35
09:33:50.570 -> 4.35
09:33:50.570 -> 4.35
09:33:50.616 -> 4.35
09:33:50.616 -> 4.35
09:33:50.663 -> 4.35
09:33:50.663 -> 4.35
09:33:50.709 -> 4.35
09:33:50.709 -> 4.35
09:33:50.755 -> 4.35
09:33:50.755 -> 4.35
09:33:50.755 -> 4.35
09:33:50.802 -> 4.36
09:33:50.802 -> 4.36
09:33:50.849 -> 4.36
09:33:50.849 -> 4.36
09:33:50.896 -> 4.36
09:33:50.896 -> 4.36
09:33:50.942 -> 4.35
09:33:50.942 -> 4.35
09:33:50.942 -> 4.36
09:33:50.989 -> 4.36
09:33:50.989 -> 4.36
09:33:51.035 -> 0.00
```
タイマー満了後、すぐに電圧が変化している。オシロスコープの変化でも同様である。
![2022_08_06_09.36.43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f343de0c-a4c6-1dd3-8cea-c7857ff9084b.jpeg)

参考までに、アウトプットピンに、LEDを接続したときの様子は下記のとおり。
![FromArduino.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/6a01ff3c-a72e-72b2-fc87-10ac888ce3bb.gif)

期待どおりの結果が得られている。

## 終わりに
マイコンなしでも、タイマーとしては十分に使えることを理解。