この記事では、「IoT」という言葉には少し関心があるけど、ハードウェアを作るなんてハードルが高そう…と感じていらっしゃる方々(特にWebデザイナー/エンジニア)に向けて、低価格で簡単にハードウェア制御を学べる「Arduino」(アルデュイーノ)という電子工作キットの使い方をお伝えします。
電子工作でできること
ではそもそも「電子工作」とは何でしょうか?
インターネットで検索すると「電子部品を使った工作のこと」、「様々な部品で電子回路を作ること」などとでてきます。でも、「電子部品って何?」「電子回路?」と疑問が増えていきます。Wikipediaで電子部品の項目を見てみると「電子部品とは、電気製品に使用される部品のことである」と書いてあり、難しそうな部品の名前が書かれています。
はじめから詳細に踏み込むと難しそうなので、まずは、電子部品を使うとどのようなことが実現できるかを、具体例で見てみましょう。
センサーライトなどの機能の例
自分でスイッチのON/OFFを行わなくても、人の出入りに合わせて点灯/消灯するライトがあります。ライトが必要なときのみにONになり、省エネにも効果的です。
この仕組みを実現するためには「センサーで人が近づいたことを検知する」、「ライトのON/OFFを制御する」という機能が必要です。この「人を検知するセンサー部品」や「ライトを制御するプログラムを処理する」といった部分が、電子部品を組み合わせることによって実現されています。
他に、「部屋の温度を自動的に設定温度どおりに維持する」というエアコンの機能を考えてみましょう。センサーライトの例のセンサーや制御の部分が、「センサーで温度を測る」、「エアコンの冷風/温風の温度を制御する」と置き換わると実現できそうです。
Arduinoでできること
先ほどの例と似たようなことを、一から自分で試してみようとすると大変です。センサーなどの部品をつなげるだけでなく、「センサーで検知した内容に合わせて、何か制御を行う」という、プログラムを処理する部分や、プログラムを書き込む方法の用意などノウハウが必要です。
このように気軽には試せなかった「電子部品を使った工作」を、より身近にしてくれるものが「Arduino」です。Arduino には「センサーなどの部品をつなげる部分」や、「プログラムを開発し、部品へ書き込むための開発用ソフトウェア」などが用意されています。PCとArduino、そして、ちょっとした部品があれば電子工作を試すことができ、工作を始める際の敷居が大幅に下がります。
ところで、Arduinoを使うとどんなものを作ることができるのか、工作例を見てみましょう。
- Arduinoの工作例(Youtube・Vimeo の動画へのリンク)
これらは、先ほどの例にあった「センサーによる検知、検知した内容にあわせた制御」を、Arduinoと部品を使って実現しています。Arduinoでは、例えば下記のような機能を実現できます。
- 光や温度、音、物との距離など周囲の状態を知る
- 光や音をだす、モーターなどの部品や他の機械を動かす、他の機械に情報を送る
最初の一歩:Lチカ
部品を組み合わせるといろいろなことができるArduinoですが、まずは基本的な内容を試すことにしましょう。Arduinoを試す最初の一歩に「Lチカ(LEDを点滅させるプログラム)」があります。この Lチカに必要な部品、部品のつなぎ方、LEDの制御方法などを説明していきます。
手軽に部品を揃える
Lチカに必要な部品がいくつかありますが、自分で個別に揃えるのは大変です。部品の種類が複数あり「どれを組み合わせれば良いかが分からない」ということがおこりえます。 そのため、最初は、基本的な部品がセットになった「キット」を利用することをオススメします。インターネットで「Arduino キット」とキーワード検索するといくつかでてきますが、4000円程度のものを一例として挙げておきます。
- キットの例(2015年1月現在)
- Arduinoエントリーキット(⇒テックシェアの販売ページ)
- Arduinoをはじめようキット(⇒スイッチサイエンスの販売ページ)
※ Amazon.co.jpでも購入が可能です
また、キットには説明書が付属されていないため、部品のつなぎ方は自分で調べる必要があります。インターネットで調べてもよいですが、調べるのが大変という方は書籍を購入することで手間を省けます。前述の2つのキットに関しては、販売ページの商品説明に、オススメの書籍の例がそれぞれ記載されています。
Lチカのための部品
部品をつないでみる前に、Lチカでに必要になるもの一式を紹介します。各部品の説明は後述していきます。
Arduinoボードはいくつか種類がありますが、この記事では、前述のキットでも同梱されている「Arduino Uno R3」を利用します。 抵抗もいくつか種類がありますが、今回は利用するLEDに合わせて330Ω(オーム)のものを使います。抵抗の種類については、後で補足します。 なお、キットを購入すると、よく利用する複数の種類の抵抗が付属されています。そして、キットに対応する書籍を購入していると、組み合わせるべき部品と抵抗の種類の情報が記載されているため、 Lチカやそれ以外の工作を楽に進めることができます。
【USBケーブルに関する補足】
PCとArduinoボードをつなぐ USBケーブルですが、ケーブルの種類が「USBケーブル A-Bタイプ」などと呼ばれるものになります。接続部分の形が下の写真のようなものになります。スマートフォンの充電に使うケーブルなどとは異なりますので注意しましょう。
【Arduinoボードに関する補足】
Arduinoボード上の接続部などについて、一部補足します。 今回のLチカでは、下の写真の上部にある接続部を使います。今の時点では、接続部の横に0〜13番までの番号や GND と記載があることを確認しておいてください。 下側にある接続部は上部にある接続部と異なる役割を持っていますが、詳細は割愛します。 また、写真で示したLEDを見ることで、Arduinoボードに電源供給がされているかを確認できます。
部品をつなぐ
それでは、Lチカ用の部品をつないでみましょう。
手順1)ブレッドボードにLEDと抵抗を差し込む
上の写真の赤矢印で示した部分のように、LEDと抵抗を、ブレッドボードに差し込んでいきます。 ブレッドボードとは、部品を差し込むための穴がたくさん空いた板状のものです。LEDやセンサーなどの部品のつなぎ替えを、簡単に行うことができるようになり、試行錯誤をする段階では非常に便利です。
まずは、以下の手順でブレッドボードにLEDと抵抗を差し込んでみましょう。
LEDは電気が流れる方向が決まっています。写真にあるように、方向は足の長さの違いで区別します。つなぐ方向を逆にしないように注意しましょう。なお、抵抗はつなぐ際の方向は関係ありません。
【ブレッドボードに関する補足】
ブレッドボードにLEDと抵抗を差し込みましたが、部品はどのようにつながっているのでしょうか?それを理解するために、ブレッドボードの中身について補足します。 ブレッドボードのそれぞれの穴は、一部が中でつながっています。下の写真で、緑の線を描いた部分が、内部でつながっている穴になります。
このため、先ほどつないだ部品は、LEDのマイナス側と抵抗の片側とが接続された状態になっています。
【抵抗に関する補足】
LEDなどの部品には流してもよい電流の大きさが決められており、過剰に電流を流すと部品が壊れてしまします。それを防ぐために使うのが抵抗です。抵抗を組み込むことで、部品に流れる電流を抑えられます。ここで、抵抗の種類などについて少し補足します。
今回、330Ωの抵抗を使いましたが、抵抗には種類があります。
上の写真にあるように、抵抗についている色の並びが、抵抗の大きさを示しています。計算方法はここでは割愛しますが、最初のうちはよく利用するものはある程度限られます。そのため主なものの「抵抗値と色の並び」をメモしておくとよいでしょう。
抵抗にはいくつか種類があることを説明しましたが、どの抵抗を使えばよいのでしょうか? それには、オームの法則を使って計算します。学校の授業で習った覚えがあったりするのではないでしょうか? 計算には、部品がどのようにつながっているかも考慮する必要があります。そのため、最初は書籍やインターネットで情報を調べるなどして、自分が試したい内容に関して「どの種類の部品と抵抗を、どのようにつなげばよいか」を参照したほうが楽に行えます。
それでは、今回の Lチカのつなぎ方の場合で、使う抵抗の大きさを計算してみます。計算式は (「電源の電圧」 – 「LEDの順電圧」)÷ 「LEDに流す電流」 となります。 LEDの順電圧というのは LEDによって決まっているものです。赤色のLEDの場合 2 V(ボルト)前後であることが多いようです。また、電源の電圧というのは、この場合は Arduinoボードの電圧になりますが、0~13番の接続部でかかる電圧は5Vです。LEDに流す電流は、LEDの順電圧と同様に LEDに決められた流してよい電流の最大値でひとまず計算します。これが10mA(ミリアンペア)の場合、抵抗値の計算は下記になります。 (5 – 2) ÷ 0.01 = 300 この場合、利用する抵抗の大きさは300Ω(オーム)となりましたが、同じ大きさの抵抗があるとは限りません。その場合は、計算結果より大きく数字が近いものを選びます。そうすると、流れる電流が少し小さめになり、LEDに流してよい電流の最大値を超えることはありません。
手順2)Arduinoボードとつなぐ
先ほどの部品とArduinoボードをつなぎます。Arduinoボードを使う際、ボードの裏側は金属部分がそのままでているため、金属などの電気を通す素材の上に置くのは避けてください。 では、下の写真にあるように、Arduinoボードとブレッドボードの間を、ジャンバーワイヤーでつないでみましょう。LEDのプラス側のほうが11番の接続部に、マイナス側のほうが抵抗を通じて GNDの接続部につながれる形になります。
ジャンパーワイヤーは、Arduinoボードやブレッドボードへつなぐためのピンが、導線でつながれたものです。抵抗と同じで、つなぐ方向は特に関係ありません。
プログラム(スケッチ)を書き込む準備
部品の準備は整いました。次に、PCからArduinoボードへプログラムを書き込むための準備を進めていきましょう。Arduinoでは、プログラムのことを「スケッチ」と言いますが、本記事では「プログラム」と記載しています。 今回は、LEDを点滅させるためのプログラムを書き込みます。
手順3)PCで開発環境「Arduino IDE」を準備する
「Arduino用プログラムを扱う専用ソフトウェアの Arduino IDE」を準備します。お使いのPCに合わせて、最新のWindows用/Mac用などのファイルを「Arduino IDEのページ」からダウンロードしてください(※2015年1月3日時点では、最新バージョンは1.0.6)。
Windowsの場合はドライバのインストールも必要ですが、インストーラを使えば、Arduino IDE と一緒にドライバもインストールされます。Macの場合は、ZIPファイルを解凍するとArduino.appが展開されます。
これで開発環境の準備ができました。
手順4)PCとArduinoボードをつなぐ
ArduinoボードをPCにUSBケーブルでつないでみましょう。 USBケーブルをつなぐと、PCからArduinoボードに電気が供給されるため、Arduinoボード上の小さなLEDが点灯します。Arduinoボードには電源スイッチがないため、動作を止めたい場合は USBケーブルを抜いて電気の供給を止めることになります。
そして、手順3)で準備したArduino IDEを起動してください。そうすると、下の写真のようなウィンドウが表示されると思います(※以下、基本的にはMac版の画面で説明を進めます)。
ここで、つないだArduinoボードの設定と、シリアルポートの設定を行います。シリアルポートの詳細の説明は、今の時点では割愛します。ひとまず、ArduinoボードをPCに認識させるために必要な設定、と覚えておきましょう。
メニューの「ツール」⇒「マイコンボード」の中の「Arduino Uno」を選択します。
次にシリアルポートの設定です。Macに関しては、メニューの「ツール」⇒「シリアルポート」の中の「/dev/tty.usbmodemという名前が含まれる項目」を選択すればOKです。
Windowsの場合、「COMという名前が含まれる項目」を選択するのですが、それが複数表示されている場合があります。そのため、Arduinoボードに該当するものを確認する方法を記載します。 「スタートメニュー」から、「コントロールパネル」⇒「ハードウェアとサウンド」⇒「デバイスマネージャー」とたどります。そして、デバイスマネージャーの中の「ポート(COMとLTP)」をクリックし、その中で「Arduino Uno を名前に含む項目」を見ます。下の画像の例では「COM6」が Arduinoボードのシリアルポートになります。
これで、PCとArduinoボードの接続と設定は完了です。
手順5)Lチカのプログラムを試す
これでLチカの準備が整いました。早速、Lチカを試してみましょう。 Arduino IDEに下記のプログラムを入力してみてください。
1 2 3 4 5 6 7 8 9 10 |
void setup() { pinMode(11, OUTPUT); } void loop() { digitalWrite(11, HIGH); delay(500); digitalWrite(11, LOW); delay(500); } |
そして、下の画像で示したボタンを押してみましょう。
この操作で、Arduinoボードにプログラムが書き込まれます。 問題なく書き込みが行われれば、Arduino IDEの下部に「マイコンボードへの書き込みが完了しました」というメッセージが表示され、ブレッドボードにつないだLEDが点滅します。
もし、下の画像のようなエラーが表示された状態になった場合は、プログラムの入力ミスがないかを確認してみてください。
プログラムについて補足します。
void setup() { ... }の部分は最初に1度だけ実行される部分です。 今回のプログラムでは pinMode(11, OUTPUT)と、11番の接続部分を出力用に設定しています。ジャンパーワイヤーが接続された11番から、LEDに電流を流したり止めたりするためのものです。
void loop() { ... }の部分は繰り返し実行される部分です。そして digitalWrite(11, HIGH)は11番の接続部分から電流を流すためのもので、 digitalWrite(11, LOW)は、11番の電流を止めるものです。その電流を流したり止めたりする部分の間に、500ミリ秒(= 0.5秒)待つ delay(500)という部分があります。このため、LEDが0.5秒ごとに点いたり消えたりすることなります。なお、この数字を1000にすると変化が1秒ごとになりますし、もっと小さな数字にするとより短い時間で点滅を繰り返すことになります。
今回、USBケーブルが Arduinoボードに電気を供給する部分になっているため、USBケーブルを抜くと ArduinoボードやLEDに電流は流れなくなります。Arduinoボードに書き込んだプログラムはそのまま残っているので、再度USBケーブルをつなぐなど電気を供給した際には、今回書き込んだプログラムが実行される状態になっています。
おわりに
Arduinoを使った電子工作はいかがだったでしょうか? LEDを点滅させる以外にも、センサーの情報を取得したり、モーターを制御したりなど、Arduinoを使ってできることはたくさんあります。ぜひ、他の部品を使った電子工作を試してみてください。