Arduino 互動裝置簡介
這塊小小的板子
原本感覺上會是唸資工之類的才會用到的東西
沒想到卻是許多互動設計會用得到的玩意兒
這個的功能就是讓設計者可以透過接線
然後利用板子上的程式
(不過,這程式是自己要先用電腦寫完,再存到這塊板子裡面)讓連接的裝置如LED、燈光等
產生一些動態的呈現
甚至可以利用按鈕之類的與使用者互動
舉例來說
有些展覽會要使用者按一下鈕
然後周圍的LED燈光就會開始變化
就可以用Arduino來做到
而不需要搬一台筆電來控制
他的USB孔是這種
接印表機用的
平常在寫程式時就要用這個接到電腦
他也可以直接吃USB的電
但是等到設計完之後當然就不希望東西還要再掛在電腦上
畢竟程式都已經存到這片裡面
所以直接用這邊的電源插電就好了
這樣就可以直接把這塊板子藏在天花板或牆壁中
他有分為數位輸出輸入和類比輸出輸入
數位的就是只有0跟1 (有或沒有)
類比的話就是可以有程度上的不同 (比方音量調大小、LED亮度調整大小等)
在板子的一邊有13個孔
下面標Digital代表是數位輸出/輸入用
(不過3、5、6、9、10、11還是可以拿來當類比輸出用)
另外0跟1基本上不要去使用它~
所以這邊至少有12個孔可以拿來用
另外GND代表接地
另一邊則也有類比(Analog)的6個孔
在一開始板子上是沒有任何程式在裡面的
我們要自己寫進去
而寫程式的介面跟語法跟Processing非常像
其實他就是基於Processing來的
非常高階的程式語言(也就是比較接近人話而不是機器語言、0跟1等等)
所以即便不是資訊科出身的人要學會
也不會太困難
程式介面長這樣:
他裡面有很多例子可以拿來參考或測試
然後也與Processing一樣
有Reference可以查他函式的說明
而一般玩Arduino
不可或缺的一個配件就是麵包板了
麵包板就是讓人接電線用的
藍的是一整橫排都是同一條電路
紅的也是一整橫排都是同一條電路
中間的則是一直行ABCDE是同一條
FGHIJ也是同一條
可以把它想成:
─────
─────
|||||||||
|||||||||
─────
─────
而這要怎麼接就是要看設計者怎麼安排了
最基本的讓LED亮燈看看
一般而言
從那0~13的孔(程式裡面要寫是哪一個號碼的孔!)
接到正極
而接地的是接到負極
當然也可以接得更複雜一些
包括電組、LED
還可以接按鈕
(左下角那顆)
簡單的李麥克霹靂遊俠燈~
用按鈕可以控制跑的速度
影片:http://www.youtube.com/watch?v=RpUGb_FT7zo
以下是程式:
int buttonFast = 2;
int buttonSlow = 7;
int ledNo[] = {3,5,6,9,10,11};
int fadeValue[] = {0,0,0,0,0,0};
int buttonFastState = 0;
int buttonSlowState = 0;
int nowFastPressing = 0;
int nowSlowPressing = 0;
int nowSpeed=100;
int nowNo=1;
int inverse=0;
int i=0;
//Setup-------------------------------------------------------------------------------
void setup() {
for(i=0;i<6;++i){
pinMode(ledNo[i], OUTPUT);
}
pinMode(buttonFast, INPUT);
pinMode(buttonSlow, INPUT);
}
//Loop-------------------------------------------------------------------------------
void loop(){
buttonFastState = digitalRead(buttonFast);
buttonSlowState = digitalRead(buttonSlow);
//Faster button
if (buttonFastState == HIGH) {
if(nowFastPressing ==0){
nowFastPressing=1;
if(nowSpeed>40){
nowSpeed-=10;
}
}
}
else {
if(nowFastPressing==1){
nowFastPressing=0;
}
}
//Slower button
if (buttonSlowState == HIGH) {
if(nowSlowPressing ==0){
nowSlowPressing=1;
if(nowSpeed<1000){
nowSpeed+=10;
}
}
}
else {
if(nowSlowPressing==1){
nowSlowPressing=0;
}
}
delay(nowSpeed);
nowNoSet();
lightUp();
}
void nowNoSet(){
if(nowNo==0){
inverse=0;
}
if(nowNo==5){
inverse=1;
}
if(inverse==0){
nowNo++;
}
else{
nowNo--;
}
}
void lightUp(){
for(i=0;i<6;++i){
if(i==nowNo){
fadeValue[i]=240;
analogWrite(ledNo[i], fadeValue[i]);
}
else{
if(fadeValue[i]>0){
fadeValue[i]-=40;
}
else{
fadeValue[i]=0;
}
analogWrite(ledNo[i], fadeValue[i]);
}
}
}
留言列表