2013/12/31

軽量QFHアンテナ v2


2013年最後の製作。 衛星初期捕捉用の430M帯QFHアンテナ。


アンテナの形さえ保てれば支柱構造である必要は無いので、今回は素子の横幅に合わせた円筒を作成して、そこに真鍮ワイヤを巻きつけてみた。 素材は0.5mm厚の樹脂板を接着して作成。 

屋外設置のFuncube Dongle pro+ とUSBデバイスサーバー。 タカチの防水ケースを刷新して、同軸とLANコネクタの防水加工をした。 RTL-SDRをRaspberry Piにつないで内蔵したいけれど、まだ手つかず。

 ところで、DNEPRで打ち上げられたアマチュア衛星のFuncubeは、ダウンリンクが145MHz帯なので、こっちは145M帯のQFHアンテナを作らないと…(来年に続く) 

参考 Quadrifilar helicodial http://www.jcoppens.com/ant/qfh/calc.en.php

2013/12/12

Raspberry Pi と lrzsz


低価格Linuxボードコンピュータ Raspberry Pi を借りたので、少し動かしてみた。

 電源ボタンが無いなど、ハードとしてはちょっと癖があるけれど、とりあえず組み込み装置として必要な設定をして、CUIで管理する流れにした。 debian系なのでなんでも入れられる。 500万画素のカメラモジュールを追加で購入し、ドライバのお陰で撮影もすぐに出来た。 


ジャンク屋で部品単位にバラバラにされたオフィス用デスクトップマシンを拾い集め、CDブートする程度がやっとだった自分の頃と比べると、初めてRasPiに触れられる世代はきっと実りが多い(はず)

バラックで検証するのはなんだか気が乗らないのと、個人的にケースはアクセス性が悪いと思ったので、ハンズで見つけた10cm角のアルミ板に穴を開けて固定した。 ある程度ヒートシンクにもなっている。 スペーサを立てれば保護板も付けられるだろう。 



X環境は早々に封印して、まずはSSH経由で環境を整えてみた。

第一歩として、古のファイル転送可能プロトコル zmodemでファイルをやりとりするために、lrzszを導入した。 Sambaを建てたりとか、ネットワークを意識せず、UART経由でもファイルのやりとりができて便利だ。

最終的に外に置いて気象観測とか、RTL-SDRをつないで無人受信局をつくったりしてみようと思う。  

2013/12/01

ポケットに収まる衛星 ~PocketQube規格~

 最近大量打ち上げが続くCubeSatですが、その中に、PocketQube規格という、CubeSatよりも小さな規格の人工衛星が含まれていました。 

PocketQube規格は、CubeSatを提唱したTwiggs教授が策定したもののようです。
 http://www.kickstarter.com/projects/pocketqube/want-to-build-a-satellite-but-dont-have-a-nasa-siz

CubeSatは10cm角で1U(ユニット)ですが、PocketQubeは5cm角を1Pとしています。NanoSatに対し、FemtoSatとも呼ばれています。

DNEPRには4機のPocketQube衛星が搭載されましたが、正確には放出機構を内蔵した30cm級の衛星(伊のUnisat-1)から放出されています。 衛星から放出される衛星です。

PocketCubeランチャーを搭載した母衛星 Unisat 5 (イタリア)
 http://space.skyrocket.de/doc_sdat/unisat-5.htm

・Wren(ドイツ)
  http://www.kickstarter.com/projects/1467273745/wren-fly-a-real-spacecraft-by-yourself
 http://space.skyrocket.de/doc_sdat/wren.htm

・Beakersat-1(Eagle 1) (アメリカ )
   http://space.skyrocket.de/doc_sdat/beakersat-1.htm

・$50Sat(Eagle 2) (アメリカ)
   http://www.50dollarsat.info/
   http://space.skyrocket.de/doc_sdat/$50sat.htm

・QubeScout S1 (アメリカ)
 http://space.skyrocket.de/doc_sdat/qubescout-s1.htm

$50Satは、4x4cmの基板に、PICAXE※が載っていて、各種健康状態をモールス、FSK(RTTY)、GMSKパケットで送信するというシンプルな構成になっています。技術規模としては、カンサットを太陽電池駆動にして、宇宙に持っていくのに近いと思います。

(※ PICAXE: BASICでプログラミングができるマイコン。中身はPIC)

Wrenは5cm角という最小サイズながら、カメラによる画像認識、SSTV送信、リアクションホイール、スラスタまで内蔵しているとのことです。 (過去にネットを漁って見つけた時から気になっていましたが…)
 
未確認ですが、PocketQube規格の衛星のアンテナの展開については、放出機構から出た時点で自然と展開するようにされているように見えます(要出典)、アクティブにアンテナ展開する必要があるCubeSatよりは不安要素が少ないですね。 

 この小ささで気になるのが通信機です。

 PocketQubeではどの衛星もワンチップのRFICモジュールを使っているみたいです。出力は100mW程度。
 
 これらのRFICはリモコン用途で色々なメーカーのものがあり、ISM帯から、430M帯までいくつかのバンドを網羅しており、ASK、FSK、GFSKなどが主な変調方式です。 ただ大半はパケット構造をいじれないものが多く、ホビー用に多く使われていて、アナログ的に自由度の高いものを選んでいるようです。
  ※こうしたRFICは国内で使うときは電波法に則った届け出が必要です。
 
 RFIC内蔵マイコンを利用した例だと、更に基板1枚にまで削ぎ落とされたKickSatがあります。
このあたりになってくると、ちゃんと地上で受信できる回線設計なのか心配ですが…。

 まさにポケットに収まるサイズの人工衛星ということで、5cm角模擬衛星を作っていた身としては、もう実際に宇宙に飛ばしているのを知って非常にワクワクしました。 DIYで人工衛星を作れる時代はもう来ていますね。

 これらの試みは最小構成からのボトムアップを突き詰めていくことで、CubeSatの通信/制御に必要なシステムの体積もどんどん小さくできることを示しています。 海外の小型衛星のコマンド系では、既に低コスト化のためにRFICを採用しているものが幾つかあります。 (立派な管制局の配備も前提での話ですが)

 衛星の機能を電力含めてボード一枚で担えるようにすれば、残りの体積で色々おもしろいことができそうです。 個人的には電力的に不死身な衛星を作るために試行錯誤中です。

2013/11/24

AR八木アンテナ Rev:B


端末変えたので、AR八木アンテナもバージョンアップした。
アンテナは相変わらず自作のSWRがあまりよくない3エレ八木である。 ちゃんとしたハンディアンテナ買いたいなぁ。

主に端末のおかげだが、使い勝手はだいぶ向上した。 追尾精度も上がってる気がする。 


Xperia Rayは3.7inch画面、100g程度と小さいため、大半の人にスケール感が伝わりにくいかもしれない。 アンテナへは、透明な保護ケースを強力な両面テープでL型金具に固定して取り付けている。

 

現状では追尾にとどまっているが、将来的には、下の画像のようにRTLSDRを動かせるといいかなと思う。 アプリを動かす性能はあるが、RTLSDRのドライバと相性が悪く、Xperia Rayでは動作検証できていない。 でもこの構成はとても魅力的だ。 ソフトウェア次第で、スマートフォンのみで追尾スケジュールの取得、自動受信、デコード、結果のアップロードまでできるだろう。 でも何時着手できることやら…



2013/10/26

Spinner One 2013モデル


3年寝かせて熟成した筐体の、補修と制御系の更新が一段落した。
外見は相変わらずだけど、タイヤの接地面だけ新しくしてみた。 中央部は4ストライプとなり、石のような障害物を乗り越えやすくしている(当社比)

外側に起動スイッチを設けた。


システム的な追加点は2つ。

映像撮影機能

FlyCamOne ECOという720PのH.264動画撮影が可能な模型飛行機用のSDレコーダーを搭載。
秋葉原で普通に買えた。

ボードからカメラモジュールのFFCケーブルが10cmほど伸びているので、カメラモジュールを引き出して、外側の進行方向に取り付けている。


どういう映像が撮れるかについてはこれから走行させて試そうと思う。
サーボコネクタ経由で撮影の制御も行えるが、まだうまく記録開始ができないので手動で開始している。

非接触充電(Qi) 

モバイルバッテリにQi充電機能がついていたので、コイルを外に引き出してみた。 充電器は数千円の製品。 一般的な5W出力タイプだ。


これでコネクタ等をつなげること無く充電ができる。 

自律走行させて、自分で巣に戻ってきて非接触充電できるようになったら良いな。

2013/10/17

LANコネクタDIP化キットでお手軽配線延長

 試作した機器を色々な試験にかけるときに、場所や装置によっては機器まで長いケーブルが必要になることが多い。 シリアルケーブルは重いし…
その都度作るのも面倒なので、LANケーブルをそのまま延長ケーブルとして使えるようにしてみた。
 
 LANケーブルとのインターフェースには、秋月のLANコネクタDIP化キットを使う。 
 http://akizukidenshi.com/catalog/g/gK-05404/ 

 お手軽な用途であれば、ケーブル地獄を緩和できるかもしれない。

8ピンあるうちの6ピンしか使っていないけど、今回は単純にFTDI配列を延長している。


接続次の注意点としては、LANケーブルは普通ストレートケーブルなので、FTDIケーブルのノリで同一の面にそろえてつなごうとすると端子配置が逆になってしまう。 接続時にクロスさせよう。


試したケーブルは5m、115kbpsで通信させたが、文字化けや通信エラーはなかった。



差動シリアル延長ケーブルとして

RS-232の本格的な延長を考えるならば、ツイストペアが本領を発揮するRS-422を採用すると良いかも。 ただし、RJ-45のピンアサインでツイストペアになる組み合わせは確認したい。 

参考 RJ45, RJ11(RJ14)のピン配置について 

カテゴリーが上がると、シールドが増えていくので、入手性の良いシールド付きツイストペアケーブルとしてみる事ができる。 

 実はRS-422トランシーバーを搭載したLAN延長基板を最初に作ったのだけれど、ちょっとオーバースペック気味で活用できていない。

Spinner Oneのシステム更新


車体を改修したので、週末に制御系と通信系、電源を実装した。 これらは3年経った現在のハードウェアやDIY文化の恩恵をだいぶ受けている。

システムを遠隔操作ラジコン的に使うためなら、XBeeをそのまま使う手もあったが、BluetoothのUSBドングルをマイコンに接続し、タブレットをコントローラにして制御するのが安価で先行例も豊富だとわかったので、早速試してみた。 

プラットフォームはmbed (これも2010年の大垣Meetingで買って放置していた…)

ほとんどの手順は、こちらのサイトを参考にしました。

『BASIC!』でAndroid端末とmbedをBluetooth SPPで接続する実験(その1)
http://blog.goo.ne.jp/roboz80/e/a1d2f2643c7bce63114cf79c732dc41b

タブレットでの操作については、GooglePlayで公開されていた Bluetooth Serial Controlerにて、コマンド列の定義と、ボタン登録を行った。 
 https://play.google.com/store/apps/details?id=mBluetoothSerialController.nomal&hl=ja

(Nexus7用のバージョンもある)

 送信データのエコーバックを有効化すると次第に動作が鈍くなるのでOFFにしておく。今のところ、アプリを立ち上げ直すとコマンドの末尾に勝手にスペースが追加されるバグ? があるみたいだ。
 
Nexus7で

Xperia Rayで
Spinner Oneの操作体系はどちらかと言うと2WD車に近いが、作った本人があまり無意識な操作をできていないので、まだまだUI的には改善できそうだ。

バッテリ
バッテリはいずれ専用の充放電保護回路を実装する予定だが、今は楽をしたいので、モバイルバッテリを改造することにした。 18650を1セル使ったパナのモバイルバッテリから、昇圧5Vと、モーター用に直に電池出力をもらう。 

 USBポートからシステムへの給電だが、データラインを短絡状態にしないとバッテリ側の管理マイコンで負荷が認識されず、10分でオートパワーオフされてしまった。 D+とD-を100Ω程度でつないで解決。 

このバッテリはQi(チー)による非接触充電に対応しているので、コイルを外に引き出せば、充電台に載せるだけで充電できて便利かもしれない。 いずれにしろ、出力用スイッチを引き出さないと電源が入れられない。
 
内部のスペースはだいぶ余裕があるので、模型飛行機用の軽量ムービーカメラとかを収めてみようと思う。

2013/09/19

SDR touchとNexus7(2012モデル)

 新型が出たこともあり、中古品の旧Nexus7が大量に出回っている。 ということで店頭のセール価格で購入。 身近なタブレットというと、家族が持つiPad(初代)だった。 HT-03Aの時代と比べると全然違うなあ…
 旧とついてしまったとはいえ、HD解像度が必要でなければ、液晶も(低価格帯の他のタブレットと比べてコントラストが高く綺麗だ。 なによりリファレンス機という安心感があるし、実際安い。 

さて、AndroidでもRTL-SDRを使うことができる。

 ソフトウェアはSDR touch、デモ版と有償の解除キーがGooglePlayで公開されている。

まず、デモ版と、RTL-SDRのドライバをダウンロードして動作することを確認した。
なお、旧Nexus7は既に最新のAndroid4.3にアップデートされている。

(追記: 4.4でも動作確認済み)

 以前はRootが必要だったりしたみたいだが、今回はmicroUSBのHostケーブルで接続するだけで動作した。 
 Xperia Rayを買ったときも試したけれど、OSがICS(4.1)なのでどうしてもドライバ周りの相性が出て動作しなかった。

 解除キーを購入すると、スペクトラム表示とウォーターフォール表示、周波数プリセットができるようになる。 ポータブルのスペアナといった感じだ。 バッテリーの持ちや感度はこれから調べることにする。 (ホストケーブルはもうすこし長いほうが良かった)  

アップデートされて、録音ができるようになった。





2013/09/08

カメラモジュールと画角

OV7670で遊んでいるけど、手に入るモジュールはどれも望遠気味。
 これは、OV7670の素子面積が小さいためだ。 なので12mm径のレンズマウントに対応した焦点距離1.8mmの超広角レンズ(自動車のリアカメラ用)をつけても、画像が歪みまくる割には広角にならない。

手元のレンズ付きモジュール(トラ技頒布カメラA)と、aitendoで入手したレンズ一体型を比べてみた。 

OV7670と手配線FIFO基板、ATmega644P




画角テスト

 画像1 頒布カメラA(付属レンズ)

 画像2 レンズ一体型

VGA RAW解像度で撮ってPCで表示したもの。
比べると、レンズ一体型のほうが広め。 手持ちの画角がわかるGX200で検証したところ、

レンズ一体型 約50mm
頒布カメラA 約72mm

頒布カメラはかなり望遠気味なようだ。 ここでは載せていないけど、FIFO付きのモジュールはさらに望遠だという噂。

参考 GX200 画角50mm VGAで撮影。


参考2 OV7725 (レンズ一体型) レジスタ設定がまだ途中なので露出がうまくいってない。
画角は35mm程だった。

モジュールいろいろ
 
12mmレンズマウント 頒布カメラA (左は頑張ってフード削った)

 レンズ一体型タイプ

レンズ一体型の準備

レンズ一体型はFFCをコネクタに取り付けて、線を引き出す。 24ピンの変換基板を使う。

ピンアサインは、販売元の表どおりだったが、端子部を観察してみると、今回買ったモジュールは、10bit出力用の端子が削られている。

ちなみに、同じHDFという刻印のあるOV7725もピンアサ共通だった。

物によっては、来てるモジュールもある。今回のは変換基板でみたらAGNDとDGNDが導通しているタイプだったけど、ものによってはヒントがなく、泣く泣くチップを剥がしてピンアサを確認することになったり…。

はじめはFFCの端子配列の規則性がよくわからなかったが、2列にしてみると結構わかりやすくまとまっている。

FIFO/マイコン基板用に配線をする。 電源ラインの処理とリセット端子やプルアップ抵抗もつけて、トラ技カメラAにだいたい準拠させる。 

これでコンパチに。


OV7670で経験を積んだら、素子面積が大きいOV7725に移行しようとおもっている。

OV7670だと、aliexpressでもたくさん販売されていて、場合によっては日本で輸入してる店より安いけれど、よく見ると古いリビジョンだったり、ピンアサと掲載画像が適当なことが多いので、日本の店で買ったほうが間違いが少ない。 
 以下は、レンズ一体型モジュール用の変換基板を設計して実装したもの。 ピンアサが共通だったOV7670とOV7725に対応した。 頒布カメラA相当の回路と、オシレータを搭載して、FFCケーブルで延長できる。
 

2013/09/05

Spinner Oneの改修


 2010年に制作して以来、ゴタゴタしてあまり触っていなかったSpinner Oneを最近整備している。 ローバー関係は、輸送用BOXにそのまま保管していた。

 今回は本体の補修。破損箇所を作りなおした。

 過去の走行中に腕となるサーボモーターと、スタビライザーを固定している円形のアクリル板が局所的に割れてしまった。あきらかに素材選定ミスだったので、アルミ板で作りなおす。

趣味的には初めてCADで設計して加工したシャーシなので、色々と思い入れがある。


アルミ円盤の配線用穴あけが終われば、フレームとしては整備完了となる。 大きめの穴の加工については、春に鉄工用のステップドリル刃を買ったので、固定に気をつければ穴あけがとても楽になった。 そのうち卓上ボール盤とクロステーブルを買って、精密加工したい。


2013/08/30

ホイッスラー(現象)を観測してみたい

ちょっと息抜きに、VLF受信機を組み立ててみた。

 今年は雷がすごかったが、雷も電磁波的には広帯域で観測できる。 ラジオがバリバリ言うのがわかりやすい。 雷が鳴るとテンションが上がるダメ人間だが、アンテナを設置するようになると、いつ屋外設備に被雷しないかとヒヤヒヤしてしまう。(危ないときは撤収とケーブル分離をしよう)

 さて、周波数数Hz~数十kHzの電波をVLF(超長波)と言う。 雷の周波数成分のうち、このVLFで観測できる現象は面白いらしい。

・Whistler(ホイッスラー) 雷の超長波成分が電離層を超え、地球を取り巻く磁気圏の磁力線にそって伝わり、また地上に戻ってきたもの。低い周波数ほど遅れて届くため、電波を音に変換した時に、音程変化が笛の音のように聞こえる。
 北海道くらいの緯度だと聞こえやすいらしい。

・tweeks 鳥のさえずりに似た短い音色。 これは、宇宙に行かずに、電離層に反射されて届くため、比較的観測しやすいらしい。

 いろんなサイトやYoutubeを巡ると、録音やスペクトル画像がたくさん見つかる。百聞は一見にしかず。

たとえば… Natural VLF Radio Emissions http://home.pon.net/785/natural.htm


VLF帯といえば、人間は電波時計のタイムコードを送信するJJYや、潜水艦の通信に使っている。


JJYについては、無線機が無くても、録音機材(ICレコーダー)や、PCのサウンドカードに適当なアンテナと、必要に応じて増幅/フィルタ回路を繋ぐだけでも条件が良ければ観測できる。 

ホイッスラーの受信も原理は同じだが、今回作ったBBB-4というVLF受信機では、増幅段とVLF局の混信対策のためのフィルタ回路が組まれている。

条件が良ければ

 残念ながら、東京だと都市雑音や電柱の無いところを探すのは難しい。 特に数kHzのあたりはかなり雑音が大きく、信号があっても埋もれて分からないだろう。 ホイッスラーの観測は、ロケーションが肝心と思われる。 

 田舎の実家に受信局を置いて、長期観測やってみたいなあ…。 

実際に作ったもの

Stephen P. McGreevy's BBB-4 (Bare Bones Basic) Natural VLF Radio Receiver Schematic http://www.auroralchorus.com/bbb4rx3.htm



FETは秋月で入手できる。 残りは手持ちの部品を使った。
これをPCのマイク入力に繋ぎ、Spectrum Labというソフトを使って観測した。

アンテナは数m程度で試したが、家では、雑音になりそうなもの(空調、LED照明)などを全部消しても、ノイズフロアが大きかった。 

2013/08/24

TWE-001 Lite


東京コスモス電機のZigBeeモジュール。TWE-001 Liteを試しているところ。
 
DIP版と最近発売された表面実装版がある。 どちらもアンテナをハンダ付けする。
(U.FLコネクタ版は無いのかなあ)

そのままI/OやA/D変換値を親機・子機間で転送するファームウェアが焼かれているのが面白い。GPIOや電圧値入力、PWM波形などを渡せるので、ラジコンが作れそうだ。(サイトでは連続送信に対応した公式ファームが公開されている) 

中のRFマイコンはNXPのJN5164の模様。(32kB_RAM/160kB_ROM)
 
 公開されているSDKのライブラリを眺めると、気になっていたToF(Time of Flight / RFレンジング)や、I2Cのライブラリがあった。 I2Cのセンサを繋ぎ、データ取得ができそう。 すべて親機から操作するよりも、ある程度ローカル処理でI/O操作やデータ処理をさせて、ワイヤレスセンサとして使えるようにしたい。 このマイコンにGPSやセンサ、アクチュエータを繋ぐだけで、カンサットが作れそう。

 出力や通信距離が気になったら、高出力のTWE-Strongを選択できる。 技適通過済みの指向性アンテナオプションもある。


表面実装版の試作はコイン充電池を挟んで最小限の構成にしてみた。 ファームウェアは最新版に更新済み。

2013/08/18

I2Cカラーセンサ

秋月で販売している浜松フォトニクスのカラーセンサ S11059-02DTを試してみた。

・RGBに加えIRが計測できて、解像度が16bit/chになった。
・I2Cバス接続が可能。
・ダイナミックレンジが向上し、明るい太陽光下でも値が飽和しにくくなったので使いやすい。

接続のポイント
・3.3V系なので、5V系ボードではレベル変換が必要
・数kΩでプルアップ (3kΩ程度かな)

実物は米粒くらいの大きさ


ユニバーサル基板にハンダ付けするときは、四隅の足だけ残して、真ん中寄りの足をピンセットなどで上に折り曲げてから、4本の足をパッドにハンダ付けすると簡単にできる。

手前がカラーセンサ。奥はTMP006(非接触IR温度センサ)

1画素ドットカメラの時みたいに、またレンズでも付けてみようかと思っている。
得られた数値で、照度の換算なども出来そう。 

動作確認用スケッチ
最初はEnergia IDE(MSP430)で作っていたけど、Arduinoでも動く。Wireの仕様の関係で、1.0以降のAPIに対応したバージョンなら大丈夫だと思う。

MSP430 LaunchPadの場合、デフォルトのボードはI2CのSCLにLED2が接続されているため、通信ができない。 あらかじめLED2の黒いジャンパを外しておくこと。

スケッチでは固定露出モード動作となる。 マニュアル露出についてはまだテストしていないけど、任意の露出時間を選べそう。



/******************************************************************************** 
 * S11059_02dt I2C color sensor test sketch  v20151220   by KentN 
 *
 * 
 *  tested boards  
 *  MSP430 LaunchPad(G2553) (Energia IDE 0101E016)
 *   Arduino 1.0 or later (3.3V board or I2C level converter) 
 * 
 *  MSP430LaunchPad (Energia) 
 *  before enabling I2C bus, remove led2 JUMPER PIN 
 ********************************************************************************/

#include "Wire.h"

#define led 13 // Arduino LED PIN
//#define led RED_LED  //(MSP430 LaunchPad)

#define device_address 0x2A
#define control_reg 0x00
#define timing_reg_H  0x01
#define timing_reg_L 0x02

uint16_t red = 0;
uint16_t green = 0;
uint16_t blue = 0;
uint16_t IR = 0;

void getRGB();

void setup()
{
  Wire.begin();
  Serial.begin(9600); 
  pinMode(led,OUTPUT);
  digitalWrite(led,LOW);
  led_blink();
}

void loop()
{

  getRGB();

  Serial.print(red);
  Serial.print(", ");
  Serial.print(green);
  Serial.print(", ");
  Serial.print(blue);
  Serial.print(", ");
  Serial.println(IR);

  delay(500);
}

void getRGB()
{
  uint16_t colordata= 0;
  
  /* //manual exposure mode  
   setManualtGain(100);
   Wire.beginTransmission(device_address);
   Wire.write(control_reg);
   Wire.write(0x84); // ADC reset LowGain wakeup
   Wire.endTransmission();
   Wire.beginTransmission(device_address);
   Wire.write(control_reg);
   Wire.write(0x04); //start 
   Wire.endTransmission();
   */
   
  //Fixsed exposure mode settings
  //  LowGain mode
  //  0x00 = 87.5us
  //  0x01 = 1.4ms
  //  0x02 = 22.4ms
  //  0x03 = 179.2ms 
  //  HighGain Mode
  //  0x08 = 87.5us
  //  0x09 = 1.4ms
  //  0x0a = 22.4ms
  //  0x0b = 179.2ms 

    
  Wire.beginTransmission(device_address);
  Wire.write(control_reg);
  Wire.write(0x83); // ADC reset wakeup
  Wire.endTransmission(false);
  Wire.beginTransmission(device_address);
  Wire.write(control_reg);
  Wire.write(0x03);  // set gain & exposure time 
  Wire.endTransmission();

  delay(180*4); //wait exposure time x4ch

  led_blink();
  Wire.beginTransmission(device_address);
  Wire.write(0x03);
  Wire.endTransmission(false);
  Wire.requestFrom(device_address,8);
  //read data
  if (Wire.available() > 0){
  colordata = Wire.read();
  colordata <<= 8;
  colordata |= Wire.read();
  red = colordata;
  colordata =0;
  colordata = Wire.read();
  colordata <<= 8;
  colordata |= Wire.read();
  green = colordata;
  colordata =0;
  colordata = Wire.read();
  colordata <<= 8;
  colordata |= Wire.read();
  blue = colordata;
  colordata =0;
  colordata = Wire.read();
  colordata <<= 8;
  colordata |= Wire.read();
  IR = colordata;
  }   return;
}

void setManualtGain(uint16_t ex_time){
  uint8_t reg =0;
  Wire.beginTransmission(device_address);
  reg =(ex_time >>= 8);
  Wire.write(reg);
  Wire.endTransmission();
  Wire.beginTransmission(device_address);
  reg |= ex_time;
  Wire.write(reg);
  Wire.endTransmission();
}

void led_blink()
{
  digitalWrite(led,HIGH);
  delay(10);
  digitalWrite(led,LOW);
}