« September 2008 | Main | November 2008 »

2008.10.30

[N810][Emacs]Emacs on NOKIA N810でフルスクリーン表示

NOKIA N810でEmacsってなかなかいい感じですが、やへーさんにビルドしていただいたEmacsはHildonizeされていなくて、ズームボタンでフルスクリーン表示できないのが残念な点でした。
同じくやへーさん発見のwmctrlというコマンドでフルスクリーン化できるということを知って、衝撃を受けました。

xbindkeys, guile and lots of love ;)
Emacs23をフルスクリーン表示で使う;)

どうやってwmctrlを起動するか、という問題に対する回答として、やへーさんからはxbindkeysを使うという案の提示があったわけですが、よく考えたらEmacs自身でやればいいじゃんと。

(defun toggle-full-screen ()
 (shell-command "~/bin/wmctrl -r :ACTIVE: -b toggle,fullscreen"))
(global-set-key (quote [f6])(quote toggle-full-screen))

やへーさんのところからwmctrlをもらってきて、かつwmctrlが依存しているlibxmu6をapt-getでインストールし、上記を.emacs.elに貼ればズームボタンでフルスクリーンモードのトグルができます。

800x480のEmacsは快適〜

xbindkeysは素晴らしいキーボードランチャなので、これはこれで使いますけどね。

関連エントリ

[N810][Emacs]NOKIA N810向けEmacs23.0.60 with Xftパッケージ等

ここのコメントにも書きましたが、Emacs on N810については、Talk Like SInging: N810/Emacsさんにも情報があります。

|

2008.10.29

[iPhone][Jailbreak]iPhoneにキーボードをつないでみた

シリアルつながりで、iPhoneにキーボード(Serial Keyboard)をつないでみた。

2008.11.01追記: このエントリには続編があります。
[iPhone][Jailbreak]iPhoneにつないだキーボードから文字を入力してみた


Iphone_keyboard04

Iphone_keyboard03

Iphone_keyboard01_2

以下のようにしてログを取り、「123[Enter]123[Enter]123[Enter]123[Enter]」とタイプ。

$ cat /dev/tty.iap>key3.txt

取ったログをEmacsのhexl-modeで見てみる。

Iphone_keyboard02_2

機能している模様。

ただし、相当高度なハッキングをしない限り、キーボードに対応させた特定のアプリケーションからの英字入力のみ、という程度にとどまるだろう。日本語入力は恐らく無理。
キーボードからの入力を、ソフトウェアキーボードに伝える方法が無い。
現状で日本語入力をするには、アプリケーション側に独自の日本語入力機能を付ける必要があるはず。
hp 100LX/200LXやPSIONのJmemoや、Kedit、Ng + skkfepのような感じにね。

キーボードからの入力を受け付ける追加ソフトウェアキーボードが作れれば、本当の意味でのキーボード対応が可能になるだろうけど、世界でもそのような実績は無いはず。
もしそのようなソースが公開されているプロジェクトがあったら教えてください。

UIKeyboard辺りをどうにかして、キーを押させるようなことができますかね?

|

2008.10.27

[iPhone][AVR]iPhone/iPod touch用Dock Connector型温度センサを作ってみた

AVRマイコンATtiny45と温度センサLM60をDock Connectorの中に内蔵して、「Dock Connector型温度センサ」を完成させてみた。

Iphone_thermometer05

iPhoneにこのDock Connector型温度センサを接続すると、中に入っているマイコン、ATtiny45が温度センサLM60から温度を読み取って摂氏に変換し、iPhoneへシリアルポート経由で送信を始める。

iPhone側でシリアルポートを読んでみると……、

$ cat /dev/tty.iap
0.590968783
26.7
0.590968783
26.7
0.590968783
26.7
0.597414015
27.7
0.597414015
27.7
.........

こんな感じ。やたら桁の多いのは、ADCで読み取ったLM60の電圧そのもの。
ただ、精度の高くない浮動小数点演算の結果なので、下位の方は意味が無い。

UIを作って、温度計然とした体裁にすることももちろんできるけど、作るかどうか分からない。

ログをgnuplotでグラフにしてみた。

Templog

会社から外に出た直後にログ取り開始。駅までの道のりで、温度が急激に低下。電車に乗ると上がり、駅から家までの道のりでまた低下、自宅は25度ぐらいで安定、といった感じできれいに取れている。

「Dock Connector型温度センサ」の中身

Iphone_thermometer01
↑LM60をATtiny45の上に乗せてみた。裸の銅線みたいなのはUEW線。裸なようでウレタンの皮膜がある。

Iphone_thermometer02
↑ATtiny45の裏側には、一応パスコンを付けてみた。

Iphone_thermometer03
↑こんな感じに組み込まれる。右側の金属フレームを破壊してスペースを作っている。

Iphone_thermometer04
↑シールで巻いて絶縁。

Iphone_thermometer06
↑部品たちといっしょに撮影。

関連エントリ

[iPhone][AVR]続・iPhoneにAVRマイコン(Atmel ATtiny45)をつなぎ温度計測してみた

[iPhone][AVR]iPhoneにAVRマイコン(Atmel ATtiny45)をつなぎ温度計測してみた

[iPhone][AVR]iPhoneにAVRマイコン(Atmel ATtiny2313)をつないでみた

|

2008.10.26

[iPhone][AVR]続・iPhoneにAVRマイコン(Atmel ATtiny45)をつなぎ温度計測してみた

[iPhone][AVR]iPhoneにAVRマイコン(Atmel ATtiny45)をつなぎ温度計測してみたの続き。

AVR ATtiny45内蔵温度センサを使ってみたものの、どうにもわけ分からん結果しか出なかったので、温度センサLM60を外付けして再チャレンジ。

Iphoneavr06

例のアテにならない内蔵基準電圧については、動作環境での読み取り電圧をLM60からの出力をテスタで計測した電圧と大体合わせてやるという方法で適当に校正してやれば、それなりに動作しているようだ。SOTパッケージのLM60を買ってこよう。

Iphoneavr07_2

ソースは、内蔵ADC1を使い、LM60からの入力を読み取り、摂氏温度に変換するという処理内容。

BASCOM-AVRにはprintfの"%01.2f"みたいなものが無いみたいなので、文字列処理で小数点第1位まで表示。

'-----------------------------
'Compiler Options
'-----------------------------

$regfile = "attiny45.dat"
$crystal = 1000000

$hwstack = 24
$swstack = 16
$framesize = 32

'-----------------------------
'Variable Definitions
'-----------------------------

Dim I As Byte
Dim Sum As Word
Dim Intpart As Integer
Dim Fracpart As Single
Dim Fracpartstr As String * 11
Dim Res As Single

'-----------------------------
'Constant Definitions
'-----------------------------

'ADC1(Pin:7)
Const Channel = 1
'Reference Voltage
Const Refvcc = 1.1

'-----------------------------
'Peripheral Settings
'-----------------------------

'PB1(Pin:6): Serial TX
Open "COMB.1:9600,8,N,1" For Output As #1

'PB3(Pin:2): LED
Config Portb.3 = Output

Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
'Config Adc = Single , Prescaler = Auto , Reference = Avcc

'ADC Ref 1.1V / Use Temperature Sensor
'Admux = &B10001111

'ADC Ref VCC / Use ADC1
'Admux = &B00000001

Start Adc

'-----------------------------
'Main Loop
'-----------------------------

Do
   Sum = 0

   For I = 1 To 100
      Sum = Sum + Getadc(channel)
   Next I

   Rem (format "%01.2f" (* (/ (- (/ (* 123 4.98) 1024.0) 0.424) 6.25) 1000.0))

   'Average Up
   Sum = Sum / 100
   'Dependent on Reference Voltage
   Res = Sum * Refvcc
   Res = Res / 1024.0
   'Internal_1.1 Offset
   'Res = Res - 0.015
   Res = Res - 0.005
   'Debug Print
   'Print #1 , Res
   'DC Offset 424mV
   Res = Res - 0.424
   '6.25mV/C
   Res = Res / 6.25
   Res = Res * 1000.0

   'Formatting
   Intpart = Int(res)
   Fracpart = Frac(res)
   Fracpartstr = Str(fracpart)
   Fracpartstr = Mid(fracpartstr , 2 , 2)

   Print #1 , Intpart ; Fracpartstr

   'LED Flash
   Gosub Ledflash
Loop

Close #1

End

'-----------------------------
'Subroutine Definitions
'-----------------------------

Ledflash:
   Set Portb.3
   Waitms 200
   Reset Portb.3
   Waitms 500
   Return

|

[AVR]ATmega644P版ArduinoであるところのSanguinoのキットが到着したので作ってみた

Sanguino01

注文していたSanguinoのキットが到着したので、早速作ってみた。せっかくなのでATmega644Pは自分で焼いたものを使用。

Sanguino02

Sanguinoとは、ATmega644Pを搭載したBoarduinoのこと。
ブレッドボード遊びに適した形状をしている。
ArduinoのIDEを流用する、Arduinoの上位コンパチみたいなもの。
Arduinoに付いているLEDは13番だが、Sanguinoの場合は0番である点などが地味に違ったりする。

ATmega644Pなので、64KBのフラッシュ、32本のI/O、2チャンネルあるUSARTなどが魅力。

Sanguino03_2

キットに入っている角ピンのピンヘッダーをそのまま使うとブレッドボードから抜けなくなるので、秋月で買った丸ピンICソケット・両端オスピンを使って組み立てた。
これはDC Boarduinoを作ったときの教訓。DC Boarduinoですらなかなか抜けなかったのに、Sanguinoの場合はどうなることやら。

注意すべきは、大きいので、ブレッドボードの電源列をまたぐように挿さないとダメだということ。
普通の挿し方をすると左右合計で1列だけ余るので、どっちかの列のみにしかつなげない状態になってしまう。

Sanguinoには、6ピン1列のUSART端子のほか、6ピン2列のICSP端子、JTAG端子が付いている。

Sanguino04_2

一つだと送料の方が高くなってしまうので、基板のみやら予備をいくつか買ってみた。

Sanguino05

|

2008.10.25

[iPhone][AVR]iPhoneにAVRマイコン(Atmel ATtiny45)をつなぎ温度計測してみた

ATtiny2313にはADCが無いから、LM35DZLM60のようなアナログセンサーがつなげないじゃん、ということで、ADCはもとより、温度センサーまで内蔵かつ8ピンDIPで小さいATtiny45を使ってみた。

Iphoneavr04

↑写真は、Dock Connectorの中にどう納めようかと置いてみただけ。

ちなみに、SOIC版のATtiny2313であるATtiny2313-20SUは、国内ではマルツでしか手に入らないみたいだけど、店頭には置いておらず通販専用商品とのことなのでご注意あれ。

ATtiny45はATtiny45で、ADCや、温度センサーはあっても、USARTが無くてiPhoneとシリアル通信ができないじゃん、と思いきや、ソフトウェアで実装する方法があるとのこと。

ICのblog: Tiny26Lでシリアル通信

オプティマイズ: 最新AVRチップ(ATtiny45等のソフトウェアUARTサンプルコード)

また、BASCOM-AVRにも任意のUSART/UARTポート以外のGPIOをシリアルポートとして機能させることができる、ソフトウェアUART機能があるということを知った。以下のソースを見ての通りすげー簡単だ。

というわけで、ソフトウェアUARTが簡単に書けるBASCOM-AVRで書いてみた。

動作は、ATtiny45内蔵の温度センサーから値を取得し、それをソフトウェアUARTポートとして設定したPB1から「9600bps/8/1/NONE」で繰り返し送信するというもの。

BASCOM-AVRのForumにあったスレッド「ATTiny44 ADC reference selection」を参考にさせてもらった。

$regfile = "attiny45.dat"
$crystal = 8000000

$hwstack = 24
$swstack = 16
$framesize = 32

Dim Lsb_adc As Byte                                         'ADC least significant byte
Dim Msb_adc As Byte                                         'ADC most significant byte
Dim Adc_value As Word At Lsb_adc Overlay
Dim I As Byte
Dim Summary As Integer
Dim Offset As Word

Offset = 281

Config Portb.3 = Output                                     'LED

Open "COMB.1:9600,8,N,1" For Output As #1                   'PB1 used for serial output
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1

'ADC Ref 1.1V / Use Temperature Sensor
Admux = &B10001111

Start Adc

Do
   Summary = 0

   For I = 1 To 100

      Set Adcsra.adsc                                       'Start conversion

      While Adcsra.adsc = 1
         'Wait conversion to complete
      Wend

      Lsb_adc = Adcl                                        'Get least significant byte
      Msb_adc = Adch

      Summary = Summary + Adc_value

   Next I

   Summary = Summary / 100                                  'Average
   Summary = Summary - Offset

   Print #1 , Summary

   Set Portb.3                                              'LED Flash
   Waitms 200
   Reset Portb.3
   Waitms 500
Loop

End

Iphoneavr05

しかし、取れる値がどうも変だ。ADCから来る最下位が1度に相当するとのことでおおざっぱだし。

すzのAVR研究: 内部温度計のキャリブレーション

こちらのページでの検証によると、ATtiny45等の内蔵温度センサーならびに内蔵基準電圧はアテにならないそうだ。確かに変だ。5Vで動作させているときと、iPhoneの3.3Vで動作させているときで値が全然違うし。8MHz動作と1MHz動作でも全然違う。何だかよく分からない。

よく分かってないので、プログラムや自分の操作が変かもしれない(どこか変だったら教えてください)。

しかし、まがりなりにもATtiny45をiPhoneのDock Connectorからの電源供給で動作させ、内蔵の温度センサーから温度を取得して、iPhoneに送信、iPhoneで受信して表示というところまではできた。勉強になった。

精度的に使いものにならないので、基準電圧を外部から供給し、温度センサーを外部につないでどうなるか、それがDock Connectorに内蔵できそうかという模索に逆戻りだね。

|

2008.10.23

[iPhone][AVR]iPhoneにAVRマイコン(Atmel ATtiny2313)をつないでみた

iPhoneのDock Connectorにマイコンをつないでみた。

Iphoneavr02

使ったのは、AVRのATtiny2313。
BASCOM-AVRでUSARTに9600bps/8/1/NONEで「test」という文字列を送り続けるプログラムを焼いて、それをiPhoneに接続してみた。

接続は以下の通り。

iPhoneAtmel ATtiny2313
GND (1pin)GND (10pin)
TXD (12pin)RXD (2pin)
RXD (13pin)TXD (3pin)
+3.3V Power (18pin)VCC (20pin)

Iphoneavr03

参考: http://en.wikipedia.org/wiki/Dock_Connector
参考: http://devdot.wikispaces.com/Iphone+Serial+Port+Tutorial

iPhone側では、CydiaからインストールしたRubyに、セルフコンパイルしたruby-serialportを追加して、以下のようなスクリプトを実行。

#!/usr/bin/env ruby
require "serialport"
port = "/dev/tty.iap"
sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE)
while (res = sp.gets)
	puts res
end

これでマイコンから送信された文字列の受信を確認できた。

Iphoneavr

iPhoneからの送信もそのうち実験してみよう。

ちなみに、iPhoneがスリープして数秒たつと、Dock Connectorからの給電は止まってしまう。
メールを受信したらスリープ中もLEDを光らせるユニットを考えていたんだけど、これではだめだね。

でも、いろいろなことができそうだ。
うさん臭いDock Connectorユニットを作ってみよう。
8ピンのAVRはUSARTが無くて面倒臭いので、SOIC版のATtiny2313を仕入れてこようか。

|

2008.10.20

[AVR]ATmega644PにSanguinoのBootloaderを焼いてみたり

Arduinoを体験したくてマイコンいじりを再開。

ATmega644PにSanguinoのBootloaderを焼いて動かし、ATmega168にもArduinoのBootloaderを焼いて動かしてみた。

R0013016

Mac OS Xから焼くのはうまくいかないので、VMware Fusion上のAVR Studioから焼いた。

Bootloaderを焼く際に、Fuse bitのCKDIV8がOnになっているのになかなか気づかずハマった。
これがOnだとクロックを8分周してしまうので、AVRとIDEで通信ができないわけ。
PB5につないだLEDの点滅のスピードが何となく遅いことが気になっていたものの、そうと判明したのは、既に買ってあったArduino DiecimilaのFuse bitとLock bitをAVR Studioで読んで、自分で焼いた動かないものと比較したときだった……。

リセット回路でハマったこと。
Arduino/Sanguinoにプログラムを書き込むには、IDEで書き込みを指示したときにタイミングよくリセットをかけなくてはならない。
最初は、RESETをGNDに落とすスイッチだけを付けて手動でやってみたけれど、これではだめだ。最低限10kの抵抗を介して、プルアップしなければならない。

DTR#を使うと、Arduino Diecimilaのように自動リセットができるようになる。

Macとの接続には、秋月電子のAE-UM232Rを使用。
AVRのRXとAE-UM232RのTX、AVRのTXとAE-UM232RのRXをつなぎ、AE-UM232RのGNDをAVR側のGNDにつないだ上で、AE-UM232RのDTR#を0.1uFのコンデンサ(パスコンに使うやつを流用)を介して、AVRのRESETにつなぐ。
これで、IDEからの書き込み時に自動的にリセットがかかるようになり、書き込みに失敗しなくなった。

自動リセット機能の無いArduinoにも、上記のような結線で自動リセット機能を追加できるね。

|

2008.10.04

[iPhone][Jailbreak]地下鉄通勤者用!? アンテナ検索を強制的に実行するSearchSvcAirPlaneToggle

開発終了のため、公開停止しました。再配布はしないように願います。(2010.05.30)

地下鉄でiPhoneを使っていると、圏外からの復帰の遅さにイライラすることがあると思います。
地下鉄通勤なので、これが結構こたえます。

OS2.1になってから大分改善されましたが、まだ理不尽に遅いことがあり、やっと圏外を脱したと思ったらもう発車、結局停車中に用が足せなかったりします。

こんなときは、機内モードを一時的にオンにしてすぐオフにすると、サービスの検索(アンテナの検索)が強制的に始められて対策になるのですが、メニューの階層が深いので面倒です。

機内モードを制御する方法は無いものか、と思っていたらCydiaに「BossPrefs Airplane Toggle」が来たので、それを使って「機内モードを一時的にオンにしてすぐオフ」を自動的に、かつホーム画面からアイコンタップ一発でできるようにしました。

地下鉄でホームに突入する直前にこれを起動すると、最速で圏外を脱出できると思います。

実地検証を繰り返した結果、役に立たないことが分かったので、リポジトリから削除しようと思います。
圏外の状況では、機内モードをオンにしても、実際に機内モードになるまでに、かなり長いラグがあるからです。

「BossPrefs Airplane Toggle」には、「airplane」というコマンドがバンドルされており、「SearchSvc」ではそれを使っています。
「SearchSvc」は機内モードをオンにして1秒待ち、機内モードをオフにしています。
しかし、それだと実際に機内モードになる前に機内モードをオフにしてしまうことがあるわけです。
特に、一番使いたい圏外では確実にそうなってしまいます。

「airplane status」で現在のモードがどちらなのか判定できます。
これを使えばうまくいきそうなのですが、「airplane on」で機内モードにすると、実際に機内モードになっているかどうかを問わず、直後から「airplane status」で1が返ってきてしまいます。
「airplane」コマンドだけでは、自動的にオンオフするのは無理という結果になりました。

単なるシェルスクリプトアプリケーションなのですが、「SearchSvc」(Search Service)という名前を付けました。

インストールは、例のCydiaの野良リポジトリからどうぞ。
リポジトリについては、下記のエントリに詳細を書いてあります。
「SearchSvc」で検索してください。

ちょうどmooさんから「SearchSvc」をベースに、起動するごとに機内モードをトグルするよう改変した「AirPlaneToggle」をいただきましたので、リポジトリに登録しておきました。

地下鉄の駅に到着する前に「AirPlaneToggle」を起動して機内モードに移行するまで待ち、駅に突入したら再度「AirPlaneToggle」を起動して機内モードをオフにすれば、最速で圏外を脱出できると思います。
手動になってしまいますが、「設定」をいちいち起動するよりは楽になります。

インストールは、例のCydiaの野良リポジトリからどうぞ。
リポジトリについては、下記のエントリに詳細を書いてあります。
「AirPlaneToggle」で検索してください。

無保証です。自己責任でお使いください。

[iPhone]i.softbank.jpドメインのメール着信通知時に着信音とバイブレーションを鳴動させる「SBankNotify」

|

[iPhone][Jailbreak]iPhoneでrlToday!? Lock Screenに任意の文字や画像を表示する

JailbrokenなiPhoneの話題です。

WinterBoardのサンプルにSaurik氏のServer Lock Sampleというものがありますが、これがとても面白いので紹介します。

Server Lock Sampleは、Webサーバ上に置いたhtmlをLock Screenに表示できるというものです。
早い話、Lock ScreenがWebブラウザになるわけですね。

スタイルシートでabsolute指定をすれば、複数の要素を任意の位置に配置できると思います。

/private/var/stash/Themes.DpzNRa/Server Lock Sample.theme/LockBackground.html

上記パスにあるファイルをいじると、任意のページを読み込んでこれます。
早速自分のブログへのリンクに書き換え、遊んでみました。

ただ、ロック時にリロードしているらしいのが問題です。リロードするJavaScriptを仕込むか?

何と、リンクも機能しており、ページを遷移できます。

ローカルに置いたファイルを読むことができました。LockBackground.htmlのsrcを、以下のような感じに書き換えるとローカルのファイルを参照できます。

src="file:///tmp/lock.html"
src="file:///private/var/mobile/lock.html"

lighttpdのようなWebサーバをiPhone上で立てれば、cgiの実行結果を表示させることができるでしょう。

参考ソース
http://moyashi.air-nifty.com/lock.html

Lockscreen01
▲画像が貼れます。imgタグを使用。

Lockscreen02
▲リンクを設定し、タップすると……。

Lockscreen03
▲リンク先を表示できます。

Lockscreen04
▲はっ、すごいことを思い付いた。マイクロブログのアップデート覧だけを置いておくと便利なのでは。

Lockscreen05
▲すぐロックがかかってしまうので、入力途中で電源が落ちてしまう。すると、そこで無理矢理確定されてしまうので実用的でない。ロックされるまでの時間をもう少し長くできれば……。

Windows MobileのrlTodayみたいな感じですね。無限の可能性!!

早速のちなさんのところで「Lock Screenで予定確認。」という試みをされてます。
こんな感じで、何かいじくり倒したいですね。

|

« September 2008 | Main | November 2008 »