エレキ素人が何か考える（その６：ツェナーダイオード；失敗?）

# ツェナーダイオード
ツェナーダイオードとは一定の電圧を保つ（得る）ために使われるもの。順方向（アノードからカソード）では通常のダイオードと同じく電流が流れるが、逆方向（カソードからアノード）ではある電圧以上になると電流が流れるようになる。[Wiki](https://ja.wikipedia.org/wiki/ツェナーダイオード)など多数のサイトで説明が見つかるので、詳細はそちらを参考されたい。

## 素人が考えたこと
用いるツェナーダイオードは、秋月電子で購入した[「定電圧ダイオード（ツェナーダイオード）　２．０Ｖ５００ｍＷ　ＧＤＺＪ２．０Ａ」](https://akizukidenshi.com/catalog/g/gI-07489/)。
ここではマイコン制御と組み合わせたかったので、マイコンにより、入力電圧（ツェナーダイオードにかかる電圧）を変化させ、2V以上の電圧がかかれば電流が流れる（ここではLEDが点灯する）ことを意図した。回路的には次のようなもの（図については後述するサイトの利用）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/4adf16f3-cebf-6654-f6b8-6c36506e5703.png)
左からツェナーダイオード、LED、330Ω抵抗となっており、入力電圧（上記図では5V）を変化させることとした。ツェナーダイオードは2V用である（下記図の「Breakdown Voltage」）。
![Zenerdiode2V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/1b65b79f-1006-5f3e-642e-bd91e564aa60.png)

## 回路シミュレータ
実物のツェナーダイオードを試す前に、最近、ブラウザ上で回路をシミュレートできる[サイト](https://www.falstad.com/circuit/circuitjs.html)を見つけたので、こちらで検証する。
#### 1V
 ![1V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e872719c-76ce-928e-5eef-f6910c74fff8.png)
#### 2V
![2V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e7ae8674-4a2e-d3bc-e8fe-356160d01ff8.png)
#### 3.3V
![3.3V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/bf802f67-bda1-0800-e8f4-485d1c74153a.png)
### 5V
![5V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/8d002463-2275-82f5-a02e-6163597ca133.png)
#### 8V
![8V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/c9f29644-d1ed-f73e-cd60-6dfe15c59125.png)
#### 20V
![20V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/dd5a5434-15ca-1935-d1d8-1b49fa87e618.png)

### シミュレーターでの検証まとめ
おおよそ期待どおりの結果と思われる。上図右下のVdがツェナーダイオードにかかる電圧である。3.3V以下では、LEDは点灯（赤丸が点灯を意味）していない。LEDでの電圧降下はおよそ2V程度らしいので、3.3Vをかけた時、すでにツェナーダイオードにかかる電圧が2Vくらいになっているが、LEDを点灯させるに十分な電圧になっていないのであろう。また、5V、8V、20Vと増やしても、ツェナーダイオードにかかる電圧はほとんど増えずに2V程度となっており、期待どおりであろう。

## リアルなツェナーダイオードを利用
下記写真のように、Arduinoを用い、[その５](https://qiita.com/infinite1oop/items/0637cbe8f2b3af8cdfdc)で用いたデジタルポテンショメータMCP4131を使って電圧をコントロールすることとした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/98d5aa58-6998-4ce7-22c6-64de6b672706.png)
デジタルポテンショメータの配線については、[その５](https://qiita.com/infinite1oop/items/0637cbe8f2b3af8cdfdc)を参照されたい。
![MCP4131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/61e046b9-28d4-bfe6-85d0-4cfb3861ffed.png)
P0AにVdd（Arduinoの場合、5Vや3.3V）、P0BにGNDを接続し、P0Wがツェナーダイオードへ接続されている。

### ソースコード
```c++
#include <SPI.h>

#define W_ADDR 0x00
#define R_ADDR 0x0c
#define CS 10

void setup() {
  pinMode(CS, OUTPUT);
  SPI.begin();
  Serial.begin(9600);
  digitalPotWrite(127);  // 0: Vwb=0V;Vaw=Max   127: Vwb=Max;Vaw=0V
  delay(10);
  int r_val = digitalPotRead();
  Serial.print("Read  "); Serial.println(r_val);
}

void loop() {
  while (Serial.available()) {  // Waiting for writing data (0-127)
    String data = Serial.readStringUntil('\n');
    int w_val = data.toInt();
    Serial.print("Write "); Serial.println(w_val);
    digitalPotWrite(w_val);
    delay(10);
    int r_val = digitalPotRead();
    Serial.print("Read  "); Serial.println(r_val);
  }
  delay(10); 
}

int digitalPotWrite(int value) {
  digitalWrite(CS, LOW);
  SPI.transfer(W_ADDR);
  SPI.transfer(value);
  digitalWrite(CS, HIGH);
}

int digitalPotRead() {
  int val;
  digitalWrite(CS, LOW);
  SPI.transfer(R_ADDR);
  val = SPI.transfer(255); // Must be 255, instead of 127
  digitalWrite(CS, HIGH);
  return val;
}
```

シリアルコンソールから入力された数値（0-127）により入力電圧をコントロールする。ここでは入力データのチェックは未実施である。ソースコードの詳細については[その５](https://qiita.com/infinite1oop/items/0637cbe8f2b3af8cdfdc)を参照されたい。

### 検証
シミュレーター結果からArduino電圧は5V固定とした。

|入力数値|0|63|127|
|---|---|---|---|
|P0W-P0B電圧|ほとんど0|2.396|4.8|
|ツェナーダイオード電圧|ほとんど0|0.78|1.41|
|LED点灯|☓|☓|○|

最大電圧をかけても、ツェナーダイオード電圧は1.41Vしかならず、LEDは点灯。用いたツェナーダイオードのデータシートはこちら「[GDZJシリーズ PDFデータシート](https://akizukidenshi.com/download/ds/panjit/GDZJseries.pdf)」であるが、ツェナーダイオード2.0Vの特性が見つからずであった。
![特性.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/fe58cd5e-fe9a-a201-3542-379e51ddefab.png)

用いたデジタルポテンショメータMCP4131には最大5.5Vしか電圧をかけられない。そこで、Arduinoの3.3Vおよび5V、9V電池やパソコンに用いられるAC-DCアダプタ(19V程度)を直接接続して電圧を測定。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/2d6a9e48-c4cf-4ff7-106c-e6cbf6c4fe28.png", width=34%>  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/32a4b00f-ec24-9d9f-af10-b185663ffd29.png", width=60%>

|入力電圧|3.3V|5V|9V|19V|
|---|---|---|---|---|
|ツェナーダイオード電圧|1.13|1.42|1.95|抵抗で煙が出たので測定中止|

9Vをかけても、ツェナーダイオード電圧が2Vを超えない状況。

そこで、3.3V用のツェナーダイオードでも試した見たが、傾向としては、2Vのものと同じで（ただし、ここでは、安全のため10kΩ抵抗を使用）、ツェナーダイオード電圧が3.3Vを超えない状況であった。

|入力電圧|3.3V|5V|9V|19V|
|---|---|---|---|---|
|ツェナーダイオード電圧|2.187|2.411|2.683|3.019|

## 終わりに

実物はシミュレーターのようにうまくいかないのか、品質が今一つのツェナーダイオードだったのか、それとも小生が素人でどこか間違っているのか、、よくわからずであった。