質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

681閲覧

センサーで正確な値を得られない場合

hachigo0525

総合スコア11

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2017/12/01 20:22

お世話になっております。頻繁にすみません。1日1つ問題が解決され、新しく発生しています。。
ただいまTCS34725(参考ページ,Datasheet,参考ページ)を使い色の測定をしています。単なる測定です。
通常、赤(255,0,0)、緑(0,255,0)、青(0,0,255) →(R値,G値,B値)という値に近づきます。しかし、テスト時に気づいたのですが、センサーでの取得値が全くおかしい値になっています。以下が取得された値の表です。。
|測定した色|R値|G値|B値|
|:--|:--:|--:|
|赤1回目|141|79|86|
|赤2回目|167|93|94|
|青1回目|84|360|540|
|青2回目|85|382|569|
|緑1回目|206|373|227|
|緑2回目|85|382|569|

と、255を超える数値が取得されます。
こういう場合の原因はなんだと考えられるでしょうか?プログラミングでしょうか?
ちなみに、赤の測定はまともに見えますが、実際R値はもっと高いはずです、、
何卒お力添えをお願いいたします。。

実験で使ったのは写真の紙です。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回路や電気制御のことは分かりませんので、もしそっち関係で質問があったら詳しい方に相談しなおしてくださいね。以下、私に分かる範囲の回答をします。

要旨)

  • 16bit-->8bitにする(測定値/256をする)ことでいわゆるRGBの値が得られる
  • とりあえずforwhile続けてデータを取ると傾向が見えてくるかも

(2.4ms頻度で値を返し、反応しきるまで150msはかかるようですので、はじめの数回の値で評価したらダメっぽいです)

以下詳細

*最大値がいくつか?
こちらにデータシートがありますので見てみますと、

RGBW 各色 16 ビットの分解能で明るさを検出することができます。

つまり、

一般的な画像TCS34725
ビット数816
計算2^82^16
最小値00
最大値25565535

これで概要がつかめましたね。


*他に気にすることはあるか?

詳細については、英語の取説の中で、

p.16

Max RGBC Count = (256 − ATIME) × 1024 up to a maximum of 65535.
(Table.6 略)

p.8

The RGBC integration time (ATIME) impacts both the resolution and the sensitivity

of the RGBC reading.

とあります。つまり、TCS34725は、

  • ATIME(積分時間:測定値が一定時間に変化できる変化の最大値)が決まっている@Table6

2.6ms:1024
24ms:10240
101ms:43008
154ms:65535

  • ATIME(積分時間)は、測定値と解像度(精度)の両方にかなり影響する
  • TCS34725が色を検出してから150ms(0.15秒)くらいの値はあんまり当てにならない
  • 最短2.6msで値を返す(一秒で416回は値を返しうる)

投稿2017/12/01 22:27

編集2017/12/01 22:33
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hachigo0525

2017/12/06 18:32

遅くなりすみません、しばらく他の実験が立て込んでおりPiをいじる時間がありませんでした泣 slashさん、再びありがとうございます泣 おそらく理解いたしました。ちなみに太陽の下で測ったらMaxで1024の値が出ましたので、積分時間を154msに変えてみるべきということですね、、 もう一つお聞きしてよろしいでしょうか、、 https://pypkg.com/pypi/adafruit-tcs34725/f/Adafruit_TCS34725/TCS34725.py  これは自分の積分時間の変更に応用できると予想しているのですが、コードの中のメソッドの def set_integration_time(self, integration_time): self._integration_time = integration_time self._write8(TCS34725_ATIME, integration_time) の"self"というのはどこから来たのでしょうか、、?
退会済みユーザー

退会済みユーザー

2017/12/06 22:05

> 積分時間を154msに変えてみるべき そうですね、積分時間を154ms以上に設定すれば、確実に反応しきったデータを拾えそうです。 > "self"というのはどこから来たのでしょうか Pythonで関数を定義する時、1つ目の引数で`self`(名前はselfでなくてもよさそうですが)を指定する約束になっているのですね。Python以外の言語から流れてくると気持ちの悪い感じがしますが、引数のselfは呼び出し元から指定するものではなく、def xxxxxx(self)でいうxxxxxxの中で便利にまとめるためのおまじないのような感じです。なので、引数を指定したくないときはdef xxxxxx(self)と定義しますし、引数を1つだけ指定したい時はdef xxxxxx(self,arg1)のように定義します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問