SoftModemインターフェースボードiPhoneのオーディオ端子を使ってArduinoと通信するためのインターフェースボードです。 iPhoneからArduinoへ、ArduinoからiPhoneへデータを送ることができます。通信速度は1225bpsです(※実際のデータ転送レートはもう少し低いです)。センサー情報やスイッチ入力など少量のデータ通信に向いています。 半完成品です。ピンヘッダもしくはピンソケットをハンダづけして使います。 寸法:25 x 25mm スイッチサイエンス/商品詳細:SoftModemインターフェースボード 応用例AndroidでSoftModemを動かしています: AndroidでSoftModemを試してみた Android用のSoftmodem Terminalアプリケーションです: Softmodem Terminal for Android Androidで一眼レフカメラのシャッターを制御しています: Androidで一眼レフカメラのシャッターを制御する JavaScriptで通信用の音声ファイルを作成、再生させてデータ通信を行っています: SoftModemインターフェースボードとJavaScriptで通信 RFID Tagリーダーを製作されています: iPhone RFID Tag Reader 制限
接続iPhoneとの接続には4極オスオスケーブルをお使いください。ケーブルによってはクロストークが発生し、通信エラーの原因になります。金メッキ端子のシールドされたケーブルをお使いください。ケーブルの長さは短ければ短いほどよいです。 Arduinoとは次のように接続します(右側がArduinoの端子)。
ボリューム調整 Arduinoの電源電圧に合わせて調整します。AIN1の電圧をテスターで計り、(VCC / 2) + 300mVになるよう調節します。
Arduinoライブラリ: SoftModemサンプルスケッチ #include <SoftModem.h>
#include <ctype.h>
SoftModem modem;
void setup()
{
Serial.begin(57600);
delay(1000);
modem.begin();
}
void loop()
{
while(modem.available()){
int c = modem.read();
if(isprint(c)){
Serial.println((char)c);
}
else{
Serial.print("(");
Serial.print(c,HEX);
Serial.println(")");
}
}
if(Serial.available()){
modem.write(0xff);
while(Serial.available()){
char c = Serial.read();
modem.write(c);
}
}
}注意事項
iPhoneアプリ: SoftModemTerminal.appSoftModemTerminalはシンプルなiPhone用のターミナルアプリです。前項のサンプルスケッチを書き込んだArduinoと英数字の送受信が行えます。iPhoneのオーディオ端子に何も接続していないと内蔵スピーカーから大きな音がでるので注意してください。 現在、SoftModemTerminalはAppStoreで配布していません。ソースコードをダウンロードし、ご自身でビルドして使って下さい。 SoftModemTerminalのビルドにはXcodeとiPhone SDKが必要です。XcodeはMacOSXのインストールDVDに収録されています。またAppleの開発者ページでもダウンロードできます。 iPhone SDKはAppleの開発者ページで開発者登録を行うとダウンロードできます。アプリケーションをiPhone実機で動作させるには有償のiPhoneデベロッパプログラム(年間¥10,800)に参加する必要があります。 音響電文SoftModemTerminal.appがAppStoreからダウンロードできるようになりました。iPhoneアプリケーションの開発環境をお持ちでないかたは次のURLからアプリケーションをダウンロードしてください。 http://itunes.apple.com/jp/app/id385096654?mt=8 iPhoneソースコードの使用方法現在、iPhone側のSoftModemのソースコードはフレームワーク化されていません。あなたのプロジェクトでSoftModemを使いたい場合、SoftModemTerminalからSoftModemに関連するソースコードをコピーしてくる必要があります。次のリストはSoftModemに関連するソースコードの一覧です。これらのソースコードをプロジェクトフォルダにコピーしてください。
SoftModemは音声の入出力に次の2つのフレームワークを使います。これらフレームワームをプロジェクトに追加してください。
初期化 まず最初にAVAudioSessionクラス使って、アプリケーションのカテゴリを設定します。音声の録音と再生を行うので AVAudioSessionCategoryPlayAndRecord を設定します。 AVAudioSession *session = [AVAudioSession sharedInstance]; session.delegate = self; [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; [session setActive:YES error:nil]; 次に音声解析用のAudioSignalAnalyzerクラス、FSKRecognizerクラスのインスタンスを生成します。AudioSignalAnalyzer はマイクから入力された波形を解析し、波形の上がり立ち下がりエッジを検出します。FSKRecognizer は AudioSignalAnalyzer が解析した結果を元にデータビットを復元します。 recognizer = [[FSKRecognizer alloc] init]; analyzer = [[AudioSignalAnalyzer alloc] init]; [analyzer addRecognizer:recognizer]; //analyzerにrecognizerを登録 [analyzer record]; //音声解析開始 次に音声出力用の FSKSerialGeneratorクラスのインスタンスを生成します。FSKSerialGenerator はデータビットを音声信号に変換し、出力します。 generator = [[FSKSerialGenerator alloc] init]; [generator play]; // 音声出力開始 受信 データの受信は CharReceiver プロトコルを実装したクラスを FSKRecognizer クラスに登録することで行います。 @interface MainViewController : UIViewController <CharReceiver> 初期化のタイミングで FSKRecognizer クラスに登録します。 MainViewController *mainViewController; [recognizer addReceiver:mainViewController]; データを1バイト受信すると receivedChar: メソッドが呼ばれます。 - (void) receivedChar:(char)input
{
//受信処理
}送信 送信は受信に比べてずっと簡単で、FSKSerialGenerator クラスの writeByte: メソッドで1バイト送信します。 [generator writeByte:0xff]; ドキュメント:その他の情報
Copyright © なんでも作っちゃう、かも。 All Rights Reserved.
| ||||





コメントテスト。
Softmodem2を購入させていただきました。PUT SOLDERを半田して、iPhoneアプリをXcodeからインストールし、Arduinoと通信を試みています。iPhoneからの送信ではArduinoのSerialMonitor?で文字化けします。逆にArduinoのSerialMonitor?からiPhoneへは反応がありません。 なにかヒントをいただければと思います。よろしくお願いします。
@lilac 1. iphone to serial monitor : arduino serial monitor must set (57600 baud) then work well 2. arduino serial monitor to iphone is not work to me
@lilac 2. if you use 3pole cable then use 4pole cable