互動技術期末作品
作品名稱:LED Cube 8x8x8
作品介紹:
此作品欲達成裸視3D的效果,並使觀眾能從任何角度欣賞動畫,創作過程使用512顆燈泡並依照8x8x8的架構進行焊接,底板晶片使用Arduino UNO來燒錄動畫程式,未來展望欲將體感裝置和此作品藉由PC溝通產生出新的體感操作模式,讓觀眾和展演者能不拘泥於任何方位demo都無觀賞死角,謝謝大家。
2014年1月12日 星期日
2013年12月15日 星期日
Week14魏正
期末企劃
上課時看到老師播的LED Cube的影片,發現此作品可以達成裸視3D且任何角度都可以觀賞動畫,學生也想要訂製材料,手工做一個LED Cube出來,且此作品的未來展望是搭配上體感Sensor然後跟LED Cube互動,這樣的結合可以使觀眾和操縱者不侷限在同一方位也可以欣賞到展示。
LED Cube
上課時看到老師播的LED Cube的影片,發現此作品可以達成裸視3D且任何角度都可以觀賞動畫,學生也想要訂製材料,手工做一個LED Cube出來,且此作品的未來展望是搭配上體感Sensor然後跟LED Cube互動,這樣的結合可以使觀眾和操縱者不侷限在同一方位也可以欣賞到展示。
LED Cube
Week13魏正
Project05
#include <Servo.h>
Servo myServo;
int const potPin = A0;
int potVal;
int angle;
void setup(){
myServo.attach(9);
Serial.begin(9600);
}
void loop(){
potVal = analogRead(potPin);
Serial.print("potVal");
Serial.print(potVal);
angle = map(potVal, 0, 1023, 0, 179);
Serial.print(", angle: ");
Serial.println(angle);
myServo.write(angle);
delay(15);
}
Servo myServo;
int const potPin = A0;
int potVal;
int angle;
void setup(){
myServo.attach(9);
Serial.begin(9600);
}
void loop(){
potVal = analogRead(potPin);
Serial.print("potVal");
Serial.print(potVal);
angle = map(potVal, 0, 1023, 0, 179);
Serial.print(", angle: ");
Serial.println(angle);
myServo.write(angle);
delay(15);
}
Project06
int sensorValue;
int sensorLow = 1023;
int sensorHigh = 0;
const int ledPin = 13;
void setup(){
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
while(millis()<5000){
sensorValue = analogRead(A0);
if(sensorValue > sensorHigh){
sensorHigh = sensorValue;
}
if(sensorValue < sensorLow){
sensorLow = sensorValue;
}
}
digitalWrite(ledPin, LOW);
}
void loop(){
sensorValue = analogRead(A0);
int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);
tone(8, pitch, 20);
delay(10);
}
int sensorLow = 1023;
int sensorHigh = 0;
const int ledPin = 13;
void setup(){
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
while(millis()<5000){
sensorValue = analogRead(A0);
if(sensorValue > sensorHigh){
sensorHigh = sensorValue;
}
if(sensorValue < sensorLow){
sensorLow = sensorValue;
}
}
digitalWrite(ledPin, LOW);
}
void loop(){
sensorValue = analogRead(A0);
int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);
tone(8, pitch, 20);
delay(10);
}
Project07
int notes[] = {262, 294, 330, 349};
void setup(){
Serial.begin(9600);
}
void loop(){
int keyVal = analogRead(A0);
Serial.println(keyVal);
if(keyVal == 1023){
tone(8, notes[0]);
}
else if(keyVal >= 990 && keyVal <= 1010){
tone(8, notes[1]);
}
else if(keyVal >= 505 && keyVal <= 515){
tone(8, notes[2]);
}
else if(keyVal >= 5 && keyVal <= 10){
tone(8, notes[3]);
}
else{
noTone(8);
}
}
int notes[] = {262, 294, 330, 349};
void setup(){
Serial.begin(9600);
}
void loop(){
int keyVal = analogRead(A0);
Serial.println(keyVal);
if(keyVal == 1023){
tone(8, notes[0]);
}
else if(keyVal >= 990 && keyVal <= 1010){
tone(8, notes[1]);
}
else if(keyVal >= 505 && keyVal <= 515){
tone(8, notes[2]);
}
else if(keyVal >= 5 && keyVal <= 10){
tone(8, notes[3]);
}
else{
noTone(8);
}
}
Week12魏正
Project 02
int switchState = 0;
void setup()
{
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(2,INPUT);
}
void loop()
{
switchState = digitalRead(2);
if(switchState == LOW)
{
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
else
{
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
delay(250);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
delay(250);
}
}
Project 03
const int sensorPin = A0;
const float baselineTemp = 20.0;
void setup(){
Serial.begin(9600);
for(int pinNumber = 2; pinNumber<5; pinNumber++){
pinMode(pinNumber,OUTPUT);
digitalWrite(pinNumber, LOW);
}
}
void loop(){
int sensorVal = analogRead(sensorPin);
Serial.print("Sensor Value:");
Serial.print(sensorVal);
float voltage = (sensorVal/1024.0)*5.0;
Serial.print(", Volts:");
Serial.print(voltage);
Serial.print(", degrees C:");
float temperature = (voltage - .5)*100;
Serial.println(temperature);
if(temperature < baselineTemp){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
else if(temperature >= baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1);
}
Project 04
const int greenLEDPin = 9;
const int redLEDPin = 10;
const int blueLEDPin = 11;
const int redSensorPin = A0;
const int greenSensorPin = A1;
const int blueSensorPin = A2;
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
int redSensorValue = 0;
int greenSensorValue = 0;
int blueSensorValue = 0;
void setup(){
Serial.begin(9600);
pinMode(greenLEDPin,OUTPUT);
pinMode(redLEDPin,OUTPUT);
pinMode(blueLEDPin,OUTPUT);
}
void loop(){
redSensorValue = analogRead(redSensorPin);
delay(5);
greenSensorValue = analogRead(greenSensorPin);
delay(5);
blueSensorValue = analogRead(blueSensorPin);
Serial.print("Raw Sensor Values \t Red");
Serial.print(redSensorValue);
Serial.print("\t Green:");
Serial.print(greenSensorValue);
Serial.print("\t Blue:");
Serial.print(blueSensorValue);
redValue = redSensorValue/4;
greenValue = greenSensorValue/4;
blueValue = blueSensorValue/4;
Serial.print("Mapped Sensor Values \t Red:");
Serial.print(redValue);
Serial.print("\t Green:");
Serial.print(greenValue);
Serial.print("\t Blue:");
Serial.print(blueValue);
analogWrite(redLEDPin, redValue);
analogWrite(greenLEDPin, greenValue);
analogWrite(blueLEDPin, blueValue);
}
int switchState = 0;
void setup()
{
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(2,INPUT);
}
void loop()
{
switchState = digitalRead(2);
if(switchState == LOW)
{
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
else
{
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
delay(250);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
delay(250);
}
}
Project 03
const int sensorPin = A0;
const float baselineTemp = 20.0;
void setup(){
Serial.begin(9600);
for(int pinNumber = 2; pinNumber<5; pinNumber++){
pinMode(pinNumber,OUTPUT);
digitalWrite(pinNumber, LOW);
}
}
void loop(){
int sensorVal = analogRead(sensorPin);
Serial.print("Sensor Value:");
Serial.print(sensorVal);
float voltage = (sensorVal/1024.0)*5.0;
Serial.print(", Volts:");
Serial.print(voltage);
Serial.print(", degrees C:");
float temperature = (voltage - .5)*100;
Serial.println(temperature);
if(temperature < baselineTemp){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
else if(temperature >= baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1);
}
const int greenLEDPin = 9;
const int redLEDPin = 10;
const int blueLEDPin = 11;
const int redSensorPin = A0;
const int greenSensorPin = A1;
const int blueSensorPin = A2;
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
int redSensorValue = 0;
int greenSensorValue = 0;
int blueSensorValue = 0;
void setup(){
Serial.begin(9600);
pinMode(greenLEDPin,OUTPUT);
pinMode(redLEDPin,OUTPUT);
pinMode(blueLEDPin,OUTPUT);
}
void loop(){
redSensorValue = analogRead(redSensorPin);
delay(5);
greenSensorValue = analogRead(greenSensorPin);
delay(5);
blueSensorValue = analogRead(blueSensorPin);
Serial.print("Raw Sensor Values \t Red");
Serial.print(redSensorValue);
Serial.print("\t Green:");
Serial.print(greenSensorValue);
Serial.print("\t Blue:");
Serial.print(blueSensorValue);
redValue = redSensorValue/4;
greenValue = greenSensorValue/4;
blueValue = blueSensorValue/4;
Serial.print("Mapped Sensor Values \t Red:");
Serial.print(redValue);
Serial.print("\t Green:");
Serial.print(greenValue);
Serial.print("\t Blue:");
Serial.print(blueValue);
analogWrite(redLEDPin, redValue);
analogWrite(greenLEDPin, greenValue);
analogWrite(blueLEDPin, blueValue);
}
Week11魏正
改寫File-Examples-Basic-Blink
1.
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
2.
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(led, LOW);
digitalWrite(10, LOW);
delay(500);
for(int i=0;i<3;i++)
{
digitalWrite(led, HIGH);
delay(200);
digitalWrite(10, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(200);
digitalWrite(10, LOW);
delay(200);
}
}
1.
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
2.
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(led, LOW);
digitalWrite(10, LOW);
delay(500);
for(int i=0;i<3;i++)
{
digitalWrite(led, HIGH);
delay(200);
digitalWrite(10, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(200);
digitalWrite(10, LOW);
delay(200);
}
}
2013年11月10日 星期日
2013年10月20日 星期日
Week07 魏正
1.請列出今天課程要完成的進度
1.1尋找Google Earth的相關API
1.2思索開發環境
1.3尋找可以判斷手勢的方法
1.4將程式碼雛形完成
2.期中作品預計進度
2.1能夠將手勢辨識的程式碼實踐出來
2.2將程式碼結合Google Earth
2.3能夠拍出展示影片
2.4現場Demo
3.為什麼要做?
為突破觸控與平面的互動操作模式,
藉由Xtion PRO的感測搭配PrimeSense的手部抓取辨識功能,
讓使用者可以直覺的使用手部拖曳、旋轉與抓取縮放展示畫面,
並可在畫面中藉由抓取提筆的動作來繪製手部軌跡,
Demo中將把此軟體應用於google earth與stellarium,
給使用者如科幻片中探索地標與星空的操作情境。
1.1尋找Google Earth的相關API
1.2思索開發環境
1.3尋找可以判斷手勢的方法
1.4將程式碼雛形完成
2.期中作品預計進度
2.1能夠將手勢辨識的程式碼實踐出來
2.2將程式碼結合Google Earth
2.3能夠拍出展示影片
2.4現場Demo
3.為什麼要做?
為突破觸控與平面的互動操作模式,
藉由Xtion PRO的感測搭配PrimeSense的手部抓取辨識功能,
讓使用者可以直覺的使用手部拖曳、旋轉與抓取縮放展示畫面,
並可在畫面中藉由抓取提筆的動作來繪製手部軌跡,
Demo中將把此軟體應用於google earth與stellarium,
給使用者如科幻片中探索地標與星空的操作情境。
2013年10月13日 星期日
2013年10月6日 星期日
2013年9月29日 星期日
2013年9月22日 星期日
Week03魏正
1. 今天目標: 畫出一個五子棋
1.1. 使用 Tool- Color Selector, 挑出你要的顏色, 可用 R,G,B 來描述,也可用 #0B33FF 之類的數字來設定顏色
1.2. 要畫外框,可以用 rect()來畫, 要修改填充的顏色可以用fill(), 要讓畫的內部不要填充, 可以查看 Help-Reference 後,在 fill()樓上樓下相關的地方找到你要的功能 (ex. noFill() )
1.3. 使用 stroke() 來調畫線stroke的顏色, 在 Help-Reference 裡面可以找 stroke 相關的功能,像是比較粗的 stroke 可以用 strokeWeight() 來設定權重粗細
1.4. 想要畫裡面的細黑線,可以用 line() 來畫,配上不同的 strokeWeight() 粗細
貼你覺得有意思的影片, 使用youtube 的分享, Blogger 分享, 兩邊都改成 HTML, 貼上 HTML
1.1. 使用 Tool- Color Selector, 挑出你要的顏色, 可用 R,G,B 來描述,也可用 #0B33FF 之類的數字來設定顏色
1.2. 要畫外框,可以用 rect()來畫, 要修改填充的顏色可以用fill(), 要讓畫的內部不要填充, 可以查看 Help-Reference 後,在 fill()樓上樓下相關的地方找到你要的功能 (ex. noFill() )
1.3. 使用 stroke() 來調畫線stroke的顏色, 在 Help-Reference 裡面可以找 stroke 相關的功能,像是比較粗的 stroke 可以用 strokeWeight() 來設定權重粗細
1.4. 想要畫裡面的細黑線,可以用 line() 來畫,配上不同的 strokeWeight() 粗細
2.1. 請去找一下 Processing 寫出來的作品
2.2. 用 Youtube 分享,按Blogger 把 HTML的 <iframe...> 貼在你的作業中
2.3. 下載 Processing
3. 寫出你的第一個Processing 程式碼: Hello World 變 Hello Kitty
4. 請找一張圖,用小畫家(mspaint)輔佐你,畫出你的 Processing 圖, 並都貼出來。
5. 請寫下你的心得 (1)你學了什麼東西(2)有什麼東西不懂(3)還想學什麼
(1)Processing2的基本語法與函示庫查詢
(2)還在研讀中
(3)絢麗特效-水波or煙火
2013年9月15日 星期日
Week02魏正
1.學生使用processing-2.0.1
2.for迴圈嘗試
3. http://processing.org/reference/
可查看官方內建函示
課堂作品1:
4.fill() 可填滿顏色, stroke()是外框顏色
課堂作品2:
5. 加入滑鼠互動技術,使用 mouseX 及 mouseY 的值,來進行運算
6. 亂數函示 random(0~上限數字) 來設定初始的亂數值
課堂作品3:
課堂心得:此門課程讓學生受益良多,簡短的程式碼卻可以達到豐富的效果,但速度有點快,學生有點來不及嘗試<(_ _)>
2.for迴圈嘗試
3. http://processing.org/reference/
可查看官方內建函示
課堂作品1:
4.fill() 可填滿顏色, stroke()是外框顏色
課堂作品2:
5. 加入滑鼠互動技術,使用 mouseX 及 mouseY 的值,來進行運算
6. 亂數函示 random(0~上限數字) 來設定初始的亂數值
課堂作品3:
課堂心得:此門課程讓學生受益良多,簡短的程式碼卻可以達到豐富的效果,但速度有點快,學生有點來不及嘗試<(_ _)>
2013年9月8日 星期日
Week01 魏正
課程準備
去年BLOG:2012interaction.blogspot.tw
1 加入課程FB社團:2013interaction(o)
2 編寫Google文件,填寫修課資料(姓名,email,手機)(o)
3 加入且設定Blog(0)
去年BLOG:2012interaction.blogspot.tw
1 加入課程FB社團:2013interaction(o)
2 編寫Google文件,填寫修課資料(姓名,email,手機)(o)
3 加入且設定Blog(0)
編交作業方式: tag: 000葉正聖老師, Week01, 00160011葉大明
逗號隔開, 學號姓名間不要有空格
1. 看一下去年學長姐們做的成果 (划船、吃角子老虎、數位手套、直昇機控制搖桿), 聖誔老公公下樓梯
2. 試著執行 Processing
size(600,600);
background(255, 0, 0);
rect(100,100, 200,200);
老師示範AngryBirds:
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/
size(600,600);
background(255, 0, 0);
rect(100,100, 200,200);
PImage imgBird=loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/bird.png");
PImage imgPig =loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/pig.gif");
image(imgBird, 0,0);
image(imgPig, 200,200, 100,100);
第三節課的範例
PImage imgBird, imgPig;
void setup() {
size(600, 600);
imgBird=loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/bird.png");
imgPig =loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/pig.gif");
imageMode(CENTER);
}
void draw() {
background(255, 0, 0);
image(imgBird, mouseX, mouseY);
image(imgPig, 200, 200, 100, 100);
}
https://class.coursera.org/digitalmedia-001/lecture/index
逗號隔開, 學號姓名間不要有空格
1. 看一下去年學長姐們做的成果 (划船、吃角子老虎、數位手套、直昇機控制搖桿), 聖誔老公公下樓梯
2. 試著執行 Processing
size(600,600);
background(255, 0, 0);
rect(100,100, 200,200);
老師示範AngryBirds:
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/
size(600,600);
background(255, 0, 0);
rect(100,100, 200,200);
PImage imgBird=loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/bird.png");
PImage imgPig =loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/pig.gif");
image(imgBird, 0,0);
image(imgPig, 200,200, 100,100);
第三節課的範例
PImage imgBird, imgPig;
void setup() {
size(600, 600);
imgBird=loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/bird.png");
imgPig =loadImage("http://www.cmlab.csie.ntu.edu.tw/~jsyeh/processing/angryBirdsBrick/pig.gif");
imageMode(CENTER);
}
void draw() {
background(255, 0, 0);
image(imgBird, mouseX, mouseY);
image(imgPig, 200, 200, 100, 100);
}
https://class.coursera.org/digitalmedia-001/lecture/index
訂閱:
文章 (Atom)


































