マイコンを使ったハード設計において制御ボード間で通信を行う場合の通信方式として古くからあるのはUARTと言うシリアル通信で、その他にSPIやI2C通信があります。
この中でUARTとSPI通信は1:1の通信な為に設計する際の制約がどうしても生まれます。
例えばUARTですとリアルに1:1での通信ですので複数のセンサーと通信と行う場合はセンサーの数×2本の配線が奪われ、ソフトウェアシリアルに使用できないポートがありますとそれだけ接続できるセンサーやモーター類も少なくなってしまいます。
一方SPIは3本の信号線(SI,SO,SCK)を使い通信を行うのですが一方通行の通信しかできず、1つのSPI信号に複数のスレーブと呼ぶボードをぶら下げる事はできますが、どのボードと通信するのかはマスター側からのもう1本のCS配線を使って制御しなければならずスレーブとなるボードが増えれば増えるほどマスターとなるボードの空きポートは減って行きます。
そしてI2Cは2本の信号線でマスターとなる親機と相互通信でき他、接続するI2C機器にはそれぞれ全く違う重なる事のないアドレスが割り振られていますので、スレーブとなる子機同士の通信もアドレスを使って行う事ができる様になっており、少ない配線で多数の機器と通信できる為に便利なのですが、基板内通信が基本で、遠く離れたボードと通信すると言う用途には残炎ながら向きません。
そこで、離れた場所に設置した機器とも通信できノイズに強いCAN通信をサポートしたArduino MKR互換機「NoCAN」とRaspberryPi用HATをご紹介致します。
CAN信号は電源とGNDの他にCAN-H、CAN-Lと言う信号線で通信可能な通信規格で、デイジーチェーン(数珠つなぎ)接続でその信号線の長さは最長300mまで通信を保証されています。
ですから産業用の工作機械から観測機器、そして身近な所では自動車のエンジンやセンサー類を結ぶ通信規格としても採用されており、最近ではアクセルやメーターパネル、ウインカーレバー、エアコンのスイッチ類、パワーウインドやドアロックまであらゆるものがCAN信号で車両のコンピュータと接続されています。
このCAN信号の良い所はI2Cと同じ様にマスターとなるボードやノードと呼ぶスレーブのボードに個別に違うIDを割り振っておく事で、ノードとなる各種ボードは、あるノードから出されCANの信号線を流れるデータを拾って自分に必要なデータであればそのデータを利用して自律的に動く事ができるのです。
例えば最近の車には標準装備になるつつある衝突防止センサーがあるが、衝突防止センサーは前方の障害物との距離を計測し、その距離データをCAN信号の乗せて送出しているのだが、ある一定距離を下回るとまずエンジンコンピュータはエンジンの回転数を落としてスピードを緩め、そしてブレーキECUは自動的に油圧ブレーキをかけ、メーターパネルは障害物を検知した旨をパネルに表示すると言った事がCAN信号を流れる1つのデータを見てそれぞれの機器が動く様になっています。
更に言うと、後からセンサーを追加するのがとても容易です。マイコンで何かシステムを設計を行う場合、最初にシステム全体の設計を行ってからポートの割り当て等を考えてシステム全体の設計をしなければならないのですが、後から温度センサーや気圧センサー、照度センサーと言ったセンサーを追加したいと思っても空きポートがなければ接続する事すらできませんが、CANを使えばCAN信号にぶら下げる形でプラスするだけなので、後からのシステムへの追加が容易になります。
更にこの「NoCAN」にはRaspberryPi用のボードも標準で付属していますので、RasPiでApacheやTomcat等のWebサーバーを動かせば直接「NoCAN」に接続されたセンサーのデータや、モーター等を制御できる他、そのままどこかのサーバーへデータを送信すると言った事もできます。
また開発環境もArduino IDE用のライブラリやRaspberryPiで動かす為のアプリケーション等も配布されており開発環境はバッチリと整えられていますので、CANっていいよなぁ~と思っていた方は是非下記URLにて詳細をご覧ください。
https://www.kickstarter.com/projects/1242572682/nocan-the-wired-iot-platform-for-makers
この記事へのコメントはありません。