myaonのアイコン画像
myaon 2021年02月28日作成 (2021年12月23日更新)
製作品 製作品 閲覧数 644
myaon 2021年02月28日作成 (2021年12月23日更新) 製作品 製作品 閲覧数 644

2進数アドベントケーキ🍰

2進数アドベントケーキ🍰

エンジニア界隈ではクリスマスにアドベントカレンダーを通してブログ記事を公開する文化が浸透してきていますね。このアドベントカレンダーの文化をよりインタラクティブに体感するためにマイコンと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のアイコン画像
山口の高専専攻科 3Dプリント/VR/IoT トビタテ12期 卓球/ロボコン ひきこもり衆∞ 観測者/Vket5/cluster住民 ひきこもりで生きていくためのものつくる
ログインしてコメントを投稿する