kanno.so

takawo杯duino



文化庁メディア芸術祭の発表があった翌日は、夏にtwitter上で開催された
#takawo杯IT駄洒落コンテストの受賞発表パーティでした。

僕は上位入賞者用の賞品、「takawo杯duino」を制作しました。takawo杯duinoはarduino互換の杯の形を模した金色のtkwロゴ入り賞品用イルミネーションボードです。制作には@bellyさんのサポートを頂きました、ありがとうございます。

arduinoIDEから書きこむ際はFT232RL搭載小型USB-シリアルアダプタ 3.3Vを用いて行います。boardはLilypad Arduino w/ ATmega328を選択します。
杯duinoには6つのLEDがついています。これらはPWMピンの3,5,6,9,10,11につながっています。また杯の左側にVDD, GND, D2, A4, A5のピンが開けてありますので簡単なセンサを接続することも可能です。授与の際は以下のスケッチをアップロードしました。

 
int ledPin1 = 5;
int ledPin2 = 6;
int ledPin3 = 9;
int ledPin4 = 10;
int ledPin5 = 11;
int ledPin6 = 3;

int fade1 = 0;
int fade2 = 0;
int fade3 = 0;
int fade4 = 0;
int fade5 = 0;
int fade6 = 0;

int finalFade1 = 0;
int finalFade2 = 0;
int finalFade3 = 0;

int baseTime = 200;

void setup()  {
} 

void loop()  { 

  for(int spd = 3000; spd > 100; spd -=150){
    led(spd);
  }

  for(int i=30; i>=10; i--){
    led(i*5+30);
  }

  for(int i=20; i>=0; i--){
    led(30);
  }

  for(int i=0; i <= 912; i++){

    if(i>0 && i<255) finalFade1 = i;
    else if (i>=255 && i<511) finalFade1 = 511-i;
    else finalFade1 = 0;
    analogWrite(ledPin3,finalFade1);
    analogWrite(ledPin4,finalFade1);

    if(i>200 && i<455) finalFade2 = i -200;
    else if (i>=455 && i<711) finalFade2 = 711-i;
    else finalFade2 = 0;
    analogWrite(ledPin2,finalFade2);
    analogWrite(ledPin5,finalFade2);

    if(i>400 && i<655) finalFade3 = i-400;
    else if (i>=655 && i<911) finalFade3 = 911-i;
    else finalFade3 = 0;
    analogWrite(ledPin1,finalFade3);
    analogWrite(ledPin6,finalFade3);
    delay(5);
  }
  delay(3000);
}

void led(int value){
  for(int fadeNum = 0 ; fadeNum <= 1100; fadeNum +=3){
    if(fadeNum > 0 && fadeNum < 250)  fade1 =  fadeNum -  0;
    else if(fadeNum > 250 && fadeNum < 500)  fade1 = 500 - fadeNum;
    else  fade1 = 0;
    analogWrite(ledPin1, fade1);       

    if(fadeNum > 150 && fadeNum < 400)  fade2 =  fadeNum - 150;
    else if(fadeNum > 400 && fadeNum < 650)  fade2 = 650 - fadeNum;
    else  fade2 = 0;
    analogWrite(ledPin2, fade2); 

    if(fadeNum > 300 && fadeNum < 550)  fade3 =  fadeNum - 300;
    else if(fadeNum > 550 && fadeNum < 800)  fade3 = 800 - fadeNum;
    else  fade3 = 0;
    analogWrite(ledPin3, fade3); 

    if(fadeNum > 450 && fadeNum < 700)  fade4 =  fadeNum - 450;
    else if(fadeNum > 700 && fadeNum < 950)  fade4 = 950 - fadeNum;
    else  fade4 = 0;
    analogWrite(ledPin4, fade4);

    if(fadeNum > 600 && fadeNum < 850)  fade5 =  fadeNum - 600;
    else if(fadeNum > 850 && fadeNum < 1100)  fade5 = 1100 - fadeNum;
    else  fade5 = 0;
    analogWrite(ledPin5, fade5);

    if(fadeNum > 750 && fadeNum < 900)  fade6 =  fadeNum - 750;
    else if(fadeNum > 900 && fadeNum < 1150)  fade6 = 1150 - fadeNum;
    else  fade6 = 0;
    analogWrite(ledPin6, fade6);
    delayMicroseconds(value);
  }
}

 

僕は「デbit.lyンチ」という駄洒落でメディア芸術賞を頂きました。ありがとうございます!賞品はテレカ。テレカとかいまどき使うチャンスなさすぎで嬉しかったです。
 
「tkw」を金色にするためにEagleのライブラリデータをつくる必要があり、
@tkrworksさんにアドバイスをいただきました。ありがとうございます。

Eagleでは明らかに作りづらい杯型の外形データはこちらのサイトを参考に
import_dxf_polygons_v4.ulp”というeagle用のulpを使ってillustratorで作ったパスをDXFで吐き出して読み込むことで作成しました。

チップは秋月に売ってるatmega328PのTQFP版。ピッチの狭い表面実装ICのハンダ付けは最初は苦労しましたが、慣れると楽しかったです。

bootloaderはATmegaBOOT_168_atmega328_pro_8MHz.hexをAVRstudioから書き込みました。Fuseの設定はあまり詳しくないのですがatmega328Pは拡張ヒューズでBOD(電圧が低下したときに何Vで停止するか)を設定するようで、3VのCR2032で駆動させていたので拡張ヒューズが0xFF(0×07)でBODをOFFにして電圧が落ちてもすぐには落ちないようにしました(つもり。) 完成がギリギリだったので電池持ち時間テストなどがあまりできてなかったのでどの程度効果があったのかはわからずです。。
今度ちゃんとテストします。

あとは上位ヒューズは0xDA、下位ヒューズは0xFFに設定しました。LockBitsは0xFFです。

Fuseの設定に関しては千秋ゼミさんArduino/Arduino の自作/ブートローダを仕込むを参考にさせて頂きました。
Eagleのbrdデータ

Arduino互換機もノベルティで作れちゃう時代ですね!