• 締切済み

PICでの赤外線通信について

PICでの赤外線通信について教えてください。 PIC初心者で、赤外線を利用したものを作るための下準備として、赤外LEDを発光させそれを受信モジュールで受け取り普通のLEDを光らせるということをしています。 受信モジュールにはSANYO製のSPS440-1を使用しており、出力が反転するものなので信号がなければLEDは光り続けています。 テレビのリモコンなどを向けると、チラつくのが確認できました。 次にPIC16F84Aで赤外LEDを38kHzで発光させましたが、何も反応がありません。 受信モジュールの出力が反転するものなので、「13μ間ON、13μ間OFF」を続けていれば、常に「1」ということで受信側のLEDは消える、という予想の元行ったのですが・・・ 私の検討違いなのでしょうか?? ケータイのカメラで赤外線を発光していることは確認できました。 ちなみに10MHzのセラロックを使用していますので、正確には13.2μsecのON・OFFを繰り返しています。これが原因でしょうか?? どなたか教えてください。よろしくお願いします。

みんなの回答

  • szk_517
  • ベストアンサー率0% (0/0)
回答No.1

(1)赤外LEDの数を増やす →光が弱いことが原因とも考えられます。部活で赤外線を使用したコントローラを作ったことがありますが、10個くらいは付けてました。10個はちょっと多すぎかも知れませんが…。 (2)受光モジュールを黒い紙で覆って、入って来る光の方向を限定する →指向性(という言葉で合ってるんでしょうか?)を高めるために、黒い紙を筒状にしてかぶせてみてはどうですか? あとは、どのような回路を組まれたのかが分らないので、もしかしたら回路が悪いということもあるかもしれません。 「正確には13.2μsecのON・OFFを繰り返しています。これが原因でしょうか??」 →問題ないと思います。ある本では38kHzではなく37.9kHzと述べられていたような気がします。ある程度は許容されるはず! これで駄目だったらすいません。

gc8_gdb
質問者

お礼

ありがとうございます! それでは教えていただいた通り、赤外LEDの数を増やし、受信モジュールを黒い紙で覆ってみます。 その前に、回路もチェックしてみます。 ありがとうございました!!

関連するQ&A

  • PICで赤外線を検知したいのですが

    射的を作りたいと思い、銃口に赤外線LED、的に受信モジュール (SPS-440-1 http://akizukidenshi.com/catalog/items2.php?q=%C0%D6%B3%B0%C0%FE&s=score&p=1&r=1&page=#I-00614) を使用して、銃を撃つと赤外線が一瞬でてそれを受信モジュールで検知、 マイコンでその後の処理をしようと思っています。 とりあえずPICで動作確認をしたく、受信モジュールと普通のLEDをPICに付け 赤外線を検知するとLEDが光るようにしました。 しかし、赤外線を発光していないときもLEDが微妙に光っていました。 オシロスコープで受信モジュールの出力を調べると ━━━┳━━━━━┳━━━━━┳━━5V    ┃     ┃     ┃    ┃     ┃     ┃    ┃     ┃     ┃    ┃     ┃     ┃                   0V のように一定周期で信号(幅はほぼなし)が出ていました。(赤外線を検知するとL) 受信モジュールを手で覆うと5Vと一定になるので、たぶん蛍光灯などが 原因だと思います。このままではマイコンがこの信号を検知して モータを回すなどの動作が思い通りにいかなくなります。 銃口から出る赤外線 ━━━┓             ┏━━━5V    ┃             ┃    ┃             ┃    ┃             ┃    ┗━━━━━━━━━━━━━┛   0V のみを検知したいのですが、上の瞬間的な信号だけを除去したりして 思い通りに動かす方法はないでしょうか? よろしくお願いします。

  • PICを用いた赤外線通信

     PICを使って赤外線通信をしたいんですが、 いくつか教えていただきたいことがあります。 (1)赤外線の通信仕様・方式なについてなんですが、 下記の2つのページを参考にしたんですが、 http://www.picfun.com/appframe.html http://www.sendai-ct.ac.jp/~ckuma/micom/3048/ir.html 1つ目のページには、リーダー部(8bit)、データ部(16bit)、データ部連送(16bit)の40bitを送ると載っています。 しかし、2つ目のページには、リーダー部()、カスタム部、カスタム反転、データ部、データ部反転の順番で送っているようです。 これって、どちらの方式で送っても、受信した際のソフトの書き方で対応しろってことなんでしょうか? それとも、自分が使用する受信モジュールによって、どっちの送信方法で送れっていうのが決まっているのでしょうか? (2)そもそも、38KHzで変調するということがピンとこないんですが、 例えば上の1つ目のページでいうと、送信する40bit分を1/38K=26mSec周期にしろってことなんでしょうか? ちなみに、PIC16f873、赤外線受信モジュールはSPS440-1を使用しています。 初歩的な質問で申し訳ありませんが、よろしくお願いしますm(_ _)m

  • 赤外線受信モジュール 使い方

    赤外線受信モジュール 使い方 秋月に売っている3端子の赤外線受信モジュールをつかって、「受信するとリレーをONにする」という回路を作りたいのですが、赤外線受信モジュールの使い方がよく分かりません。 赤外線を受信したとき、モジュールの出力はどうなるのですか? 一定の電流が出力されるのでしょうか。 ※使用用途から、赤外線LEDはON,OFFの動作しかしません。 また、そのような回路がありましたらご教授いただけると幸いです。 回答お願いいたします。

  • 赤外発光LED について

    赤外発光LEDには、電気的な周波数特性が有るのでしょうか? 例えば、TV等のリモコンに使用している赤外発光LEDは、キャリア38KHzのON/OFF信号を伝送していますが、このLEDを使用して、2MHzのON/OFF信号(若しくはFSK)を伝送できるか?という事です。又、受信側のPINダイオードも同じ事が言えるのでしょうか? 部品メーカーのデータシートには記載が無い為、実験的に求めるしかないのか?とも思っていますが、ご存知の方、おられましたら、ご教示下さい。

  • PICで赤外線送受信機を作りたいのですが

    PICで赤外線送受信機を作りたいのですが、調べたところ、1bit送るのに38khzのon/offを何十回と繰り返したものを1bitとしてるものばかりでした。 できるだけ高速な通信を行いたいので、これをできるだけ少ない回数繰り返したいのですが、1回とかでは出来ないものでしょうか? また、一般的な受信機は38khzのパスフィルターを使っていますが、これを自分で100khzや200khzのパスフィルターを作ってしまえば多い回数でも高速な通信ができたりはしないのでしょうか? ご回答、よろしくお願いします。

  • PIC タイマー0の使い方

    PIC16F886を触り始めたのですが、タイマー割り込みで苦戦しています。 タイマー割り込みを使ったLEDの点滅の間隔が、自分の思った時間にならないのです。 下に今のプログラムを載せておきます。 私の今の考え方はこうです。 ・内部クロックは4MHzに設定してある ・TMR0のカウントはクロックの1/4らしい→1MHzなので周期は1μsec ・プリスケーラは1:128に設定→128μsecでTMR0がカウントアップ ・TMR0の初期値を61に設定→195回のカウントアップでT0IF=1 ・128μsec*195μsec=2496μsec≒0.025msec←タイマー割り込み ・40回カウントすると1秒 と、1秒ごとにLEDのON,OFFが切り替わるはずだと考えているのですが、書き込んで計測したところ、約0.8秒でon,offを繰り返しています。 私の考え方やプログラムに間違いがあるのでしょうか? もしくはPICがハード的に壊れているのでしょうか?(picに5Vをかけても動かず、mainが実行中に点灯するLED(この時点では点いていない)の端子の両端を指で触ると何故か動き出します。) 以下プログラムです。(注釈などは省いたので見難いかもしれません) #include <stdio.h> #include <stdlib.h> #include <xc.h> #include <pic.h> #pragma config FOSC = INTRC_NOCLKOUT #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config CP = OFF #pragma config CPD = OFF #pragma config BOREN = ON #pragma config IESO = OFF #pragma config FCMEN = OFF #pragma config LVP = ON void interrupt tc_int(void); volatile unsigned int cnt = 0; volatile unsigned int cnt1 = 0; #define sw RB0 #define led RA0 #define led2 RA1 #define led3 RA2 #define _XTAL_FREQ 4000000 void init(void) //初期設定 { OSCCON=0b01101000; // 内部クロック設定 4MHz TRISA=0b00000000; TRISB=0b00000000; TRISC=0b00000000; ANSEL=0x00; /* 割り込み初期設定 */ GIE = 1; // すべての割り込みを許可 T0IE = 0; // タイマー割り込みを禁止 T0CS = 0; // TIMAR0モジュールをタイマーとして使用 PSA = 0; // プリスケーラをTIMER0モジュール用にセット OPTION_REG |= 0x06; // CPUクロックを128分周 TMR0 = 61; // カウンタ値をリセット T0IE = 1; // タイマー割り込みを許可 T0IF = 0; // 割り込みフラグをクリア } int main(void) { init(); sw=1; led=1; led3=0; cnt1=0; LEDflg=0; while(1) { if(cnt1>=10){ led3=~led3; cnt1=0; } } } void interrupt tc_int(void){ // 割り込みハンドラ if(T0IF == 1){ cnt++; TMR0=61; T0IF = 0; // 割り込みフラグをクリア if(cnt>=40){ cnt=0; cnt1++; led2= ~led2; } } }

  • 赤外線受信機

    赤外線受信回路を制作したいのですが、赤外線送信回路からアッセンブラで指定したビット信号をだす送信回路を制作できたのですが、送信回路からのアッセンブラで指定したビット信号を赤外線モジュールでキャッチして、その信号に合ったLEDをPICを使って何個か発行させたいのですが、回路に失敗して困ってます。 なにかいい例となるサイトありますか?? アッセンブラのサンプル例もあれば助かります。 回路では、PIC18F84Aを使用した回路です。

  • 赤外線の導通状態??

    先日、赤外線送信、受信で”0101”の信号を送信したときに、受信部では反転して”1010”の信号が出力するのに、赤外線の回路が導通状態だからってきいたんですが、なんで導通状態で反転するかわかりません。。。 教えてくれたらうれしいです。

  • PIC PWMをLEDドライバで駆動

    PICで生成したPWM信号をLEDドライバで駆動したいと考え添付の様な回路を作成し動作させました。 <問題点> PIC PWM出力直後のLEDは蛍の様に点滅をするのですが、ドライバ駆動のLEDはゆらゆら点滅になってしまいます。 尚、PIC PWMをON/OFF出力にした場合、連動してON/OFFしています。 <LEDドライバ amazon購入> ・入力範囲:DC 5-35V、出力700mA±20mA、1-10 3W LED駆動 ・PWM調光、ハイレベルオフ出力、低レベルの電源オン出力に対応 ・ステップダウン動作モードにより、LEDの総電圧差が入力電源電圧より2 – 3 V未満であることを保証します  ※ステップダウン動作モードが分かっていません 初心者ですので雑な作りかと思いますがご指摘を願いします。

  • 赤外線受信機を作ってます。

    赤外線受信機を作ったんですが、電圧をかけても作動しませんでした。 受信機はPIC16F84Aを使ってます。 http://kaihatsu.shizuoka-c.ed.jp/moodle/hikari/4_sekigaisen.pdf ↑このサイト受信機回路の出力の部分にモーターじゃなくLEDを接続して参考にして作ったんですが、何も作動しなかったんです。 PICの受信機プログラムをそのままコンパイルしてエラーもしませんでした。 やっぱり、回路に接触不良か、つなぎ間違いでもしたんですか?? それとも、アッセンブラの方が間違ってるんですか?? 誰か教えてください。

専門家に質問してみよう