Arduino  

Arduino 互動裝置簡介

這塊小小的板子
原本感覺上會是唸資工之類的才會用到的東西
沒想到卻是許多互動設計會用得到的玩意兒

這個的功能就是讓設計者可以透過接線
然後利用板子上的程式
(不過,這程式是自己要先用電腦寫完,再存到這塊板子裡面)讓連接的裝置如LED、燈光等
產生一些動態的呈現
甚至可以利用按鈕之類的與使用者互動

舉例來說
有些展覽會要使用者按一下鈕
然後周圍的LED燈光就會開始變化
就可以用Arduino來做到
而不需要搬一台筆電來控制

Arduino

 

他的USB孔是這種
接印表機用的
平常在寫程式時就要用這個接到電腦
他也可以直接吃USB的電

Arduino

 

但是等到設計完之後當然就不希望東西還要再掛在電腦上
畢竟程式都已經存到這片裡面
所以直接用這邊的電源插電就好了
這樣就可以直接把這塊板子藏在天花板或牆壁中

Arduino

 

他有分為數位輸出輸入和類比輸出輸入
數位的就是只有0跟1 (有或沒有)
類比的話就是可以有程度上的不同 (比方音量調大小、LED亮度調整大小等)
在板子的一邊有13個孔
下面標Digital代表是數位輸出/輸入用
(不過3、5、6、9、10、11還是可以拿來當類比輸出用)

另外0跟1基本上不要去使用它~
所以這邊至少有12個孔可以拿來用
另外GND代表接地

Arduino

 

另一邊則也有類比(Analog)的6個孔

Arduino

 

在一開始板子上是沒有任何程式在裡面的
我們要自己寫進去
而寫程式的介面跟語法跟Processing非常像
其實他就是基於Processing來的
非常高階的程式語言(也就是比較接近人話而不是機器語言、0跟1等等)
所以即便不是資訊科出身的人要學會
也不會太困難

程式介面長這樣:

Arduino

 

他裡面有很多例子可以拿來參考或測試

Arduino

 

然後也與Processing一樣
有Reference可以查他函式的說明

 

Arduino

Arduino

 

而一般玩Arduino
不可或缺的一個配件就是麵包板了
麵包板就是讓人接電線用的
藍的是一整橫排都是同一條電路
紅的也是一整橫排都是同一條電路
中間的則是一直行ABCDE是同一條
FGHIJ也是同一條
可以把它想成:

─────
─────

|||||||||

|||||||||

─────

─────

 

而這要怎麼接就是要看設計者怎麼安排了

Arduino

 

最基本的讓LED亮燈看看
一般而言
從那0~13的孔(程式裡面要寫是哪一個號碼的孔!)
接到正極
而接地的是接到負極

Arduino

 

當然也可以接得更複雜一些
包括電組、LED

Arduino

 

還可以接按鈕
(左下角那顆)

Arduino

 

簡單的李麥克霹靂遊俠燈~
用按鈕可以控制跑的速度

影片:http://www.youtube.com/watch?v=RpUGb_FT7zo

Arduino  

 

以下是程式:


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]);
    }
  }
}

 

創作者介紹

B E L L E A Y A 雜七雜八創作小窩

belleaya (愛) 發表在 痞客邦 PIXNET 留言(7) 人氣()


留言列表 (7)

發表留言
  • 悄悄話
  • 悄悄話
  • Fong Ao
  • //Faster button
    if (buttonFastState == HIGH) {
    if(nowFastPressing ==0){
    nowFastPressing=1;
    if(nowSpeed>40){
    nowSpeed-=10;

    能解釋一下每一句代表的意思嗎? 感謝!!!
  • if(nowSpeed>40){
    nowSpeed-=10;
    如果目前間隔微秒數比40還大就減10
    但最低就是40


    if (buttonFastState == HIGH) {
    if(nowFastPressing ==0){
    nowFastPressing=1;

    else {
    if(nowFastPressing==1){
    nowFastPressing=0;
    這幾行是偵測按鈕用的
    並且在手沒有按的狀態下時
    它不會一直維持加速這樣

    belleaya (愛) 於 2014/11/21 21:02 回覆

  • 悄悄話
  • Eddie Li

  • #define A_ZERO 341 // approx. 1.5[V] * 1024[LSB/V]
    #define G_ZERO 253 // approx. 1.23[V] * 1024[LSB/V]
    #define S_ZERO 766 // approx. 2.5[V] * 1024[LSB/V]
    請問ZERO後面的數字怎麼訂出來
    //approx. 1.5[V] * 1024[LSB/V]這些文字是甚麼意思?
    #define A_GAIN 0.932 // [deg/LSB]
    #define G_GAIN 1.466 // [deg/s/LSB]
    #define S_GAIN 0.25 // [LSB/LSB] (AAAHHHHHHH WHAT?)
    // [LSB/LSB] (AAAHHHHHHH WHAT?)這些文字是甚麼意思?

    #define DT 0.02 // [s/loop] loop period
    #define A 0.962 // complementary filter constant
    #define KP 0.5 // proportional controller gain [LSB/deg/loop]
    #define KD 0.5 // derivative controller gain [LSB/deg/loop]
    DT A KP KD是甚麼?
    gain [LSB/deg/loop]是甚麼?
    float angle = 0.0; // [deg]
    float rate = 0.0; // [deg/s]
    float output = 0.0; // [LSB] (100% voltage to motor is 255LSB)
    // [LSB] (100% voltage to motor is 255LSB)是甚麼?
    不好意思,剛開始學問題很多
    有勞您了,十分感謝
  • define 應該是用在指定之後遇到程式碼的地方就取代掉吧?
    比方 #define A_ZERO 341
    就是指 如果在以下的程式碼中有任何叫做A_ZERO的字串
    全部都取代成341
    這個341當然是寫程式的人自己訂的

    然後//兩撇的後面都是註解
    註解就不是程式要跑的
    只是單純寫程式的人自己註上去給自己or別人看的
    所以有時候看不懂是正常的~
    那都要問原本寫程式的人
    當然//後面的東西你砍掉它也沒關係

    其他問題也是一樣~

    我的建議是你先找一本PHP的書來看
    比方松崗的PHP+MySQL快速入門
    或是上網搜尋一下「一週學會PHP接案」
    我是看那個影片學會PHP的
    中原大學的老師開的
    不過不知道影片連結還在不在就是了

    看書學的時候如果不會再問我吧
    雖然我只會皮毛而已

    belleaya (愛) 於 2015/04/13 00:40 回覆

  • 仁
  • 請問一下
    如果是想用按鈕控制伺服馬達呢?
  • 唔 我沒試過耶@@

    belleaya (愛) 於 2015/08/01 17:06 回覆

  • Eddie
  • 請問可以讀取寫入的程式嗎?
  • 這......可能要詢問比較專業的了@@
    這篇只是剛好聽課時筆記一下而已

    belleaya (愛) 於 2016/02/27 00:05 回覆