Emu(lator) + (Ar)duino
Emuduino と Arduinoエミュレータ
Arduino | Processing | |||
---|---|---|---|---|
名前 | 値の範囲 | 名前 | 値の範囲 | |
boolean | 真trueか偽 false | 同等 | boolean | 真trueか偽 false |
char | -128 .. 127 | 相違あり | char | char is two bytes (16 bits) |
unsigned char | 0 .. 255 | 該当なし | ||
byte | 0 .. 255 | 該当なし | ||
int | -32768 .. 32767 | 相違あり | int | -2,147,483,648 .. 2,147,483,647 |
unsigned int | 0 .. 65535 | 該当なし | ||
word | 0 .. 65535 | 該当なし | ||
long | -2,147,483,648 .. 2,147,483,647 | 同等 | long | -2,147,483,648 .. 2,147,483,647 |
unsigned long | 0 .. 4294967295 | 該当なし | ||
float | -3.4028235E+38 .. 3.4028235E+38 | 同等 | float | -3.40282347E+38 .. 3.40282347E+38 |
double | -3.4028235E+38 .. 3.4028235E+38 | 同等 | double | -3.40282347E+38 .. 3.40282347E+38 |
該当なし | String | 日本語を含むあらゆる文字 |
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() {
… ;
}
そこで,以下のようなjavaアプリケーションで作成したGUIパーツを,Processing 上に作成した入出力関数を通じてコントロールし,Arduino風の実行環境を実現しています。
もちろん、ProcessingとArduinoは、根本的に異なるシステムなので、割り込みやタイマー動作などのハードに依存した機能までは真似出来ませんが、簡単な入出力やループ動作などの検証には使えると思います。
学校などで、組み込みの基礎を教える場合、ハードウェアとして人数分の教材を確保するのは困難ですが、Emuduino なら、PCだけで実習を行うことが可能です。
使用可能なGUIパーツ群
- スイッチ
- スピーカー
- LED 赤,橙,黄,緑,シアン,青,マゼンタ,ピンク,白の9色
- アナログスライダー(0 - 1023)入出力
- アナログデータ再生ユニット
- シリアルコンソール
- 7セグLED
- ニキシー管
- 液晶表示装置 8文字x 2行, 16文字x 2行, 16文字x 8行, 20文字x 4行
- 2種類のカラーLED
詳細については、リファレンスをごらんください。
開発の流れ
Emuduinoを使った開発の流れは、以下のようになります。
1. 開発環境を整え、emuduinoのライブラリをインストールする。
2. EmuduinoDesignerを用いて、必要なGUIパーツを選択し、その配置やパラメータを設定を行い、ベースとなるProcessingのソースコードを生成する。
3. 2.で生成したソースコードをProcessingに移し、必要なプログラミングを行う。
4. Processingで機能の実装が終わったら、ソースコードから必要部分をArduinoの統合開発環境にコピーしコンパイル後、実機Arduinoに転送して実行する。
ダウンロード
以下の圧縮ファイルをダウンロードしてください。
実行用ライブラリとサンプルプログラム
ソースコード
emuduinoのGUIは,Netbeansを使って開発しています。
emuduinoのGUIは,Netbeansを使って開発しています。(大事な事なので,2回書きました。)
Netbeansのプロジェクトをそのままの状態で圧縮ファイルにしたものを公開しているので,プログラムの拡張改変を試みる方は,Netbeansを使用することをお薦めします。
旧バージョン
Emuduino20130301.zip,EmuduinoSRC20130301.zip
Emuduino20130222.zip,EmuduinoSRC20130222.zip
Emuduino20130105.zip,EmuduinoSRC20130105.zip
Emuduino20121224.zip
使い方
準備
- Emuduinoの実行には,Processingが必要です。
Processingのサイトから,最新版の実行環境を入手してください。
入手した圧縮ファイルを展開するだけで,実行環境の準備は終了です。 - EmuduinoDesignerの実行には,jdkが必要です。
jdkのサイトから,最新版の実行環境を入手し、付属するドキュメントの手順に従って、インストールや設定を行なってください。
インストール
Windows環境
先ほどダウンロードした「実行用ライブラリとサンプルプログラム」の圧縮ファイル Emuduino20??????.zip をハードディスクの適切な領域に展開してください。
展開するとemuduinoというディレクトリが生成されます。
このemuduinoディレクトリを processing.exe のあるディレクトリの下のmodes\java\libraries\に全てコピーしてください。
例 D:\processing-2.0-windows32\processing-2.0\modes\java\libraries\
modes/java/libraries/ |-- dxf |-- emuduino <--- これを追加コピーする。 | |-- examples | | |-- ActivityLimitation | | |-- Blink | | |-- Button | | |-- Button2LED | | |-- ButtonStateChange | | |-- DataRepTest | | |-- DroidTestAnalog | | |-- DukeTestAnalog | | |-- HeartBeat | | |-- KnightRider | | |-- LcdTest | | |-- 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では起動出来ず。
サンプルの実行
- さきほど準備した実行環境の中にある processing.exe を実行してください。
- メニューの中のFile - Examples… Ctrl+Shift+Oをクリックしてください。
別ウィンドウでサンプルの一覧が表示されます。 - このに表示されるtreeの中のLibraries以下にあるemuduinoの中にサンプルが収録されています。
それぞれのタイトルをクリックするとサンプルソースが開きます。
Libraries |-- emuduino
- メニューの中のSketch - Run Ctrl+R で実行します。
- サンプルの終了は,Arduino と Emuduinoのタイトルが表示されているウィンドウの右端の[X]で終了します。
注意事項
これらのサンプルをベースにして,プログラムを作る場合,一度,自分の作業領域内に別名でコピーしてから作業を開始してください。
これらのサンプルプログラムは,ライブラリ中にread onlyファイルとして登録されているので,書き込みができません。
サンプルリスト
以下のサンプルリストをお読みください。
EmuduinoDesignerの使い方
EmuduinoDesignerは,emuduinoで使用するGUIパーツを選択して,パラメータと配置の設定を行い,ベースとなるProcessingのソースコードを生成するツールです。
詳しい使い方は,以下の解説をお読みください。
デバイスと関数のリファレンス
以下のリファレンスをお読みください。
応用編
サンプルプログラムを参考にして,setup(); と loop(); 内に必要な機能を実装していきます。
emuduino上でひと通りの機能確認ができたら,ArduinoのIDEに,それらの内容をコピーしてください。
これをコンパイルして,Arduinoの実機にプログラムを転送すればそのまま実行出来るはずです。
宿題
Emuduinoを使って,以下のアプリを作成せよ!
サイコロ
- SwitchとLedを使って,サイコロを作れ!
- Switchを一回押すと,1-6までのサイコロの目をランダムに表示する。表示間隔は,0.5秒
- Switchをもう一回押すと,表示を停止して,数字を表示。
- 2と3を繰り替えす。
- Ledだけで、サイコロの目を表現するのが難しい場合は、7segLEDを1個だけ使って表示してもよい。
スロット
- 3つのSwitchと3つの7SegLEDを使って,スロットを作れ!
- 何れかのSwitchが押されたら,スタート。7SegLEDに0-9の数字をランダムに表示する。
- 3つのスイッチが1づつ押される毎に,7SegLEDの表示を停止する。停止時は,ピッという音を鳴らす。
- 表示が777に揃ったら,ファンファーレの音楽を鳴らす。それ以外の場合は,低音の音を1秒鳴らす。
- 2に戻り,キー入力があるまで待つ。
キッチンタイマー
以下の仕様書を満たすキッチンタイマーを作成せよ!
- オルゴール
以下の音階表を参考にして,オルゴールを作成せよ!
スクロールクロック
年月日と時分を表す“2012 12 23 12 34” のような数列を8つの7segLEDに右から左に流れるようにスクロールさせて表示せよ。
1分毎に時刻を更新せよ。AM/FMラジオの表示部
AM/FMラジオの表示部を作成せよ。
周波数を4つの7segLEDを使って表示せよ。
AM/FMの切り替え、音量の大小は、液晶部に表示せよ。- スイッチの割当て
1.Switch2 AM/FM表示の切替え
2.Switch3 周波数アップ
3.Switch4 周波数ダウン
4.Switch5 音量アップ
5.Switch6 音量ダウン
- 液晶部
- 16文字X2行液晶を使用
- 上段:AM/FMのモード表示
- ボリュームをバーグラフで表示
- 周波数範囲
- AM 531-1602KHz 9KHzステップ
- FM 76.0-108.0MHz 0.1MHzステップ
- 音量範囲 0-63
- スイッチの割当て
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アプリケーションとして実行できるようにする。
- ArduBlock のように,EmuduinoDesignerをProcessingのプラグインとして呼び出せるように改変する。
javaファイルから生成されたクラスをjarにまとめ,ライブラリとして使えるようにする。利用するGUIパーツやそのPINの割当てなどをconfigファイル等で設定できるようにする。Emuduino DesignerData 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種類を追加。 サンプルを追加
参考文献 & その他