練習20 温湿度計を作る6 analogRead

前回、測定値をサーバーに送信することができました。
今回は、電池駆動部分を作ります。

部品

 - ENELOOP 単三4本
 - フォトカプラ TSL222AF https://akizukidenshi.com/catalog/g/gI-07330/
 - 抵抗 10KΩ
 - 抵抗 100Ω x2

回路

ESP32の5V(V+)とGND(V-)間にエネループを4本接続します。5V端子は、三端子レギュレータAMS1117-3.3に繋がっています。

ESP32 DevC 回路図 https://akizukidenshi.com/download/ds/espressifsystems/esp32_devkitc_v4-sch-20180607a.pdf
AMS1117-3.3 http://www.advanced-monolithic.com/pdf/ds1117.pdf

V+の電圧は10KΩ:10KΩで分圧し、IO32で電圧をモニターします。
モニタリングしていない間、電気を流し放しにしておくわけにはいかないので、IO4でフォトカプラを叩いて必要な時だけ電流を流します。

f:id:kainuma-k5:20200920205213p:plain
チャコメーター3.0 電源部

ソース

(1)ヘッダ

float Vc = 0.0;

(2)setup()

ピン4をDoutとして使うと定義します。

  pinMode( 4, OUTPUT );

(3)電圧測定 loop()

analogReadは↓を参考にしました。
http://rikoubou.hatenablog.com/entry/2017/06/29/135819

フォトカプラをONにしている間に、すかさず32ピンの電圧を読み取ります。
今はloop関数内に書いているけど、別の関数を定義したいと思います。

  digitalWrite( 4, HIGH );
  delay(10);
  int A32     = analogRead(32); 
  digitalWrite( 4, LOW );
  
  float Vc    = (long)A32 * 3.3 * 2 /4096 *1.081;
  Serial.print("Vc=");  Serial.println(Vc);

痛恨のミス

(1)ミス
三端子レギュレータの仕様書↓を見て、ミスに気がつきました。
Vin-Vout=1.5V〜12Vとなっているではありませんか!!
ESP32はVout=3.3Vなので、Vin=4.8V〜15.8V
エネループは4本で4.8Vなので、一番おいしいところで下限になってしまいます。。

(2)改善対策
三端子レギュレータは、VinがほぼVoutになるまで使えると勝手に思い込んでいました。
電池本数を増やしてくないので、電圧変換方法を再考しなければなりません。
手持ち部品に↓がありました。これは3.3V+0.4V=3.7Vまで使えそうです。

https://akizukidenshi.com/download/ds/njr/NJU7223_j.pdf

f:id:kainuma-k5:20200920222119p:plain
三端子レギュレータ NJU7223

三端子レギュレータを追加するスペースあるかなぁ?
まあ、明日考えるか。
続く