Arduino をはじめよう

Arduino をはじめてみた(1)


前回の記事の続きです。

ArduinoでLEDを点滅(青)

前回は書籍になぞって、arduino IDEをインストールしてLEDを点滅させるところまで進めましたが、今日も引き続き書籍の内容に沿っていきます。


ブレッドボードの登場
「arduinoをはじめようキット」には、書籍を読み進めると登場するパーツが予め揃っているので、いちいち部品の名前をメモして秋葉原あたりを探し歩く必要がありません。(でも当然ながら探し歩くこともとても大事)。オンラインで販売しているサイトもけっこうあるようなので部品は簡単に手に入りそうです。

さて、今度は「ボタンを押すとLEDが点灯する」ものを作ってみます。Arduinoボードのほかに、たくさんの穴があいた白いブレッドボード、ジャンプワイヤ、10KΩ抵抗、タクトスイッチをそれぞれつなげます。
Arduinoボードとブレッドボードをつなげた様子

実際に書いたコードはこちら。

//Example 02 ボタンが押されている間、LEDを点ける #define LED 13 //LEDが接続されているピン #define BUTTON 7 //プッシュボタンが接続されているピン int val = 0; //入力ピンの状態がこの変数(val)に記憶される void setup() { pinMode(LED, OUTPUT); //ArduinoにLEDが出力であると伝える pinMode(BUTTON, INPUT); //BUTTONは入力に設定 } void loop() { val = digitalRead(BUTTON); //入力を読み取りvalに格納 //入力はHIGH(ボタンが押されている状態か?) if ( val == HIGH ) { digitalWrite(LED, HIGH); //LEDをオン } else { digitalWrite(LED, LOW); //LEDをオフ } }


上のコードをコンパイルしてArduinoボードにアップが成功すると、ボタンを押したときにLEDが点灯します。すげー! ちなみにArduinoでコードを書くときは、ActionScriptと違って、文末にかならずセミコロンを入れないとコンパイルエラーになるようです(#defineの行を除く)。

Arduinoのメモリ上での変数とスケッチの扱いについてわかりやすい解説が書いてありました。変数はRAMに記憶されるが電源を切ると書き込まれたデータが消えてしまうが、スケッチ(コードの内容)はArduino上のフラッシュメモリに記憶されるので、電源を切っても書き込まれたデータは消えないとのこと。PCと同じですね。
続いてはボタンを離してもLEDが点灯し続けるスケッチを通じて、プッシュボタンの特性が学べます。ここでのポイントは、ボタンを完全に押されなかったときに生じる「バウンジング」という信号について。ボタンの仕組みは単純で、押されたときだけ金属が重なり合って電気が流れますが、完全に押されなかったときはオン・オフの信号が同時にやってきてしまうようです。これを解消する方法として、ボタンの状態変化をわざと遅延させるやり方があるようです。

そのバウンジング対策も実装したコードがこちら。

//Example 03A: ボタンを押すとLEDが点灯し、 //ボタンを離したあとも点いたままにする。 //バウンジングを解消する簡単な方法を取り入れた改良版 #define LED 13 #define BUTTON 7 int val = 0; //入力ピンの状態がこの変数(val)に記憶される int old_val = 0; //valの前の値を保存しておく変数 int state = 0; //LEDの状態(0ならオフ、1ならオン) void setup() { pinMode(LED, OUTPUT); //ArduinoにLEDが出力であると伝える pinMode(BUTTON, INPUT); //BUTTONは入力に設定 } void loop() { val = digitalRead(BUTTON); //入力を読み取りvalに格納 //入力がHIGH(ボタンが押されている)なら状態(state)を変更 if((val == HIGH) && (old_val == LOW)) { state = 1 - state; delay(10); } old_val = val; //valはもう古くなったので保持しておく if(state ==1){ digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }

さて、ここまできて書籍にして40ページ。スクリプト的にはなんらたいしたことをしてませんが(笑)。 次回はプッシュボタンだけではなく、いろんなセンサーについてもふれていきます!

HTML5飯