2012年5月6日

お手製パネルスイッチ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

前回のピアノ階段(GarageBand階段)計画の続き。
ハンズマンでアルミテープと厚手両面テープを、HIヒロセで下敷き2枚を購入。

アルミテープ:厚さ0.1mm、幅50mm、長さ20m
厚手両面テープ:厚さ0.5mm、幅30mm、長さ15m
下敷き:厚さ0.7mm、B5サイズ


下敷きの長辺外側に厚手両面テープを、中央にアルミテープを貼ったものを2枚作る。
両面テープを剥がして向かい合わせに貼り合わせると完成。

単純計算だと厚手両面テープ*2で1mm、アルミテープ*2で0.2mmなので、向かい合わせになったアルミテープの間には0.8mmの隙間ができることになる。


前回と同様、プルダウン、1kΩの抵抗を使用、デジタル13ピンに接続。
スケッチも前回のまま使うので「ド(C3)」の音が割り当てられています。


実際に実行してみました。


課題としては両面テープの部分は押しても反応しない(当然)こと。
細くすると板(今回は下敷きを使用)のたわみで何もしなくても引っ付いてしまう可能性も。

実際に階段に設置する際は、踏まれることを考慮して接点の位置や素材を工夫する必要があるかも。

2012年4月22日

Arduino + GarageBand (MIDIキーボードもどき)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

久しぶりの投稿にして久しぶりのArduinoネタ。

ボタンを押すとドレミファソラシドが鳴るというもので、やっていることは至って簡単。
どのタクトスイッチが押されてるか判定してSerial.printで吐き出し、Mac側でSerial MIDI Converterなるソフトを使ってIAC DriverにMIDI信号を渡し、GarageBandで読み取る。
Arduino → Serial MIDI Converter → IAC Driver → GarageBandというフロー。

ブレッドボード上のタクトスイッチはプルダウン、抵抗は1KΩを入れてある。
チャタリング除去はソフトウェア側にお任せ。(Bounceライブラリを使用)
#include <Bounce.h>

byte pins[8] = {13,12,11,10,9,8,7,6};
byte pitch[8] = {60,62,64,65,67,69,71,72};
int status[8] = {0};

Bounce button[] = {Bounce(pins[0],20),
                   Bounce(pins[1],20),
                   Bounce(pins[2],20),
                   Bounce(pins[3],20),
                   Bounce(pins[4],20),
                   Bounce(pins[5],20),
                   Bounce(pins[6],20),
                   Bounce(pins[7],20)};

void setup() {
  for (int i=0; i< 8; i++) {
    pinMode(pins[i], INPUT);
  }
  Serial.begin(57600); 
}

void loop(){
  for (int i=0; i< 8; i++) {
    button[i].update ();
    
    if ((button[i].read() == HIGH)&&(status[i] == 0)) {
      MIDI_TX(144,pitch[i],127);
      status[i] = 1;
    }if ((button[i].read() == LOW)&&(status[i] == 1)) {
      MIDI_TX(128,pitch[i],127);
      status[i] = 0;
    }if ((button[i].read() == HIGH)&&(status[i] == 1)) {

    }if ((button[i].read() == LOW)&&(status[i] == 0)) {
    
    }
  }
}

void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY) 
{
  Serial.print(MESSAGE);
  Serial.print(PITCH);
  Serial.print(VELOCITY);
}
という感じ。
#相変わらずエレガントさに欠けるなぁ...

MIDIのメッセージについては、144がCh1のNote ONで128がCh1のNote OFFである。
144-128=16で分かるとおり、16チャンネル扱えることが分かる。
ピッチは鍵盤中央のドを60として半音ごとに1増減という仕様。

実際に音を鳴らしてみたり。(黒鍵はブレッドボード上に未実装なので白鍵だけ)

※画面録画です。(手元は上の写真を見てご想像ください)

あとは、このタクトスイッチを踏んでも大丈夫な別の素子に変えて階段に仕掛ける予定。
元ネタはフォルクスワーゲンのピアノ階段という動画。
前々から真似してみたかったので、今年の学園祭で学校に同様の物を仕掛けようかと画策中。

問題はArduino UNO(328)だと入力が足りないこと。
アナログをデジタルに回しても20本しかないので、1オクターブとちょっとしか対応出来ない。
Mega(2560)を使う or UNO(328)を多段にするなど考え中...
追記
シフトレジスタ(PISO)の74HC165を使って入力を増やす方法を教えてもらいました。
時間がある時に試してみます。
本家(ピアノ階段)で使ってる踏んだ時に感知する方法が気になる...
フィルムタイプの圧力センサは高いので代替できる手段を調査中。

追記
階段用スイッチの仕組みを考えました。 → お手製パネルスイッチ

追記2
GarageBand階段、完成しました。 → Arduinoでピアノ階段 with GarageBand

2012年3月30日

Final Cut Express 4をインストールするとAperture 3が起動しない件

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
久々にMacBook Proで動画編集でもしようかとFinal Cut Express 4をインストールしてみたら、直後からAperture 3が起動不能に。
日本のAppleサポートコミュニティはおろか米国のAppleサポートコミュニティにも対応策が無いという状態。

エラーの発生環境はMac OS X Lion (10.7.3)で、別ユーザを作成しての確認、Apertureの再インストールでは治らず。
という訳で、エラーを解析してみる。

Library not loaded: /Library/Frameworks/PluginManager.framework/Versions/B/PluginManager

とあるので、おそらく原因はPluginManagerというファイルが存在しないことだろう。
Versionsフォルダへ移動してみると、フォルダ「B」が存在しない。
現在Aperture 3が普通に起動できるMacBook AirのVersionsフォルダを覗くとフォルダBと、その中にPluginManagerが存在していた。
これをMacBook Proにコピーすると、何事も無かったのようにAperture 3が起動。

とりあえず、PluginManagerを置いておきますので、同様のエラーで困ってる人はやってみてください。

Download >> PluginManager.zip (115KB)

2012年3月29日

極小キャラクタ液晶

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

3/18〜21まで秋葉原駅から徒歩5分もかからない秋葉原ワシントンホテルに滞在していました。

とりあえず、予てから実物を見てみたかったaitendo(液晶工房)の極小キャラクタ液晶16x2を購入。
早速、熊本に帰って極小キャラクタ液晶を動かしてみたのが一番上の写真。
裏返して右から1〜16となっており、1番がGNDで2番がVdd(+5V)という点が普通サイズと違うところ。
バックライトは16がGNDで15が5Vで、1と16、2と15を接続、間に5Ωくらいの抵抗を入れてやれば良いらしい。
(手元に10Ω〜しか置いてなかったので、抵抗入れずに直結してるけど今のところ問題なし)

普通サイズの16x2液晶と比較
Pro miniや発売予定のleonardoあたりと一緒に使うと便利な予感。
というわけで、千石電商でArduino Pro miniとFT232RL搭載の書き込み基板も買ってきました。


とりあえず、足付けて13番ピンのLEDチカチカさせるスケッチ動かして動作確認だけ。

この書き込み基板、よく見るとシルクスクリーン印刷が間違っている稀少ロット(?)であることが判明。


この基板は5V用ですが、チップ左の出力をよく見ると3V3になっている。
(出力はちゃんと5V出てる)

裏のパターンを切ってハンダジャンパすれば3V3出力に切り替えることもできるようですが、購入したPro miniは328P 16MHz 5Vのやつなので、そのままで使います。

さて、在庫は潤沢なので何を作るか考えなければ(;゜ロ゜)


2012年3月2日

SheevaPlugが届いたので遊んでみた(3)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
押し入れから出てきた古いUSBハブを介して接続ちゅう
いよいよ当初の目標「SheevaPlugでAirPrintアダプタを作る」の実現へ。
今回は、A3ノビ対応のEPSON PM-G4500をAirPrint対応化させてみる。

必要な物のインストール
yum -y install tar
yum -y install gcc-c++ libtool rpm-build
yum -y install openssl
yum -y install make automake
yum -y install avahi avahi-autoipd
yum -y install cups ghostscript cups-devel
ここで
依存性の欠落: krb5-libs = 1.7-8.fc12 はパッケージ krb5-devel-1.7-8.fc12.armv5tel (fedora) が必要としています
とでるので
# wget http://ftp.linux.org.uk/pub/linux/arm/fedora/pub/fedora/linux/releases/12/Everything/arm/os/Packages/krb5-devel-1.7-8.fc12.armv5tel.rpm
# rpm -ivh --nodeps krb5-devel-1.7-8.fc12.armv5tel.rpm
で強制的にインストール。これでcups-develがインストール可能。
# yum -y install cups-devel

cups設定ファイルを編集する
# vi /etc/cups/cupsd.conf
以下、viで作業。
#Listen localhost:631//コメントアウト
#Listen /var/run/cups/cups.sock //コメントアウト
Port 631 //追加

<location />
Order allow,deny
Allow localhost
Allow @LOCAL //追加
</location>

<location /admin>
Order allow,deny
Allow localhost
Allow @LOCAL //追加
</location>

<location /admin/conf>
Order allow,deny
Allow localhost
Allow @LOCAL //追加
</location>
最終行に以下を追加
ServerCertificate /etc/cups/ssl/server.crt
ServerKey /etc/cups/ssl/server.key
保存する。
https接続用の証明書を作成する。
# openssl req -new -nodes -x509 -keyout /etc/cups/ssl/server.key -out /etc/cups/ssl/server.crt -days 3650
以下は参考。
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Kumamoto
Locality Name (eg, city) [Default City]:Kumamoto-shi
Organization Name (eg, company) [Default Company Ltd]:Prioris.A.W.
Organizational Unit Name (eg, section) []:Security
Common Name (eg, your name or your server's hostname) []:SheevaPlug
Email Address []:.

Epson Inkjet Printer Driver (ESC/P-R)のインストール
i386やx86_64などの一般的なアーキテクチャ以外は自分でドライバをソースからコンパイルする必要がある。
幸いにもEPSONはソースコードまで公開してくれているので、これを利用する。
# wget http://linux.avasys.jp/drivers/lsb/epson-inkjet/escpr/src/epson-inkjet-printer-escpr-1.1.1-1lsb3.2.tar.gz
# tar zxvf epson-inkjet-printer-escpr-1.1.1-1lsb3.2.tar.gz
# cd epson-inkjet-printer-escpr-1.1.1
# ./bootstrap && ./configure --prefix=/usr
# make
# make install
途中で必要なものは最初にインストールしているが、もしエラー吐いて止まったら足りないものがあるのでyumでインストール。
特に、libtool→automakeの順でインストールしていない場合はautomakeをreinstallする。

CUPSにプリンタを認識させる
SheevaPlugにUSBケーブルでプリンタを接続した状態で
http://SheevaPlugのIPアドレス:631
にアクセスする。我が家の場合、http://192.168.24.63:631
次に、管理者向け->プリンターとクラスの追加を開き、プリンターの追加を選択。
しばらく待つとローカルプリンターの欄にUSBで接続したプリンタが現れるので、選択して「続ける」をクリック。
このプリンターを共有するにチェックを入れて「続ける」をクリック。
先ほどのEPSONドライバーがうまくインストールできていれば、後ろに「Epson Inkjet Printer Driver (ESC/P-R)〜」と付いている機種名がずらずらと表示される。
機種名を選択して「プリンタの追加」をクリック。
これでプリンターが追加される。

Avahi設定ファイルを書く
(参考:AirPrintをCUPSを使ったLinuxサーバーで実現してみた。)

vi /etc/avahi/services/printer.service
ほとんど参考にしたブログの通り。
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>EPSON PM-G4500</name>
<service>
       <type>_ipp._tcp</type>
       <subtype>_universal._sub._ipp._tcp</subtype>
       <port>631</port>
       <txt-record>txtvers=1</txt-record>
       <txt-record>qtotal=1</txt-record>
       <txt-record>rp=printers/EPSON_PM-G4500</txt-record>
       <txt-record>ty=EPSON_PM-G4500</txt-record>
       <txt-record>note=SheevaPlug</txt-record>
       <txt-record>product=(GPL Ghostscript)</txt-record>
       <txt-record>printer-state=3</txt-record>
       <txt-record>printer-type=0x3056</txt-record>
       <txt-record>Transparent=T</txt-record>
       <txt-record>Binary=T</txt-record>
       <txt-record>Duplex=T</txt-record>
       <txt-record>Copies=T</txt-record>
       <txt-record>pdl=application/pdf,application/postscript,application/vnd.cups-raster,application/octet-stream,image/png</txt-record>
       <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record>
</service>
</service-group>

これでMacのシステム環境設定からプリンタとスキャン→プリンタの追加で検索すると表示されるようになる。
Macからは正常に印刷できるが、このままではiPhoneやiPadから印刷したときに日本語が印刷されなかった。
yum -y install poppler-data
これで日本語が印刷される。
ちなみに、これはiPhone/iPadがPDFを生成してCUPSに送りつけていることが原因。


ページのサイズが大きいと印刷(開始)までに時間がかかるけど、これはiPhone/iPadがPDF生成に時間を要しているからと思われる。(要するにiPhone/iPad側の問題)

というわけで、無事、AirPrintアダプタを作るという目標は達成。
実際に運用するのかという話は... iPadからの印刷はしないので自己満足ということで(*´▽`*)

というか、いい加減、AirMac ExtremeとかAirMac ExpressでAirPrintできるようにしてくれないかな...
ファームウェアで十分対応できることなんだけど、AirPrint対応プリンタを作らせるためにあえて対応しない感じなんだろう。

とりあえず、NASとして使うために、samba入れてハードウェアRAID1の外付けHDDを接続したり、Webサーバとして使うために、ApacheとPHPとMySQL入れて負荷を見てみたりしているところ。