ORBIT LOGO http://www.orbit-ltd.net 機械システム開発
FA・LA各種自動化機械設計
Since 1995 標準機械ユニット図面販売
bar
Google
機械設計講座:機械設計者のための覚え書き
フィジカルコンピューティング・Arduino覚え書き:
機械設計者こそがArduinoを使おう
0. 概要
 最近、「フィジカルコンピューティング」と言う考え方が一般化してきました。
この考えに接したとき、「これは是非、普通の機械設計者が使いこなせるようになるべきだ」と感じました。
そこで、「フィジカルコンピューティング」とは何か?と言うところから、何が出来るのかなどを、私の実践を通して書いていけば何かしら参考になるのではないかと思います。
「フィジカルコンピューティング」とはそもそも電気やプログラムに精通していないデザイナーなどが気軽に使えるようにと考えられたものですから、我々機械設計者にも取っつきやすいコンピュータと言えると思います。
コンテンツは不定期に、少しずつこのページに追加していく予定です。
尚、肩肘張らない気軽なコンテンツとしたいため、文体はその時の気分で変わったり、くだけた感じで書かれていますが、ふざけているわけではありません(笑)

とにかく試してみたい、と言う方は以下の書籍や、Arduinoと書籍とのセット、Arduino本体のみを買って、色々と試してみるのが一番の近道だと思います。



[記事目次]

1.0 [フィジカルコンピューティング・Arduino]
2.0 [Arduinoの開発環境を整える]
3.0 [簡単なプログラム・LED点滅その1]
3.1 [簡単なプログラム・LED点滅その2]
4.0 [簡単なプログラム・スイッチによって動作切り替え]
  X01 [番外編:多数枚 スティッカーを作った]
5.0 [Arduino互換機・クローンを作る]
6.0 [私が使ってる自作Arduinoクローンの紹介]
  X02 [番外編:PICでフィジカルコンピューティングPinguino]
7.0 [ ]
・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・
・・・・・・・・・・


1.0 [フィジカルコンピューティング・Arduino]
「フィジカルコンピューティング」という考えがあるという事を最近知った。 説明によると、
「フィジカル・コンピューティング」とはニューヨーク大学から始まった教育プログラム,研究指針です。
既存のパーソナル・コンピュータのグラフィカル・ユーザー・インターフェイス(ウインドウ,マウス,アイコンなど)を超えて,私たちの生活環境によりそった身体的なコンピュータのあり方を模索する研究の動向を言い表しています。

だそうだ。
これだけではまだよく分からないので「Arduiinoを始めよう」を見ると

フィジカル・コンピューティング(Physical Computing)はエレクトロニクスを使ってデザイナーやアーティストのために新しい素材を生み出します。
そのためにはセンサとアクチュエータを通じて人間と意思疎通する物体(インタラクティブ・オブジェクト)をデザインすることが必要です。
マイクロ・コントローラ(マイコン)の中で動作するソフトウェアがその物体をコントロールすることになるでしょう。
マイコンは1つのチップに集約された小さなコンピュータです。
過去においては、エレクトロニクスを用いることは技術者を雇ってたくさんの小さな部品から電子回路を組み立てることを意味し、使われるツールも多くは技術者専用で大量の知識を必要としました。
それではクリエイティブな人々が直接モノをいじって遊ぶことができません。
しかし、近年、マイコンが安くなり簡単に使えるようになったおかげで、使い勝手の良いツールが作れるようになってきました。

とある。
まぁ、色々と難しい定義があるみたいだけど、要は 「デザイナーなど、電気やソフトに詳しくない人が思った事を簡単に実現できる仕組み」 を持ったマイコン(ボードコンピュータ)ということか。
で、色々とそれを実現するためのマイコンボードが公開されているようだけど、代表的なのが Arduino(アルデュイーノ) 、イタリア製だ(^^;
まぁ、ソフトもハードもオープンなので情報を調べれば自作も出来るんだろうけど、こう言うものは最初に躓くとなかなか先に進まないので買ってみた。
購入先は、 ショップテックと言うお店。価格も他で買うより安いみたい。送料無料なのが嬉しい。

で、早速簡単な回路とソフトを試してみたのが写真のもの。

Arduino_001

確かに簡単だ。今まで、こういうワンチップマイコンを使うときは端子の機能を調べて、入出力の設定をどうするとか面倒な事が多かったんだけど、これはそう言うところが隠蔽(カプセル化っていうの?)されてるんだね。
(2009/09/21)

2.0 [Arduinoの開発環境を整える]
まずボードの説明ですが、買ったのはArduino Duemilanove  Atmega328版です。 3,200円で、送料無料なのはかなりお買い得なんではないかな?
この他に、必要なものはパソコン(PC)とUSBケーブル(Type-Bのもの)。後、回路を組むのに半田付けなどをしなくてすむ、ブレッドボードとそのワイヤーなどが必要です。

Arduino_001

写真の上にあるのがブレッドボード。左側がUSBケーブル。そしてArduino Duemilanove(デュエミラノーボと読んでいいのか?)。
次に必要なのがArduinoのプログラムを開発するIDE(統合開発環境)のインストール。
Arduino IDEは誰でも無償で利用できるソフトウェアで、Windows やMac OS X、Linuxで動きます。
私は色々都合があって、Win2000マシンで使っています。

まず、 Arduino IDEの入手ですが、Arduinoのホームページのダウンロードのページから入手できます。

Arduinoのホームページには、無償でダウンロードして自由に利用できるArduinoのソフトウェア以外にも、ハードウェアの回路図も含めた詳細な情報、Arduinoを利用するためのチュートリアル、開発言語のリファレンスなど必要な情報を入手することができます。

と書くと簡単ですが、このホームページは英語ですから、一寸わかりにくいかも。
あと、Vistaなどではインストールで引っかかることが多いらしいので、

http://shokai.org/blog/archives/1109

http://level0.kayac.com/2009/04

などを参考にすると良いかも知れません。
(2009/09/22)

3.0 [簡単なプログラム・LED点滅その1]
親切なホームページやブログだと、ここでインストールの方法やIDEの使い方を書くんだろうけど、まぁそう言う事はもっと分かり易いサイトが有るだろうから、省略します(^^;
あくまで、これは自分の覚え書きとして残すことを方針として書くつもり。
まぁ、あまり参考にしないと思うけれど、私が躓いたところなどのポイントは残す予定なので、それらが何らかの参考になればよいかなと。

さて、大体この手のもので一番最初に組むプログラムはLEDの点滅でしょう。
必要な回路は下の写真の通り。

SSCN0683.JPG

電源はUSBケーブルから供給されるので外部電源は不要としても、ブレッドボードとArduinoとは繋がないといけない。
そこで簡単に回路の説明をする。
まず、DIGITALと書いてあるコネクターのGNDとブレッドボードのGNDを接続。
次に、やはりDIGITALの13番と抵抗を繋ぐ。抵抗の他端はLEDのアノード(プラス側)に繋ぐ。LEDのカソード(マイナス側。写真で脚が曲がってる方)は先ほどのGNDに繋ぐ。
抵抗の値はとりあえず330Ωを使っている。

LEDの詳しい事はここ を見てもらえば分かると思うので、読んでみて欲しい。

LEDの大雑把な使い方としては10〜20mA流せば光る(^^;と思えば間違いが無く、電源電圧5Vで330Ωだと約15mA流れる計算(実際は電圧降下があるからもっと少ない)。
あと、LEDの脚の区別だけど、普通はカソード(マイナス側)の脚が少し短くなっているので区別が付くはず。

で次にプログラムだけど、一番簡単なやりかたは、

1.LED点灯
2.一定時間待つ
3.LED消灯
4.一定時間待つ

のループかな。

ところで、リファレンスなどを読むと、Aruduinoの基本的なプログラムは次のような構成になるらしい。

void setup()
{

//ここ初期設定のプログラムを書く

}

void loop()
{

//ここに色々な処理プログラムを書く。

}

この setup() は何も処理が無くても省略は不可で、その場合は処理行を空白にしてでも必ず書かないとエラーになる。

 loop() は所謂メインルーチンで、ここに書かれた処理がずっと電源が入っている間中繰り返す事になる。

で、とりあえず書いてみたのがこれ。

blink_01.JPG

 まぁ、何の説明も要らない様なプログラムだけど、補足。

プログラム中に // とあるのは注釈記号で、この記号から後、改行されるまでが注釈と見なされます。
似たようなもので、

/*
  注釈
*/

は/*と*/で囲まれた範囲が注釈となる。(全角で書いてあるけど、実際は半角文字)

さて、1行目はLEDを繋ぐ端子が13番なのだけど、プログラム中に13なんて数字が突然出てくると「この数字は何だ?」となるのでled_outと言う定数に13を定義してます。
頭に付いてる const は変数を"read-only"にするものです。つまり、型を持つ変数として使えますが、値は変更できません。const変数に代入しようとすると、コンパイルエラーが発生します。
無くても構わないと思うでしょうが、プログラム中で書き換えられては困りますので念のため。

次にsetup()中のpinMode(led_out,OUTPUT)led_outで定義した端子13を出力端子だと宣言してる。OUTPUTは最初から宣言されている定数で、出力の意味。入力ならINPUTね。

ここで最初躓いたのは、pinModeとかOUTPUTの大文字小文字の区別がうるさい事。
これを小文字で書くとエラーになる。これって一寸面倒だなぁ。まぁ、慣れかな。

次に loop() 中の説明。
digitalWrite(led_out,HIGH)はLEDに電圧を出力する。
delay(500)は500msのタイマー。
digitalWrite(led_out,LOW)はLEDの電圧をオフにする。
HIGH,LOWともに定数で、5Vと0V出力です。

 とまぁ、簡単な内容。
Aruduinoの命令とかのリファレンスは日本語のページが有ります。

こんな簡単な回路で、しかもやってる事も単純ですがLEDが点滅するとやはり嬉しいものです(笑)
まぁ、ステップバイステップでボチボチとやっていきましょう。


(2009/09/23)

3.1 [簡単なプログラム・LED点滅その2]

さて、前回はdelay()関数を使ってインターバルを作って点滅していました。

今回は、経過時間を調べて、一定時間過ぎたら反転させる方向で作ってみます。

回路は前回と同じものを使います。

blink_02.JPG

 簡単にプログラムの説明です。

まず、今回新たに使う関数は、

unsigned long mills()

です。これはプログラムが走り始めてからの経過時間を返してくれる関数です。ミリ秒単位です。

2行目のprev_timeはLEDの出力反転した前回の時間で、ここでは初期値として0を入れてます。

3行目のchg_timeはいくらの時間経過したら出力を反転させるかの定数です。ここでは2.5秒(2500ミリ秒)を設定しています。

 setup()の内容は前回と同じ。

loop()内では、millis()が返してきた経過時間から前回時間prev_time()を引いて、その差がchg_timeより大きいかどうかで分岐しています。

digitalRead(led_out)で現在のLED出力を読みとり、反転させています。

まぁ、これも簡単な内容なので特に問題は無いでしょう。

 

if/else文は以下の様な感じで使います。

if (condition)
{

// action A

}
else
{

// action B

}

conditionが真ならactionAを、偽ならactionBを実行します。
まぁ、お馴染みの事でしょう。

[参考]

プログラム中で int や unsigned long だとかを断り無く使っていましたが、これはデータ型を示します。
なので、データ型について簡単に説明。

データ型には

(1) 数値データ:算術演算の計算の対象となる数値データ
(2) 論理データ:はい・いいえ、ある・なしなどの判断の対象となる論理的なデータ
(3) 文字、文字列データ:文字や記号で識別するためのデータ

の3種類があります。って分かってる人には当然過ぎる内容ですね(^^;

(1)の数値データには整数型と小数点型の2種類がありますが、それらをプログラム中で使うときの宣言、データーの範囲、バイト数を下記に示します。

符号付き整数:int-32768 〜 327672バイト・データ
符号無し整数unsigned int0 〜 655352バイト・データ
長精度符号付き整数long-2,147,483,648〜2,147,483,6474バイト・データ
長精度符号無し整数unsigned long0 〜 4,294,967,2954バイト・データ
浮動小数点実数型float3.4028235E+38 〜 -3.4028235E+384バイト・データ
倍精度浮動小数点実数型double1.7976931348623157E+308 〜 -1.7976931348623157E+3088バイト・データ

文字・文字列型については後ほど、必要になったときに。




(2009/09/24)
4.0 [簡単なプログラム・スイッチによって動作切り替え]
 実際に何かを動かすとなると、センサーだったりスイッチを読み込んでそれによって動作が変えると言う事が必要です。
今回はスイッチ入力によってLEDの点灯、消灯を切り替えてみます。
今回組んだブレッドボードの写真はこれ。

SSCN0685.JPG

で、その回路図(ってほどではないけど^^;)がこれ。

button_01_circuit.JPG

スイッチは抵抗1KΩで+5Vにpull upされているので常時Hihgだけど、スイッチが押されるとGNDレベルに電位が落ちてLowになる。
それがDigitalの2番入力につながっています。
LEDの駆動回路は前回のものと同じで、13番出力につながっています。
次に、このプログラムがこれ。

button_01.JPG

loop()内で、digitalRead(sw_in)でスイッチのオン/オフをみて、LED出力をHIGH/LOWの切り替えをするだけのプログラム。

でも、これだけ出来れば、簡単なシーケンス制御に使う事も出来ますよね?

(2009/0925)

X01 [Arduino 番外編:多数枚 スティッカーを作った]
Arduinoに飽きた訳でも、何もしていないわけでもない(^^;
一応、色々とやってるんだけどホームページにアップするよりも試してみたい事が多くてなかなかアップできない。
最近やっていたのはステッピングモーターをUSB経由でコマンドにより駆動するとか、まっさらのATmega328Pにブートローダーを書き込む事など。
この辺、ブログにでも書いておかないと忘れそうなんですけどね(苦笑)

で、今回は、ブートローダーを書き込んだATmega328Pを使って最小構成のArduino互換機を作るときに、ピンの機能がわかりにくいのを何とかしようとラベルを作った。
もちろん、ここにあるラベルでも良いのだけど、これってプリントするとA4の真ん中にラベルが1枚ぽつんとあるだけなので勿体ない。
しかも文字が小さいので老眼が進んだ私には見難いんですよね。
そこでなるべく文字は大きく、しかも多数枚のArduino Stickerを作った。
それが、これ。

Arduino_Sticker .JPG

これでもかと6行×18列もある(笑)
これなら一生分あるかも(^^;
ダウンロードはここから出来ます。
ラベルもATmega328Pや168Pの24pinパッケージぎりぎりの大きさです(^^;
文字をなるべく大きくしたかったので・・・・。

使えるものなら使って下さい。

(2009/10/20)
5.0 [Arduino互換機・クローンを作る]
ブートローダーの書き込みが出来るようになったので、後は互換機・クローンを作ってみたくなった。
回路図はオープンソースハードウエアなので公開されてるし、やってる事は難しくないはず。
なので、最小構成の互換機を作ってみた。 SSCN0688.JPG
ブレッドボードに組み込んであるだけなのだけど、一応USB経由でプログラムの書き換えも可能だから、これでいろんなところにArduinoを使える。
こうなると可能性は無限大?
ちなみに私は、このクローンを「Orbitino-01」と呼んでいます(笑)

簡単に説明すると、右側にあるのは秋月電子で扱ってるFT232RL USB−シリアル変換ユニット。
で、左側が互換機本体。
プログラムが書き込み終了すれば、右側半分はもう不要なのでこのユニットは他でも使い回しが出来るって事。
だから、実際の互換機の部品代はブレッドボードをいれても7〜800円と言ったところ(もっと安いかな?)。

ところで、ブートローダーの書き込みで悩んだ事とか。
一番悩むのは、ヒューズビットの設定だね。
avrude.exeで書き込むときは未使用ビットの扱いが0なんだけど、
AVR Studioでは逆で1なんだね。
だから、avrudeの資料を見て0x05で書き込めば良いのならAVR Studioで書き込無時には0xFDでないと駄目。

なんでこういう仕様になってるのかな?
不思議。


で、色々とやって、ブートローダーを書き込めたんだから、Arduinoに載せ替えて動くはずだよな、と思ったけど動かない!
おかしいなぁ?とあれこれやって、ハタと気づいた。
CPUの向きが逆!
だって、普通ラベルが正常に読める向きなら左下が1番ピンだと思うじゃない?
抜き差しする事を予定してないからなのかな?
とまぁ、そんな事で動くようになりました。

「Orbitino-01」の回路図は、こんな感じ。

orbitino-01回路図

回路図のPDFファイルはここからダウンロード出来ます。

あと、ブートローダーの書き込みは出来てしまえば簡単だけど、出来るまでは色々と悩むと思います。
なので、ブートローダー書き込み済みのATmega328P「ショップオービット」で格安(?)販売します。
ついでに、上の回路図で必要な部品のセット(秋月電子のFT232RL USB−シリアル変換ユニットと電源部のLEDは別)も販売します。
まぁ、高い部品は16Mhzのクリスタルとタクトスイッチくらいだけど、コンデンサーとか抵抗類が意外と無かったりするしね、ってことで。
尚、このクローンを使って、ArduinoのIDEからプログラムを書く場合は「Arduino Duemilanove ATmega328」を選択して下さい。


(2009/10/24)
6.0 [私が使ってる自作Arduinoクローンの紹介・]
私が使ってる自作Arduinoクローンの紹介です。

s-DSCN0707.jpg

画面の左側が秋月のUSB-シリアルコンバーターを載せたインターフェース基板。
中央奥が自作Arduinoクローン基板。
で、手前が秋月で販売してる白抜きのLCD。
それぞれはコネクタでつなげてあるので、不要な時は取り外して他で使うことも可能。
手間を考えなければ、部品代は安いので色々と使えて便利。
もう少し使ってみて、ここはこうした方が良いとかが固まれば基板を起こしても良いのかな?と思ってる。
後、LCDは最低でも6本のデータを占有(R/WをGNDにつないだ場合)するので、この辺もI2Cで出来れば2本だけで済む。
その辺も考えたい。
市販はされてるけど、やっぱり自分で考えて(他人のアイディアを真似て?)作ることに意義がある(^^;


(2010/03/13)
X02  [番外編:Pinguino PICでフィジカルコンピューティング]

 ここでは AVRを使ったフィジカルコンピューティング環境としてArduinoを紹介していますが、PIC18F2550を使用したArduinoライクな「Pinguino」と言うものがあります。
ここを見ると非常にシンプルなボードであるのが分かります。
この作者のコメントにはこう書かれています。(私の拙訳ですので、間違いがあってもご容赦^^;)
「Pinguinoは、PICマイクロコントローラベースのArduinoライクなボードだ。
このプロジェクトのゴールはLINUX、Windows、MAC OS X環境で簡単に使える統合開発環境を構築することだ。
Arduinoはパワフルなツールだがいくつか不満な点がある。
一つは、チップ上にネーティブなUSBインターフェースが無いことによる不便さであり、またその生成されるコードの長さもそうだ。
PinguinoのIDE(統合開発環境)はPythonで構築されている。
統合されたプリプロセッサーとトランスレーターはArduino固有の命令群をダイレクトにC言語に変換する。
このプリプロセッサーはコードの長さを短縮し実行スピードを向上させている。
PinguinoのハードウエアはPIC18F2550をベースであり、このチップはネーティブなUSBモジュールと、シリアルインターフェースのUARTも内蔵している。
PinguinoのIDEそのものは、Cコンパイラー(SDCC)、アセンブラとリンカー(GPUTILD)、そしてPUF VASCOプロジェクトをベースにしたブートローダーで構成されるスタンドアローンのアプリケーションだ。
Pinguinoはオープンハードウエア、オープンソフトウエアだ。そしてこのIDE( integrated development environment ) は windows, linux そして Mac os x で使用可能だ。」

[原文]
Pinguino is an Arduino-like board based on a PIC Microcontroller. The goal of this project is to build an integrated IDE easy to use on LINUX, WINDOWS and MAC OS X. Arduino is a powerful tool with some defaults. One of its inconveniences are a no native USB interface on the chip and its code length.

The IDE of Pinguino is built with Python. An integrated preprocessor translates specific Arduino instructions directly into C. This preprocessor reduces the code length and the execution speed. Pinguino hardware is based on a 18F2550. This chip has an integrated native USB module and an UART for serial link.

Finally the Pinguino IDE is a stand alone application with a C compiler (SDCC), assembler and linker (GPUTILS) and a bootloader based on the PUF VASCO project.

Pinguino is Open hardware and Open software. The IDE ( integrated development environment ) is avalaible for windows, linux and Mac os x .


残念なのは、Pinguinoに関する日本語のサイトが無い(私が探した範囲では見つかりませんでした)ことです。
なので、英語が苦手な人には取っつきにくいかも知れませんね。私だって、疲れているときはあまり英語を読みたくないのでその気持ちはよく分かります。
なので、ここで勝手に和訳して資料として載せていこうと思っています。

ただ、このページはあくまでArduinoの情報を載せるためのものなので、Pinguinoに関しては別のページに記事を載せました。
ここに「(別館)機械設計者の為のワンチップマイコン、電子工作覚え書き」があります。
7.0 [簡単なプログラム・]
copyright(c) 2011-  orbit limited.

よろしければ、簡単なアンケートにご協力をお願いします。



Google

ホームページへ戻る