LEDチカってジングルベル鳴らすクリスマス基板
はじめに
普段は仕事で回路設計、基板設計をやってます。
今回は、自分のために自分で考えて基板作ってみたいと思い、2020年の年末にクリスマス飾りとして使えそうな基板を自由に作ってみました。
回路設計
kicad使って回路描きました。
回路構成はこんな感じ。
- マイコン:Seeeduino Xiao
- LED:Φ3砲弾型LED
- ブザー:村田製作所 PKLCS1212E2000-R1
- 電源:ボタン電池 CR2032
最初、ボタン電池1個だけでやってみたら音が小さくて、2個直列にしてみました。ボタン電池は公称3.0Vで2個直列でもマイコンは問題ないかもしれませんが、壊したらイヤなのでマイコンは3V、ブザーとLEDは6Vで駆動してます。ブザーの回路はこちらを参考にしました。
基板設計
kicadで基板も描きました。両面基板です。
マジメにやるなら全部品のフットプリントを準備すべきだけど、ボタン電池はパッドだけ置いてハショリました。
Seeeduino Xiaoのライブラリはこちらからダウンロードできます。
すべての配線はA面で通していて、B面はシルクとレジストで飾りを描きました。(ペイントで描いてビットマップで取り込み。)
捨て基板がスタンドになるように描いてみましたが、イマイチでした。
基板発注・部品発注
基板はPCB GOGOに発注してみました。今回、どうしてもB面のレジスト無い部分(星とか鈴のマーク)を金色にしたくて、無電解金フラッシュ(ENIG)にしたら、お値段爆上げでした。。
部品はみなさんおなじみのネット通販で買いました。
ソフト設計
Arduino IDEで書きました。
ジングルベルのメロディーを鳴らしつつ、タイマーでLEDをトグルして光らせてます。
ジングルベルメロディー
#include <TimerTC3.h>
int LED1 = 8;
int LED2 = 3;
int LED3 = 6;
int LED4 = 5;
int LED5 = 10;
int Bz = 9;
int Sw = 3;
int SwState = 0;
bool LEDStateA = 1;
bool LEDStateB = 0;
void LEDonoff() {
LEDStateA =! LEDStateA;
LEDStateB =! LEDStateB;
digitalWrite(LED1, LEDStateA);
digitalWrite(LED2, LEDStateB);
digitalWrite(LED3, LEDStateA);
digitalWrite(LED4, LEDStateB);
digitalWrite(LED5, LEDStateA);
}
void setup()
{
TimerTc3.initialize(500000); //500msec
TimerTc3.attachInterrupt(LEDonoff);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(Bz, OUTPUT);
pinMode(Sw, INPUT_PULLUP);
}
void loop()
{
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(500);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(500);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 784, 500); //ソ
delay(250);
tone (Bz, 523, 500); //ド
delay(250);
tone (Bz, 587, 500); //レ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
delay(750);
tone (Bz, 698, 500); //ファ
delay(250);
tone (Bz, 698, 500); //ファ
delay(250);
tone (Bz, 698, 500); //ファ
delay(500);
tone (Bz, 698, 500); //ファ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(500);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 587, 500); //レ
delay(250);
tone (Bz, 587, 500); //レ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 587, 500); //レ
delay(500);
tone (Bz, 784, 500); //ソ
delay(250);
delay(250);
//2回目
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(500);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(500);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 784, 500); //ソ
delay(250);
tone (Bz, 523, 500); //ド
delay(250);
tone (Bz, 587, 500); //レ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
delay(750);
tone (Bz, 698, 500); //ファ
delay(250);
tone (Bz, 698, 500); //ファ
delay(250);
tone (Bz, 698, 500); //ファ
delay(500);
tone (Bz, 698, 500); //ファ
delay(250);
tone (Bz, 659, 500); //ミ
delay(250);
tone (Bz, 659, 500); //ミ
delay(500);
tone (Bz, 784, 500); //ソ
delay(250);
tone (Bz, 784, 500); //ソ
delay(250);
tone (Bz, 698, 500); //ファ
delay(250);
tone (Bz, 587, 500); //レ
delay(250);
tone (Bz, 523, 500); //ド
delay(250);
delay(750);
delay(1000);
}
基板実装
基板に各部品をはんだ付けして完成です。
LEDをA面に付けるのではなく、B面(星とか雪のマークの面)に付けてます。
最後に
今回は初めて自分のために基板を作ってみました。最初は「簡単に作れるだろ」くらいに思ってましたが、苦労は多くて(ブザー音小さい、シルクで文字をどう入れる、Xiaoの割り込みタイマー)、なんでも自分の手でやってみることが必要だなと思いました。自由に設計できて楽しかったです。
投稿者の人気記事
-
suzan_works
さんが
2021/02/28
に
編集
をしました。
(メッセージ: 初版)
-
suzan_works
さんが
2021/03/01
に
編集
をしました。
-
suzan_works
さんが
2021/03/01
に
編集
をしました。
ログインしてコメントを投稿する