質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

331閲覧

groveの赤外線送信機と受信機をarduinoで制御したい。

younet

総合スコア2

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2024/06/19 11:23

編集2024/06/19 13:59

実現したいこと

現在groveの赤外線送信機と受信機をアルディーノを使い制御しようとています。前回の質問でgrove公式が出しているやり方でコンパイルに成功しましたが、シリアルモニタには何も表示されないです。シリアルモニタに動作している証拠が表示されるはずなのでシリアルモニタに表示されない理由と解決策としてサンプルコードを教えていただきたいです。
サイトにはアルディーノ用のデモコードは提供できないと書いてあるのでアルディーノでは対応できないコードだと思います。(公式のサンプルコード画像は一枚目受信機Verと二枚目送信機Ver)
イメージ説明
イメージ説明

またアルディーノとブレットボードの回路は送信機の場合はデジタルピン側のGRDと送信機のGRD、~3ピンと送信機のVCC。 受信機は同じくアルディーノのGRDと受信機のGRD、受信機VCCとアルディーノの5Vピン、レシーブピンはアルディーノの2と受信機のRXです。
受信機はこの回路で一度受信に成功しており、ライブラリから持ってきたIRrecvDumpV2(IRremote2.6.1)を使って成功した。

groveのサイト https://wiki.seeedstudio.com/Grove-Infrared_Receiver/

発生している問題・分からないこと

grove公式サイトではアルディーノを使っておらず、私がアルディーノと送受信機だけやろうとしているからシリアルモニタに何も表示されないのですか?
また、アルディーノとgroveの送受信機だけを使い赤外線の送受信をしたいです。
送受信のそれぞれのコードをまとめていないのですがそれが原因ですか?
サイト記載内容を見落としていたらすみません。

該当のソースコード

/* send.ino Example sketch for IRLib2

  • Illustrates how to send a code.

*/
#include <IRLibSendBase.h> // First include the send base
//Now include only the protocols you wish to actually use.
//The lowest numbered protocol should be first but remainder
//can be any order.
#include <IRLib_P01_NEC.h>
#include <IRLib_P02_Sony.h>
#include <IRLibCombo.h> // After all protocols, include this
// All of the above automatically creates a universal sending
// class called "IRsend" containing only the protocols you want.
// Now declare an instance of that sender.

IRsend mySender;

#define IR_SEND_PWM_PIN D3

void setup() {
Serial.begin(9600);
delay(2000); while (!Serial); //delay for Leonardo
Serial.println(F("Every time you press a key is a serial monitor we will send."));
}

void loop() {
if (Serial.read() != -1) {
//send a code every time a character is received from the
// serial port. You could modify this sketch to send when you
// push a button connected to an digital input pin.
//Substitute values and protocols in the following statement
// for device you have available.
mySender.send(SONY,0xa8bca, 20);//Sony DVD power A8BCA, 20 bits
//mySender.send(NEC,0x61a0f00f,0);//NEC TV power button=0x61a0f00f
Serial.println(F("Sent signal."));
}
}

/* rawR&cv.ino Example sketch for IRLib2

  • Illustrate how to capture raw timing values for an unknow protocol.
  • You will capture a signal using this sketch. It will output data the
  • serial monitor that you can cut and paste into the "rawSend.ino"
  • sketch.

*/
// Recommend only use IRLibRecvPCI or IRLibRecvLoop for best results
#include <IRLibRecvPCI.h>

IRrecvPCI myReceiver(2);//pin number for the receiver

void setup() {
Serial.begin(9600);
delay(2000); while (!Serial); //delay for Leonardo
myReceiver.enableIRIn(); // Start the receiver
Serial.println(F("Ready to receive IR signals"));
}

void loop() {
//Continue looping until you get a complete signal received
if (myReceiver.getResults()) {
Serial.println(F("Do a cut-and-paste of the following lines into the "));
Serial.println(F("designated location in rawSend.ino"));
Serial.print(F("\n#define RAW_DATA_LEN "));
Serial.println(recvGlobal.recvLength,DEC);
Serial.print(F("uint16_t rawData[RAW_DATA_LEN]={\n\t"));
for(bufIndex_t i=1;i<recvGlobal.recvLength;i++) {
Serial.print(recvGlobal.recvBuffer[i],DEC);
Serial.print(F(", "));
if( (i % 8)==0) Serial.print(F("\n\t"));
}
Serial.println(F("1000};"));//Add arbitrary trailing space
myReceiver.enableIRIn(); //Restart receiver
}
}

上記のURLに飛ぶと同じコードあります。

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

特に何もできていない。下手にいじれない。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

younet

2024/06/19 11:25

現在はSeeed_arduino_IRのライブラリをダウンロードしてます。IRremotoも2.6.1でなく最新バージョンの4.3.2です
TakaiY

2024/06/19 11:30 編集

ここは、質問に対するコメントを書くところです。 追加の情報があるのであれば、ここではなく、質問を編集して追記しましょう。 コードを画像で貼られても、読みにくく、こちらでの検証もできないので、編集画面の</>ボタンで表示されるコード挿入フォーマットに従って貼り付けてください。 言語の種類は c++ でいいでしょう。
TakaiY

2024/06/19 11:40

> シリアルモニタに何も表示されない とありますが、1行目も表示されないのでしょうか?
TakaiY

2024/06/19 11:47

> サイトにはアルディーノ用のデモコードは提供できないと書いてある どこにそう書いてありますか?見あたらないのですが。
younet

2024/06/19 12:25

コメントありがとうございます。シリアルモニタには写真にある通りです。送信は一文もないですが、受信は受信する準備みたいな文が表示されるのみです。 見直したらアルディーノのデモコードは提供していますが、他のすべては難しいと書いてありました。失礼しました。
younet

2024/06/19 14:02

アドバイスを下さる皆様が検証のためにもサイトを閲覧し、そのままコードをコピーされるかと考えておりました。ご指摘いただいたようにこちらにも貼る必要があることを教えて頂けたので質問編集しました。
TakaiY

2024/06/19 14:05

コードを挿入するときは、先のコメントに書いたとおり、コードの挿入の作法に従って挿入してください。 インデントなどが保存されて読み易くなります。
younet

2024/06/19 14:29

ありがとうございます。理解しました。
tmp

2024/06/20 08:40

https://www.seeedstudio.com/Grove-Infrared-Receiver.html から赤外線の受信機についているフィルタの周波数は、38kHzです。 ソース Seeed_Arduino_IR/src/IRLib_P02_Sony.hの33行目 endGeneric(data,nbits, 600*4, 600, 600*2, 600, 600, 600, 40, false,45000); から読み取ると、Sonyの送信の変調周波数は40kHzです。 受信機についているフィルタで減衰して受信しないと思います。 ソースSeeed_Arduino_IR/src/IRLib_P01_NEC.hの44行目 send(uint32_t data, uint8_t kHz=38) { NECは、デフォルト38kHzなのでNECにして確認してみてはどうでしょうか?
younet

2024/06/24 10:01

コメントありがとうございます。周波数の問題かもしれないのでいただいたご意見でリトライしたいと思います。
guest

回答2

0

ベストアンサー

単に、「アルディーノ」と言わずに、具体的な機種を言いましょう。
全てのARDUINOがサポートされている訳ではないですし、サポートされている機種でも機種によって接続ピン(送信)は変わります。

で、他の方も書いているように、送信側ARDUINOとPCとのシリアル通信が出来ていません。
・ボーレートが合っていない
・ポートが合っていない
あたりだと思いますけど、癖のある機種を使っているのかもしれません。
まずはそこを解決する事です。

次に、送信モジュールとの接続が違っています。

~3ピンと送信機のVCC

VCCは電源ピンです。それでは瞬間的にモジュールの電源を入れているだけですから送信はされません。
VCCはモジュールの電源ですから5Vを繋ぎます。TXは送信ピン(現状D3)を繋ぎます。

後は、

void loop() {
if (Serial.read() != -1) {//(PCから)何か受信したら
mySender.send(SONY,0xa8bca, 20);//IR送信
Serial.println(F("Sent signal."));
}
}

ですよ。
PCから信号命令はしたのでしょうか?

投稿2024/06/20 18:09

nac_tnk

総合スコア485

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

younet

2024/06/24 10:32

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

0

シリアルモニタに何も表示されない

とありますが、1行目も表示されないのでしょうか?

送信は一文もないですが、受信は受信する準備みたいな文が表示されるのみです。

送信側にも、初期化時に、
「Every time you press a key is a serial monitor we will send."」
と表示されるはずですので、赤外モジュール以前に デバイスとIDEの間の通信ができていない可能性があります。

まずは、Lチカなどの簡単なプログラムでArduinoの制御とシリアル通信ができるようにセットアップして問題がなくなってから取り組むのがいいと思います。

投稿2024/06/19 14:02

TakaiY

総合スコア13559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

younet

2024/06/24 10:31

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問