忍者ブログ
[345]  [344]  [343]  [341]  [340]  [339]  [338]  [337]  [336]  [335]  [334
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

RaspberypiでカラーRGBセンサー

ラズパイマガジン2017年10月号のソースを解析してみました。

ちなみにこのセンサーの浜松フォトニックスは、神岡のスーパー
カミオカンデでニュートリノの光検知センサーのメーカーさんで
ノーベル賞受賞に貢献した会社です。

ラズパイマガジン全般に言えることなんだけど、ソースのコピペで
動作はするが、肝心のソース意味が理解できないのが問題だと思う

特にwiringpiを標準としているが、内容を理解して使わないと結局
何もできない事になる。超入門者はともかく、次のステップは苦労
しながら手組に挑戦が必要だが、この段階になると書籍がない

結局ネットでコピペで終わりになってしまう

まずは
>import time, wiringpi as pi
時間を使うのでtimeを
wiringpiをインポート
>S11059_ADDR = 0x2A
i2cの接続アドレス sudo i2cdetect -y 1で確認
認識しない 安物のボードがケーブルが原因、取り替えましょう
過去ケーブルが内部で繋がっていない事が何度かあった、恐るべし中華品質
安物センサーの場合は、初期不良も多々、悩む時間があったらとっとと
買い換えるべし

amazonの評価でで誰かが複数個買って1個でも動作すればOKと
書いていたが安物センサーは、ラテン気質が必要、
このセンサーのように国内一流メーカー製品なら安心。

>def read_sensor( reg ):
    h = i2c.readReg8( S11059, reg )  #'8bit read
    l = i2c.readReg8( S11059, reg + 1 )  #'8bit + 1byye
    data = ( h << 8 ) + l  #'shift8bit + 8bit
    return ( data )

基本的にI2CであろうとSPIであろうと、センサーのレジスタと
raspberypiがやり取りしてデータの送受信をおこなう。
レジスタの概念が必須になる。
センサーにはレジスタマップがかならず公開されているので
そのマップに基づきデータの送受信を実施する

このソースは
x02a(センサー)のアドレスから8ビットをhに格納
x02a(センサー)のアドレス+1から8ビットをiに格納
hに8ビット上位ビットにシフトして下位8ビットにiをセット
16ビットにして10進数で戻す
上位ビットシフトだが256倍する方法もある

>i2c = pi.I2C() #instance
>S11059 = i2c.setup( S11059_ADDR )  #adress set
>time.sleep(1)

ワイアリングでインスタンス(動作させる為の名前)を作成
x02aアドレスをセット(今後は、このインスタンスはこのアドレスに対して
動作)
1秒間お待ちなさい

>while True:
    i2c.writeReg8( S11059, 0x00, 0x89 ) #10001001 adcreset sleep off 14.ms
    i2c.writeReg8( S11059, 0x00, 0x09 ) #00001001 x x x x low x x 1.4ms 
    time.sleep( 1.0 )

一生働け
x02aのx00にデータx89 を書き込め
レジスタマップのx00を見るとコントロールになっており、各ビットに
0か1をセットするとその動作になる
このx89はADCリセット、スリープ解除、通信14msという命令

x02aのx00にデータx09 を書き込め
このx09はADCリセット解除、通信14msという命令
(ここでraspberypiからのデータ送信命令を待機)
1秒間お待ちなさい 
(待っている間、データが積分される)

ここまでは、秋月のデータシートのサンプル通り
固定モードで実行

> i2c.writeReg8( S11059, 0x03, 0x2A )

readモードに変更

> r = read_sensor( 0x03 )
> g = read_sensor( 0x05 )
> b = read_sensor( 0x07 )
> ir = read_sensor( 0x09 )

x03,x05,x07,x09から読み出し
>def read_sensor( reg )で10進数に変換


>print ( "R:", r, " G:", g,  " B:", b, " IR:", ir )
表示

という具合だが、

ポイントは
・マスタースレーブ間のデータのやり取り(プロトコル)
・レジスタ操作
・シフト演算

この3つの知識は必須、コピペではマスターできない

素朴な疑問、このセンサーは実務で何に使えるの?





 






拍手

PR
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新CM
[03/10 DORA]
最新TB
プロフィール
HN:
dorabu
性別:
非公開
バーコード
ブログ内検索
P R
Copyright © ドラブーのアンドロイドとIoTなブログ All rights reserved. / Template by 四季. / Material by てんせん.

忍者ブログ [PR]