Arduino をシミュレート

「Arduino しようぜ!」の第2回です。(「Arduino しようぜ!」は大谷選手の「野球しようぜ!」へのオマージュです。)
最初は1つの記事にしたのですが、あまりに長すぎたので分割しました。
次回は「実機編」をお送りします。
(Arduino しようぜ!の第1回目は、以下をクリック)

Arduinoのシミュレータ

現在(2024年)、Arduinoのシミュレータで無料で利用できるソフトは、確認できたもので2種類ありました。
オンラインで使えるAUTODESK社の「Tinkercad」(旧 123d circuits)と、ダウンロードして使う「UnoArduSim」です。
どちらのソフトもパソコン上で配線をして、画面上のArduinoでプログラムを動かした結果を見ることが出来ます。
(動いたプログラムは、(基本的には)実機に持ってきて動かすことが出来ます。)

Tinkercad

Tinkercad」は、以前は「123d circuits」と呼ばれていたものです。
CADで有名な「AUTODESK社」のソフトです。
ブラウザでオンラインで動くので、ネット環境が必須です。
細かな導入方法は、次の項で紹介します。

UnoArduSim

UnoArduSim」は、カナダのオンタリオ州にある、クイーンズ大学工学科のシモンズ教授によって開発されました。
教授は、学生がハードウェアを購入しなくて済むように、このソフトを開発したそうです。(優しい!)
Arduino Uno と Mega をサポートしますが、一部の命令は現在のところ動きません。
(元々はロボットなどのメカ制御用に作成されているためです。)

画面構成は、左に「コード」部と「変数」部があり、プログラムをここに記載します。

右側が「ラボベンチ」部で、「Configure(設定)」オプションから色々な周辺機器を選んだり接続したりすることが出来ます。
また、オシロスコープのような波形表示も出来ます。

今回は「UnoArduSim」は使いませんが、気になる方はダウンロードして圧縮ファイルを解凍するだけで使用できるので、ぜひ試してみてください。(無料です。)

Tinkercadの導入

アカウントの作成

オンラインで動くソフトなので、まずは、「サインアップ」で登録が必要です。
「個人で使用する」の「パーソナルアカウントを作成」をクリックします。

「電子メールでサインアップ」を選びます。

アカウントを作成します。
「日本」は、一番下の方にあります。
誕生日を選択します。

電子メールとパスワードを設定したら、アカウントが作成されます。

「回路」の作成

設定したメールアドレスとパスワードでログインします。

Arduinoのシミュレータ以外に、3Dでデザインなどが出来るようです。
今回は、「回路」の「最初の回路設計を作成する」を選びます。

緑色の部分をマウスでクリックすると、こんな画面に移行します。

部品の配置

右側のタブの「基本」の下の検索窓に「Arduino」と入力すると「arduino uno r3」が選べるので、下の図を選択すると作業スペースにArduinoが追加されます。

こんなふうに、USBケーブルとともにArduinoが配置されます。
無料でパソコン上に、あなたのArduinoが入手できました!

マウス操作で移動や拡大ができるので、色々と触ってみましょう。

プログラムの確認

このままでは、ただの青い置物なので、初めての(?)プログラムを楽しみましょう。
右側の「コード」を押します。
何やら、青と黄色の派手な窓が開きます。もう一度「コード」を押すと窓が閉じます。

このままでも良いのですが、今後のことを考えて「ブロック」を押して「ブロック + 文字」を選択します。
右側に追加された英語の羅列が、実際のプログラムですが、今はまだ触ってはいけません。(見るだけで我慢してください。)

ここには、ありがたいことに何もしなくても、Arduinoの機能確認するためのプログラムが用意されています。(優しい世界)
ちなみに、Arduinoではプログラムのことを「スケッチ」と呼ぶので、今後はその名前を呼ぶことにします。

シミュレーションの開始

右上の「シミュレーションを開始」を押すと、スケッチが正常ならば(エラーやバグがないと言います。)緑色になって動作を開始します。

動画ではないので分かりづらいですが、シミュレーションが開始されると、ArduinoにUSBケーブルが接続されます。
スケッチが正しければ、すぐにArduinoの左上の黄色LEDが点滅します。

LCDへの文字の表示

本当は、OLEDというディスプレイへの表示をやりたかったのですが、このシミュレータでは対応していないようなので、同じ様に使えるI2CインターフェースのLCD(液晶ディスプレイ)への表示を行います。

部品の追加

すでに画面にはArduinoが配置されているので、ブレッドボードとLCDを配置します。
検索窓に「ブレッドボード」と入力して通常サイズの物(一番左)を選択します。

ちなみに、私は最初、英語で「breadboard」と入力したら、誰かが組立てた完成したものしかリストに出てきませんでした。
日本語(カタカナ)で「ブレッドボード」と入力すると空のボードが出てきます。

続いて、LCDを配置します。
「LCD」と入力すると3種類が選べます。

上2つは配線がたくさんあるタイプです。
一番下の「lcd 16 x 2 i2c」が使いたいLCDです。

全てを適当に画面に配置します。
好きに配置しても大丈夫ですが、回路図では左から右に処理が流れるので入力が左で出力は右のほうが見やすいでしょう。

配線のやり方

まず、配置した部品の端子にマウスのポインタを移動すると、端子の用途が表示されます。
Arduinoの左下の端子の5個目にマウスのポインタを移動すると「5V」と表示されます。
配線をするには、ここをクリックします。
マウスを動かすと(動かすだけです。クリックしてはいけません。)線が自由に伸び縮みします。

ブレッドボードの一番上の行が「GND」、2行目が「+電圧用」なので、Arduinoの「5V」とブレッドボードの「+電圧用」(2行目)をつなぎます。
緑の線でArduinoの5 Vとブレッドボードの+側がつながりました。

配線を間違ったときや、要らなくなって消したいときは、配線をマウスで選んでキーボードの削除(Delete)キーを押します。

配線の色

特に決まりはありませんが(電源の色以外)通常、色が付いた配線を用途で分けると分かりやすいです。
私は、ブレッドボード用の配線(ジャンパーワイヤ)の色が黒、赤、オレンジ、緑、黄、白、青、茶、グレー、紫なので、以下のようにしています。(世間と大きく異なっている場合は修正します。)

+5 V : 赤色
GND : 黒色
+3 V : オレンジ
SDA : 緑色
SCL : 黄色

先程の電源用の +5 Vは赤色にしたいので、画面上の緑の4角の部分をクリックして赤に変更します。

実際の配線

必要な配線は以下の4本だけです。
頑張ってつないでください。
色も自分の好みに変えておくと分かりやすいです。

ちなみに、配線の途中をダブルクリックすると点が追加されて、配線に90度の角を追加できるのできれいに線が並びます。
(きれいに並べなくても、機能には差はありません。)

Arduino側

端子ボード
+5V+電圧用
GNDGND用
A4SDA用
A5SCL用

LCD側

端子ボード
GNDGND用
VCC+電圧用
SDASDA用
SCLSCL用

スケッチの作成

本来スケッチは、Arduino IDEというArduino用に準備されているプログラムで作成するのですが、このシミュレータではビジュアルなプログラム環境が準備されているので、それを使ってみます。
LEDを点滅させたときと同じで、「コード」を押します。

真ん中の列が、作業用のスペースです。

スケッチの準備

オレンジ色の「開始時」と「永久に」以外を消去します。
具体的には、青い「ビルトイン~」の上でマウスを右クリックすると、「ブロックを消す」が選べるので、消去します。
続いて2個めの青い「ビルトイン~」と、オレンジの「1秒を待機」を2つ消します。
(もし、「開始時」と「永久に」を消してしまった場合は、「ブロック」の「コントロール」内にあるので、再度配置します。)

LCDの初期設定

続いて、LCDの初期設定をします。
オレンジの「開始時」のくびれた空白部分に、青い「出力」の中から「LCD1タイプをI2C・・・」を選んでマウスで配置します。

これは、スケッチを開始する時に、この形式のLCDを使うという設定です。
現物の名前とアドレス(I2C用の設定)を確認して合わせます。
LCDをクリックすると情報が表示されます。

タイプは「MCP2308」で、アドレスは「32」です。
スケッチに配置した、青い部分の記載を確認して、違っていればマウスで押して修正します。
(今回は、部品のタイプもアドレスも合っていたのでそのままです。)

LCD表示のスケッチ

「開始時」の設定は終わったので、実際の処理を記載します。

(日本語が変ですが)オレンジの「永久に」内に、LCDのどこに表示するかの指定をします。
「LCD1の位置を列0行0に設定」
これで、ディスプレイの1行目の最初に文字が表示されます。
ややこしいですが、「行0」は1行目を意味します。ここに「1」と入力すると2行目の意味になります。

次に実際の表示内容です。
青い「LCD1(hello world)に出力」(これも日本語が変ですが・・・)を選択して、先程の下に配置します。
全体では下のようにします。

ここまで出来たら、「シミュレーションを開始」を押すとスケッチが動き始めます。
LCDの表示内容の設定は「hello world」のままなので、LCDには以下のように表示されます。
ビジュアル・プログラムなら簡単ですね。

LCDへ名前の表示

次は最初の目標である「名前を表示する」をやってみよう!

ついでに、次の内容を追加します。
1 1行目に自分の名前を表示する。(アルファベット16文字以内で)
2 1秒待つ
3 2行目に、本日の年月日を表示する。
4 1秒待つ
5 画面を消す
6 繰り返す
色々やってみてください。

私は、「Yatte Miyoh!」と表示してみました。

実際のスケッチは、こんな感じになりますね。
LCDの表示位置と、LCDの表示内容の設定は、青い「出力」のグループにあります。
「1秒を待機」は、オレンジのコントロール内にあります。

上で説明したように、1行目に表示する設定は「行0」、2行目に表示する設定は「行1」が間違いやすいです。
あとは、文字内容を変えたり、文字を表示する開始位置(列0の部分)を変えたりしてみましょう。

エラーが出た場合は、組み合わせを確認します。

実際のスケッチ

画面右上のコードの部分が「コードと文字」になっていれば、右側の窓にこのような表示がされています。

同じタイプのLCDが準備できれば、このスケッチをArduino IDEに持っていけば、同じようにLCDに名前が表示できます。

文字で書かれたスケッチの内容の詳細は「実機編」でやりますが、現在は、左側の青やオレンジのブロックを足したり消したりして、この部分がどのように変わるか見ておきましょう。

コメント