車両またはモーターの速度/ rpmを測定することは、常に試みるべき魅力的なプロジェクトでした。このプロジェクトでは、Arduinoを使用してアナログ速度計を構築します。IRセンサーモジュールを使用して速度を測定します。速度を測定するホールセンサーなど、他の方法/センサーもありますが、IRセンサーモジュールは非常に一般的なデバイスであり、市場から簡単に入手でき、あらゆるタイプのタイプで使用できるため、IRセンサーの使用は簡単です自動車。
このプロジェクトでは、アナログとデジタルの両方の形式で速度を示します。このプロジェクトでは、割り込みとタイマーを使用するため、Arduinoとステッピングモーターの学習スキルも向上します。このプロジェクトの最後に、回転するオブジェクトがカバーする速度と距離を計算し、それらをデジタル形式の16x2LCD画面とアナログメーターに表示できるようになります。それでは、Arduinoを使用したこのスピードメーターとオドメーター回路から始めましょう
必要な材料
- Arduino
- バイポーラステッピングモーター(4線式)
- ステッピングモータードライバー(L298nモジュール)
- IRセンサーモジュール
- 16 * 2LCDディスプレイ
- 2.2k抵抗
- 接続線
- ブレッドボード。
- 電源
- スピードメーター画像のプリントアウト
速度を計算してアナログ速度計に表示する
IRセンサーは、その前にある物体の存在を検出できるデバイスです。2つのブレードローター(ファン)を使用し、ブレードが回転するたびにIRセンサーがそれを検出するようにIRセンサーをその近くに配置しました。次に、Arduinoのタイマーと割り込みを使用して、モーターが1回転するのにかかる時間を計算します。
このプロジェクトでは、最も優先度の高い割り込みを使用してrpmを検出し、立ち上がりモードで構成しました。そのため、センサー出力がLOWからHighになるたびに、関数 RPMCount() が実行されます。また、2枚のブレードローターを使用しているため、1回転で4回呼び出されることになります。
所要時間がわかれば、次の式を使用してRPMを計算できます。1000/所要時間でRPS(1秒あたりの回転数)が得られ、さらに60を掛けるとRPM(1分あたりの回転数)が得られます。
rpm =(60/2)*(1000 /(ミリ秒()-時間))* REV / bladesInFan;
RPMを取得した後、速度は次の式で計算できます。
速度= rpm *(2 * Pi *半径)/ 1000
Pi = 3.14で、半径は4.7インチであることがわかっています。
ただし、最初に半径をインチからメートルに変換する必要があります。
半径=((半径* 2.54)/100.0)メートル 速度= rpm * 60.0 *(2.0 * 3.14 *半径)/ 1000.0)キロメートル/時
ここでは、rpmに60を掛けてrpmをrph(1時間あたりの回転数)に変換し、1000で割ってメートル/時間をキロメートル/時間に変換しています。
kmhで速度を取得した後、これらの値をデジタル形式でLCDに直接表示できますが、アナログ形式で速度を表示するには、もう1回計算していいえを見つける必要があります。ステップの、ステッピングモーターはアナログメーターで速度を表示するために移動する必要があります。
ここでは、アナログメーターに4線式バイポーラステッピングモーターを使用しました。これは1.8度で、1回転あたり200ステップを意味します。
今度はスピードメーターで280Kmhを表示する必要があります。したがって、280 Kmhのステッピングモーターを表示するには、280度移動する必要があります
したがって、maxSpeed = 280になります。
そしてmaxStepsは
maxSteps = 280 / 1.8 = 155ステップ
これで、Arduinoコードに関数、つまり速度をステップにマップするためにここで使用される マップ 関数ができました。
ステップ= map(speed、0、maxSpeed 、0、maxSteps);
だから今私たちは持っています
Steps = map(speed、0,280,0,155);
ステップを計算した後、これらのステップをステッピングモーター機能に直接適用して、ステッピングモーターを動かすことができます。また、与えられた計算を使用して、ステッピングモーターの現在のステップまたは角度を処理する必要があります
currSteps =ステップ の手順= currSteps-preSteps preSteps = currSteps
ここで、 currSteps は最後の計算からの現在のステップであり、 preSteps は最後に実行されたステップです。
回路図と接続
このアナログ速度計の回路図は単純です。ここでは、16x2 LCDを使用して速度をデジタル形式で表示し、ステッピングモーターを使用してアナログ速度計の針を回転させています。
16x2 LCDは、Arduinoの次のアナログピンに接続されています。
RS-A5
RW-GND
EN-A4
D4-A3
D5-A2
D6-A1
D7-A0
LCDの明るさを設定するために2.2kの抵抗が使用されます。ファンのブレードを検出してrpmを計算するために使用されるIRセンサーモジュールは、ArduinoのD2ピンを意味する割り込み0に接続されています。
ここでは、ステッピングモータードライバー、つまりL293Nモジュールを使用しました。ステッピングモータードライバーのIN1、IN2、IN3、IN4ピンはArduinoのD8、D9、D10、D11に直接接続されています。残りの接続は回路図に示されています。
プログラミングの説明
Arduino Speedomete rの完全なコードは最後にあります。ここでは、その重要な部分をいくつか説明します。
プログラミングの部分では、ステッピングモーターライブラリ、LiquidCrystal LCDライブラリなどの必要なすべてのライブラリを含め、それらのピンを宣言しました。
#include
この後、計算を実行するためのいくつかの変数とマクロを取得しました。計算については、前のセクションですでに説明しています。
揮発性バイトREV; unsigned long int rpm、RPM; unsigned long st = 0; 署名されていない長い時間; int ledPin = 13; int led = 0、RPMlen、prevRPM; intフラグ= 0; int flag1 = 1; #define BladesInFan 2 float radius = 4.7; //インチ intpreSteps = 0; float stepAngle = 360.0 /(float)stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
この後、 セットアップ 機能でLCD、シリアル、割り込み、ステッピングモーターを初期化し ます。
void setup() { myStepper.setSpeed(60); Serial.begin(9600); pinMode(ledPin、OUTPUT); lcd.begin(16,2); lcd.print( "スピードメーター"); delay(2000); attachInterrupt(0、RPMCount、RISING); }
この後、rpm in loop 関数を読み取り、計算を実行して速度を取得し、それをステップに変換してステッピングモーターを実行し、速度をアナログ形式で表示します。
void loop() { readRPM(); radius =((radius * 2.54)/100.0); //メートル単位で変換intSpeed =((float)RPM * 60.0 *(2.0 * 3.14 * radius)/1000.0); // 60分でRPM、タイヤの直径(2pi r)rは半径、1000で変換します int Steps = map(Speed、minSpeed、maxSpeed、minSteps、maxSteps); if(flag1){ Serial.print(Speed); Serial.println( "Kmh"); lcd.setCursor(0,0); lcd.print( "RPM:"); lcd.print(RPM); lcd.print( ""); lcd.setCursor(0,1); lcd.print( "速度:"); lcd.print(Speed); lcd.print( "Km / h"); flag1 = 0; } int currSteps = Steps;int Steps = currSteps-preSteps; preSteps = currSteps; myStepper.step(steps); }
ここに、RPMを計算するための reapRPM() 関数があります。
int readRPM() { if(REV> = 10またはmillis()> = st + 1000)// 10回の読み取りごとまたはアイドル状態で1秒ごとにAFETRを更新します { if(flag == 0) flag = 1; rpm =(60/2)*(1000 /(millis()-時間))* REV / bladesInFan; 時間=ミリ秒(); REV = 0; int x = rpm; while(x!= 0) { x = x / 10; RPMlen ++; } Serial.println(rpm、DEC); RPM = rpm; delay(500); st = millis(); flag1 = 1; } }
最後に、オブジェクトの回転を測定するための割り込みルーチンがあります
void RPMCount() { REV ++; if(led == LOW){ led = HIGH; } else { led = LOW; } digitalWrite(ledPin、led); }
これは、Arduinoを使用してアナログスピードメーターを簡単に構築する方法です。これはホールセンサーを使用して構築することもでき、速度はスマートフォンに表示できます。同じように、このArduinoスピードメーターチュートリアルに従ってください。