SCP1000-D01動いた!

気圧・温度センサのSCP1000-D01(以下SCP)が動きました。
今日は6時間ぐらい、がっつり学んだ。
途中から低消費電力用に作り変えたので、時間を食った。
C++中級、マイコン・電子工作超初心者が書いてます。
ウソ書いているかもしれません。
以下、動くまでのメモ。

Board Orangeとの接続方法

SCPはSPI通信を行うため、SPI端子に繋ぐ。
しかし、SCPは端子がいっぱい。8本もある。どーすればいいの?

まずピン番号の見方がわからん!
これは、SCPの黒いセンサ側から見て、センサの文字が見える方を上にして持ち、 左上から反時計回りに1~8ピンになる。
 1.TRIG
 2.DRDY
 3.SCK
 4.GND
 5.MOSI
 6.MISO
 7.CSB
 8.VCC
となっている。
これをBoard Orangeに繋げるわけだが、すでにピン5~8にはSDカードスロットが・・・
SDカードスロットとSCPを同時に繋げても大丈夫みたい(?)だが、ちょっと不安。
そこで私はP11~16とVOUT、GNDに繋げてみた。

私の繋ぎ方は、
  SCP→BoardOrange
 1.TRIG→p15
 2.DRDY→p16
 3.SCK→p13
 4.GND→GND
 5.MOSI→p11
 6.MISO→p12
 7.CSB→p14
 8.VCC→VOUT
という風にした。最初は違う配線にしていたが、低消費電力用にしてみた。
p15、p16はアナログ入力じゃないのか??と思ったら、普通にデジタル入出力ができるらしい。
ホントかな??
気になる点は、VCCは2.7Vぐらいが良いみたいだが、私にハードをあれこれする能力はない。(教えて欲しい)
あるいは、プログラム上で補正できれば良いのだが・・・

プログラミング

ここを参考にプログラミングしてみた。
あと、SCP1000の資料。英語で辛いが要所だけ押さえればOK。

大半は上記のライブラリから持ってくれば、値を読める。
注意するのが大気圧の方で、ヘクトパスカルにするのに100で割った。
さらに海面気圧にするために計算を行った。
上にも書いたが、3.3Vで駆動しているため、温度がやや高めで表示される。
CASIOの温度計が26度なのに、mbedは27.05℃になっている。

低消費電力モード

SCP1000のライブラリを弄る必要があった。
その辺は、参考資料を見ながらなんとかなった。
外部変数で、

InterruptIn SCP1000DRDY(p16);

を指定して、

SCP1000DRDY.rise(&LCD出力);

してやった。合っているかどうかわからない。

詰まった点は、TRIGとDRDYがちゃんと動かないという罠。
多分、私がなんか間違えているのだと思う。
対策として、

write_register(0x03,0x0A);//Initialize High Resolution Constant Reading Mode

はやめて、

void SCP1000::start_SCP(void){
    write_register(0x03,0x0C);//Initialize Low Power Reading Mode
}
void SCP1000::stop_SCP(void){
    write_register(0x03,0x00);//Stop
}

な感じで、測定開始と終了を作った。
実際ならTRIGを1にした瞬間から計算開始を行い、計算が終わるとDRDYが1になるはずなのに、2回目以降のDRDYが1にならなくて悩んだ。
start_SCPを動かすと、TRIGを1にしなくてもDRDYが1になり、割り込みが発生した。
それをInterruptInで拾ってきた。
サブルーチンのLCD出力内で、大気圧・気温の値を読み、stop_SCPで止めていた。
こんなに毎回ON/OFFしてるなら、省電力モードじゃなくてもいいんじゃないか??
・・・とか思ってしまう。

次回

実は買ったセンサがSCP1000-D01だけだったので、センサの接続は一時終了。
今度、都内へ出張になった時に、秋葉原で何かセンサを買ってこようと思う。
自宅で気象観測をやってみたくて、マイコンの世界に手を出したので、残るは、
・雨量
・湿度
・風速
・風向き
・揺れ(地震)
・放射線量
・ライブカメラ
・発電量
・電力使用状況
・水槽水量
とか調べたい。こんなにセンサー付くのか??
あと、センサを入れるかっこいいケース作りと、ブレッドボードの配線をキレイにする。
それと、webとの連携とか進めたい。


Please log in to post comments.