#topicpath

** アーデュイーノ (Arduino) [#z18ec656]
** アルドゥイーノ・アーデュイーノ (Arduino) [#z18ec656]

 電子工作は素人。だけど、アーデュイーノを使ってみたいと思います。
 以下、アーデュイーノを使うまでの道筋を記録します。
 電子工作は素人。だけど、Arduino を使ってみたいと思います。
 以下、Arduino を使うまでの道筋を記録します。
 同じような素人さん向けに参考になるように。

** 既製品の Arduino を使う [#if0a0755]
※ あっけないほど簡単だった。
*** 買う [#s45cf86f]
+ Arduino Duemilanove を買う~
既製品の Arduino を買います。~
最初は、もっとも標準的な Arduino Duemilanove ("Duemilanove" は 2009 の意味だそうです。)がいいでしょう。
++ 秋葉原なら、マルツパーツで売っていると思われます([[参考>http://www.marutsu.co.jp/user/shohin.php?p=64284]])。
++ 通販ならより安いです。[[アマゾン経由でスイッチサイエンスから送料無料で>http://www.amazon.co.jp/Arduino-Duemilanove-328/dp/B001VG2RYO%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dssci-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001VG2RYO]]購入できます。
** いくつかの基礎知識 [#gfda371d]
 素人ですので、不正確、場合によっては誤りの情報があるかと思います。
 どうぞご指摘下さい。
- ATmega168P~
~
Atmel 社の「ワンチップマイコン」です。~
一つのチップの中に、CPU(中央演算処理装置)、メモリ、AD変換(アナログデジタル変換)機能などを詰め込んだものです。~
仕様の一部を下に示します。(私たちが普通入手するPDIP パッケージ--2列に足が並んで出ているもの--について)~
~
+ USB ケーブルを買う~
上記の Duemilanove をパソコンと接続するために USB B 端子を持ったケーブルを買います。~
プリンタに接続するためのケーブルで接続できるものがあればそれを使いましょう。~
無ければ、100円ショップで探してみましょう。
#style(class=table_left){{
| 項目|  |h
| | |
| EEPROM (電気的に消したりプログラムしたりでき、電源を落としても内容が保持されるメモリ)| 512 バイト |
| SRAM  (メインメモリ) | 1K バイト|
| AD変換 (アナログデータをデジタルデータに変換する機能)| 6 チャンネル(6つデータをとれる), 10bit(0-1023 までの値として取得できる) |
| IO (入出力に使えるピンの数)    | 23 本 |
| 駆動電圧   | 2.7-5.5 V (ただし電圧が低いとクロックを下げる必要あり)|
| 周波数(クロック。1秒間に何回計算するか) | 20MHz まで |
}}
~
~
*** 開発環境を整える (Windows XPの場合) [#e2997ea8]
「開発環境(IDE)」というと大袈裟です。~
Arduino はプログラムを仕込めます。そのプログラムを書いて本体に送るためのソフトです。
- 電源とクロック~
使用する電源電圧に応じて、安全に稼働する周波数の範囲が変化します。詳しくは--- [[ATmega168P技術資料(PDF,英語)>http://akizukidenshi.com/download/ATMEGA168P-20PU.pdf]]を見てください。~
&ref(safe_operating_area.png,,400x217);~
~
++ IDE のダウンロード~
[[ここのページ>http://www.arduino.cc/en/Main/Software]]からダウンロードします。~
現時点の最新バージョンは [[Arduino 0016>http://arduino.googlecode.com/files/arduino-0016-win.zip]]です。~
いろいろなフリーソフトが入っているので、70MB弱のサイズがあります。
~
++ 上記ファイルの展開~
ZIP という形式で保存されています。これを展開します。
- ブートローダ~
AVRマイコンのプログラム用フラッシュメモリの一部(Boot Program Section)にプログラムを書き込む命令(SPM : Store Program Memory)を仕込むことができます。
そのプログラムをブートローダというようです。~
~
++ 接続とドライバの導入~
+++ パソコン本体と Arduino Duemilanove を USB ケーブルで接続します。~
+++ すると、"新しいハードウエアが見つかりました" というメッセージの後、~
+++ 「新しいハードウエアの検出ウィザード」が立ち上がります。~
+++ 「一覧または特定の場所からインストールする」を選んで、「次へ」~
+++ 「次の場所で最適のドライバを検索する」「次の場所を含める」を選んで、「参照」をクリック。~
ZIP ファイルを展開してできた~
 arduino-0016-win   の中の   arduino-0016   の中の   drivers   の中の   FTDI USB Drivers 
を選んで 「OK」をクリック。~
+++ 元の画面で「次へ」をクリック。インストールが開始されます。
+++ 「完了」が表示されたらそれをクリック。
+++ もう一度同じ画面(新しいハードウエアの検出ウィザード)が現れます。同じ作業を繰り返します。
ブートローダがあることによって、比較的容易にマイコンにプログラムを書き込むことができます。書き込むプログラムはフラッシュメモリーの別の部分(Application Flash Memory Section)に書き込まれます。
~
~
++ 確認作業~
この時点で導入はほぼ完了しています。確認のために次の作業をします。
+++ arduino-0016 のフォルダから、arduino.exe を探しだし、ダブルクリックで起動。
+++ 画面の左上のプルダウンメニューから次のものを選びます。
 File > Sketchbook > Examples > Digital > Blink
画面にプログラムらしきものが表示されます。~
これはボード上の LED を光らせるプログラムです。
+++ プルダウンメニューから次のものを選びます。
 Tools > Serial Port
これは通信先を Arduino に指定するための作業です。~
"COM3" "COM4" "COM5" の中から選んでください。~
わからなければ、いったんケーブルを抜いて、なくなるデバイスを見つけて下さい。
+++ プルダウンメニューから次のものを選びます。
 Tools > Board
製品名のリストが出てきます。今回は、ATMEGA 328 が搭載されている Duemilanove なので、
 Arduino Duemilanove w/ ATmega328
を選びます。これを選んだ後、しばらく時間がかかりますので、気長に待ってください。
+++ プログラムのアップロード~
この時点でボードを見ると、電源が入っていることを示すランプが点灯しているだけです。~
画面上のアイコンから、右矢印のアイコンを選んで、マウスのポインターを移動します。~
UPLOAD という文字が現れるはずです。プログラムを本体に送り込むという意味です。~
これを押します。再び、ちょっと時間がかかります。気長に待ってください。
+++ テスト完了~
画面に "Done uploading" と表示され、ボードのオレンジ色のランプが点灯していたらテスト完了です。~
おめでとう。

*** 開発環境を整える (Debian Lenny の場合) [#r41575b0]

++ パッケージの導入(※ root の権限で実行)~
 apt-get install openjdk-6-jre gcc-avr avr-libc avrdude
※ JRE(Java Runtime Environment) は複数の製品があります。~
プログラムによってはこれを選びます。~
使用する JRE を切り替えるには、root の権限で
 update-alternatives --config java
を実行します。~
Arduino の IDE を利用する場合には、openjdk-6-jre に対応する /usr/lib/jvm/java-6-openjdk/jre/bin/java にします。
++ IDE をダウンロード~
+++ [[ここのページ>http://www.arduino.cc/en/Main/Software]]からダウンロードします。~
現時点の最新バージョンは [[Arduino 0016>http://arduino.googlecode.com/files/arduino-0016-linux.tgz]]です。
+++ ダウンロードしたファイルを展開します。
- ヒューズ(Fuse : 発音はフューズのはずだけど、ヒューズと書くのが習わしらしい。)~
~
※ ヒューズビットという表現もありますが、マニュアルにはヒューズバイトとなっています。~
  8bit(=1byte)をセットで設定する必要があるからでしょうか。~
~
++ 確認作業~
この時点で導入はほぼ完了しています。確認のために次の作業をします。
+++ 展開してできたディレクトリの中から arduino を見つけてこれを実行します。
+++ 画面の左上のプルダウンメニューから次のものを選びます。
 File > Sketchbook > Examples > Digital > Blink
画面にボード上の LED を光らせるプログラムが表示されます。
+++ プルダウンメニューから次のものを選びます。
 Tools > Serial Port
これは通信先を Arduino に指定するための作業です。~
USB のデバイス( /dev/ttyUSB0 )を選んでください。~
わからなければ、いったんケーブルを抜いて、なくなるデバイスを見つけて下さい。
+++ プルダウンメニューから次のものを選びます。
 Tools > Board
製品名のリストが出てきます。今回は、ATMEGA 328 が搭載されている Duemilanove なのでそれを選びます。
+++ プログラムのアップロード~
画面上のアイコンから、右矢印のアイコンを選んで、マウスのポインターを移動します。~
UPLOAD という文字が現れるはずです。プログラムを本体に送り込むという意味です。
これを押します。
+++ テスト完了~
画面に "Done uploading" と表示され、ボードのオレンジ色のランプが点灯していたらテスト完了です。~
AVR マイコンの機能を変化させるためのスイッチとして使われます。~
(多くの人には通じないでしょうけど、昔の EPSON のパソコンのディップスイッチのようなもののようです。)~
ブートローダとは別に書き込む必要があります。~
失敗すると、元に戻すのに苦労する場合があるので、慎重にセットする必要があります。~
Arduino でどのようなヒューズがセットされているかは、arduino-0017/hardware/board.txt の中に書いてあります。~
以下の情報は ATmega168P に基づいています。&color(red){ATmega328 は若干違うので注意!};~
~
++ 上位ヒューズ(High Fuse)~
リセットの扱いなど。~
Diecimila, Duemilanove Nano w/ ATmega168 では 0xdd(11011101)です。
~
#style(class=table_left){{
| 名称 | ビット番号 | 意味 | Default の値 |h
|      |            |     |             |
| RSDIBL | 7 | 外部からのリセットを使用不可にする。これがゼロだと 1番ピン(PC6)も IO に使える。 | 1 (設定しない)|
| DWEN | 6 | On-chip デバッグシステムを使えるようにする。消費電力の関係もあり、1にしておく。| 1 (設定しない) |
| SPIEN | 5 | シリアルプログラムとデータのダウンロードを可能にする。| 0(設定している)|
| WDTON | 4 | Watchdog Timer(内蔵のカウンタが決まった値に達したら中断かリセットする機能) をいつも On。 | 1 (設定しない) |
| EESAVE | 3 | Chip Erase でも EEPROM を保持 | 1 (設定しない) |
| BODLEVEL2 | 2 | BOD(Brown-Out:電圧低下 Detector)電圧低下を検知してシステムを保護・停止する。 | ※1 |
| BODLEVEL1 | 1 | | ※1|
| BODLEVEL0 | 0 | | ※1|
}}
~
#style(class=table_left){{
| ※1 | BODLEVEL 2:0 の設定について|h
| | |
| 111 | BOD を使わない ( Default ) |
| 110 | Vcc 2.5V用(?) に設定。1.8V 以下で停止 |
| 101 | Vcc 3.5V用(?) に設定。2.7V 以下で停止 |
| 100 | Vcc 5.0V用(?) に設定。4.3V 以下で停止 |
}}
~
++ 下位ヒューズ(Low Fuse)~
分周(?)や、ATmega168Pを駆動する周波数をどこからとるかによって変えます。~
Diecimila, Duemilanove Nano w/ ATmega168 では 0xff(11111111)です。
~
#style(class=table_left){{
| 名称 | ビット番号 | 意味 | Default の値 |h
|      |            |     |             |
| CKDIV8 | 7 | 周波数を1/8 にする。(8MHz → 1MHz ) | 0 (設定している) |
| CKOUT | 6 | CLKO ピン(PB0, 14番)からクロックを出力する。他のデバイスを駆動するのに使える。 | 1 (設定していない) |
| SUT1   | 5 | スタートアップタイムの指定 | ※1 |
| SUT0   | 4 | |※1 |
| CKSEL3 | 3 | クロックの指定 | ※2 |
| CKSEL2 | 2 | | ※2|
| CKSEL1 | 1 | | ※2|
| CKSEL0 | 0 | | ※2|
}}
~
#style(class=table_left){{
|※1 | SUT1:0 の設定について(ただし、CKSEL3:0 が 1111の場合) |h
| | |
| 01 | リセットからの余分な遅れ : 14クロック (ただし、BOD を使う。)|
| 10 | リセットからの余分な遅れ : 14クロック + 4.1ms |
| 11 | リセットからの余分な遅れ : 14クロック + 65ms |
}}
~
#style(class=table_left){{
|※2 | CKSEL3:0 の設定について |h
| | |
| 0000 | External Clock Source(外部発振源?)を使う |
| 0010 | 内部 RC 発振回路 8( 7.3-8.1 )MHz を使う |
| 0011 | 内部 128kHz(low power で高精度に作られていない) を使う |
| 0100-1111 | 水晶発振 |
| 1111 | 水晶発振(8.0-16.0)MHz (12-22 pF のコンデンサを噛ませる) |
}}
~
++ 拡張ヒューズ(Extended Fuse)~
Diecimila, Duemilanove Nano w/ ATmega168 では 0x00(00000000)です。
~
#style(class=table_left){{
| 名称 | ビット番号 | 意味 | Default の値 |h
|      |            |     |             |
|  | 7 | 不使用  |  |
|  | 6 | 不使用  |  |
|  | 5 | 不使用  |  |
|  | 4 | 不使用  |  |
|  | 3 | 不使用  |  |
| BOOTSZ1 | 2 | ブートローダのサイズを決める| ※1|
| BOOTSZ0 | 1 | |※1 |
| BOOTRST | 0 | リセット信号が来たときに、ブートローダ領域に飛ぶ(?)| 1 (設定されていない) |
}}
~
#style(class=table_left){{
| ※ 1 | BOOTSZ1:0 の設定と168Pの場合のブートローダ領域の大きさ |h
| | |
|  1           1      |    0.25 Kbyte ( 128 ワード )          |
|  1           0      |    0.5 Kbyte ( 256 ワード )          |
|  0           1      |    1 Kbyte (  512 ワード )          |
|  0           0      |    2 Kbyte ( 1024 ワード )          |
}}
~
※ 00 なら 1024words( アドレス 0x1C00-0x1FFF までの 2KB 分)。ブートローダの大きさはある程度大きいのでこれにする。
~
~
++ ロックビット(Lock Bit)~
応用プログラム領域の書き込みをできなくしたり(BLB0)、~
ブートローダ領域の書き込みをできなくしたり(BLB1)、~
場合によってはヒューズの書き込みも含めて禁止(LB)~
します。
~
#style(class=table_left){{
| 名称 | ビット番号 | 意味 | Default の値 |h
|      |            |     |             |
|  | 7 | 不使用 |  |
|  | 6 | 不使用  |  |
| BLB12  | 5 | ブートローダセクションへのアクセス | ※1 |
| BLB11  | 4 |  | ※1 |
| BLB02  | 3 | アプリケーションセクションへのアクセス | ※2 |
| BLB01  | 2 |  | ※2 |
| LB2    | 1 | フラッシュメモリ・EEPROMへのアクセス | ※3 |
| LB1    | 0 |  | ※3 |
}}
~
#style(class=table_left){{
| ※ 1 | BLB12:1 の設定 : ブートローダセクションの読み書きについて |h
| | |
|  1           1      |  ロックしない |
|  1           0      |  SPMによる書き込みを禁止する。          |
|  0           1      |  アプリケーションからのLPM(Load Program Memory)によって読むことを禁止。|
|  0           0      |  SPM(Store Program Memory)もアプリケーションからのLPM(Load Program Memory)も禁止。|
}}
※ ブートローダを書き込むときは"11"がよい。ブートローダを書き込んだ後は"00"でブートローダを守る。
~
#style(class=table_left){{
| ※ 2 | BLB02:1 の設定 : アプリケーションセクションの読み書きについて |h
| | |
|  1           1      |  ロックしない |
|  1           0      |  SPMによる書き込みを禁止する。          |
|  0           1      |  ブートローダからのLPM(Load Program Memory)によって読むことを禁止。|
|  0           0      |  SPM(Store Program Memory)もブートローダからのLPM(Load Program Memory)も禁止。|
}}
※ ブートローダから変更したいので設定する必要ない。 "11"でよい。
~
#style(class=table_left){{
| ※ 3 | LB2:1 の設定 : フラッシュメモリとEEPROMについて |h
| | |
|  1           1      |  ロックしない |
|  1           0      |  プログラミングを禁止する。          |
|  0           0      |  プログラミングも確かめ(Verify)も禁止する。|
}}
※ 設定する必要ない。 "11"でよい。
~
~
board.txt によると、Arduino で設定しているのは、次の2通りのようです。~
 0x0F(ブートローダ領域への書き込み読み取りを禁止)~
 0x3F(一切禁止しない)~
~
- パソコンとの通信~
-- ハードウェア~
パソコンからマイコン(ここの場合、ATmega168P)にプログラムを送り込みます。その時に、どのように通信するかというと、古式ゆかしいシリアル通信([[RS232C>http://www.picfun.com/serial02.html]])を使うのがマイコン側の標準的な仕様のようです。ここでは USB を介して通信しますので、USB と シリアル通信との間の変換が必要になります。[[大人の科学の Japanino>http://otonanokagaku.net/magazine/vol27/index.html]]では、CP2102 というチップを使って、また、[[Arduino Duemilanove>http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove]] では [[FTDI>http://www.ftdichip.com/]] のチップを使ってこれを実現しています。~
自作Arduino 互換について書いたもののうち、[[Duemilanoveタイプ>./Arduino の自作/DuemilanoveTYPE]]は FTDI を使っています。~
~
しかし、これを使わない方法もあります。[[USBasp>http://www.fischl.de/usbasp/]] という通信規約を使うと、直接マイコンと通信ができるために、中間の変換が不要になり、安く組むことができます。
~
自作Arduino 互換について書いたもののうち、[[USB直結タイプ>./Arduino の自作/USBTYPE]]は USBasp を利用しています。~
~
-- ソフトウエア~
FTDI にしろ、CP2102 にしろ、これを通して通信する場合にはそれぞれドライバが必要になります。また、最近のパソコンは RS232Cポートを持たないものが多くなりました。そこで、Windows に RS232C で通信できるようにドライバを組み込む必要がある場合があります。~
~
[[USBasp>http://www.fischl.de/usbasp/]] を使う場合にもやはりドライバを組み込む必要があります。
~
~
*** [[既製品の Arduino を使う>./既製品の Arduino を使う]] [#u3ac599e]
- [[既製品の Arduino を使う>./既製品の Arduino を使う]]
*** Arduino のプログミング [#mf825325]
- [[Arduino のプログラム開発環境を整える>./ArduinoIDE]]
- [[Arduino のプログラミングTips>./ArduinoTips]]
-- [[digitalWrite()を速くする>./ArduinoTips#rb8c22cc]]
*** [[Arduino 互換(もどき) の自作>./Arduino の自作]] [#a7709053]
- [[Arduino 互換(もどき) の自作>./Arduino の自作]]
*** [[Arduino 互換機の購入>./Arduino 互換機の購入]] [#g1f65ada]
- [[Arduino 互換機の購入>./Arduino 互換機の購入]]~
自作するよりも互換機を購入した方が楽な時代になったようです。
*** [[やってみました。>./みんな試作機]] [#x78bae08]
- [[つくってみたもの>./みんな試作機]]


トップ   新規 検索 最終更新   ヘルプ   最終更新のRSS