arduinoを使い、赤外線センサでリモコンの電波を受信したらサーボモータを動かす回路を作りました。IRreoteのサンプルを使用し、無事動作するようになりました。
赤外線センサとサーボモータを1セット追加して、受信した方のサーボを動かしたいと思ったのですがうまく動作しません。原因を探ったところ、2つの赤外線センサが同じ動きをしている為でした。
回路を簡単にしていったところ、無事動作している回路のGNDと追加の赤外線のGNDのみをつなぐと、追加したセンサも受信できる状態になってしまっています。(Vcc,Voutには接続していません。)
リモコンから送信する信号は一つで、受信するセンサーを2つ付け、受信した側のサーボモータを動かすにはどの様な配線、またはプログラムにしたらよろしいでしょうか?
No.4ベストアンサー
- 回答日時:
原因は他の方が
私は写真を見て酷い配線だなと、マイコンや赤外線センサの誤動作も発生するかと。
対策は、基板に電源が入って来る所に直にブレッドボードの赤黒の配線を接続し、ブレッドボードのサーボモーターへの電源に10μと0.1μのコンデンサを付ける。
サーボモーター1の電源も駄目。茶色基板の電源も青の基板から取る。と言うかここら辺の配線がオカシイぞ。ここら辺を見ただけで、これが大きな原因かと思ってしまう。
指摘されている点について調べてみました。
組んだ回路は、電源ノイズ対策、消費電力の問題など考慮されていないということが分かりました。
もう一度そのあたりの勉強をしてから回路を作成してみます。
アドバイスを頂きありがとうございました。
No.3
- 回答日時:
プログラムの問題ではない。
根本的な部分で誤解していると思う。リモコンの出す赤外線がレーザーみたいに細いラインになっていると思っているなら間違い。実際には結構幅広く放射状に出ているので、一つの赤外線センサーに向けて撃っている積りでも隣の赤外線センサーにも結構な赤外線が入る。感覚的には散弾銃で撃っている感じかな。
射的のようなことをさせたければ発射する方を赤外線リモコンではなく赤外線レーザーにすべき。
アドバイスありがとうございます。リモコン部はレンズで絞るつもりでいますが、まだ試していません。うまくいかないようでしたらレーザー式も調べて検討してみます。
No.1
- 回答日時:
エンジニアとして答えたくても、変な日本語で質問が理解出来んw
やってることも意味不明だから余計にw
説明不足で分かりにくく申し訳ありません。作ろうとしている物は、射的ゲームで、リモコンの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();// 受信機をリセットする
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- カスタマイズ(車) いわゆる「テレビキャンセラー」について・・・・・ 7 2022/11/01 20:57
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- 運転免許・教習所 踏切の先が赤信号で後続車が線路内で立ち往生した場合、赤信号でも進むべきですかね? 5 2022/06/12 08:00
- リフォーム・リノベーション 赤外線センサーは窓を透過して反応しますか 8 2023/01/16 15:31
- 工学 マイクロマウス「光軸は水平であり、床面より1cmの高さにある(図1参照)」の意味? 1 2022/11/23 10:49
- プロバイダー・ISP NTT のフレッツ光とビッグローブを集合住宅でつなぐ 地点A NTT のフレッツ光が用意された状態の 2 2022/09/14 06:23
- その他(パソコン・スマホ・電化製品) 無線信号の受信装置 1 2023/01/08 07:22
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- その他(自然科学) 熱線センサ自動スイッチの動作原理 下図の動作する仕組みを説明していただきたいです。よろしくお願いしま 5 2023/04/09 20:18
- iPhone(アイフォーン) 皆さんは、iPhone14 Pro MAXや13Pro MAXは、凄いと思いますか?? 僕は両方とも 5 2022/10/22 22:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RS232cを用いた送信プログラム
-
Outlookの「受信日時」「件名」...
-
TCP/IP のパケットの分断と結合...
-
winsockを使ったTCP及びUDP通信...
-
MTUで!!
-
ASP.NET C#でPOST受信
-
msgrcv( )で領域破壊?
-
UDP受信時の通信異常検知について
-
Outlookの「受信日時」「送信者...
-
TCPでパケットロス?
-
DHCPOFFERの受信について
-
パケット受信 recvfrom( )につ...
-
TcpClientとWebbrowser
-
パソコンに詳しい方教えて下さ...
-
バッチファイルでディレクトリ...
-
Windows上のファイル操作の履歴...
-
エクセル 共有ファイル 削除
-
CSVファイルのマッピング処理の...
-
cronからtarで圧縮しようとする...
-
ipadで社内ネットワークに接続
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
シリアル通信時のデータ受信方法
-
TCP/IP のパケットの分断と結合...
-
UDP受信時の通信異常検知について
-
Outlookの「受信日時」「送信者...
-
RS232cを用いた送信プログラム
-
DHCPOFFERの受信について
-
Excxel vba でYahoo API で住所...
-
CRC-CCITTに関しての仕様とサン...
-
recv関数の戻り値について
-
遅延確認応答について教えてく...
-
VC++ 2010 メッセージが文字化...
-
ネットワークでの受信バイト数
-
「TCPは全二重可能」の意味
-
VB2010で、シリアル通信の方法...
-
TCPでパケットロス?
-
赤外線センサーについて
-
C#にてCTI。RS232Cの受信と送信...
-
PC98で232c送信winndowで受信で...
-
パケット受信 recvfrom( )につ...
おすすめ情報
うまく動作しないプログラム。
#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();
myservo1.attach(3);
myservo2.attach(4);
myservo1.write(90);
myservo2.write(90);
}
void loop() {
if (irrecv1.decode(&results1)) {
if (results1.value == ON) {
myservo1.write(180) ;
}
if (results1.value == OFF) {
myservo1.write(0);
}
irrecv1.resume();
}
else if (irrecv2.decode(&results2)) {
if (results2.value == ON) {
myservo2.write(45) ;
}
if (results2.value == OFF) {
myservo2.write(0);
}
irrecv2.resume();
}
}