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

*****
*****
*****
*****
//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; 這幾行是偵測按鈕用的 並且在手沒有按的狀態下時 它不會一直維持加速這樣
*****
#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的 中原大學的老師開的 不過不知道影片連結還在不在就是了 看書學的時候如果不會再問我吧 雖然我只會皮毛而已
請問一下 如果是想用按鈕控制伺服馬達呢?
唔 我沒試過耶@@
請問可以讀取寫入的程式嗎?
這......可能要詢問比較專業的了@@ 這篇只是剛好聽課時筆記一下而已
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]); } } } 您好 請問這些分別是甚麼作用呢?