ケロロ好きなエンジニアのブログ

サラリーマンエンジニアの電子工作のことをメインに書いていきたいけど電子工作はまとまった時間がないとなかなか難しいから滅多に書けそうもなくてMVNOの話題がメインになりつつあるブログ

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

にほんブログ村 スマホ・携帯ブログへ にほんブログ村 スマホ・携帯ブログ 格安SIMカード・MVNOへ

スポンサーリンク

さて、前回書いたようにラズパイの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本の線でやり取りできますよーってことです。
詳細はググってみてください(投げやり)。

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

簡単に仕様を抜粋すると

  • 測定温度範囲 -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

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


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

 

この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を間違えたようで臭い匂いが漂ってきたのは内緒です。

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

 

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