Emu(lator) + (Ar)duino

Arduinoエミュレータ


DTP (Desk Top Prototyping)環境の構築をめざして!!!
PPT (Pre prototyping tool)としてご利用ください。

本プログラムについて

本プログラムは,PC上でArduinoをエミュレートすることを目的に開発しました。
本格的にエミュレータを作るのであれば、atmelのAVRマイコンのCPUシミュレータを開発し、それに入出力部を拡張するなどの高度な実装が必要となります。 しかし、本プログラムでは、お手軽にProcessingを使ってArduino風に動いているように見せているだけです。 もともと,ArduinoのIDEは,Processingをベースにして開発されており,両者のプログラミングスタイルは非常によく似ています。
Processing は,setup()で初期化を行い,その後,draw()で描画を繰り返します。
Arduino は,setup()で初期化を行い,その後,loop()で制御を繰り返します。

Processing <==> Arduino
void setup() {
… ; // 初期化
}

void draw() {
… ; // 描画の繰り返し
}
void setup() {
… ; // 初期化
}

void loop() {
… ; // 制御の繰り返し
}

そこで,Emuduinoは,Processing内にloop()メソッドを作成し,それをdraw()内から呼び出しています。これがEmuduinoの実体です。

Emuduino
void setup() {
… ; // 初期化
}

void loop() {
… ; // 制御
}

void draw() {
loop(); // 描画と制御の繰り返し
}

そして,このloop()メソッドの中で,以下のようなjavaアプリケーションで作成したGUIパーツを,Processing 上に作成した入出力関数を通じてコントロールし,Arduino風の実行環境を実現しています。

もちろん、ProcessingArduinoは、根本的に異なるシステムなので、割り込みやタイマー動作などのハードに依存した機能までは真似出来ませんが、簡単な入出力やループ動作などの検証には使えると思います。
学校などで、組み込みの基礎を教える場合、ハードウェアとして人数分の教材を確保するのは困難ですが、Emuduino なら、PCだけで実習を行うことが可能です。

使用可能なGUIパーツ群

  • スイッチ
  • スピーカー
  • LED 赤,橙,黄,緑,シアン,青,マゼンタ,ピンク,白の9色
  • アナログスライダー(0 - 1023)入出力
  • アナログデータ再生ユニット
  • シリアルコンソール
  • 7セグLED
  • ニキシー管
  • 液晶表示装置 8文字x 2行, 16文字x 2行, 16文字x 8行, 20文字x 4行
  • 2種類のカラーLED
  • Led Matrix
  • Led Cube

実行画面 拡大

詳細については、リファレンスをごらんください。

開発の流れ

Emuduinoを使った開発の流れは、以下のようになります。
1. 開発環境を整え、emuduinoのライブラリをインストールする。
2. EmuduinoDesignerを用いて、必要なGUIパーツを選択し、その配置やパラメータを設定を行い、ベースとなるProcessingのソースコードを生成する。
3. 2.で生成したソースコードをProcessingに移し、必要なプログラミングを行う。
4. Processingで機能の実装が終わったら、ソースコードから必要部分をArduinoの統合開発環境にコピーしコンパイル後、実機Arduinoに転送して実行する。

ダウンロード

以下のリンク先から最新パッケージをダウンロードしてください。

download

使い方

準備

  • Emuduinoの実行には,Processingが必要です。
    Processingのサイトから,最新版の実行環境を入手してください。
    入手した圧縮ファイルを展開するだけで,実行環境の準備は終了です。

インストール

Windows環境

  1. 先ほどダウンロードした「実行用ライブラリとサンプルプログラム」の圧縮ファイル Emuduino20??????.zip をハードディスクの適切な領域に展開してください。

  2. 展開するとemuduinoというディレクトリが生成されます。
    このemuduinoディレクトリを processing.exe のあるディレクトリの下のmodes\java\libraries\に全てコピーしてください。

例 D:\processing-2.2.1-windows32\processing-2.2.1\modes\java\libraries\

modes/java/libraries/

|-- dxf
|-- emuduino   <---  これを追加コピーする。
|   |-- examples
|   |   |-- ActivityLimitation
|   |   |-- Blink
|   |   |-- Button
|   |   |-- Button2LED
|   |   |-- ButtonStateChange
|   |   |-- DataRepTest
|   |   |-- DroidTestAnalog
|   |   |-- DukeTestAnalog
|   |   |-- HeartBeat
|   |   |-- KnightRider
|   |   |-- LcdTest
|   |   |-- LedMatrix
|   |   |-- LedCube
|   |   |-- ReadAnalogVoltage
|   |   |-- SerialTest
|   |   |-- Slider2Buzzer
|   |   |-- toneKeyboard
|   |   |-- toneMelody
|   |   `-- TwentyFour
|   `-- library/
|       |-- data
|       |   |-- heartbeat1k.csv
|       |   `-- sin_cos.cs
|       |-- emuduino.jar
|       |-- export.txt
|       `-- template
|           |-- AnalogReadFunction.tmpl
|           |-- AnalogWriteFunction.tmpl
|           |-- DigitalReadFunction.tmpl
|           |-- DigitalWriteFunction.tmpl
|           |-- Disp7SEG.tmpl
|           |-- Header.tmpl
|           |-- initComponents.tmpl
|           |-- PinAllocation.tmpl
|           |-- SerialFunction.tmpl
|           |-- SetUp.tmpl
|           |-- SpeakerFunction.tmpl
|           `-- Variables.tmpl
|-- javascript
|-- minim
|-- net
|-- pdf
|-- serial
`-- video

Mac環境

MacへのEmuduinoライブラリの登録方法は,Processingのsketchフォルダ内のlibrariesにzipファイルを展開したものをコピーするだけです。

/Users/??????/Documents/Processing/libraries/Emuduino  

?????? は,ご使用中のユーザー名に置き換えてください。

動作報告

  • 船田戦闘機
    ver. 0.94をダウンロードし、MacOSX上のProcessing2.0b8で動作を確認
  • @aohsato 様
    MountainLion(10.8.2)+Processing(2.0b7)での動作を確認
    Processingのver1.5では起動出来ず。

サンプルの実行

  1. さきほど準備した実行環境の中にある processing.exe を実行してください。
  2. メニューの中のFile - Examples… Ctrl+Shift+Oをクリックしてください。
    別ウィンドウでサンプルの一覧が表示されます。
  3. このに表示されるtreeの中のLibraries以下にあるemuduinoの中にサンプルが収録されています。
    それぞれのタイトルをクリックするとサンプルソースが開きます。
	Libraries
	|-- emuduino
  1. 使用したいサンプルを開くと、新しいIDEが起動します。
  2. このIDEのメニューの中のSketch - Run Ctrl+R で実行します。
  3. サンプルの終了は,Emuduinoのタイトルが表示されているウィンドウの右端の[X]で終了します。

注意事項

これらのサンプルをベースにして,プログラムを作る場合,一度,自分の作業領域内に別名でコピーしてから作業を開始してください。
これらのサンプルプログラムは,ライブラリ中にread onlyファイルとして登録されているので,書き込みができません。

Emuduino入門

初めてEmuduinoを使用する方のために,そのベースとなるProcessingの操作方法と最も基本的なEmuduinoの起動方法までを以下にまとめました。

GettingStarted

チュートリアル

Emuduinoのプログラムに慣れていただく為に,チュートリアルを用意しました。
以下のチュートリアルをお読みください。

tutorial

サンプルリスト

以下のサンプルリストをお読みください。

samples

EmuduinoDesignerの使い方

EmuduinoDesignerは,emuduinoで使用するGUIパーツを選択して,パラメータと配置の設定を行い,ベースとなるProcessingのソースコードを生成するツールです。
詳しい使い方は,以下の解説をお読みください。

EmuduinoDesigner

デバイスと関数のリファレンス

以下のリファレンスをお読みください。

リファレンス

応用編

サンプルプログラムを参考にして,setup(); と loop(); 内に必要な機能を実装していきます。
emuduino上でひと通りの機能確認ができたら,ArduinoのIDEに,それらの内容をコピーしてください。
これをコンパイルして,Arduinoの実機にプログラムを転送すればそのまま実行出来るはずです。

練習問題

チュートリアルやサンプルを試して、Emuduinoの使い方を理解した方は、実力を試すために、以下の練習問題にチャレンジしてみてください。

練習問題

FAQ(frequently-asked question)

Q.何と読むのですか?

A.emuduinoは,__“えみゅでゅいーの”__ と読みます。
Emulator と Arduinoを合成して作った単語です。
Emu(lator) + (Ar)duino

Q.何故作ったのですか?

A.ArduinoやProcessingは,プログラムをしていて非常に楽しい環境です。その楽しさをたくさんの人に知ってもらいたいと思っていました。
でも、Arduinoをプログラムするには、機材やパーツを揃えたり、組み替えたりするのがチョット面倒です。
そこで、Processingの上で、いつでもどこでもチョイチョイとお気軽にarduinoのプログラムができたらいいなと思って作りました。
たくさんの人に使ってもらえれば嬉しいです。

「怠惰はプログラマの美徳」

Q.引っかかる人がいそうなネタですね。

A.そうです。前の質問では、世間受けする回答にしてみましたが、本当はネタが出発点です。
開発のスタートは,2012年の夏季休暇中にふとした思いつきで,ProcessingからJavaを呼び出すプログラムのテストを行いました。
この時は、digitalRead/digitalWriteのような動きをするところまでを作り上げたのですが,特に使い道や応用方法を思いつかなかったので,そのまま放置していました。
その後,年末のあるIT系勉強会後の懇親会で発表するネタが必要になりました。
そこで,前述のソースコードを引っ張りだして,Arduinoの画像上でLEDが点滅する「Lチカ」のデモをProcessingとJavaで作りました。これを懇親会で披露したところ、意外に良い感じでウケたので、調子にのってパーツや機能を追加して行きました。
気がついたら、__ご覧の有様__です。

Q.ボタンやLEDのサイズが大きすぎると思うんですが?
理由は2つあります。
1つ目は、これからは、タッチパネル式のコンピュータ環境が増えると考え、タッチパネルで扱いやすいGUIのサイズを想定して、全体をデザインしました。
2つ目は、出来上がった作品をプロジェクターを使ってデモをすることを想定し、見やすいように大きめのデザインにしました。

Q.再生される音質が本物と違うのですが?

A.arduinoで使われる一般的な圧電ブザーで再生されるのは,矩形波のチープな音質です。
しかし,emuduinoでは,44100Hzのsin波で,ハイクオリティな音を再生しています。
ただし,全てソフトウェアでOn,Offを制御しており,タイミングが保証されないので音の切れが悪い場合があります。

Q.analogWrite()がまだないみたいですが,,,,

A.analogWrite()については,開発の初期段階から実装していました。
ただ,出力すべきデバイスが無かったので,隠し機能にしていました。
そこで,Ver0.81より,analogWrite()の出力をSliderに反映させるように改良しました。

Q.xxxxの機能が欲しいのですが,,,,

A.基本的に,emuduinoは俺俺アプリ(俺様の俺様による俺様のためのアプリ)です。
気が向いたら,実装するかもしれません。(過大な仕様の要求はお断りします。)

Q.ソースコードを読むと,汚くてコメントも書かれていません。なんとかなりませんか?

A.なりません。
「ならぬものはならぬ。」ということで、足りない部分は、皆様の想像力で補ってください。

Q.どこまでエミュレートしてるのですか。使えるハードに制限があるからラフな実装なのでは?

A.お察しの通りです。
ソースコードを見ていただければわかると思いますが、中身は、Processing をJavaで少しだけ拡張しただけのチープな内容です。
arduinoらしく動けばいい。arduino風に見えればいい。というなんちゃって実装を開発ポリシーにしています。
また,省力化のために、極力安易な設計で、安直なコーディングを行い,お手軽な実装を心掛けました。
さらに,分相応を考えて,自分の持つ技術の範囲でプログラムしています。
これ以上の精度や高度な機能が必要な場合は,Arduinoを購入してください。

ToDo

  • サンプルプログラムを増やす。
  • EmuduinoDesignerに,生成したソースコードをファイルに保存する機能を追加する。
  • 出来上がったソースを独立したjavaアプリケーションとして実行できるようにする。

    Processingのメニューバーの「File - Export Application」あるいは、 「Ctrl+E」を実行すれば、独立したJavaアプリを生成できる。
  • ArduBlock のように,EmuduinoDesignerをProcessingのプラグインとして呼び出せるように改変する。
  • javaファイルから生成されたクラスをjarにまとめ,ライブラリとして使えるようにする。
  • 利用するGUIパーツやそのPINの割当てなどをconfigファイル等で設定できるようにする。 Emuduino Designer
  • Data reproducerの実装

改変履歴

  • 2012/08/12 ver. 0.01

    お盆の休暇中に、以前から思い抱いていたアイデアを形にすべくプログラムを開始。
  • 2012/12/15 ver. 0.4?

    忘年会議2012にて、初お披露目。機能を紹介する。
  • 2012/12/24 ver. 0.49

    基本的な機能が完成したので、公開を開始。
  • 2013/01/07 ver. 0.72

    javaのクラスをライブラリ化し、サンプルプログラムと一緒にprocessingに登録できるようにした。
    バージョン番号は、resources/Arduino.propertiesの中で管理する。
  • 2013/02/22 ver. 0.81

    GUIパーツのData reproducer(アナログデータの再生ツール)を追加する。
    GUIパーツのLCDを追加する。
    Slider に出力機能を追加する。
  • 2013/02/23 ver. 0.82

    EmuduinoDesignerの文字化けを修正
  • 2013/02/24 ver. 0.84

    GUIパーツの7SegLEDの機能を拡張し、縦と横の配列で配置可能にする。
  • 2013/02/28 ver. 0.87

    GUIパーツの7SegLEDをベースにして、新たに作成したニキシー管を追加する。
  • 2013/03/01 ver. 0.90

    ドキュメント類を整理する。 EmuduinoDesignerを正式公開する。
  • 2013/03/16 ver. 0.94

    LEDの発光色を追加し,赤,橙,黄,緑,シアン,青,マゼンタ,ピンク,白の9色にする。
    液晶表示装置を追加。8文字x 2行,16文字x 2行,16文字x 8行,20文字x 4行
    サンプルを追加
  • 2013/03/24 ver. 0.96

    Arduinoにlilypadとpro miniの2種類を追加。
    水平sliderを追加。
    サンプルを追加。
  • 2013/04/10 ver. 0.97

    チュートリアルを追加。
  • 2013/04/14 ver. 0.98

    EmuduinoDesignerにソースコードのコピーボタンを追加。
  • 2013/05/11 ver. 1.00

    LedMatrixを追加。
  • 2013/07/07 ver. 2.00

    いくつかのバグフィックスを施す。
  • 2013/08/10 ver. 3.00

    Led Cubeを追加。それに伴い関連サンプルを追加
  • 2014/07/06 ver. 5.00

    いくつかのバグフィックスを施す。
    Arduino の画像をDiecimilaから、Unoにアップグレード。