arduinoのB級ラボ


2012.11.17、秋葉原でarduinoを買いました。これからはここでその成 果を記録していきます。せっかくなので、きっと将来オヤジの趣味を継ぐであろうオタクの卵、我が息子へチュートリアル形式で贈ります。
2012.11.25

【arduinoとは?】

arduino UNOこ んなマイコンボードです。20MHzで動くRISCチップを搭載しています。なんとイタリア製!写真右中央の小さな文字をご覧ください。"MADE IN ITALY"がご確認いただけます。イタリア製品といっておもいつくものはブルガリ,プラダ,フェラーリ,フィアット等々、とってもおしゃれ系っすよね。 でもこのArduinoもイタリア製です。しかも世界標準機です。日本語ではアルドゥイーノと表記します。詳しくは Wikipediaをご覧ください。 
このマイコンはハードも関連するソフトもすべてオープンソースです。なのでいろいろなクローンが存在します。そしてその名称の語尾は”ーノ”なんです。例 えば、のび太君が作ったらきっと”ノビターノ”となるはずです。その昔、学研の大人の科学でこれの廉価版クローンが付録につきました。Vol.27です。 そのときの名称は”ジャパニーノ”でした。私が購入したのはARDUINOです。UNOという版です。この基盤だけだと2500円程度で買えます。廉価版 のクローンだと1000円以下でもありますが、できることはほぼ同じはずです。自作も可能です。写真に写っている大きなIC。この中にCPUやらメモリな ど、主要な機能が全部つまったLSIなのですが、これ単品で買うとたった250円です。自作用に部品を一式600円で売っている通販もあるぐらいです。安 いのはわかったけど、これで何ができる?のでしょう。まず写真のハードウェアについてですが、Wikipediaにあるとおり、『Arduinoの主要モデル(現 在はUno)では、14本のデジタルI/Oピンが利用可能で、そのうち6本はパルス幅変調信号を生成でき、他に6本のアナログ入力がある。』と いうことです。14本のデジタルI/Oピンが利用可能ということは、14種類のスイッチをON/OFFできるよということです。さらにそのうちの6本はパ ルス幅変調信号を生成できます。俗にいうPWM可能というこ とです。つまり、ただのON/OFFだけでなく、パルス信号も出せます。すごい高速にON/OFFを繰り返せば、実質の電圧制御が可能ということです。あと、『他に6本のアナログ入力があ る。』と あります。6本のアナログ入力が可能、つまり、ADコンバータがついているよということです。入力された電圧を0〜1023の数値に変換できます。世の中 にある多くのセンサー類は、測定した結果を抵抗値で返します。例えばCDSセンサーは明るさで抵抗値が変化します。圧力センサーや、サーモセンサーも同様 です。これらを入力デバイスとして利用できますよ、という意味です。
これはマイコンなので、当然プログラムが動きますし、そのプログラムから先ほどのピンを制御するわけです。プログラムはパソコンからUSB経由で書き込み ます。プログラムを書いたり基盤へ送ったりするソフトがこれです。arduino IDEというターミナルソフトです。ここからダウンロードできま す。左上のチェックマークでコンパイル、右矢印で基盤へ書き込みです。上下の 矢印はプログラムをパソコンへ保存したり読み込んだりします。arduinoの世界(この手のマイコンの世界)ではプログラムのことをスケッチと呼びま す。arduinoの言語はC/C++です。もちろん世の中に落ちているいろいろなライブラリを利用できます。あと、この基盤へいろいろな部品をつなげて いくわけですが、その物理的な設計にはFritzingというデザインソフトを利用します。これだけの環境がたった数千円でそろってしまうarduino は、 偉大です。


【先ずはhello world】

"hello world"は、電子な世界の初めの第一歩。要するに新しい言語に出会ったら、先ずはhello worldを標準出力へ表示することが目標となります。マイコンの世界はLEDをちかちかと点滅させることが初めの第一歩です。つまり最も単純なハードを 組んで、もっとも簡単なスケッチを書くことが目標です。ロジックがどうのとか、言語の作法がどうのとか言う前にコンパイルの仕方とか、マイコンへのオブ ジェクト転送とかのやり方がLEDちかちかの肝です。
できました。先ず白いボードはソルダーレスブレッドボードという電子的試作品仮組み 立て板です。ソルダーレス(半田不要)なので部品を刺していくだけです。縦に4ホールずつグルーピングされている画期的なボード。詳 しくはWikipediaで。
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);    
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}
このスケッチはBlinkという有名なソースです。これはarduinoの開発環境"IDE"に標準で添付されています。これからはこれをも とにスケッチ を拡張していきます。
調子に乗ってLEDを8個盛り。

手持 ちのLEDを総テスト。7セグと青白赤の競演です。以上、LEDチカチカでした。


【家の明るさを計る】

話 は変わって、とっても所帯染みた話になります。最近、女房が部屋の照明を替えてくれと要求してきます。さすがに連れ添って二周りもすると照明も駄目になっ てきます。でも、本当に女房の部屋だけが暗いのでしょうか?客観的に計る必要があります。で、このマイコンを使って照度計を作ることにしました。
先ずは結果を表示するために液晶画面を取り付けることにしました。最も廉価版なバックライトなし、16桁2行表示の液晶画面(SC1602BS)です。秋 月電子で500円でした。これにはハンダ付けが必要です。ジャンパーがさせるコネクタをつなげました。そしてCDSセンサーという明るさで抵抗値が変わる 部品です。太陽電池は明るくなると発電してエコですが、このCDSは明るくなると電気抵抗が減るだけで特になにも生み出しませんのでエコくないです。この センサーの両端に5Vをかけてやって、どれだけ抵抗値が変化するかを調べます。我らのarduinoにはADコンバータがついていることを紹介しました が、これを使います。真っ暗がゼロ。超明るいが1023です。この間のアナログ値をデジタル化して液晶画面へ表示します。





これが完成図。右下にCDSがあります。液晶はわかりますよね。家のあちこちを計りたいので、電源は息子のiPhone充電用エネループを借用。ブレッドボード右上の青い物体は5kΩの半固定抵抗です。液晶のコントラスト用。スケッチはこちら。
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 int val = 0;
void setup()
{
  lcd.begin(16, 2);
  lcd.clear();
}
void loop()
{
  val = analogRead(0);
  lcd.print(val);
  lcd.print(" skh");
  delay(1000);
  lcd.clear();
}

おお、たったこれだけ。LiquidCrystalというライブラリのおかげです。では、ここで得られる数値がどういうものなのでしょう!?
先ず、真っ暗は真っ暗です。もう真っ暗。布団の中で目を瞑った状態。更にめまいも幻覚も見えていない状態。これがゼロです。明るい状態をご説明するのは大 変むずかしゅうございます。今日は2012年11月25日です。外は秋晴れの快晴の晴れまくり。3連休でしたが最終日なので心はちょっと曇り気味ですが、これには反応しません。この状態の13 時57分に太陽下で測定すると917でした。また、iPhone5のLEDを点灯してCDSにほぼひっつけた状態が970でした。要するに布団の中で瞑想 していない状態〜目にiPhoneのLEDを当てた状態、この間を1024分割するということです。(警告:布団の中で瞑想するのはご自由ですが、決 して目にiPhoneのLEDを当てないでください。目に重大なダメージを受ける可能性があります。)
こ の数値の意味はだいたいわかったのですが、単位は? 通常、明るさはルックスとかルーメンとかカンデラとかですが、今回の数値の単位はなんでしょう?イン ターネットであらゆる技術文献を調査しましたが、ISOでも特に定義されていないようなので、新たに"skh"という単位を作りました。世界標準化を目指 しています。根拠はそろそろ自家用車を買い替えたい旨を女房にそれとなくアピールするために考案しました。 (skh:SorosoroKurumaHoshi-!の略)
結果は次のとおり。家中の照度をインターネットに晒してもOK?これって個人情報?ま、いいか。わかったところでどうしようもないし。
場所
明るさ
備考

917skh
快晴(11/25  13:57)
パパPC席
218skh
世界skh基準点(A Point of reference in  the world)
食卓
336skh
スタンド照明オン

241skh
スタンド照明オフ。シーリング照明のみ。
玄関
220skh

階段
54skh
踊り場

153skh
上踊り場
パパ寝室
71skh

ママ寝室
211skh

息子寝室
250skh

息子机上
410skh

2Fトイレ
177skh
物置として利用中。
1Fトイレ
320skh
球切れ対策で、420ルーメンのLED球設置。
洗濯場(脱衣場)
190skh
球切れ対策で、300ルーメンのLED球設置。
洗面台
322skh
思春期な息子の要望で鏡の照明(20W直管蛍光灯)をLEDへ交換済み。
風呂
204skh
球切れ対策で、400ルーメンのLED球設置。
<考察>
目的は先に述べたとおり、ママ寝室の照明を交換するかどうかです。パパ寝室が一番暗いのはOKです。20Wの直管が4灯ついているタイプのペンダントなん ですが、どうせ寝るだけなので、球が切れるたびに必要ないところとSWAPしてました。結果、あと1本しか点いていない状態なのです。でも20年以上も蛍 光灯の交換なしでやってこれたわけですからLEDに交換する価値全くなし。
1Fのトイレが予想外に明るいです。我が家で最も球切れが早かった、つまりOn/OFF頻度の多い箇所なわけで、LEDへの交換価値ありと判断して交換済 みです。さらに本読んだりするでしょ。だから明るくしていたつもり。こうやって結果がデジタルかつ客観的に出てきたわけで、しかも期待通りの結果 だったのでうれしかったりします。読者の皆様もトイレ照明のLED化をお勧めいたします。
<結論>
ママの部屋が息子の部屋より明るくていいですか?ファッションショーをやるのは自分の部屋と玄関でしょ?どちらも同じぐらいの明るさやん。交換の必要なし。\(^▽^)/


【おしまい】

というわけで、arduinoマイコンの初回レポートはおしまいです。また時間ができたらいろいろと作りたいものがあります。そのときに続編書きます。ありがとうございました。

メニューへ