FC2ブログ

    記事一覧

    arduinoでタコメーター1

    相変わらずarduinoを進めています。
    まだまだ使いこなせていませんが、第一目標としてタコメータを作ってみたいと思います。
    とりあえずは、回転数をパソコンに表示できるようにしたいです。
    いきなりエンジンで進める訳にはいかないので、以前タコメータの動作試験用に作ったファンクションジェネレーターで信号を出して、それをarduinoで受け取ってパソコンで表示するようにします。

    回転数を求めるには、まず最初にarduinoに周波数Hzを検知してもらいたい。
    読み取らせるFジェネレーターの信号は短波(方形波)_| ̄|_| ̄|_| ̄|_こんなのです。
    この上がって下がっての時間を計れば、周波数がわかるはず。
    そのためには、arduinoに上がって下がっての秒数を数えてもらいます。(この数を数えてもらうまでに、2日かかりました。
    この時のプログラムは↓

    unsigned int hitime = 0;//unsignedは整数のみ intは2バイトの整数 hitimeは代入する名前 =0はhitimeに代入する変数

    void setup() {
        pinMode( 3, INPUT );//pinModeはピンの入出力命令(3番ピン、入力)
        Serial.begin( 9600 );//Serial.beginはシリアル通信レート指定( 9600は通信レート他にも有り )
    }

    void loop() {

         hitime = pulseIn( 3, HIGH );//hitimeは代入する名前  = pulseInは指定ピンがON/OFFになっている時間をhitimeに代入( 3番ピンが, HIGHになっている時間 )
        
            Serial.println( hitime, DEC );//Serial.printlnはデータをシリアルポートに出力します( hitime上で代入された3番ピンがHIGHになっている時間, DECは10進数)
            
           
        }


    このプログラムだと電圧が上がった時の時間しか計っていません。
    //の後ろの文は自分用の覚書なので、プログラムとは関係がありません。
    この時の数字は↓


    大体53470マイクロ秒くらいです。電圧の上げ下げの往復で大体106940μsこの後、実際往復の時間を図るプログラムにして計ると計算道理でした。
    周波数の公式F(周波数)=1(1秒)/T(時間)
    ・・・単位を揃えるとF=1000000μs/106940μs
    F=9.351・・・
    この時の周波数は実測で9.35Hz位なので、かなり正確な数字が出ました。
    この数字には大満足ですarduinoの性能の良さに驚いています。(マイコンをやっている人には当たり前だと思いますが・・。)
    この後さらにプログラムを書き足していき最終的には↓

    unsigned long hitime = 0;//unsignedは整数のみ intは2バイトの整数 hitimeは代入する名前 =0はintervalに代入する変数
    unsigned long lowtime = 0;
    unsigned long totaltime = 0;
    unsigned long rpm = 0;

    void setup() {
        pinMode( 3, INPUT );//pinModeはピンの入出力命令(3番ピン、入力)
        Serial.begin( 9600 );//Serial.beginはシリアル通信レート指定( 9600は通信レート他にも有り )
    }

    void loop() {

         hitime = pulseIn( 3, HIGH );//hitimeは代入する名前  = pulseInは指定ピンがON/OFFになっている時間をhitimeに代入( 3番ピンが, HIGHになっている時間 )
         lowtime = pulseIn( 3, LOW);

          totaltime= hitime + lowtime ;
          rpm=1000000/totaltime*60;
          
            
            Serial.print( rpm, DEC );//Serial.printlnはデータをシリアルポートに出力します( rpm=1000000/totaltime*60;の計算結果, DECは10進数)
            Serial.println( "RPM");
           
        }

    これでFジェネレーターの信号を回転数のRPMにできました。
    PCの表示は↓


    現時点ではFジェネレータのきれいな波形だけでの動作なので、バイクで使えるにはまだ課題が多いです。
    今後も、色々試して行きますので、のんびりお付き合いください。
    スポンサーサイト



    コメント

    コメントの投稿

    非公開コメント

    プロフィール

    engine太郎

    Author:engine太郎
    FC2ブログへようこそ!

    エンジン太郎カウンター