dポイントプレゼントキャンペーン実施中!

arduinoを使い、赤外線センサでリモコンの電波を受信したらサーボモータを動かす回路を作りました。IRreoteのサンプルを使用し、無事動作するようになりました。
赤外線センサとサーボモータを1セット追加して、受信した方のサーボを動かしたいと思ったのですがうまく動作しません。原因を探ったところ、2つの赤外線センサが同じ動きをしている為でした。
回路を簡単にしていったところ、無事動作している回路のGNDと追加の赤外線のGNDのみをつなぐと、追加したセンサも受信できる状態になってしまっています。(Vcc,Voutには接続していません。)
リモコンから送信する信号は一つで、受信するセンサーを2つ付け、受信した側のサーボモータを動かすにはどの様な配線、またはプログラムにしたらよろしいでしょうか?

質問者からの補足コメント

  • うまく動作しないプログラム。


    #include<Servo.h>
    #define ON 0x807FE11E//「全灯ボタン」
    #define OFF 0x807F619E//「消灯ボタン」
    int RECV1_PIN = 10;
    int RECV2_PIN = 11;
    IRrecv irrecv1(RECV1_PIN);
    IRrecv irrecv2(RECV2_PIN);

    decode_results results1;
    decode_results results2;
    Servo myservo1;//Servoオブジェクトの宣言
    Servo myservo2;//Servoオブジェクトの宣言

    void setup() {
    Serial.begin(9600);
    irrecv1.enableIRIn();
    irrecv2.enableIRIn();

    「赤外線センサーについて」の補足画像1
      補足日時:2020/02/25 16:33
  • myservo1.attach(3);
    myservo2.attach(4);

    myservo1.write(90);
    myservo2.write(90);

    }

      補足日時:2020/02/25 16:34
  • void loop() {
    if (irrecv1.decode(&results1)) {
    if (results1.value == ON) {
    myservo1.write(180) ;
    }
    if (results1.value == OFF) {
    myservo1.write(0);
    }
    irrecv1.resume();
    }

      補足日時:2020/02/25 16:35
  • else if (irrecv2.decode(&results2)) {
    if (results2.value == ON) {
    myservo2.write(45) ;
    }
    if (results2.value == OFF) {
    myservo2.write(0);
    }

    irrecv2.resume();
    }
    }

      補足日時:2020/02/25 16:36

A 回答 (4件)

原因は他の方が


私は写真を見て酷い配線だなと、マイコンや赤外線センサの誤動作も発生するかと。
対策は、基板に電源が入って来る所に直にブレッドボードの赤黒の配線を接続し、ブレッドボードのサーボモーターへの電源に10μと0.1μのコンデンサを付ける。
サーボモーター1の電源も駄目。茶色基板の電源も青の基板から取る。と言うかここら辺の配線がオカシイぞ。ここら辺を見ただけで、これが大きな原因かと思ってしまう。
    • good
    • 0
この回答へのお礼

指摘されている点について調べてみました。
組んだ回路は、電源ノイズ対策、消費電力の問題など考慮されていないということが分かりました。
もう一度そのあたりの勉強をしてから回路を作成してみます。
アドバイスを頂きありがとうございました。

お礼日時:2020/02/26 05:13

プログラムの問題ではない。

根本的な部分で誤解していると思う。
リモコンの出す赤外線がレーザーみたいに細いラインになっていると思っているなら間違い。実際には結構幅広く放射状に出ているので、一つの赤外線センサーに向けて撃っている積りでも隣の赤外線センサーにも結構な赤外線が入る。感覚的には散弾銃で撃っている感じかな。
射的のようなことをさせたければ発射する方を赤外線リモコンではなく赤外線レーザーにすべき。
    • good
    • 3
この回答へのお礼

アドバイスありがとうございます。リモコン部はレンズで絞るつもりでいますが、まだ試していません。うまくいかないようでしたらレーザー式も調べて検討してみます。

お礼日時:2020/02/25 16:39

今の配線図をアップしてほしいんですが

    • good
    • 0

エンジニアとして答えたくても、変な日本語で質問が理解出来んw


やってることも意味不明だから余計にw
    • good
    • 1
この回答へのお礼

説明不足で分かりにくく申し訳ありません。作ろうとしている物は、射的ゲームで、リモコンのLEDを光線銃に見立て、IRセンサーを仕込んだ的に当たったら、サーボモータでその的を寝かせ倒すというものです。的を増やしたいのですがうまく動作しません。
的が一つの場合はいいのですが、2つになったときうまく動作しません。
動作確認が取れているプログラムは以下の通りです。


#include<IRremote.h>
#include<Servo.h>
#define ON 0x807FE11E//「全灯ボタン」
#define OFF 0x807F619E//「消灯ボタン」
int RECV1_PIN = 11;// 赤外線受信モジュール


IRrecv irrecv1(RECV1_PIN);// 赤外線受信用オブジェクトの設定

decode_results results1;// 赤外線受信結果を格納する
Servo myservo1;//Servoオブジェクトの宣言



void setup() {

irrecv1.enableIRIn();// 受信を開始する

myservo1.attach(3);
myservo1.write(90);

}

void loop() {
/* 赤外線を受信したら値を返す */
if (irrecv1.decode(&results1)) {
if (results1.value == ON) {
myservo1.write(180) ;
}
if (results1.value == OFF) {
myservo1.write(0);

}
irrecv1.resume();// 受信機をリセットする
}
}

お礼日時:2020/02/25 09:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!