マウスはずっとLogitechのゲーミングマウスG900を使ってます。

無線と優先を切り替えられて、非常に使いやすいです。

今は廃盤になって、後継機のG903hってのが出てますが、まぁ似たようなもんだと思います。

 

 

結婚後いろいろ忙しくて使ってなかったのですが、新居を構えようやく自分の部屋にPC環境が整ったので久々に出してみると、左クリックがチャタリングを起こしているではありませんか。

 

新品はさすがに手が出ないので、ちょっと調べたら、ボタンの隙間からエレクトロニッククリーナー噴射で治ったり、壊れたり……という記事が。

 

壊れたらその時はその時や!ということで、電源を切って、ボタンの隙間からKUREのエレクトロニッククリーナーをぶっかけました。。。。。。

 

やっぱり壊れましたね。PCに挿しても認識しません。

(はっきり言ってPCに挿すのも博打です。自己責任でやってください。)

バッテリー外さず噴射したのは失敗でした。

初めから分解すればよかった……。

 

 

 

 

というわけで分解。

「G900 清掃」とか、「G900 分解」とかで検索すると色々な人が記事上げてるので過程は割愛。

 

中身はこんな感じ。

 

よ~く見てみると、コンデンサC42が焼損してます。

 

こうなることはわかりきってたのに、ネットでちょちょっと調べただけで、ほんまアホなことしました……。

 

Logitechのマウスのマザーボードなんて、正規の店舗で買えるわけもなく……

 

色々探すとAliExpressで見つけました。

 

 

 

 

 

新品に比べればだいぶ安いので、中国のオンラインショップ使うのは初めてで不安でしたが、背に腹は代えられない。

 

念のため、クレカの登録は避けて、PayPalで支払うことにしました。

国内の買い物もそうですが、海外のオンラインショッピングの追跡は格別にわくわく感がありますね。


商品説明に書いてあった通り、約2週間で到着しました。

仕事から帰ると、中国郵政から何やら怪しい小包が……

 

マトリョーシカ式にしっかり梱包されて、マザーボードが到着しました。


中国って言っても、アリババ系列のAliExpressなのでしっかりしてますね。

税関が心配でしたが、ボロボロにされるでもなく、綺麗な状態で届きました。

中国から日本への定期便があるのでしょうね。

 

コンデンサC42もきれいです。(当たり前ですが。)

 

 

 

 

ここからはサクッとマザボを入れ替えるだけです。

すると……

 

復活しました!!

 

 

 

 

おのれのアホな行いのせいで、ずいぶん時間とお金を無駄にしました。

 

しかし、治ったかと思ったが、無線に切り替えると反応しない!!??

NICがマザボに乗っかってたんだな……うかつだった……。

 

これもちょろっと調べたら出てきました。

Logitech Connection Utility Software」ってやつをインストールして設定しないといけないみたいです。

ヤフー知恵遅れには、”Unifyingに対応していないマウスは無理です”みたいなこと書いてるアホがいますが、大切なことはしっかり深掘りしましょう。

 

Logitech Connection Utility Software は画面の指示通りに操作すればいいだけなので簡単です。

無線でも問題無く使えるようになりました。

 

当初の問題でもあった左クリックのチャタリングも、マウスのリミットスイッチをじゃばじゃば洗浄したおかげでしっかり直ってましたw

 

これにて一件落着です。

 

 

 

 

ちなみに、今回はマウスの洗浄にKUREのエレクトロニッククリーナーを使いましたが、安かろう悪かろうです。

ちゃんと電源を切り離して使わないといけません。

(そもそも充電回路に噴射するのが間違い。)

 

かといって、マウスのチャタリングなんて頻繁に起こるし、その都度バッテリー外すのは面倒。

やっぱりバッテリー付けたまま洗浄液ぶっかけたい。

 

そういう人には、NCHの「レクスピュア」がおすすめです。

絶縁耐力が申し分なく、残留物ゼロ、樹脂にも使えます。

マウスの洗浄なんて朝飯前です。

活線の200Vのリレーやマグネットにぶっかけても平気でした。

 

ただし、くっそ高いし、法人以外に売っているのかどうかは知りませんが。

 

というわけで、なんだかんだでほったらかしになってましたが、

 

我が愛車の人生(バイク生)はちゃんと記録してあげないといけないので、現状を軽くまとめとこうと思います。

 

 


まず、電装部いじっているところはこんな回路になってます。

 

LEDもスピーカーも、Arduinoも全部外したので、USBは空き状態でシート下に眠っています。

ハンドル脇のUSB電源くんと、常時録画のユピテルのドラレコはそのまま付けています。

 

 

 

そして、エクステリアです。

当初は、仮面ライダーカイザのサイドバッシャーをモチーフにしていましたが、今ではオリジナルのディセプティコンバイクを作ることに変えました。

 

そこで必要なのがディセプティコンのエンブレム。

そこで、「エムズワークス」さんにお世話になり、オリジナルのデカールを作っていただきました。

ここ、画像ファイルを送ったらデカールにしてくれるんです。感謝しかねぇ。

 

そんなこんなで要望の画像を自分で作って・・・・・・

 

(正面のエンブレムはデカールじゃありません。)

 

 

 

トランスフォーマーではやられ役でおなじみ、悪役パトカーのバリケードくんのデカールを貼りました。

いっきにかっこよくなりました。

 

 

 

バイクもかっこよくなりましたが、人間の装備もかっこよくなりました。

OGKカブトのKAZAMIというシステムヘルメットを愛用していますが、こいつにミラーシールド「オージーケーカブト(OGK KABUTO)CM-2-Pシールド ブルーミラー 571894」が仲間入り。これで私の醜い面をさらさずに済みます。


 

そして、SENAのカメラ付きインカム「SENA(セナ) バイク用インカム Bluetooth インターコム 10C カメラ内蔵 10C-01 0410001K」も購入。今までよりよりライブ感のある動画を撮ることが出来るようになりました。

 

 ↑これは後継機です。


 

バイクいじるのは急にめんどくさくなりましたが、根底にある仮面ライダーになりたい欲、バイク好きな気持ちはまったく変わってないので、相変わらずいろんなところ走ってます。

 

 

 

GWに四国走った記録もまとめたい。

 

 

 

 

 

Arduino+ミュージックシールド、次の段階に進みます。

 

まず、音声の確認にいちいちヘッドホンを付けて確認するのは面倒なので、スピーカーを製作します。

音声の確認にも使いますが、実際にバイクにも搭載するので、防滴タイプを選定します。

自作 USB 電源 スピーカー アンプ キット (自作SPケース)

ノーブランド品 スピーカー 57mm 3W 8Ω 防滴 ボウテキ57MMSP

 

半田付けしてこんな感じになりました。

 

赤と黒の線は、左右同じ位置に半田付けします。逆になっても気にならんと思いますが。

コーン紙が樹脂の耐水仕様になってます。めっちゃ音質悪そう……。

 

 

 

ちなみに、「自作 USB 電源 スピーカー アンプ キット (自作SPケース) 」に同梱されているスピーカーは今回は使いません。

 

 

 

さて、次はミュージックシールドで任意の音声を任意のタイミングで再生するためのプログラムを書きます。

これにはめちゃくちゃ苦労しました。

スマートなプログラムを書きたかったのに、どのサンプルスケッチを見ても、誰のサイトを見ても、全くわからん。ミュージックシールドライブラリの意味も全然分からん。

 

 

↑ ↑ ↑ ↑ ここまで、2018年1月の話 (下書きのまま止まってました。)↑ ↑ ↑ ↑ ↑ 

 

今は、2018年6月、半年間もほったらかしでした。

 

ある程度プログラムは書けたし、汚いプログラムながらも動かすことは可能だったのですが、スピーカーを車体に取り付ける段階で、なぜかめちゃくちゃめんどくさくなってしまいました。

 

こんな小さいスピーカーだとメット越しには絶対聞こえないから付ける意味無いし、よくよく考えて、聞こえる音量の音が鳴るってもうチンピラだし、LEDでピカピカ光るのもチンピラみたいだから、全部外しました。

 

別に、誰かに怒られたわけでも、急に道徳にめざめたわけでもありません。

 

維持管理含めて、めちゃくちゃめんどくさっくなってしまっただけです。

ほんとダメダメだ。

スプラトゥーン2とGTSportsばっかりやって、バイクカスタムに手がつかねぇ。

なんてったって、おれのブカッティのヴェイロンがかっけぇんすよ・・・・・・。

 

 

 

それはそれ、これはこれ、自己啓発の勉強も進めましょう。

 

部屋でArduinoの試行をする度に、バイクに搭載しているArduinoを取り外すのもめんどくさいので、もう一個「【永久保証付き】Arduino Uno」を購入しました。


 

そして、音声を再生するための追加シールド「ミュージックシールド V2.0」も購入。



こいつらを合体して、今回の試行スタートです!




今回は、前回宣言したとおり、バイクのLEDの点灯に合わせて、効果音を再生するための改造をしたいと思います。

とは言っても、ミュージックシールドは初めて使うので、こちらのサイトを参考にしながら、サンプルプログラムを走らせて、仮面ライダーファイズアクセルフォームのおなじみの効果音を再生したいと思います。

 

 

 

こんな感じで、サンプルプログラムの黄色網掛けの部分を再生したい音声ファイルの名前に変えるだけです。

 

最初につまずいたのが、WAVファイルだとビットストリームが大きくなって、読み込みが間に合わないのか、スロー再生になってしまいました。

対応として、音質はある程度聞き取れればよいので、128kbpsのMP3に変換しました。

 

 

 

そして、再生した感じは、こんな感じです。

 

 

イヤホンを想定しているので、音量はめちゃくちゃ小さいですが、おおむね期待通りの挙動をしてくれました。

超簡単でしたね。

 

 

今回の一番の山は、とっかかりでしたわ。

寒くてバイクいじる気にならんし、ゲームがあるとまったく進まん。

 

 

次回は、条件別で違う音声ファイルを再生するプログラムを書いて、LEDテープとの同期を取りたいと思います。

 

さて、去る8月5日、6日、鈴鹿サーキットにて、「第50回二輪車安全運転全国大会」が行われましたね。

 

バイクをカスタムするにあたって、ライディング技術が伴わないことほど滑稽なことはありません。

免許取得1年の私ですが、6月10日に免許センターにて開催された予選に参加しました。

結果は当然敗退ですが、選抜メンバー強化練習にも参加させてもらって、安全運転に対する意識が向上したので、得たものは多いと思います。

 

6月10日

当日は県警の機動隊のお手本も見せてくれました。

やっぱり上手でしたね。

 

6月10日

結果発表。減点方式です。

法規走行は今回は目をつぶりましょう。

千鳥走行は時間制限もなくなんとかクリア。

一本橋とコンビネーションスラロームの減点が大きくなってしまいましたね。

 

たしか、一本橋はゴールが早すぎて減点。

コンビは時間オーバーとパイロン接触による減点だったと思います。

 

当日いきなり教習用バイクに乗せられて、いきなり試験。アクセルやクラッチの感覚もつかめぬまま敗退したのは悔しいですが、みんな同条件なので、あとは自己鍛錬あるのみです。

 

 

 

 

 

新作ゲームや4K環境の構築で忙しいため、Arduinoの勉強がなかなかははかどらない今日このごろ。

たまにはライディング技術向上のためにバイクに乗るのもいい気分転換になります。

 

 

 

 

 

今日は駐車場で、一本橋と八の字の練習をしました。

まずは、練習用にリアシートとLEDカラーを変更します。

気持ちから入ることは重要です。
これで安定感が出ますね。




6月4日 一本橋

予選の直前の個人練習です。免許とって半年くらいですね。

全然リアブレーキ使えてないですね。クラッチもほとんど握ってません。

一瞬で橋渡っちゃいました。

 

 

10月8日 一本橋

あんま違いわかんねぇ。

しかし、若干のアクセル、若干のクラッチ、そしてしっかりリアブレーキ、なかなか安定した走行が出来ていると思います。

ニーグリップとヒールグリップを意識して、目線を近くと遠く、交互に切り替えるのがコツらしいです。

7月にみっちり練習したたまものだと思います。

 

 

 

 

 

 

 

 

 

 

6月4日 八の字

怖い怖い。

見ているだけで怖いです。

 

 

 

10月8日 八の字

前に比べると安定していますね。

それでもまだまだ見ていて怖いです。ガクンガクンなってる。

 

八の字の練習の時は、目線は円の中心、フルロックでリーンインの姿勢を意識しています。

しかし、自前のCBRで八の字はけっこう難しいです。

まず、フルロック、転倒が怖くて出来ません。そして、ハンドル周りがせまい。

そして、リーンイン、無駄に小回りになりすぎて怖い怖い。

教習所の教習車なら何も怖くなくて、もっと上手に出来たんですがね。

 

 

 

 

 

こんな感じで、幸運なことに会社の駐車場や工場での練習が可能なので、もっともっとライディング技術を磨いて、カスタムバイクに恥じぬライダーを目指したいですね。

 

この前、LEDテープを付けましたが、貼り付け方が雑だったのと、発光パターンがださかったので、やり直しました。
 
 
 
こんな感じで両サイドに2本、フレームにそって這わせました。
 
左後ろから
 
左ステップを経由して
 
 
 
左前へ
 
右後ろから右ステップを経由して
 
右前へ
 
 
 
そして、プログラムの変更。
//CBR400R、愛称「Predator」に搭載するためのプログラムです。

// 【重要】NeoPixelが焼損しないようにするため、1000μFのコンデンサーをLED電源に並列配線し、
// 300~500Ωの抵抗器を1番目のLED素子のDIN端子とArduinoの間に直列配線します。
// Arduino と1番目のLED素子は出来るだけ近接させます。
// 配線作業は、電源投入済みの回路では行なわないでください。
// もし、どうしてもそれが必要な場合、GNDから先に配線してください。

//1A以上の電流をかけようとしている場合(LED 1素子あたり20~50mA)は、テープLEDに5V電源を直接接続します。
//テープLEDのGNDは、Arduino のGNDと共有する必要があります。

#include <Adafruit_NeoPixel.h>

#define LEDPIN 3                        //Arduino ピン番号
#define Pixels 144                      //テープ上のLED素子数
#define Threshold_BatteryVoltage 12.5   //バッテリ発電中と認めるための電圧閾値[12.5]

// Adafruit_NeoPixel( Parameter 1 , Parameter 2 , Parameter 3 )
// Parameter 1 = テープ上のLED素子数
// Parameter 2 = Arduino ピン番号 (おおかた利用可)
// Parameter 3 = LED素子タイプフラグ(必要に応じて追加)
  // NEO_KHZ800  800 KHz ビット信号 (LED「WS2812」を使用したほとんどの NeoPixel 品)
  // NEO_KHZ400  400 KHz ビット信号 (旧い v1 (v2でない) FLORA, LEDドライバー「WS2811」)
  // NEO_GRB     LED素子はGRBビット信号で接続 (ほとんどの NeoPixel 品)
  // NEO_RGB     LED素子はRGBビット信号で接続 (v1 FLORA,v2 ではありません)
Adafruit_NeoPixel strip = Adafruit_NeoPixel( Pixels, LEDPIN , NEO_GRB + NEO_KHZ800);



/////////////////////////////////////////////////
////////////////グローバル変数定義////////////////
/////////////////////////////////////////////////

//バッテリ電圧を格納するための変数
double volt;

//バッテリは通常時(キーオン)は12V程度、発電時(エンジン稼働時)は14V程度
//0:0<=V<13.5 1:13.5<=V<15
int BatteryStatus=0;
int BatteryStatus_previous=0;



/////////////////////////////////////
////////////////SETUP////////////////
/////////////////////////////////////

void setup() {

  //LEDテープの初期設定
  //初期化を行う処理です。ここで指定の出力ピンにpinMode(pin, OUTPUT);を行ってます。
  strip.begin();
  //LEDの明るさを指定します。0-255の範囲です。
  strip.setBrightness(255);
  //この関数で実際に接続している全てのLEDに出力します。この場合、全てのLED素子を"off"
  strip.show();

  Serial.begin(115200UL);
 
}



////////////////////////////////////
////////////////LOOP////////////////
////////////////////////////////////

void loop() {
 
  //A2(バイクのバッテリ)電圧値の読み込み
  //バイクのバッテリーを分圧器にてMAX15V→MAX5Vへ降圧
  //0V~5Vを0~1023の分解能で取得
  volt = analogRead(A2);
  //変数voltの値を0V~15Vに変換
  volt*=5;
  volt/=1024;
  volt*=3;
  //シリアル通信で画面に電圧を表示
  Serial.println(volt);
  //delay(1000);

  if(volt<Threshold_BatteryVoltage){
    Breathe(3,1250,255,80,10);}
    //なぜか分からんが消灯しているはずなのに消灯しないので、
    //一度リセットする。
    else software_reset();

/*バッテリの状態を符号化し、発行パターンを選択
  Check();
  if(BatteryStatus==0){
    Breathe(3,1250);}
  if(BatteryStatus==1){
    StartUp(10,100);}  
*/    

/*発行パターンリスト
  StartUp(10,100);
  Breathe(3,1250,255,80,10);    //ゴールド(レバーと同色)
  PhotonBlood1(50,10);
  PhotonBlood2(10,10);
  rainbowCycle(10);
*/

}



///////////////////////////////////////
////////////////関数定義////////////////
///////////////////////////////////////

//Check()関数は、インターフェイスの変化を検知し、
//変化があった場合は 1 を、変化がなかった場合は 0 を返す関数です。
int Check(void){    
  //バッテリーの電圧の変化を確認
  BatteryStatus_previous=BatteryStatus;
  if(volt<Threshold_BatteryVoltage){
    BatteryStatus=0;
    }else BatteryStatus=1;
  if(BatteryStatus_previous!=BatteryStatus){
    return 1;
    }
  //インターフェイスに変化が何もない場合
  return 0;
  }

//software_reset()関数は、ソフトウェア上でArduinoのリセットを実行するための関数です。
//https://ehbtj.com/electronics/arduino-software-reset/
void software_reset() {
  asm volatile ("  jmp 0");
}



////////////////////////////////////////////////////////////////
////////////////////////発光パターン定義////////////////////////
////////////////////////////////////////////////////////////////

//Breathe()関数は、生物が呼吸をするようにLEDが明暗を繰り返す関数です。
//Breathe( 明るさが変わる間隔(ms) , 呼吸の間隔(ms) 赤の値(0~255) , 緑の値(0~255) , 青の値(0~255) );
void Breathe(uint8_t wait,int interval,int R,int G,int B){
  int j,k;  //LEDの明るさ
 
  //暗→明
  for(j=0;j<256;j++){
    //全ピクセルに色情報をセットします。
    for(uint16_t i=0;i<strip.numPixels()+16;i++){
      strip.setPixelColor(i,R,G,B);
      }
    strip.setBrightness(j);
    strip.show();
    delay(wait);  //一段階明るくするまでの時間(ms)です。
    }

  //明→暗
  for(k=255;k>-1;k--){
    //全ピクセルに色情報をセットします。
    for(uint16_t i=0;i<strip.numPixels();i++){
      strip.setPixelColor(i,R,G,B);
      }
    strip.setBrightness(k);
    strip.show();
    delay(wait);    //一段階暗くするまでの時間(ms)です。
    }
    
  //消灯の状態で待機します。
  delay(interval);  
  }



//StartUp()関数は、仮面ライダー555の変身待機音に合わせたイルミネーションです。
 void StartUp(uint8_t wait,int interval){
  int k;  //LEDの明るさ  
  //明→暗
  for(k=255;k>-1;k=k-8){
    //全ピクセルに色情報をセットします。
    for(uint16_t i=0;i<strip.numPixels();i++){
      strip.setPixelColor(i,0,0,255);  //青
      }
    strip.setBrightness(k);
    strip.show();
    delay(wait);  //一段階暗くするまでの時間(ms)です。
    }    
  //消灯の状態で待機します。
  delay(interval);  
  }


//PhotonBlood1()関数は、フォトンブラッドの流れを表現するイルミネーションです。
//フォトンブラッドはArduino側から先端へ流れます。
void PhotonBlood1(uint8_t wait,int interval){
  uint16_t i,j,k;
  for(i=0;i<strip.numPixels()+16;i++){
    k=256;
    //変数 i(=j) の位置から本体側まで16個のLEDを使ってグラデーション
    //変数 k がLEDの光量を表す
    for(j=i;j>i-16;j--){
      if(k<=0)break;
      strip.setPixelColor(j,k,k,0);
      k=k-16;
      }
    strip.show();
    delay(wait);
    }
  delay(interval);
  }


//いちおう成立してるけど、美しくない
//PhotonBlood2()関数は、フォトンブラッドの流れを表現するイルミネーションです。
//フォトンブラッドはArduino側から先端へ流れます。
void PhotonBlood2(uint8_t wait,int interval){
  uint16_t i,j,k,n;
  for(i=0;i<strip.numPixels()+16;i++){
    k=255;
    for(j=i;j>0;j--){
      //if(j<0)break;
      strip.setPixelColor(j,k,0,0);
      k=k-16;
      }
    strip.show();
    delay(wait);
    }
  delay(interval);
  }



//rainbowCycle()
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((((i) * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// 0 to 255の値を入力すると、RGB値を戻します
// 色は r - g - b - r …と変わってゆきます
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
 
バッテリー電圧の閾値変更してます。
この前、安定してなかったので。
 
 
 
そんな感じでこうなりました。


動作は、前回同様、キーオンで点灯、エンジン始動で消灯です。

前はLEDを赤に設定していましたが、RGB値を (255,80,10) とし、レバーと同じゴールドっぽいカラーにしています。(動画では分かりづらいですが。)
 
 
これにて、LEDテープほんとに完成です。
 
 
前に言ってた、効果音と無線化に移行します。
 
 
 
 

先日、やってしまいました。

朝寝ぼけたままバイクにまたがって、そのまま出社しようとしたら、そのまま立ちゴケしました・・・・・・。

 

なんて情けない。

しかし、後悔は時間の無駄です。

お金で解決出来ることはお金で解決するのです。

 

 

というわけで、ブレーキレバーを交換しました。

ブレーキレバーは一瞬で交換できます。

この代金を稼ぐのに丸1日働かなければならないのですが。

 

今回はアジャスターのカラーをブルーからレッドに変更しました。

 

CBR400Rのブラックの車体に、このゴールドのレバー、やはり最高にかっこいいです。

もう絶対にこけないように気をつけます。

 

 


ついでに、紫のスクリーンも交換しました。

(サイドバッシャーの話はどうした・・・・・・。)

 

というのも、紫のシートを貼り直そうと思って剥がしたら、糊跡がとれなくなっちゃって、どうにもこうにもいかなかったのです。

安物買いの銭失いといったところでしょうか。

 

残念ながら、CBR400R('16-)に対応したスクリーンは、現在、「 Puig 8903H RACING-SCREEN [SMOKE] HONDA CBR500R/CBR400R(16-) プーチ スクリーン カウル 」しか無いようなのでこれにしました。純正の紫のスクリーンがあればそれにしたのですが。

 

つけた感じはこんな感じです。

これも6本のビス外して付けるだけなんで、一瞬でしたね。

 

 

 

 

やはり、かっこよすぎる・・・・・・。

ディセプティコンのエンブレムとブラックのスクリーンがベストマッチ。

 

 

 

コンセプトを「仮面ライダー」から「トランスフォーマー」に切り替えて行きます。

台風来てます。

 

でも屋根があれば関係ない。

今日はようやく光らせることが出来ました。

ここまで面倒な道のりでしたね。

 

 

まずは、すでに完成していた回路図を元に実物を配線します。

 

 

 

バイクに搭載します。

 

 

 

 

 

いざ、テスト!

キー、オン!!

光りました!!

ちゃんと考えて作ったんで光って当然なんですが、いやぁ~実際こう光ってみるとテンションあがりますね。

 

実際の挙動の動画がこちらです。

(声でけぇわ・・・・・・)

 

しかし、こうしてみると、この赤いLEDのパッシング、ださいですね。

あと、テープのラインにもシャープさを欠いていて、なんだかだらっとした印象をうけます。

 

あと、キーオンしてから点灯開始までのラグはArduinoの起動時間で仕方ないとして、エンジンが起動してから消灯までのラグが長すぎですね。昇圧して13.5Vに至るまでにけっこう時間がかかるんですね。

 

反省点はいくつかありますが、また次のお楽しみにとっておきます。

 

 

 

さ、あとはフタをするだけ~

????

 

????????

 

!!??

閉まらん!!

 

やはり、バイクに搭載するのに端子台使うのは愚策でしたね。

 

無理に閉めて線が痛んでもいやなんで、一回全部ばらして配線し直します。

 

 

 

まず、普段触らないであろうヒューズはバッテリーの横の隙間に押し込みます!

 

トランスも見える場所にある意味無いんで、奥の方に押し込みました。

 

あとは、リレーソケットを端子台代わりにしたり、絶縁キャップを使ったり、結局キボシ端子に頼ったり、なんだかんだでコンパクトに収まりました。

 

 

線にタグ付けして分かりやすく。

 

LEDテープの信号線も2本出しました。

今回は1本しか使いませんが、後の追加が容易になります。

 

 

 

というわけで、LEDテープでバイクを光らせる計画、完遂しました。

あとは、もう少し発光パターンを増やしたり、電圧の閾値を調節したり、テープを増やしたり、細々したカスタマイズになります。

 

今回は自作の部分が多かったのでめんどくさかったのですが、勉強になって楽しかったです。

 

次は、BLE通信によるスマートフォンでの発光パターンの変更と、効果音の追加をしてみたいですね。Arduino基盤は搭載しちゃったので、あとは簡単な追加になります。

 

それにしても、もっと収納スペースが欲しいものです。。。。。。

 

とりあえず、決定版の図面書き上げました。

自分用なので端子番号とか適当なので、実際に回路組む段階で分かりやすい名前つけようかなと思ってます。

前回の課題であった、「キーオフにしてもLEDが光り続ける」という点は、キーオン出力端子からリレー受けすることで解決しています。

 

ついでに、バッテリーの電圧を計測する回路もリレー接点の後ろに入れているので、キーオフで遮断できます。

 

 

 

必要なものはざっとそろえました。

 

Arduinoは買ったままの姿では扱いづらいので、専用のケースを買って、その上にブレッドボードを貼り付けました。

ほんとは基板に半田付けしたかったんですが、めんどくさいのでブレボで妥協します。

見えないところだし、小電力だし。

 

DC12Vのリレーは安心と信頼のオムロン製MY2Nです。

接点容量10Aというちょっとした動力用です。こんなおもちゃに使う代物ではありません。

ヒューズもその辺にあるヤツです。

 

以前、同オムロン製のマイクロリレーを使ってUSB電源くんを使っていたのですが、旅先でリレーが焼けて、携帯充電出来なくて泣いたので、今回は無駄にでかい接点を使います。

 

あと、トランスは今バイクに載っているので省略。

 

さて、こいつらをこのケースに収めるレベルでまとめなければなりません。

そうしなければバイクに載りません。

 

実は、今回のカスタムで一番面倒なのがここなんじゃないかと個人的に思ってます。

なんたって、CBR400R、収納スペースがめちゃくちゃ狭い・・・・・・。

 

 

 

図面はできあがってるので、テレビ見ながらシコシコ回路組んで、コンパクトにまとめてゆきたいと思います。

 

週末晴れたらいいなぁ。

 

 

バイクのカスタムを行うにあたって、まずコンセプトが必要です。

ArduinoとLEDテープをバイクに搭載する場合も同様です。

当然、「仮面ライダー」なのですが、今回は「仮面ライダー555」をイメージしてプログラミングしたいと思います。

 

実は今の愛車のカラーリング、「仮面ライダーカイザ」の「サイドバッシャー」を意識しています。

記憶の中ではけっこう近かったのですが、こうやって見比べると全然違いますね。

いいんです、僕のバイクなので。

 

コンセプトは「仮面ライダー555」なのに、意識しているのは「仮面ライダーカイザ」。

いいんです、どっちもかっこいいから。

 

 

 

次は、イルミネーションです。

今のところ考えている挙動は、

キーオフで消灯、

キーオン(エンジン停止)で点灯、

キーオン(エンジン稼働)で消灯です。

 

違法にならないために、エンジンがかかったら消灯しますから、キーオンしてエンジンをかけるわずかな時間しか光りません。

僕のイメージ的には、仮面ライダー555が変身するときの待機音にあった光らせ方が似合うのかなぁと思っています。

知らない人はいないと思いますが、ちなみにこんな音です。

「スタンディングバイ」+待機音.m4a

プレミアムバンダイ公式サイトにあります。

 

 

 

次に、どうやってエンジンの稼働を検知するか、という問題になります。もちろんバイクに搭載しているPCにはさわれません。

 

バイクのバッテリは定格約12Vですが、エンジンが稼働(発電機稼働)すると、約14Vまで昇圧します。この差を見ればエンジンの稼働/停止を見分けられそうですね。

 

[キーオン(エンジン停止)]

端子台で測っていますが、バッテリの±端子と同電位です。

12.80Vを示しています。

 

[キーオン(エンジン稼働)]

14.32Vを示しています。

 

14Vの電圧をArduinoに直接入力するとICがぶっ壊れますので、分圧して入力します。

下の回路を組みます。

(↑A0間違いです。A2です。)

とても簡単な分圧回路です。

0V~15V の入力電圧を

0V~5V で取り出すことが出来ます。

この電圧値をアナログ信号としてArduinoに入力します。

1個ずつの抵抗素子を 50kΩ としていますが、もっと大きくしてもいいような気はします。

この分圧回路のせいで無駄に消費する電流が 0.08mA です。

 

 

 

ってなわけで、色々参考にしながら、下のようなスケッチを書きました。

//CBR400R、愛称「Predator」に搭載するためのプログラムです。

// 【重要】NeoPixelが焼損しないようにするため、1000μFのコンデンサーをLED電源に並列配線し、
// 300~500Ωの抵抗器を1番目のLED素子のDIN端子とArduinoの間に直列配線します。
// Arduino と1番目のLED素子は出来るだけ近接させます。
// 配線作業は、電源投入済みの回路では行なわないでください。
// もし、どうしてもそれが必要な場合、GNDから先に配線してください。

//1A以上の電流をかけようとしている場合(LED 1素子あたり20~50mA)は、テープLEDに5V電源を直接接続します。
//テープLEDのGNDは、Arduino のGNDと共有する必要があります。

#include <Adafruit_NeoPixel.h>

#define LEDPIN 3                        //Arduino ピン番号
#define Pixels 144                      //テープ上のLED素子数
#define Threshold_BatteryVoltage 13.5   //バッテリ発電中と認めるための電圧閾値[13.5]

// Adafruit_NeoPixel( Parameter 1 , Parameter 2 , Parameter 3 )
// Parameter 1 = テープ上のLED素子数
// Parameter 2 = Arduino ピン番号 (おおかた利用可)
// Parameter 3 = LED素子タイプフラグ(必要に応じて追加)
  // NEO_KHZ800  800 KHz ビット信号 (LED「WS2812」を使用したほとんどの NeoPixel 品)
  // NEO_KHZ400  400 KHz ビット信号 (旧い v1 (v2でない) FLORA, LEDドライバー「WS2811」)
  // NEO_GRB     LED素子はGRBビット信号で接続 (ほとんどの NeoPixel 品)
  // NEO_RGB     LED素子はRGBビット信号で接続 (v1 FLORA,v2 ではありません)
Adafruit_NeoPixel strip = Adafruit_NeoPixel( Pixels, LEDPIN , NEO_GRB + NEO_KHZ800);



/////////////////////////////////////////////////
////////////////グローバル変数定義////////////////
/////////////////////////////////////////////////

//バッテリ電圧を格納するための変数
double volt;

//バッテリは通常時(キーオン)は12V程度、発電時(エンジン稼働時)は14V程度
//0:0<=V<13.5 1:13.5<=V<15
int BatteryStatus=0;
int BatteryStatus_previous=0;



/////////////////////////////////////
////////////////SETUP////////////////
/////////////////////////////////////

void setup() {

  //LEDテープの初期設定
  //初期化を行う処理です。ここで指定の出力ピンにpinMode(pin, OUTPUT);を行ってます。
  strip.begin();
  //LEDの明るさを指定します。0-255の範囲です。
  strip.setBrightness(255);
  //この関数で実際に接続している全てのLEDに出力します。この場合、全てのLED素子を"off"
  strip.show();

  Serial.begin(115200UL);
 
}



////////////////////////////////////
////////////////LOOP////////////////
////////////////////////////////////

void loop() {
 
  //A2(バイクのバッテリ)電圧値の読み込み
  //バイクのバッテリーを分圧器にてMAX15V→MAX5Vへ降圧
  //0V~5Vを0~1023の分解能で取得
  volt = analogRead(A2);
  //変数voltの値を0V~15Vに変換
  volt*=5;
  volt/=1024;
  volt*=3;
  //シリアル通信で画面に電圧を表示
  Serial.println(volt);
  //delay(1000);

  if(volt<Threshold_BatteryVoltage){
    StartUp(10,100);}
    //なぜか分からんが消灯しているはずなのに消灯しないので、
    //一度リセットする。
    else software_reset();
 
  //今回は使わない
  //バッテリの状態を符号化
  //Check();
  //if(BatteryStatus==0){
  //  Breathe(3,1250);}
  //if(BatteryStatus==1){
  //  StartUp(10,100);}  
 
  //PhotonBlood1(50,10);    //今回は使わない
  //PhotonBlood2(10,10);    //今回は使わない
  //rainbowCycle(10);       //今回は使わない

}



///////////////////////////////////////
////////////////関数定義////////////////
///////////////////////////////////////

//Check()関数は、インターフェイスの変化を検知し、
//変化があった場合は 1 を、変化がなかった場合は 0 を返す関数です。
int Check(void){    
  //バッテリーの電圧の変化を確認
  BatteryStatus_previous=BatteryStatus;
  if(volt<Threshold_BatteryVoltage){
    BatteryStatus=0;
    }else BatteryStatus=1;
  if(BatteryStatus_previous!=BatteryStatus){
    return 1;
    }
  //インターフェイスに変化が何もない場合
  return 0;
  }

//software_reset()関数は、ソフトウェア上でArduinoのリセットを実行するための関数です。
//https://ehbtj.com/electronics/arduino-software-reset/
void software_reset() {
  asm volatile ("  jmp 0");
}



////////////////////////////////////////////////////////////////
////////////////////////発光パターン定義////////////////////////
////////////////////////////////////////////////////////////////

//Breathe()関数は、生物が呼吸をするようにLEDが明暗を繰り返す関数です。
//Breathe( 明るさが変わる間隔(ms) , 呼吸の間隔(ms) );
void Breathe(uint8_t wait,int interval){
  int j,k;
 
  //暗→明
  for(j=0;j<256;j++){
    //全ピクセルに色情報をセットします。
    for(uint16_t i=0;i<strip.numPixels()+16;i++){
      strip.setPixelColor(i,0,j,j);  //さわやかな水色
      }
    strip.show();
    delay(wait);  //一段階明るくするまでの時間(ms)です。
    }

  //明→暗
  for(k=255;k>-1;k--){
    //全ピクセルに色情報をセットします。
    for(uint16_t i=0;i<strip.numPixels();i++){
      strip.setPixelColor(i,0,k,k);  //さわやかな水色
      }
    strip.show();
    delay(wait);    //一段階暗くするまでの時間(ms)です。
    }
    
  //消灯の状態で待機します。
  delay(interval);  
  }


//StartUp()関数は、仮面ライダー555の変身待機音に合わせたイルミネーションです。
 void StartUp(uint8_t wait,int interval){
  int k;
 
  //明→暗
  for(k=255;k>-1;k=k-8){
    //全ピクセルに色情報をセットします。
    for(uint16_t i=0;i<strip.numPixels();i++){
      strip.setPixelColor(i,k,0,0);  //ファイズのモチーフカラー(赤)
      }
    strip.show();
    delay(wait);  //一段階暗くするまでの時間(ms)です。
    }
    
  //消灯の状態で待機します。
  delay(interval);  
  }


//PhotonBlood1()関数は、フォトンブラッドの流れを表現するイルミネーションです。
//フォトンブラッドはArduino側から先端へ流れます。
void PhotonBlood1(uint8_t wait,int interval){
  uint16_t i,j,k;
  for(i=0;i<strip.numPixels()+16;i++){
    k=256;
    //変数 i(=j) の位置から本体側まで16個のLEDを使ってグラデーション
    //変数 k がLEDの光量を表す
    for(j=i;j>i-16;j--){
      if(k<=0)break;
      strip.setPixelColor(j,k,k,0);
      k=k-16;
      }
    strip.show();
    delay(wait);
    }
  delay(interval);
  }


/*いちおう成立してるけど、美しくない
//PhotonBlood2()関数は、フォトンブラッドの流れを表現するイルミネーションです。
//フォトンブラッドはArduino側から先端へ流れます。
void PhotonBlood2(uint8_t wait,int interval){
  uint16_t i,j,k,n;
  for(i=0;i<strip.numPixels()+16;i++){
    k=255;
    for(j=i;j>0;j--){
      //if(j<0)break;
      strip.setPixelColor(j,k,0,0);
      k=k-16;
      }
    strip.show();
    delay(wait);
    }
  delay(interval);
  }
*/


//rainbowCycle()
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256; j++) {
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((((i) * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// 0 to 255の値を入力すると、RGB値を戻します
// 色は r - g - b - r …と変わってゆきます
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}


 

コメントアウトと無駄な文が多いのは勉強のためです。

変数名とか関数名とか、改行とかスペースとか、素人丸出しなのは許してください。

コメントアウトはともかく、参照しない関数とかただただ無駄なので、コンパイル時は消してもらってもいいです。

 

あと、割り込み処理使ってもうちょっとスマートなプログラムにしたかったのですが、デジタル信号しか割り込み出来ないみたいで、そのための回路作るのも面倒なので、こんかいはやめました。とりあえずこのプロジェクトが終わったら挑戦してみたいです。

 

 

 

実際に机の上で光らせている動画です。

今回は12V準備するのがめんどくさかったのと、部屋のなかでまぶし過ぎたので、

#define Threshold_BatteryVoltage 4.5   //バッテリ発電中と認めるための電圧閾値[13.5]

//LEDの明るさを指定します。0-255の範囲です。
  strip.setBrightness(100);

としています。

便宜上、ArduinoのA2ポートに5Vの電源を印加すると、発電中(エンジンスタート)を検知したとします。

また、LEDの明るさは、最高255ですが、100です。

眠かったので何言ってるか聞き取りづらいですね。すみません。

 

 

 

という訳で、試行成功です。

 

 

 

ちなみに、こんな構成回路の写真はこんな感じです。

 

 

 

ここまでこれば、満を持してバイクに搭載!となりますが・・・・・・

気づいたと思いますが、この回路では、LEDテープに電源を与え続けている限り、キースイッチをオフにしてもLEDが光り続けます。

この点については、リレー受けして、キーオンの時だけ別回路でLEDテープに電源を与えようと思います。

 

その回路構築はまたこんど。