hiro yamamoto works

マイコンハード、ソフトを作ったりしています。
お家や現場のお困りごと解決に!
内容利用は自己責任でお願いします。

タコメーターの回路をマイコンで置き換える(関係資料その1)

2023-09-13 13:37:20 | ナレッジ_knowledge

※日本精機製タコメータが動かない※
電解コンデンサのショート不良可能性あり。基板中央付近の円筒形470μF6.3Vを、
テスタ抵抗レンジで数Ωなら可能性高いので交換してみて。<br /><br />簡易CDIイグニッションパルス発生&入力回路
ホトカプラ:TLP371
ダイオード:1N4148(何でも使えるかと思う)

パルス発生用Arduinoスケッチ
スケッチ例BlinkWithoutDelayを改変しました。

ざっくり説明
ArduinoUNO用
シリアルターミナルからパルス幅設定数値をマイクロ秒単位で入力してEnterまたは送信をクリックすると
シリアルモニタにパルス幅(μS)と回転数(rpm)を表示して、デジタル9にパルスを出力します。
10000(μS)を入力すると3,000(rpm)4285(μS)で≒14,002(rpm)
もちろん誤差あります。

スケッチ
const int ledPin = 9 ;
int ledState = LOW;
unsigned long previousMillis = 0;
int sensorValue = 0;
int outputValue = 0;
void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);

void loop() {
  if (Serial.available()) {
    String Received_value;
    Received_value = Serial.readStringUntil('\n');//終端文字'\n'検出まで読み文字列全体を変数へ
    outputValue = Received_value.toInt();
    Serial.print(outputValue);
    Serial.print(" , ");
    uint32_t rpm;
    rpm = ((60 * 1000000) / outputValue)/2 ;
    Serial.println(rpm);
  }
  unsigned long currentMillis = micros();
  if (currentMillis - previousMillis >= (outputValue / 2)) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    if (ledState == HIGH) {
      PORTB |= _BV(1);//D9-PB1 D8
    } else {
      PORTB &= ~_BV(1);//D9-PB1 D8
    }
    //digitalWrite(ledPin, ledState);
  }
}



最新の画像もっと見る

コメントを投稿