よしエレ研究所のブログ

主に電子工作を紹介

【自作】充電式LEDライト!高輝度⁉

今回は、充電式のLEDライト(懐中電灯)を作ってみましたので紹介します!

youtu.be

 

完成品

少し前、スマホ用携帯モバイルバッテリーを景品で貰いました。

容量は2000mAh、USB充電(micro)、USB出力となっております。

モバイルバッテリー(赤色)

そこまで大きくなく、スリムな円筒形状です。

ちょうどいいサイズなので、今回はこのモバイルバッテリーを魔改造して、高輝度LEDライトを製作することにしました。

分解(シルバー色のやつを改造することに)

分解しますと、リチウムイオン電池(Li-ion電池)、 コンバータ(充電回路・USB出力回路・Li-ion電池保護回路)が入ってました。

Li-ion電池は定格電圧3.7V 2000mAhでした。

 

 

USB充電をするためには、降圧をしなければいけません。

(入力5V > Li-ion電池端子電圧)

逆に、USBへ出力する場合、昇圧を行わないといけません。

(Li-ion電池端子電圧 < 出力5V)

 

中に入っていたコンバータはこれら昇降圧を行う回路となっています。

また、Li-ion電池を充放電させる際、電池自体の上限電圧(過充電保護)、下限電圧(過放電保護)も同時に監視して、電池を安全に定格内で動作させるようにしています。

(※過電流・短絡保護機能もついています 恐らく、(*´з`))

構造図

どういう構造にするかは、もともとあるコンバータのスペースへ、LEDを制御する回路を無理やり追加し、LEDがある部分は増設するようなイメージです。

回路図

Li-ion電池の保護回路を作ったりせず、元々ついてるコンバータをそのまま使用することにしました。

そして、コンバータ出力後、自作のDC/DCコンバータ回路を通してLEDを定電流駆動する感じにしました。

(Li-ionコントローラICなど使うのが一番スマートですが、)

 

 

コンバータIC TD1410⇓

Microsoft Word - TD1410.doc (espec.ws)

TD1410を使ったDC/DCコンバータ

定電流制御させるための回路など

無理やり詰め込んでます

使ったLEDは⇓

表面実装 クールホワイトLED XREWHT-L1-0000-00C02[WG-Q4] (2個入): LED(発光ダイオード) 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

増設部分

完成!〔左:改造前 右:改造後〕

LEDは定電流駆動されるため、電池が減っても常に一定の明るさです。

 

明るさは2段階で切り替えることができます。

トグルスイッチをONにしますと、LEDが”Highモード”で点灯します。

その状態で、側面タクトスイッチを押しますと、”Lowモード”に切り替わります。

”Lowモード” ⇒ ”Highモード”へは戻れない仕様になってますのでw、

再度、トグルスイッチをOFF/ONすることで、”Highモード”になります。

 

ちなみに、

Highモード ⇒ 800mA  約180ルーメン

Lowモード ⇒ 465mA 約125ルーメン

と、なっています。

 

光束(lm : ルーメン)はそこそこの高さですが、レンズやリフレクタ不使用により、

広範囲を均一に照らす感じとなっています。

 

電流・効率 図

効率は ”Lowモード” で最大86.3[%]、 ”Highモード” で最大78.6[%]ほどとなりました。

 

DC/DCコンバータが二重に挟まっている回路構成ですので、

どうしても高効率は求めにくいです。

Li-ion電池端子電圧が低いほど、効率が低下している理由は、恐らく元々製品に入ってた既存のコンバータの性能だと思われます。

昇圧コンバータですので、どうしても昇圧比が大きくなればなるほど、効率が出しにくいため、このような測定結果になったと思われます。

 

温度変化(アルミボディー中間ぐらいの位置)

パワーLEDを使用していますので、かなり発熱しています。

本体がアルミボディーとなっていますので、放熱兼用として機能しています。

 

ただ、Li-ion電池の許容温度が厳しく、予想以上に温度上昇が大きかったため、

真夏にHighモードでの使用はやめた方がよさそうです。

(火を噴かれても困りますので)

 

 

 

《まとめ》

大きさの近い市販品(そんなに高くないやつ)と比べて、非常に明るく、小型で使いやすかったです。

広範囲を均一に照らしてくれますので、自然な感じでとても見やすかったです。

また、定電流制御により、明るさが持続するのも大きなメリットではないでしょうか。

デメリットとしては、発熱問題といった感じですかね。(*'▽')

 

ちなみに充電時間は100%で約5時間もかかりました…そんなもんですかね、

(70~80%ぐらいでしたら3時間程度?)

 

 

 

《おまけ》

その他 寸法

その他 説明

その他 SOA参考程度

 

 

 

YouTube チャンネル名:よしエレ研究所

URL : https://www.youtube.com/channel/UCo3LKDNnY0GGRDPGOEST_vg

Twitter アカウント:よしエレ研究所 @8jrMEWW6zlq3UAt

URL:https://mobile.twitter.com/8jrMEWW6zIq3UAt

【自作】ワイヤレス充電器 兼 小出力IH

 

ワイヤレス充電器を製作してみましたので、紹介したいと思います!⇩

youtu.be

 

 

実験中

送信コイル  約16回巻

14μH (10k-100kHz)

受信コイル 約19回巻

はんだ付け中

回路図(送信側)

送信側の回路ではMOSFET2個使った自己発振型のZVS回路がメインとなっています。

L1とC1の並列共振にて動作します。

共振動作中はL1又はC1の端子電圧はそこそこ大きいですので(最大値 約50V)、ある程度の定格電圧と耐電流のあるコンデンサを使用します。

 

このタイプのZVS回路では電源投入時後何かしらの”キッカケ”により自己発振を始めますので、共振のQ値がかなり低かったり、部品定数が極度に適切ではなかったりすると発振しないことがあります。その場合MOSFETに短絡電流が流れて故障に至ることがありますので、過剰な電源容量にしないこと、電源ラインの平滑コンデンサを大容量にしすぎないこと(また極度に低インピーダンス化させないこと)、MOSFETはある程度の電流容量のあるものを選定すると良いです。

 

 

ZVS回路の発振を止めたり動かしたりするには、少々強引ですが、Q3,Q4をON/OFFさせています。

その際、MOSFETがOFFになる時にサージが発生してしまう可能性があるので、CRスナバ回路にてサージを吸収しています。通常ZVS動作時はスナバ回路はリレー(Ry1,2)により繋がっておらず、出力ON/OFF時のみリレーが働き、スナバ回路がMOSFETと繋がります。(常にスナバ回路が繋がっていると、発振に影響し、消費電力も大きくなるためこのような動作をさせています)

また、Q3,Q4より必ず先にRy1,2が動作するようになっています。(Q3,Q4はトグル回路前段の遅延回路により)

 

今回はサージ吸収にCRスナバ回路を使用しましたが、

バリスタでサージ吸収させるほうが楽で簡単ですので、バリスタをオススメします。

その場合、MOSFETのドレイン-ソース間へ繋ぐだけで済みます。

(うp主はちょうどバリスタを持ち合わせていなかったため、めんどくさいことをしました…)

 

 

トグル回路ではタッチセンサーからの信号がC5により遅延動作となってからRy3が動きます。

Ry3がONになるたびに出力がON/OFFします。

その出力信号はQ3,Q4へ出力され、また電飾関係の回路へも出力させています。(トグル回路が出力がHIGHの時は緑色、LOWの時は青色へ光らせたりなど)

 

 

 

部品⇩

C1(フィルムコンデンサ):

メタライズドポリプロピレンフィルムコンデンサー 0.22μF630V ルビコンMPS: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

L2,L3(インダクタ):

トロイダルコイル 200μH9A: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

Ry1+Ry2(5Vリレー):

5Vリレー 表面実装用 2回路2接点 EE2-5NUX-L: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

Ry3(5Vリレー):

リードリレーSS1A05: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

三端子レギュレータ 5V:

三端子レギュレーター 5V1.5A NJM7805FA: 半導体(モジュール) 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

バリスタ 150V:

サージ吸収素子(バリスタ) 150V: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

スイッチング電源 12V(ワイヤレス充電器として使う時):

スイッチングACアダプター12V2A STD-12020U: 電源一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

スイッチング電源 15V(IHとして使う時):

スイッチングACアダプター15V3.34A: 電源一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

 

 

実際には違う型式のチップ部品を使ったりしましたが、似た部品なら問題なく動くと思います。

2SK2382以外で⇩

NchパワーMOSFET 200V15A TK15A20D: 半導体(モジュール) 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

(もう少し電流容量があるとより壊れにくいかと、、)

 

回路図(受信側)

 

受信側のDC/DCコンバータは降圧スイッチング回路となっています。

コンバータIC  TD1410 を使用。⇩

https://datasheetspdf.com/pdf/791303/Techcode/TD1410/1

 

 

チェナーダイオードMOSFETを使って強引な過電圧保護とさせています。

MOSFETに放熱器をつければ、なお安心…

(K4017は放熱器つけらる仕様ではないですが…)

 

 

今回のワイヤレス充電器では電磁誘導方式による電力伝達です。

受信コイルの共振などは利用してませんので、あまり伝送距離は伸ばせません。

また、受信側より送信側へフィードバック制御など全くさせてませんので、受信コイルが送信コイルに近づくほど、受信コイルの起電力が大きくなってしまいますので、コンバータの定格電圧に注意が必要です。

製作したものでは、受信コイルと送信コイルとの距離は8mm~12mm程度あたりが良い感じでした。(受信コイルの起電力が高すぎると、過電圧保護が働き、過電圧保護回路のFETが熱々になり壊れる恐れがあります。熱い場合は受信コイルを遠ざけて下さいw)

 

TD1410コンバータICではなく、もっと高い入力電圧まで入力可能なコンバータICを使用すれば、もっと使い勝手が良さそうです。

あとは、受信コイルの巻数を調整することで、起電力は変わりますので、ちょうどよい感じにして下さい。

 

USB出力電圧は5Vです。回路が故障したときの安全対策として、コンバータ出力側に5.1Vや5.6Vのチェナーダイオードをいれても良いと思います。

 

送信側 動作中 コイル駆動波形

ZVS 約100kHz弱ほどで発振

 

 

 

《その他》

 音・電飾関係などの回路についての紹介⇩

 

・【電子回路】ホタル点滅回路 《積分回路 (Integral circuit)》じんわり点滅  

youtu.be

・【電子回路】ON・OFFする時に音が鳴る回路《微分回路(differentiator circuit)》

youtu.be

・タッチセンサ自作!?静電容量式!コンパレータ使用!

youtu.be

 

トルグ回路については、下記URLの動画を参考にさせて頂きました。⇩

https://youtu.be/pIfuJFXXESQ

 

 

 

 

YouTube チャンネル名:よしエレ研究所

URL : https://www.youtube.com/channel/UCo3LKDNnY0GGRDPGOEST_vg

Twitter アカウント:よしエレ研究所 @8jrMEWW6zlq3UAt

URL:https://mobile.twitter.com/8jrMEWW6zIq3UAt

【自作】[おまけ編]Arduinoでディジタルカウンターを作る!

【自作】Arduinoでディジタルカウンターを作る! - よしエレ研究所のブログ (hatenablog.com)

以前、カウンターを自作しましたが、少しだけアレンジを加えてみたので紹介します。

 

” オープニングをつける⁉ ” ⇩

電源を入れた時、セグメントの表示にアレンジを加えてみました。

少しアレンジがあるだけで、カッコイイですね!

 

↓プログラム_____________________________

int outA = 3;            //セグメントA
int outB = 2;            //セグメントB
int outC = 8;            //セグメントC
int outD = 7;            //セグメントD
int outE = 6;            //セグメントE
int outF = 4;            //セグメントF
int outG = 5;            //セグメントG
int outDP = 9;           //セグメントDP(小数点用の点)
int outc1 = 10;          //セグメント(1桁目)COM
int outc2 = 11;          //セグメント(2桁目)COM
int outc3 = 12;          //セグメント(3桁目)COM

int T = 40;                         //スイッチング周期(μs)
int Dty = 40;                       //デューティ比(セグメント明るさ調整 0~100[%])
int N = 0;                          //繰り返し回数N初期値0
int M = 10;                         //繰り返し回数M設定値
int O = 0;                          //(仮)
int Ton = ( (T*Dty)/100 );            //ターンオン時間
int Toff = ( (T*(100-Dty))/100 );     //ターンオフ時間
int Tout = (T*10);                  //変化しない時間(ms)
int t = 0;                          //カウント周期 初期値0
int L = 0;                          //タイヤ外周距離(cm)
int X = 0;                          //センサー信号カウント回数初期値0
int l = 000;                        //総合走行距離 初期値0
int A = 0;                          //【入力しない】計算に使う 
int B = 0;                          //【入力しない】計算に使う
int C = 0;                          //【入力しない】計算に使う
int D = 0;                          //【入力しない】計算に使う
int E = 0;                          //【入力しない】(オープニング用)初回カウント
int F = 100;                        //(オープニング用)---移行時間
int G = 1500;                       //(オープニング用)全点灯時間
int H = 500;                        //(オープニング用)-.-.-.点滅周期
int DP2 = LOW;
int DP3 = LOW;

 

void setup() {  
  pinMode(A0, INPUT);      //センサー信号
  pinMode(A1, INPUT);      //明るさ信号(2.2kΩ)
  pinMode(A2, INPUT);      //明るさ信号(2.2kΩ)
  pinMode(A3, INPUT_PULLUP);      //タクトスイッチ左(表示リセット)
  pinMode(A4, INPUT_PULLUP);      //タクトスイッチ右(教示切替)
  pinMode(outA, OUTPUT);
  pinMode(outB, OUTPUT);
  pinMode(outC, OUTPUT);
  pinMode(outD, OUTPUT);
  pinMode(outE, OUTPUT);
  pinMode(outF, OUTPUT);
  pinMode(outG, OUTPUT);
  pinMode(outDP, OUTPUT);
  pinMode(outc1, OUTPUT);
  pinMode(outc2, OUTPUT);
  pinMode(outc3, OUTPUT);
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
}

void loop() {  

  if(E<1){delay(1000);
          digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(H);     //無
          digitalWrite(outc3,LOW);digitalWrite(outc2,LOW);digitalWrite(outc1,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);delay(H); //-.-.-.
          digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(H);     //無
          digitalWrite(outc3,LOW);digitalWrite(outc2,LOW);digitalWrite(outc1,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);delay(H); //-.-.-. 
          digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);delay(H);     //無    
    
          digitalWrite(outF,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F);     //3F
          digitalWrite(outA,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F);digitalWrite(outF,LOW); //3A
          digitalWrite(outA,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F);     //2A
          digitalWrite(outA,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);delay(F);     //1A
          digitalWrite(outB,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outA,LOW);delay(F); //1B
          digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outB,LOW);delay(F); //1G
          digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F);     //2G
          digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F);     //3G
          digitalWrite(outE,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outG,LOW);delay(F); //3E
          digitalWrite(outD,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outE,LOW);delay(F); //3D
          digitalWrite(outD,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F);     //2D
          digitalWrite(outD,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);delay(F);//1D
          digitalWrite(outC,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outD,LOW);delay(F); //1C
          digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outC,LOW);delay(F); //1G
          digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F);     //2G
          digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F);     //3G
          digitalWrite(outF,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outG,LOW);delay(F); //3F
          digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outF,LOW);delay(F); //3G
          digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F);     //2G
          digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,LOW);digitalWrite(outc1,LOW);delay(F);     //すべてG
          digitalWrite(outF,HIGH);digitalWrite(outE,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);delay(F);     //縦も                    
          digitalWrite(outA,HIGH);digitalWrite(outD,HIGH);delay(F);                               //8
          digitalWrite(outDP,HIGH);delay(G);                                                      //DPも
          E=E+1;}


  digitalWrite(outA,LOW);digitalWrite(outB,LOW);digitalWrite(outC,LOW);digitalWrite(outD,LOW);
  digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
  digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);  //無      
  B = 0;
  C = 0;
  while(digitalRead(A0)==HIGH){D=D+1;C=1;break;}
  if(D<2){l=l+C;}
  if(digitalRead(A0)==LOW){D=0;}
  if(digitalRead(A3)==LOW){l=0;}
  

  A = l;
  B = 0;
  C = 0;

  if(A>=900){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-900;B = 2;}               //3桁目 9             
  if(A>=800){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-800;B = 2;}               //3桁目 8
  if(A>=700){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-700;B = 2;}               //3桁目 7
  if(A>=600){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-600;B = 2;}               //3桁目 6
  if(A>=500){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-500;B = 2;}               //3桁目 5
  if(A>=400){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-400;B = 2;}               //3桁目 4
  if(A>=300){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-300;B = 2;}               //3桁目 3
  if(A>=200){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
             digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-200;B = 2;}               //3桁目 2
  if(A>=100){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
             digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-100;B = 2;}               //3桁目 1           
  if(B>1){C = 1;}
  if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);}                                //3桁目 0
         
  while(N < M){N = N+1; digitalWrite(outc3,LOW);delayMicroseconds(Ton);digitalWrite(outc3,HIGH);delayMicroseconds(Toff);}    //明るさ調整
  N = 0;
  B = 0; 
  C = 0;
  digitalWrite(outA, LOW);
  digitalWrite(outB, LOW); 
  digitalWrite(outC, LOW); 
  digitalWrite(outD, LOW); 
  digitalWrite(outE, LOW); 
  digitalWrite(outF, LOW); 
  digitalWrite(outG, LOW); 
  digitalWrite(outc1, HIGH);
  digitalWrite(outc2, HIGH);
  digitalWrite(outc3, HIGH);
  

 


  if(A>=90){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-90;B = 2;}               //2桁目 9             
  if(A>=80){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-80;B = 2;}               //2桁目 8
  if(A>=70){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-70;B = 2;}               //2桁目 7
  if(A>=60){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-60;B = 2;}               //2桁目 6
  if(A>=50){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-50;B = 2;}               //2桁目 5
  if(A>=40){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-40;B = 2;}               //2桁目 4
  if(A>=30){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-30;B = 2;}               //2桁目 3
  if(A>=20){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-20;B = 2;}               //2桁目 2
  if(A>=10){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
            digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-10;B = 2;}               //2桁目 1       
  if(B>1){C = 1;}
  if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
           digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);}                               //2桁目 0
                               
  while(N < M){N = N+1; digitalWrite(outc2,LOW);delayMicroseconds(Ton);digitalWrite(outc2,HIGH);delayMicroseconds(Toff);}    //明るさ調整
  N = 0;
  B = 0; 
  C = 0;
  digitalWrite(outA, LOW);
  digitalWrite(outB, LOW); 
  digitalWrite(outC, LOW); 
  digitalWrite(outD, LOW); 
  digitalWrite(outE, LOW); 
  digitalWrite(outF, LOW); 
  digitalWrite(outG, LOW); 
  digitalWrite(outc1, HIGH);
  digitalWrite(outc2, HIGH);
  digitalWrite(outc3, HIGH);

 

 

  if(A>=9){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-9;B = 2;}                        //1桁目 9             
  if(A>=8){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-8;B = 2;}                        //1桁目 8
  if(A>=7){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-7;B = 2;}                        //1桁目 7
  if(A>=6){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-6;B = 2;}                        //1桁目 6
  if(A>=5){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-5;B = 2;}                        //1桁目 5
  if(A>=4){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-4;B = 2;}                        //1桁目 4
  if(A>=3){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-3;B = 2;}                        //1桁目 3
  if(A>=2){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-2;B = 2;}                        //1桁目 2
  if(A>=1){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
           digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-1;B = 2;}                        //1桁目 1
  if(B>1){C = 1;}
  if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);}                                 //1桁目 0           
  
  while(N < M){N = N+1; digitalWrite(outc1,LOW);delayMicroseconds(Ton);digitalWrite(outc1,HIGH);delayMicroseconds(Toff);}    //明るさ調整
  N = 0;
  

  if(l>999){l=0;}

}

___________________________________

※一部必要のない文もあります。

 

 

 

YouTube チャンネル名:よしエレ研究所

URL : https://www.youtube.com/channel/UCo3LKDNnY0GGRDPGOEST_vg

Twitter アカウント:よしエレ研究所 @8jrMEWW6zlq3UAt

URL:https://mobile.twitter.com/8jrMEWW6zIq3UAt

【自作】Arduinoでディジタルカウンターを作る!

 

今回は、過去につくった作品紹介です。(覚えている範囲内で…)

何か物体が通過した時にカウントする装置です。

youtube.com

 

 

大まかな構成としては、赤外線センサーを使って物体を検出し、その信号から

Arduinoがカウント、セグメントへの表示をさせています。

7セグメント (奥にあるのはarduino micro)

 

《センサー部》

赤外線LED・赤外線リモコン受信モジュールを使って、物体を検出します。

今回は反射タイプにしましたので、赤外線を受信したら、信号を出力するといった感じにします。

 

しかし、そのまま赤外線LEDを光らせても反応しません。

高速で点滅させた赤外線でないと受信モジュールは反応してくれません。

受信モジュールは製品によって、周波数が決まっています。

大体 38[kHz]付近が多いいです。

使ったやつも、たしか 38[kHz]ぐらいですので、赤外線LEDも 38[kHz]で点滅させます。

点滅方法は、オペアンプを使った発振回路です。

回路図

発振周波数については、回路図中の ”R”と”C” の定数によって変化します。

38[kHZ]ぴったしになる部品の組み合わせはなかなか難しいですので、

可変抵抗1[kΩ]で調整します。

 

ちなみに、発振周波数 f[Hz] は

  f = 1/(2RC×In2)

    ≒ 1/(2RC×0.693)

    = 1/(1.386RC)

によって求めることができます。

なので、C=0.01[μF]のとき、R=1.9[kΩ]ぐらいで38[kHz]になる計算です。

 

ただし、実際は部品の誤差、回路図中にはない要素があるため、計算どうりにぴったしにはならないと思います。(高周波になればなるほど影響が大きい)

あと、オペアンプ(又はコンパレータ)もある程度高速なタイプを使わないと、動作速度が間に合いませんので注意が必要です。(今回は NJM 2742 使用)

 

 

発振動作についてなど⇓

オペアンプを使った矩形波発振回路 | meyon's STUDY

 

 

赤外線センサーには、赤外線リモコン受信モジュールを使用。

赤外線リモコン受信モジュール GP1UXC41QS: センサ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

赤外線を受信しますと、出力端子Voutは High→Low となります。

出力インピーダンスは低くないですので、電力増幅回路を入れています。

(なくても出来ないことはない)

その際、信号を反転させており、受信すると、信号を出力するようにしています。

(赤外線を受信するとArduino入力端子がHighに)

また、誤受信を防ぐために、受信モジュール出力側に、0.1[μF]のコンデンサをいれています。

製作途中

 

《処理部》

センサー部で得た信号はマイコンによって処理され、セグメントへ出力します。

今回使用したマイコンArduino micro” です。

 

↓プログラム______________________________

unsigned long t1 = 0;
unsigned long t2 = 0;

 

int outA = 3;            //セグメントA
int outB = 2;            //セグメントB
int outC = 8;            //セグメントC
int outD = 7;            //セグメントD
int outE = 6;            //セグメントE
int outF = 4;            //セグメントF
int outG = 5;            //セグメントG
int outDP = 9;           //セグメントDP(小数点用の点)
int outc1 = 10;          //セグメント(1桁目)COM
int outc2 = 11;          //セグメント(2桁目)COM
int outc3 = 12;          //セグメント(3桁目)COM

int T = 40;                         //スイッチング周期(μs)
int Dty = 40;                       //デューティ比(セグメント明るさ調整 0~100[%])
int N = 0;                          //繰り返し回数N初期値0
int M = 10;                         //繰り返し回数M設定値
int O = 0;                          //(仮)
int Ton = ( (T*Dty)/100 );            //ターンオン時間
int Toff = ( (T*(100-Dty))/100 );     //ターンオフ時間
int Tout = (T*10);                  //変化しない時間(ms)
int t = 0;                          //カウント周期 初期値0
int L = 0;                          //タイヤ外周距離(cm)
int X = 0;                          //センサー信号カウント回数初期値0
int l = 000;                        //総合走行距離 初期値0
int A = 0;                          //【入力しない】計算に使う 
int B = 0;                          //【入力しない】計算に使う
int C = 0;                          //【入力しない】計算に使う
int D = 0;                          //【入力しない】計算に使う
int DP2 = LOW;
int DP3 = LOW;

 

void setup() {  
  pinMode(A0, INPUT);      //センサー信号
  pinMode(A1, INPUT);      //明るさ信号(2.2kΩ)
  pinMode(A2, INPUT);      //明るさ信号(2.2kΩ)
  pinMode(A3, INPUT_PULLUP);      //タクトスイッチ左(表示リセット)
  pinMode(A4, INPUT_PULLUP);      //タクトスイッチ右(教示切替)
  pinMode(outA, OUTPUT);
  pinMode(outB, OUTPUT);
  pinMode(outC, OUTPUT);
  pinMode(outD, OUTPUT);
  pinMode(outE, OUTPUT);
  pinMode(outF, OUTPUT);
  pinMode(outG, OUTPUT);
  pinMode(outDP, OUTPUT);
  pinMode(outc1, OUTPUT);
  pinMode(outc2, OUTPUT);
  pinMode(outc3, OUTPUT);
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
}

void loop() {  

  B = 0;
  C = 0;
  while(digitalRead(A0)==HIGH){D=D+1;C=1;break;}
  if(D<2){l=l+C;}
  if(digitalRead(A0)==LOW){D=0;}
  if(digitalRead(A3)==LOW){l=0;}
  

  A = l;
  B = 0;
  C = 0;

  if(A>=900){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-900;B = 2;}               //3桁目 9             
  if(A>=800){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-800;B = 2;}               //3桁目 8
  if(A>=700){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-700;B = 2;}               //3桁目 7
  if(A>=600){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-600;B = 2;}               //3桁目 6
  if(A>=500){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-500;B = 2;}               //3桁目 5
  if(A>=400){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
             digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-400;B = 2;}               //3桁目 4
  if(A>=300){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
             digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-300;B = 2;}               //3桁目 3
  if(A>=200){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
             digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-200;B = 2;}               //3桁目 2
  if(A>=100){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
             digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
             digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-100;B = 2;}               //3桁目 1           
  if(B>1){C = 1;}
  if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);}                                //3桁目 0
         
  while(N < M){N = N+1; digitalWrite(outc3,LOW);delayMicroseconds(Ton);digitalWrite(outc3,HIGH);delayMicroseconds(Toff);}    //明るさ調整
  N = 0;
  B = 0; 
  C = 0;
  digitalWrite(outA, LOW);
  digitalWrite(outB, LOW); 
  digitalWrite(outC, LOW); 
  digitalWrite(outD, LOW); 
  digitalWrite(outE, LOW); 
  digitalWrite(outF, LOW); 
  digitalWrite(outG, LOW); 
  digitalWrite(outc1, HIGH);
  digitalWrite(outc2, HIGH);
  digitalWrite(outc3, HIGH);
  

 


  if(A>=90){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-90;B = 2;}               //2桁目 9             
  if(A>=80){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-80;B = 2;}               //2桁目 8
  if(A>=70){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-70;B = 2;}               //2桁目 7
  if(A>=60){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-60;B = 2;}               //2桁目 6
  if(A>=50){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-50;B = 2;}               //2桁目 5
  if(A>=40){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
            digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-40;B = 2;}               //2桁目 4
  if(A>=30){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-30;B = 2;}               //2桁目 3
  if(A>=20){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-20;B = 2;}               //2桁目 2
  if(A>=10){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
            digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-10;B = 2;}               //2桁目 1       
  if(B>1){C = 1;}
  if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
           digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);}                               //2桁目 0
                               
  while(N < M){N = N+1; digitalWrite(outc2,LOW);delayMicroseconds(Ton);digitalWrite(outc2,HIGH);delayMicroseconds(Toff);}    //明るさ調整
  N = 0;
  B = 0; 
  C = 0;
  digitalWrite(outA, LOW);
  digitalWrite(outB, LOW); 
  digitalWrite(outC, LOW); 
  digitalWrite(outD, LOW); 
  digitalWrite(outE, LOW); 
  digitalWrite(outF, LOW); 
  digitalWrite(outG, LOW); 
  digitalWrite(outc1, HIGH);
  digitalWrite(outc2, HIGH);
  digitalWrite(outc3, HIGH);

 

 

  if(A>=9){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-9;B = 2;}                        //1桁目 9             
  if(A>=8){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-8;B = 2;}                        //1桁目 8
  if(A>=7){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-7;B = 2;}                        //1桁目 7
  if(A>=6){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-6;B = 2;}                        //1桁目 6
  if(A>=5){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-5;B = 2;}                        //1桁目 5
  if(A>=4){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
           digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-4;B = 2;}                        //1桁目 4
  if(A>=3){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
           digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-3;B = 2;}                        //1桁目 3
  if(A>=2){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
           digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-2;B = 2;}                        //1桁目 2
  if(A>=1){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
           digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
           digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-1;B = 2;}                        //1桁目 1
  if(B>1){C = 1;}
  if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
            digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
            digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);}                                 //1桁目 0           
  
  while(N < M){N = N+1; digitalWrite(outc1,LOW);delayMicroseconds(Ton);digitalWrite(outc1,HIGH);delayMicroseconds(Toff);}    //明るさ調整
  N = 0;
  

  if(l>999){l=0;}

}

__________________________________

私はマイコン初心者なので、非常に無駄の多いいプログラムだと思いますが、

お気になさらず…:(;゙゚''ω゚''):

 

あと、元々はカウンターではなく、速度計を作る予定でしたので、いろいろ要らない文字列がありますのでそれは無視してください。

(動作には支障ありません。)

 

 

大まかにやっていることを言いますと、”A”という文字にカウント数を記憶させ、

”A”がいま、なんの数字なのか、0~9まで三桁分判断させ、

セグメントへの出力端子をそれぞれの数字になるように "High,Low" 組み合わせています。

セグメント(カソードコモン) 詳細

使用したセグメントは”カソードコモン”ですので、LEDのカソード側が共通になっています。

 

駆動方式はダイナミック駆動方式です。

三桁すべて同時に表示制御させると、マイコンの端子が足りませんので、

一桁目を制御(一桁目だけCOMがLow , 二,三桁目はHigh)→

二桁目を制御(二桁目だけCOMがLow , 一,三桁目はHigh)→

三桁目を制御(三桁目だけCOMがLow , 一,二桁目はHigh)…

っといった感じに制御させます。

 

また、セグメントの明るさを調整できるよう”PWM制御”もさせています。

”Dty”の数値を変えることで変更可能です。

(※大幅に明るさ変更するためには、他の数値を変更すれば出来ますが、表示がチラついてしまいますので、注意が必要です。)

 

入力端子の設定で、"表示リセット"の入力端子はプルアップさせていますので、入力端子とGND間にスイッチを入れるだけででOKです。

 

 

【まとめ】

0~999までカウント可能な装置を作ってみました。

(※999の次は0に戻ります。)

マイコンの設定次第で、回路ベースを変えずに、いろんな表示に変えられ、また複雑な動作も出来ちゃうのがマイコンの便利なところだと思います。

 

 

 

 

では、今回は、この辺で、

おしまい

 

 

 

おまけ⤵

ys-electronics-institute.hatenablog.com

 

 

 

YouTube チャンネル名:よしエレ研究所

URL : https://www.youtube.com/channel/UCo3LKDNnY0GGRDPGOEST_vg

Twitter アカウント:よしエレ研究所 @8jrMEWW6zlq3UAt

URL:https://mobile.twitter.com/8jrMEWW6zIq3UAt

 

【自作】スマホ用冷却ファン⁉ 熱いスマホを冷やす!

 

ほんと、ここ最近、熱いです.....

近年の夏は尋常なほど熱いと思いませんか?

f:id:YS-electronics-institute:20210711165738j:plain

7月上旬なのに、部屋の温度が31℃...

 

 

今回は、そんな熱い夏対策として、スマホ用冷却ファンを作ってみました。 

 

 

 

www.youtube.com

 

 

 

事の発端は、ゲームをプレイすると、

スマホがかなり熱く、画面がガクついたり、最悪アプリが動作しなくなったり、したことです。

そのときのスマホの温度は40℃を超え、場合によっては、 45℃を超えていました⁉、、

f:id:YS-electronics-institute:20210711165530j:plain

スマホの温度が40℃超え...

さすがに、この状況では快適にはスマホゲームをできないので、

スマホを冷却する冷却ファン(装置)を作ることにしました。

 

 

まず、適当に、家に転がっているファンから、ちょうどいい大きさのがあったのでそれをチョイス、

f:id:YS-electronics-institute:20210711170729j:plain

ちょうどいいファンをお探し

電源はUSB電源を採用したいが、ファンの定格電圧が20Vなので、昇圧回路が必要になります。(USB電源は5Vなので)

なので、昇圧回路を自作。

f:id:YS-electronics-institute:20210711185453j:plain

f:id:YS-electronics-institute:20210711185502p:plain

昇圧回路

回路図はこんなかんじ。

部品の定数はたしか、こうだったと思う

(間違ってたらごめんなさい...(-_-;),,,,,)

 

 

回路は、NE555を使ったベターな回路です。

50kΩの可変抵抗器でデューティ比を調整、20kΩで出力電圧の調整を行い、出力電圧は約12V~20Vまで可変できます。

 

今回、駆動するものがファンなので、そこまでシビアに出力電圧の安定精度は求めませんでした。なので、チェナーダイードやコンパレータなどを使用せず、帰還回路にあるMOSFETのゲートしきい値電圧Vth(FETがONになり始める電圧)によって、出力電圧を大雑把に定電圧特性にしています。

なので、FETの種類、個体差、温度によって、出力電圧は変わってしまうため、注意が必要です。

 

 

 次に、プラスチック製のパーツを製作。

f:id:YS-electronics-institute:20210711192846j:plain

電熱線でカット

PET樹脂板を電熱線でカットしたり、ハンダごてで熱して、曲げたり、、

f:id:YS-electronics-institute:20210711193250j:plain

ファンを加工

なんやかんや、いろいろ加工して、パーツが完成。

(PET樹脂板が残り少なくて、廃材から使って、穴が空いてるところは隠したりと...)



あとは、組み立て、

f:id:YS-electronics-institute:20210711194259j:plain

f:id:YS-electronics-institute:20210711194242j:plain

そして、完成!

f:id:YS-electronics-institute:20210711194915j:plain

実際にスマホにとりつけ

冷却ファンの固定には、100均で売ってあった三脚のスマホホルダーを加工して使用しました。

電飾も施し、ファンの周りが青く光るようにしてあります。

f:id:YS-electronics-institute:20210711195327j:plain

部屋を暗くして...  

結構、かっこいいかんじ...⁉ (*^-^*)

 

やっぱり、青っていいですね、

 

 

 

実際に使ってみると、悪くはないです、

YouTubeでは検証動画まで紹介していますが、一応冷却効果はあります。

ただ、正直もっと冷えるかと思っていたので、うーん、て、思うところもありますが、部屋の温度が高いこと、ファンの風量がそこまでないこと、を考えると納得です。

 

でも、ゲームをする際は、ファン有りと無しでは、全然違うので、ファン有りの恩恵はとても大きいと思います。

 

 

 

 

では、今回の紹介はこのへんで、

おしまい

 

 

 

 

 

このブログの紹介で気になることがありましたら、質問して下さればと思います。(答えられる範囲でお答えします)

また、YouTubeも一応動画上げてますので、見て下さると嬉しいです。

チャンネル名:よしエレ研究所

URL:https://www.youtube.com/channel/UCo3LKDNnY0GGRDPGOEST_vg