齢寿天任せ

写真付きで日記や趣味を書くならgooブログ

日産ノート e-Power のセレクトレバーに違和感を感じた

2024-02-03 21:28:20 | 日記

最近の車は電子化が進んでいて、借りた車に初乗りする都度、操作に戸惑うことが多い。操作がメーカーごとに異なり、「一見さんお断り」みたいなケースが結構ある。誤って操作すると事故につながるので、ある程度は標準化が必要ではないだろうか。

日産ノート e-Powerを借り、初乗り(テン乗り)して、戸惑った点をいくつか挙げてみたい。

この車は、キーレスエントリーのタイプである。エンジンをスタートさせる場合は、スタートボタンを押す。普通、スタートボタン、ハンドルの横のダッシュボード下部にあるので、探したが、そこにはない。探す範囲を広げたところ、やっと、センターコンソールにその存在を発見した(3分経過)。

ブレーキを踏んで、スタートボタンを押す。ダッシュボードやカーナビが点灯した。e-Power なのでエンジンがかかったという感触はない。次に、シフトレバー(セレクトレバー)を探す。センターコンソールの中央に、ちんまりと存在するの見つけた。発進させるには、Dレンジに入れる必要があるが、このセレクトレバーの使い方が分からない。しばらくの間、色々試してみたところ、横のボタンを押して後ろ側にスライドさせるとDレンジ、前側にスライドさせるとR(リバース)に切り替わることが分かった(それぞれ左横にランプが点灯する)。この時点では、N(ニュートラル)とP(駐車)に切り替える方法は不明であった。

まあ、DとRがあればなんとかなるだろうと、発進することにして、パーキングブレーキを解除しようとした。この車は電子式なのでスイッチを引いたり押したりしてみたが、解除しているのかしていないか判然としない(表示ランプの意味するところも判然としない)。試しにブレーキを緩めると動き出した(10分経過)。ここは、寒冷地なので、電子式のパーキングブレーキは要注意(凍結)である。

この後、一番困ったのは、セレクトレバーをPにする方法が分からなかったことである。駐車して降りる際に、車が動き出しては困るので、一々、エンジンを切ってから降りることにした。幸い、車は無事返すことが出来たが、疑問点を幾つか挙げてみたい。

後日、ノート e-Powerの説明書を参照すると、Pへの切り替えは、「P」と表示されたボタンを押せばよいとあった。「P」ボタンは何度か押したが、「N」の横に、上の写真のように、Pの上下に矢印がついたランプが点灯するだけで(意味不明である)、Pに切り替わった実感がなかった。なぜ、「P」だけがボタンなのだろうか。一歩譲って、なぜ「P」ボタンを押した時にボタン自体が点灯しないのだろうか。

さらに、説明書を読むと、セレクトレバーの横のボタンを押さないで、セレクトレバーをスライドさせると、「N」を経由(Nの左横にランプが点灯)して、RとDに切り替えられることが分かった(NからRは横のボタンを押さないといけないらしい)。普通、セレクトレバーは、安全のため、ボタンを押さなければ動かせないようになっているはずなのに、スライドさせるだけで切り替えられるとは思わなかった。これでは、うっかり触れて切り替わってしまう恐れがあるのではないだろうか。

蛇足であるが、セレクトレバーの位置は、ダッシュボードに(小さな文字で)表示される。しかし、そんなものは普段運転する時は見ない。

何故、こんな仕様になっているのか、説明書や付属している動画からは分からなかった。

 

 

 

 

 

 


プリント基板の制作を発注してみた(その1)

2024-01-29 19:47:02 | 電子工作

電子工作では、一般にブレッドボード上で試作評価してみて、結果が良ければ、ユニバーサル基板を使って実用版を製作する。ユニバーサル基板は配線の手間がかかって大変なのは承知であるが、多くは一品物なので、わざわざプリント基板を制作することはない。それにプリント基板の制作を発注には万円単位で費用がかると思っていた。

今回は、PCBWAYさんからお誘いがあったので、プリント基板の制作に挑戦してみることにした。費用についてはプロモーションなので補助があるとのことである。一応、ホームページで見積もりしてみた。5cmx7cmのサイズで2層の物は、なんと5$という結果になった。おまけに初めて登録(発注)する場合は5$のクーポンが貰える(結局、タダ?)。

プリント基板の制作は、全く初めて(昔、「エッチング」で製作したことはある)なので、まず、ツールと手順を調べてみた。大まかにいうと、KiCaDというツール(無料で使える)で、配線図を作成し、プリント基板のパターンを設計、それをガーバー(gerber)データにして発注先に渡せば(アップロードする)良いということが分かった。この手順については、こちらに懇切丁寧な記事がある。

現在、KiCaDの最新はV7であるが、より安定しているV6をダウンロードして使い始めた。しかし、前記の記事はV5対応なので、色々と変わっている上に、たまに固まってしまうのであきらめて、V5に変更した。最初に行うのは配線図の作成である。色々パーツ(コンデンサ、抵抗、IC、ピンヘッダーなど)が用意してありそれを並べて、それらの間を配線するという作業であるが、KiCaDは結構クセのあるツールで、作図の操作を会得するまで2日を要した。コツは、どんな部品が用意されているか事前に調べておくこと。作業が早く済む。部品の選択を誤り、やり直しが何度か生じた。

今回は、以前のブログの記事である「週間スケジュール可能なDSPラジオ」をプリント基板化することにした。配線図は以下のようになった。特徴は、I2Cで接続するOLED表示装置とSPIで接続する丸形カラーLCDの両方に対応することである。

KiCadでは、配線図を作成する時に各パーツのプロパティに対して「フットプリント」を定義する。「フットプリント」は、プリント基板上でパーツの実サイズと穴(足)の位置を示している。パーツをプリント基板に取り付ける時に、ピッタリ合わなければいけないので極めて重要である。例えば、U2のXIAO_ESP32C3はメーカーがKiCad用の「フットプリント」を提供している。ただし、KiCad V6用で、今回のV5には取り込めなかった。その際、新規に「フットプリント」を作成するには「フットプリントエディタ」を使用する。今回はサイズとピンの数が同じICの「フットプリント」を流用した。U1のRDA5807については、変換基板を利用するので、サイズ、ピンの数とも合致するDIP ICの「フットプリント」を流用した。

配線図と「フットプリント」が揃ったところで、「ネットリスト」の生成を行う。この「ネットリスト」を「PCBレイアウトエディタ」に取り込むと、「蜘蛛の巣に取り込まれた獲物」の様な「部品が配線によって搦めとられた塊」が現れる。それをほぐすと以下のようになる。

「PCBレイアウトエディタ」上でパーツの配置を決め、プリントパターンを作成する。上のパーツを繋いでいる白い線(配線)は、プリントパータンが出来上がるにつれて消えていく。最終的に、配置は以下のようになった。

左上の赤い十字は基準点((50,50)に設定)である。次のステップは、いよいよプリントパターンの設計である(その2に続く)。

 

 


週間スケジュールが可能なRDA5807 FM DSPラジオに丸形LCDを取り付けてみた

2023-12-28 12:14:23 | 電子工作

試作を行い、丸形カラーLCDを調査していたが、だいぶ使い方が分かってきたので、以前製作した「週間スケジュールが可能なRDA5807 FM DSPラジオ」の表示装置を、丸形カラーLCDに取り換えたものを新たに製作した。時計とFMラジオの表示を合体して、表示画面は結局以下のようになった。ケースは手元にあった筒形の物を利用した。作成したスケッチはGithubに登録してある。

コントローラ(MCU:Seed Studio XIAO ESP32C3)からの制御インターフェースは、I2CとSPIを利用するので、ESP32C3の入出力ピン数ではギリギリで、操作のボタンスイッチを設ける余裕はない。したがって、操作は全てWiFi経由で行う。

この丸形LCDは、240x240ピクセルなので、表示位置は、x:ヨコ位置、y:タテ位置とすると、左上隅は(0,0)、中心は(120,120)、右下隅は(239,239)となる。なお、実際に表示できる円からはみ出た部分は表示されない。丸形LCDにおいては、円の外周に沿って表示を行う必要があるが、その表示位置を求めるためには三角関数を利用する必要がある。

例えば、半径rの円の外周位置(x,y)を求めるには、以下の図に示した計算を行えばよいことになる。角度θの起点は時計の秒針では、15秒の位置になる。例として、半径r=108の時、20秒(4時)の位置は、x=108*cos30°+120≒94+120=214、y=108*sin30°+120=54+120=174というふうに求められる。

腕時計によくある秒単位の印を表示したい場合は、半径r1の円の内側に半径r2の円を想定し、同じ角度θの位置、(x1,y1)と(x2,y2)を求め、2の点を指定して直線を描けば良い。そうすれば、中心からの放射状の直線の一部として描かれる。

高校の数学の教科書みたいになってしまった。


1.28インチ丸形LCDディスプレイ(GC9A01)とESP32でデジタル時計を試作した

2023-11-24 13:47:06 | 電子工作

1.28インチの丸形LCDディスプレイ(カラー、ドライバはGC9A01)が500円位で購入できるようになったので表示装置として利用できないか調べてみることにした。インターネットで調べてみると、レポートはあまり多くない。その中で、このディスプレイの特徴を生かしたデジタル時計の製作例があったので、それを参考に試作してみた。

製作例では、RTC(リアルタイムクロック)モジュールが必須になっているが、RTCモジュールの持ち合わせは無い。以前、Seeed StudioのXIAO ESP32C3を利用して時計を作ったので、RTCの替わりにNTPから時刻を得るのはどうかということで取り組んでみた。

ディスプレイのドライバGC9A01対応のライブラリは幾つかあるが、ここでは「TFT_eSPI」を利用した。ライブラリにはサンプル例が色々あるので動作確認のために幾つか試してみると良い。このサイトが参考になる。確認には「Boing Ball」がお勧めである。

TFT_eSPIは事前に、使用するドライバとMCUに対応するための変更が必要である。ライブラリをインストールした後、「..\Arduino\libraries\TFT_eSPI」の「User_Setup.h」を編集する。

  1. 「Section 1. Call up the right driver file and any options for it」の個所に、ディスプレイ対応のドライバの定義があるので、「#define ILI9341_DRIVER」の行をコメント化し、「#define GC9A01_DRIVER」の行を「非」コメント化する。
  2. 「Section 2. Define the pins that are used to interface with the display here」の個所に、各MCUごとSPIに対するピンの定義があるのでそれを変更する。まず、ESP8266のピン定義をコメント化する。

// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ######

// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation  ##### comment out to line 176
//#define TFT_MISO  PIN_D6  // Automatically assigned with ESP8266 if not defined
//#define TFT_MOSI  PIN_D7  // Automatically assigned with ESP8266 if not defined
//#define TFT_SCLK  PIN_D5  // Automatically assigned with ESP8266 if not defined

//#define TFT_CS    PIN_D8  // Chip select control pin D8
//#define TFT_DC    PIN_D3  // Data Command control pin
//#define TFT_RST   PIN_D4  // Reset pin (could connect to NodeMCU RST, see next line)
//#define TFT_RST  -1     // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V

次に、XIAO_ESP32C3に対するピン定義を追加する。


// For the XIAO_ESP32C3 module use these #define lines   with GC9A01 display ####
#define TFT_MOSI 10  // SDA
#define TFT_SCLK 8   // SCL
#define TFT_CS   3   // Chip select control pin
#define TFT_DC   5   // Data Command control pin
#define TFT_RST  4   // Reset pin (could connect to Arduino RESET pin)

なお、使用しないピン(BLK)は定義していない。接続の様子を以下に示す。

大元のスケッチは、こちら(Github)にあるが、説明は何もない。2ファイルあり、「fonts.h」はそのまま利用し、「watchESP.ino」を改修した。なお、オープンソースのライセンスが明確ではないため、Githubに載せたり、全体を紹介するのは控えることにする。

改修内容を紹介すると、「setup」においては、RTCに関係するコードと意味不明のコードをコメント化し、Wifiに接続後、NTPを参照して、XIAO_ESP32C3の時刻に設定するコードを追加している。

ここで紹介していない部分(特にwifisyncjst())は、XIAO_ESP32C3による時計の記事(上方にリンクあり)を参照するとよい。WifiのSSIDとPASSWORDは、実際にアクセスする無線LANを設定する。


void setup() {
    Serial.begin(115200);
    Serial.println("");
    delay(10);

    //if (! rtc.begin()) {
    //  Serial.println("Couldn't find RTC");
    //}
    //pinMode(2,OUTPUT);
    //pinMode(0,INPUT_PULLUP);
    //pinMode(35,INPUT_PULLUP);
    //pinMode(13,INPUT_PULLUP);

    //digitalWrite(2,0);

    //ledcSetup(pwmLedChannelTFT, pwmFreq, pwmResolution);
    //ledcAttachPin(5, pwmLedChannelTFT);
    //ledcWrite(pwmLedChannelTFT, 200);
    WiFi.mode(WIFI_STA);
    wifiMulti.addAP(ssid.c_str(), password.c_str());  
    wifiMulti.run();   // It may be connected to strong one

    while (true) {
      if(WiFi.status() == WL_CONNECTED){ break; }  // WiFi connect OK then next step
      Serial.println("WiFi Err");
      WiFi.disconnect(true);
      delay(5000);
      wifiMulti.run();
      delay(1000*60);  // Wait for Wifi ready
    }
    wifisyncjst(); // refer time and day
    WiFi.disconnect(true);  // Connection is no longer needed

    //tft.init();  ####
    tft.begin();  // initialize
    //tft.setRotation(0);
     
    //tft.setSwapBytes(true);  ####
    tft.fillScreen(TFT_WHITE); //#### BLACK
    delay(100);
        
    //img.setSwapBytes(true);
    img.setColorDepth(8);      // Create an 8bpp Sprite of 240x240 pixels
    img.createSprite(240, 240);
    img.fillSprite(TFT_BLACK); // Fill the Sprite with black
    img.setTextColor(TFT_GREEN);        // Green text
    img.setTextDatum(4);
   :
   :
}

「loop」では、XIAO_ESP32C3から時刻を得たのち、もとの「DateTime now」変数に設定するコードを追加している。

又、そのままだと何故か、曜日が1日ずれるためXIAO_ESP32C3の時刻から得た曜日を使っている。


void loop() {  
  rAngle=rAngle-2;
  //DateTime now = rtc.now();   ####
  time_t t = time(NULL);
  tm = localtime(&t);
  d_year = tm->tm_year;
  d_mon  = tm->tm_mon+1;
  d_mday = tm->tm_mday;
  d_hour = tm->tm_hour;
  d_min  = tm->tm_min;
  d_sec  = tm->tm_sec;
  d_wday = tm->tm_wday;

  //DateTime now = DateTime(1110000 + sec1);
  DateTime now = DateTime(d_year, d_mon, d_mday, d_hour, d_min,  d_sec);
  angle=now.second()*6; 
:
:
 //img.drawString(days[now.dayOfTheWeek()],circle,120,2);
 img.drawString(days[d_wday],circle,120,2);
:
:
}

 

とりあえず、手元にあったお菓子の容器に入れてみた。外側の秒表示が回転する。外側の赤い丸印は反時計回りに回転する(ただの飾りだと思われる)。ついでに、紹介しておくと、「volos projects」で検索すると、この種の色々なガジェットがyoutubeで見られる。


週間スケジュールが可能なRDA5807 FM DSPラジオ

2023-10-26 15:02:00 | 電子工作

色々なDSPラジオを製作してきたが、普段、聴く上で面倒なのはラジオ局の選択である。ボリュームで行うのは論外で、プリセット(ボタン)で行うのは許容範囲内であるが、番組の時刻になった時に、ボタンを押すのを忘れ聞き逃すことがある。常々、時刻になったら自動で番組を選択してくれる機能があればと思っていた。そのようなラジオはないので、自分で作ることにした。

求める機能は以下の通りである。

  • 時刻機能(時刻設定は自動)を持つ。
  • 番組の時刻になったら(電源をONして⇒目覚まし機能)該当のラジオ局を自動で選局する(スケジュール機能)。
  • 指定の音量で再生する。
  • 番組が終了したら、電源をOFFする(Sleep機能)。
  • スケジュールの設定は、PCやスマホからブラウザ経由でできる。
  • 最低限の操作(音量調節、選局、電源ON/OFF)はブラウザ経由でできる。

以上の機能は、RDA5807FP(FM DSPラジオ)とSeeed Studio XIAO ESP32C3(WiFi機能あり)を組み合わせることで可能となる。RDA5807FPは、安価であるが性能的には十分である。ワイドFMに対応し、聴きやすい音質で、ステレオをサポートする。XIAO ESP32C3は、サイズが500円硬貨位で、全体をコンパクトにできる。また、Arduino IDEでのプログラミングがサポートされている。RDA5807FPとXIAO ESP32C3は、I2Cで接続する。RDA5807FPは、小口径のスピーカーなら十分駆動できるので、アンプは不要である。全体の、消費電力は微少(0.3W程度)で、24時間電源ONでも大丈夫である。今回、作成したスケッチ(プログラム)と製作に関する情報はGithubに登録してある。

スケジュールは、曜日ごとに週間で設定する。ラジオの番組は、平日、土、日で異なり、毎週ほぼ同じなので、週間スケジュールで十分である。聴きたい番組について、「開始時刻、ラジオ局、番組の長さ(分)、音量、番組終了後に電源OFF(RDA5807FPのみ)するか否か」を設定する。以下に示すのは、ブラウザに表示された週間スケジュールの設定画面である。中央の表に各曜日ごとのスケジュールが表示されている。各エントリの指定項目は上記の通りである。ラジオ局については、”Station List:”の数字を設定する。

スケジュールを変更する方法は、まず各曜日のラジオボタンをクリックする。選択した曜日の設定が上部の入力領域にコピーされるので、それを編集後、”Submit”ボタンをクリックする、これで変更内容が保存される。

上の設定画面の下部”Control Functions”にあるボタンは、それぞれ、音量調節、選局、電源(RD5807FPのみ)をON/OFFするためのものである。

製作したDSPラジオの外観を以下に示す。

手前がXIAO ESP32C3、奥がRDA5807FP。部品数は少ない。口径10センチのスピーカーをRDA5807FPに直接接続している。アンテナは70センチ程のリード線を接続すれば十分受信できる。

OLEDの表示内容を以下に示す。

日付、曜日、時刻、音量、電源(1:ON,0:OFF)、受信周波数の順。

数か月間利用しているが、朝、電源ONした後はノータッチで自動選局してくれるので、大変便利である。

 


ESP32でWiFiとBluetooth(A2DP)は同時に使えるか

2023-09-17 15:20:22 | 電子工作

以前、ESP32によるインターネットラジオを製作したが、これはDACをI2Sで接続し、スピーカーから音を出す物だった。ESP32はWiFiとBluetoothを搭載しているので、それらを同時に使えば、ESP32でインターネットラジオを受信し、それをA2DPでBluetoothスピーカーに送って音を出すことができるはずである(スマホで普通にやってること)。事例がないかを調べて見た。

GithubにESP32を色々な方式のプレイヤーにするコードの実装例があった。その中に、SDカードモジュールを使い、A2DPで接続したBluetoothスピーカーから音を出すプレイヤーと、インターネットラジオを受信し、I2Sで接続したDACから音を出すプレイヤーの例を見つけた。これらを組み合わせれば、所期の目的を達成できそうだと思った。

しかしながら、結論からいうと、WiFiとA2DPを同時に動作させることはできなかった。A2DPを接続するとWiFiが繋がらない。WiFiを接続するとA2DPの接続でリセットエラーになる等、(このケースでは)同時には動作しなかった。

以下は試行錯誤の報告である。実装コード(ライブラリ)は洗練されていて、各種のプレーヤーが簡単に実装できるようになっており、最初の2例は動作を確認したので参考になると思う。

インターネットラジオを受信し、I2Sで接続したDACから音を出すプレイヤー

以下にスケッチを示す。上記の実装例からは、ボリューム(音量)や接続先のURLを変更するコードは省略している。ライブラリは、pschatzmannさんのライブラリを、ZIP形式でダウンロードし、ArduinoIDEのライブラリ管理からインストールする。「*wifi」と「*password」の部分は、利用しているWiFiのものを指定する。DACはUDA1334かPCM5102のモジュールが使える。ESP32との接続方法は、上記のリンク先に記載されている。

なお、ArduinoIDEは1.8.9。ボードマネージャからインストールするESP32ライブラリはEspressif Systemsの2.0.10である(古いとコンパイルエラーになる)。

下記のスケッチ中の、「AudioPlayer player(source, i2s, decoder)」の組み合わせを変えることで、色々なプレーヤーを実装できる。


#include "AudioTools.h"
#include "AudioCodecs/CodecMP3Helix.h"

const char *urls[] = {
  "http://stream.srg-ssr.ch/m/rsj/mp3_128"
};
const char *wifi = "your_ssid";
const char *password = "your_password";

URLStream urlStream(wifi, password);
AudioSourceURL source(urlStream, urls, "audio/mp3");
I2SStream i2s;
MP3DecoderHelix decoder;
AudioPlayer player(source, i2s, decoder);

void setup() {
  Serial.begin(115200);
  AudioLogger::instance().begin(Serial, AudioLogger::Info);

  // setup output
  auto cfg = i2s.defaultConfig(TX_MODE);
  i2s.begin(cfg);

  // setup player
  player.begin();
}

void loop() {
  player.copy();
}

 

A2DPで接続したBluetoothスピーカーから音を出すプレイヤー

以下にスケッチと実験セットを示す。SDカードモジュール(写真ではタテになっている基板。Amazonから200円程度で入手できる)の接続方法は、上記の実装例に記載されている。mp3の楽曲をSDカードにコピーしてセットしておく。複数の曲をコピーした場合は一通り演奏後に停止する(その後は一旦電源を落とさないと「ファイル無」のエラーになる)。スケッチ中の「cfg.name」に、Bluetoothスピーカーのデバイス名を設定する。

なお、SDカードモジュールが手元に無い場合は、ESP32のSPIFFS領域にMP3のファイルを予めコピーしておく方法(プラグインの設定が必要。なお、このプラグインはArduinoIDEのVer2.x.xでは使用できないので注意)で実験できる(実装例はこちら、コピーするデータあり)。


#include "AudioTools.h"
#include "AudioLibs/AudioA2DP.h"
#include "AudioLibs/AudioSourceSDFAT.h"
#include "AudioCodecs/CodecMP3Helix.h"

const char *startFilePath="/";
const char* ext="mp3";
AudioSourceSDFAT source(startFilePath, ext); // , PIN_AUDIO_KIT_SD_CARD_CS);
A2DPStream out;
MP3DecoderHelix decoder;
AudioPlayer player(source, out, decoder);

void setup() {
  Serial.begin(115200);
  AudioLogger::instance().begin(Serial, AudioLogger::Warning);
  // setup output - We send the test signal via A2DP - so we conect to a Bluetooth Speaker
  auto cfg = out.defaultConfig(TX_MODE);
  cfg.name = "bbbbbbbbbb";  // set the device here. Otherwise the next available device is used for output
  cfg.auto_reconnect = true;  // if this is use we just quickly connect to the last device ignoring cfg.name
  out.begin(cfg);

  // setup player
  player.setVolume(0.7);
  player.begin();

}

void loop() {
  player.copy();
}

 

インターネットラジオを受信し、A2DPで接続したBluetoothスピーカーから音を出すプレイヤー(動作せず)

目的のプレイヤーである。実装例にはないが、上の2つを組み合わせれば(入力:インターネットラジオ、出力:Bluetoothスピーカー)実現できるはずである。実装例からの類推で作成したスケッチは以下の通り。

実行したところ、「E (17464) wifi_init_default: netstack cb reg failed with 257」というようなエラーとrebootを繰り返し、動作はしなかった。なお、以下のスケッチをコンパイルすると、プログラムサイズが1.7MBになるので、ArduinoIDEからPartition Schemeのサイズを「No OTA 2MB APP/ 2MB SPIFFS」に変更した。

 


#include "AudioTools.h"
#include "AudioLibs/AudioA2DP.h"
#include "AudioCodecs/CodecMP3Helix.h"
const char *urls[] = {
  "http://cast1.torontocast.com:2170/stream"
};
const char *wifi = "your_ssid";
const char *password = "your_password";

URLStream urlStream(wifi, password);
AudioSourceURL source(urlStream, urls, "audio/mp3");

A2DPStream out;
MP3DecoderHelix decoder;
AudioPlayer player(source, out, decoder);

void setup() {
  Serial.begin(115200);
  AudioLogger::instance().begin(Serial, AudioLogger::Warning);
  // setup output - We send the test signal via A2DP - so we conect to a Bluetooth Speaker
  auto cfg = out.defaultConfig(TX_MODE);
  cfg.name = "bbbbbbbbbb";  // set the device here. Otherwise the next available device is used for output
  cfg.auto_reconnect = true;  // if this is use we just quickly connect to the last device ignoring cfg.name
  out.begin(cfg);

  // setup player
  player.setVolume(0.9);
  player.begin();
}

void loop() {
  player.copy();
}

 


MAZDA3のカーナビの操作が難しかった

2023-08-03 13:46:08 | 日記

一年ぶりにレンタカーを借りた。ひと月前だったが、旅行需要の回復で、コンパクトカーに空きがなく、ひとつ上のクラスを予約した。当日、レンタカーの営業所に用意してあったのは、MAZDA3(ファーストバック)、初めて乗る車である。3ナンバーで、見た感じは、幅広、ロングノーズで、リヤはどん詰まり、車両感覚が掴みにくそうという印象。

シートに座って、まず、感じたのは、着座位置が低い(地面に近い)こと、サイドラインが切れ上がっていて、後方の視界が悪い(窓の面積が狭く、ピラーの幅が広い)ということ。バック駐車は避けようと思った。

馴染みのない土地で、レンタカーを借りて、最初に行うことは、最初の目的地をカーナビに設定することである。カーナビの画面はダッシュボード上にあるのだが、画面は小さく、しかも体をシートから起こさないとタッチできない位遠い(ここで嫌な予感)。

目的地の検索のためには、カーナビのメニュー画面を出す必要があるが、表示されている画面には、それらしいボタンは無い。試しに画面をタッチしても(タッチ式パネルだと思った)、何の変化もない。室内を探索すると、センターコンソールに、以下のスイッチらしきものがあることに気がついた(以下の図は、MAZDA3のカーナビ説明書より引用)。

押したり、回したりしているうちに、次の画面(ヨコ幅はまあまあだが、タテは狭い)を出すことに成功した。

この時点で、コマンダーノブを回すと選択位置の変更ができ、押すと選択の実行ができることに気がついた。「フリーワード検索」を選択、実行すると、「入力」画面に切り替わり、50音図(以下)が表示された。ここで、いつものように、画面の50音図をタッチしても「かな」を選ぶことができない(まだ、タッチ式パネルだと思ってる)。しばし試行錯誤した。なんと、ここもコマンダーノブで選択するのである。ノブを回して、「あ行」や「か行」を選択、ノブを押して、例えば「あ行」に決定し、また、ノブを回して、「い」や「う」を選択、ノブを押して、目的の文字を決定するのである。

さて、これで何とか目的地の入力まではできた。しかし、関門はまだまだあった。入力は未確定のままで、確定する方法が不明である。画面上には、「確定」という表示は無い。それらしいものを探すと「✔」(右下スミ)があった。試しに選択すると、「確定」された(なぜ「確定」と表示しないのか)。確定した後は、画面の右にいくつかの候補がリスト表示された状態になる。これを、コマンダーノブを回して選択しようとするとできない。これが、最後の難題であった。実は、コマンダーノブを、右にずらすように押すと、候補の選択画面に切り替わるのであるが、最悪なのは、左にずらすように押すと、入力を保存せずに「戻る」なのである。つまり、入力のやり直しになるのである。これが分かるまで、何回も入力をやり直しさせられた(普通、怒ります)。

無事、目的地を入力し終わって、「ここに行く」を選択するまで、約30分かかった。

あとで、説明書を見たところ、コマンダーノブの表面はタッチパッドになっていて、スマホと同じような操作ができるとか(ただし、50音図の選択は切り替えが必要)。また、音声認識機能もあるんだとか(たぶん、説明書を読んでも使いこなせない)。

MAZDA3については、他にも、電子式のパーキングブレーキが効いているのか効いているいないのか分からない、斜め後ろが死角で見えず、駐車場でバック中に警笛を鳴らされた、バックモニタの表示がデフォルメされていて、実際に目で確認しないと信用できない、ヘッドアップディスプレイの速度表示がチラチラして鬱陶しい、カーナビの表示がアバウト過ぎて、鋭角になっている中央分離帯のある広い4車線の左折で、逆行車線に入り込みそうになった(普通に曲がったら対向車がいた)、など。とにかく、もう2度と「借りたくない車」という印象であった。

MAZDA3が好きで、説明書を読み込んで、愛車にしようと思っている人に良いかもしれないが、一見で説明書など読めずに利用するレンタカーには向いていない車だと思った。


16KEY PADを使用した RDA5807 FM DSPラジオ

2023-07-06 16:13:26 | 電子工作

4x4 keypad(前掲記事)、RDA5807(前掲記事1前掲記事2)、Seeeduino XIAOを組み合わせたFMラジオを製作し、既に半年程利用しているが、とても安定していて、常用しているので紹介する。RDA5807はFM DSPラジオ用のICであり、SOP16ピンサイズであることや、使用部品が少なく済み(特にXtal発信回路にコンデンサが不要なのが良い)、自作派には使い易い。また、安価なのでお勧めである。さらに、ここで組み合わせたXIAOのI2C制御との相性も良い。

これまで複数のラジオを製作してきたが、使う立場で言うと、(特に選局が)ワンタッチで操作できるのが良い。自作であり、汎用にする必要はないので、4x4 keypadを利用して、地域に合わせて1放送局1ボタンにプログラミングしておくのが使い易い。

4x4 keypadと今回のMCP23107を組み合わせる場合、唯一の難点は両者を、8本のリード線で結ぶ(ハンダ付け)必要があり、細かい作業が必要なことである。以前の製作で利用した別の4x4 keypad(制御ICとKeypadが同じ基板に載っている)を利用してみるのも一案かもしれない(この場合、配線は4本で済む)。

今回のスケッチは、こちら(Github)に置いてある。

写真。100均のアクリルケースに格納している。ブレッドボードから、汎用基板に実装し直した。手前がXIAO、奥がRDA5807、その奥は表示用のOLED。アクリルケースの上面にKeypadを配置した。XIAOは、長さが短いので、全体をコンパクトにできるが良い。


パソコン自作派にとってWindows11は鬼門 その2

2023-06-07 14:56:16 | 日記

前記事では、Windows10からWindows11へのアップグレード環境の整備について書いたが、その途上で、プラットフォーム更新の気分が盛り上がり、結局のところ、マシン自体の更新を決めてしまった。以前のCPUは、インテルCore i5の8世代で、今は13世代になっているので4年は経過していることになる。

まず、部品選びである。インテルCPUの13世代は、まだ価格がこなれていない(高い)ので、一つ前の12世代を候補とした。性能は追及しない、電源は今のままとする、現在より遅くならなければ良い。ということで、Core i5の12400に決定。値段は¥27980(以下、3月初めの値段(税込み)。半導体不況で部品の値段が下降気味なのでメモしておこう)。マザーボードは、ASUSの第12世代CPU(LGA1700)対応のエコノミー版であるPRIME H610M、¥11580。SSDは、Windows11へのアップグレードのために購入したCFDの480GBのもの(SATA3)、¥3980。メモリは、現用のDDR4(8GBx2)を流用。新規の費用は計¥43530である。自作の場合は、パーツの入れ替えなので、この程度で済むのがメリットである。

手順であるが、新しいマザーボード(H610M)に、Core i5 12400と、元のマシンのSSD(システムドライブ)をCFDのSDDにクローンコピーしたもの、DDR4のメモリを装着し、起動すれば、元のマシンのWindows10の環境が動作すると考えた。ところが、ここで、CFDのSDDが認識されないという問題が発生した。

元のマシンのシステムディスクは「MBR」という(古い)形式で、これを認識させるには、マザーボードの設定において「CSM」(旧仕様との互換性をサポート。Compatibility Supported Module)を有効にする必要があるのだが、この設定がグレイアウトされていて設定できないのである。調べると、Core i5 12400のHDグラフィックス(表示機能)を有効にすると「CSM」が利用できなくなる仕様(UEFI BOOTを強制される)になっているとのこと。突然の、「想定外」である。

解決策は3択。(1)システムディスクを「MBR」から新しい「GPT」(GUID Partition Table)形式に変換する。(2)内蔵のHDグラフィックスを止めて、グラフィックボードを新設する(3)UEFI対応の新規インストールを行う。

長考の末、(1)を選択。元のマシンの上で、システムディスクを「MBR」から「GPT」形式に変換した顛末が前記事である。変換後のSSDを、新しいマザーボードに取り付けて、マシンを起動すると元のWindows10が無事起動できた(元のドライバー類が新しいマザーボードに対応しているか不明なのでこのまま使い続けることはできない)。さて、このまま、Windows11にアップグレードできるのか?

やってみた。結論としてはアップグレード出来たのだが、一部のミニゲームが動かなくなったり、グラフィックスの動きがぎこちない等若干不調な状態になった。三日程、そのまま使っていたが、起動時に(ディスクの)修復チェックが動作し、その後、ユーザープロファイルが壊れて、起動はするがログインが出来ない状態になった。やはり、Windows11に正しくアップグレードされていなかったのか。

最終的には、修復はあきらめて、上記(3)を実行せざるを得ないハメになった。USBメモリ(8GB)にWindows11のインストール媒体を作成し、Windows11にアップグレードしたシステムディスクに上書きインストールした。インストール時には、プロダクトキーを要求されるが、幸いWindows8.1のプロダクトキーが使用できた。もとディスクの内容は保存されたが、プログラム類は新規インストールが必要なり、環境の再構築に大変な手間がかかった。

古い環境のままで使い続けている自作ユーザーがWindows11に移行するには、覚悟と準備が必要である(特にシステムディスクが「MBR」のままの場合は、素直に新規インストールするのが良いようである)。

 

 


ビール党は酒税と物価の値上げにどのように対処したら良いのか

2023-06-03 14:48:38 | 日記

日頃、ビール系飲料を楽しんでいる庶民にとって、ビール系飲料に対する酒税の改定は許容しがたいものがある。折角、ビールメーカー各社が知恵を絞って開発してくれた第三のビールはもうすぐ絶滅の危機に瀕している。所謂「ビール」しかなかった頃、1箱(350ml24本)5000円程度払って飲んでいたビール党にとって、発泡酒の登場とそれに続く第三のビールの登場は、まさに天恵であった。

ところが、酒税の改定と最近の物価高で、この「天恵」は「泡沫」として消え去ろうとしている。では、この事態に如何に対処したら良いのか。結論から言うと「ビール(系)はあきらめてビールテイストに切り替える」である。以下、順に説明していきたいと思う。どうしても「ビール」を味わいたい方(お金のある方)は、以下は読まなくても結構、(お金のない)庶民の儚い抵抗である。

最近、アルコール0、カロリー0、糖質0を謳うビールテイストの飲料が色々と発売されている。アルコール0なので、お酒を楽しみたい者とってはちょっと物足りない。そこで、甲類の焼酎とこれらをカクテルするのである。これで、「ビール」の雰囲気と「酔い」を両方楽しめる。支払う税金を含めた出費も節約できるし、糖質やプリン体の摂取を避けることもできる。その昔、ビールしかない頃は、尿酸値高めで、痛風、メタボが怖かった(今後の「ビール」に回帰で痛風患者が増えるのではと思っている。政府は税収ばかり注目して国民の健康を考慮していない)。最近は、もっぱら糖質オフの第三のビールばかり楽しんでいたのである。したがって、本格「ビール」から離れることにはあまり抵抗がない。それで、お金が節約でき、健康が維持できるのは一石二鳥である。

第三のビールは、安めのスーパーやドラッグストアでは1本、現在137円位(税込)である。1日2缶として月60缶で、8220円(内消費税が747円、酒税が2268円(2023/10からは2819円))となる。

一方、ビールテイストの飲料と甲類の焼酎とのカクテルではどうなるか。第三のビール2缶で摂取するアルコールは28㏄(アルコール4%の場合)である。同じアルコール量で換算すると、アルコール20%(税金が一番安い)の甲類の焼酎では140㏄(1日分)となる。この甲類の焼酎は、1.8ℓで1078円位(税込)なので、約84円になる。カクテルするビールテイストの飲料は1缶で十分であり、118円位(「8%」の税込)。よって、月では6060(84ⅹ30+118ⅹ30)円(内税金は酒税が840円、消費税が522円)となる。

つまり、8220 - 6060 = 2160円の節約になる(2023/10からは第三のビールの酒税が上がるのでその差はもっと大きくなる)。さらに、ビールテイストの飲料によっては、プリン体0、糖質0にすることも可能である。もともと、第三のビールは、発泡酒とスピリッツ類のカクテルである。ビール会社ではなく、自分でカクテルすると大幅に税金が安くなるという理屈である。さらに、資源ゴミ(缶)の量が半分になるというメリットもある。

甲類の焼酎とビールテイストの飲料のカクテルは、節約になって、健康にもメリットがある。それでも「ビール」を飲みますか?