• 公開日:2021年05月31日
  • | 更新日:2022年11月30日

マイコン初心者が色判定可能なマシンを作ってみた 第2話「カラーセンサーの実験をしよう!~はじめてのI2C~」

こんにちは。“四代目ビリーK”です。

前回の第1話では製作する色判定マシンの主な機能・仕様を説明しました。
第1話「仕様を考えよう!製作実習はじまる!!」

まずはセンサー実験から始めます。今回はカラーセンサーに用いるI2Cというインターフェースについて攻略していきたいと思います。

 

I2Cとはなんだ!?

「I2C」この世に誕生してから初めてこの単語を聞きました(まだまだ他にも沢山ありますが、、、)。

とりあえず、地球で最も有名な先生であるGoogle先生に尋ねてみました。
すると、よく分かりませんが「高速通信方式のインターフェースで、データ通信によく用いられる。」だそうです。データとクロックの2本の線でデータをやり取りします。クロックの周期に合わせて、データ(電圧のHigh/Low)を送受信する仕組みです。

また、マスター(今回はMSP430)とスレーブ(カラーセンサー)に機械の役割が分かれているので、マスターに対して複数のスレーブを接続できることがメリットです。

colorsensor_02_01

しかしここで問題が発生致しました!!

スレーブには固有のアドレス(住所と名前的なもの)が設定されて必要があるので、同じアドレスのスレーブを接続することが出来ません。

そうです。私が使用する予定のカラーセンサーはスレーブアドレスが変更出来ず固定です。つまり、1つは使えるが、2つ以上は使えません。

困りました。。。どうしましょう。。。

いろいろ悩んだ結果、スイッチみたいに切り替えたらいいんじゃいなか!?先輩方に確認してみたところ、、、OKが出ました。アナログスイッチを急遽購入です。理論的にはこの作戦で大丈夫なはずです(ちなみに、データ線をスイッチングする事にしました)。

 

プログラムを作っても上手くいかない

まず、MSP430とカラーセンサーを繋いでカラーデータを取れるか実験してみます!

過去の先輩のコードや、インターネット・書籍を読みながらコードを書いていきます。
(コーディングソフトはTIのCode Composer Studio8.3.0(以下CCS)で、C言語で書きます)

うーん。動かない。
そもそも通信が出来ていないのでは…?

こんな困った時助けてくれる秘密道具があります!!
それは、オシロスコープです。
早速、オシロスコープに繋げて波形を見ることにしました。

(黄色:クロック、青色:データ)

全く波形が出ていません。

クロックらしきものは確認できますが、データ線はHighのままLowに落ちません。ちなみに、データ線でギザギザしている所はノイズです。

うーん。データが上手く送信出来ていません。

ハード面として配線を見直しましたが、特に異常は有りません。次にソフト面を見直し、悩んでコードを書き直し、実験すること2週間。試行錯誤でした。コードの書き方を「割り込み」と「ポーリング」の2通りに大きく分け書いてみたり、ステップ実行などをして1つ1つコードを追ってみましたが、ループしたりと一向に出来る気配がしません。

先輩方に助けを求めました。
すると、TIがサンプルコードを提供していると教えて下さいました。

これは、デカい!!
早速、TIのサンプルコードを用いて、もう一度I2Cの勉強を始めました。MSP430を2台用いて、片方をマスタ、もう一方をスレーブとして通信をさせます。

な、な、なんといとも簡単に出来てしまうではありませんか!!感動モノです。こんなことなら、早く先輩方に相談すれば良かったです。実際の業務でも大切なことですが、やはり「報連相」は早い方が良いです。このような事を学び体感することも製作実習の目的の1つでもあります。

このコードを元にスレーブのアドレスなどを変更してカラーセンサーとの通信に再チャレンジします。結果、カラーセンサーにはアクセスしていますが、カラーデータが返って来ません。I2Cの通信自体は問題がなさそうなので、カラーセンサー側の問題なのでしょうか?

またまた、頭を抱えます。

 

センサーへの2段階アクセス判明、オシロスコープで波形確認

カラーセンサーのデーターシートを読み返しました。(これは、実際の業務でもそうですが全て英語なのでより時間がかかります。私は英語がほとんど出来ません。)

何度も何度も読み返していくうちに、もしやこれか?というポイントを発見しました。それは、カラーセンサーの機能を有効にするに2段階アクセスをしなければならないのかもということです(簡単に言うと、1回の命令ではなく、2回連続して命令を送らなければなりません)。
とにかく疑いがある部分にはトライしてみなければなりません。

結果、大正解でした。何かしらのデータが返ってきました。

これはもしや?と思い命令するとスレーブアドレスが返ってくるような機能を有効にしてみました。そして、ドキドキしながらオシロスコープを見つめます。

な、な、なんと無事に返って来ました。感動です。これで私はこのカラーセンサーを操る技を身につける事が出来ました。

 

(29:スレーブアドレス、92:命令コマンド、44・00:スレーブからのアドレスデータ返信)
感動に浸っていますが、一旦落ち着きます。

むむむ。スケジュールの遅れがすごいことになっているぞ。2日間の予定が12日間も使ってしまいました。逆算するとこれでは間に合わない。

予定していたスケジュール

今現在のスケジュール

という事で、一旦ハードウェアを作成する事にしました。とりあえず形がないと製品発表会でどうすることも出来ません。という事で次回は、

第3話「ハードウェアを作ろう!~予想外の敵現わる~」です。

第3話を読む

 

マイコン初心者が色判定可能なマシンを作ってみたシリーズ一覧

第1話「仕様を考えよう!製作実習はじまる!!」
第2話「カラーセンサーの実験をしよう!~はじめてのI2C~」
第3話「ハードウェアを作ろう!~予想外の敵現わる~」
第4話「ソフトウェアを作ろう!~マイコンとの闘い~」
第5話「ま、さ、か、~最大のピンチ!!!~」
第6話「フィナーレ~技術商社のその先へ~」