秋月ZigBeeモジュールの先にAVRをつなぐ

XBeeによって、リモートUARTの環境を構築、ループバック動作を確認できたので、その先のコントローラとして、AVRをつないでみることにしました。AVRにしたのは、Linux環境で閉じた開発ができるからということと、手持ちに ATmega88 が何個か転がっていた(PIC24FJ64も転がっていますが・・・)からです。

Zigbee子機をもう少し大きめのブレッドボードに移植し、ATmega88と同居させました。
・・・といっても、写真では見えないですね。書込みは AVRISPmkII で行っています。
ISP用の端子6本は写真右側に写っているブレッドボード用の自作アダプタを介してその下のATmega88につながっています。

その他、シリアル通信用の端子をXBeeとの間で接続しました。

このATmega88に対してシリアルでコマンド/ステータス通信をさせるようにしていきます。

LinuxでFTDIのFT232RLを使う(3) X-CTUをWINE経由で使う

もっとダイレクトにX-CTUをWINEで使っている方がいるようなので、試してみました。

  1. X-CTUのインストーラに実行権限を付ける
  2. X-CTUのインストーラをWINE経由で実行させ、インストールを行う。
  3. WINEに仮想COMポートを認識させるため、デバイスファイルへのシンボリックリンクを貼る
    「 ln -s /dev/ttyUSB1 /home/tom/.wine/dosdevices/com11」として、Windowsから見たCOM11を作成する。
  4. X-CTUを起動する。
  5. Windowsであれば、全てのCOMポートを勝手に検出してくれますが、WINEでは上手くいきません。そこで、X-CTUの「PC Setting」の項目で、「Add User Com Port」のところにポート番号(上記のCOM11の場合は「11」)を入れて、「Add」を押してポートの存在を教えてやります。
  6. 『Test/Query』を実行する

で接続確認ができます。しかし、残念ながら、Modem Configuration のタブはファームウェアが見つからないとかで、ダウンロードを試みるのですが、それでもみつからないということで、動作しませんでした。ま、ターミナルが動くだけでもずいぶん助かりますので、よしとします。

LinuxでFTDIのFT232RLを使う(2) ターミナルソフト編

続いて、通信ターミナルです。
通信ターミナルは、Minicomを使ってみることにしました。例によってSynapticからインストールします。
Minicomはモデムでの通信用のソフトなので、そのまま起動するとモデムを初期化しようとします。
そこで、minicom -s で設定画面に入り、モデム初期化文字列を全て消去します。
その後、設定ファイルを保存するのですが、/etc/minicom の下に保存しようとするため、このディレクトリのパーミッションを開けておきます。保存されたファイルを以下に示します。

$ cat minirc.dfl
# Machine-generated file – use “minicom -s” to change parameters.
pu port /dev/ttyUSB1
pu baudrate 9600
pu minit
pu mreset
pu mdialpre
pu mdialsuf
pu mdialpre2
pu mdialsuf2
pu mdialpre3
pu mdialsuf3
pu mconnect
pu mnocon1
pu mnocon2
pu mnocon3
pu mnocon4 VOICE
pu localecho Yes
$

ただ、ポートは場合によって変わるので、dmesgなどで確認した後変更が必要です。

これで一応、XBeeをコントロールすることはできるのですが、改行の処理は今ひとつ上手くいきません。
まあ、動作しているかどうかの確認くらいはできますが・・・。

LinuxでFTDIのFT232RLを使う(1) ドライバ編

ZigBeeモジュールであるXBeeが動き始めたのですが、できればこれをLinuxマシンに接続して動かしたいと思っています。すなわち、秋月のFT232RLモジュールをLinuxで使いたいのです。

早速、FTDIのサイトを見てみると、Linux版のドライバも存在しています。そのコメント欄を見ると、「Included in 2.6.31 kernel and later」と書かれています。つまり、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

ということで、2.6.32なので大丈夫そうです。
おそるおそる、Linuxマシンに挿してみると、

$ 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
$

ということで、ttyUSB1として認識されているようです。ただし、

$ ls -la /dev/ttyUSB*
crw-rw—- 1 root dialout 188, 0 2010-12-08 07:31 /dev/ttyUSB0
crw-rw—- 1 root dialout 188, 1 2010-12-08 23:06 /dev/ttyUSB1
$

となっているので、dialoutグループに自分のユーザ名が入っていないといけないようです。

ZigBeeモジュール通信テスト

秋月電子で買ってきたZigBeeモジュール(XBee)ですが、ようやく通信テストにこぎつけました。

まず、子機(写真では下側のXBee)に電源を供給するため、ニッケル水素電池から3.3Vを供給する子基板(写真では縦になっていてわかりにくいですが、スイッチと3.3Vのロードロップレギュレータとコンデンサ、ポリスイッチが載っているだけです)を作りました。そして以下のように接続しています。

  • XBeeの1ピンに3.3Vを供給
  • XBeeの2ピンと3ピンを接続(ループバック状態)
  • XBeeの10ピンをGNDに接続
  • XBeeの15ピンをLEDに接続
  • XBeeの20ピンはハーネスを挿してあるだけ(必要に応じてGNDにチョンチョン、とつなぐ)

親機(写真では上側のXBee)は単体でのテストから少し変えて、XBeeの13ピンをLEDに接続していたのを15ピンに変更することで、XBeeの動作状態が多少でもわかるようにしています。

20ピンは、こちらのページに記載のあった
  • プッシュスイッチ1回でネットワークへの参加。他のXBeeモジュールのLEDが1秒間高速点滅。
  • プッシュスイッチ4回で他のネットワークへ参加してしまった場合にネットワーク設定を消去してソフトリセットする。
のに使っています。
設定は、X-CTUを使って以下の設定を行いました。
  • 親機側のFunction Setを「ZIGBEE CORDINATOR AT」に変更して「WRITE」
    (これはネットワーク内に1台必要なのだそうです)
  • 両方のDH/DLパラメータを相手のシリアルナンバー(SH/DL)に変更して「WRITE」
これで、以降は電源ONでつながるようになりました。この状態なら、1対1接続であれば以降はXBeeの存在を意識することなく使えることになります。
さらに、X-CTUのRangeTestを使って、到達距離を確認してみました。当方は鉄筋コンクリートのマンション住まい(いわゆる3LDKのごく普通の間取りです)で、PCのある部屋は共用通路側です。XBeeはベランダにおいて、太陽電池動作で温度や湿度、気圧などを遠隔で測ってみたい、と思って購入しましたので、まずベランダに子機側を置いて試してみました。間にあるものと言えば、専有部の壁、水回り(洗面所、風呂場)、和室の押入れ和室の窓などで、距離にして15メートルくらいでしょうか。結果としては、まったく通信できませんでした。
距離を短くして、リビングルームの近い側に置いたのですが、通る確率は10%くらいでやはりダメ。廊下を挟んで反対側の寝室のベッドの上では概ね通信できるのですが、それでもエラーが発生するような状態でした。この時の状態は、距離にして5メートルくらい。専有部内の壁〔おそらく薄いスチール+石膏ボードだったと思う〕が2枚ある感じです。親機側はPCがそばにあったり、LCDモニタが2枚すぐまん前にあったりして状態がよくないのですが、それにしても鉄筋コンクリート環境ではかなり通信距離は短いようです。
今度秋月電子に出かけたときには、送信出力の大きいXBeeProを入手したいと思います。
≪参考にしたページ≫
  • ボクにもわかる地上デジタル – 地デジ方式編 – ZigBee無線リモコン –

秋月ZigBeeモジュールとの接続テスト

なんとかブレッドボードに載るようになったXBeeですが、X-CTUを使ってモジュールとの接続テストを実施しました。

右側のXBeeはまだ何もつないでいません

XBeeの電源は3.3Vの50mA以下ですので、秋月電子のFT232RLモジュールから供給させることにしました。接続は以下の通りです。

  • XBeeの1ピン(VCC)とAE-UM232RLの19ピン(3V3)
  • XBeeの2ピン(DOUT)とAE-UM232RLの5ピン(RXD)
  • XBeeの3ピン(DIN)とAE-UM232RLの1ピン(TXD)
  • XBeeの10ピン(GND)とAE-UM232RLの24ピン(GND)
  • XBeeの12ピン(CTS#/out)とAE-UM232RLの10ピン(CTS#/in)
  • XBeeの13ピン(ON)を抵抗・LEDを通してGNDへ
  • XBeeの16ピン(RTS#/in)とAE-UM232RLの3ピン(RTS#/out)
  • XBeeの1ピン(VCC)とAE-UM232RLの24ピン(GND)

WindowsXPマシンにFT232RLのドライバは元々入っていましたので、PCに接続し、COMポートを確認して、Modem ConfigurationのタブでReadを押すと、以下のように設定情報を読み取ることができました。

このままモジュール間の接続テストを行いたいところですが、FT232RLの供給可能な電流は50mA、XBeeの消費電流は最大45mAです。電流容量が不足しており、1つのFT232RLから供給することはできませんので、ここまでとしました。

秋月でZigBeeモジュールを買ってきた!

土曜日に秋月電子に行ってきたので、先日から気になっていたXBeeモジュールを買ってきました。

通信相手がいなければ意味がないので2個買ってきました。
写真では見えないですが、2ミリピッチのコネクタも付いています。

XBeeとXBeeProの両方があったのでちょっと焦りましたが、送信出力の差のようですので、今回はProではないZigBeeの方を選択しました。
すでに調べていた通り、このモジュールは2ミリピッチのコネクタで外部と接続しますので、通常のユニバーサル基板やブレッドボードに搭載するには何らかの工夫が必要になります。定番は、スイッチサイエンスのピッチ変換基板なのでしょうが、実験は横着して直接半田付けしてしまうつもりでいました。
・・・が、秋月店内を見回していたら、2ミリピッチのユニバーサルボードがありました。そこでこれを使って、こんなものを作ってみました。

ガラスエポキシ基板どうしなので、2液混合のエポキシ系接着剤でガッチリ
固定できます。元の基板と変わらないくらいの強度が出ます。

見たまんまですが、2.54ミリピッチのユニバーサル基板を細く切り出し、半分に切った2ミリピッチのユニバーサルボードとエポキシ系の2液混合タイプの接着剤で接着しました。
そして2.54ミリピッチの部分にはピンヘッダを、2ミリピッチの部分にはZigBeeに同梱されているソケットを半田付けし、その間を1対1で接続してあります。

今日のところは疲れたのでここまでです。

JPEGのEXIFデータ編集をUbuntuでやってみる

今作っているものの写真をアップロードしようかと思っているのだが、JPEGにはEXIFデータという撮影日時やGPSに基づく撮影場所などが併せて記録されていて、注意しないと自宅の場所を全世界に大公開、ということになってしまう。

そこで、Linux(Ubuntu)でEXIFデータの編集方法を調べてみると、jhead というのが比較的一般的なようである。例によって Synapticパッケージマネージャで検索すると、パッケージとして存在しているので、インストール指定をすると、依存するlibjpeg-progsというのも併せてインストールするか聞いてきたので、チェックマークをつけて、インストールを行う。インストールはあっという間に終わる。

コンソールを開いて、

$ jhead -h

とすると、簡単な使い方が出てくる。
自分が狙う使い方は、

$ jhead [options] files

で自分が使いそうなオプションとしては、

  • -mkexif
    新しい最小限のEXIFセクションを作成する(既存のEXIFは上書きされる)
  • -purejpg
    全ての不要なデータをJPEGから削除する
    (ここで言っているJPEGがEXIFを含まないJPEG規格そのものを指しているのだろうか??)

だけだろう。

早速、試してみることにする。まず、適用前の写真のうちの1枚のEXIFは以下のようになっている。(ファイルブラウザを右クリックしてプロパティを表示した)

ごらんの通り、デジカメはDSC-HX5Vで2010年9月21日に撮影したということがわかる。画像のサイズは、撮影時は最大解像度で撮影しているのだが、写真を探したりPCで見たりする場合には大きすぎて遅いので、irfanviewで一括解像度変換をかけて縦横の長辺が1200画素になるようにしてある。ツールによってはこの時にEXIFデータが落ちるものもあるようだが、irfanviewはEXIFデータはGPSデータを含めて保存されるので、GoogleEarthなどで撮影場所などの表示ができて自分で楽しむ分には非常に楽しい。一方で、余計な情報を含んでいるので、このままWebに使うには危険なのである。

そこで、写真が保存されているディレクトリにて、

$ jhead -mkexif *

とすると、フォルダ内の画像ファイルの余計なEXIFをすべて初期化してくれる。消去後の同じファイルの情報を確認すると以下のようにすっきりしたものになっていることが確認できる。

ただ、すべて消えるのかと思っていたが、それでも撮影日時だけは残っている。
そこで、

$ jhead -purejpg *

とすると、

となって、日付情報もなくなった。これで安心してアップロードができる。
アップロードするファイルが集めてある素材候補のフォルダがあれば、上位ディレクトリなどで、

$ jhead -purejpg */*
などとすると、一つ下の階層のディレクトリのJPEGファイルが一気に処理できるので楽ちん。

 

EagleCAD設計メモ ~そんなに甘くなかった~

EagleCADでの設計&OLIMEXへの発注を目指しているのだが、ライブラリについてはそんなに甘くなかったようである。ライブラリを選別して、そこから基板を設計すればいいかと思っていたのだが、いろいろと落とし穴があるようである。

まず、ULPの statistic-brd.ulp にパターンをかけると設計したボードの統計情報がとれるようなのだが、いろいろと問題がありそうである。うーむ、と思って調べてみたところ、皆さんいろいろ苦労しているようなのである。

「DRILL/HOLE」のシートを見ると、使用しているドリルが、0.6mm、0.8mm、1.0mm、1.1mmの4種類になってしまった。OLIMEXの標準は0.7mm、0.9mm、1.0mm、1.1mm、1.3mm、1.5mm、2.1mm、3.3mmだけなので、0.6mmと0.8mmは非標準である。

「BOARD」のシートを見ると、

・0.2540 - Wire width < 0.3000
・0.2540 - Pad Restring < 0.3000
・0.2032 - Via Restring < 0.3000
・0.2540 - Clearance < 0.3000
・0.0000 - Isolate Polygon < 0.3000
のところに黄色い「!」マークがついている。DRCでは10milsでOKになっているにも関わらず、3番目のVia Restringの部分が 8mils となっているので、実働15日コースになってしまう。

また、使用しているレイヤーは、

1 Top
16 Bottom
17 Pads
18 Vias
20 Dimension
21 tPlace
23 tOrigins
24 bOrigins
25 tNames
26 bNames
27 tValues
28 bValues
29 tStop
30 bStop
32 bCream
36 bGlue
40 bKeepout
44 Drills
51 tDocu

52 bDocu
となっている。赤字はこちらのページで紹介されているOLIMEX標準レイヤである。(OLIMEXのページで見つけられなかった・・・と思ったら、このページの真ん中辺りに、「IMPORTANT! When you send Eagle .BRD files for processing please note that we process only with EAGLE’s DEFAULT post-processor setings: TOP: Layers 1, 17, 18; BOTTOM: Layers 16, 17, 18; SILK: Layers 20, 21, 25; TOPMASK: Layer 29; BOTTOM MASK: Layer 30 If you put information on other layers please post-process the BRD file by yourself and switch ON the layers you are using, then send us the Gerbers and NC drills for manufacturing.」という記載がありました。)

ライブラリは実際に使うものを一点一点確認しながら集めるしかないのかも。

≪参考にしたページ≫
OLIMEXで基板を作る
EAGLE and OLIMEX

Ubuntuに回路シミュレータをインストール

久しぶりにアナログ回路シミュレーションをやってみようと思う。
といっても、本格的にやるわけでもないし、趣味の範疇なので以前購入した BLUE BACKS の「電子回路シミュレータ入門」(加藤ただし著、講談社、ISBN4-06-257344-X)に付属していた CircuitMakerのStudent版にすることにする。
このソフトはそもそもWindows版なのだが、最近の作業はほとんどUbuntuでやっていることと、最近のWINE(Windowsのエミュレータ)の出来はかなり良くなっていると聞いたので、WINE上で動かしてみることにした。
実際に動かすまでの手順は以下の通り。

  1. WINEのインストール
    これは簡単で、Synapticパッケージマネージャで、「WINE」を検索するとWINEがでてくるので、それを選択して待つだけ。バージョンは1.2のようである。
  2. CircuitMakerのインストールファイルを適当なところにコピーする
    添付CDーROMに入っていたCircuitMaker Student版のインストーラでは、実行属性がついていないので蹴られてしまう。
    なので、ホームディレクトリ以下の適当な場所にコピーし、 chmod u+x で実行属性をつける。
  3. 上記2で実行属性をつけたインストーラをファイルブラウザで右クリックし、「Wine Windows Program Loaderで開く」を選択すると、CircuitMaker Student版のインストーラが起動する。
    後はインストールはインストーラ任せ。Windowsと何も変わるところは無い。
  4. 起動は「アプリケーション」→「Wine」→「Programs」→・・・・以下に CircuitMaker があるので、それを起動する。

と、簡単そのものであっさり動く。無事にサンプル回路のシミュレーションも動作した。