Archive for the ‘arduino’ Category

Arduino: Library for TLC5940 16-channel PWM chip

September 24, 2008

출처:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1218174457/2#2

The TLC5940 is a 16-channel, constant-current sink LED driver. Each channel has an individually adjustable 4096-step grayscale PWM brightness control and a 64-step, constant-current sink (no LED resistors needed!).

This library supports daisy-chaining multiple chips together. I haven’t tried this library on anything but a Diecimila, so YMMV.

The most useful functions:
Tlc.analogWrite(channel (0 – 15), value (0 – 4095), chip (0 – n));
Tlc.analogWriteAll(value (0- 4095), chip (0 – n));
Tlc.setPWMperiod(PWM period (0 – n) milliseconds);

TLC5940.zip:
http://students.washington.edu/acleone/codes/arduino_TLC5940_library/TLC5940.zip

Browse the library:
http://students.washington.edu/acleone/codes/arduino_TLC5940_library/TLC5940/

In progress: TLC5940 Servo Library

MAX/MSP to MIDI resources links

September 9, 2008

Arduino site:   http://www.arduino.cc/playground/Interfacing/MaxMSPh

관련사이트 링크들:      http://www.arts.rpi.edu/crb/iap/maxmidi.html

관련프로젝트 사이트: http://itp.nyu.edu/~ts1200/blog/?p=162

우선 MAX/MSP의 Tutorials 폴더를 보면 MIDI관련 Tutorial이 있으니 한번 해 보세요.

GOOD LUCK!

아듀니오 나노

July 16, 2008

안녕?

모두 여름방학을 알차게 보내고 있으리라고 믿어요.   작업중 발견한 건데, 아듀니오미니보다 나은 아듀니오 나노가 나와서 알리기 위해 올립니다.  (아이파드인가?  미니에서 나노로가게요?  ^^)

http://www.arduino.cc/en/Main/ArduinoBoardNano

위의 링크에 자세히 나와있고요, 장점은 아듀니오 릴리나 아듀니오미니처럼 부터를 따로 쓰지않아도 된다는 점.  그리고 핀이 달려있는 것을 구입하면 브레드보드에 바로 꽂아 쓸수있다는 장점이 있지요.  (디엠듀니오 처럼!)

기말_프로토타입 제작

June 18, 2008

실험 3에서 조형적인 부분에 대해서 덧붙여 프레젠테이션 한 것입니다.

——————————————————————————-

int motorPin0 = 2; //the H bridge takes two outputs from the Arduino to control the motor.

int motorPin1 = 3;  

int state = 0; //declare the state variable 

int value = 0;        

int val;

int porPin = 1;  

int ledPin = 9;                      

 

 

void setup() {

  pinMode(motorPin0, OUTPUT);   //the motor control wires are outputs

  pinMode(motorPin1, OUTPUT);

  pinMode(ledPin, OUTPUT); 

  pinMode(porPin, INPUT);  //cds input

  Serial.begin(9600);

}

void loop() {

  val = analogRead(porPin); //read the pot

  Serial.println(val);

  if (val>=600) {

    digitalWrite(motorPin0, HIGH);

    digitalWrite(motorPin1, LOW);

    for(value = 0 ; value <= 255; value+=5) // fade in (from min to max) 

    { 

      analogWrite(ledPin, value);  // sets the value (range from 0 to 255) 

      delay(30);     // waits for 30 milli seconds to see the dimming effect 

    } 

    for(value = 255; value >=0; value-=5)   // fade out (from max to min) 

    { 

      analogWrite(ledPin, value); 

      delay(30); 

    }  

  }

  else {

    digitalWrite(motorPin0, LOW);

    digitalWrite(motorPin1, LOW);

  }

}

—————————————
코드는 포토셀 값이 커지면 (어두워 지면) 모터가 움직여 앞으로 가게 되고 그러는 동안에 LED 가 숨쉬듯 페이드 인, 아웃 을 하게 되고, 다시 포토셀 값이 작아지면 (밝아지면) 멈추게 되는 원리 입니다.

실험3

June 18, 2008

실험2의 발전 사항으로서 바퀴를 4개로 늘려서 안정감을 더 하게 되었습니다. 그리고 개수를 늘임에 따라 크기는 더욱 작은것으로 하게 되어 이전의 큰 모터 한개로 2개의 바퀴를 돌리게 되던 방식과는 다르게 4개의 모터를 한꺼번에 돌리게 되었습니다.

그리고 그러한 사항이 바뀜에 따라서 브레드 모드의 모양도 기존의 긴사각형에서 거의 정사각형으로 변화하게 되었습니다.

먼저  L293 (Drive IC) 의 경우에 모터를 2개만 받게 되어있는데, 라인을 브레드 보드로 빼서 4개가 들어갈 수 있도록 하였고, 2개의 모터는 결국 반대 방향으로 돌아가게 되는데 (+ -) 를 브레드 보드에 꽂을때 반대로 꽂게 되면 4개가 앞으로 전진하도록 할 수 있게 됩니다.

 

그리고 여러 방향으로 인풋을 아직 조사 중이기 때문에 우선적으로 cds 를 사용하여 진행하기로 하였습니다.

 

보완해야 할점 입니다.
1. 유선으로 연결된 USB 외의 무선으로 작동 할 수 있는 전원 공급이 되어야 한다.
 : 여기에 관해서 9V를 사용해 보았는데, 모터 4개를 돌리기에는 전압은 되지만 전류값이 약해서 작동되지 않았습니다.
그리고 9V 어댑터의 경우는 작동은 되나 역시 미약해서 바퀴가 지면에 닿으면 마찰력을 이겨내지 못해서 움직이지 않았습니다. 그래서 여러 방도로 알아본 결과는 충전지를 여러개를 사용하는 것인데, 충전지는 일반 건전지와 달라서 1A 이상의 값을 낸다고 하였습니다.
그래서 충전지를 사서 직렬연결을 하였는데, 전선으로 건전지 양극에 납땜하는 일이 쉽지 않았습니다. 재질이 스테인리스같은 재질이고 또한 건전지는 열이 가해 지면 손상되거나 수명이 떨어지게 되는 관계로 빠르게 고온으로 붙여야 했습니다. 그래서 샌드페이퍼로 표면을 거칠게 한 다음 충분히 뜨거운 인두로 중력을 이용해 납을 떨어뜨려 납땜 하여 직렬로 연결하였습니다.
그러나 문제점은 직렬로 연결하여 암페어나 볼트는 충분하게 되었지만, 볼트를 맞추려고 하다보니 AA건전지의 개수가 4개 가량 (1.2V *4=4.8V) 필요하게 되는데 생각보다 무게가 많이 나가서 브레드 보드 위에 올리게 되니까 모터나 여러 장치들이 무게를 견디지 못해 작동할 수가 없었습니다. 
따라서 다른 전원공급에 대해 알아보고 , 
AA건전지로 하게 될 경우에는 디자인적으로 무게를 수용가능한 방향으로 수정이 되어야 하겠습니다.
2. 음악의 제어
: 음악의 제어는 프로세싱을 연동해서 사용할 수 있는데, 이것또한 시리얼값을 주고 받아야 하는 문제로 유선이 되어야 합니다. 그러나 이 문제는 블루투스 같은 장치 없이는 대체 하기 어려운 것으로 보아서 노래를 다르게 제어하는 방향을 찾아야 합니다.

 

Lighting Flower

June 4, 2008

Lighting Flower 1.2 

Lighting Flower는 빛에 반응하고, 빛을 반사하는 꽃을 말합니다.

이것은 완성된 작품이 아닌, 하나의 독립된 모듈로 다른 작품들에 응용할 수 있도록 제작되었습니다. Lighting Flower가 응용된 작품은 Lighting Chair, Flowall, 각종 퍼포먼스에 응용되었습니다.

 

Lighting Flower의 초기 모델은 철사와 반사판을 이용해 단순히 빛을 반사시키며 돌아가는 형태였습니다.

꽃잎이 펴졌다 닫혔다를 했으면 좋겠다는 김영희 교수님 의견을 듣고 Lighting Flower는 1.2 버전으로 진화하기위해 다시 옷을 벗고 초기 디자인부터 다시하게 됩니다.

 메카닉 디자인 ideation 입니다. 진주현 학생의 도움을 받아 제작하게 되었습니다.

버젼 1.1의 진정한 Stupid Pet trick Version 입니다.이것에 디자인을 하여 탄생한 녀석이 아래의 Lighting Flower 1.2 버젼입니다.
꽃잎이 열고 닫히니 확실히 화려하고 Robotic한 분위기가 나게됩니다.

단지 꽃잎을 열기 위해 만든 하단의 회전축이 너무 커서 디자인이 굉장히 까다롭습니다.
1.3으로 진화하기 위해선 처음부터 다시 디자인을 해야할 필요성을 느낍니다.


http://www.flickr.com/photos/absurdee/2494433496/

+
아듀이노 워크샵때 배포한 코드 입니다. 보통 Servo 모터는 for문으로 구현하는 경우가 대부분인데
for문의 경우 한번 코드에 들어가면 나올수가 없기때문에 순간적인 빛 감지에 반응하기가 어렵습니다.
If 문으로 짠 코드입니다, 초기에 빛값과 후의 빛값을 비교하여 빛의 차이를 감지하여 모터를 돌리는 소스입니다.
필요하신 분들은 참과 바랍니다.
—————————————————————————
#include <Servo.h>

Servo servo1;
Servo servo2;

int cds;
int cdsint[3];
int intval;
int nowLight;
int sens=100;
int t1=0,t2;

void setup()
{
  servo1.attach(14);
  servo1.setMaximumPulse(2200);
  servo2.attach(15); 
  Serial.begin(9600);
  cdsStart(5);
}

void loop()
{     
  cdsRead(5);
  if(nowLight>=sens) {
    if(t1<=180) {
      servo1.write(t1);
      servo2.write(t1);
      t1=t1+1;
      Servo::refresh();
      if(t1>=180) {
        t2=180;
      }
    } else {
      servo1.write(t2);
      servo2.write(t1);
      t2=t2-1;
      Servo::refresh();
      if(t2<=0) {
        t1=0;
      }     
    }
  }
}

void cdsStart(int Pin) {
  cdsint[0] = analogRead(Pin);
  Serial.println(cdsint[0]);
  delay(500);
  cdsint[1] = analogRead(Pin);
  Serial.println(cdsint[1]);
  delay(500);
  cdsint[2] = analogRead(Pin);
  Serial.println(cdsint[2]);
  delay(500);
  intval = (cdsint[0]+cdsint[1]+cdsint[2])/3; 
  Serial.print(“Intitial Light val in 5 Pin =”);
  Serial.print(intval);
  delay(2000);
}

void cdsRead(int Pin) {
  cds = analogRead(Pin);
  nowLight = cds – intval;
  Serial.println(nowLight);
}
—————————————————————————

flash + zinc 를 아듀니오와 연동하는 source @ phyCom cafe

May 22, 2008

http://cafe.naver.com/physicalcomputing.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=77#

지난번에 수업중에 와서 발표를 했던 진환군이 후배들을 위해 친절하게 플래시로 시리얼 통신하는 법을 올려놓았네요.

참고하세요~

…Y

arduino code sample: 6 switches + 6 output (LEDs)

May 19, 2008

여러분, 참고하세요~ 5월21일 아듀니오 워크샵합니다. 그다음주에는 이 블로그에 다큐멘팅된 사이트로 발표할 계획이니 “post”빨리 만드세요. 이번주 금요일에 체크하여 학점에 반영됩니다. 테크박스도 설명 넣으세요!

김영희 교수 :-)

아래는 6개의 스위치 인풋을 사용하여 6개의 다른 LED를 키는 코드 샘플입니다.

—————————————————————————

// intialize your LEDs on their appropriate Digital pins

int ledPin5 = 5;
int ledPin6 = 6;
int ledPin9 = 9;
int ledPin10 = 10;
int ledPin11 = 11;
int ledPin13 = 13;

// same goes for the switches. Each switch according to its input on the Arduino
int switchPin2 = 2;
int switchPin3 = 3;
int switchPin4 = 4;
int switchPin7 = 7;
int switchPin8 = 8;
int switchPin12 = 12;
// initialize the state of each switch. Start them in the OFF position.
int switchState1 = 0;
int switchState2 = 0;
int switchState3 = 0;
int switchState4 = 0;
int switchState5 = 0;
int switchState6 = 0;

int inByte = 0;

void setup(){
Serial.begin(9600);
//set each switch as an INPUT, using the pinMode function

pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);
pinMode(switchPin4, INPUT);
pinMode(switchPin7, INPUT);
pinMode(switchPin8, INPUT);
pinMode(switchPin12, INPUT);

//set each LED as an OUTPUT, using the pinMode function pinMode(ledPin5, OUTPUT);

pinMode(ledPin6, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(ledPin13, OUTPUT);
}

void loop(){

// the state of your switch means READING the switch. Use digitalRead command

switchState1 = digitalRead(switchPin2);
switchState2 = digitalRead(switchPin3);
switchState3 = digitalRead(switchPin4);
switchState4 = digitalRead(switchPin7);
switchState5 = digitalRead(switchPin8);
switchState6 = digitalRead(switchPin12);

// if your switch state reads “on“, then…

if(switchState1 == 1){
digitalWrite(ledPin5, HIGH);
Serial.print(“switch1=”);
Serial.println(switchState1,BIN);

}
else{
digitalWrite(ledPin5, LOW);
Serial.print(“switch1=”);
Serial.println(switchState1,BIN);
}

if(switchState2 == 1){
digitalWrite(ledPin6, HIGH);
Serial.print(“switch2=”);
Serial.println(switchState2,BIN);
}
else{
digitalWrite(ledPin6, LOW);
Serial.print(“switch2=”);
Serial.println(switchState2,BIN);
}

if(switchState3 == 1){
digitalWrite(ledPin9, HIGH);
Serial.print(“switch3=”);
Serial.println(switchState3,BIN);
}
else{
digitalWrite(ledPin9, LOW);
Serial.print(“switch3=”);
Serial.println(switchState3,BIN);
}

if(switchState4 == 1){
digitalWrite(ledPin10, HIGH);
Serial.print(“switch4=”);
Serial.println(switchState4,BIN);
}
else{
digitalWrite(ledPin10, LOW);
Serial.print(“switch4=”);
Serial.println(switchState4,BIN);
}

if(switchState5 == 1){
digitalWrite(ledPin11, HIGH);
Serial.print(“switch5=”);
Serial.println(switchState5,BIN);
}
else{
digitalWrite(ledPin11, LOW);
Serial.print(“switch5=”);
Serial.println(switchState5,BIN);
}

if(switchState6 == 1){
digitalWrite(ledPin13, HIGH);
Serial.print(“switch6=”);
Serial.println(switchState6,BIN);
}
else{
digitalWrite(ledPin13, LOW);
Serial.print(“switch6=”);
Serial.println(switchState6,BIN);
}
}

——————————————————————

한글로 설명을 덧붙인 코드는 아래와 같습니다.

// your LED를 Digital pins 번호와 동일하게 intialize 한다

int ledPin5 = 5;
int ledPin6 = 6;
int ledPin9 = 9;
int ledPin10 = 10;
int ledPin11 = 11;
int ledPin13 = 13;

// 스위치도
int switchPin2 = 2;
int switchPin3 = 3;
int switchPin4 = 4;
int switchPin7 = 7;
int switchPin8 = 8;
int switchPin12 = 12;

// 각 스위치의 상태를 initialize한다.  OFF상태에서 시작한다.
int switchState1 = 0;
int switchState2 = 0;
int switchState3 = 0;
int switchState4 = 0;
int switchState5 = 0;
int switchState6 = 0;

int inByte = 0;

void setup(){

//9600은 baud rate입니다.  (baud rate 설명은 아래에 있습니다.)
Serial.begin(9600);

//각 스위치를 INPUT으로 pinMode function을 사용하여 이니셜한다.

pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);
pinMode(switchPin4, INPUT);
pinMode(switchPin7, INPUT);
pinMode(switchPin8, INPUT);
pinMode(switchPin12, INPUT);

// 각 LED를 OUTPUT으로 pinMode function을 사용하여 이니셜한다.

pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(ledPin13, OUTPUT);
}

void loop(){

// the state of your switch는 digitalRead command를 사용하여 스위치를 READING함을 뜻한다.

switchState1 = digitalRead(switchPin2);
switchState2 = digitalRead(switchPin3);
switchState3 = digitalRead(switchPin4);
switchState4 = digitalRead(switchPin7);
switchState5 = digitalRead(switchPin8);
switchState6 = digitalRead(switchPin12);

// if your switch state reads “on“, then…

if(switchState1 == 1){
// ledPin5를 켜라
digitalWrite(ledPin5, HIGH);

// switch1= 을 시리얼모니터에 프린트함.
Serial.print(“switch1=”);

// binary 즉 0와1 상태를 한라인에 프린트하는 function, 8bit data를 읽을 경우에는 BYTE를 사용한다.
Serial.println(switchState1,BIN);

}
else{
digitalWrite(ledPin5, LOW);
Serial.print(“switch1=”);
Serial.println(switchState1,BIN);
}

if(switchState2 == 1){
digitalWrite(ledPin6, HIGH);
Serial.print(“switch2=”);
Serial.println(switchState2,BIN);
}
else{
digitalWrite(ledPin6, LOW);
Serial.print(“switch2=”);
Serial.println(switchState2,BIN);
}

if(switchState3 == 1){
digitalWrite(ledPin9, HIGH);
Serial.print(“switch3=”);
Serial.println(switchState3,BIN);
}
else{
digitalWrite(ledPin9, LOW);
Serial.print(“switch3=”);
Serial.println(switchState3,BIN);
}

if(switchState4 == 1){
digitalWrite(ledPin10, HIGH);
Serial.print(“switch4=”);
Serial.println(switchState4,BIN);
}
else{
digitalWrite(ledPin10, LOW);
Serial.print(“switch4=”);
Serial.println(switchState4,BIN);
}

if(switchState5 == 1){
digitalWrite(ledPin11, HIGH);
Serial.print(“switch5=”);
Serial.println(switchState5,BIN);
}
else{
digitalWrite(ledPin11, LOW);
Serial.print(“switch5=”);
Serial.println(switchState5,BIN);
}

if(switchState6 == 1){
digitalWrite(ledPin13, HIGH);
Serial.print(“switch6=”);
Serial.println(switchState6,BIN);
}
else{
digitalWrite(ledPin13, LOW);
Serial.print(“switch6=”);
Serial.println(switchState6,BIN);
}
}

———————————————————————–

baud rate
baud는 변조속도, 즉 컴퓨터의 디지털 신호를 전화선을 통해 전달될 수 있는 아날로그 신호로 바꿔주는 속도를 나타낸다. 프랑스의 발명가 Jean Maurice Emile Baudot가 만든 단위로 예전에는 전신기를 조작할 때 초당 전송하는 클록의 숫자를 나타낼 때 사용했던 단위이지만 현재는 1초에 변조할 수 있는 횟수를 나타낸다.

공지 week7 의 주요내용

April 17, 2008

7주 presentation .key 화일 중 그때 부탁한 주요 요점만 올립니다. 그럼 열심히 공부하세요. ^^

다음주 아듀니오 워크샵 준비물:
breadboard (빵판,) 아듀니오 보드, 전선, 스트리퍼(wire stripper,) LEDs, 스위치, USB 케이블(프린터 연결할 때 사용하는 것) 10K Ohm 저항, 노트북 (가변저항 – Potentiometer)
(2명이 한조로 작업해 볼것)

http://www.arduino.cc 로 가서 본인의 OS에 맞는 아듀니로 소프트웨어와 USB Driver를 다운로드받아야 하니, Netspot ID를 준비해 오거나 미리 다운로드 받아올 것. 설치는 수업 중 같이 합니다.

——————————————————————————

기말 프로젝트(졸전) 주제:
졸전: “확장” 인터렉션디자인스튜디오: “흐름 (flow)”자연속의 디지탈

Digital Technology속에서 사는 우리에게 “확장(expand, spread, evolve, transmit, pushing the boundary)” 이란 무슨 의미인가? (개인적, 사회적, 문화적, 세계적)

Interaction에서 우리는 어떻게 진화 및 변화해 가고 있나?

———————————————–

기말 프로젝트 (졸전 포함)을 위한 완성된 기획서 프레젠테이션에는 아래와 같은 내용이 들어있어야 합니다:

작품명 (부제라도…)
팀구성원과 역할, 작업계획
작품 설명 (Abstract + Key Words) – 한 문장으로 이해할 수 있도록 명확히 서술합니다.
배경 리서치(작품동기와 역사, 사회적 배경, 과거의 비슷한 작품 레퍼런스 등등),
디자인 리서치, 기술과 자재 리서치
콘텐츠 리서치 (해당되는 경우)
디자인 콘셉트 (작품전체의 Concept를 말한다)

Tech Spec (기술적 구현 방안 – input / output / sensors)

피컴일 경우: 조형적 디자인 스케치, 유저 시나리오

영상인터렉션물일 경우: Design Direction, mood
유저 인터렉션, 인터페이스 디자인 방안
Timeline
디스플레이 플랜

*졸전작품과 병행할 경우; 기말프로젝트까지 구현할 프로토타입 기획안도 포함.

——————————————————————–

인터렉션 기말 프로젝트 요건

개인 프로젝트 또는 팀 프로젝트로 진행할 수 있다

매주 프로젝트 경과를 클래스에서 발표 또는 컨펌 받으며 진행과정을 웹사이트에 다큐멘트한다.

예) http://dmd07.wordpress.com

사용자나 관객의 심리와 행동과 그에 따른 경험을 잘 이해하고 디자인을 하여야 하며, 사회적, 문화적 영향을 잘 간파하여 디자인 컨셉트를 발전시키되 기술적인 문제해결과 사용자 친화적 디자인을 동시에 충족시켜야 한다.

*졸전과 함께 병행하는 작품은 기말 프로젝트 발표 때 적어도 소규모라도 인터렉션 디자인이 구현이 된 작품을 발표합니다.

———————————————————————————

피컴 프로젝트 진행에 있어서

  • 자재나 기술, 센서의 실험의 중요성
  • 디자인 실행 테스트의 중요성
  • 이런 실험들은 제작 전에 미리 실행되어야 한다
  • 본인이 표현하고자 하는 것이 아니라면 실험단계에서 과감하게 버리고 다시 찾아라.
  • 컨셉을 잊지말자: 기술의 유혹과 기술적인 문제 해결 난의 함정에 빠지지 말자
  • 기술적인 문제를 다른 길로 돌아서 피해가는 것도 기술이다.
  • 계획과 정리를 잘 해서 진행해야 나중에 에러를 파악하여 수정하기가 쉽다.

* 참고로 수업 중 소개된 여러 센서는 http://www.sparkfun.com 를 레퍼런스 함. 전도성 천이나 다른 자재물의 구입처는 따로 연락을 하세요.