3Dプリンタがやってきた~!

3Dプリンタのキットを購入しました。
Lunavast Prusa 3Dプリンターキットっていう商品です。

届いた部品

部品をよく見ると、3Dプリンタで出力されたようなプラスチックのパーツ(左側の黒い物体)も入っています。
後は、ボルトやナットやステッピングモーター等、市販で買えるようなパーツが結構入っています。
ということは、ボルトやナットをうまく組み合わせて、足りないパーツだけ3Dプリンタで出力すれば、また別のオリジナル機械が作れてしまうんじゃないかと夢が広がっていきます。
こりゃ~テンションマックスやー!

これを組み立てていきます。

なんとか完成!

緑色のホースみたいなのがプリントされる樹脂で、これを熱で溶かしながら目的の形を作っていきます。
ではさっそくテストプリント、スイッチオン!

モーターの音「キュイーンキュイーン」
僕「すげー!」

モーターの音「デロデロデロデロ」
僕「たまらーん!」

結果

途中で底面がズレて移動してしまいこんな感じになっちゃいましたが、ズレ対策をとったり、ハードもソフト側の設定も微調整してもう少し精度を上げていきたいと思います。

それにしても自分で組み立てた機械が動くというのは実に気持ちがいいですな!

階段の照明スイッチ

階段の照明スイッチって、下の階と上の階の両方についていることが一般的だと思いますが、このスイッチの回路が臨機応変な感じで僕は大好きです。
夜中に思い出してドキドキしたりします。

階段の下の階のスイッチが上の図のA、上の階のスイッチがBだとして、照明が点いているときにどちらのスイッチを切り替えても照明は消えて、次にどちらのスイッチを切り替えても照明は点きます。
臨機応変な仕組みですね。

この回路はスイッチが2か所あるとき用のものですが、スイッチが3か所あるときはどうなるんだろうと、ふと思ったので考えてみました。
20分ぐらい考えてみたんですが、3か所すべてのスイッチのどれを押してもオンオフ切り替えれるというところまでなかなか行き着きません。。

ついにギブアップしてインターネットで調べてみると、下の4路スイッチなるものを使えば可能ということが分かりました。

このスイッチだけ見てもまだピンとこなかったのですが、回路を見ると納得!

スイッチBが4路スイッチですね。こいつはすごい!
考えていた時はもっと複雑な回路になるのかなと思っていたのですが、実にシンプルです。ドキドキします。

そしてこの4路スイッチのような、パッと見ただけでは何の役に立つのか分からなさそうな部品も、存在を知っているかどうかでいざというときに出てくるアイデアの差になるんでしょうな~。
と、部品は普段からいろいろチェックしておこうと思ったのでした。

ArduinoとTLC5940で複数のRGB LEDを制御する

Arduinoで複数のRGBフルカラーLEDを制御してみようと思ったのですが、まずArduinoでPWM出力できるピンは6つしかなく、フルカラーLEDを1つ制御するには3つのPWM出力ピンを使う為、ArduinoだけだとフルカラーLED2つまでしか制御できないということになります。
そこで、もっと多量のPWM出力を制御できないか調べたところ、TLC5940というICから16ピン分のPWM出力を制御できるということが分かりました。さらにTLC5940どうしでデイジーチェーン接続していけば、32、48、、というようにPWM出力のピン数を増やしていけるみたいです。

さっそく購入したTLC5940

そしてLEDのカソード側とTLC5940のPWM出力を繋ぐので、RGB LEDはアノードコモンのものが必要になります。

角型フルカラーLED OSTA71A1D-A アノードコモン

このLEDの足をブレッドボードに4つの導線に分けて刺そうとすると、あと1穴分幅が足りなくてブレッドボードに刺さりません。むむむ、もどかしいです。
他に良さそうなアノードコモンのRGB LEDを見つけれなかったので、このLEDの足に銅線をはんだ付けしてブレッドボードに刺せるようにします。(もっと簡単な方法があったのでしょうかね?)

LEDの足をヒートクリップで挟んで熱からLEDを守る!あ、この写真は違う足を挟んでたw

足が長くなり、横たわるしかなくなったLED

お次は回路を組みます。
「Arduino 日本語リファレンス」のTLC5940のページにあった回路を参考に組みました。

2つのTLC5940をデイジーチェーン接続で繋いでいます。RGB LEDは10個

ランダムな色で順番に光るようにした動画です。

Arduinoのコードはこちら

// "tlc_config.h"の値を下記に変更
//    #define NUM_TLCS    2

#include "Tlc5940.h"

#define MAX_BRIGHTNESS 4095

void setup() {
  Tlc.init();
}

void loop() {

  int myR = random(4)*(MAX_BRIGHTNESS/3);
  int myG = random(4)*(MAX_BRIGHTNESS/3);
  int myB = random(4)*(MAX_BRIGHTNESS/3);

  //channelの 0 と 31 は未接続
  for (TLC_CHANNEL_TYPE channel = 1; channel < (NUM_TLCS * 16)-2; channel += 3) {

    Tlc.clear();
    Tlc.set(channel + 0, myR);
    Tlc.set(channel + 1, myG);
    Tlc.set(channel + 2, myB);
    Tlc.update();
    delay(70);
  }
}

今後はLEDの数をもっと増やしてテストを続けて行きたいと思います。
お金がかかります。ブルジョアの道楽です。

Away3D 4.0 透明からフェードインさせる

Away3D 4.0.0 Beta で、Mesh を透明からフェードインさせる方法を見つけるまでに結構時間がかかったので、コードをメモしておきます。
ColorMaterial や TextureMaterial の alpha情報を Tweener で操作するやり方です。
(赤色部分が該当コードです。)

package
{
	import away3d.containers.View3D;
	import away3d.entities.Mesh;
	import away3d.materials.ColorMaterial;
	import away3d.primitives.CubeGeometry;
	import caurina.transitions.Tweener;
	import flash.events.Event;

	[SWF(backgroundColor="#FFFFFF", frameRate="60", width="800", height="600")]

	public class AlphaTest extends View3D{

		public function AlphaTest(){
			antiAlias = 4;
			backgroundColor = 0xcccccc;

			var material : ColorMaterial = new ColorMaterial(0x333333);
			var cubeGeo : CubeGeometry = new CubeGeometry(256, 256, 256, 4, 4, 4);
			var cube : Mesh = new Mesh(cubeGeo, material);
			cube.rotationX = 30;
			cube.rotationY = 30;
			scene.addChild(cube);

			var mt:ColorMaterial = (cube.material as ColorMaterial);
			mt.alpha = 0;
			Tweener.addTween(mt, { alpha:1, transition:"linear", time:3 } );

			addEventListener(Event.ENTER_FRAME, update);
		}

		private function update(e:Event):void {
			render();
		}
	}
}

この方法だと、ObjectContainer3D とかでまとめたグループまるごとのアルファ情報をいじりたい場合でも、ひとつひとつのマテリアルのアルファ情報を触らないといけないので、結構手間なんですが、もっといいやり方があるんですかね?

AIRKinect:スケルトン情報を使ってゲーム作成

FlashでKinectセンサーを触ってみようと思い、windowsの環境でも使いやすそうなAIRKinectを使ってみることにしました。

AIRKinectのセッティングはこちらを参考にさせていただきました。

 ・blog.alumican.net » AIRKinect Extension (AIR + ANE + Kinect)を動かす

AIRKinectにスケルトン情報を取得するAPIが用意されているので、取得したスケルトン情報でゲーム画面内の人形を動かして遊ぶ2人プレイ用ゲームを作りました。

相手の陣地の穴にボールを先に5球入れたら勝ちです。
ちょうど事務所にいた元尾さんと下村さんにプレイしてもった映像はこちらです。

下村氏から「バナナの皮が落ちてきて、それを踏むと滑るようにしたら面白そう」等という粋な意見もあがり、もうちょっと作りこんでみたい気もする今日この頃です。