Arduinoで作る点滅回路

3.7Vのリチウム電池で動作する点滅回路を作りたかったのですが、Arduinoでそれが実現できました。

基本この2点で作れます。

左側:FT232RLモジュール 5V 3.3V USB to TTL シリアル コンバーター (プログラム時に必要)アマゾンで2個¥799

右側:ArduinoProMini  Aliexpressで¥416(送料込み)
これには3.3V8MHzと5V16MHzの2種類があります。

(価格は2023/8/29日現在)


電力が大きいLEDや電球を使う場合はこのユニットが便利です。

10個15A 400W MOS FETトリガースイッチ駆動モジュールPWMレギュレーターコントロールパネル ¥999

回路図


12Vヘッドライトランプの点滅

こんな感じで作りました。➡


夜間、ウオーキング用点滅ランプ(ノルディックウォーキング ポール用) 

ダイソーのコイン(100円)ケースに入れた点滅回路の
作り方はYoutubeへ

このプログラムはここから


LED6個用 Arduinoプログラム ここからダウンロード

Exif_JPEG_PICTURE

ヘッドライトの点滅実験の回路図

ウオーキング用の回路図

トランジスターは2SC1815で、LEDはダイソーのクリスマスツリー用(2022年)です。現時点(2023/9)では販売していないようです。ダイソーのUSBテープライトを3分割して使うか、乾電池3本用の装飾LEDを使ってください。乾電池2本用では調整用抵抗を入れないと使えませんので注意してください。

目次

最初は

Arduino用開発プログラムArduinoIDEをダウンロードしてインストール

Arduino IDEはソフトウェア |アルドゥイーノ (arduino.cc) からダウンロードできます。

USB変換ボードをなぎます。

左側は FT232RLモジュール 5V 3.3V USB to TTL シリアル コンバーター 
右側はArduinoProMini  中央はArduinoProMini に付けるメスタイプのコネクターで、必要な長さでカットします。シリアル コンバーターのピンは部品として入っています。
ここでの注意事項です。シリアル コンバーター に設定ピンがあり(黄色丸)、3.3V用と5V用の切替があります。切替をお忘れなく!

裏向きのピンもあるようです。VCCとGNDが同じ位置になるように挿します。何も書いてない状態で赤丸のLEDが点滅すればVCCとGNDは正解です。逆方向なら壊れます。

ArduinoIDEでプグラムを転送します。

下記のプラグラムをダウンロードするがコピペして 基板の種類とUSBを選んで転送します。表示が英語の場合はFile➡Preferences➡Languageを日本語に変えます。

何もつないでなくても、基板の点滅していたLEDの動きが変われば正常です。

3.3Vび場合は8Mh、5Vは16Mh ArduinoIDEがここの設定で自動的にタイマー変数を調整します。ここの設定も要注意です。⇓

LED3個用点滅回路

このプログラムはここからダウンロードできます。

/*
 LED3個の2023/8/29
 完成バージョン
 https://pink-cats.com/
 
 led_flashi_3piece_complete.ino

*/
class flash {
  int ledPin;
  long OnTime;
  long OfTime;
  long WAITETime1;
  long WAITETime2;
  int loopcount;
  int ledState;
  int ledmove;
  int setcount;
  int led;
  unsigned long setMillis1;
  unsigned long setMillis2;

  public:
  //---------(pin w1  on off w2 loop)--------
  flash (int pin,long wate1 , long on, long off, long wate2 ,int lp ) {
    ledPin = pin;
    setcount=lp;
    pinMode(ledPin, OUTPUT);

    OnTime = on;
    OfTime = off;
    WAITETime1 = wate1;
    WAITETime2 = wate2;
    loopcount = 0;
    led=0;

    ledState = LOW;
    setMillis1 = 0;
    setMillis2 = 0;

  }
 void Update() {
    unsigned long timeMillis = millis();
    if (timeMillis - setMillis2 >= WAITETime1) {
      if (setcount > loopcount) {
        if ((ledState == LOW) && (led == 0)) {       //最初の1回目はLEDがONでスタートするように
            ledState = HIGH;  
            digitalWrite(ledPin, ledState);
            led=1;
            setMillis1 = timeMillis;
        }
        if((ledState == HIGH) && (timeMillis - setMillis1 >= OnTime)) {
          setMillis1 = timeMillis;
          ledState = LOW;
          digitalWrite(ledPin, ledState);
      
        } else {
          if ((ledState == LOW) && (timeMillis - setMillis1 >= OfTime)) {
           setMillis1 = timeMillis;
           ledState = HIGH;
                loopcount++;
           digitalWrite(ledPin, ledState);
          }
        }
      } else {
          ledState = LOW;  
          digitalWrite(ledPin, ledState);    
          if (timeMillis - setMillis1 >= WAITETime2) {
            loopcount=0;
            setMillis1 = timeMillis;
            setMillis2 = timeMillis;
            led=0;
          }
      }
    } 
  }
  void lanpoff() {
    ledmove = LOW;
    digitalWrite(ledPin , ledmove);
  }
  void lanpon() {
    digitalWrite(ledPin , HIGH);
  }
};
int button = 4; // 停止ボタンピン
int swsts;
//----------pin  w1  on   off   w2   loop-------
flash led1(6,  0, 50, 50 ,  500, 5);
flash led2(7,400, 50, 50 ,  100, 5);
flash led3(8,  0, 50, 50 ,  500, 5);
flash led4(LED_BUILTIN,0 , 50, 50,200,4); //基板LED

void setup() {
    pinMode(button, INPUT_PULLUP);
}

void loop() {
  swsts=digitalRead(button);
  if (swsts == LOW) {
   led1.lanpon();
  }else {
    led1.Update();
    led2.Update();
    led3.Update();
    led4.Update();
  }
}		

LED6個用 Arduinoプログラム ここからダウンロード

/*
2023/08/28
LED6個
https://pink-cats.com
led_flashi_6piece_complete
*/
class flash {
  int ledPin;
  long OnTime;
  long OfTime;
  long WAITETime1;
  long WAITETime2;
  int loopcount;
  int ledState;
  int ledmove;
  int setcount;
  int led;
  unsigned long setMillis1;
  unsigned long setMillis2;

  public:
  //---------(pin w1  on off w2 loop)--------
  flash (int pin,long wate1 , long on, long off, long wate2 ,int lp ) {
    ledPin = pin;
    setcount=lp;
    pinMode(ledPin, OUTPUT);

    OnTime = on;
    OfTime = off;
    WAITETime1 = wate1;
    WAITETime2 = wate2;
    loopcount = 0;
    led=0;

    ledState = LOW;
    setMillis1 = 0;
    setMillis2 = 0;

  }

  void Update() {
    unsigned long timeMillis = millis();
    if (timeMillis - setMillis2 >= WAITETime1) {
      if (setcount > loopcount) {
        if ((ledState == LOW) && (led == 0)) {       //最初の1回目はLEDがONでスタートするように
            ledState = HIGH;  
            digitalWrite(ledPin, ledState);
            led=1;
            setMillis1 = timeMillis;
        }
        if((ledState == HIGH) && (timeMillis - setMillis1 >= OnTime)) {
          setMillis1 = timeMillis;
          ledState = LOW;
          digitalWrite(ledPin, ledState);
      
        } else {
          if ((ledState == LOW) && (timeMillis - setMillis1 >= OfTime)) {
           setMillis1 = timeMillis;
           ledState = HIGH;
                loopcount++;
           digitalWrite(ledPin, ledState);
          }
        }
      } else {
          ledState = LOW;  
          digitalWrite(ledPin, ledState);    
          if (timeMillis - setMillis1 >= WAITETime2) {
            loopcount=0;
            setMillis1 = timeMillis;
            setMillis2 = timeMillis;
            led=0;
          }
      }
    }
  }
    
};
//----------pin  w1  on   off   w2   loop-------
flash led1(3,   0,50, 50 , 1000, 2);
flash led2(4, 50,50, 50 , 950, 2);
flash led3(5, 100,50, 50 , 900, 2);
flash led4(6, 150,50, 50 , 850, 2);
flash led5(7, 200,50, 50  ,800, 2);
flash led6(8, 250,50, 50  ,750, 2);

/* 5回繰り返しバージョン
flash led1(3,   0,50, 50 , 1000,5);
flash led2(4, 50,50, 50 , 950, 5);
flash led3(5, 100,50, 50 , 900, 5);
flash led4(6, 150,50, 50 , 850, 5);
flash led5(7, 200,50, 50  ,800, 5);
flash led6(8, 250,50, 50  ,750, 5);
*/

/*中央によるバージョン
flash led1(3,   0,50, 50 , 1000,5);
flash led2(4, 50,50, 50 , 950, 5);
flash led3(5, 100,50, 50 , 900, 5);
flash led4(6, 100,50, 50 , 900, 5);
flash led5(7, 50,50, 50  ,950, 5);
flash led6(8, 0,50, 50  ,1000, 5);
*/

flash led7(LED_BUILTIN,0 , 50, 50,200,1); //基板LED


void setup() {

}

void loop() {
  led1.Update();
  led2.Update();
  led3.Update();
  led4.Update();
  led5.Update();
  led6.Update();
  led7.Update();
}

このプログラムは flash led1 から始まる部分にコントロールを集中させています。
flash led1(3, 0,50, 50 , 1000, 2) はLEDを3番につなぎ、0ms待ち50m点灯、50ms消灯しそれを2回繰り返します。そのご1000ms待機(1S)です。ここを書き換えると自由に設定可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次