Road Bike's Log

40歳からロードバイクを始めてPBP完走を目指すナウでヤングなお父さんのブログ

 

LEGO ecto-1 電飾加工 〜プログラム編〜

レゴゴーストバスターズのキャデラックecto-1にLEDを入れてarduinoで光らせようプロジェクト、加工の方は完了したのであとはプログラムの作成です。

そして、最終的に完成したのが下記の動画のプログラムです。


プログラムをループさせて、起動演出を繰り返すようにしました。
もともとこれを作った目的が、arduinoとLEDを使ってガンプラなどを光らせようの会に臨時講師として依頼が来たので、サンプルとして作成しました。
当日、動きを見ながら説明するのに、いちいちリセットボタンを押すよりもループさせた方が便利そうなのでこうなってます。

では動きを順を追っていきます。

まず電源を入れるとarduinoは13番ポートが数回点滅します。で、パトライトの1対を13番に繋げているのでピカピカしています。
あと、pro mini だと0番ポートがあって、ここは電源を入れるとHIGHに設定されるようで、そのままだとずっと点灯するのでプログラムの最初で消しています。

その後、これから始めるぞ感を出すために全LEDを5回点滅させ、3秒待機します。
それからヘッドライト、テールライトを点灯し、2秒待って屋根のレーダー的なやつを点灯。
それからまた2秒待って、ヘッドライトを約2.5秒かけて徐々に明るくしていきます。

で、1秒待ってからパトライトをグリグリ30回回転演出します。

その後、すべてのLEDを消灯して1.5秒まってから最初に戻るってのをひたすら繰り返す感じです。


以上、ざっくり動作を説明しましたが、実際のスケッチは下記の通りです。


int i = 0;
int j = 0;
int dl = 120;

void setup() {

pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);

pinMode(4, OUTPUT);

pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);

}


void loop() {

digitalWrite(0, LOW);

while(j < 6){
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
analogWrite(3, 255);
digitalWrite(4, HIGH);
analogWrite(5, 255);
analogWrite(6, 255);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
analogWrite(3, 0);
digitalWrite(4, LOW);
analogWrite(5, 0);
analogWrite(6, 0);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(50);

j = j +1;

}

j = 0;

delay(3000);

if(j == 0){
digitalWrite(11, HIGH);
delay(2000);
digitalWrite(2, OUTPUT);
delay(2000);

for( i = 0; i < 255; i++){
analogWrite(3, i);
delay(10);
}

delay(1000);

j = j + 1;

}

while(j < 30){
analogWrite(5, 255);
analogWrite(6, 255);

digitalWrite(12, LOW);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
digitalWrite(10, HIGH);
delay(dl);
digitalWrite(1, LOW);
digitalWrite(0, LOW);
digitalWrite(4, HIGH);
digitalWrite(9, HIGH);
delay(dl);
digitalWrite(7, LOW);
digitalWrite(10, LOW);
digitalWrite(12, HIGH);
digitalWrite(8, HIGH);
delay(dl);
digitalWrite(4, LOW);
digitalWrite(9, LOW);
digitalWrite(1, HIGH);
digitalWrite(0, HIGH);
delay(dl);

j = j + 1;

}

digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
analogWrite(3, 0);
digitalWrite(4, LOW);
analogWrite(5, 0);
analogWrite(6, 0);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);

delay(1500);

j = 0;

}



よくわかりませんね。
通常、int headlight = 3とかやってポートに名前をつけるとわかりやすくなるんですが、めんどくさいので数字で管理しています。
別に絵でも書いてそこに番号書いておけばいいので自分はいつもこのやり方です。

では上から見てきましょう。

int i = 0ってのは、ヘッドライトをだんだん明るくする時のfor文内でつかう変数の宣言です。
for文内でまとめて宣言もできますが、なんとなく自分は最初に宣言してます。

int j = 0は、所々で処理を指定回数ループさせてるので、その時につかうための変数です。

int dl = 120ってのは、パトライトを回転演出する時の次の処理に移る待ち時間を設定しています。
この120ってのは120/1000秒の事で、この数値を変えるとパトライトの回転速度が変わります。
いろいろ試して120ぐらいが見栄えが良いのでこれにしてあります。

setupはarduinoでは必ず書いとかないといかんやつなのでこれは飛ばします。
PWMで使用する予定の3,5,6ポート以外は全部出力に定義してあります。
ちなみに3はヘッドライト、5、6は謎の青いホースに繋げてあります。
しかし、結局謎の青いホースはデジタル同様の扱いしかしていません(^^;

void loopですが、これはarduinoでは必ず必要なもので、このループ内に書かれた処理をひたすら繰り返します。
コマンドインタープリタなので上から順番に処理する事しかできないので、マルチタスクな感じには使えないです。
ただし、割り込み命令を受けて別のプログラムを走らせる事はできるので、それを活用すると割とすごい感じのプログラムが作れると思います。


さあでは、ループ内を見ていきます。

まずは、0ポートが最初は点灯するから消します。

while文内で、全LEDを5回点滅させています。
ここで先ほど宣言したjを使っています。
最初はjに0が入っているので、まず1回全部点灯消灯します。そしてj=j+1で徐々にjの数字を大きくして行って6になったらこのwhile文から抜けて下の行の処理に移る感じです。

では下です。6になったjをまた0に戻しておき、3秒待ちます。

で、もしjが0なら次の処理に入ります。当然0です。
ここで11番を出力していますが、これはフォグライトとテールランプが並列に接続されています。
で、2秒待って2番を出力、これが屋根の上の謎のレーダー2個です。
で、2秒待ちます。

次のfor文で、ヘッドライトを徐々に明るくしています。
analogWrite命令は、括弧内にまず出力したいポートを記述して、コンマの後ろにパルス幅を記述します。
8ビットでの指定なので0から255の256階調を使う事ができます(2の8乗)
実際は電圧が変わるのではなく、高速にオンオフを繰り返して残像で明るさを調整する擬似アナログで、それがパルス幅変調(Pulse Width Modulation)の動作になります。
0で全く光らない状態、255だとほぼ全開の明るさです。

この数値をiに指定して、for文による繰り返しで10ミリ秒間隔でどんどんスイッチの連打を早くして行ってるので、およそ2500ミリ秒、つまり2.5秒ほどでiが255になって全力で光る感じです。

で、iが255になるとfor条件から外れて、1秒待って下の行の処理に移っていきます。

次はまたwhileで、ここでもjを再利用しています。
このwhileは教材用に処理を最初に戻したかったから書いてありますが、これを無しにすればこのプログラムはずっとここを繰り返します。

まず、analogWriteで5と6を最大出力で点灯しています。
そしてこれをボワンボワンしてやろうと思ったけどあまりに面倒なのでやめました。なのでこれ、digitalWriteでも問題なかったです。

それからパトライトの点灯パターンに移ります。右前グループと左後ろグループ、左前グループと右後ろグループがペアになっています。
1つのグループに注目すると、常に2つが点灯しながらぐるぐる回るようにオンオフを繰り返すようにしてあります。
これだけで1周分になるので、whileで30を指定しているから30回回ります。

j=j+1の結果、jが30になるとwhileから抜けて全LEDを消灯し、1.5秒待って、あとjを0に戻してループの先頭に戻ってまた繰り返す、そしてこれを電池がなくなるまでやり続ける感じです。


以上、プログラムの解説でした。
長いだけで簡単なのですぐできると思います。





スポンサーサイト



LEGO ecto-1 電飾加工 〜屋根編〜

〜完成写真〜
〜車体編〜

今回は屋根を仕上げます。
車体と違い、配線の取り回しは簡単になりますが、LEDの数が多いので根気が必要です。


IMG_20160910_205408.jpg
では早速、パトライト部分に高輝度青LEDを入れて点灯テストしてみます。
かなり明るいので抵抗は大きめのを入れないといけなさそうです。


IMG_20160910_210154.jpg
穴はこんな感じに開けます。


IMG_20160910_211405.jpg
屋根部分は内側は3ミリの穴を開けないといけませんが、外側はLEDの足が通るだけの穴で大丈夫です。
屋根の方の3ミリ穴は若干大きめの方がいいと思うので、バイスをちょっと斜めにしてぐるっとやるといいかと思います。
いっそ、3.5ミリで開けてもいいかもしれません。


IMG_20160910_211648.jpg
穴にLEDを差し込みます。あとで屋根を通りやすくするために足はまっすぐ下ろしておいた方が良いと思います。


IMG_20160910_212039.jpg
パトライトのクリアパーツは斜めなので空間に余裕がありません。
LEDを差し込みすぎると隙間が空くのでここはぴったり付いてるかよく確認して差し込み具合を調整してください。


IMG_20160910_212751.jpg
マイナスは全て合流させるので集結させておきます。
黒丸の部品は屋根部分のジョイント保持用ですが、LEDの足が鑑賞するので穴を開けるか、真ん中1個にするかどちらかになります。
ついでにレーダーっぽいやつやな謎のホースやらにもLED入れましたが、これは写真撮り忘れました。


IMG_20160910_213346.jpg
全部点灯してみました。
実際にはこれをマイコン制御で順次光らせますが、前後合わせて16個あるので2個1組にしないとマイコンのポートが足りなくなります。


IMG_20160928_195222.jpg ではマイコンの取り付けに入ります。 
使ったのはarduino pro miniの互換機ですが、機能はarduinoと同じです。
プログラムの転送はクリップを挟んでいる端子の部分にUSBシリアル転送用の基盤を取り付けて行います。
この際、USBから5Vが供給されるので、そっちから電源を取ることも可能です。ただし、この端子に入力する電圧は5Vでなければいけないので、間違って9Vの電源などをつなげると瞬時にマイコンが焼き切れます。
電源電圧が高いものを使う場合は、横にある5V+のポートに入力します。


IMG_20160928_195228.jpg
で、抵抗付けて2個1組になるようにホルマル線で並列に接続します。
これ、やってるとこんがらかってきてわけが分からなくなってきます(^^;


IMG_20160928_203126.jpg
車体側の線を付けました。
ヘッドライトはプログラムのPWM制御で徐々に明るくなるようにするので、PWM出力できる3番ポートに繋げました。データシートにどのポートがPWM出力できるか書いてあるので、アナログ的な使い方をしたい場合やRGBのフルカラーLEDを使うときはPWM出力可能なポートに繋げてください。
通常、arduinoのPWM出力可能なピンは3,5,6,9,10,11です。


 IMG_20160928_215851.jpg
屋根側もせっせと付けていきます。
コードが細いので、ちょっとひねると切れるから気をつけましょう。

切りました。


IMG_20160928_230354.jpg
全部付け終わったら、屋根側の端子がむき出しなのでショート防止のためにホットボンドで絶縁しておきました。
屋根の周囲の部分は窓と干渉してしっかり嵌らなくなるのでここにはボンドがつかないようにします。
マイコンのポートもホットボンドを盛っておくと千切れにくくなると思います。


IMG_20160928_230641.jpg
電源はまだ付けていないのでUSBから供給しながら通電テストです。
コードがこのままではぐちゃぐちゃなのである程度まとめて束ねます。


IMG_20160928_231103.jpg
無事光っていますが、この時点では青色LEDが1つ壊れていました。おそらくコテの熱が入りすぎてダメになったと思われます。


IMG_20160928_231117.jpg
ものすごい明るいです。
抵抗は何Ω入れたか覚えていませんが、マイコンに接続してテストするときに良さそうな明るさのやつを選んで付けています。多分、ほとんど820Ωだったかと思います。
このあたりは、LEDの仕様にもよるので現物合わせです。


IMG_20160928_231129.jpg
この状態でプログラムの転送も出来ます。
あとは、電源の取り付けをしてリアウインドウを取り付ければ完成です。


IMG_20160930_202609.jpg
電源はコイン電池3個の9Vにしました。
多分2個でも行けると思います。

写真ではクリップで挟んでいますが、かなり接触不良をおこすので、最終的にはマイナス側をビニールテープで留めてそのまま電池3個を重ねて貼り付けて、プラス側は電源をオンにしたい時はネオジウム磁石でコードを接触させる方法にしました。

それでは、プログラム編に続きます。
 

LEGO ecto-1 電飾加工 〜車体編〜

レゴゴーストバスターズ、ecto-1の電飾製作の工程です。
写真が多いのでブロック別に分けようと思うので、まずは車体から。
電球の数は少ないけどスペースに余裕がなくて見た目以上に面倒ですが、コツコツ作業を進めるだけでいけると思います。

〜 完成写真はこちら 〜

IMG_20160906_195104.jpg
では記念すべき最初の加工から。
LEDは全て3ミリの砲弾型を使っています。
写真右上に2種類のLEDが見えていますが、小さい方が3ミリです。レゴのポッチが5ミリですので、3ミリの穴を開けてもまだくっつく力が残ります。
で、穴の中に3ミリLEDを入れればレゴ本来の性能を失うことなく埋め込みができるという算段です。

なお、穴あけは中心になるように十分集中してください。レゴはセンターに湯口あとと思われるバリが残っているのでセンターはわかりやすいと思います。ここにまずはできるだけ細めのピンバイスで下穴を開けて、仕上げに3ミリドリルを使うと失敗しにくいと思います。
3ミリは切削パワーが強いので油断すると変な穴が開くので最初は様子を見ながら恐る恐るやりましょう。


IMG_20160906_195407.jpg
この部分にはLEDの頭が出るように差し込みますが、後ろになるポッチが邪魔なので切り落としました。
しかしながら、ここは切らずに小さい穴を開けることで対応可能ですので、後ほどのヘッドライト加工時の方法を参照してもらった方が良いかと思います。


IMG_20160906_200713.jpg
では早速電気入れてみましょう。
電源は3.7Vのリチウムイオンバッテリー、抵抗は多分この時は330Ωぐらいだったでしょうか。
実際はマイコンで制御するので出来上がったら実際に点灯させた状態で好みの明るさになる抵抗値に調整していけば良いと思います。
まあ、きっちりやるならデータシートみて計算しないといけませんが、よくわからなければ明るすぎない抵抗を入れておけば概ね安心と思います。


IMG_20160906_201636.jpg
電源コードを室内に通すための経路を作っていきます。
とりあえず穴は大きいのに入れてもいいけどなんとなく小さいのでプラス用マイナス用1個ずつ開けてみました。


IMG_20160906_202202.jpg
LEDの方は足をほぼ根元で切断してリード線を半田付けします。
付ける際、内側に付けるようにしないと穴に入っていきません。また、速やかにやらないとLEDが熱で壊れるので注意です。

IMG_20160906_203154.jpg
配線を這わせるために蓋になるパーツがかなり削りました。
ここまで削ると保持力がかなり弱くなりますので、一応くっつくけどパーツがなくなるといけないので接着した方が安心かと思います。


IMG_20160906_203403.jpg
無事に仕上がりました。
しかし、赤のパーツは透明度が高くて光がかなり漏れます。
まあこれは、暗くして目立たないようにしましょう。


IMG_20160906_213157.jpg
フォグランプの加工にはいります。
これは仕上がりのイメージですね。この部分は結構綺麗かつシステマチックに入って気持ちがいいです。


IMG_20160906_214435.jpg
フォグランプはこのようにLEDの足の幅でピンバイスで穴を開けて差し込みました。


IMG_20160906_214825.jpg
点灯テスト。無事光ってます。
電球色なので優しい感じでいいですね。


IMG_20160906_215950.jpg
ヘッドライトは高輝度白にします。59年式キャデラックなのでこんな真っ白のライトではないと思うけど、まあ最近はヘッドライトは青白くないといけないみたいな感じになってるので白で行きましょう。

IMG_20160906_220005.jpg
丸いレゴパーツに穴を開けて差し込みます。レゴは柔らかいので接着しなくていいからやりやすいですね。


IMG_20160906_220818.jpg
では結線作業です。ライトのベース部分は3ミリの丸穴が開けてあります。そしてフェンダーのパーツの方は線を通す穴だけにしてあります。


IMG_20160906_221657.jpg
ヘッドライトとフォグランプの色合いが違うのでなんだか雰囲気がでますね。
しかし、ヘッドライトの先端パーツはクリアーなので光の広がり方が違うけどまあ、これはこれでいいです。


IMG_20160906_223309.jpg
ヘッドライトのLEDを差し込む部分はこのように穴を開けています。


IMG_20160906_224519.jpg
右側のLED埋め込み完了。さあまだ先は長いぞー。


IMG_20160907_224044.jpg
配線を車体内に持っていく方法ですが、エンジンルーム内はスペースがないのでフェンダーの淵を這わせていくことにしました。
マイナスは全部共通なので1つにまとめるから全部で5本のコードを車体に入れていきます。


IMG_20160907_230656.jpg
コードは1本ずつゼリー状瞬間接着剤をコツコツ付けて行って固定しました。
車体側のパーツの穴から室内に通して配線の埋め込み完了です。

IMG_20160908_000211.jpg
オッケー、いけますね。この調子で左側も作業を進めていきましょう。


IMG_20160910_103547.jpg
気持ちに余裕ができて作業中の写真が大きなってきました。
ポッチに3ミリ穴を開ける時は、まず最初にちっこいガイド穴をセンターに開けておきます。


IMG_20160910_105648.jpg
フォグ側はこんな感じでL型パーツに2本の穴を開けてLEDの足を通す穴を作ります。
ちょっと凸凹してますが見えなくなるので気にしないでおきましょう。
また、L型パーツのヘッドライト側は3ミリの穴を開けます。
ライトのベースになるパーツは全部3ミリの穴を開けてあります。


IMG_20160910_110101.jpg
フェンダー部分と合わせて正面から見るとこうなってます。


IMG_20160910_110140.jpg
フェンダーパーツにはこのように、空間の部分まで穴を通します。


IMG_20160910_111632.jpg
フォグランプ側のLEDを差し込んだ状態を下から見るとこのように足が通っています。
穴を独立させてあるのでショートする心配はありません。


IMG_20160910_170627.jpg
ヘッドライトは足を根元から切断してリード線を半田付けしたものを差し込みます。結構タイトなので若干LEDを削らないと入らないかもしれません。かといってバイスで穴を広げるのはやめた方が良いと思います。


IMG_20160910_170826.jpg
フェンダーパーツにリード線を通していきますが、4本あるので若干面倒です。


IMG_20160910_172651.jpg
フェンダーからは1箇所穴を開けて4本のコードを出しました。
で、マイナス側はフォグと合わせてひとまとめです。
そしてこちらも右側同様、フェンダー側面を這わせて室内にリード線を導入していきました。


IMG_20160910_200033.jpg
左側のテールランプも右と全く同じ加工をして結線します。


IMG_20160910_204208.jpg
無事車体の電気は全て作業完了です。


IMG_20160910_204219.jpg
テールランプは抵抗を大きくして光漏れが目立たないようにしました。

以上で、車体側の作業は完了です。
面倒くさいけど特別難しいことはないので、これだけでもかなりいい感じに見えると思います。
他の車でもだいたい同じようなノリでできると思うので、みなさまも是非やってみてください。


では屋根編に続きます。



プロフィール

ゆあんこカロとー

Author:ゆあんこカロとー
自転車
 Cinelli Pro ESTRADA 
 Cannondale CAAD8 5 105
 RALEIGH Carlton N

イベント参加記録
2014
 AR中部 BRM315 200km 12h25m
 完走 (CAAD8)
 AR中部 BRM412 300km 18h21m
 完走 (CAAD8)
 ツール・ド・西美濃 120km
 完走 (ESTRADA)
 AUDAX近畿 BRM1004 200km 11h38m
 完走 (ESTRADA)
 鈴鹿エンデューロ 2014/11/15
 4Hロード 146位 (ESTRADA)
2015
 AUDAX近畿 BRM418 200km 11h09m
 完走(ESTRADA)

年別アーカイブ
検索フォーム
ブロとも申請フォーム
QRコード
QR
ランキング

12345678910111213141516171819202122232425262728293031 10