なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

梅.py "Python自習室" その3

Posted by arms22 on 2010年06月26日 9  0

梅.pyこと"Python自習室"に参加してきました。これで2回目の参加。なんかレギュラーメンバになりそうな予感。まったくPythonさわってないけどね。

Arduinoで商用電源の周波数を計測する

5cmのワイヤ1本でACコンセントの電源周波数を計測できることを知ったので実験。過去にこの周波数を使って計時する時計があったらしい。何かのネタとして使えるかもしれないので実験してみた次第。

iPad使ってみた

iPadを使ってみた。画面がおおきくてWEBページがみやすい、漫画も本も読める、タッチバッドキーボードもちゃんと使える。これなら普段使いように1つほしくなります。。うー、やばい。買っちゃいそうー。

ジャンパーばしばし

Cdsを使って明るさ検出。なんだかArduinoが人気のようです。あんな人やこんな人までArduino。猫もしゃくしもArduino。みたいニャ。


梅.py "Python自習室" (mini Hack-a-thon) その3
http://tweetvite.com/event/umepy20100626

AC 50HzのクロックでLEDピカピカ その2
http://blog.goo.ne.jp/jj1wkn/e/3ff8256c898d268ebe05a344f246b819

商用電源周波数 - Wikipedia
http://ja.wikipedia.org/wiki/商用電源周波数



本日のテキスト。Arduinoのリファレンスとしてどうぞ。

Arduinoをはじめよう
Arduinoをはじめよう
posted with amazlet at 10.06.26
Massimo Banzi
オライリージャパン
売り上げランキング: 2343


↑だと物足りない人は「Prototyping Lab」がオススメ。

Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
小林 茂
オライリージャパン
売り上げランキング: 1414



Arduinoで遊ぼう - iPhoneのオーディオ端子を使って通信をする

Posted by arms22 on 2010年06月19日 76  0

目次



イントロダクション


IMGP7601.jpg

iPhoneのオーディオ端子を使ってArduinoと通信するライブラリ「SoftModem」を作ったよ。SoftModemはその名前のとおりソフトウェア・モデムのこと。ソフトウェアでデジタル信号と音声信号を相互に変換する。

通常、iPhoneとマイコンを通信させたい場合、Wi-FiかBluetoothを使うことになる。Wi-FiやBluetoothを使うにはマイコン側に無線モジュールが必要で、コストがかかるし、電力的に厳しくなる。JailBreak(脱獄)すればDockコネクタのシリアル端子を使ったアプリケーションが作れるが、そうして作ったアプリケーションはAppStoreで配布できない。

ソフトウェア・モデムなら追加の部品も数点、数百円のコストですむし、作ったアプリケーションはAppStoreで配布することもできる。今回、このSoftModemを使ってiPhoneと簡単なシリアル通信の仕方を紹介する。

ソフトウェア・モデムの元ネタは「iPhone Hacks」という本の記事で、この本ではPSoCマイコンを使ったiPhone用のキーボードや赤外線リモコンの作り方を紹介している。PSoCのコードとiPhoneのコードが次のURLで公開されていて、自由にダウンロードできる。iPhone側のアプリケーションのコードはiPhone Hacksのコードを流用させてもらった。

Perceptive Development Labs
http://www.perceptdev.com/labs/


仕組み


SoftModemはFSK(Frequency Shift Keying)=周波数偏移変調を使ってデジタル信号を音声信号に変換する。データ'0'の時は低周波数の搬送波を、データ'1'の時は高周波数の搬送波を送る。

次の図は1番目の波形がデジタル信号、3番目の波形が変調後の音声信号を表している。データが'1'の時は波形の間隔が短く、データが'0'の時は波形の間隔が長くなっているのがわかる。音声信号の受け側はこの周波数の違いをもとにデジタル信号を復元する。
FSK(周波数偏移変調)
(via http://en.wikipedia.org/wiki/Frequency-shift_keying)

標準的なシリアル通信プロトコルではデジタル信号はスタートビット'0'から始まって、データ8bit、偶数パリティ1bit、ストップビット'1'が送られる。SoftModemではこれを少し拡張し、送信の前には音声信号の安定用に8~16bitの"1"=プリアンブルを送り、ストップビットの後に”押し出し”用の'1'を送っている。

iPhone側のサンプリング周波数やマイコンの処理速度から、FSKを使ったSoftModemの最高ビットレートは1200bpsあたりが限界(っぽい)。SoftModemが対応するボーレートと周波数の組み合わせ次のとおり。iPhone側のサンプリング周波数、44.1kHzを基準にボーレートと搬送周波数を決めている。

ボーレート126bps315bps630bps1225bps
低周波数882Hz1575Hz3150Hz4900Hz
高周波数1764Hz3150Hz6300Hz7350Hz



SoftModemの受信


SoftModemはATmega328内蔵のアナログコンパレータを使って音声信号の解析を行う。アナログコンパレータで音声信号の立ち下がりを検出する。立ち下がりから次の立ち下がりまでの時間をTimer2でカウントし、周波数を特定する。周波数が分かれば0か1か分かるので、あとはボーレートに合わせてデジタル信号を復元する。


SoftModemの送信


送信はいたって簡単。送信するデータビットに合わせて、デジタルポートから矩形波を出すだけだ。プリアンブルを1byte毎に送信していると転送レートが極端に悪くなってしまうので、しばらく送信していなかった場合のみ送るようにしている。


回路図


iPhoneソフトウェアモデム回路図

iPhoneからの音声信号はC1を通って、R1/R2で2.5Vのバイアスをかけて6番ピンに接続する。7番ピンにアナログコンパレータの閾値用の電圧をかける。ArduinoからiPhoneへの信号はR3/R4で分割し、C2を通ってiPhoneのマイク端子に接続する。R5はiPhoneにマイクが繋がっていることを認識させる為に必要な抵抗。R6はVCC/2から250mVぐらい下げた電圧になるように調節する。


iPhoneのマイク端子


iphone-phone-plug.jpg

iPhoneのオーディオ端子は4極で根元からマイク、グランド、右チャンネル、左チャンネルとなっている。ちょっと変則的?


ライブラリのインストール


次のURLからライブラリをダウンロードして、Arduinoのライブラリフォルダ(OSXの場合~/Documents/Arduino/libraries、Windowsの場合My Documents/Arduino/libraries)にコピーしてください。

SoftModem
http://code.google.com/p/arms22/downloads/list?can=2&q=SoftModem+label%3AFeatured

SoftModemはATmega328のハードウェア資源であるTimer2を使います。その為、11番ポートへのanalogWriteとtone関数が使えません(ごめんなさい)。またデータ受信時はアナログコンパレータの割り込みが繰り返し入るのでその区間割り込みを禁止しているとデータを取りこぼすことがあります。

※※※注意※※※
SoftModemライブラリはアナログ信号を扱う部分が多いため、通信時にデータが壊れることがあります。SoftModemライブラリを使って通信を行う場合、データが壊れることを想定し、データが壊れても不具合がおきないよう注意してスケッチまたプログラムを作成してください。



サンプルスケッチ


SoftModemライブラリを使ったシンプルなターミナルスケッチです。スケッチをアップロードしたら、シリアルモニタを開いて使います。シリアルモニタから文字列を送るとArduinoを通してiPhoneに文字列が送られます。またiPhoneから送られてきた文字列はArduinoが受け取り、シリアルモニタに送ります。

#include <SoftModem.h> //ライブラリをインクルード
#include <ctype.h>

SoftModem modem; //SoftModemのインスタンスを作る

void setup()
{
  Serial.begin(57600);
  modem.begin(); // setup()でbeginをコールする
}

void loop()
{
  while(modem.available()){ //iPhoneからデータ受信しているか確認
    int c = modem.read(); //1byteリード
    if(isprint(c)){
      Serial.print((char)c); //PCに送信
    }
    else{
      Serial.print("("); //表示できない文字はHexで表示
      Serial.print(c,HEX);
      Serial.print(")");
    }
  }
  while(Serial.available()){ //PCからデータを受信しているか確認
    char c = Serial.read(); //1byteリード
    modem.write(c); //iPhoneに送信
  }
}



SoftModemTerminal for iPhone


SoftModemTerminal for iPhone

SoftModemTerminalはソフトウェア・モデムを使ったシンプルなiPhone用のターミナルアプリです。iPhoneとArduinoを4極のケーブルで接続して使います。iPhoneのオーディオ端子に何も接続していないと内蔵スピーカーから大きな音がでるので注意してください。昔懐かしい「ピーヒョロローガーガーピー」を聞きたい人は別ですが。。

※iPhone側の音量は最大にして使用してください。そうしないとArduinoはうまくデータを受信できません。※

このアプリはAppStoreで配布していないので、次のURLからソースコードをダウンロードし、ビルドして直接iPhoneにインストールしてください。このソースコードにはソフトウェアモデムのコードも含まれているので、これをベースにオリジナルのハードウェアとアプリを作って下さい。

SoftModemTerminal
http://code.google.com/p/arms22/downloads/list?can=2&q=SoftModemTerminal+label%3AFeatured


関連URL


Reinforce Lab - iPhone ソフトウェアモデム
http://sites.google.com/a/reinforce-lab.com/www/projects/iphone-software-modem

Togetter - まとめ「iPhoneモデム開発」
http://togetter.com/li/30190

モデム - Wikipedia
http://ja.wikipedia.org/wiki/モデム



Arduino Uno SMD
Arduino Uno SMD
posted with amazlet at 11.02.02
スイッチサイエンス
売り上げランキング: 23827



Iphone Hacks
Iphone Hacks
posted with amazlet at 10.06.19
David Jurick Adam Stolarz Damien Stolarz
Make Books
売り上げランキング: 37863



Arduinoをはじめようキット
スイッチサイエンス
売り上げランキング: 1025



Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
小林 茂
オライリージャパン
売り上げランキング: 8534


大人の科学マガジン vol.27 「ジャパニーノ」(その4)P.O.Vライブラリ

Posted by arms22 on 2010年06月06日 4  0

Japanino付録のP.O.V用にスクロールとスイング、フレームタイムの自動更新、非同期動作に対応したライブラリを作ったよ。P.O.Vまわりのコードをライブラリにすることでスケッチがすっきりするよ。このライブラリを使えば自分が書きたいスケッチに専念できるよ。そこそこ汎用的に作ってあるので、JapaninoのP.O.V以外でも使えると思うよ。うまく改良すれば16ドット幅のP.O.Vや回転するP.O.Vなんかにも対応できるはず。

ライブラリのインストール



次のURLからライブラリをダウンロードして、Arduinoのライブラリフォルダ(OSXの場合 ~/Documents/Arduino/libraries、Windowsの場合¥My Documents¥Arduino¥libraries)にコピーしてください。

JapaninoPOV-001
http://code.google.com/p/arms22/downloads/detail?name=JapaninoPOV-001.zip


サンプルスケッチ


#include <JapaninoPOV.h>

#define LEDPIN 7     // どのピンからLEDをつなぐか
#define SWPIN  6     // スイッチをつなぐピン
#define WIDTH  20    // 表示する幅

JapaninoPOV pov(LEDPIN,SWPIN);
//JapaninoPOV pov(LEDPIN);

// ビットマップ(画像)を定義
byte bitmap[] = {
  0b00000000,
  0b01000001,
  0b01111111,
  0b01000001,
  0b00000000,
  0b00000000,
  0b00001110,
  0b00011111,
  0b00111111,
  0b01111110,
  0b00111111,
  0b00011111,
  0b00001110,
  0b00000000,
  0b00000000,
  0b00111111,
  0b01000000,
  0b01000000,
  0b00111111,
  0b00000000,
};

void setup()
{
  pov.setWidth(WIDTH);
  pov.setFrameBuffer(bitmap,sizeof(bitmap));
  //pov.setFrameTime(60);
  //pov.setFrameTimeAutoDetect(true);
  //pov.setScrolling(true);
  pov.begin();
}

void loop()
{
  //表示を更新する
  pov.update();
}


スウィングさせて使う場合、コンストラクタのSyncPin引数を省略するか、setSyncPin関数をコールします。
JapaninoPOV pov(LEDPIN);

フレームタイムを設定したい場合、setFrameTime関数をコールします。引数はミリ秒です。
pov.setFrameTime(60);

フレームタイムを自動更新したい場合、setFrameTimeAutoDetect関数をコールします。SyncPinのLowからLowまでの時間を2で割った値を自動的に設定します。
pov.setFrameTimeAutoDetect(true);

スクロールさせたい場合、setScrolling関数をコールします。
pov.setScrolling(true);



大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)
大人の科学マガジン編集部
学習研究社
売り上げランキング: 460



Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
小林 茂
オライリージャパン
売り上げランキング: 3043



ラムネビー玉レンズ(上原ゼンジ式宙玉レンズ風)

Posted by arms22 on 2010年06月05日 1  0

PENTAX K100Dにラムネビー玉レンズを取り付けたところ

うちのメガネの助手が上原ゼンジさん考案の「宇宙玉レンズ」をラムネのビー玉を使って作ったよ。アクリル版が手に入らなかったらしく、ビー玉の周りは厚紙で作ってある。だからビー玉の周りは真っ暗になっている。チップスターは海苔塩を選択。

家の近くの野良猫「みけ」を撮ってみた。ファインダーを除いていると上下逆さまになって、撮影し辛かった。腰だめに構えて撮ると良いみたい。ビー玉をもう少し大きく撮りたいところだ。ラムネのビー玉は完全な透明ではなく、少し模様なものが見えている。

ラムネビー玉レンズで撮った三毛猫 ラムネビー玉レンズで撮った三毛猫

ラムネビー玉レンズで撮った三毛猫 ラムネビー玉レンズで撮った三毛猫

ラムネビー玉レンズで撮った三毛猫 ラムネビー玉レンズで撮った三毛猫

ラムネビー玉レンズで撮った三毛猫 ラムネビー玉レンズで撮った三毛猫


上原ゼンジ写真実験室 - 宙玉レンズ
http://www.zenji.info/cn21/pg124.html





Mad Science ― 炎と煙と轟音の科学実験54

Posted by arms22 on 2010年06月02日 5  0

Mad Science

Mad Scienceが届いたので、毎日少しずつ読んで、いや写真を眺めています。この本は54もの「炎と煙と轟音」の科学実験をわかり易い解説と、とても美しく鮮明な写真で紹介しています。これは科学的な読み物というより写真集といったほうが正解かな。

写真を見ているだけで実験を”した”気分になるけど、やっぱり自分で実験したくなる。「DIY水素」や「テルミット反応で鉄を作る」、「クッキー・ロケット」なんかがお手軽で楽しそうだ。ちなみにテルミットとクッキー・ロケットのページには赤いドクロマークと”絶対危険”と書かれている。本当に危険度マックスだ。迂闊に真似しようとしない方が良いだろう。でも実験したくなっちゃう。この本にはそんな誘惑がいっぱいです。



Mad Science ―炎と煙と轟音の科学実験54
Theodore Gray
オライリージャパン
売り上げランキング: 1688



この本が好きな人は↓こっちの本も気に入ると思う。


Core Memory ―ヴィンテージコンピュータの美
John Alderman
オライリー・ジャパン
売り上げランキング: 205553



該当の記事は見つかりませんでした。