← ポチっていただけると嬉しいです
RaspberryPi

RaspberryPi事始め 13-1. GPIOを使う 1-Wire編(DS18B20)前編

さて、前回書いたようにラズパイのGPIOを使っていきます。

 

先日買ったこのセンサのドキュメントにある順番で試していこうと思います。

AliExpress.com Product – 37 IN 1 Sensor Kit Starter Kit Sensors Set for UNO R3 for MEGA 2560 for Raspberry Pi 3 Model B+ Plus DIY Learning Suit

 

まず最初はDS18B20です。
Maximの温度センサですね。DS型番なので旧ダラスの製品でしょうかね。

で、I/Fとしては1-Wireとなってます。

1-WireってのはI/Fの種類で、簡単に言うと名前通り1本の線でやり取りできますよーってことです。
詳細はググってみてください(投げやり)。

データシートは以下の製品ページにあります。

DS18B20 データシートおよび製品情報 | アナログ・デバイセズ | Analog Devices
デジタルサーモメータのDS18B20は、9ビット~12ビットの摂氏温度測定値を提供し、不揮発性のユーザー設定可能な上限/下限トリガポイントを備えたアラーム機能を内蔵しています。DS18B20は1-Wire®バス上で通信を行います。名称通りに...
  • 測定温度範囲 -55℃~125℃
  • 測定誤差 ±0.5℃(-10℃~85℃)、それ以外は±2℃
  • 測定解像度 9~12bit
  • 変換時間 93.75~750ms
  • 電源 3.0~5.5V

ってとこですかね。

 

また、この1-Wire製品は、
一般的な3本接続(電源、GND、信号線)とは別に本当に1本しか接続しない parasite powerモードってのがあります。

まぁGNDの接続はいるので結局は2本いるんですけどね。

でもパラサイト。素敵な響きじゃないですか。早くに親元を離れた私には憧れな言葉です。
40過ぎてもパラサイトしている貴族な同僚はうちの会社は巨万といますが、それはちょっと。。。

 

パラサイト電源モードってのはバスの信号線から電力を盗むんだそうです。

バスがHighの時に中のコンデンサにチャージしておいて、バスがLowになったら中のコンデンサから供給するんだそうです。
親がいるときには親に養ってもらいつつ貯金し、親がいないときには貯金を切り崩して生活するって感じでしょうか。

 

そのパラサイト電源モードですが、信号線が減る分ちょこっとの制限と操作が面倒になるっていうデメリットがあるようです。

 

回路に関してはデータシートに載ってます。

一般的な1-Wireの3線接続

f:id:keroctronics:20180927225547p:plain

パラサイトな電源モード

f:id:keroctronics:20180927225635p:plain

このプルアップを制御している信号をどうすべきなのか?ってのがいまいちわかりません。プルアップもMOS-FETで行ってますが、それだとVPUとほぼ直結になるんだけどいいのか?

等々わからないことが多い。

なので、とりあえず無難な3線接続にて試してみることにします。

接続としては

  • 電源は5Vで動くのでピンヘッダの5V直結。
  • GNDはGND

 

ってのは簡単にわかります。

 

で、信号ピンはどこを使うんでしょうか?

 

まず設定にone-wireの設定があったので、そこを有効にしてみました。

f:id:keroctronics:20180927232313p:plain

後の情報は見当たらないのでググって見つけたのがこのサイト。

Raspberry Pi GPIO Pinout
The comprehensive add-on boards & GPIO Pinout guide for the Raspberry Pi

なんかどのピンに接続すればいいとか設定とかわかります。

 

この1-wireの所を見てみます。

1-WIRE at Raspberry Pi GPIO Pinout

 

7番ピンのGPIO4を使えばよいみたいです。

そこと接続して、4.7kΩのプルアップ抵抗を5Vとの間に入れます。

これでHWはOK。

 

あとSWですが、

/boot/config.txt

dtoverlay=w1-gpio,gpiopin=4

と入れます。

 

GPIO4を使ったので4となってますが、1-Wireだと4がデフォルトのようなので、デフォルトのGPIO4を使うのなら指定も不要で

dtoverlay=w1-gpio

でOKの様です。

なので、違うピンの場合はここの数字を変えればいいってことですね。
全てのピンに対応しているかどうかはわかりませんが。。。

 

でもまぁ1-wireを有効にしたせいか、config.txtの最後の行に

dtoverlay=w1-gpio

はありました。

なので念の為gpiopin=4を追加しておきました。

 

 

また、さらにオプションとして pullup=y とすればプルアップ抵抗がEnableとなるようですが、一般的に内蔵のプルアップ抵抗って数十kΩのオーダーでこのデバイスが要求している4.7kΩとはケタが違うので外付けの4.7kの代わりに内蔵プルアップ抵抗を使うってのはお勧めできないんじゃないでしょうかね。

内蔵プルアップ抵抗の値って正確にはデータシート見てみないとわかりませんが、データシート見当たらないので。

パッと見動いてもなんらかの不具合が出てくる可能性もあるんで、素直に外に4.7kをつけましょう。

 

で、ここでブレッドボードに接続し始めたんです。

f:id:keroctronics:20180927233408p:plain

ちなみに4.7kの抵抗は探しまくって集合抵抗が出てきたのそれを使ってます。

たぶん20年以上前に買ったものかと思います。

 

さぁセンサーをって思って、袋からセンサーを探してみたら、あれ???

f:id:keroctronics:20180927233635p:plain

なんか付いてるじゃん。

ひょっとしてプルアップ抵抗ついてるのか?

 

ってよく見てみたら

102って書いてあるチップ抵抗。1kΩとLEDらしきチップ。

資料には基板のピンへの接続は書いてあるけど、これらの部品が何の用途なの?基板上の回路は?っていう情報はありません。

なので、パターンを追いかけてみました。

f:id:keroctronics:20180928002544p:plain

データ線とVDDの間に入っているんで、アクセスランプみたいなもんですね。

ってことはやっぱりプルアップはいるんだな。

 

ってことで、このように接続。

f:id:keroctronics:20180928003216p:plain

 

酒飲みながらやってたらVとGを間違えたようで臭い匂いが漂ってきたのは内緒です。

壊れなくてよかったよかった。

 

で、実際のアクセスで値を読むっていう続きは後日。

 

 

コメント

タイトルとURLをコピーしました