2009年7月9日 星期四

再思作品的概念


+ 基於Game of life而來的三項規則,使用LED所產生的光暗效果,做出豐富的圖案。

+ 用「實物」去表現,加強觀眾對“活”的感覺。




Game of Life 的規則


Source: http://www.math.com/students/wonders/life/life.html

用Arduino寫成的Game of Life程式如下:

void  gameOfLife()
{
  for(int i=0; i<49;>
  {
    int thisLED = markLED[1][i];
    
    int y = i / 7;
    int x = i - y * 7;     

    int up = i - 7;
    int down = i + 7;   
    int left = i - 1;
    int right = i + 1;
    int n1 = markLED[1][up];
    int n2 = markLED[1][down];
    int n3 = markLED[1][left];
    int n4 = markLED[1][right];

    int leftUpCorner = i - 7 - 1;
    int rightUpCorner = i - 7 + 1;
    int leftDownCorner = i + 7 - 1;
    int rightDownCorner = i + 7 + 1;
    int n5 = markLED[1][leftUpCorner];
    int n6 = markLED[1][rightUpCorner];
    int n7 = markLED[1][leftDownCorner];
    int n8 = markLED[1][rightDownCorner];

    if (y == 0) n1 = n5 = n6 = 0;
    if (y == 6) n2 = n7 = n8 = 0;
    if (x == 0) n3 = n5 = n7 = 0;
    if (x == 6) n4 = n6 = n8 = 0;
 
    int numNeibr = n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8;

    if (thisLED == 0)  // Check Dead Cell
    {
      if (numNeibr == 3)
      {
        lc.setLed(0, y, x, true);
        markLED[0][x + y * 7] = 1;
      }
    }

    if (thisLED == 1)  // Check Live Cell
    {
      if (numNeibr <> 3) // die
      {
        lc.setLed(0, y, x, false);
        markLED[0][x + y * 7] = 0;
      } 
      if (numNeibr == 2 || numNeibr == 3) // live
      {
        lc.setLed(0, y, x, true);
        markLED[0][x + y * 7] = 1;
      }
    }
  }
}

(以上只是程式的一部分)

將這個程式upload到Arduino Board,可以使LED產生如同Game of Life的效果。

2009年6月12日 星期五

四號機

加上無線的功能,令觀眾可以遙控LED的亮或熄。



圖1:用Processing寫成的程式,以設定LED的位置,即X與Y的座標。

圖2:通過Processing控制Arduino,Arduino再連接無線遙控的發射組件,去控制四號機的LED。

圖3:無線遙控的發射組件。

圖4:在四號機內,加入無線遙控的接收組件。

圖5:無線遙控的接收組件。

2009年5月28日 星期四

如何製作兩組獨立的電源

在製作過程時,遇上一個難題,就是不能長期使用乾電池,因而要使用火牛(變壓器)提供電力。但當初的設計,Arduino的電源要與Motor的電源獨立分開供應,才能正常運作。所以,要為該作品設計一個電壓分配的電路,由一個火牛,分配出兩個完全獨立的電源(兩個電源的地線不能直接連接,兩個正極也是不能直接連接



經過多次試驗後,得出以下的電路,能成功使用在作品上

2009年4月24日 星期五

三號機


在之前的機身上再加上7x7的LED Matrix
(未來的完成品會改用8x8個的LED



LED Matrix是由兩粒4051去控制


2009年4月12日 星期日

原型二號


因之前的設計錯誤,下圖是經改正後重新製作的原型二號。



下圖是除去頂板後,內部的結構。同一樣也是用Arduino及L293D去控制摩打



今次,使用了坦克車車輪的設計。因它可以前後移動之外,還能夠原地自轉,解決了一般車輪會互相阻礙的問題。

2009年3月21日 星期六

原型一號


實驗作品的正面


這是我的試驗作,嘗試使用四個摩打,去推動圖中的方塊,分別作前後左右的移動。



作品的背面
使用Arduino去控制摩打的轉動。但這個試驗作品並不成功!未能達到預期的效果!

其原因是,使方塊左右移動的車輪組,與前後移動的車輪組成了90度角,當左右移動時,會被前後車輪組阻礙,以致不能運作!

2009年3月8日 星期日

用Arduino控制馬達--測試之三

用L293D去控制馬達

L293D與上一個測試,即使用晶體管的H-Bridge線路,有著相同的功能。而且它擁有兩組的H-Bridge,可同時控制兩個馬達。


Arduino、L293D和馬達的連接圖

Arduino亦能成功控制L293D,使馬達前後移動。



Arduino連接L293D去控制馬達


2009年3月4日 星期三

用Arduino控制馬達--測試之二

在上一個測試中,從玩具車的電子線路得出的概念,而設計出的H-Bridge線路,同樣可以使一個普通的馬達產生前後轉動的動作。





圖中玩具車的電子線路已被移去,用H-Bridge線路代替,Arduino亦能成功控制馬達的前後轉動。

2009年3月2日 星期一

用Arduino控制馬達的測試


圖中的馬達、齒輪和電子線路,是玩具車的組件。使用Arduino令到車輪能夠左右移動。
Arduino的程式碼如下:

int incomingKey = 0;
int ledPin0 = 13;
int ledPin1 = 12;
int moveA = 0;
int moveB = 0;

void setup()
{
pinMode(ledPin0, OUTPUT);
pinMode(ledPin1, OUTPUT);
Serial.begin(9600);
}

void loop()
{
if (Serial.available() > 0)
{
incomingKey = Serial.read();
//Serial.println (incomingByte);
}
if (incomingKey == 49) // key "1"
{
moveA = 1;
moveB = 0;;
}
if (incomingKey == 50) // key "2"
{
moveB = 1;
moveA = 0;
}

digitalWrite(ledPin0, moveA);
digitalWrite(ledPin1, moveB);
delay(100);
moveA = 0;
moveB = 0;
incomingKey = 0;
}

華容道

傳統遊戲對我的啟發

這是個傳統的遊戲,要在有限的空間內移動棋子,使曹操移到最下面的出口。
它是由一些規則所限,例如:只有一個出口,棋子大小與移動的限制,棋子位置等。




這是我的作品的基本概念,在一個有限空間內,將Arduino設計成能夠自我移動(只能上下左右)的一個元件,而由多個Arduino元件組成一個自由發展的作品。

2009年1月23日 星期五

Cell Game

<我的 Cell Game>


它是用Processing寫成的!

遊戲規則:

紅色圓形 = 女

藍色方形 = 男

男+男 = 消失

女+女 = 消失

男+女 = 體積增大


玩法:

mouse click 任何一個位置,就會生出一個男或女,它們會自動行走,男與男相碰,其中一個就會消失,女與女相碰也會使其中一個消失,男與女相碰,其中一個就會增大體積。

Goto The Cell Game

2009年1月16日 星期五

生命規律的法則

<規則>
從John Conway的Game Of Life引出的一個想法-------"規則"
不同的社會,都有自己的規則,這些規則都產生不同的文化和成就.
用簡單的幾條規則,可否創作出一個多變的藝術形式?



2009年1月14日 星期三

About My Project

<細胞自動機>