マルツTOP > APPLICATION LAB TOPページ おすすめ技術記事アーカイブス > Arduinoプロジェクトを開始する前に知っておくべき10のこと

Arduinoプロジェクトを開始する前に知っておくべき10のこと

Digi-Key's North American Editorsの提供
2017-01-12
マルツ掲載日:2018-09-10

人々がArduinoボードを使って何をしているのかを見てきて、楽しそうなので、自分でも試してみたくなりました。Arduinoボード、ジャンパワイヤ、電源、いくつかのLED、アクセサリ一式を注文しました。この記事では、Arduinoを確実に楽しめるように、時間の短縮とストレスの軽減に役立ついくつかのヒントをご紹介します。

このヒントを忘れさえしなければ、ストレスに耐えられずにプロジェクトを投げ出し、Arduinoを無駄にすることはなくなるはずです。

1:Arduinoは実験や学習には最適です

Arduinoは、専用の小さい作業を実行するのに最適です。Arduinoは煙感知器内部の回路を実験に使いやすくしたようなものです。これらのタイプのアプリケーションに使用されるマイクロコントローラで実行できる作業は、比較的限られています。Linuxの動作や大量の計算に必要な処理能力は、サーモスタットには必要ありません。OS上で動作するアプリケーションのコードを作成したい場合は、Raspberry PiBeagleBone Blackなどのシングルボードコンピュータの利用を検討してください。

また、モバイルやモノのインターネット(IoT)タイプの設計に集中したい方は、すべてのArduinoボードをポータブルで利用できますが、この用途には物理的サイズと消費電力が小さいいくつかのボードがより適しています。このようなプロジェクトには、AdafruitTrinketGemma、やArduino Miniが最適です。

2:スケッチを書いてみましょう

Arduinoボードのプログラミングでは、Arduino開発環境で「スケッチ」を作成し、Arduinoボードにアップロードする必要があります(図1)。 これらのスケッチはCで記述されるため、スケッチは同じ制御構造を使用します。今述べたことの意味がわからなくても大丈夫です。スケッチがCで記述されることは、開発者には好都合です。つまり、CまたはC++を知っていれば、慣れ親しんだ方法でスケッチを作成できます。逆に、スケッチの書き方を学ぶことで、Cの基本も学ぶことができます。いずれにしてもメリットがあります。


図1:Arduinoのプログラミングでは、スケッチをCで記述する必要があります。これはArduino開発環境のスクリーンキャプチャです。(出典:Digi-Key Electronics)

Arduino開発環境に関する注意: Arduino開発環境にはデバッガは含まれていません。EclipseまたはMPLABなどの開発環境に組み込まれたデバッガを使用してコードを修正していた場合は、多少工夫が必要になります。コードを1行挿入して何らかの文字を返したり、コードの特定のセクションに達したときにLEDを点灯させるなど、トラブルシューティングの基本的な手法を利用する必要があります。デバッガがないことが、問題解決スキルを養う面では良いことかもしれません。

3:有名なブランドのシールドやアクセサリを使いましょう

Arduinoを購入したのは、実現したいプロジェクトがあるから、あるいはエレクトロニクスについてより詳しく学びたいからでしょう。資料やサポートが不十分な場合、その実現は非常に困難です。トラブルシューティングツールではなく、習得する知識と概念の方に集中するべきです。

たしかにトラブルシューティングは、開発プロセスには避けられない重要な手順ですが、始めからハンディキャップを背負う必要はありません。

Sparkfun、Adafruit、およびSeeed Studioは、優れたシールド/アクセサリベンダーです。製品の優秀さだけでなく、広く使用されていることも、これらの各社の強みです。何かのトラブルが発生しても、ほかの開発者がすでに同じ問題を経験し、その解決策をフォーラムに投稿していることもあります。それを利用しましょう。

4:学習し上達してきたらあなたが行ったことをメモしておきましょう

同じプログラムを繰り返し実験する場合、このことは特に重要です。どのバージョンでどのような結果が得られ、それはなぜかを正確に覚えておくことは簡単ではありません。このようなリビジョンノートは不要とお考えの方も、きっと必要性を感じるはずです。プロジェクトが完成するまでの変更や繰り返しの回数は、2、3日の間に数百回にも達します。

筆者はCADの使用経験があり、DraftSightで回路図を作成しています。もう1つの選択肢として、Digi-KeyのScheme-it®があります(図2)。筆者は習慣的にDraftSightを使用していますが、Scheme-itのような専用ツールの方がはるかに優れているため、Scheme-itへの移行を始めています。

Scheme-itには、Digi-Keyの大規模なコンポーネントインベントリに直接リンクされているという利点があります。また、Scheme-itはメモをとるための多数のオプションを備えています。メモはメインシート上に置くことも、特定のコンポーネントに関連付けることもできます。Scheme-itはクラウドベースのツールであり、作成したデータばクラウドにバックアップされ、インターネット接続環境があればどこからでも利用できます。メモと図面は手書きで保存することもできますが、筆者はすべての関連情報を電子的に保存する方が好きです。


図2:Digi-KeyのScheme-itを使用して作成した簡単な回路図(出典:Digi-Key Electronics)

5:さあ、LEDの点滅を自分自身でやってみましょう

個々の手法と概念を習得することから始めましょう。まず最初に、Arduino IDEに含まれている「Blink」の例を使用してLEDを点滅させます。次に、出力に接続したLEDを点滅させます。次に、複数のLEDを同時に点滅させるスケッチを作成します。次に、ボタンを押したときにLEDを点滅させます。次に、ポテンショメータからのアナログ読み出しを実行してLEDの点滅速度を制御するスケッチを作成します。

最終的に実現されるプロジェクトが何であっても、小さなタスクに分けることが可能です。たとえば、ボタンを押す操作のデバウンス、LCDへの出力、温度センサの読み出し、LEDの点滅などの小さなジョブを組み合わせることにより、温度によって制御されるスイッチを作成できます。

学習したそれぞれの概念は1個のれんがのようなもので、プロジェクトはこれらのれんがで構成される壁です。

最後に、あなたがゆっくりと点滅するLEDに飽きる前に、お伝えしておきたいことがあります。筆者は10年以上にわたって電気技術者として活動してきましたが、どのようなボードやマイクロコントローラを扱う際にも、通常はまず最初に2、3個のLEDを点滅させています。これらのライトの点滅により、チップが少なくとも部分的には正常に初期化されたことと、ハードウェアの制御が働き始めたことがわかります。

6:クロック周波数の上限に注意しましょう

Arduino UNOの内部クロック周波数は16MHzです。これは1秒あたり1,600万クロックに相当します。一見高速に思われますが、次のことを考慮に入れる必要があります。スケッチ内のそれぞれの命令またはチェックが数クロックを使用します。多くのタスクをスケッチに実行させるほど、無限に余っているように思われたクロックサイクルはあっという間に使い果たされます。ユーザーがそれを認識する前に、Arduinoには入力信号または出力パルス信号の欠落が発生します。 Arduinoには、期待される処理をすべて実行するのに十分な時間がありません。

これは基本的なジョブでは通常は見られず、プロジェクトが大きくなるにつれて発生する問題です。クロック周波数の上限は、ステッピングモータを制御しようとしたり、サーボモータからのエンコーダフィードバックを処理しようとしたときに明らかになります。

クロックサイクルが不足しそうな場合は、クロック周波数48MHzのArduino Zeroへのグレードアップをお勧めします。

この問題に対処するもう1つの方法は、一部の処理をシールドにオフロードすることです。 Trinamic Motion Controlは、 この目的のために、素晴らしいステッピングモータ制御シールド (TOS-100 V1.1)を提供しています。

7:Arduinoライブラリの使い方を学習しましょう

必要なコードの大部分は、すでに作成され、利用可能な状態になっています。これにより、プロジェクト完成までの期間は大幅に短縮されます。すでにコードはできており、選ばれてスケッチに読み込まれるのを待っているのです。これらのコードの集合体は、ライブラリと呼ばれます。

ライブラリについて詳しく説明するには、この記事では時間と紙幅が足りません。ここでは、ライブラリの概念を理解するのに役立ちそうな喩えを1つ挙げておきます。ライブラリは、関連する一連の作業に使用できる道具箱のようなものです。必要なツールを含むツールボックスを、プロジェクトに含める必要があります。

たとえば、Arduino開発環境にはライブラリ「wire」が含まれています(図3)。wireは、I2Cシリアル通信用のツールで構成されるツールボックスです。wireツールは、I2C通信に関連するタスクの大部分を自動化します。このタスクを実行するコードを、すべて自分で記述することも可能です。それは学習目的ではたしかに価値がありますが、ライブラリを上手に利用できればその必要はありません。


図3:スケッチに含まれるwireライブラリ(出典:Digi-Key Electronics)

8:パラレル通信に注意してポートの基本を学習しましょう

パラレル通信とシリアル通信について学習します。Arduinoでは主にシリアル通信を使用します。UARTという略語の意味を調べます(これはマイクロコントローラ用のUSBに似ています)。SPI(シリアルペリフェラルインターフェース)とI2C(発音はeye-squared-see)について調べます。Atmelは、ほとんどのArduinoボードの中核となるチップを製造している企業であり、SPIおよびI2C通信に関する非常に有益なアプリケーションノートを提供しています。これから使用するセンサやその他のアクセサリの大部分は、SPIまたはI2Cシリアル接続を介してArduinoと通信します。これらの通信技術を学んでいれば、これらのアクセサリは非常に簡単に使用できます。

プロジェクトでは、パラレル通信を必要とするディスプレイなどのアクセサリに注意してください。パラレルCOMポートは、シリアルCOMポートよりも多くのピンを使用します。ご使用のArduinoボードが、パラレル通信に必要な数のピンを搭載していない場合があります。また、パラレル通信に必要な数のピンを搭載している場合でも、パラレルポートにピンを使いすぎて、ほかの用途にピンを使えなくなることがあります。パラレルで通信するLCDの制御を学ぶだけならかまいませんが、複数のデバイスを含むプロジェクトでは、パラレル通信デバイスを使用すると、I/Oの負担が過大になる可能性があります。

9:メモリ容量に上限があることを忘れないようにしましょう

Arduinoを使い始めたばかりのユーザーのほとんどは、UNOやTrinketなどの基本ボードを使って開発を始めます。最終的にはメモリが一杯になり、RAMの容量も不足します。メモリ容量に制約があることは、むしろ好都合です。これは不合理に思われるかもしれませんが、少し説明させてください。

プログラミングの初心者にも経験豊富なプログラマにも共通して見られる傾向として、コードが無秩序に膨張し、リソースを必要以上に占有しがちです。膨張したコードを引き締める方法は、ほぼ常にあります。目的は、できるだけコードをコンパクトにして、手持ちのリソースを最大限に活用することです。メモリ容量の制約に阻まれるまで、プログラマは開発をストップして対策を見つけ出そうとはしないものです。メモリ容量の上限に達すると、そこで何らかの工夫が必要になり、それまでの作業を再検討して改善方法を探す必要が出てきます。いきなり大容量メモリ搭載のボードに移行したのでは、このような経験を積む機会は得られません。

結局は大容量のRAMとメモリを搭載したボードを入手する必要があるかもしれませんが、急ぐ必要はありません。

入門編として小さなヒントを示します。RAMの容量不足が判明した場合は、次のコードを挿入して、RAMからではなくプログラムメモリから直接文字列を読み出すことができます。

Serial.println(F(“your text here”));

カッコに囲まれたFマクロで指定した文字列は、プログラムの起動時にRAMに読み込まれません。文字列は、必要に応じてフラッシュメモリから直接読み出されます。

10:一部のArduinoボードにはネイティブなUSB機能がないことに注意しましょう

一見すると意味がわからないかもしれません。Arduinoをプログラムするときは、ArduinoのUSBジャックをコンピュータのUSBポートに接続するはずです。そのとおりなのですが、一部のArduinoボードでは、非常に高度なソフトウェア機能がバックグラウンドで働いています。Adafruit、Trinketなどのボードにはブートローダーがプリインストールされており、マイクロコントローラがUSBデバイスのように動作してスケッチを読み込むことができます。これはその場しのぎのコーディングのすごい例です。

ほとんどのマイクロコントローラは、本来はUSB通信を処理しません。この問題の一般的な回避策は2つあり、Trinketはあまり一般的でない方法を採用しています。1つ目の一般的な回避策は、USB通信を処理する別個のチップをボード上に配置することです。このチップは、USB接続から入力されるデータを、メインマイクロコントローラのUARTが理解できる形式に変換します。もう1つの一般的な手法では、USBを介してマイクロコントローラと通信したいときにマイクロコントローラに挿入される別個のハードウェアを使用します。

このヒントで特にTrinketに言及しているのは、筆者らがかつて、LabVIEWを実行しているPCと実験用制御ボックスの間のインターフェース用にTrinketsを注文したことがあるからです。Trinketが届き、TrinketにはオンボードのUSB制御ハードウェアがないことがわかりました。

この問題を解決するのは簡単でした。筆者らはArduino UNOを注文したのです。Arduino UNOはUSB通信処理専用のオンボードATmegaチップを搭載しています。これは小さな問題でしたが、ハードウェアを注文する前にこのヒントを読んでいたとしたら、この問題は回避できたはずです。

Arduino上のUSBポートを使用してコンピュータ、カメラ、またはUSBドライブに接続する場合は、購入するボードが内蔵USBコントローラを搭載していることを確認してください。また、USBホストシールドを使用してUSB機能を追加することもできます。

結論

Arduinoは、初心者から技術者までのあらゆるユーザーに、電子システムのコーディングと実装を学べる優れた環境を提供します。Arduinoは楽しいと同時に有益であり、適切な事前情報と手法を活用することで、充実した学習プロセスが楽しめます。ただし、5番目のヒント「簡単なタスクに分けて考える」だけは忘れないでください。

 

このページのコンテンツはDigi-Key社より提供されています。
英文でのオリジナルのコンテンツはDigi-Keyサイトでご確認いただけます。
   


Digi-Key社全製品 1個からマルツで購入できます

マルツ経由なら送料全国一律240円〜450円
3,000円以上のお買い上げで送料無料
学校・法人のお客様、校費支払い、請求書後払い承ります

※製品カテゴリー総一覧はこちら



定期購入・量産をご検討のODM、OEM、EMSのお客様へ【価格交渉OK】

毎月一定額をご購入されるお客様、量産部品として検討されるお客様に向けては、マルツ特別価格にてDigi-Key社製品を供給します。
条件に応じてマルツオンライン表示価格よりもお安い価格をご提示できる場合がございます。
是非一度、マルツに見積もりをご用命くださいませ。


ページトップへ