エンジニア界隈ではクリスマスにアドベントカレンダーを通してブログ記事を公開する文化が浸透してきていますね。このアドベントカレンダーの文化をよりインタラクティブに体感するためにマイコンとLEDを用いた簡単なアドベントケーキを作りました。
完成品動画
https://youtu.be/rsNclRpT058
ハード設計はFusion360で行い、もともと単なるArduino Nanoの保護ケースとして設計していたものに、クリーム的な波とLED用の穴を加えてケーキらしくしました。
設計データ:https://a360.co/2rfe0O2
中身はこんな感じでArduinoUnoと小さめのブレッドボード、それに等間隔にLEDを指しています。
回路的には結構怒られそうですが抵抗なしで各ピンをON/OFF切り替えするだけで、このサイズのシンプルな構造を実現しました。とりあえず燃え尽きることなく動いてたのでヨシ!
プログラムはAruduino IDEで以下の通り。
int day=17; // 残り日数
int value[5];
int anode[]={11,8,5,2,0};
int casode[]={1,4,7,10};
void setup() {
//Serial.begin(9600);
pinMode(0, OUTPUT); //2^0
pinMode(1, OUTPUT); //GND
pinMode(2, OUTPUT); //2^1
pinMode(4, OUTPUT); //GND
pinMode(5, OUTPUT); //2^2
pinMode(7, OUTPUT); //GND
pinMode(8, OUTPUT); //2^3
pinMode(10, OUTPUT); //GND
pinMode(11, OUTPUT); //2^4
for(int p=0;p<4;p++){
digitalWrite(casode[p], LOW);
}
}
/* 10進数-->2進数変換関数 */
void ChangeFunc(
unsigned long int DecimalNumber, /* 10進数[in] */
char* BinaryString) /* 2進数文字列化[out] */
{
int i,k;
for(i = 0, k = 4; k >= 0; i++, k--)
{
if((DecimalNumber >> i) & 1)BinaryString[k] = '1';
else BinaryString[k] = '0';
}
BinaryString[i] = '\0';
}
void loop() {
int i;
char BinaryString[5]; /* 2進数文字列化 */
ChangeFunc(
day, /* 10進数[in] */
BinaryString); /* 2進数文字列化[out] */
/* シリアルポートに文字列を出力 */
/*Serial.print(day, DEC);
Serial.print("\n");
Serial.print(BinaryString);
Serial.print("\n");
*/
for(int i=0;i<5;i++){
if(BinaryString[i]=='1'){
digitalWrite(anode[i], HIGH);
}
else digitalWrite(anode[i], LOW);
}
delay(86400000UL);
day = day-1;
while(day<=0){
for(int s=0;s<5;s++){
digitalWrite(anode[s], HIGH);
}
delay(1000);
for(int n=0;n<5;n++){
digitalWrite(anode[n], LOW);
}
delay(1000);
}
}
2進数⇒10進数の変換はこちらのサイトのプログラムを参考にさせて頂きました。
シリアルポートを確認用に使っていましたがRX/TXのピンを出力に使っているため完成時にはコメントアウトしています。
delay(86400000UL); //1日分のdelay
が無事に動いてくれてよかったです。
投稿者の人気記事
-
myaon
さんが
2021/02/28
に
編集
をしました。
(メッセージ: 初版)
-
myaon
さんが
2021/12/23
に
編集
をしました。
ログインしてコメントを投稿する