顯示具有 Arduino專案 標籤的文章。 顯示所有文章
顯示具有 Arduino專案 標籤的文章。 顯示所有文章

2017年6月29日 星期四

Arduino PWM控制100W聚光燈模組

         週二夜晚是ArkLab的工程師之夜,很多好玩有趣的事情都會在今晚發生,而今天要來玩的就是利用PWM訊號去控制100W的聚光燈(LED矩陣),PWM主要用於穩壓、穩流、調光、控制轉速等,透過調整PWM的脈波寬度可以改變LED亮暗的程度,當把聚光燈的亮度調到最大255(100%)時,那強光真的極度刺眼呀!

從此圖就可以看出當開啟100%的亮度會有多亮,我整個都被照到反光了呢





計畫所準備硬體部份的東西主要有以下:

1. 100W聚光燈(LED矩陣)模組 * 1
2. 20W-100W LED專用升壓定電流模組 * 1
3. 3S鋰電池 * 1
4. 麵包板 * 1
5. Arduino nano * 1
6. mini USB * 1
7. 電腦一台 * 1
(如右圖所示)




        首先要先將電池供電給升壓定電流模組,將升壓定電流模組上的IN+接線到電池的正極,IN-接到負極,再將OUT+接給聚光燈的正極,OUT-接給負級,另外還要從IN-再接一條線給Arduino nano的GND,讓兩邊共地,不然到時聚光燈會收不到nano的訊號,再來就把聚光燈的訊號線接到PWM的輸出腳位(筆者設定D3為PWM輸出腳位)。我們在聚光燈上加了一顆BJT作為開關,此外我們還在聚光燈背面安裝的風扇散熱,因為聚光燈的功率很高,當亮度調到最大時,可以發現聚光燈漸漸發熱,開太久旁邊鐵片會燙。

PS.請確保各條連接線要確保接對、接好,不然一短路不只會看到電、聽到電的聲音,各元件都可能燒壞。

硬體接完後,再來是軟體的部分,以下是程式碼:
int outputPin = 3;
int LEDpwm;
int count = 0;
char input[4];
boolean flag = false;
String inputString = "";

void setup(){
  Serial.begin(9600); //初始化序列埠,以9600bps速率連線
  pinMode(outputPin,OUTPUT); //設定輸出腳位
 }

void loop(){
  if(flag == true){
    inputString.toCharArray(input,4); //將輸入字串放進字元陣列中
    str2DEC(); //將讀進來的數字字串轉換為十進位數值
    Serial.println(LEDpwm); //列印出輸入的值
    for(int i = 0; i < 3 ;i++){  //讓聚光燈閃三下      
      analogWrite(outputPin,LEDpwm);                        
      delay(1000);                                                          
      analogWrite(outputPin,0);                                     
      delay(1000);                                                          
    }
    inputString = "";
    flag = false;
    count = 0;
  }
}

void serialEvent(){
  char inputChar = (char)Serial.read(); //buffer裡有資料時讀取第一個byte並轉為字元
  inputString += inputChar; //將輸入字元加入字串當中
  count++; //計數有幾個字元
  if(inputChar == '\n'){
    flag = true;
  }
}

void str2DEC(){
    switch(count){ //透過計數的字元了解使用者輸入的值為幾位數
      case 4:
        LEDpwm = (input[0] - 48) * 100 + (input[1] - 48) * 10 + (input[2] - 48);
      break;
      case 3:
        LEDpwm = (input[0]-48) * 10 + (input[1] -48);
      break;
      case 2:
         LEDpwm = (input[0]-48);
      break; 
  }
}



        原本程式只要輸入0~255範圍的值analogWrite就會一直保持此值,而我後來加了for迴圈,讓每次輸入值後閃三下,如果想長亮LED直接打 analogWrite(outputPin,LEDpwm )即可。




  這次的計畫是透過電腦輸入值讓Arduino nano接收後再傳PWM訊號給聚光燈,之後的計畫希望可以透過我們的遙控器可以去調整聚光燈的亮暗程度,等測試成功後,我們不僅可以把聚光燈放在飛機上當作夜晚探照燈,可以應用在其他需要有光的地方。敬請期待吧,各位!


最後再附上工作照以及元件的照片,還有測試的影片喲~



2017年4月7日 星期五

Arduino風洞機-自製空氣動力學實驗裝置



        自古以來如鳥兒般飛行就是人類夢寐以求的能力,從各種神話故事與傳說中便能略知一二,根據飛行器不同的飛行原理我們可以初步將它分成:定翼機,旋翼機,撲翼機三大類。雖然有這些分類但無論是依靠機翼、旋翼或是撲翼產生升力不外乎都與氣流有關,因此怎麼樣升空,更有效的利用升力就變成飛行器設計最重要的事了。
        1901年萊特兄弟成功打造世界上第一套有動力載人飛行器,也是因為有了風洞的測試數據,再綜合前兩架滑翔機的經驗才能順利完成,到了現在就連建築工程,城市空間規劃都能看到風洞實驗的身影,由此可見如何掌控看不到的氣流變化是多麼重要的工程技術。

測試原理與要求
        風洞實驗需要創造相對模型運動的氣流模擬出飛行器在真實飛行中所受到的空氣作用力,但不是透過直接加速而是創造出空氣的相對流動。為了達到近乎真實飛行狀況的測試數據,測試模型的設計也是非常重要的,要考量到舉凡材料的大小、表面粗糙度、剛性、支撐形式,在設備方面真實的大型風洞也要能夠有效的控制實驗條件如溫度、流速、壓力等條件。

原型設計
        在這個專題的原型設計中,我們將風洞模型規劃成三段,分別為氣流觀察段、收縮整流段、氣流動力段。其中氣流觀察段為了讓使用者觀察尚有一個透明的觀察窗,收縮整流段是最重要的部分,需要製作密集的孔洞把氣流整流成穩定的流場才能有最好的實驗效果,氣流動力段則可以調整進氣量與流速。將實驗圖展開後排列成雷射圖檔,透過雷切加工完成材料的準備,此專題的開源圖檔可以到ArkLsb飛行學院官網取得(圖A)。
圖A


加工與組裝
1.觀察箱體組裝
        首先從風洞機的觀察箱跟電路盒開始,組裝步驟相當簡單,只需將各部件用白膠黏上即可(圖B,圖C),唯一需要注意的地方是建議先將黑色不織布剪裁成適合的大小,黏在觀察箱的木板上,之後一起組裝會方便很多喔!
圖B
圖C


         觀察箱與電路盒組裝好之後,我們再使用雷射切割機切出壓克力觀察窗(圖D)。切完壓克力之後可以用在市面上常見的壓克力膠黏合,這種膠水可以將壓克力緊緊地黏住,相當的方便,接著再將觀察窗組裝到觀察箱上就行了(圖E)。

※訣竅:壓克力板可以在板材店購買,上面都會有覆蓋薄紙保護壓克力板,在切割的時候建議不要將薄紙拿下,這樣可以確保切割的精準度與保護板材。
圖D

圖E
2.製作整流段
         製作風洞機到這裡,雖然觀察箱主體大致完成,但我們還有很重要的東西還沒完成......
那就是風洞機中的穩流設備(圖F),這套由吸管所組成的穩流器可是這台風動機中的精華。要是沒有這個裝置,就算風洞機的煙霧製作得再漂亮,煙霧也只是到處亂竄,不會有如同真正的風機機一樣的完美煙線。
製作前建議多買幾包吸管,用剪刀剪出長度五公分的吸管,然後使用白膠或是壓克力膠來黏住吸管(圖G)。

圖F

圖G


3.製作氣流收縮段
接下來,我們要組裝的是集氣箱(圖H,圖I)。顧名思義,他是負責將物化器製造的煙霧收集起來,送往吸管穩流器的裝置,組裝方式與先前一樣只要用白膠黏合即可。
圖H

圖I




4.製作氣流動力段
        接著要組裝風洞機的送風裝置(圖J,圖K),這裡使用的馬達與螺旋槳零件是Arklab飛行學院的DragonFly四軸套件(圖L),將螺旋槳稍微修剪成適合的長度即可,支架截短後套上動力段零件底座,上膠後裝進由木板與珍珠板做成的送風函道(圖M)。

圖J

圖K

圖L

圖M


5.安裝控制電路
         為了方便使用者使用,我們設計了一個可以控制氣流大小的旋鈕,透過Arduino讀取可變電阻值,調整輸出的PWM訊號進而控制馬達的轉速。配線圖可參考www.makezine.com.tw/arklab.html。除了馬達轉速部分,也將觀察窗的LED燈條開關裝配在控制箱中,讓使用上更為便利。在將所有元件安裝進箱子前,我們先以麵包板進行控制電路測試(圖N),測試完畢後將元件焊接上洞洞板,並將洞洞板固定於組裝好的控制盒內,將按鈕在控制盒上預先留好的孔位中安置好後即完成(圖O)。

圖N

圖O
6.運轉測試
       最後將水箱連接上箱體,一個完美的風洞測試實驗裝置就完成啦!(圖P)讓我們趕快來試試吧。
圖P
       萬事俱備只欠東風,究竟最重要的煙霧要怎麼產生呢?可別開始找廢止來燒,要取得煙霧不必如此大費周章,我們可以有更輕鬆的方式。首先先取得一個景觀裝置常用的超音波霧化器(圖Q),霧化器是一個可以將水經由超聲波震動成霧化水氣的裝置,經常使用於園林或是池塘造景,營造出煙霧縹緲的景致,在這裡我們將它放進集水箱中以產生風洞機所需要的煙霧(圖R)。
圖Q

圖R
        在塑膠桶裝入水後開啟霧化器,此時霧化器所產生的水霧不會流向風洞機內,而是使水分子打散成極細的水霧。不過在較為狹小的空間裡,小水珠之間會產生碰撞,形成較大的水珠後掉回水裡,所以桶內的水霧也有一定的飽和程度,而且水霧的密度比空氣大,水霧不會流出塑膠桶外。
        在等待集氣的過程中,可以先把所觀察的物件放到風洞機內,再蓋上透明蓋子,防止外面的氣體干擾。當一切都準備就緒後,我們可以開啟LED和風扇,一邊調整風速,一邊觀察氣體流動的效果(圖S)。
圖S

※注意:當風速太快時,水霧的密度不足,會令觀察效果不明顯:而風速太慢時,風洞機內氣體流動太慢,也不能達到最佳觀察效果。

        雖然我們無法模擬成像實際的風洞實驗擁有那麼快的風速,但因為水氣密度比一般煙霧還重,不會太快被沖散,只要控制風扇得當的話,仍有不錯的煙線效果喔!

更進一步
        這套實驗設備在未來還有許多的擴展可能,例如你可以加上空速計來自動控制穩定的風速,創造更精密的實驗環境,讓你的設計更加精巧!

◎ 風洞機影片:



【材料】
本體:
>密底板(1) 600mm x90mm 

>壓克力板(1) 150mm x 250mm
>吸管(8)
>黑色不織布
>水桶(1)


內裝:
>Arduino Nano(1)
>820空心杯馬達(附螺旋槳)
>LED燈條(2)
>霧化器(1)
>NMOS電晶體(1)

>可變電阻(1)
>開關(1)
>洞洞板(1)

>10K電阻(2)
>二極體(1)
>單芯線(1)


【工具】
>雷射切割機
>剪刀
>白膠

>壓克力膠
>壓克力刀


※時間:一天

2015年7月30日 星期四

利用MPU6050透過Arduino及Processing展現姿態演算

   MPU6050是一款近幾年無論在Maker界或是商業應用上皆十分熱門的慣性感測元件(Inertial Measurement Unit,IMU),其中融合了三軸加速度計及三軸陀螺儀。    這款InvenSense於2010年推出的IC能如此成功,除了其低成本、高靈敏度、應用範圍廣等特色以外,最大的功臣為內建的Digital Motion Processor(DMP),這內建功能強大的小模組可以直接在MPU6050內完成加速度計與陀螺儀的Sensor Fusion,傳出四元數、尤拉角,免去了以往繁複的矩陣轉換以及減輕微控制器的運算壓力。這麼好康的內建功能當然就是我們今天的主題啦!
(圖片截自:http://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/)

首先我們去GitHub下載i2cdevlib


下載完之後我們將i2cdevlib-master資料夾解壓縮後放入(C:\Users\user\Documents\Arduino\libraries)的路徑內


接著我們開啟i2cdevlib-master資料夾,再進入裡面的Arduino資料夾並找到I2Cdev資料夾,將I2Cdev裡面的四個檔案複製貼上到MPU6050資料夾內

再將MPU6050資料夾內除了Examples資料夾以外的檔案全部複製並在Examples內的MPU6050_DMP6資料夾內貼上


接著開啟MPU6050_DMP6,並將第117行的//define OUTPUT_TEAPOT改成define OUTPUT_TEAPOT


接著選好我們的Arduino板子及COM Port就可以編譯上傳囉~

上傳完之後我們就可以開始拿出MPU6050

Arduino與MPU6050的接法為:
VCC <---> 3.3V
GND <---> GND
SDA <---> A4
SCL <---> A5
INT <---> D2

連接完我們打開Arduino IDE右上角的Serial Monitor,將Baud Rate設成115200

接著在上方文字框內隨意輸入任何文字(例如ArkLab)並按Send


如果有開始跑出數值的話就代表我們已經成功一半囉!
有了DMP的協助,現在MPU6050已經直接跑出YAW,PITCH,ROW的值了~
可是單單只有數字不過癮,我們當然要著手讓它圖像化,這時候Processing就該亮麗登場!

我們先下載最新版Processing以及需要的library--toxiclibs
同樣的我們安裝好Processing之後將toxiclibs-complete-0020資料夾解壓縮放到C:\Users\user\Documents\Processing\libraries資料夾內


接著我們就回到剛剛MPU6050_DMP6的資料夾內,發現上面居然有個Processing資料夾,讓我們開啟MPUTeapot.pde



按下左上角長得像播放鍵的Run




飛機的姿態就出來了!
趕快動一動手中的MPU6050模組,就會發現小飛機隨著手的姿態一起轉動囉~


延伸閱讀:



P.S.
我們的FB社團"Drone Maker-飛行器自造工坊"也時常會有各種學術討論
歡迎大家一起加入討論學習喔!