2013年01月15日

あけましておめでとうございます & Arduino Dueゲット!

あけまして、おめでとうございます。
本年もよろしくお願い致します!

最近は、積み基板を極力増やさないために、どうせ使用しないとわかる基板購入は控えようと思ったりしています。(部屋にある基板が大変な分量になってまして、しかも既に古いみたいなものばかりになりつつあり)
逆に言えば買うからには、ちゃんと使っていくぞという気持ちもありまして。まぁ、なんだかんだ多少積むでしょうけど。。。^^;

それはそれとして、僕もArduinoマイコンボードに手を染めてから既に2年経とうとしてるようで、時間の経つのってはやいです。その間にArduinoのボードもいくつか買いましたが、とうとうAVRマイコンではない純正のArduinoボードの「Arduino Due」を先日ゲットしました〜!わーい!もちろん使う気満々ですよ!
IMG_20130106_191210resized_.jpg

このボードはまだなかなか入手困難なところではあるようなのですが、デジキー(http://www.digikey.jp/)では買えるそうで、アンドロイドの会の吉田さんから声かけいただきまして、購入に便乗させていただき、年末にボードがゲット出来ました。
このボード、おおまかなハード構成としては、Google I/O 2012で公開されたADK2012のメインボードに近いと思います(僕も持ってないので、公開されている情報から、たぶん・・・)。

Arduino Dueのボード外観は、Arduino Megaに似ています。というわけで、過去の僕が購入したArduinoボードと並べて写真取ってみました。
左から、Arduino Due、Arduino Mega ADK、Arduino Leonardo、Arduino Uno、Arduino Duemilanove(互換ボード)です。

IMG_20130106_225155resized_.jpg

ArduinoマイコンボードってUSB-Bコネクタがフルサイズのものが多かったんですよね。一方、僕個人としては、フルサイズのコネクタを使った機器を最近あまり使ってない。だから、ケーブルもあまり持ってない。持ってても樹脂がかなり硬化してたり。
そんな中、Arduino LeonardoからのMicroUSBコネクタ採用は結構うれしかったです。

Arduinoマイコンボードの多くにはUSBポートが搭載されていまして、おおまかには以下の種類に大別できそうです。
(1)メインマイコンとUSBシリアル変換チップ(FTDI)の構成 : Arduino Duemilanove等
(2)メインマイコンとUSBシリアル変換チップ(AVRマイコン)の構成 : Arduino Uno、Arduino Mega、Arduino Mega ADK等
(3)メインマイコンだけの構成(メインマイコン搭載USB) : Arduino Leonardo


Dueは、上記の(2)と(3)の特徴を併せ持っています。更に、メインマイコン(ATSAM3X8E)はUSB On-the-Go(USBホスト&デバイス)を搭載している為、USBデバイス側のインターフェースを搭載した機器と接続することも出来ます。

BOARD_SIDE.jpg

上記はArduino DueのUSBコネクタがある側の写真です。左側が「NATIVE USB」、右側が「PROGRAMMING」となっていて、左側はメインマイコンであるATSAM3X8Eに接続されている側になります。

コネクタの形状を見ると、左側がMicroUSB-ABコネクタになっています。ここにUSBホスト変換ケーブルを接続することで、外部のUSBデバイスとやりとりする事に使用出来ます。コネクタ形状はMicroUSB-ABですが、USB-Aとの変換コネクタはMicroUSB-AでもBでも、使用できるようです。

例えば、これとか(Micro-BとUSB-A変換ケーブル)。

iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK
バッファロー (2011-11-01)
売り上げランキング: 115


もちろん、以下のようなMicroUSB-AからUSB-A変換ケーブルも使用出来ます。



さて、今までのArduinoとArduino Dueがどう違うのか?というのは気になる点です。

まず大きく異なるのはメインCPUコアが異なることです。これまでのArduinoマイコンボードで使用されていたのはATMEL社のAVRという同社独自RISCコアでした。クロックは16[MHz]や8[MHz]など。
Dueで使用されているメインチップは同じくATMEL社のデバイスであるものの、CPUコアは32ビットのARM Cortex-M3です。CPUクロックは84[MHz]。96[KB]のRAMと512[KB]のFlash ROMを搭載します。
軽く比較しても、パフォーマンスは高くなっているはずでしょう。

その他、2chのDACやCAN BUSなど、いろいろ今までのArduinoよりもI/Fが増えていますが、これは少しずつ使っていきたいと思います。

開発環境 Arduino IDEは1.5でDueがサポートされ、ライブラリもいろいろ強化されています。タスク管理ライブラリのSchedulerクラスやAudioクラスなど。

ところで、デバッグ端子はAVRコアの頃はお馴染みの6ピンインターフェースでしたが、Dueでは、ARMコアになり、SWDとJTAGの端子が搭載されました。SWDはDIPピッチピンヘッダで、JTAGは1.27mmピッチピンヘッダです。
JTAGを使用してみようと思って、OLIMEXの変換アダプタをStrawberry-linuxで購入(630円)しましたが、
http://strawberry-linux.com/catalog/items?code=15079
なんとSWDコネクタと物理的に干渉して刺さりません!!なんだよーーー!!

刺さらないの図。(わかりにくいですけど)

IMG_20130106_181533resized_.jpg

そこで、DIPピッチのSWDのピンヘッダ(下の写真の赤く囲った部分)を一旦外して、樹脂を少し削ったものに実装しなおしてみます。

kakotta.jpeg

この基板はスルーホール基板で部品を外すのは、面倒です。下手なことをするとスルーホールを壊してしまいます。従ってハンダごてであまりいじらずサクッと外したいところです。本業でハンダ付けしてる方々はバキュームポンプが付いたコテでサクッと外すでしょうが、個人で遊んでる僕にはそのような機材もなく・・・と思ったら、和歌山のたろサさんが素敵なアイテムを紹介してくれました。それは、「はんだシュッ太郎」という機械です。

従来のはんだすいとり機と、ハンダゴテが融合した商品で、バキュームポンプが付いた専用機ほどではないにせよ、かなり手軽にハンダを溶かして吸い取ってくれます。しかもかなりリーズナブルなお値段(4千円台)です。

はんだシュッ太郎(はんだ吸取器) HSK-100
サンハヤト
売り上げランキング: 7,262


これ、僕も買ってみました。使ったら、ピンヘッダあっさり外れました。まぁ、ピンヘッダは普通のコテでも比較的苦労なく外せる部類の部品ですけどね。コテ先はこんな感じです。

IMG_20130106_181844resized_.jpg

IMG_20130106_181730resized_.jpg

外した後は、秋月で買ってたストックのピンヘッダを差し込みます。その前に、ピンヘッダの端の樹脂をニッパで切り取っておきます(写真のように)。

で、晴れて接続できるようになりましたー!
IMG_20130106_183511resized_.jpg

というわけで、Arduinoを浅く触っている状況ですけど、これからいろいろ記事に出来たらとおもいます。本年もよろしくお願い致します!

Arduino Leonardo(+Headers)
Arduino Leonardo(+Headers)
posted with amazlet at 13.01.17
GHEO SA
売り上げランキング: 43,094





posted by いしいっち at 01:55| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2012年11月11日

Raspberry Pi買ってみました!ネット接続とかOSカーネルビルドとかやってみた〜

僕もとうとう、Raspberry Pi(ラズベリーパイ)という小さくて安価なマイコンボードを買いました!!
このマイコンボード、日本では、RSコンポーネンツのRSオンラインで販売しています。
http://jp.rs-online.com/web/generalDisplay.html?id=raspberrypi

RPi.jpg

ただ、注文してから発送までの日数がかなりかかりました。僕のケースでは3ヶ月くらいかかりました。
特に急ぎではなかったので気長に待てましたが、何か目的があってすぐに欲しい場合、
この期間たたずっと待つのは結構辛いかも、ですね^^;

Raspberry Piは、RS以外にもFarnellという業者でも取り扱っていて、しかもこの業者だとすぐに発送されるという
何だか変な状況なのですが、残念ながらこちらの業者は日本への配送を行なっていないため、購入には手間が掛かりそうなようです。

日本で購入する場合でも、ケース付きであればすぐに発送してくれる業者もあるようで、そういうところで買うのが良いのかもしれませんね。
ご参考 : mobilehackerz 2012/10/25 ■ いつまでも届かないRaspberry Piは一手間かけると10日で新型が手に入る
http://blog.mobilehackerz.jp/2012/10/raspberry-pi10.html


さて、RSから届いたので早速少しいじってみましたので、メモっぽい内容ですが、本記事では、以下のような内容を書き出しています。
・イメージを書き込んでテレビに繋いで操作
・ピンヘッダに出ているUARTからシェル操作
・有線LAN、無線LAN、3G通信ドングルでネットワークに接続
・PC側からRaspberry Piのプログラムをビルドして実行
・Linuxカーネルをリビルドして、置き換える
といったことを実施してみます。

この記事では、Raspberry Piから外部のハードを叩くことは触れていません。Raspberry PiでGPIOとかを叩くあたりは、Interface 2012年12月号に詳しく載っているようでしたので良かったらどーぞー!



●SDカードにイメージを焼きこむ

ブートのイメージが付属していないRaspberry Piを購入していたので、早速手持ちのSDカードにイメージを焼きこみます。
ここからダウンロード出来ます。
http://www.raspberrypi.org/downloads

僕は、Raspberry Pi標準のディストリビューションの内、Raspbian "wheezy"を使用しています。
イメージファイルをダウンロードして、Macからddコマンドで焼きこみました。Linuxでも似たような手順だと思います。但し、of=の指定を誤ると大切なディスクを
消してしまうことになりますので、慎重に確認してから行いましょう。
  $ dd if=イメージファイル名.img of=/dev/diskN bs=1m

●電源を投入してみる

Raspberry PiにはHDMI端子、コンポジットビデオ出力端子が付いています。これをお手持ちのテレビやモニターに接続し、USB microBコネクタに5Vで必要な電流を供給
してやることでアッサリとブートしてくれました。

●シリアル・ポートからログインしてみる

コンソールは、/dev/ttyAMA0に出ています。以下のようにピンヘッダにRxDとTxDが出てますので、USBシリアル変換基板と接続します。
RPi_PINS.png

ボーレートは115200[bps]です。
3.3V系ですので、5V系のArduinoのシリアル変換を直結しないように注意です。
僕はPIC ADK Miniboardという自作基板の古いrevのボードにFTDI FT232RLだけ乗せまして、それを使用しました。
RPi_UART.jpg
秋月のFT232RL基板もオススメです。
http://akizukidenshi.com/catalog/g/gK-01977/
または、スイッチサイエンスのとか。
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
スイッチサイエンス
売り上げランキング: 9314

なお回路図上のピンヘッダ部のところはこんなかんじでした。SPIとかI2Cとか使いやすいように配列されているようです。
RPi_PIN_sch.png
あとSSHからのログインも最初から有効になってました。

●ネットワークに接続してみる
それでは、有線、WiFi、3Gでネットワークに接続してみます。

-有線LANを使用

初めからDHCPありの設定になってたので、イーサのケーブルを差し込むだけでネットに繋がりました。簡単〜

-無線LANを使用

無線LANのドングルにはいろいろなメーカーのチップが使用されているので、きちんと対応しているものを選別して使用するか、そうでない場合はデバドラを組み込む必要があります。
僕の場合は、昔PCをWiFi APに見立ててニンテンドーDSを繋ぐ為にバッファローのWLI-UC-GN(Ralink RT3070を使用してる模様)を持ってたので突っ込んだらアッサリ認識しました。

BUFFALO Wi-Fiゲーム対応USBコネクター WLI-UC-GNT
バッファロー (2009-12-26)
売り上げランキング: 9287
従って何も大した設定はしてませんw
WiFiDongle.jpg

RPi_with_WiFi.jpg

●3G通信を使用(USBドングルを使用して)

手持ちのイーモバイルの3G通信のドングルを使用しました。これは21Mbpsに対応したHuaweiのD31HWというものです。オークションとかで安く出てます。
ここにイーモバのポケットルーターで使用しているSIMを突っ込みました。

RPi_3G.jpg
Linuxカーネルの設定は、既にPPPありになっていますので特に、変更する内容はありません。
Huaweiのドングルは、PCに接続するとCD-ROMドライブとして認識し、インストーラーが出てくる便利設計になっているのですが、
Raspberry Piではこのインストーラーは当然不要です。
このドングルをモデムとして使用するためには、まずCD-ROMドライブとして認識している状態で、「とあるデータ列」をエンドポイントに送出し、
CD-ROM状態からモデム状態に遷移させる必要があるようなのですが、usb_modeswitchのドキュメントを見るとカーネルが新しいものでは、
特にモデムに遷移する動作が入っていることがあるそうで、今回もRaspberry Piでは特に特殊なコマンド操作無く、いきなりモデムとしてアクセス出来ました。
参考 : usb_modeswitchのkernel related issues
http://www.draisberghof.de/usb_modeswitch/

このドングルをモデムとして使用するためには、まずCD-ROMドライブとして認識している状態で、「とあるデータ列」をエンドポイントに送出し、
CD-ROM状態からモデム状態に遷移させる必要があるので、usb-modeswitchをセットアップします。

$ sudo apt-get install usb-modeswitch

ここでudevの再チェックをキックするか、Raspberry Piを再起動すると、/dev/ttyUSB*として認識するはずです。
(★2013/5/11修正追加)

PPP接続の設定は、wvdialを使用しました。まずはモジュールのインストールですがapt-getでサクッと行います。
 $ sudo apt-get install wvdial
次に設定ファイルを用意します。
以下のサイトを参考にさせていただきました。感謝!
http://coordinators.blog18.fc2.com/blog-entry-18.html

で、以下のような内容のファイルを/etc/wvdial.confとして保存します。
[Dialer Defaults]
Modem = /dev/ttyUSB0
Baud = 3600000
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 =
Area Code =
Phone = *99***1#
Username = em
Password = em
Ask Password = 0
Dial Command = ATDT
Stupid Mode = 1
Compuserve = 0
Force Address =
Idle Seconds = 0
DialMessage1 =
DialMessage2 =
ISDN = 0
Auto DNS = 1
で、
 $ sudo wvdial &
とすれば3G回線にマイコンボードから繋がってくれました。


●テスト的にコード(ユーザー空間で実行するプロセス)をクロス環境でビルドしてみる
Raspberry Piのディストリビューションにはコンパイラ等も搭載していますが、PCのパフォーマンスを活かしてビルドしたいところです。
ここでは定番のSourcery g++ liteを使用しました。
以下のページから、ARM processor向けのGNU/Linux releaseを選択します。メールアドレスを入れるとすぐにダウンロードリンクが
入ったメールが届きますので、セットアップしてみて下さい。僕はUbuntuの64ビット版に入れてます。
http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/
こんなのを書いて、
// test.c
#include <stdio.h>

int main(void)
{
    printf("Hello,Raspberry-pi World\n");
}
 $ arm-none-gnueabi-gcc test.c -o test
などとすればRaspberry PiのLinux上で動くプロセスを生成してくれました。
その他いろいろビルドしてオープンソースのモジュールを導入してみたいと思います。後ほど。。

●Linuxカーネルをダウンロードし、ビルドして起動する

カーネルはgithubのraspberrypiに上がっているものを使用してみました。
https://github.com/raspberrypi/linux
まずはツールチェインのセットアップですが、上記の「テスト的にコード(ユーザー空間で実行するプロセス)をクロス環境でビルドしてみる」でセットアップしたGNU/Linux用のARM EABIの
ものをそのまま使用します。

0.PC側に必要なツールをセットアップ(初回だけ)
 $ apt-get install git gcc-arm-linux-gnueabi make ncurses-dev
1.ソースを入手
 $ git clone https://github.com/raspberrypi/linux.git
2.設定ファイルを整備
 $ cd linux
 $ cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
 $
 $ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
もしカーネルの設定変更したい場合、
 $ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig

3.ビルド
以下の-j8の8は環境に合わせて下さい。
 $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -k -j8
4.モジュールの書き出し
/tmp/modulesを一時書き出し先に使用しています。
 $ mkdir /tmp/modules
 $ make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
5.SDカードに書き出し
Raspbian "wheezy"を書き出したSDカードをLinuxのPCに接続しますと、2つのパーティションが見えます。
一つはブート用パーティションで、もう一つはルートファイル・システムです。
ブート用は2012/10/28にダウンロードした
イメージの場合、58メガバイトでした。なので大抵の場合、小さいパーティションがブート、もう一方がルートファイル・システム
になるのかなと思われます。

ではまず、ブート側パーティションにOSカーネルを入れます。
ここでは、githubから取り出し、ビルド後のLinuxカーネルツリーが./linuxに、そしてSDカードのブート側が/media/sd_bootに
マウントされているものとして記載します。
 $ cp ./linux/arch/arm/boot/Image /media/sd_boot/kernel.img

次に、モジュールもコピーします。
こちらはSDカードのルートファイルシステム側に入れます。
ルートファイルシステムが/media/sd_rootにマウントされているとしますと、

 $ cp -R /tmp/modules/* /media/sd_root/lib/modules
みたいな感じでいけると思います。
BUFFALO Wi-Fiゲーム対応USBコネクター WLI-UC-GNT
バッファロー (2009-12-26)
売り上げランキング: 9287
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
スイッチサイエンス
売り上げランキング: 9314
posted by いしいっち at 19:58| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2012年11月01日

蛍光表示管(VFDパネル)をAndroidから制御するライブラリを作ってみました

電気街のパーツショップでも購入できるVFDパネルという表示装置があります。昔は小型ゲーム機の表示板や、電卓の数字表示に使用されていたようですし、現在でも(液晶が多くなってきたものの)ビデオデッキの前面パネル表示部や、お店のレジの値段表示、銀行等の為替レート表示、ATMなどいろいろな所で活躍している表示装置の一種です。ノリタケ伊勢電子と双葉電子工業というところの製品が多く出回っているようです。

参考 : 蛍光表示管(Wikipedia)
http://ja.wikipedia.org/wiki/%E8%9B%8D%E5%85%89%E8%A1%A8%E7%A4%BA%E7%AE%A1

たまたま、僕が持っているVFDパネル SCK256X64-3101 はUSBのインターフェースを搭載していて、PCからの制御が出来る仕様です。
http://www.noritake-itron.jp/kit/module/sck_3000/index.html
ノリタケ伊勢電子のサイトから個人でも簡単に買えます。確か日本橋の共立電子にもいろいろ置いてありました。

13516949198931.jpg

13516949494552.jpg

そこで、Androidアプリから簡単に任意の表示制御できるようなコントロールライブラリ VFD_Driver を作成してみました。
VFD_demo.jpg

VFD_DriverはAndroidのUSBホストポートを使用してVFDパネルと通信を行うVFD_Driverクラスと、その上でコマンドを構築して制御を行うVFD_Communicationクラスとで構成されています。VFD_Driverクラスは、@ksksue氏作 FTDriver の実装をいろいろいただき、その上で実装しています(Special thanks!!)。

VFD_CommunicationクラスのAPIはノリタケ伊勢電子のサポートページで公開されているC++のサンプルAPIをほぼ踏襲しています。

ソースはこちらです。
https://github.com/yishii/Android_VFD_Driver

ビルドしたアプリはPlayストアにも上げました。ノリタケ伊勢電子のUSB接続のパネルであれば、同一型番でなくても動くかも?しれません。(未確認です)
https://play.google.com/store/apps/details?id=jp.yishii.vfdrivertest

API一覧はREADME.mdに入れました。関数毎にコメントで軽く説明入れましたが、詳しくは上記のノリタケ伊勢電子のC++サンプルAPIの説明書と多くは一致するかと思います。あとはソフトウェア開発ガイドのpdf(ダウンロード時要ログイン)があれば詳細なコマンドの振る舞いもわかります。
●ノリタケ伊勢電子 サポートソフト GU-3000シリーズ向け C++サンプルプログラム
http://www.noritake-itron.jp/cs/supportsoft/index.xml#GU-3000シリーズ向け


使用しているところの動画を撮影してみました。
Nexus 7のUSBホストに繋いで、アプリから表示をコントロールしているものです。

動画では、3つの画面のデモを行なっています。
一つはVFD内フォントを使用した文字列描画、もう一つはライン命令を使用したドローイング、最後にAndroidのBitmapからVFDの画面を更新する内容になります。
Android端末に別な画面を繋いで手軽に表示を制御したい場合などございましたら、良かったらご利用下さいませー。







iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK
バッファロー (2011-11-01)
売り上げランキング: 114


基礎から学ぶ 組み込みAndroid
坂本 俊之 出村 成和 渡邊 昌之
シーアンドアール研究所
売り上げランキング: 135065


BeagleBoard-xM
BeagleBoard-xM
posted with amazlet at 12.11.01
Circuitco Electronics LLC.
売り上げランキング: 48592
posted by いしいっち at 00:36| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする