Archive for the ‘센서리포트’ Category

A599222 이호영

2010/05/11

졸전에 필요한 기술을 알아보고자

color tracking  관련  processing을 공부하고 있습니다.

위에 첨부된 이미지는 processing에서 빨강색을 tracking 하는 것 입니다,

비디오 트래킹 프로세싱관련 사이트 입니다.

http://tokage.cafe24.com/process/2007/08/color_tracking.html

http://www.learningprocessing.com/exercises/chapter-16/exercise-16-5/

Advertisements

김효진-자석스위치테스트

2010/05/11

1) 의도

자석스위치로 물체를 올려놓았을때 감지하여

LED Blink, 사운드 재생을 구현하고자 합니다.

2) 자석스위치

-자석스위치의 내부에는 매우 얇은 금속단자가 두장 들어있다. 자석근처에 가면 이들이 서로 달라붙어 스위치를 연결하게 된다. 전선이 없어도 동작하기 때문에 움직이는 물체의 위치하고자 할때에 자주 사용. 전선 같은 것에 방해받지 앟고 움직여야 하는 물체가 있는데 이를 어떤 받침대 위에 올려놓았을 때에 감지가능.

-자석스위치 13.5mm, 650원 

3) test

팝업북에서 자석스위치를 이용하여 구현될 LED Blink, Piezo sensor를 구현해보았습니다.

-LED Blink
1) 전선과 건전지만 연결
2) 아듀이노와 연결(몇초간격으로 깜빡거림)
-Piezo Buzer(배경음 구현하기위해 mp3 모듈대신 사용)

-> 두가지 모두 LED Blink 소스를 이용하여 구현했습니다.

4) 회로도(두가지 모두 같다)

저항이 있는 13번 핀에 연결했기 때문에 따로 저항이 필요하지 않았다.

5) Task


1) 팝업북을 만든다.
2) 팝업북에 LED와 피에조부저와 자석스위치 두개를 부착시키고 아듀이노와 연결한다.
3) LED와 피에조부저를 실행시키기 위해 자석을 자석스위치 위에 올려놓는다.
4) LED와 피에조부저가 실행되는 모습을 볼 수 있다.

6) 결론

자석이 다른 페이지와 영향을 주는지 알아보아야겠고

다른 심화적인 구현을 연구해보아야겠습니다.

그리고 책에 구현할 것이기에 알맞은 종이두께와 내구성을 연구해보아야겠습니다.

Tilt SA1 기울기 센서_A399233임찬혁

2010/05/11

작년 말쯤에 기울기센서 SA1을 과제로 테스트했었습니다.

이번 졸작에도 이 기울기 센서를 이용하여 LED를 다양한 색으로 나타내고 싶다는 아이디어가 있어서

이곳에 이 Tilt SA1 센서에 대한 조사 자료를 올립니다.

우선 이 센서의 장점은 A/D가 쉽게 구현되어 이 센서를 이용하여 받은 값으로

쉽게  LED조도 혹은 변수를 주어 LED의 색을 변화 시켜 줄 수 있습니다.

저는 이 센서를 이용하여 RGB-LED의 색의 변화를 주고 싶었습니다.

회로도는 이렇게 되고 led는 연결하고 싶은만큼 더 연결하면 됩니다.

저는 코드는 이런식으로 짜보았습니다.

int ledPin1 = 3;
int ledPin2 = 5;
int ledPin3 = 6;
void setup() {
Serial.begin(9600);
}

void loop()  {

int tilt=analogRead(0);
Serial.println(analogRead(0));

for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
if(tilt>700,tilt<770){
analogWrite(ledPin1, fadeValue);
delay(40); }else{ analogWrite(ledPin1,0);}

}

for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
if(tilt>760){
analogWrite(ledPin2, fadeValue);
delay(40); }else{ analogWrite(ledPin2,0);}

}

for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
if(tilt>780){
analogWrite(ledPin3, fadeValue);
delay(40);}else{ analogWrite(ledPin3,0);}

}

for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
if(tilt>800){
analogWrite(ledPin1, fadeValue);
delay(40); }else{ analogWrite(ledPin1,0);}
}
}

우선은 색바꾸는데에 대한 연구만 해보았지만

다음은 음악을 받아 리듬에 맞추어 LED가 켜지는 조사를 해보겠습니다.

김은영 강형모

2010/05/11

<아듀이노 플래시 연동>

– 둘을 연동하는데는 아듀이노와 플래시, 그리고 SerProxy가 필요합니다.

<아듀이노 코딩>

int cds = 1;
int val;
void setup(){
Serial.begin(19200);
}
void loop(){
val = analogRead(cds);
Serial.println(val,DEC);
//delay(200);
}

: 시리얼 모니터 창 우측 하단에 있는 전송속도 설정을 코딩과 맞게 “19200”으로 설정하고 문제 없이 작동 되는 것을 확인 했습니다.

<SerProxy>

– 아듀이노 사이트에서 다운로드 받을 수 있었습니다. 설치와 실행 모두 간단했습니다

<플래시 as3.0 래퍼런스>

var s:Socket = new Socket(“localhost”, 5334);

s.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

s.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);

addEventListener(Event.ENTER_FRAME, enterFrameHandler);

var analog0:int ;

function enterFrameHandler(e:Event):void {

if (s.connected) {//연결 되있는지의 여부를 확인

if (s.bytesAvailable > 0) {//데이타가 들어오는지를 확인

var data:String = s.readUTFBytes(s.bytesAvailable);

var values:Array = data.split(‘,’);//여러개의 센서를 쓰고싶을 때

analog0= int(values[0]);

drawCircle();

}

s.writeByte(0);

s.flush();

}

}

function drawCircle():void {

graphics.clear();

graphics.lineStyle(1, 0x666666);

graphics.beginFill(0x000000);

graphics.drawCircle(stage.stageWidth/2 – 120, stage.stageHeight/2, analog0 / 4);//x,y,반지름

graphics.endFill();

}

function errorHandler(e:Event):void {

trace(e.type);

}

:Test의 결과는 연동 실패 입니다!!  문제의 원인은 아마도 pc와 아듀이노를 연결한 usb포트 인식문제이지 않나 싶습니다. 리서치를 통해 문제 해결을 시도 하였으나 현재까지는 미해결 상태입니다. 빠른 시일 내에 해결 방안을 포스팅 하도록 하겠습니다.

이은미 – 빛센서를 활용한 작품 표현

2010/05/11

졸작에 필요한 Task를 단계적으로 파악해 보았을때,

1. 사용자가 화장대 서랍을 연다.

2. 거울 속 여자가 수납장이 열린 쪽을 처다본다.

를 이번에 테스트 할 계획입니다.

서랍에 빛 센서를 설치햐여, 빛 센서가 빛을 읽어들일 경우 플래시 애니메이션이 재생되는 방식으로

Zinc를 이용한 플래시와 아듀이노간의 시리얼 통신을 통해 구현합니다.

제가 실험하였을때,

아날로그 인풋(빛센서)의 값의 경우

빛이 있을 때 : 900~950 -> 서랍을 열 때 에 해당 : LED불이 켜짐

빛이 없을 때 : 1000~1023 -> 서랍을 닫을 때 : LED불이 꺼짐

과 같이 간단한 방법으로 빛센서를 테스트 해 보았구요,

코딩은 다음과 같이 하였습니다.

int analogPin = 3;
int val = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
if (val < 1000)            ———————— val이 1000보다 작은 값을 받을 경우
{
digitalWrite(13, HIGH);  ———————— 13번 핀의 LED불이 켜진다
}
else
{
digitalWrite(13, LOW);  ————————- 그 밖의 경우에는 LED불이 꺼진다
}
val = analogRead(analogPin);
Serial.println(val);
delay(100);
}

엄마 아빠 속 보기_fabric_button

2010/05/11

옷안쪽에 들어갈 버튼을 전도성 천 사이 스펀지에 구멍을 뚫어 만들어 보았습니다.

스펀지 겉에 들어갈 천을 부직포로 작업을 하였는데요

옷 안쪽에 들어갈 버튼이어서 천이 얇은면 제 작업을 할때 더 용의할 것 같습니다.

압력센서_이경호

2010/05/11

이번에 졸전 작품 중에 클러치 백에 사용하기 위해서

압력센서를 사용해 보았습니다.

생김새는 보시다시피 작지만

가격적인면에서는 결코 작지 않았습니다.

개당 13200원.

압력에 따라서 LED를 순차적으로 또는 가운데서부터 켜지도록 해보았습니다.

int led1 = 3;
int led2 = 5;
int led3 = 6;
int led4 = 9;
int led5 = 10;
int led6 = 11;
int sensorPin = 0;
int ps = 0;

void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop()
{
ps = analogRead(sensorPin);
Serial.println(ps);

if (ps >= 1020){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
}
if (ps >=950, ps<=1019) {
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led1, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led2, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led3, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led4, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led5, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led6, fadeValue);
delay(10);
}
}
if (ps <=949) {
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led3, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led4, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led2, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led5, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led1, fadeValue);
delay(10);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(led6, fadeValue);
delay(10);
}
}
}

압력센서를 약하게 잡으면 순차적으로 LED가 켜지고

강하게 잡으면 가운데서부터 LED가 켜지도록 하였습니다.

그런데 압력센서가 약한값부터 읽고 그다음에 강한값을 읽더군요.

처음부터 강하게 잡아도

LED순서는 순차적 -> 가운데부터 였습니다.

압력값에 따라서 다양한 무늬를 표현해보려면 좀 더 실험을 해봐야겠습니다.

김혜지 이슬아 (기술구현 테스트)

2010/05/11

하드웨어적 기술구현 테스트를 해 보았습니다.

2개의 아웃풋이 가능한 그래픽 카드를 이용하여 하나의 화면을 만들어 보았습니다.


AR

2010/05/11

A799252 이정익

센서를 이용해서 졸작을 하지 않기에 AR에 관련된 사항을 조사해봤습니다.

먼저 플래시 AR은 현재 FLARToolkit과 FLARManager가 가장 많이 쓰이며,

제가 참고한 것은 Eric의

(http://words.transmote.com/wp/flarmanager/)

FLARManager입니다.

AR을 이용해서 영상을 집어넣어 보겠습니다.

여기에 관한 샘플 코드는 Lee Brimelow의

http://www.gotoandlearn.com/에서 자세히

볼 수 있습니다.

AR을 사용하는 프로세스는 다음과 같습니다.

1. AR 마커 등록 -> 2. coding -> 3. 마커 출력

먼저 마커를 등록해볼까요. 마커 등록은

http://flash.tarotaro.org/blog/에서

할 수 있습니다. png 파일로 된 마커를 일단 등록합니다.

그 다음에 coding을 하는데요.  코드를 올려놓겠습니다.

package
{
import com.transmote.flar.FLARManager;
import com.transmote.flar.marker.FLARMarker;
import com.transmote.flar.marker.FLARMarkerEvent;
import com.transmote.flar.utils.geom.FLARPVGeomUtils;
import com.transmote.utils.time.FramerateDisplay;

import flash.display.Sprite;
import flash.display.StageDisplayState;
import flash.events.Event;

import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.render.LazyRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;

[SWF(width=’640′, height=’480′, backgroundColor=’#000000′, frameRate=’40’)]
public class Royal extends Sprite
{
private var fm : FLARManager;
private var scene : Scene3D;
private var viewport : Viewport3D;
private var camera : FLARCamera3D;
private var lre : LazyRenderEngine;
private var plane : Plane;
private var marker : FLARMarker;
private var v : Vid;
private var mat : MovieMaterial;
private var container : DisplayObject3D;

public function Royal()
{
initFlar();
v = new Vid();
v.vid.source = “Sequence_01.flv”;
v.vid.stop();

}
private function initFlar () : void
{
fm = new FLARManager(“flarConfig.xml”);
fm.addEventListener( FLARMarkerEvent.MARKER_ADDED, onAdded );
fm.addEventListener( FLARMarkerEvent.MARKER_REMOVED, onRemoved );
fm.addEventListener( Event.INIT, onFlarLoad );
addChild( Sprite(fm.flarSource));
}
private function onFlarLoad ( e: Event ) : void
{
fm.removeEventListener( Event.INIT, onFlarLoad );
init3D();

}
private function onAdded ( e: FLARMarkerEvent ) : void
{
marker = e.marker;
v.vid.play();
plane.visible = true;
}
private function onRemoved ( e: FLARMarkerEvent ) : void
{
marker = null;
v.vid.stop();
plane.visible = false;
}

private function init3D () : void
{
scene = new Scene3D();
camera = new FLARCamera3D(fm.cameraParams );
camera.z = -30;

viewport = new Viewport3D( 640, 480, true );
lre = new LazyRenderEngine( scene, camera, viewport );
container = new DisplayObject3D();
var mat : MovieMaterial = new MovieMaterial( v, false, true );
mat.smooth = true;
plane = new Plane( mat, 320, 240, 2, 2 );

plane.scaleY = -1;
plane.rotationZ = 90;
addChild( viewport );
container.addChild( plane );
plane.visible = false;
scene.addChild( container );
//this.addChild( viewport );
addEventListener( Event.ENTER_FRAME, onEnter );
addChild(new FramerateDisplay());
}

private function onEnter ( e: Event ) : void
{

lre.render();
if ( marker != null )
{
container.transform = FLARPVGeomUtils.convertFLARMatrixToPVMatrix( marker.transformMatrix );
}
}
}
}

그 다음에는 마커를 출력해서 AR을 즐기시면 됩니다.

서미나 심규형 -color tracking 연구 (flash)

2010/05/11

-일단은 색을 잘 트레킹 하는 것이 중요하므로 트래킹부분에 관하여 여러가지 자료 수집과 다양한 테스트를 해보았다.
단순한 컬러트레킹의 프로세스는 마술같은 효과에 비해 그렇게 복잡하지는 않았다.
일단 webcam을 작동– > BitmapData  instance 생성 –> 매프레임마다 BitmapData에 webcam의 화면을 저장
–> 그 BitmapData에서 (보통 마우스 클릭 이용) 한 픽샐의 색상정보 저장  –> 해당 픽셀의 위치값 확인 , 활용
정확한 값을 알아내기 위해서는 더욱 많은 코드가 들어가야 하겠지만 대강의 큰 방법은 위의 방식을 많이 이용하는 듯했다.
그중 내가 눈여겨 본것은 http://redblind.com/blog/2009/11/19/color-tracking-source/ 의 트레킹 소스였는데
이유는 colorIsolate라는 클레스를 이용하여 특정색의 범위를 감지하여
그냥 픽셀만 이용하는 방법에 비해 색 인식율이 매우 높았기 때문이다
-기본화면

이것은  ColorIsolate라는 클래스를 이용, 캠화면을 마우스로 클릭했을 당시의 색상값만을 보여주는 다른 BitmapData를 만들고
하나의 Sprite을 이용하여
그 픽셀들을 감싸는 형식을 취하고 있었다 .
이것은 코드의 한 부분이다 .

camDisp(CameraDisplay)는 cam 화면출력, ci(ColorIsolate)는 webcam의 비트맵 데이타(CameraDisplay클래스에
bitmapdata를 반환하는 bitmap함수가 있다)에서 지정 색상만 출력, bmDisp는 ci로 걸러진 지정색상의 비트맵에서 지정색상이
아닌것을 null시켜 마치 alpha값을 적용한 것처럼 사이 사이를 투명하게 해주었다. 이러한 프로세스를 거쳐 배경이 없는 지정색상의
bitmapData가 만들어 지는 데 여기서 x,y값을 추출해 내기 위하여 특정 Sprite(여기서는 RectAngle) 로 감싼다(swapChildren).
결과적으로는 이렇게 특정색상의 BitmapData를 감싸고 있는 Sprite의 위치값을 추적함으로써
컬러 트레킹 효과를 낼 수 있는 것이다.

실제로 적용시켜 본 화면 , 조명에 따라 차이가 있긴 있지만 트레킹 인식률이 좋다.
처음엔 2~3개를 하는 것에 대하여 어렵겠다고 느꼇다. camera를 2중 3중으로 쓰는 게 아닐까 하고.
하지만 각각을 addChild 시켰을때 무리 없이 구동이 되었으며 이 클래스가 2개가 호출된다하여
카메라가 두번 구동되는 것이 아니구나 라는 것을 알게 되었다.
이러한 것이라면 애초 기획했던 마커로 이벤트를 호출하고 그것을 이용해 save나 reset을 하는 방법도
시도를 해보아야겠다.