14
microLIFA LabVIEW + AVR microcontroller & Arduino Koji Ohashi http://labview.exblog.jp 日本LabVIEWユーザー会 北東北支部作ろう会

microLIFA for LabVIEW & Arduino User

Embed Size (px)

DESCRIPTION

Prepared for NI Days 2014 in Japan

Citation preview

Page 1: microLIFA for LabVIEW & Arduino User

microLIFALabVIEW

+AVR microcontroller

&Arduino

Koji Ohashihttp://labview.exblog.jp日本LabVIEWユーザー会 北東北支部作ろう会

Page 2: microLIFA for LabVIEW & Arduino User

MicroLIFASubset of LIFA

LINX

LIFALabVIEW Interface For Arduino

LabVIEW INterfacefor X(chipKIT, Arduino and myRIO)

Page 3: microLIFA for LabVIEW & Arduino User

LIFA VIsとLIFA_Base

Page 4: microLIFA for LabVIEW & Arduino User

microLIFA

使わない機能を省いて、LIFAのエッセンスだけを残せばどんなArduinoでもIOとして使う事ができる

LIFAを使えばArduinoを安価なIOとして活用できる!!

デジタルIO(ピン/ポート), アナログIn(ピン/ポート), PWM(ピン/ポート), トーン, サーボモーター/ステッピングモーター, SPI, I2CとIR通信, LCD表示器など

Arduino UNOなどサポートされているボードを使っている限り豊富な機能はじゃまにはならないが、、、

Page 5: microLIFA for LabVIEW & Arduino User

LIFAのエッセンスはシリアル通信のフォーマット (LabVIEW side)Packetize.viがコマンドとパラメータを固定長の文字列にパケット化

Page 6: microLIFA for LabVIEW & Arduino User

LIFAのエッセンスはシリアル通信のフォーマット (Arduino side)

LabVIEWInterface.inoのprocessCommand(unsigned char command[])

switch文でおよそ50個のコマンドに対応

Page 7: microLIFA for LabVIEW & Arduino User

通信フォーマット

15byte(デフォルト)固定長1 2 3 4 5 6 7 8 9 10 11 12 13 14 15255 CMD Data Data Data Data Data Data Data Data Data Data Data Data CS

先頭は常に255、最後尾はチェックサム、2バイト目がSwitchの分岐で用いられる数値(コマンド)、3バイト目から14バイト目はコマンド付随するデータでデフォルトは0となっている。

例えばアナログ(PWM)出力で11pinから124で出力する場合は次のようなデータを送る1 2 3 4 5 6 7 8 9 10 11 12 13 14 15255 10 11 124 0 0 0 0 0 0 0 0 0 0 144

Page 8: microLIFA for LabVIEW & Arduino User

Arduinoでシリアルデータを受ける1 2 3 4 5 6 7 8 9 10 11 12 13 14 15255 10 11 124 0 0 0 0 0 0 0 0 0 0 144

int checkForCommand(void){ int buferBytes = Serial.available(); if(buferBytes >= COMMANDLENGTH) { for(int i=0; i<COMMANDLENGTH; i++) { currentCommand[i] = Serial.read(); } processCommand(currentCommand); return 1; } else { return 0; }}

但し、COMMANDLENGTHは15

void processCommand(unsigned char command[]){ // Determine Command if(command[0] == 0xFF && checksum_Test(command) == 0 ) { switch(command[1]) { case 0x00: // Sync Packet Serial.print("sync"); //digitalWrite(led, HIGH); Serial.fush(); break; : : case 0x0A: // PWM Write Pin analogWrite(command[2], command[3]); Serial.write('0'); break; : : } } else{ Serial.fush(); } }

Page 9: microLIFA for LabVIEW & Arduino User

microLIFA使わない機能を省いて、LIFAのエッセンスだけを残せばどんなArduinoでもIOとして使う事ができる

デジタルIO, アナログIn, PWM出力を残した見通しの良いスケッチはArduinoプログラムとの混在もストレスがない

LabVIEW側のLIFA VIsはボード種類のチェック機能を削除して、シリアルやTCPでデータを送る

Page 10: microLIFA for LabVIEW & Arduino User

USB接続版のmicroLIFA

•ATMega328P-PU(Arduinoブートローダ書き込み済み/内蔵CR発振8MHz版) •FT231X USBシリアル変換モジュール•RGB LED (LIFA制御)•LED(Arduino制御)•I2C LCD(Arduino制御)

Page 11: microLIFA for LabVIEW & Arduino User

USB接続版のmicroLIFA

•ボーレートは57600ボー、3.3V内蔵8MHzでは上限のようだ

Page 12: microLIFA for LabVIEW & Arduino User

XBee接続版のmicroLIFA

•ATMega328P-PU(Arduinoブートローダ書き込み済み/内蔵CR発振8MHz版) •XBee WiFi (S6B) + XBee用2.54mmピッチ変換基板•RGB LED (LIFA制御)•LED(Arduino制御)•I2C LCD(Arduino制御)

Page 13: microLIFA for LabVIEW & Arduino User

XBee接続版のmicroLIFA

•TCPを使用する点だけが異なるが、PCとつながれていないのがとても良い

Page 14: microLIFA for LabVIEW & Arduino User

microLIFALIFAのエッセンスだけを残してArduinoとLabVIEWの融合を楽しもう。

Koji Ohashihttp://labview.exblog.jp

日本LabVIEWユーザー会 北東北支部作ろう会