itsukichang

フロントエンドが得意なエンジニア.ダーツと旅行とギターが好き

Daily Arduino×Flash #1

ちょっとArduinoとかフィジカルコンピューティング的なもののリハビリ.
毎日30min~1hくらいで小物つくってupするよ.

#1 距離センサと画像処理

おなじみSHAPE製の赤外線センサを使って,簡単な画像処理.
今日はとりあえず読み込んだ画像の大きさ(scaleX, scaleY)を距離に応じて変更したった.

回路図

準備中なう

プログラム
package {
	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import funnel.*;
	import itsukichang.*;
	
	public class Main extends Sprite {
		
		private var _pin:Pin;
		private var _arduino:Arduino;
		private var _img:ImageLoader;
		private var _sum:Number = 0;
		private var _cnt:uint = 0;
		private var _n:Number;
		private var _text:TextField;
		
		public function Main() {
			init();
			_arduino = new Arduino(Arduino.FIRMATA);
			_pin = _arduino.analogPin(0);
			
			addEventListener(Event.ENTER_FRAME, onLoop);
		}
		
		private function init():void {
			_img = new ImageLoader("itsukichang.jpg");
			_img.addEventListener(ImageLoader.COMP, onComp);
			addChild(_img);
			
			_text = new TextField();
			_text.defaultTextFormat = new TextFormat("", 20, 0x0);
			addChild(_text);
			
		}
		
		private function onComp(e:Event):void {
			_img.centerPos();
			_img.x = stage.stageWidth / 2;
			_img.y = stage.stageHeight / 2;
		}
		
		private function onLoop(e:Event):void {
			
			/* 前後の値の平均とって処理することで若干スムーズに */
			if ( _cnt < 2) {
				_sum += _pin.value;
				_cnt++;
			} else {
				_cnt = 0;
				_n = _sum / 2;
				_sum = 0;
				trace(_n);
			}
			
			_img.scaleX = _img.scaleY = _n * 5;
			
			/* 大体の距離を数値で表示 */
			//精度的に 10cm以下は曖昧だよ!!
			_text.text = ((6787 / (_n * 1023 - 3)) - 4).toString()  + "cm";
			//_text.text = (70 - int(_n * 10000) / 100).toString() + "cm";
			_text.x = stage.stageWidth / 2 - _text.width / 2;
			_text.y = 350;			
			
		}
	}
}
動作してる図(動画とか)




動画準備中なう