温度センサADT7410を用いた温度測定
前回のDHT11から、時間がたちましたが、ブレッドボードに乗っていたADT7410を用いて、温度測定をしてみたいと思います。DHT11はワンワイヤーで、ESP32自体でライブラリをもっていたので楽でしたが、ADT7410ではしっかりとメーカーの仕様を読んでおかないといけません。
メーカーのアナログデバイシスのホームページから、資料をダウンロードします。https://www.analog.com/media/en/technical-documentation/data-sheets/ADT7410.pdfの12~13ページに書いてありますが、13ビットでの測定では0x00から2バイト拾って、くっつけて、うしろの3ビット分を切ると言う作業が必要になります。
今回はsclを18ピンにsdaを19ピンに設定しました。ADT7410もプルアップが必要なので、まずはプルアップします。
>>> from machine import SoftI2C, Pin
>>> p18 = Pin(18, Pin.IN, Pin.PULL_UP)
>>> p19 = Pin(19, Pin.IN, Pin.PULL_UP)
その後softi2cでデータを読み込みます。
>>> data = SoftI2C(scl = Pin(18), sda = Pin(19), freq = 10000).readfrom_mem(0x48, 0x00, 2)
ここで、2バイト分のデータを見てみます。
>>> print(data[0])
10
>>> print(data[1])
224
10進数でプリントされるので、2進数でプリントさせます。
>>> print(bin(data[0]))
0b1010
>>> print(bin(data[1]))
0b11100000
data[0]は00001010、data[1]は11100000となってます。data[0]を左に8ビットずらしてdata[1]をつなげます。
>>> print(bin(data[0]<<8 |data[1]))
0b101011100000
0000101011100000となりました。右側3ビットは不要ですから、右に3ビットずらします。
>>> print(bin((data[0]<<8 |data[1]) >>3))
0b101011100
0000101011100になりました。10進数に治すと、
>>> print(((data[0]<<8 |data[1]) >>3)) # temp=print(((data[0]<<8 |data[1]) >>3))
348
これを13ビットですから、資料にあるとおり16で割ります。
>>> print(((data[0]<<8 |data[1]) >>3)/16)
21.75
これで温度21.75度が出てきました。
このセンサではマイナスになるとファーストビットに1が立つので、13ビットで1000000000000は10進数で4096ですから、tempがこの数より大きい場合はマイナスの温度になるのでtemp=temp-8192とすればOKです。例フルビット1111111111111は10進数で8191ですから、8191-8192=-1これを16で割って-0.0625度となります。

