秋月電子Arduino互換基板(4)

第3回までで基板の組み立てが完了し、Ubuntu上の環境構築もできました。

現在の状態ではArduino互換基板上のATmega168/328はbootloaderが書き込まれていません。当然、Arduinoとしては動作しませんので、bootloaderの書込みを行う必要があります。bootloaderの書込みには、専用のライター(書込み器)が必要で、自分はAVRISP mkIIを使いました。有名なChaNさんのAVRライタ4種を始めとして、様々なキットや自作のライターもありますが、純正のAVRISP mkIIも秋月電子で3300円と比較的安価なので購入した方がいいかと思います。以降の説明ではAVRISP mkIIを使うものとして記載します。

(1)Arduino互換基板とAVRISP mkIIの接続、Arduino IDEの起動

Arduino互換基板をAVRISP mkIIと接続したら、互換基板およびAVRISP mkIIからのUSBケーブルをそれぞれホストPC(Ubuntuマシン)に接続します。自分はUSB HUB経由で接続しましたが問題はありませんでした。

接続したら、コンソールから「./arduino」でArduino IDEを起動します。

~$ cd arduino-0022/
~/arduino-0022$ ./arduino
Experimental:  JNI_OnLoad called.
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7
という表示が出て、ArduinoのIDEが起動するはずです。

(2)ターゲットボードの設定

起動したら、まず「Tools」→「Borad」でターゲットボードを設定します。どんなものがあるかについては、Arduinoのガイドに記載があります。今回は ATmega328を使用し、クリスタルは16MHz、ATmegaへの供給電圧は5Vですから、

  • Arduino Duemilanove or Nano w/ ATmega328
  • Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328

が候補ということになります。自分は後者を選定しました。

ボードの選択

(3)bootloaderの書込み

次に、bootloader書込みを行います。「Tools」→「Burn Bootloader」→「w/ AVRISP mkII」を選択すると、数秒でbootloaderの書込みが完了します。書込みが完了したら、一旦USBの接続を外し、AVRISP mkIIを外して、Arduinoだけを再度USB接続します。

ブートローダの書込み操作

(4)Arduino IDEとArduino互換基板の通信

次に、Arduino IDEとArduino基板の通信を成立させます。「Tools」→「Serial Port」→「/dev/ttyUSB0」を選択して、シリアルポートを選択します。(環境によって ttyUSB1だったりttyUSB2だったりするかもしれません)

シリアルポートの設定

(5)Exampleスケッチによる動作確認

次に、Exampleスケッチによる動作確認を行います。「File」→「Examples」→「1.Basics」→「AnalogReadSerial」を選択し、サンプルスケッチを開きます。

サンプルプログラムの読み込み

次に右矢印の付いたアイコン(Upload)を押すと、Arduino互換ボードへの転送が行われます。「Done uploading」という表示が出たら、もう一つ右の「Serial Monitor」というアイコンを押しますと、Arduino互換ボードから転送されてくる Analog in 0 のA/D変換値が延々と表示されます。Analog in 0 の端子を触ってみると、値が変化するので確かにどうさしていることが確認できます。

A/D変換の様子

秋月電子Arduino互換基板(3)

3回目はArduinoを動かすのに必要な環境の準備について整理します。Windows環境は別途とするとして、まずは自分が使っているUbuntu10.04LTS(32bit)環境について記載します。

(1)FT232RLのドライバ

FT232RLのドライバは、Linuxのカーネルバージョン2.6.31以降であれば初めから含まれています。

>$ uname -a
Linux atom 2.6.32-26-generic #48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010 i686 GNU/Linux

というように uname -a で表示されるバージョンが2.6.31より後であれば問題ありません。そのままAE-UM232をPCのUSBポートに接続すると

$ dmesg
[56118.520287] usb 1-7.3: new full speed USB device using ehci_hcd and address 4
[56118.618644] usb 1-7.3: configuration #1 chosen from 1 choice
[56119.069612] USB Serial support registered for FTDI USB Serial Device
[56119.069790] ftdi_sio 1-7.3:1.0: FTDI USB Serial Device converter detected
[56119.069853] usb 1-7.3: Detected FT232RL
[56119.069858] usb 1-7.3: Number of endpoints 2
[56119.069864] usb 1-7.3: Endpoint 1 MaxPacketSize 64
[56119.069869] usb 1-7.3: Endpoint 2 MaxPacketSize 64
[56119.069873] usb 1-7.3: Setting MaxPacketSize 64
[56119.070318] usb 1-7.3: FTDI USB Serial Device converter now attached to ttyUSB1
[56119.070362] usbcore: registered new interface driver ftdi_sio
[56119.070367] ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver
$

という感じでドライバが登録されます。

(追伸)実際に動かす場合には権限が必要です。こちらを参照してください。

(2)Arduino以外に必要なソフトウェア

Arduinoを動かすのに必要なソフトウェアは以下の通りです。(多分)

  • avrdude
    これはAVRISP mkIIを使ってブートローダを新品のATmegaに書き込むのに必要(だと思う)
  • gcc-avr
    GCCコンパイラです。Arduinoが多分裏で呼び出してます。
  • avr-libc
    AVR用の標準C言語ライブラリです。
  • openjdk-6-jre
    JAVAのランタイム です。

メニューの「システム」→「システム管理」→「Synaptic パッケージ・マネージャ」を起動して、クイック検索に「avr」と入力してこれらのものをインストールしておきます。もちろん、これらが依存するものも(表示にしたがって)インストールします。

(3)Arduinoそのもの

Arduinoのダウンロードページから「Linux(32bit)」を選択してダウンロードします。ダウンロードした「arduino-0022.tgz」はファイルブラウザを右クリックして、ディレクトリ付きで展開します。展開したディレクトリ(arduino-0022)は、ホームディレクトリ直下などの好きな場所(自分の場合)に移動します。
そこで、端末を開いて、そのディレクトリに移動して、そこにある「arduino」というスクリプトを実行します。

~$ cd arduino-0022
~/arduino-0022$ ./arduino
Experimental:  JNI_OnLoad called.
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7

実行すると上記のような表示がコンソールに出力され、

このようなArduinoのIDE(統合開発環境)の画面が表示されます。

秋月電子Arduino互換基板(2)

2回目は組立について整理します。すでに記載した内容とかぶるところがありますが、ご容赦を。

必要な工具などについては、一般的な電子工作と何ら変わらないので省略します。

組立は普通に指定された場所に指定された部品を背の低い順に半田付けしていくだけですが、ポイントだけ記載します。

(1)ICソケットの下に付ける部品

写真の様に、この基板はICソケットの下に抵抗を実装しなければなりません。したがって、これらの値は後で変更(交換)できません。これらの抵抗はLEDの電流制限抵抗なので、値が多少違っていても差し支えありませんが、気になる方は実際に使うLEDがどのくらいの電流でどのくらいの明るさなのか実験して調べておいた方がよいでしょう。
また、写真の中の赤で囲んだ部分はソケットを取り付けると、ソケットと干渉してしまいます。

自分の場合、取り付けるソケットは写真の赤丸の箇所の様にリブをニッパとカッターで削って干渉しないようにしました。

(2)背の低い部品から付ける・ICソケットやコネクタのハンダ付け

全ての部品を含めてということになりますが、基板を逆さまにしてハンダ付けしますから、部品が浮くと作業し辛いので背の低い部品からハンダ付けしていきます。その際、ピン数の多い部品(ソケットやコネクタなど)は対角のピンや一部の真ん中のピンだけを一度ハンダ付けして、浮きや曲がりを確認します。浮きや曲がりがないことが確認できたら残りのピンをハンダ付けします。一度3つ以上のピンをハンダ付けしてからでは修正は(普通の電子工作レベルの環境では)困難です。(専用の工具があれば難しくありませんが・・・)

途中まで組み立てるとこんな感じになります。

(3)極性のある部品に気を付ける

Arduino互換基板に搭載される部品のうち、極性がある物はその向きに十分注意します。

極性がある部品は、上の写真のうち明るい色になっているものです。その他の物は極性がないか、他の向きには取り付け不可能なものです。

(4)表面実装のクリスタルの取り付け方

表面実装のクリスタルは、以下の様にすれば普通のDIP部品として使えます。

これが改造前で、

これが改造後です。

部品のハンダ付けが終わったら、AE-UM232R、ATmega328を取り付けて完成です。

ショートピンの取り付け位置は上記写真を参考にしてください。このジャンパ配置はArduino互換基板をUSB給電動かす場合のものです。

秋月電子Arduino互換基板(1)

先に秋月のArduino互換基板の組み立てと動作確認までをざっと紹介しましたが、寝落ち寸前でメモしていたのでなんだかよくわからない内容になっています。後でみてもよくわからないのと、今のところ情報があまりない秋月Arduino互換基板(Akidukinoとでも呼びましょうか・・・)に関して整理するために改めてメモしたいと思います。(後で関連メモだけを閲覧できるようにタグもAkidukinoとでも付けておきます)

1回目はまず部品収集について整理しておきたいと思います。(情報は全て2011年1月10日現在のものです。)

(1)基板
これは言うまでもなく秋月電子で調達します。 モノは「ATMEGA168/328用マイコンボード(I/Oボード)」で通販コード「P-04399」です。このページの下の方に「実装部品一覧(パーツリスト)」というPDFファイルへのリンクがあります。そのまま集めると嵌りますので要注意です(後述)。
ここからは部品番号としてこの基板および部品表の記述を引用します。

(2)IC1
キーデバイスとなるATmegaマイコンです。部品表ではATmega8/88/168/328が使えるように書いてありますが、このうちArduino-0022に同梱されているブートローダはATmega8/168/328だけです。価格も、ATmega8/88Pが180円、ATmega168P(通販コード:I-03033)が200円、ATmega328P(通販コード:I-03142)が250円と大差がありません。それぞれの差はプログラムメモリ容量(スケッチのサイズ)の差ですが50-70円の差なら迷わずATmega328Pを選択するべきです。
また、実装にあたってはICソケットを使います。28pinのナロータイプで、丸ピンタイプ(通販コード:P-01339)でも普通のもの(通販コード:P-00013)でもいいと思います。ただ、普通のものは10個単位になってしまいますが・・・。

(3)IC2
電源用三端子レギュレータです。TO220タイプの7805であれば何でもいいと思いますが、フルモールドタイプ(放熱板の部分が金属ではないもの)の方がどこかとショートする心配をしなくてもよくなるのでベターです。部品表ではNJM7805(通販コード:I-00161、5個250円)が指定されています。自分はL7805(通販コード:I-01373、4個100円)を使用しましたが、若干足の加工が必要でした。
また、7805以外でも使用可能なものはあると思いますが、低ドロップタイプのものなどは足の並び順が異なるので十分注意してください。

(4)U1
AE-UM232R(通販コード:K-01977)のFT232RLを使用したUSBシリアル変換モジュールです。デバッグ中は必須ですが、デバッグが終わって単独で動かす場合には必要ないと思いますので、ソケットに実装します。24pinワイドタイプで、こちらも丸ピンタイプ(通販コード:P-00032)でも普通のもの(通販コード:P-00011)でもいいと思います。やはり普通のものは10個単位になってしまいます。

(5)D1
ACアダプタとしてどちらの極性のものでも使用可能にするためについているダイオードブリッジです。 部品表ではDI1510(通販コード:I-00531)が指定されていますが、これは50個入り950円です。自分はDF06M(通販コード:I-01046、7個入り100円)を使いました。

(6)TX,RX,PWR,L
3ミリのLEDならなんでもOKです。ただし、青や白などのLEDの順方向電圧降下の大きいものを使う場合はいくつかの抵抗を少し小さくする必要があるかもしれません。これらの抵抗はICソケットの下になるので、後からの交換は容易ではありません。自分は手持ちの3ミリのオレンジとグリーンのLEDを使いました。

(7)DC
DCジャックです。秋月でよく見かけるもの(通販コード:C-00077)です。自分は(前に秋月で買った)手持ちのものを使いました。 ダイオードブリッジでの電圧降下が2V弱、7805での電圧降下が2V程度見込まなければなりませんので、ACアダプタは9V以上のものが必要です。秋月でたくさん売っているタイプのものでOKです。

(8)C1-4
これは0.1uFの積層セラミックコンデンサならなんでもOKです。基板の穴の間隔が5ミリピッチなので、新規に買うなら5ミリピッチが良いでしょう。手持ちのものを使う場合で足を加工する場合はコンデンサ本体を壊さないように気をつける必要があります。部品表の通販コードはP-02211で、10個入り100円です。ちなみに、店頭ではカウンターのところで1個5円でばら売りしてました・・・。
Arduino-duemilanoveの回路図では順にC1(ATmegaのパスコン),C13(ホストからのリセット生成),C9(Arefのパスコン),C5(三端子レギュレータのパスコン)に相当します。

(9) C5-6
100uFの電解コンデンサです。Arduino-duemilanoveの回路図ではC6,C7に相当します。ACアダプタの電圧に対してマージンが十分あればなんでもOKですが、部品表で指定されているもの(通販コード:P-03122、1個10円)も含め、大抵の物は直径が細く背が高いです。Arduinoでは上にシールドを重ねる必要があるので、背の高いタイプを何の工夫もなく取り付けると干渉してしまいます。基板のパターンは太くて背が低い電解コンデンサを付けられるようになっています。秋月電子では通常の取扱いでは残念ながらないようです。自分はたまたま見つけた八潮店限定のテーピング品の電解コンデンサ(背の低いタイプ)を使いました。シールドを付けることを考えているのであれば、なんとかして背の低いタイプを調達しましょう。

(10)C7-8
クリスタルと共に取り付ける22pFのセラミックコンデンサ(通販コード:P-03620、20個入り100円)です。
クリスタルの代わりにセラミック発振子を使う場合は必要なくなります。Arduino-duemilanoveの回路図ではC2,C3に相当します。

(11) S1
リセットスイッチとして使うタクトスイッチ(通販コード:P-03646、1個10円)です。

(12)Q1
ATmegaの動作クロックを作り出すクリスタルです。部品表では20MHzが指定されていますが、Arduinoのブートローダは8MHzと16MHzのイメージしか同梱されていませんから、20MHzにするとブートローダの改造とコンパイルから始めなければなりませんので、ハードルが一気に上がってしまいます。ここは迷わず16MHzを使用するべきです。部品表の指定に近いものを使うなら通販コードP-00545のDIPタイプ(10個入り500円)ですが、自分は表面実装タイプのP-01767(5個入り200円)をそっと足を伸ばして使いました。表面実装タイプを足を伸ばして使うと、ケースでのショート防止のためのプラスチックの座布団(?)もそのまま使えますので便利(特にユニバーサル基板の場合)です。安く済ませるなら、セラミック発振子(通販コード:P-00525、1個40円)でもいいかもしれませんが、その場合はC7-8を削除するのと、ヒューズビットの変更が必要かもしれません。

(13)R1
Arduino-duemilanoveの回路図でもR1に相当する、リセット信号のプルアップ用の10kΩの抵抗です。自分は10kΩは手持ちがあると思ったらなかったので、6.8kΩを使いました。

(14)R2-7
LEDの電流制限用の抵抗(R2,R5-7)や、FT232RLとATmegaの間のUART信号の保護用の抵抗(R3,R4)です。LEDが赤や緑であれば1kΩで問題ないでしょう。Arduino-duemilanoveの回路図では順にR7,R8,R9,R6,R4,R5に相当します。

(15)ピンヘッダ
自分は秋月で買った長い物(通販コード:C-00167C-00082)をニッパで適当な長さに切って使いました。

(16)ショートピン
どこで買ったか、手持ちのものです。

(17)J1-4
ピンソケットは6ピンのものはC-04045そのもの、8ピンのものは店頭になかったので長めのものを切断して8ピンにして使いました。

以上で部品収集については終わりです。

WordPressへ移行テストしています

これまで、Bloggerでメモを書いて公開してきたが、なんとなくレンタルサーバーを試してみたくなっていた(^^;ところにDomainKingのキャンペーン期間が重なったので、ついポチッと申し込みをしてしまいました。

あまり目的をもってレンタルサーバーを申し込んだわけではないのですが、その後にMovableTypeとWordPressの存在を知り、Webで情報を集めた結果、WordPressを試してみることにしました。

使い方がまだよくわかっていないこともありますが、できあがった物はWordPressの方が綺麗です。しかし、管理画面はこれまで使っていたBloggerの方が使いやすい(慣れもある?)感じです。もう少し動かしてみて、最終的にどうするか決めたいと思います。

秋月電子Arduino互換基板にトライ(動作編)

Arduinoの環境はUbuntu版を使用した。

使用にあたってはリポジトリを追加して、apt-getでインストールする手もあるようだが、その方法ではバージョンが0018と古いのでやめた。結局、Linux用のtgzファイル(現状はarduino-0022.tgz)をダウンロードして、そのフォルダの中の「arduino」というシェルスクリプトを走らせるだけである。実行にあたっては、以下のものが必要とのことである。

  • Javaのランタイム
    これは openjdk-6-jre をインストールして使用した。
  • avr-gcc および avr-libc
    これは既にSynapticからインストール済み。

まず Bootloaderを書き込まなければならないので、以下の様に AVRISP mkII を接続して環境に問題がなければ、./arduino で起動する。

起動したら、「Tools」→「Board」→「Arduino Pro or Pro Mini(5V、16MHz) w/ ATmega328 」でボードの種類を指定する。さらに、「Tools」→「Burn」→「AVRISP mkII」→「Arduino Pro or Pro Mini(5V、16MHz) w/ ATmega328 」でブートローダの書込みができる。

この後、AVRISPmkIIを外し、A/Dのテストを行う Example を読み込んで実行すると、無事にスケッチを実行できた。

秋月電子Arduino互換基板にトライ(組立編)

しばらく前に、Arduinoへの移行を考えていることを書いたが、秋月電子でArduino互換ボード(AE-ATmega)を出していることをどこかのページで教えてもらった。(ソースは失念。すみません。)

商品名のページでは、「ATMEGA168/328用マイコンボード(I/Oボード)」と記載されているが、その先の実装部品一覧ではしっかり「AE-ATmega(Arduino互換)ボード 部品表」と書かれていて、Arduino互換であることが見た目だけではなく確認できる。

そこで、このボードを購入し、組み立ててみたのでレポートする。

まず、部品は特殊な物は何もないが、Arduino互換とするためには、リスタルの周波数は実装部品一覧に書かれている20MHzではなく16MHzでなければならないことに注意する必要がある。自分が使った部品について、実装部品一覧との違いを以下に記載する。

  • IC1はATmega328
  • IC2はL7805(I-01373、4個で100円)
    ※三端子レギュレータは低ドロップタイプのものは端子配置が異なるので、他のものを使うにしても7805が無難。
  • D1はDF06M(I-01046、7個で100円)
    ※他のものを使う場合は端子配置に注意。
  • LEDは手持ちのものを適当に色を使い分け
  • C5-6は八潮店限定の100uF25V(10個100円)、背の低い物はこの八潮店限定品しか見当たらなかった。
  • Q1は表面実装用16MHz(P-01767、5個200円)を足を伸ばして使用。
    パターンをみるとセラロック(セラミック発振子)でもいけそう。 その場合、C7-C8が必要なくなるので嬉しいかも。
  • R1は10kΩの手持ちがなかったので、6.8kΩを使用
  • その他は適当に・・・(手持ちの部品を使っただけ・・・)

部品のスペックを確認した後、Arduino-duemilanoveの回路図を参考にしながら基板のパターンを追いつつ部品の実装を行った。

まず、抵抗から取り付ける。一部ICソケットの下に入るものがあるので、注意が必要。

ICソケットは手持ちのものを利用したが、抵抗と干渉するので一部削って使用した。写真では奥側の方(写真の真ん中辺りの奥のピンのそば)を加工してある。その後、背の低いものから順に実装する。ICソケット、電解コンデンサ(C5、C6)とダイオードブリッジ(D1)、LEDには極性があるので要注意。

組み立てが完了すると、

のようになる。

XBee応用製作第1弾 リモートレリーズ 実験編

前回の調査結果に基づいてレリーズケーブルの改造を行い、以下のような形態で実験に成功した。

なんのことはなくて、ATmega88のPORTDにTD62083を接続して、シャッター端子を駆動しているだけ。

カメラとつなぐとこんな感じ。

XBee親機の先のTeraTermからキー入力するとピント合わせとシャッターを切ることができた。

XBee応用製作第1弾 リモートレリーズ 調査編

無事にXBeeが動くようになったので、その応用を考えてみることにする。
第一弾は最近使わなくなったデジカメSP-560UZのリモートレリーズに挑戦しようと思う。
普通、リモートレリーズというと、

な感じのケーブル(これはETSUMIのRM-L1-O2・・・のはず)を付けて、有線でシャッターを切るのだが、今回はそれをXBeeとAVRを使って無線式に改めることにする。早速中をばらしてみると、

な感じの基板が出てきた。左上のジャックは2.5ミリのステレオミニジャックで、どうやらカメラ以外にもう1台レリーズできるようになっているようである。

今回は、有線レリーズの機能を生かしたまま無線レリーズの機能を追加したいので、この2.5ミリのステレオミニジャックを入力端子として使うことを考えてみることにした。(注:まだ実際に改造して確認したわけではないので注意!)

右上のケーブルの黒はGNDで、シャッターを半押しすると白がダイオードを経由してGNDへ、さらに全押しすると赤がダイオードを経由してGNDへ落ちるようになっている。さらにパターンを追っていくと、左上のジャックからは写真で横向きになっているダイオード2つを通して、真ん中のスイッチに接続されているようなので、この横向きのダイオード2つを取っ払い、オレンジで書いた線の通りに接続すると、2.5ミリステレオミニジャックから制御できるようになるはず。2.5ミリのミニジャックは根元がGND、RチャンネルをGNDに落とすと半押し、Lチャンネル(先端)をGNDに落とすと全押しになるはずである。(しつこいけど、動作未確認)
この状態でSWを押すとショートするように見えるけど、実際には2.5ミリのミニジャックからはオープンコレクタまたはオープンドレインで駆動するので、問題は生じない。

~つづく~

ATmegaとのシリアル通信~AVRLibのtimerのテスト(その後)

しばらく前にAVRlibのテストをしていましたが、その際にPWMが動いていないようだ、ということを書きました。

結局、端子の割り付けの差だったようで、
  // set the OC1x port pins to output
  // We need to do this so we can see and use the PWM signal
  // ** these settings are correct for most processors, but not for all
  sbi(DDRD, PD4);
  sbi(DDRD, PD5);

の部分を、ATmega88のOC1xの端子配置に合わせて、
  // set the OC1x port pins to output
  // We need to do this so we can see and use the PWM signal
  // ** these settings are correct for most processors, but not for all
  sbi(DDRB, PB1);
  sbi(DDRB, PB2);
に直してやると、あっけなく動作しました。
(よく見ると、コメントに違うCPUもあるよ、って書いてありますね・・・)
その際にいろいろと調べていたのですが、結局開発環境としてはArduinoへの乗り換えを検討しています。
死蔵しているATmega88がいっぱいあるのでちょっともったいないのですが、趣味の世界では他の人が築き上げたものを使わない手はありません。貴重な時間は最終的なアプリケーションに費やした方が楽しいですし。(それがArduinoがウケている理由だと思うのです)
で、調べてみると、Arduinoの世界では、ATmega168とかだと19200bpsでのシリアル通信が使われるようなので、XBeeの通信速度も19200bpsに変更しました。