IPIで売ってるFM無線送信/受信モジュールを使ってみた。

先週の火曜から金曜まで残留して、433MHzの送信/受信モジュールで通信できるようになった。

送信機側

DSC04102.JPG

左下の白い線がアンテナ

受信機側

DSC04103.JPG

右の白い線がアンテナ

UART(2400bps)→FM→UART(2400bps)と変換してくれるモジュールなのだが、何も送信してなくてもアンテナから常にノイズが入るので、シグナルとノイズを区別する必要がある。

連送照合(同じ文字をn文字ずつ送り、シグナルかどうか照合する)を使ったり、連送照合しても偶に文字列の頭の文字だけが抜けたりするので、頭に0xFF、ケツに0x00送ってみたりしながら色々工夫してたらできた。DNP1階~2階間ぐらいでならノイズ無しで通信できる。

ただし、136bpsしか出ない。(アンテナがブレッドボードの線だからノイズが入るのかもしれない)

やってみて、正直forkやthreadが無い上RAMも128byteだけのAVRで通信しながら他の処理をやったら頭おかしくなると思ったので、普通にRS232接続でデータを送る感じで使えるラッパーを作ろうと考えた。

DSC04110.JPGDSC04111.JPG

送信機のハードができた。例によってCDドライブのオーディオケーブルで接続。ISPコネクタも装備。

ソフト書こう。

*送信機(AT90S2313 10MHz)の機能

-UART(9600bps)で受信して、バッファに溜めて、UART(2400bps)でn連送する

-文字の頭と尻に特徴的なビットを付ける

-パリティビットを付ける

-送信機のIDも送る

-送信中は、メインマイコンが更にデータを送って来ない様に「ちょっとまってシグナル」を送る

*受信機(AT90S2313 10MHz)の機能

-UART(2400bps)で受信して、バッファに溜めて、中身をチェックして問題なければUART(9600bps)で送信する

-n’文字以上同じ文字が来ていれば、シグナルだ(n>n’)

-文字の頭と尻の特徴的なビットを検出して、シグナル/ノイズを判断する

-パリティビットを検出して、(以下同文)

-送信機のIDを見て、通知する

送信機と受信機を接続して、勝手にコリジョン回避までやってくれるようにできたらマンセーだな。

欲を言えばマルチホップとかも。