LoginSignup
6
3

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

Last updated at Posted at 2023-04-15

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

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

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);
}

 センサーの赤線 - 5V
 センサーの黒線 - G
 センサーの白線 - Pin35

センサー前方10cm~20cmで一瞬手をかざすなり横切らせれば、チャンネルがアップします。同じ距離ぐらいの所で1秒間ほど手をかざしていればチャンネルダウンします、こちらはうまく行かない時もありますが。今の時代にマッチしたタッチレス選局ですね。まあ、この方法ではボリューム調整とかはまず無理でしょうが(付属リモコンでできます)。面白いと思って頂ければ幸いです。もしできれば付属赤外線リモコンの信号解析をして、ESP側に赤外線受光器を繋ぎ、操作できないか考えてみましょうかね。:thinking:

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3