n_shinichi’s blog

日々の備忘録、 趣味のあれこれなど紹介 (すみません、メニュー、リンク、カテゴリー分けがうまくできてません、★記事一覧★で見てください...) NHK魔改造の夜ではDンソーのベテランアドバイザーってことで出ました♪

MENU

IRremoteの謎・・・ 降参

ここ最近、赤外線通信でハマってる。

 

赤外線リモコンの仕組みで送受信テストの様子・・・

 

先日紹介したように、”一応” 赤外線送受信を

Arduinoライブラリ IRremote関数を使ってできてはいるけど

どうにもいい感じにできない。

 

いい感じに・・っていうのは

 およそマスター側、M5から送信は10Hz程度の信号更新、

 スレーブ側、マイクロロボ側からは1Hz程度にしたいだけ。

 

適当にランダムにM5から送信は10Hz程度、

 受信はATtinyから1Hz程度でランダムに送ると・・・

 

当然、そこそこタイミングが被ると混信するので落ちるのは

 想定してたけどだいたい、、、実力は

 M5送信(速度指令モータ2個分、2データ)2Hz程度、

 Attinyからの返信(電圧、チップ温度、2データ)が0.5Hz

 まで低下する。

 めちゃ遅い。。。遅すぎる。

 

マイクロロボ、できればせめて5台ほどまでは量産して

 以前M5StickCでのスティックくん5台での連携ダンスみたいなことを

 しようと思ってるけどこれではちょいと厳しい。

 

WiFi、BLEベースで

M5StickCではブロードキャスト送受信がいくらでも早くできた。

 ESPNOWは使い勝手もよかった。

 人の操作は数十Hz程度なんて簡単に行けるのでまったくカクカク感なく送れる。

 

赤外線送受信も普通に使えばブロードキャストになるんだけど

 Arduinoのライブラリはなんかわからん癖がある。

 ただ、、、テレビのリモコン操作的なレベルならもちろんなんの問題もない。

 数十Hzレベルではなんかいかん。。。

 そんな使い方想定してないから。。。当たり前かもだけど。

 

一方通行の通信なら20Hz近くまでできる。

 それが送受信にするとなぜか急に遅くなる。

 なぜか割込みから復帰に秒単位処理が止まる。

 IRremoteライブラリ、追うのはどうにも面倒。

 

ちょいとその辺に詳しい人の話だと、IRremoteライブラリは

 人の操作レベルの応答前提でそれも片方向通信前提っぽい。。。

 テレビリモコンでチャンネルを変える みたいな。

 リアルタイムでの制御、数十Hzの送受信には向いてない。って。

 

IRremoteライブラリのバージョン、派生版はいっぱいあって

受信側は基本、割込みで動くのだけど

 妙な待ちがどこかに仕込まれてる。

 ライブラリ追い掛けてみたけど途中で迷子になって諦めた。

 

最初、簡単に、

ライブラリ呼んで、、、

#include <IRremote.h>

 

送信は

 IrSender.sendNEC(address、command);

 

受信は 割込みで置いて

void ISR_Receive() {
    IrReceiver.decode();
    address = IrReceiver.decodedIRData.address;
    command = IrReceiver.decodedIRData.command;
    sIRDataJustReceived = true;
    IrReceiver.resume();
}

それだけでいけるのでめちゃ簡単♪って喜んでたんだけど。

 

やっぱりシリアル通信の赤外線化が間違いないのかなって

ことになりそう。  最初、、、のその前・・・は、

シリアル通信の赤外線化をしようかと思ってた。

 そういうのならやったことあるし。

 ネットでもやってる人いるし。

 

ただ、一般的?、ベタなやり方?は 送信では

 単純にシリアル通信のTX信号と38kHzPWMの信号を

 ロジック回路のANDを掛けるだけ。

 

受信は、赤外線受信モジュールでフィルタ処理してくれるので

 RXに入れるだけ。

 

普通の赤外線リモコン通信での受信とRXは全く同じ。

送信がちょっとハード追加回路が増えたりする。

 

M5StickCの中で

送信、赤外線通信信号と38kHzPWM信号のAND処理が

ちょっと調べてもわからんかったので赤外線リモコン送信であきらめてた。

 

でもリモコン通信はどうにも難がありそうなので

仕方ない、、、もっかい調べ直しだ・・・

 

ポート信号の演算もなんかArduinoでもそこそこできそうだけど

なんかよくわからん。試していくしかないかな。

でもそういうのやり出すとだんだんハードに近いとこは隠して

使いやすくしてるArduinoの良さがなくなっていくよなぁ。。。

 

ポートをビット単位でハード的に凝った制御するなら

 PSoCの方がよくなってしまう。。。

 PSoCはそれこそなんでもできる。

 ただそれだと仕事のと同じになってしまう...

 

なんか悩ましいな。

 もう数週間赤外線リモコン通信で時間使ってしまった。

 

 東京メイカフェアまでもう2か月切ってしまった。

 ここで通信のやり直しは痛い。