最終更新: 2018/11/25(Sun)16:53

自作と修理を愛するブログ。トイラジ、電子工作、ボルティー、NucleusCMS 、いろいろゴソゴソやってます
3Dプリンター / 3Dスキャナーも -kyu-

Home > HA36Sアルト

«新しい記事1 2 古い記事»
201811/2516:53

時計をつくる

今回は小ネタです。

ダッシュボードに時計がついているクルマ、最近とんと見かけなくなりました。コストダウンのためとか、オーディオなりナビなりに表示されるのでわざわざ時計単体を装備する必要がないとか言われてます。確かにそのとおりで、オーディオを取り付けて一番最初にやったのが、ラジオの周波数合わせと、常に現在時刻を表示させることでした。時計表示の手順は取扱説明書の一番最初に書いてあります。皆が知りたい情報ナンバーワンなんでしょう。

さて、アルパインのスピーカーを取り付けたのを機に、iPhone の接続を AUX から USB に変え、いわゆる iPod モードで運用するようになりました。接続もシンプルになりイコライザも iPhone から調整できるようになってとても便利に使っていますが、一つだけ問題が。それが時計です。

iPod モードのとき、MVH-3300 のディスプレイには現在再生中の曲名が表示されます。曲名は iPhone を見ればいいのでディスプレイには時計を表示してほしいんですがやり方がわかりません。iPhone の時計は小さすぎて、運転しながら確認することは不可能です。

とてつもなく不便です。アルトに時計をつけましょう。

…続きを読む>>

201809/0623:03

社外スピーカーをつける

しばらくダンバインの話題ばかり続いてましたのでたまにはメガネアルトの記事などを。

職場の喫煙所で雑談しているときに、スピーカーを換えたいなぁというようなことを話していたところ、あ、うちに余ってるのがあるから持ってきますよ、チョー古いけど。などとありがたい提案をいただきました。断る理由がありません。


★ALPINE STE-174R
アルパインの STE-174R です。コアキシャル・3ウェイ。ロハってわけにもいかないのでいくらか払いますよって言ったけど、提供主は頑として受け取らず。なので缶コーヒー一本と交換しました。ありがたや。

お恥ずかしながらオーディオとかカーオーディオとか、全く知見がありません。スピーカーもらったはいいけど、どうやって取り付けるのかさっぱりわかりません。わからないことは Google 先生に聞きます。

クルマのスピーカーを交換取り付けする場合、スピーカーはドアの板金に直接つけないのだそうです。取り付け穴ピッチがクルマによって違うのだから当たり前ですね。
新品の社外スピーカーには、穴ピッチの違いを吸収するためのメーカー別アダプタが同梱されています。このアダプタのことをインナーバッフルといいます。対応車種でない場合は、別途インナーバッフルを調達する必要があります。

で、今回もらったスピーカーにはインナーバッフルがついてませんでしたので、買うかつくるかしないとなりません。市販品はざっくりと2~3000円くらいなので、迷うことなく自作に決定。

インナーバッフルは単純なスペーサーというわけではなく、形状や材質によって音質に影響を及ぼすらしいです。スピーカーの鳴りで周囲の板金がビビらないように、そこそこの強度が必要。硬いほうがいい、柔らかいほうがいいなど情報は交錯しています。オーディオって感性によるところが大きいので難しいんですね。

一般的なところだと、MDF または硬めの木材を使うことが多いみたいです。ジグソーやトリマーなどの木工用工具を駆使してドーナッツ状の部品を切り出し、防水処理のためウレタン塗装して仕上げるという例が多数見つかります。スピーカーの取り付け部は鬼目ナットを使うのだとか。

木材加工用のツールは丸ノコと手ノコくらいしか持っていないので、例によって 3D プリンタでインナーバッフルを製作することに。重いほうがいいのであれば充填率を上げた ABS でよいはず。
ホームセンターなどで売っている MDF は密度 0.35~0.8g/cm^3、対する ABS は 1.05~1.07g/cm^3。形状が同じなら ABS のほうが重いわけです。市販のプラ製インナーバッフルは射出成形だろうから板厚は薄いんだろうなと。だからプラはビビるなんていわれてるんじゃないかと思うわけです。

形状もいろいろで、単純なドーナッツ型以外にも、足元に設置されるスピーカーをドライバー側に向けるためにスラントさせるとか、コーンの動きを阻害しないように背面側をテーパー状に広げるとか、それこそ様々なノウハウがあるようです。いやー難しいなぁ。
このノウハウをもとにワンオフでつくって商売しているショップも多数あるわけで、寸法がわかる図面を公開しているところは少ないです。まあクルマもスピーカーもとてつもない種類があるので、ピンポイントな図面なんて見つかるはずもないんですが。

みんカラで探してみると、自作インナーバッフルの情報は多数見つかりますが、ほとんどが現物を型紙に写し取って製作されており、具体的な寸法のわかるものは少ないです。ということはつまり、市販品を買うにしても自作するにしても、一度内張りを剥がして取り合いを測定してみないことには始まらないということです。

…続きを読む>>

201802/1212:32

アナログタコメータをつくる(5) スケッチ、そして完成

さて肝心のスケッチです。前に書いた通りライブラリがふたつ必要です。

Arduino-OBD2-Async
https://github.com/vova-ivanyshyn/Arduino-OBD2-Async

Switec X25 library
https://github.com/clearwater/SwitecX25

ライブラリは適当な場所に入れておきます。

スケッチを簡単に説明すると、ステッピングモータの目標値は0.1秒ごとに更新し、モータの動作自体は毎ループごとに行います。文字盤のバックライトは5秒毎に更新。

たぶんもっといいやりかたがあるんでしょうね。シロウトのヘナチョコプログラムだと思って温かい目で見てやってください。何かあったらコメント欄からお知らせいただけると嬉しいです。

#include “SwitecX25.h”
#include “OBD.h”

SwitecX25 motor(315*3, 4, 5, 6, 7);
COBD obd;

// ステップモーター定数
const int PULSE_PER_REV = 315*3; // ステップモータ全体のパルス数
const int MAX_DISP_REV = 8000; // 表示最大回転数(rpm)
const int VIEW_ANGLE = 315; // 使用範囲(deg)
const float CONV = (1 / (float)MAX_DISP_REV) * ((float)VIEW_ANGLE / 315.0) * (float)PULSE_PER_REV;
// 回転数*CONV=ステップ数 : CONV = (1/8000)*(315/315)*315*3 = 0.118125 ->0.12

// エンジン回転数変数
int CurrentRpm = 0; //現在のエンジン回転数
int PreviousRpm = 0; //前回のエンジン回転数

// 更新頻度変数
const int UpdateInterval1 = 100;  // 更新間隔(高頻度) ミリ秒
const int UpdateInterval2 = 5000;  // 更新間隔(低頻度) ミリ秒
unsigned long PreviousUpdate1 = 0;   // 前回の更新時(高頻度)
unsigned long PreviousUpdate2 = 0;   // 前回の更新時(低頻度)

// 照明変数
const int LedPin = 9;
const int CdsPin = 0;
int CdsValue = 0;

void setup()
{
  for ( int i = 30; i < LedValue(); i += 1 ) {
    analogWrite( LedPin, i );
    delay( 10 );
  }
  motor.zero();
  delay(200);
  motor.setPosition(MAX_DISP_REV * CONV);
  motor.updateBlocking();
  delay(200);
  motor.setPosition(0);
  motor.updateBlocking();
  delay(200);
  obd.begin();
  while (!obd.init(PROTO_AUTO));
}

void loop()
{
  unsigned long CurrentTime = millis(); // 現在時
  motor.update(); //メータを駆動 (1step/Loop)

  if (!obd.asyncInProgress()) {
    obd.asyncRequest(PID_RPM); //リクエスト送信
  }
  
  if (CurrentTime - PreviousUpdate1 >= UpdateInterval1) { //更新(高頻度)
    int val = 0;
    if (obd.asyncGet(val)) {
      CurrentRpm = val % 10000;
      if (abs(PreviousRpm - CurrentRpm) > 9){ //前回との差が一桁なら更新しない
        motor.setPosition((float)CurrentRpm * (float)CONV); //目標位置設定
        PreviousRpm = CurrentRpm;
      }
    }
    PreviousUpdate1 = CurrentTime;
  }

  if (CurrentTime - PreviousUpdate2 >= UpdateInterval2) { //更新(低頻度)
    analogWrite( LedPin, LedValue() );
    PreviousUpdate2 = CurrentTime;
  }

  if (obd.errors >= 2) {
    reconnect();
    setup();
  }

}

void reconnect()
{
  for (uint16_t i = 0; !obd.init(PROTO_AUTO); i++) {
    delay(3000);
  }
}

int LedValue()
{
  int result;
  CdsValue = analogRead(CdsPin); // だいたい 500-1000
  result = -0.3*(float)CdsValue+350;
  if (result > 255){
    result = 255;
  }
  return result;
}

…続きを読む>>

201802/1114:35

アナログタコメータをつくる(4) 3Dモデリングと回路の作成

ステッピングモータとその駆動方法が決まったので、お待ちかねの 3D モデリングです。あ、お待ちかねなのは自分ですよ念のため。

後づけのメータって、砲弾型のハウジングに入っててダッシュボードの上に無理付けしたりするもんですが、激しく主張するのはどーも好きじゃないので、おや、純正オプションにこんなのあったっけ的な感じにしたいです。

★ドライバー視点 ★メータ周り
HA36S 無印メガネアルトのメータ周りはこんなふうになってます。スピードメータの針の基部に黒い円形のところがあります。走り方によって円の縁が緑青白に光ります。だいたい φ60 くらい。そもそもデッドスペースなのでここにぴったり合うような感じにしましょう。
って、ググったら結構同じことをしている人がいらっしゃいますね。皆考えることは同じかwww

★モデリング
モータの大きさとメータの外径が決まれば話は早いです。さくっとモデリング。って割には手数が多いですねww
文字盤はイラストレータで描いて SVG でインポートしました。便利です Fusion360。
モータの周りの空間に LED を仕込んで裏から文字盤を照らします。針自体は透明樹脂で根元の LED から光を導く方式。
当初は LCD 側に内蔵する予定だった制御部もメータに入れる必要があります。 Arduino は Pro Mini というのがサイズ的に良さそう。I/O も十分余裕があります。将来 LCD を増設する際も I2C が使えます。

★分解図
こんなアニメーションも簡単に作れちゃいます。すごいぞ Fusion360。

…続きを読む>>

201802/0722:22

アナログタコメータをつくる(3) OBD2ライブラリ

前回ちょっと触れましたが、本当は縦2行程度の LCD を装備して、エンジン回転数以外の情報も表示させる目論見でした。

ちょっとググると、OBD2 スキャナと Arduino を使って同様のことをやっている事例は結構見つかります。
ライブラリに頼らずに、 AT コマンドを発行するところからなにから作り込んでる例もありましたが、大多数は特定のライブラリを利用している模様。あるものは使わなけりゃなぁと。

Arduino の OBD2シールドの販売もしているオーストラリアの Freematics 、この道では超有名です。
ライブラリも含めて自社製品用のスケッチが Gitbub で公開されています。ありがたや。
https://github.com/stanleyhuangyc/ArduinoOBD

一式ダウンロードすると、製品別のスケッチと共用ライブラリが。
libraries\OBD2UART\example フォルダにある rpm_led_uart.ino が一番簡単なサンプルですね。

使い方は簡単。OBD2UART.h をインクルードしておいて、Loop() 内で obd.readPID(PID_RPM, value) とやると、指定した pid に応じて欲しい数値が value に入るわけです。

…続きを読む>>

«新しい記事1 2 古い記事»

サイト内検索

↑ページ先頭へ

2531480 [Mode]
Copyright © kyu-weblog All Rights Reserved. Powered by Nucleus CMS v3.71 管理