開発環境の進化はプログラミングを簡単にする

高校生モノづくりコンテスト電子回路部門は、課題プログラムに使うCPUボード、プログラミング言語と開発環境を自由に選ぶことが出来ます。

組み込み用CPUの性能と開発環境は、十年二昔の勢いで進歩していて、どのCPUや開発環境を選ぶかがコンテストの成績に大きく影響します。
野球では金属と木のバットで飛距離が違い、高校野球で使える金属バットがプロ野球で使えなかったりしますが、ものづくりコンテストのプログラムで使う開発環境の影響はそれより桁違いに大きいものです。

ですから、モノづくりコンテストにチャレンジするにあたって、開発環境として何を選ぶかが重要になります。

開発環境の進化がもたらすもの

開発環境の進化がもたらすものはプログラミングの効率化です。
開発環境が一世代進化するごとに、少ないプログラムサイズで楽に高度な処理が書けるようになってきました。

例えば、高校生モノづくりコンテスト全国大会の課題は、トップクラスのプログラミング能力を持つ生徒が、平均的な開発環境を使って、制限時間内に解くのが難しいレベルに設定される傾向があります。
課題を解くにはプログラムを書く能力だけではなく、課題を解くアルゴリズムを考える能力も必要ですが、平均的な開発環境の半分の時間でプログラムが書ける開発環境を使うのと、平均の倍の時間がかかる旧世代の開発環境を使うのでは大きな差があります。

CPU初期化プログラムの効率化

最近の組み込み用CPUは高度な周辺機能を内蔵して、高性能になった反面、周辺機能を初期化するために複雑なレジスタ設定が必要になっています。
そして、わかりにくいデータシートを見ながら、数多いCPUと接続するハードウェアに合わせて、ひとつの間違いも無くレジスタに設定する値を調整するまではCPUは正常に動作しません。
これが、組み込みプログラムが難しいと思われる理由のひとつになっていて、Arduinoはこの部分を徹底的に標準化することで、誰でも簡単に組み込みプログラムが始められるようにすることに成功しました。

CPUの性能を最大限に発揮する必要がある本格的な組み込みプログラムの分野では、標準化による初期化プログラムの簡略化という手法を取ることは出来ませんでしたが、最近になっていくつかの組み込みCPUメーカーから「GUI画面で周辺機能パラメータを設定し、自動的に初期化プログラムを生成する。」という手法を使った開発環境が提供されて、実用的レベルになってきました。

MPLAB-Xに内蔵されたMCCがそのひとつで、MCCを使えばデータシートを見なくても簡単に初期化プログラムが完成します。
簡単とはいっても周辺機能に関する知識は必要ですが、周辺機能とレジスタの対応を考えなくても初期化が出来るようになったのは非常に大きな進歩と言えます。

Arduinoのタイマー割り込み

本格的な組み込みプログラムではタイマー割り込みが必須になります。

Arduinoは割り込みをサポートしていて、ピンの信号変化で割り込み関数を呼び出すことが出来ますが、タイマー割り込みの扱いはどうなっているのか、

Arduino(1.8.9)でタイマー割り込みについて調べてみました。

Arduinoではタイマー割り込みの使用は非推奨

Arduinoユーザーにも、一定時間ごとに割り込み関数を呼び出すタイマー割り込みを使いたいと思う人はいて、Webを検索するとタイマー割り込み関連の記事が見つかりますが、古い情報が多いようです。
高校生ものづくりコンテストのQandAにも割り込み関連の質問がありました。

【質問内容】
Arduinoの使用している。TimerOne.hというヘッダファイルは
公式に認められているか?
【 回 答 】
持ち込みヘッダファイルについてはあくまでもレジスタ・ポート端子の定義、割込み(禁止・許
可)の定義について許可をします。
TimerOne.h、MsTimer2.h等については認めません。

第19回高校生ものづくりコンテスト全国大会(近畿大会)課題の質問・回答

タイマー割り込みをサポートするヘッダファイルTimerOne.h、 MsTimer2.hは今のArduinoでは廃止となっていて、タイマー割り込みの使用は非推奨になっているようです。

高校生ものづくりコンテストに持ち込み可能なヘッダファイル

高校生ものづくりコンテストのルールでは、次のように簡単なヘッダファイルの持ち込みは認められています。

(b)ヘッダファイル mono_con.h(制御用マイコンのレジスタ,ポート定義,割込み定義
を含む ヘッダファイル) の出力リスト(使用しない場合は提出しなくても良い)

しかし、TimerOne.h等にはレジスタ、ポート定義、割り込み定義以外の情報が含まれていると判断されたのでしょう。

ただ、開発環境として使用を認められているArduino IDEにはもっと複雑な情報を含むヘッダファイルが多く入っていますし、TimerOne.hが入っていた古いバージョンを使えばOKということになります。

MPLAB-Xを使えば、MCCで定義すると自動的に割り込み関連の関数やヘッダーが生成されます。
それを考えるとArduinoのTimerOne.hを認めないのは不公平に思えますが、決められたルールで運用する以上、やむを得ないことなのでしょう。

マイコンカーラリーのように、特定メーカーの特定CPUボードしか認めないことにすれば、厳密に公平な運用が可能となりますが、特定メーカーへの利益供与につながりますし、CPUと開発環境の革新が著しいこの分野でツールを固定することは役に立たないプログラミング教育に繋がります。

Arduino IDE vs MPLAB-X

マイコン制御プログラムの普及に大活躍したArduino IDE

Arduinoは元AtmelのCPUであるAVRを使って、Arduino IDEで数行のスケッチ(プログラム)を書けば、USBケーブルで接続したArduinoボードにプログラムを書き込んで動作するようにした、入門用マイコンです。

マイクロソフトを創業したビルゲイツは、最初に作ったパソコン用のBASICの大ヒットで成功への足がかりを作りました。

初期のPCでは複雑な準備をして、コンパイルに長い時間をかけないと動作するプログラムが作れませんでした。
「数行のプログラムを書けばプログラムが走り、結果が表示される。」ことが
BASICが大ヒットした理由ですが、Arduinoの大ヒットも「歴史は繰り返す」を見ているような気がします。

小学校プログラミング教育の教材としても最適なArduino

Arduinoはとにかく簡単にマイコン制御の勉強を始めることが出来るため、初心者向け入門用として優れているシステムです。
マイコンに関する予備知識が無い 小中学生でも、マイコンボードを使った制御プログラムを作って、動作を試してみることが出来ます。
文科省が推進している小学校プログラミング教育の教材としても、大いに活躍すると思います。

制御用マイコンとしてのArduinoの限界

Arduinoはマイコン入門用の教材として優れた特徴を備えていますし、数多くの拡張ボードが安価に提供されているため、Arduinoの機能が仕様を満たしているならば、Arduinoを使ってシステムを組むのは、開発効率においてもコスト面においても有利なので、検討する価値があります。

ただし、手軽に使えることを優先したBASICが開発のプロからは歓迎されなかったように、使い易さと性能にはトレードオフの関係があるため、Arduinoで高性能なシステムを組もうとすればMPLAB-Xを使うより多くの労力が必要となる分岐点があります。

Webを検索すると、Arduinoに使われているAVRCPUの性能を限界まで引き出すために、AVRのデータシートを調べて周辺機能レジスタを直接書き換えるなど、苦労している人が見つかります。

デジモノ覚書-Arduino Uno – PWM周波数を”自由に”変更する

万事、塞翁が馬- mega のタイマー割込みについて調べる

周辺機能レジスタを直接いじってAVRの性能を引き出すことが出来る能力と時間があれば、MPLAB-XとPICやSTMCubeMXとstm32マイコンの組み合わせを使えば、はるかに高度な制御をおこなうシステムを簡単に作れるのに、勿体ないと思ったりします。

高校生全国ものづくりコンテスト電子回路部門の課題を解くのが、ちょうどArduinoの限界点だと思います。
つまり、工夫してArduinoの割り込みを使いこなせるレベルの能力があれば、MPLAB-XとPICマイコンの使い方を覚えた方が幸せになれるのではないか、といったところでしょうか。

企業人から見れば、工業高校生レベルなら、Arduinoを卒業して、MPLAB-XでCPUの周辺機能レジスタを設定する技術を身につけて欲しい、という勝手な要望もあったりします。

それでもArduinoが使い易い理由

高度な制御になると加速度的に扱いが難しくなるArduinoですが、それでもArduinoを使いたい理由は、CPUボードと周辺ボードの豊富さと入手しやすさにあるのではないでしょうか。

例えばAmazonで検索すると、Arduino用超音波センサモジュールが、ひとつあたり200円以下で見つかります。

また、アリエクスプレスのサイトでArduinoをキーワードにして検索すると、100均レベルの価格で多数のパーツを見つける事が出来ます。

個人でPCB基板を設計製作することが難しかった少し前までは、既製のボードを買って組み合わせるしか手段が無かったため、とにかくArduinoでシステムを組むのが制御システム製作の近道でした。

今は個人が自由にPCB基板を作れる時代

ところが、PCB基板作りの環境はこの10年で大きく変わりました。

ひとつは、高機能なオープンソースのKiCadを使って個人で基板の設計が出来るようになったことで、もうひとつは格安基板メーカーの出現で1,000円以下で100㎜x100㎜の基板10枚を注文できるようになったことです。

個人が最初にPCB基板を設計して発注するには多少のハードルがあるのは事実です。
ただ、そのハードルは思ったほど高いものではありません。
上で紹介したように、Arduinoの限界を引き出すためにAVRのデータシートを読み込んで、試行錯誤に時間をかけてプログラムを作っている人ならば、簡単に乗り越えることの出来るハードルです。

マイCPUボードを使ってロボットコンテストに取り組んでみませんか

Arduino用周辺ボードはPICでも使えますから、目的にあったCPUボードを自作してセンサーはArduino用センサーボードを使うことで、高機能なシステムを安く製作することが出来ます。

ものづくりの楽しみは、何かを作り上げた時の達成感です。
購入したArduinoだけで制御システムを組み上げるより、自分で設計して作った
CPUボードでシステムを製作した方が、はるかに大きな達成感と喜びを感じられることを保証します。

マイコン制御に興味がある人には、是非、CPUボードの製作まで手掛けて頂きたいと思います。