Digispark互換機でアイドリングストップキャンセラーを作りたい

Arduino

以前作った555がワンショット動作をしてリレーを一定時間だけONするってだけの基板であるが、取付後、毎日快調に動作している。そんな中で、DigiSpark互換機、ATTiny85というその名の如く小さなマイコンがあることを知った。Arduinoの開発環境が使えてGPIOは6本あり、三端子レギュレータ78L05も搭載されているので12Vをぶち込んでもいいだろう。データシートを見ると各GPIOは40mA流せることになっているから、普段よく使用する5VリレーのATQ209の定格励磁電流は28.1mAなので、追加部品不要で直接ドライブできる。実に好都合。

マイコンだと「何秒後にリレーを何秒ON」みたいなことは得意なわけで、そんなプログラムを組んでみる、11秒後にリレーを0.5秒ONしてやるだけのプログラムを作ってみた。

/*
アイドリングストップキャンセラー
・For ATTiny85 Internal Clock 8MHz
・ATQ209 DC5V_Relay
*/
unsigned long previousMillis = 0;         // 最後に処理を行った時間
unsigned long interval = 11000;           // 11秒
unsigned long waitTime = 30000;           // 30秒
bool actionDone = false;                  // 一度だけ実行するためのフラグ

void setup()
{
  pinMode(4, OUTPUT);                     // リレー接続端子
  pinMode(1, OUTPUT);                     // ボード上のLED

  // 実行までLEDを明滅させる
  for (int i = 0; i < 5; i++) {

  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(1, brightness);           // PWM による明るさ調整
    delay(10);                            // 少し待つ
  }
  delay(40);                              // 40ms

  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(1, brightness);           // PWM による明るさ調整
    delay(10);                            // 少し待つ
  }
  delay(40);                              // 40ms
  }
}
void loop()
{
  unsigned long currentMillis = millis(); // 現在の時間を取得

  // 11秒を超えたら一度だけリレーとLEDを500ms ONにする
  if (currentMillis - previousMillis >= interval && !actionDone) { 
    digitalWrite(4, HIGH);                // リレーON
    digitalWrite(1, HIGH);                // LED_ON
    delay(500);                           // 500ms ON
    digitalWrite(4, LOW);                 // リレーOFF
    digitalWrite(1, LOW);                 // LED_OFF
    
    actionDone = true;                    // 一度実行したのでフラグを立てる
    previousMillis = currentMillis;       // 最後の実行時刻を更新
  }

  // タイムカウントが30秒を超えたら待機状態へ
  if (currentMillis - previousMillis >= waitTime) {
    while (true) {
      // ここで待機状態にする(動作しない)
    }
  }
}

で、これをArduinoIDEで焼こうと思ったらUSBでつないだだけではどうもうまくいかないっぽくて。先人の教えを調べるとArduino UNOを母艦にして焼くArduino as ISPというのが正攻法らしいのでそれに従ってみたらすんなり焼けた。

接続は以下のとおりとする。

UNOATTiny85
5V5V
GNDGND
D10P5
D11P0
D12P1
D13P2

焼けたら外してしまっていい。何回もやるもんじゃないからピンヘッダは最初から付けていない。

回路図を示す。部品点数が少ないのが良い。

点線から右側はUNOなので焼けたら不要、焼き直すことも無いと思うのではんだ付けして実装してしまった。と言っても実質VIN(ACC)とGNDとP4がリレーに行くだけ、配線は3本。行先はACCとGNDとアイドリングストップ信号線なのは変わらない。この基板の利点はCRが不要で任意のタイミングで動作させることができることに尽きるだろう。11秒としたのはエンジンが暖機状態だと13秒くらいでアイドリングストップ機構が発動してしまうからである。

以前作った555がワンショット動作をしてリレーを一定時間だけONするってだけの基板と交換が容易になるので、コネクタを同じにしておいて入れ替えてみたが動作は良好。

1970年代且つ昭和40年代秋田市生まれ。情報処理技術者、甲種危険物取扱者、第一種衛生管理者、第二種電気工事士、消防設備士乙6/乙7、品質管理検定2級、漢字検定2級、VEリーダーなどを所持。1990年代に結婚して一子あり。

minakawaをフォローする
ArduinoMG33S
スポンサーリンク
minakawaをフォローする
タイトルとURLをコピーしました