平成 28 年度 (第 67 回) 電気・情報関連学会中国支部連合大会

Scilab による Arduino の制御
花本和也 ∗ ，木下 健人，大野(広島大学)

修一

Control of Arduino by Scilab
Kazuya Hanamoto, Kento Kinoshita and Shuichi Ohno (hiroshima University)

1 はじめに
近年，制御教育や電子工作において，Arduino と呼ばれるワンボードマイコンボードを用いることが主流となっている．Arduino は初心者でも簡単に取り組むことができる．さらに MATLAB® と呼ばれる数値解析ソフトウェアと Arduino を連携させて，複雑な演算も簡単にできるようになっており，MATLAB はスクリプト言語として実装されているため，低水準の操作を意識する必要がなく，人間にとってわかりやすい言語となっている．しかし，MATLABは有料であるためソフトの購入が必要である．そこで，本稿では，フリーソフトの中でも MATLAB によく似た Scilab

図1

ディジタル入出力の回路図と呼ばれる数値解析ソフトウェアを利用して Arduino の制御を行う方法を紹介する．

Scilab による Arduino の制御方法

2

Scilab に は Arduino を 制 御 す る た め の ツ ー ル ボ ッ ク ス
arduino_toolbox [1] が公開されており，以下の手順で利用できる．

図 2 LED を点灯させるプログラム

1. arduino_toolbox をダウンロードして回答し，Scilab のイ ン ス ト ー ル フ ォ ル ダ 中 の contrib フ ォ ル ダ に 移 動する．

2. ツールボックスに含まれる toolbox_arduino_v3.ino というファイルを Arduino software によって書き込む．
上記の手順により，コマンドライン上で arduino 用の関数を使用することができる．
図 3 タスクスイッチによる LED の点灯のプログラム

3 ディジタル入出力
ディジタル入出力の利用例を 2 つ紹介する．Arduino 上の回路図は図 1 に示す．
3.1

LED の点滅

ディジタル出力の例として，LED を点滅させるプログラ
ムを図 2 に示す． このプログラムの意味を上から順に解説する．1 行目は Arduino を接続したシリアルポートの初期設定を行うための文で，この関数に与えられるパラメータは左から順に，ボード番号，Arduino が接続された COM ポー
ト 番 号 ，シ リ ア ル 通 信 の 通 信 速 度 [baud] で あ る ．こ れ は

Scilab で Arduino を動かす際に必須の文である．2 行目からはプログラム本体で，LED を点滅させる動作を while ループと呼ばれる繰り返し構造で実現している．ここで，while
文の条件式の中に cmd_digital_in() という Scilab の Arduino

用 toolbox に含まれる関数があるが，これは Arduino のピン番号を指定してそのピンへのディジタル入力を読み込む関数である．Arduino の 2 番ピンにはタスクスイッチを接続しており，この条件式の意味はタスクスイッチが押されるまで while ループを繰り返すことである．while ループの中に cmd_digital_out() という関数があるが，これは 2 行目と同様 Scilab の Arduino 用 toolbox にある関数で，指定したピンへディジタル値 0 または 1 を送ることがで きる．LEDは 13 番ピンに接続されているため，while ループの中身は1 秒おきに LED を点滅させるというプログラムになっている．最後の行に close_serial(1) とあるがこれは Arduino と接続されたシリアルポート間の通信を切断するための文で1 行目同様必須の文である．

平成 28 年度 (第 67 回) 電気・情報関連学会中国支部連合大会
目 で シ リ ア ル ポ ー ト の 初 期 設 定 を 行 う ．2 行 目 と 3 行 目に lightness, hoge，という変数を宣言しており，lightness はLED の 明 る さ の 度 合 い を 決 め る 値 が 入 り ，ま た hoge はlightness の値を順繰りに変化させるために 1 または-1 の値が入る．4 行目からは while ループを行う．while ループの
中身は if 文を使って lightness の値が 0，つまり LED の明るさが最小のとき変数 hoge に 1 を代入し，lightness の値が255，つまり LED の明るさが最大のとき変数 hoge に-1 を代入する．その後 Scilab の Arduino 用 toolbox にある，指定したピンへ 0〜255 までのディジタル値を 0〜5 までのアナログ値として出力する関数 cmd_analog_out() を使用して，lightness の値を LED に出力し，lightness の値をインクリメ
図4

アナログ入出力の回路図

ントあるいはデクリメントするプログラムになっている．
ここで注意するのは Arduino は PWM という信号方式を用いて擬似的なアナログ信号を出力として生成しており，その PWM 信号の発生させるのに 8bit のタイマを使用するため，分解能 8bit の 0〜255 までの合計 256 段階で入力する必要がある．最後の行で通信を切断する．
4.2 可変抵抗を用いたＬＥＤの明るさの調整

ア ナ ロ グ 入 力 の 例 と し て ，可 変 抵 抗 の 抵 抗 値 を 変 化 させることにより LED の明るさを調整するプログラムを図6 に示す．このプログラムの意味を上から順に解説する．
図 5 LED を点灯させるプログラム

まず 1 行目でシリアルポートの初期設定を行う．2 行目からは while ループを行う．while ループの中身で Scilab のArduino 用 toolbox にある，指定し たピンへのア ナログ 信号を読み込む関数 cmd_analog_in() を用いて 0 番ピンに接続されている可変抵抗にかかっている 0〜5[V] の電圧を 0〜1023 のディジタル値に変換し，その値を変数 llightness
図 6 ＬＥＤの明るさを調整するプログラムに 代 入 す る ．こ こ で 注 意 す る の は Arduino に あ る A/D コンバータは分解能 10bit であり，0〜1023 までの合計 1024段階で表現される．その後，lightness の値がとりうる範囲

3.2

タスクスイッチによる LED の点灯は 0〜1023 であるため，0〜255 までの範囲に変換した値をディジタル入力の例として，タクトスイッチを押していLED に接続されている 9 番ピンに入力し，その値に応じたる間 LED を点灯させるプログラムを 3 に示す．このプロ

0〜5[V] の電圧を出力する．最後の行で通信を切断する．

グラムの意味を上から順に解説する．まず 1 行目でシリアルポートの初期設定を行う．2 行目からはプログラム本体の内容であり while ループを行う．while ループの中身は if
文を使って 3 番ピンへのデジタル入力が 1 ならば LED を点灯，そうでないならば LED を消灯するというプログラムになっている．最後の行で通信を切断する．

5 おわりに本稿では，Arduino をフリーソフトである Scilab を使用して，Scilab のコマンドライン上で Arduino を制御する方法とその利用例について報告した．本稿の目的は Scilab でも Arduino を制御することができるというところに焦点を置いていたため，誰でも理解できるように簡単な利用例を

4 アナログ入出力
アナログ入出力の利用例を 2 つ紹介する．Arduino 上の回路図は図 4 に示す．
4.1

LED の点滅

アナログ出力の例として，LED を点滅させるプログラ
ムを図 5 に示す．ここでの点滅というのは，LED がだんだん明るくなりだんだん暗くなることの点滅を意味する．
このプログラムの意味を上から順に解説する．まず 1 行

紹介 したが，こ れらを応用すればモータの回転数 やヒ ー
ターの温度調整等，複雑な制御も実現可能である．

謝辞
本研究は JSPS 科研費 JP16H02921 の助成を受けたものです．

参考文献[1] https://www.scilab.org/