最終更新日:2017/2/2
I2Cデバイスを扱うようになって、基本単体動作させ、場合によってはPCと接続してデータ取得したり、制御したり出来る環境を思い描くようになりました。
I2Cデバイスを扱う場合まず思い立つのは Arduino です。現時点で入手するとなると Arduino Uno R3 のようです。\3000前後で入手可能です。Arduinoの概要はウィキペディアの記事を読むのが一番かと思います。 https://ja.wikipedia.org/wiki/Arduino
実際にどんなところで使われているか気になりました。
- RCカーに乗せているケースがありました。iPhone等からの制御も受け付けるというような使い方がよく見られます。
- 3Dプリンタ制御に使っているケースもありました。市販品も中身にArduino基板をそのまま使っているものもあるようです。安価なわけです。
- 自走のロボットに載せているケースもありました。カメラが付いているものも有るのですが、Arduinoで画像処理に足りる能力があるのか気になるところです。
- ドローンの姿勢制御にArduinoを使っているケースはあります。ドローンに設置するカメラは全く別処理のようですね。
UNOにはDIP20pinのchipがソケット付けで搭載されています。プログラムを書き込んでしまえば、このチップを専用のボードに挿してよりコンパクトな仕組みに作り替えることも出来ます。
現在のメインストリームは UNO なのかと思います。CPUはATmega328。8-bit RISC アーキテクチャです。
※チップ単価は300円もしないようです、ただ、ブートローダ等々いくらか処理しないとArduino相当にはならないようです。
このCPUの処理能力がどの程度のものなのか気になるところです。
項目 内容 マイクロコントローラ(マイコン) ATmega328P 動作電圧 5V 入力電圧(推奨値) 7〜12V入力 電圧(制限値) 6〜20V デジタルI/Oピン 14ピン(内6ピンがPWM出力可) PWMデジタルI/Oピン 6ピン アナログ入力ピン 6 I/Oピンあたりの直流電流 20mA 3.3Vピンの直流電流 50mA フラッシュメモリ 32kB (内0.5kBをブートローダが使用) SRAM 2kB クロック周波数 16MHz 長さ 68.6mm 幅 53.4mm 重量 25g 基本はClockと1命令に掛かるクロックサイクル数の関係かと思います。PICはクロックが遅いモデルもまだまだあるようですね。
AVRは20MHzぐらいが多いでしょうか。またPICは1命令4クロックですが、AVRは基本1命令1クロックで同じクロックレートなら単純演算は速いですね。
また、同様のCPUである PIC との比較も気になります。どのような点で Arduino を使うべきかの指針にもなるのかと思います。
※アセンブラでコーディングしている人で、PICのニーモニックが素直で無く、AVRは素直な記述が出来るという書込を見かけました。使い勝手で比較している方も多いですね。
AVRは基本FLASH ROMで書き換えも1000回程度は出来るようですが、PICは1TIMEのものが多々あるようです。それに起因するのか、PICは書き込み時の電源電圧も別途用意する必要があるケースが多いので、この点からAVRへ移行している方も見えるようです。PIC以外にも、ここ10年の間にUSB接続の小型8bitマイコンボードがたくさん出ました。
手元にCQ出版雑誌付録にもなった78K0があります。H8搭載のボードもたくさんありますし、TIのMSP430搭載のボードもあります。
結局のところ勝ち組はどれなのか、情報が欲しいところですが、少なくともArduinoは勝ち組なんでしょうね。互換機が多いのがその考えの理由でもあります。また、教本が多いのも理由に挙げて良いのかと思います。
※ムック付録として互換基板を掲載し、使い方を含め紹介しているためユーザの裾野拡大に一役していると思います。
ArduinoIDEはCライクのプログラム言語でコーディング・コンパイル出来る環境です。
LabVIEWはクロスコンパイル環境を提供していることもあり、ArduinoIDEに中間言語を送ってBUILDする環境を2010年には構築したようです。
それが現在では無償提供されています。
Windows環境に限らず、Mac版、Linux版でも使えるのは有り難いです。まずは環境整備する必要があります。
NIのユーザフォーラムに記事があります。
https://forums.ni.com/t5/LabVIEW-Interface-for-Arduino/LabVIEW-Interface-for-Arduino-Setup-Procedure/ta-p/3521346
この記事は2011掲載のものです。可成り時間が経っているため、実際にこの記事のまま使えるかどうかは気になるところです。
- ArduinoIDEをDLし適当な場所に解凍してC:\Program Files (x86) にコピー 今回は arduino-nightly
https://arduino.cc/en/Main/Software
解凍後のフォルダサイズは400MBを優に超えます。- LabVIEWをインストールする。(既にインストール済みならスキップ) この記事はLabVIEW2016で実施
- NI-VISAドライバをインストールする。(既にインストール済みならスキップ) この記事はNI-VISA16.0で実施
- JKI VI Package Managerをインストール。(既にインストール済みならスキップ) 最新版を使用。2016SP1
- LabVIEW Interface for Arduino Toolkit をインストール
参照:https://digital.ni.com/public.nsf/allkb/A20FBBD36820669086257886004D5F4D?OpenDocument
今回インストールしたバージョンは2.2.0.79でした。
![]()
- Arduinoに接続する準備をします。接続方法もKnowledgebaseに記載があるので参考にします。
参照:https://digital.ni.com/public.nsf/allkb/0F9DADF9055B086D86257841005D1773?OpenDocument
- Arduino IDEは既にダウンロードしてC:\Program Files(x86)にインストール済みのはずです。
![]()
- USBケーブル(A-B)にてPCとUNOを接続します。このときUSBドライバのインストールが走るはずですが見つからないはずです。
https://forum.arduino.cc/index.php?topic=46838.0
UNOおよびその互換機は VID2341PID0043 のようです。
ちなみに、mega 2560の場合 VID2341PID0042 のようです。- 見つからないのでArduino IDE内のドライバを指定してインストールします。
これを実行すればFTDIのドライバがインストールされ、通信できるようになります。
デバイス:ArduinoUnoと表示されました。VID2341PID0043=Unoです。
COMポートの番号を控えておいてください。
※互換機の場合FTDIではなくCH340というchip搭載のUNOやNANOが存在することが判りました。この場合、arduino-nightlyにはドライバが含まれていませんので、自動検索に失敗するようです。自身でCH340のデバイスドライバを検索・ダウンロード・インストールする必要があります。- Arduino IDEを起動して、LabVIEW Interface for Arduinoに搭載されているファームウエアをボードにダウンロードします。
![]()
- ファイル>>開く を選択して、LabVIEW Interface for Arduinoに用意されている LIFA_Base を開きます。
※拡張子.inoはArduino Sketch Fileです。
LIFA_Base.ino は LabVIEW Interface for Arduino用のファームウエアです。- このファームウエアをコンパイルしてArduinoUno本体にダウンロードします。
まずツールメニューのボード一覧からターゲットボードを選択します。このリストはarduino-nightlyのArduino IDEが対応しているボード一覧でありLIFAがすべて対応しているかどうかは別問題です。
![]()
- シリアルポートポートを選択します。
※IDE起動時に自動選択している節があります。- 書き込みます。
下の絵のボタンがスケッチのダウンロードボタンです。
まずコンパイルし、、続いてダウンロードして完了です。
半分以上のメモリを費やすようです。18kで収まるようなプログラムで、17種類のExampleは動かすことが出来ます。
※ローカルメモリの残量が表示されています。アナログデータの取得時等で考慮が必要になるかもしれません。
- I2CやSPIの関数も用意されているのですが、実際に使用したExampleがほとんど無いのが残念なところです。
- アナログ入力は6ch有ります。資料によるとATmega328PにはADCが6基ある という記載がありました。この記載が正しければ同じアナログ信号をA0/A1にWireOrで接続し、モニタすると同相波形が取得出来るはずです。
Exampleには無いのですが、関数に Analog Read Port というのがあります。この関数がA0..A5の同時データ取得関数のようです。
実際にコードを書いて動かしてみました。
20msecのポーリング入力ですが、結果からすると同時入力出来ています。
アナログポートを一斉に処理します。このことからI2Cとの同時扱いは困難かと思われます。
またRead関数はPC側への転送の為の関数のようです。ボード内のメモリに置くとか云った処理のための関数は別にあり、こちらがポート対応出来ているのか興味があるところです。この辺りはLIFAファームのコードを読み取る必要がありそうです。
※デジタル信号もポート単位であれば同期処理が出来るようです。USB接続ですが、FTDIのUSB-RS232C変換チップを介しており、通信速度は基本115200bpsです。USB1.1接続であれば12Mbpsが期待できるのですが。
今回使用したArduinoIDEは『arduino-nightly』です。この中にFTDI社のドライバが用意されているのですが、よく見てみるとSilicon Labs社のCP210x用ドライバも同梱されていました。なんとなくですがSilicon Labs社の方が好きなので、USB-UART部がcp210xのものが存在しないか調査しました。
結果はUNO互換機では無いのですが、Japanino がCP2104搭載と云うことが判りました。ただ、Japaninoリリース当時のArduinoIDE環境にはドライバが搭載されていなかったようです。
ProMiniには元々USB接続するI/Fが用意されていないので、ここにCP2102のボードを接続して使うという紹介は結構見つかりました。なるほど感があります。関数内に接続方法を指定出来るようになっています。XBEEやBlueTooth接続も可能になっています。※その程度は対応しています。
ボードの種類も予め選択する必要があるようです。UNOはもちろん対応しています。他にMega2560 と Duemilanove が選択できます。
PINアサイン等決まっている部分があるので、ProMiniだとどうなるのか興味深いところです。
デバイスとしてProMiniでも使える様ですが、ファームウエアの書き換えが必要になるかもしれません。基本Atmega328用のようです。ProminiはAtmega328Pとあり、たぶん使えます。※未確認です。
UNOにはPWM対応のPINが6つ有ります。この6つのpinは同じ仕様ではないようです。
PWM対応pinは3/5/6/9/10/11の6本です。何が違うのかというと基本周波数です。各PINをPWM設定してDUTY50%(127設定)で出力し、LabTOOLの入力してモニタしてみました。
- LIFAでもPWM6ch同時に実行することは可能だと云うことが判りました。
- PIN5/6はPIN3/9/10/11と比較すると約2倍の周波数のようです。ほぼ1KHz。
- https://www.arduino.cc/en/Reference/analogWrite に記載があります。
PIN5/6は980Hz、PIN3/9/10/11は490Hz。また、PIN5/6、PIN3/11、PIN9/10はそれぞれセットのようで同期が掛かっています。ちゃんと調べれば判ることでしたが、結果から調査し直さないと発見できないかもしれません。また、PWMですが周波数の変更方法が判りません。使い方次第でしょうが、疑似アナログ信号として使うには振幅しか変更できないという問題が出ます。
DCモータの速度制御で有れば250段階の調整が出来るのでOKですね。setPwmFrequency()を使うと基本周波数の変更が出来るようです。この機能はLIFAには用意されていないようです。
https://playground.arduino.cc/Code/PwmFrequency
の内容からすると、490HzというのはsetPwmFrequency(3, 64);が実行されていて(488≒31250/64)となっているのかと思われます。
クロック出力するにはどうしたらよいのかという疑問が出ました。パルスモータによる位置制御を行う場合、有限要素のパルス出力をしたいです。このとき速度はクロック周波数の設定になるかと思います。LIFAで実現する場合の手ほどきが見当たりません。
調査結果からすると TONE というEXAMPLEがこの回答になるようです。ただ、この機能は1chしか有効ではないようです。DIOpinはたくさんあるので複数指定して実行してみたのですが、エラーにはならないものの、最初のpin設定しか出力出来ません。また、周波数値も下限が31Hz程度、上限が66.7kHzのようです。周波数設定がU16のため上限がこの辺りになっているようです。下限は30Hzにすると期待通りにならないことから31Hz程度としています。
![]() |
![]() |
LabVIEW Interface for Arduinoでどこまで出来るのか、突き詰めてゆかないといけません。
一般に提供されているスケッチ(プログラム)をLabVIEW Interface for Arduinoで書き換えることが出来るのか、その辺りも確認する必要があります。ちょっと勘違いをしていたことが判りました。LabVIEW Interface for Arduinoで提供されているものは、LabVIEW Interface for Arduinoに含まれている事前にBUILDされたフォームウエアをArduinoにダウンロードして、USB-RSドライバを介して、Arduinoと通信するというものです。
LabVIEW Interface for Arduinoで提供されている範囲の機能を使用する範囲であれば、そのままコードを書いて通信しますが、決して作成したプログラムをArduinoにダウンロードして使うと云った代物では無いと云うことです。また、sparkfunでは『Arduino+LabVIEW Bundle』なる商品も存在した事が判りました。DEV-11225 LabVIEW2010がバンドルされたもので$55 日本では1万円程度だったようです。
『Programming Arduino With LabVIEW』なる書籍も確認しました。
『Arduino Compatible Compiler for LabVIEW』を見つけました。
https://sine.ni.com/nips/cds/view/p/lang/ja/nid/213121こちらは正しくクロスコンパイラ環境を提供しています。とても興味深いので別途レポートします。
I2Cデバイスも接続可能ですが、UNO R3 にはSDA、SCLの専用端子が用意されています。R2ではSDA(A4) SCL(A5)を割り当てています。
資料を見る限り、400KHzの通信に対応できるとあるのですが、ちょっと処理が追いつかないという書込も見られます。
UNOには互換機がたくさんあります。パターン丸写しで、価格が5分の1くらいの商品もあります。これら互換品でもLabVIEW Interface for Arduinoで動くのかどうか気になるところです。一つ購入して動かしてみました。
購入したのは Kuman UNO R3ボード です。ケース付きなのでどんなものかと思い購入しました。
で、結果ですが、普通に動くようです。ただし、ボード上のコネクタの半田付けが実に雑です。シールドを付けることが出来ないほど傾いて付けてあります。半田付けは手半田のようですので、ちゃんとジグを使って固定して手半田すればこんなことにはならないと思います。安価な理由は検品NG品だからかもしれません。余談2
ArduinoUno用のケースには幾つかのパターンがあるようです。
- アクリルケースで部品点数6点 M2のねじ(長)・ナット×4 M2のねじ(短)・ナット×4 プラスペース×4
材質の違いバージョンもあり。 パターン情報を元にレーザーカッターで作るだけなので互換品が多い。
レーザカッターによる表面焦げのある商品も多い。
加工精度についてはさほど問題になるようなことはない模様
![]()
- アクリルケースで6枚多層組み立てモデル プラスチックボルト・ナット×4
結構安価なモデルもあるので2ndソース品が多いのでしょう
![]()
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。