Select Your Language

免責事項

  • 本サイトの情報の利用、内容、サービスによって、利用者にいかなる損害、被害が生じても、著者は一切の責任を負いません。ユーザーご自身の責任においてご利用いただきますようお願いいたします。

    本サイトで頒布している基板およびキットは、技術者、またはそれに準ずる電気的知識をお持ちの電子工作ファンの方のためのものです。一般のオーディオファンの方のためのものではありません。
    また、頒布基板およびキットは、いかなる条件でも動作を保証するものではございませんので、あらかじめご了承ください。

    電子工作では、火傷、感電、火災などの可能性があります。十分に注意をして作業して下さい。

    営利目的のご使用は認めておりません。 記事の転載や、基板・キットの商用利用の方は、ご連絡ください。学生やサークルの学習目的でまとめてご購入する場合は特別価格でご提供させていただきます。
無料ブログはココログ

スポンサー

« BlueSnowDACにIRリモコンを増設する方法 Seeeduino XIAO(ソフトウェア編) | トップページ | 1000万PV記念プレゼント!!! »

2021年11月27日 (土)

BlueSnowDACにIRリモコンを増設する方法 Seeeduino XIAO(メニュー操作編)

こちらの続きです。

XIAOを使ってIRリモコン機能を追加する案です。

ロータリーエンコーダーのプッシュスイッチの方もリモコンから操作できるようにして入力切換やデジタルフィルタ切換などが可能になりました。

Ir_remo23

 

if文での分岐からswitch-case文に変更、ポート操作部を関数化してプログラムコードが読みやすくなりました。

自分で言うのは恥ずかしいですが洗練されました(笑)

 

 

 

配線の接続

まずはハードウェアの説明です。追加する配線は1本で、全部で5本になります。

Ir_remo25

XIAO側の配線です。 C配線が追加になりました。

IR受信部は配線で引き伸ばさずXIAOに直接付けた方が良いです。もし引き伸ばすのであれば受信ICの根元(Vcc-GND間)に0.1~1uF程度のバイパスコンデンサを入れてください。

 

Ir_remo22

こちらは、BlueSnowのフロント基板の裏面です。 同様にC配線が追加です。

3.3V電源は写真のようにC1の足から引き出すと良いでしょう。

 

 

Pch オープン・ドレイン

ロータリーエンコーダのプッシュスイッチは、電源側に接続されていてプルダウン抵抗によりLOWになるような回路になっています。LEDのアノードと共通なので、選択肢はありません。

Ir_remo24

 < プッシュスイッチをONすると3.3Vに >

回転させるエンコーダーの方は、電源でもGNDで接続可能だったのですが慣例的にGNDへと接続してプルアップ抵抗により3.3Vへ釣っています。

ということで、プッシュスイッチ側へ介入するにはオープンドレインのPchを使う必要があります。

でも、Pch オープンドレインってあまり見ないですよね。

マイコンやロジック回路の世界でオープンドレイン、オープンコレクタと言うと、ほぼNch・NPNの事を指します。

 

※)PLCなど産業機器のIOではNPNオープンコレクタ、PNPオープンコレクタは普通にラインアップ、使い分けされています。

 

 

3.3VのArduinoが必須

という訳で、今回、Pchのオープンドレインを使うのですが、Arduinoでは設定できないため、出力をHIGHに設定しておいて、INPUT(ハイ・インピーダンス)とOUTPUTを切換えて等価の動作にしてあげます。

注意点としては、ポートをOUTPUTにしたとき電源電圧が出力されるため、ロータリーエンコーダの電源電圧と同じにしておかなければいけません。

つまり3.3V電源でArduinoを動作させておく必要があります。

通常のArduino UNOなどの基板は5V電源が採用されているためNGです。

Arduino Pro Miniの3.3V仕様などはOK。

Seeeduino XIAOも3.3V駆動なので大丈夫です。

 

 

ソフトウェア

冒頭部に以下の#defineを配置しました。

#define PORT_A 8 // Rotary Encoder A
#define PORT_B 9 // Rotary Encoder B
#define PORT_C 7 // push Switch

#define ADDRE         0x1D // address
#define COMM_UP     0xB  // up command
#define COMM_DOWN 0xD // down command
#define COMM_MENU  0x2  // menu command
#define COMM_OK     0x5D // OK command

ソースコードの中を編集せず冒頭部だけ編集して対応できるようになりました。

// の後ろはコメントです。 前回のup、downキーに加えてmenuやOKをリモコンのキーに割り付けます。

BlueSnowDACのロータリーエンコーダではプッシュスイッチ1個で「短いクリック」と「長押し」の2つ動作を使い分けしたのですが、リモコンはキーが沢山あるので独立したキーにしました。(その方がソフトを組みやすいという理由で)

 

setup()関数

digitalWrite(PORT_A,LOW); // pull up
digitalWrite(PORT_B,LOW); // pull up
digitalWrite(PORT_C,HIGH); // pull down
pinMode(PORT_A,INPUT);
pinMode(PORT_B,INPUT);
pinMode(PORT_C,INPUT);

C配線用のピンを割り当てています。 ポートCだけ出力時HIGHなのがPchオープンドレイン相当にしているところです。

up()関数、down()関数のほか、menu()関数、ok()関数をつくりました。

void up(){
    pinMode(PORT_A,OUTPUT);
    delay(10);
    pinMode(PORT_B,OUTPUT);
    delay(10);
    pinMode(PORT_A,INPUT);
    delay(10);
    pinMode(PORT_B,INPUT);
    delay(50);
}

一例としてup()関数を見るとこんな感じです。何のテクニックもなく単純明快で分かりやすいですね。

最後の50msディレイはリモコンをポチッと1回押した時に2連発で認識してしまう対策です。リモコンの種類や押し方に差があるので、どうも2重押しになってしまうという方はディレイ時間を伸ばして下さい。

 

 

loop()関数では以下のようにコマンドに応じて関数を呼ぶようにしました。

if(IrReceiver.decodedIRData.address == ADDRE){
    switch(IrReceiver.decodedIRData.command){
        case COMM_UP:
            Serial.print(F("Comand UP\n"));
            up();
            break;

        case COMM_DOWN:
            Serial.print(F("Comand DOWN\n"));
            down();
            break;

        case COMM_MENU:
            Serial.print(F("Comand MENU "));
            menu();
            Serial.print(F("!\n"));
            break;

        case COMM_OK:
            Serial.print(F("Comand OK "));
            ok();
            Serial.print(F("!\n"));
            break;

        default:
            break;
     }
}

Serial.print~ ってのはデバッグ用の出力なので動作には必要ありませんが、残っていても悪さをしないのでそのままにしてあります。

 

 

ダウンロード

ダウンロード - simplereceiver_test_xaio_2.zip

先日の通り、「SimpleReceiver」をベースにしています。解凍したSimpleReceiver_Test_XAIO.inoをダブルクリックするとArduinoIDEが起動すると思います。

ボード選択やシリアルポート選択は環境に合わせて再設定してください。***.inoファイルはそういった環境の情報が埋め込まれていない単なるテキストファイルです。

 

 

使用するリモコンに合わせて編集

こちらも先日の通り「ReceiveDump」で解析しても良いのですが、プロトコルさえわかっていれば、「SimpleReceiver」でリモコンキーのコマンドを知ることができます。

ダウンロードしたSimpleReceiver_Test_XAIO.inoではコメントアウトしてある下記の部分を復活させることでシリアルモニタにコマンドが表示されます。

Ir_remo26

トルと書いてある  /*  と  */  を削除すると その間のソースコードが有効になり、リモコン信号を受信したときのコマンドが見えるようになります。

 

Ir_remo27

コンパイルして書き込んだあと、リモコンを受信させたときのシリアルモニターです。

menu、OK(長押し決定)に割り当てたいキーのコマンドを冒頭部の#defineのところにアサインすれば良いです。

 

トルと書いてある  /*  と  */  を戻さなくても動作はしますが、キー割り当てが決まりましたら戻しておくことを推奨します。

※ リモコンのプロトコルが全く不明なときは「ReceiveDump」で解析した方が良いかもしれません。そして、NEC以外のプロトコルの場合は冒頭部の // を変更して有効なリモコンプロトコルの部分を生かしてください。

 

 

以上で完了です。

記事は長かったのですが、やってることは単純ですので応用したいケースにも対応できると思います。これもArduinoのライブラリの力ですね。

« BlueSnowDACにIRリモコンを増設する方法 Seeeduino XIAO(ソフトウェア編) | トップページ | 1000万PV記念プレゼント!!! »

BlueSnowDAC」カテゴリの記事

Arduino」カテゴリの記事

コメント

あの〜。
大変申し訳無いのですが、
前回までの記載通りにprogramを入力して終わりの方に、
エッ!ダウンロード出来るの?
で、ダウンロードして、しっかりと確認したんですけど、
void down();
void menu();
void ok();
が見当たらないのです?

MOSAKUさん

大変失礼いたしました。別のファイルをUPしていたようです。
入れ換えました。

よろしくお願いいたします。

前回までのライブラリを入れるところまでは必須です。 ダウンロードしたファイルにはライブラリのインストールパッケージは含まれていません。

お世話になります。

ダウンロードした SimpleReceiver_Test_XAIO_2.ino のプロトコルとアドレス、コマンドを書き換えて、「マイコンボードに書き込む」をすると
「SimpleReceiver_Test_XAIO_2:52:10: fatal error: PinDefinitionsAndMore.h: No such file or directory」
とエラーが出てしまいます。原因がわかりますでしょうか。

ボードはSeeeduino XIAOで、プロトコル他は「ReceiveDump」で調べました。

ヨシダさん

ファイルもしくはディレクトリがないというエラーですね。

解凍したファイルをどこに入れるかを書いていませんでした。
arduinoのプロジェクトファイルが置かれたところに解凍後のフォルダを置いてください。

Windows10ですと、
C:\Users\(ユーザー名)\Documents\Arduino\SimpleReceiver_Test_XAIO_2
という感じです。

それでもダメでしたら、SimpleReceiver_Test_XAIO_2.inoをテキストエディタで開いて全コピーして、スケッチ例からSimpleReceiverを開いて上書きしても良いと思います。

返信ありがとうございます。教えて頂いた方法でうまくいきました。
ちなみにXIAOにIRセンサを接続した状態では、PCにUSB接続してもXIAOが起動・認識されなかったのでセンサをはずしてから作業しました。

ヨシダ さん

うまく行ったようで良かったです。
IRセンサーを外さないと書き込めない。 という事は無かったような気がするのですが、どうだったろうか。。 色々デバッグしながらソフトを書いたので、大丈夫だったと思うんですけどね。

コメントを書く

(ウェブ上には掲載しません)

« BlueSnowDACにIRリモコンを増設する方法 Seeeduino XIAO(ソフトウェア編) | トップページ | 1000万PV記念プレゼント!!! »

サイト内検索(new)

2024年9月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30