• カテゴリー別アーカイブ Arduino
  • GPS時計(その2)

    本日も、雨なのでほぼ1日arduinoで悩んでいました

    昨日決めた、「温度・湿度を検出する」は今回見送ることにしました

    手元にある、BME280というセンサは信号レベルが5vでは高いことがわかり

    レベル変換が必要みたいなので見送ることにしました

    本日はGPS信号をlcdに表示するまでなんとかこぎつけました

    gpsのの時間を日本時間に変換するのが手こずりましたがなんとか出来たみたいです

    RTCを使用して、

    GPSが受信できなくても時間を表示できるようにしました

    写真は屋内なのでGPSが受信できていません

    今日は、ここまで


  • 久々の更新です

    タイトルのTMAX他バイクはすべて売り払いました(*^^*)

    代わりに、電動アシスト自転車を購入

    自転車の話題は、後回しにして

    久々にarduinoです

    時計を作ることにしました

    ただの時計ではつまらないので、

    ・GPS信号を使う

    ・温度・湿度を検出する

    ・喋る

    ということで、まずは材料集め

    自宅の引き出しを探しまわって、下記のものをゲット

    ・GPS受信ユニット

    ・Aquos Talk picp

    ・lcd

    ・RTCユニット

    ・温度・湿度検出ユニット

    ・電源ユニット

    良くも、こんなものがあるものですが

    これを使って喋る時計を作ります

    まずは、gpsユニットが使えるか確認します

    次へ


  • TMAX530のサイドスタンド(その2)

    TMAX530のサイドスタンド(その2)

    こんにちは
    TMAX530のスタンドのスイッチを無効にする一番簡単な方法は
    スイッチの位置をずらしてスイッチを働かないようにすればいいみたいですが
    今回は、スイッチの機能を利用して警告音を出すようにしてみました

    以前、バンバン200のヘッドライト減光スイッチ回路も作っていますので
    今回もArduinoを使用して製作してみたいと思います
    サイドスタンドの警告だけでArduinoを利用するのはもったいないので
    前回製作したウィンカーブザーも今回にまとめることとしました
    ウィンカーブザーで利用したブザーをサイドスタンドの警告にも利用します
    本当は、LEDウィンカーの時に交換したウィンカーリレーの機能を入れようか考えたのですが
    万が一動作不良となると、ウィンカー自体の機能が止まるので止めました

    以前のArduino関係ウィンカーブザー関係の記事です

    ヘッドライト減光装置⇒http://eg.air-nifty.com/blog/2015/04/post-8f1e.html
    ヘッドライト減光装置(その1)⇒http://eg.air-nifty.com/blog/2015/04/post-b49d.html

    ヘッドライト減光装置(その2)⇒http://eg.air-nifty.com/blog/2015/04/post-2ccf.html

    ヘッドライト減光装置最終⇒http://eg.air-nifty.com/blog/2015/05/post-f9e6.html

    ウィンカーブザーも色々苦労してきました
    ウィンカーブザーの製作⇒http://eg.air-nifty.com/blog/2015/02/post-0ae7.html
    ウィンカーブザーの製作続き⇒http://eg.air-nifty.com/blog/2015/02/post-ce2c.html
    TMAX530ウィンカーブザー⇒http://eg.air-nifty.com/blog/2016/08/post-c5c6.html

    まずは、どういう動きにするか・・

    チャートを見てください

    _r

    今までは、ウィンカー信号(3段目)に対してウィンカーブザー信号(2)(1段目)でした

    今回は、ウィンカーブザー信号(1)(2段目)にします
    かつ、サイドスタンドが出ていればピッピッピッピッと警告音が出るようにします
    おまけにLEDも点滅するようにします

    まず部品の調達

    Arduino機能本体  あちゃんでいいの(半実装済み) [KIT-ADINO3](177円)⇒http://www.aitendo.com/product/13095

    PCからプログラムを書き込むために USB-TTL変換 [U2TL340-6P] ⇒http://www.aitendo.com/product/11632

    マイコンチップ  AVRマイコン [ATMEGA328P-PU](230円)⇒http://www.aitendo.com/product/10415
    (このチップはブートローダーが書き込まれていませんので自分で書き込む必要があります)

    ブートローダー書き込み済みは下記
    ブートローダ書き込み済みAVRマイコン [OPTIFIX328](380円)⇒http://www.aitendo.com/product/10452

    その他駆動部分は自宅にあるのを利用

    圧電ブザー
    デジトラ
    フォトカプラ
    抵抗
    コンデンサ
    12v⇒5vレギュレーター
    LED
    ユニバーサル基板

    ウィンカーブザー(1)の場合のスケッチ⇒
    ウィンカーブザー(2)の場合のスケッチ⇒

    今回はウィンカーブザー(2)で製作しました

    まずは、TMAXのサイドスタンドのコネクタを探します

    フロント左サイドにあるはずです

    Cimg1564_r
    Cimg1563_r

    ありました、一応テスターで確認します

    Cimg1570_r

    スタンドを出して導通なしです

    前回、ウィンカーブザーのためにリードをすでに出していたので

    ブレッドボードで試作した今回のものを仮繋ぎして動作を確認します

    Cimg1572_r
    Cimg1573_r

    一応、動作の確認をして今回はこのまま元に戻して

    ブレッドボードの試作品を正規に製作します

    続きは次回にて・・

     

     

     


  • TMAX530のサイドスタンド(その1)

    こんにちは

    2016年8月にTMAX530を購入して

    ETC・バーハンドル・マフラー・ウィンカーLEDと

    頑張って手を加えて、これでもう弄るところはない!!と思っていましたが・・・

    最近、どうもサイドスタンドが・・・

    最近のバイクはサイドスタンドとエンジンが連動していて

    フォルツア⇒サイドスタンドのSWを無効に・・

    CB1300・バンバン200⇒ギヤ付きなのでニュートラルでは

                                         サイドスタンドが出ていても問題なし

    TMAX530⇒サイドスタンドが出ていればエンジンが掛けられない、また

                    エンジン始動中にサイドスタンド出せばエンジン停止

    当たり前だけど、スクータにはニュートラルがないのでしょうがないですけど・・・

    今まで、ギヤ付に慣れていると、自分の場合は、特に停車する時にはサイドスタンド出して、エンジン停止するので勝手にエンジン停止する

    始動時にも、暖機運転するにはセンタースタンドを立てなくては・・

    ネットで調べると、スタンドのSWをずらして無効にするのは結構やっている方がいらっしゃる

    スタンドで、エンジン停止は無効にしたい・・

    しかし、スタンドの戻し忘れも怖い

    結局、思いついたのが、サイドスタンドが出ていると何らかの警告が出るようにしたい

    いろいろ考えて、以前手を加えたウィンカーブザーと機能を組み合わせることに

    バンバンのときのヘッドライト減光装置を思い出して

    今回は、arudiunoを利用することに

    ウィンカーブザーを利用してサイドスタンドが出ているときには警告音が出るようなものを

    作成します

    次回をお楽しみに・・・・・

     

     

     


  • ヘッドライト減光装置最終

    こんにちは

    お久しぶりです

    前回の話から結構経ちましたが

    いろいろありました

    結局、3回ほど作りなおしました

    不具合は走行中に動作がおかしくなる?

    ledの表示で判るのですが

    プログラムの動作Loopがしなくなる?

    Loopの中にledが点灯するコードを入れているのですが

    これが、点灯しっぱなし

    それも必ずではない・・

    なるべくコンパクトにするため配線がごちゃごちゃでしたが

    基板の大きさよりも配線が重ならないようにと

    試行錯誤して考えました

    汚いですが配線パターン

    Img005_r

    実際の基板

    Dsc_0824_r

    結局、こうすることによってご動作なくなりました?

    当初この基板をヘッドライトケースに何とか収めようとして

    極力サイズを小さくと考えたのですが諦めました

    下記のケースを作成してヘッドライトの下に取り付けました

    Dsc_0832_r

    どうしても解決できなかったことが

    減光時のヘッドライトの明るさです

    コード上は減光時最小値(1)にしたのですが

    感覚的には60%くらいでしょうか

    PCオシロで波形を見ると

    波形が訛っている?ようで、これが原因だと思います

    しかし、どうすれば改善できるのか・・・

    結局諦めてこのままです

    Dsc_0830_r

    また、使用していない端子はそのままでいいのでしょうか?

    例えばGND側あるいは+側に接続するとか?

    とりあえずコード上で使用していない端子は

    出力端子にしてLow出力に設定しました

    最終コードを載せときます

    ————————-ここから—————————–

    //—————————————————

    //ヘッドライト減光装置ーーーー2015/4/10  Yamasawa_Masahiro

    //Rev 2.11

    //—————————————————-

    //boolean Light_State = LOW;

    const int pin2 = 2;

    const int pin3 = 3;

    const int pin4 = 4;

    //const int pin5 = 5;

    //const int pin6 = 6;

    //const int pin7 = 7;

    //const int pin8 = 8;

    const int pin9 = 9;

    const int pin10 = 10;

    const int pin11 = 11;

    const int pin12 = 12;

    const int pin13 = 13;

    const int pinA0 = 14;

    const int pinA1 = 15;

    const int pinA2 = 16;

    const int pinA3 = 17;

    const int pinA4 = 18;

    const int pinA5 = 19;

    boolean Loff_Flg = false;

    boolean In_State;

    const int Set_Time = 1500;//不感時間の

    const int Delay_Time = 1000;//チェンジの無効時間

    const int Light_Wait_Val = 20000;//ライト消灯までの時間

    const int Light_Low_Val = 1;//減光時の明るさ

    const int Delay_On_Time = 3;

    const int Delay_Off_Time = 10;

    const int Led_Out = 5;

    const int N_In = 6;

    const int N_State = 7 ;//ニュートラル表示用

    const int State_Led = 8;//運転状態表示用Led

    int Max_Val = 255;//明るさの最大値

    int Min_Val = 0;//明るさの最小値

    long Time_Val;

    //—————————————————-

    //—————————————————-

    //===========================================

    //入力の状態を簡単に変更できるように

    //関数を作成

    boolean  Get_Stats(void) {

      //入力がLOWでニュートラルの場合

      return digitalRead(N_In);

      //入力がHIGHでニュートラルの場合

      //return !digitalRead(N_In);

    }

    //———————

    boolean Chk_Chg(boolean x, int val) {

      //xがtrueで減光時falseで点灯時

      //yはその時の明るさの数値

      //入力に変化がないときはなにもしないで抜け出す

      if (In_State == Get_Stats()) {

        Max_Val = 255;

        Min_Val = 0;

     

        return false;

      }

      //入力に変化があったなら

      if (x) {

        //減光時

        Min_Val = val;

     

      } else {

        //点灯時

        Max_Val = val;

      }

      //Serial.println("******");

       //Serial.println(val);

      return true;

    }

    //—————————————————-

    //Ledの点滅サブルーチン

    void Led_Blink(int C, int P, int Dly) {

      for (int s = 0; s < C; s++)

      {

        digitalWrite(State_Led, HIGH);

        delay(P);

        digitalWrite(State_Led, LOW);

        delay(Dly);

      }

    }

    //

    //

    void setup() {

      // put your setup code here, to run once:

            pinMode(pin2, OUTPUT);

     digitalWrite(pin2, LOW);

     pinMode(pin3, OUTPUT);

     digitalWrite(pin3, LOW);

     pinMode(pin4, OUTPUT);

     digitalWrite(pin4, LOW);

     pinMode(pin9, OUTPUT);

     digitalWrite(pin9, LOW);

     pinMode(pin10, OUTPUT);

     digitalWrite(pin10, LOW);

     pinMode(pin11, OUTPUT);

     digitalWrite(pin11, LOW);

     pinMode(pin12, OUTPUT);

     digitalWrite(pin12, LOW);

     pinMode(pin13, OUTPUT);

     digitalWrite(pin13, LOW);

     pinMode(pinA0, OUTPUT);

     digitalWrite(pinA0, LOW);

     pinMode(pinA1, OUTPUT);

     digitalWrite(pinA1, LOW);

     pinMode(pinA2, OUTPUT);

     digitalWrite(pinA2, LOW);

     pinMode(pinA3, OUTPUT);

     digitalWrite(pinA3, LOW);

     pinMode(pinA4, OUTPUT);

     digitalWrite(pinA4, LOW);

     pinMode(pinA5, OUTPUT);

     digitalWrite(pinA5, LOW);

      pinMode(N_In, INPUT_PULLUP);

      pinMode(Led_Out, OUTPUT);

      pinMode(N_State, OUTPUT);

      pinMode(State_Led, OUTPUT);

      Serial.begin(9600);

      In_State = Get_Stats();

      digitalWrite(N_State, !In_State); //13番をニュートラル表示と同じに

      //——————————–

      //入力と出力を

      if (In_State) {

        analogWrite(Led_Out, 255);

      } else {

        analogWrite(Led_Out, 0);

      }

      //——————————–

      //——————————–

      Serial.println("SetUp—start!");

    }

    //===========================================

    //===========================================

    //===========================================

    //===========================================

    //———————–

    //———————-

    void loop() {

      //==========================================

      //現行時間が一定時間すぎれば完全に消灯

      //Serial.println(LOFF_Flg);

      if (Loff_Flg) {

        // Led_Blink(3,400);//状態表示を3回表示

        if (Time_Val + Light_Wait_Val < millis()) {

          analogWrite(Led_Out, 0);

          Loff_Flg = false;

          Serial.println("Light_OFF");

        }

      }

      //一定時間が経過したら、入力の状態を確認

      delay(Delay_Time);

      //記憶している状態と現在の状態が同じなら何もしない

      if (In_State == Get_Stats()) {

        if (In_State) {

          //ライトONの状態なら

          Led_Blink(1, 10, 0); //状態表示を1回表示

        } else {

          //ライトOFFの状態なら

          if (Loff_Flg) {

            //減光時

            Led_Blink(2, 10, 400); //状態表示を2回表示

          } else {

            //完全消灯時

            Led_Blink(1, 500, 400); //状態表示をゆっくり回表示

          }

        }

        return;

      }

      //ここからスタート

      //

      //

      //Serial.println("Event Start");

      Loff_Flg = false;

      //状態の食い違いを合わせる

      In_State = Get_Stats();

      //———————————

      digitalWrite(N_State, !In_State);

      if (In_State) {

        //徐々に点灯

        for (int Led_Val = Min_Val; Led_Val <= 255; Led_Val++)

        {

          //Serial.println(Led_Val);

     

          analogWrite(Led_Out, Led_Val);

     

                if (Chk_Chg(false, Led_Val)) {

           return; //入力に変化があったら抜け出す

         }

         delay(Delay_On_Time);

        }

        Serial.println("——————–End———————–");

      } else {

        //徐々に消灯

        for (int Led_Val = Max_Val; Led_Val >= Light_Low_Val; Led_Val–)

        {

          //Serial.println(Led_Val);

     

          analogWrite(Led_Out, Led_Val);

          //Serial.println(Led_Val);

     

          if (Chk_Chg(true, Led_Val)) {

            return; //入力に変化があったら抜け出す

          }

        delay(Delay_Off_Time);

        }

        Serial.println("FFFFFFF");

        //————————————

        Time_Val = millis();

        Loff_Flg = true;

        //——————————————————

      }

    //Serial.println("———————————-");

    }//End

    ————-ここまで——————————

    色々とありましたが、現在約1ヶ月半問題なく使用できています

    今回の件はこれで完了とさせていただきます

    m(__)m


  • ヘッドライト減光装置つづき2

    こんにちは

    本日午後からですが半日バイクに乗ってきました!

    今回は、問題なく動作しました

    やはり入出力回路を電気的に切り分ける必要があったのでしょう

    ということです

    この1週間ヘッドライト付けたり、外したりと疲れました┐( ̄ヘ ̄)┌ フゥゥ~

    これで、次に進めます

    お約束事ですが、自分はすべてを理解している訳ありませんので

    ソフトのコードの事とか、ハードのことが本当にこれが正しいのか

    わかりません

    自分もよく他の方のブログを参考にするので、今度は同じ思いで来られた方に

    少しでも参考にと思い出来るだけ公開するつもりですが

    あくまで趣味の世界で行っていますので、すべて自己責任でお願いします

    前回も書きましたが、初めてのArduinoを利用したものなので

    ソフトのインストールから、ブートローダーの書き込み方

    プログラムの転送の仕方といろいろ障害がありましたが

    Arduinoと出会って約1ヶ月でここまで来ました

    やはり、漠然とプログラムの勉強をするより何か目標を決めて

    製作したほうが勉強になります

    たかが、ライトをON、OFFするだけなのにいろいろ勉強になりました

    実際、秋月電子で販売している ⇒  ATMEGA168/328マイコンボードキット

    ボードに書き込むためのソフト  ⇒  ArduinoIDE

    これだけあれば、とりあえずマイコンにコードを書き込めます

    今回の使用した部品のコストも合計で1000円位です

    AVRマイコン  1個  250円

    マイコン動作に必要なセラロック  1個 35円

    出力を制御するFET   1個 100円

    12vから5vに落とすレギュレーター   1個  40円

    入出力を電気的に切り離すフォトカプラ  1個 80円✕2個

    基板  1枚 200円程度

    その他、抵抗、コンデンサも1個数十円程度です

    あとは、挫折しない根性でしょうか??(* ̄ー ̄*)

    まずは、動作させるためのコードです

    ==============ここから始まり========================

    1 //—————————————————

    2 //ヘッドライト減光装置ーーーー2015/4/10  Yamasawa_Masahiro

    3 //Rev 2.11

    4 //—————————————————-

    5 //boolean Light_State = LOW;

    6

    7 boolean Loff_Flg = false;

    8 boolean In_State;

    9 const int Set_Time = 1500;//不感時間の

    10 const int Delay_Time = 1000;//チェンジの無効時間

    11 const int Led_Out = 9;

    12 const int N_In = 3;

    13 const int Light_Wait_Val = 20000;//ライト消灯までの時間

    14 const int Light_Low_Val = 3;//減光時の明るさ

    15 const int Delay_On_Time = 10;

    16 const int Delay_Off_Time = 15;

    17 const int State_Led = 12;//運転状態表示用Led

    18 int Max_Val = 255;//明るさの最大値

    19 int Min_Val = 0;//明るさの最小値

    20 long Time_Val;

    21 //—————————————————-

    22 //—————————————————-

    23 //===========================================

    24 //入力の状態を簡単に変更できるように

    25 //関数を作成

    26 boolean  Get_Stats(void) {

    27   //入力がLOWでニュートラルの場合

    28   return digitalRead(N_In);

    29   //入力がHIGHでニュートラルの場合

    30  //return !digitalRead(N_In);

    31  }

    32 //———————

    33 boolean Chk_Chg(boolean x, int val) {

    34   //xがtrueで減光時falseで点灯時

    35  //yはその時の明るさの数値

    36  //入力に変化がないときはなにもしないで抜け出す

    37  if (In_State == Get_Stats()) {

    38    Max_Val = 255;

    39    Min_Val = 0;

    40    return false;

    41  }

    42    //入力に変化があったなら

    43  if (x) {

    44    //減光時

    45    Min_Val = val;

    46   } else {

    47    //点灯時

    48    Max_Val = val;

    49  }

    50   return true;

    51  }

    52 //—————————————————-

    53 //Ledの点滅サブルーチン

    54 void Led_Blink(int C, int P, int Dly) {

    55  for (int s = 0; s < C; s++)

    56   {

    57    digitalWrite(State_Led, HIGH);

    58    delay(P);

    59    digitalWrite(State_Led, LOW);

    60    delay(Dly);

    61  }

    62  }

    63 //

    64 //

    65

    66 void setup() {

    67  // put your setup code here, to run once:

    68

    69  pinMode(N_In, INPUT_PULLUP);

    70

    71  pinMode(Led_Out, OUTPUT);

    72  pinMode(13, OUTPUT);

    73  pinMode(State_Led, OUTPUT);

    74  Serial.begin(9600);

    75  In_State = Get_Stats();

    76  digitalWrite(13, !In_State); //13番をニュートラル表示と同じに

    77  //——————————–

    78  //入力と出力を

    79  if (In_State) {

    80    analogWrite(Led_Out, 255);

    81   } else {

    82    analogWrite(Led_Out, 0);

    83  }

    84  //——————————–

    85  //——————————–

    86  Serial.println("SetUp—start!");

    87  }

    88 //===========================================

    89 //===========================================

    90 //===========================================

    91 //===========================================

    92

    93 //———————–

    94 //———————-

    95

    96 void loop() {

    97   //==========================================

    98   //現行時間が一定時間すぎれば完全に消灯

    99   //Serial.println(LOFF_Flg);

    100   if (Loff_Flg) {

    101    // Led_Blink(3,400);//状態表示を3回表示

    102    if (Time_Val + Light_Wait_Val < millis()) {

    103      analogWrite(Led_Out, 0);

    104      Loff_Flg = false;

    105      Serial.println("Light_OFF");

    106    }

    107  }

    108  //一定時間が経過したら、入力の状態を確認

    109

    110  delay(Delay_Time);

    111  //記憶している状態と現在の状態が同じなら何もしない

    112   if (In_State == Get_Stats()) {

    113    if (In_State) {

    114      //ライトONの状態なら

    115      Led_Blink(1, 10, 0); //状態表示を1回表示

    116   } else {

    117      //ライトOFFの状態なら

    118      if (Loff_Flg) {

    119        //減光時

    200        Led_Blink(2, 10, 400); //状態表示を2回表示

    201      } else {

    202        //完全消灯時

    203        Led_Blink(1, 500, 400); //状態表示をゆっくり1回表示

    204      }

    205    }

    206    return;

    207   }

    208  //ここからスタート

    209  //

    210  //

    211

    212  Serial.println("Event Start");

    213  Loff_Flg = false;

    214  //状態の食い違いを合わせる

    215  In_State = Get_Stats();

    216

    217  //———————————

    218  digitalWrite(13, !In_State);

    219  if (In_State) {

    220   //徐々に点灯

    221    for (int Led_Val = Min_Val; Led_Val < 256; Led_Val++)

    222    {

    223      //Serial.println(led_val);

    224      analogWrite(Led_Out, Led_Val);

    225     delay(Delay_On_Time);

    226      if (Chk_Chg(false, Led_Val)) {

    227        return; //入力に変化があったら抜け出す

    228      }

    229    }

    230    } else {

    231    //徐々に消灯

    232    for (int Led_Val = Max_Val; Led_Val > Light_Low_Val; Led_Val–)

    233    {

    234      //Serial.println(led_val);

    235      analogWrite(Led_Out, Led_Val);

    236      delay(Delay_Off_Time);

    237      if (Chk_Chg(true, Led_Val)) {

    238        return; //入力に変化があったら抜け出す

    239      }

    240    }

    241    //————————————

    242    Time_Val = millis();

    243    Loff_Flg = true;

    244

    245    //——————————————————

    246   }

    247   }//End

    ======================ここで終わり=============================

    /記号で始まる部分はコメントです

    Serialで始まるコードは動作検証のためにPCに表示させるためのもので

    実際にはなくても関係ありません

    ※7行目から20行目

     各変数を宣言しています

     アナログポートを利用して半固定抵抗を付けて各値をハード的に設定するのも

     可能だと思いますが、最初設定したら変更することがないので

     変数の中で宣言してるだけです

     実際、今回使用しているポートは入力1個、出力1個、表示用に2個使用しているだけです

     ある意味もったいない・・

    ※26から31行

     入力の接続方法でHiとLowの動作が違うので

     変更する場合ここを書き換えるだけで済むように

     関数を作成しました

    ※33から51行目

     動作中ニュートラルの動作に変更があった時

     現在のライトの明るさを取得します

    ※53から62行目

     マイコンの動作状況を把握するためのLEDを点滅させる関数です

    ※66から87行目

     この部分は、電源が入った時一度だけ実行される部分です

     変数の初期化、入出力の設定を行います

    ※96から247行目

     この部分がループされて実行されます

    ※100から107行目

     この部分は減光して一定時間がすぎれば消灯するためのコードです

    ※110行目

     一定時間待機します(現在は1秒)

     これは、ギヤがローからセカンドに入る場合とか一瞬の動作変更を

     無視するためにタイムラグを取っています

    ※112から207行目

     これは上記のタイムラグを経過したあと

     ニュートラルの状態を確認して今までと同じ状態であれば

     ここでループを抜けだしてこれ以降のコードを実行しません

    ※212から247行目

     ここで、ニュートラルの状態によって、ゆっくり点灯か

     ゆっくり消灯か判断しています

     PWM出力ができるのでパルスのディユーティ比を変更して明るさを変えています

     0から255の256段階変更できます

    最初ニュートラルの割り込みを

    attachInterrupt関数を利用して割り込みをかけたのですが

    うまく行かず四苦八苦してようやくこのコードになりました

    疲れたので今日はここまで

    コード上、おかしいところを発見したら連絡ください

    明日もバイクでラジコンに行くので、壊れるかもしれません

    最後に回路図載せます、これはおかしいと思うところがあれば連絡ください

    尚、バイクの搭載後でもコードを変更できるようにシリアル接続できるように

    ピンヘッダーも取り付けました

    ※2015/04/14 マイコンのピン配置が間違ってましたので図面差し替えました

    2

    では、m(_ _)m  今度は何つくろーかな

     


  • ヘッドライト減光装置つづき1

    こんにちは

    今回はソフト面の紹介を行うつもりでしたがその前に・・

    仮付したものが、どうもうまくだ動作しない

    それも、走りだして数時間は問題なく動作するのですが

    いつの間にか、動作してない

    ニュートラルランプ確認用のLEDが点滅してる?

    基板を取り外し、机上で確認すると動作しない?

    もう一度、プログラムを書き込んで見ると

    今度は正常に動作します

    多分、プログラム上はうまく動作していると思うのですが

    何かの影響でチップがエラーになる????

    とりあえず、出力側にもフォトカプラーを入れて

    入出力をバイクの電源ラインから切り離してみました

    この1週間で何度バイクから付けたり外したりしたことか( ̄Д ̄;;

    まぁ問題なく1回で動作したら面白くないし( ̄ー ̄)ニヤリ

    ということで、基板にledを追加

    今までは

    電源のLED

    ニュートラル確認用LED

    出力確認用LED

    でしたが

    これだけではプログラムが上手く動作しているのかよくわからないので

    Loopの中に一度点滅するLEDを追加しました

    これで、プログラムが正常に動作していれば1秒に1回程度点滅します

    ついでに、これだけではつまらないので

    減光待機時に、2回点滅

    消灯時に、長めの1回点滅を追加しました

    これで、またバイクに取り付けて動作確認したいと思います

    机上で仮設のLEDでプログラムの動作確認した動画はこれです

    下のLEDで動作状態が確認できます

    ボタンを押した状態でニュートラルです

    放してギヤオンです

    ついでに、PCオシロで出力した波形です

    最初、フル点灯からニュートラル入れて、減光状態

    一定時間後に消灯

    次に、ギヤオンでフル点灯です

    机上で実際のヘッドライトを取り付けて動作確認です

    減光時あまり減光していないように見えますが

    実際は結構減光してます

    動作確認用LEDは右下です

    これで、また様子見ます

    いまさらですが

    ヘッドライトの消灯は多分違法でしょうが

    停止時のみ消灯はどうなのでしょうか???

    もしかして、これって違法になる???

    基本的には減光ですが、消灯にする利用は

    バイクでラジコンに行くと、ラジコンの電池を

    バイクの電源で充電するのです

    この時、ライトが点灯していると勿体無いので

    減光が発生してから20秒後に消灯するように作成したのですが

    消灯するのをもうちょっと遅くするか・・


  • ヘッドライト減光装置

    こんにちは、m(_ _)m

    前回も、話しましたがArduinoの件です

    Arduinoとの出会いで、自分の電子工作の環境が大きく変わりました

    ますます、どうでもいいものを作ってしまいそうです

    その第1回目としてバイクヘッドライトの減光リレーを作ることに

    まず、こんなものが必要なのか?・・・・・・ということで

    ネット検索・・・・・

    結構作ってる方いるじゃないですか・・

    家族からは、またくだらないことしていると

    白い目で見られながらも制作しました( ´,_ゝ`)ハイハイ

    多分、結構な方がArduinoってなんじゃ??と思う方もいるでしょうが

    (自分も、数週間前まで知りませんでした(*´ェ`*)

    簡単に言うとpcでプログラムを書いて

    チップに書き込みいろいろなものを制御できますね

    小さなコンピュータと言いましょうか

    このチップには、最初にブートローダーを書き込まないと

    駄目だし、ちゃんと16MHzの発信子も必要です

    言語はC言語となっています

    チップにとりあえず書き込めるようになるまで1周間程度かかりました

    でも、プログラムを修正して何度でも書き込めるので

    思っていた以上に便利です

    まぁ、Arduinoの勉強ということで、最初からあまり難しい物を

    考えても挫折するので・・

    やりたいことは

    1.ニュートラルで減光する

    2.ニュートラル一定時間で減光から消灯

    3.ギヤを入れると再点灯する

    せっかくPWM出力できるのですから

    点灯・消灯時はゆっくり点灯、ゆっくり消灯したいと思います

    簡単にできるかと思いましたが、疲れました

    まずはハード面から

    ヘッドライトは以前にLEDにしてますので

    電流を測定すると、Hi点灯時でも1.6A程度しか流れませんでした

    制御はFETで行うことにしました

    入力は、

    メーターパネルのニュートラルランプから取ることに

    これがなかなかうまく行かず

    試行錯誤して、結局フォトカプラを使いました

    どうしても、バイクの電源が12v、マイコンが5vで動作なので

    インターフェースは、こういうもので分けたほうがいいみたいです

    フォトカプラも、1個50円程度でした

    今回は、最初なのでコンパクトさにはこだわらずちょっと大きめ

    チップもソケットに入れました

    制作後にプログラムを変更できるようにシリアル端子もつけました

    Dsc_0773_r

    画面の右上が入力部の半導体ですが

    最終的にはこの部分をフォトカプラに変更しました

    下記がデスク上でプログラムを書いて、ブレットボードで動作検証しているところです

    Dsc_0765_r
    Dsc_0767_r

    別な基板に入出力部、電源部、基準発信部、プログラム転送用接続部分

    を組み込みます、あとはPCと接続してプログラムを転送します

    Dsc_0772_r

    pcとの接続はUSBで行うため

    そのインターフェースは右側の基板にしかないため

    今回製作品のデータのやり取りは右側の基板を通して行います

    Dsc_0774_r

    机上で実際にヘッドライトを接続して動作を確認します

    とりあえず、基板をビニール袋に入れてハンドルに縛り付けて

    1ヶ月ほど動作を確認したいと思います

    基板上のLEDで動作状態がわかるようにしてます

    Dsc_0775_r_2
    Dsc_0776_r_2

    取り付けて何度か走行しましたが

    もう、プログラム修正です

    Dsc_0778_r
    Dsc_0777_r
    Dsc_0779_r

    まぁ、傍から見ればバイクにパソコンつないで

    何してる?????と思うのでしょうかね

    「いつも隣の方には、変な顔で見られています(;д;)」

    こういうものを製作する方法はいろいろあると思いますが

    自分はArduinoと出会わなければこんなものは製作できなかったです

    何よりも、動作の変更がソフトで出来るは大変便利です

    でも、バグの検証は必要になってしまいます

    自分で言うのもなんですが、こんなに緻密に製作しているのに

    基板をビニールに入れて取り付けるのはいかがなものか・・・

    と思いますが、どうもだいたい出来上がる目処がつくと

    最後の締めが甘いのですよね

    ずっとこのままだったりして・・・・・・・

    次回は、この装置のソフト面を報告しますm(_ _)m


  • Arudino

    こんにちは

    昔から電子工作は好きなのですが

    最近、知人からaruduinoというマイコンのことを知り

    ついでに基板を譲り受けまし

    pcからプログラムを書き込みことができます

    Dsc_0765 Dsc_0760_3Dsc_0766_2

    pc用ソフトはlinux版もあり、無料で入手可能でした

    試行錯誤して、やっとブートローダーを書き込めるようになり

    とりあえず、何か作成してみることに・・・

    最初から、複雑なものを考えても挫折するので簡単なのもに

    いろいろ考えて

    今回は、バイクヘッドライト減光装置を作成してみます

    条件は

    ・ニュートラルでヘッドライトを徐々に減光する

    ・ニュートラル一定時間で消灯

    ・ギヤを入れると徐々に点灯

    ・駆動はリレーを使わない

    うまく行くかわかりませんが

    とりあえず、必要なパーツを秋月電子に注文しました

    次回、お楽しみにm(__)m

    今回「Arduino」のカテゴリー追加しました