■STM32のMini-Beeであれこれ暇つぶし中。とりあえずお勉強がてらいじくっているわけですが、やっぱり何か目標がないとつらい。温度計はこないだ作ったから、次はリモコンかな。赤外線リモコン。PICでも作ったしAVRでも作ったし、ここはひとつSTM32でも。
そうは言ってもあまり本格的に工作するつもりはないので、ブレッドボードベースで。過去のリモコン製作での悩みどころは赤外線LEDのパワー不足のようなところがところが見受けられたことでした。
今回、今まで使っていたものより一桁パワーが違うらしい赤外線LEDを使い、それにともない流れる電流量も増えるようなので、プロセッサとは別に給電し、そのスイッチングをFETのハイサイドでとか。それと治具として、赤外線リモコンの受光ユニットが必要。それらをブレッドボード上に構築する。
まずは受光ユニット。赤外線リモコンの発光信号(39KHz搬送波)を拾うセンサの出力をSTM32に読ませて、オン・オフの判断をさせればいい。センサはロームのRPM7138-R。データシートの説明がちょっと不親切で戸惑ったのだけど、負論理の出力で、信号を受けると電位がグランド付近にまで下がる。データ分析用にUSARTでPCへ送るようにするのが目標としても、まずはLチカ。センサが信号を検知したときにLEDが光るようにした。
ちょっと面倒だなと思ったのはRPM7138-Rが5V動作(とデータシートにはあった)なのだけど、STM32が3.3Vで動作する点。USB給電だから5Vは問題ないのだけど、3.3Vで動くSTM32には電圧が高い。まあ、間に抵抗器を挿入して電位差を吸収すればいいにしても、給電系が揃わないのはちょっと面倒。
まあ、ものは試しとVccに3.3Vをつないだらちゃんと動いた。STM32側のGPIOはGPIO_Mode_IPDに設定して読み込みます。初期化は以下の要領。A1ピンを使っています。
GPIO_InitStructure.GPIO_Pin = _BV(1); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
ピンの読み出しはReadInputDataBit関数を使いました。
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);
Lチカはまあ、サンプルそのままに。でも信号受信しても光るの一瞬だから今ひとつつまらない。というか、本当に信号を拾えて分解できているのかいまひとつ不明。
なので、さっそくオシロスコープで。
全体に波打っていて(200Hzくらい)気持ち悪いんですが、これはたぶんUSB給電の影響ですね、ということにしておこう。