シャープの赤外線測距センサーをウェブラジオの選局に利用してみた

　以下の記事を参考にさせていただいています。

https://qiita.com/ynomura/items/e0cab352c90ff4025e59

　今回ご紹介する内容のキッカケとなった２つの製作物です。
　１．"TTGO LoRa32‐OLED"と"PCM5102"で構成したインターネットラジオ
　２．ア〇ゾ〇で購入したMade In Chaina"Bluetooth SPEAKERS"を百均のケースに収め、同アクティブスピーカーを繋いだ私称「マイクロコンポ」
![チャンネル選択.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3189926/5b504d6a-208b-3d05-3f0c-1f582bd2a75a.jpeg)
　この格安"Bluetooth SPEAKERS"ですが、ブルートゥース接続・FM(日本の周波数帯ではないのが難点)・LINEIN・USBメモリ・SDカードの音楽(MP3,WAV)が再生できる中々の代物。ケースは以前"Raspberry Pi"のケースとして使用していた物を流用。このケースの後ろにLINEINとスピーカー用のステレオミニジャックを付けました。コンパクトで場所は取らないし、マニアではない私には十分良い音です。今、これでウェブラジオ(LINEIN)を聴きながら作業してます。色も緑、赤、紫、青と光って美しくとても気に入っています。
　やっとここから本題です。聴きながら、やっぱり気分に合わせて選局したいなと思いました。さてどうするか？ユーチューブを眺めると、定石通りタッチパネルを付けたり、レトロなダイアルで裏側にはLEDを配して、とか工夫が凝らされてます。取り合えず、私は選局だけできればいいのです。赤外線リモコンはどうだろうか、"Bluetooth SPEAKERS"にはリモコンまで付属しているのです。でも、リモコンから出る信号を解析する？すぐにはできないしな。「赤外線」で閃きました。昔、障害物回避ロボットを作ってた時のシャープ製赤外線測距センサー「GP2Y0A21YK0F」が道具箱に一杯残ってる、これを使えないかと。これに手をかざせばチャンネルアップ。ではチャンネルダウンは？そして、次のコードが現段階の結論です。"ArduinoIDE2.0.4"の"TTGO LoRa32‐OLED"で検証しました。
```cpp:NetRad_GP2Channel.ino
#include "Arduino.h"
#include "WiFi.h"
#include "Audio.h"

#define I2S_DOUT 25  // DIN
#define I2S_BCLK 27  // BCK
#define I2S_LRC  22  // LCK  Pin26 is dead. very sad.

Audio audio;

String ssid     = "****";
String password = "*****";

String stations[] = {
  "ice1.somafm.com/illstreet-128-mp3",             // SomaFM / Illinois Street Lounge
  "ais-sa2.cdnstream1.com/b22139_128mp3",          // 101 SMOOTH JAZZ
  "relax.stream.publicradio.org/relax.mp3",        // Your Classical - Relax
  "16963.live.streamtheworld.com/SAM03AAC226_SC",  // #1980s Zoom
  "ice1.somafm.com/secretagent-128-mp3",           // SomaFM / Secret Agent
  "ice1.somafm.com/seventies-128-mp3",             // SomaFM / Left Coast 70s
  "ice1.somafm.com/bootliquor-128-mp3",            // SomaFM / Boot Liquor
  "musicbird.leanstream.co/JCB032-MP3",            // 84.3 FM Edogawa (FMえどがわ, JOZZ3AS-FM, Edogawa City,...
  "musicbird.leanstream.co/JCB093-MP3",            // Dreams FM (ドリームスエフエム, JOZZ0AI-FM, 76.5 MHz, Kurume...
  "musicbird.leanstream.co/JCB104-MP3",            // Kyoto Living FM (京都リビング FM/きょうと りびんぐ FM)
  "musicbird.leanstream.co/JCB015-MP3",            // FM Blue Shonan (FM・ブルー湘南 , JOZZ3AD-FM, 78.5 MHz, Y...
};

uint8_t cur_station;  // current station No.
int intPin = 35;

void setup() {
  cur_station = 0;
  Serial.begin(115200);
  
  WiFi.disconnect();
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid.c_str(), password.c_str());
  while (WiFi.status() != WL_CONNECTED) delay(1500);
  Serial.println("WiFi start");

  pinMode(intPin, INPUT);

  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
  audio.setVolume(12);  // 0...21
  audio.connecttohost(stations[cur_station].c_str());
}

void loop() {
  audio.loop();
  if ( analogRead(intPin) > 2500) {
    audio.stopSong();
    delay(500);
    if ( analogRead(intPin) > 2500) {
      cur_station--;
      if (cur_station < 0) { cur_station = 10; }      
    }else{
      cur_station++;
      if (cur_station > 10) { cur_station = 0; }
    }
    delay(3000);             // これを入れないと連続チャンネルアップになる
    Serial.print("\n\rStation : ");
    Serial.print(cur_station);
    Serial.print(" > ");
    Serial.println(stations[cur_station].c_str());
    audio.connecttohost(stations[cur_station].c_str());
  }
}
// optional
void audio_showstreamtitle(const char *info) {
  Serial.print("streamtitle ");
  Serial.println(info);
}
void audio_bitrate(const char *info) {
  Serial.print("bitrate     ");
  Serial.println(info);
}
```
:::note info
　センサーの赤線 － 5V
　センサーの黒線 － G
　センサーの白線 － Pin35
:::
センサー前方10cm～20cmで一瞬手をかざすなり横切らせれば、チャンネルがアップします。同じ距離ぐらいの所で１秒間ほど手をかざしていればチャンネルダウンします、こちらはうまく行かない時もありますが。今の時代にマッチしたタッチレス選局ですね。まあ、この方法ではボリューム調整とかはまず無理でしょうが(付属リモコンでできます)。面白いと思って頂ければ幸いです。もしできれば付属赤外線リモコンの信号解析をして、ESP側に赤外線受光器を繋ぎ、操作できないか考えてみましょうかね。:thinking: