顯示具有 pwm 標籤的文章。 顯示所有文章
顯示具有 pwm 標籤的文章。 顯示所有文章

2016年1月24日 星期日

遙控小車-吳志文老師研發版V2-mblock馬達與超音波測試篇

遙控小車-吳志文老師研發版V2-mblock馬達與超音波測試篇

安裝程式


  1. 安裝Arduino的驅動程式(影片)
  2. 因為下載板用的是CH304晶片,因此要另外安裝驅動程式(影片)
  3. 安裝mblock的軟體(影片)

連接mblock與小車

  1. 將小車的下載板、USB連接線、杜邦排線接妥,如圖1,檢查電腦是否抓到小車的驅動程式,並檢查其與電腦的連接窗口代號,如圖2,開啟mblock軟體,設定UNO板、串列窗口,並上傳韌體,如圖3,按下使用馬達的Switch,如圖4,並將小車架高使車輪懸空。(影片)

圖片1:連接下載板、電腦、小車


圖片2:檢查驅動與通訊窗口

圖片3:確認mblock與小車連接

測試馬達運作


先拉出「設置數位腳位積木」並將其設定成10、高電位,然後拉出「設置PWM腳位積木」,設定為5、0,將其兩個積木連接在一起後,快點兩下滑鼠左鍵後你會發現右輪全速向前旋轉;接下來修改第5腳輸出為50、100、150、200,你會發現速度會越來越慢,255時會停止,你也可以手動輸入0~255其中任何數值,例如20、89、241...,最後你會發現當第10腳是高電位時,第5腳的PWM數字越小,轉動越快,這是因為它們(D10到D5)的電位(電壓)差比較大,而第5腳的PWM數字越大,轉動越慢,這是因為它們的電位差比較小;












圖5:右輪正轉速率調整

※P.S.電位差小於某個數值時,馬達無法啟動,因為馬達在啟動的瞬間需要比較大的動能,類似最大靜摩擦力的概念,當已經在轉動時,電位差即使小,也還會轉動,就像動摩擦力比最大靜摩擦力小的意思一樣。

接下來,將10設為低電位,調整5的PWM在0~255之間,你會發現,10設低電位,輪胎會倒轉,5腳PWM的數字越高,則轉動越快,越低,則轉動越慢。

圖6:右輪逆轉速率調整

知道原理以後,你可以再測試左輪,左輪的使用方式和右輪相同,不再贅述。之後我們得出一個左右輪運作的列表:(P.S.使用L293模組的會跟這種方式不同)



左輪
右輪
前進
D11 高電位
D10 高電位
前進時功率調整
D6  0最快←→255停止
D5  0最快←→255停止
後退
D11 低電位
D10 低電位
後退時功率調整
D6  255最快←→0停止
D5  255最快←→0停止


然後我們要想像一下,如果車要前進,就是兩輪一起向前,向後倒退,就是兩輪一起後退,而左轉(原地旋轉)就是左輪後退右輪前進,而右轉(原地旋轉)就是右輪後退左輪前進,停止則是將兩腳位設定成一樣是低電位,或一樣是高電位即可;因此我們可以利用“廣播功能積木”將車子的前進、後退、停止、左轉、右轉的功能組合出來,而且因為每一顆馬達的輸出不一定會相同,因此也能在這裡做微調,如下圖:


圖7:各個輪子的控制


圖8:車子的控制


超音波感測器的使用

這裡的超音波用的是SR-04,mblock裡有專屬的積木,可以測試前方障礙物的距離,單位是公分,最遠約到160公分左右;但是S4A就無法使用了,這也沒辦法,無法兩邊兼顧,因此如果是S4A的使用者,只好自己另購U-016了

超音波感測器部分:Trig/D2、Echo/D4


圖9:超音波感測器的控制

殘念


  1. P.S.因為mblock支援UNO的部分BUG其實還很多,在按下綠旗旁的停止按鈕時會造成右輪仍然持續轉動,還是得手動按一下程式中的右輪停止。(用S4A沒這問題)
  2. 至於紅外線的部分也是,mblock對於連續讀取A0~A5的輸入,好像非常的不穩定(單一個又好像可以),又很當,因此無法測試...
  3. mBlock支援自家的產品mBot很穩定,可惜支援開放硬體的部分好像沒有很積極改進,許多地方不是很穩定,不管是輸出的控制、或是輸入的偵測,總是有許多狀況,這就是我還不敢在學校推行mBlock的理由,畢竟目前還是S4A最穩!
待續
  1. 最近(105.02.01)在宜蘭的研習見識到Webduino,很適合拿來做進階感測器的使用和上雲端互動,除了沒有S4A的多媒體和mBlock的燒錄外,進階的感測器、元件的控制、與雲端的結合超級簡單,雖然是新公司(慶奇科技),到是很值得關注。
  2. 至於吳組長自製的感測器,他尚未大量生產,工程樣本測試起來很正常,請稍待文章與影片...
  3. 另外由於這車子是UNO的標準擴充座,因此UNO能玩的他都可以用,我建議國中小買一下通用的感測器擴充板V5,來連接各式各樣的感測器和元件;或是購買motoduino即將出版的第二代S4A學習板,作為一般教學的擴充,畢竟.... Arduino不是只有機器人一條路,可以用在生活上很多的創意!






2015年5月13日 星期三

專題-S4A-燈光調色盤-PWM輸出與類比輸入的練習

專題-S4A-燈光調色盤-PWM輸出與類比輸入的練習


利用S4A偵測旋轉電位計或滑動電位計模組輸入,在RGB全彩LED模組上輸出想要的顏色。


教學目標:

1.         了解Arduino如何使用基礎類比輸入與類比輸出
2.         了解基礎電路運作原理
3.         了解RGB全彩LED與電位計模組使用方式
4.         能使用Scratch程式設定讀取類比輸入、PWM輸出至RGB全彩LED
5.         能使用Scratch程式做多媒體輸出與控制流程進行
6.         能運用上述學習天馬行空產生多元的創意
7.          能克服困難將創意展現製作出自己的作品

設計理念:

學習Arduino所需要的電路基礎常識,這些常識國小五年級其實就已經具備,這裡,我們運用簡單的模組(初步組裝即可)或電路(進階電路DIY),讓學生知道開放式硬體的電路部分其實很簡單,利用簡易的硬體加上千變萬化的程式設計,就能讓自己的創意無限延伸,創gk4ru4sxu3su04造出屬於自己的獨特作品,成為小小發明家。

主題架構:


材料:(本教案使用預設為粗體設備)


1.      Arduino開放式硬體,建議預先上傳好S4A韌體
2.      感測器擴充板V4V5均可使用,有擴充板接線比較簡單,無擴充板也能使用
3.      旋轉電位計(0~1023)、滑動電位計模組均可使用
4.      RGB全彩LED共陰模組(0-255),共陽極也行(數值要取255補數)
5.    雙母頭杜邦彩虹排線

電路連接:


電位計模組電路連接說明:

電位計模組為類比輸入,因此其訊號輸出(OUT)要接到ArduinoA0~A5輸入端(本案例三個輸入接在A0A1A2),使用擴充板則接在A0~A5S端,S代表信號的意思,連接腳位如下:
電位計1   Arduino
=======    ======
OUT  ←→ S(A0)
VCC  ←→ V
GND  ←→ G
電位計2   Arduino
=======    ======
OUT  ←→ S(A1)
VCC  ←→ V
GND  ←→ G
電位計3   Arduino
=======    ======
OUT  ←→ S(A2)
VCC  ←→ V
GND  ←→ G

RGB全彩LED連接電路說明:

RGB全彩LED模組有分共陽或共陰,接線和控制方法各有不同,本例以比較直覺之共陰極模組為主,除了“-”即為接地GND外,另三隻接腳分別為三原色的控制訊號,這次我們使用PWM控制,所以我們把它分別接至擴充板上的S5S6S9,也就是Arduino板上的D5D6D9,連接腳位如下:
   RGB模組     Arduino
   =======       =======
    - (GND)   ←→ G(GND)
    R(RED)   ←→ S5(D5)
    G(GREEN) ←→ S6(D6)
    B(BLUE)  ←→ S9(D9)

模組測試、程式撰寫與說明


電位計測試:

本專題將電位計輸入接在ArduinoA0A1A2類比輸入接腳,因此在S4A中請觀察sensor board上的Analog0Analog1Analog2欄位的值,當我們將連接在A0的電位計逆時針旋轉到最左邊時,Analog0的値為0,當順時針旋轉到最右邊時,Analog0的値為1023,任意旋轉時,Analog0的値為0~1023之間,同樣的方法測試另兩個電位計,會得到一樣的結果,Sensor Board的顯示如下圖。

因為電位計模組將0~5V切分成1024份以數位方式來模擬類比輸入,所以數值1相當於0.00488V的電壓,我們可以用一個小程式來轉換顯示目前的輸入電壓,程式如下圖:
  

我們可以寫一小段程式來轉換電位計類比輸入(0~1023),將它變成音階輸出(50~84),因此靠著轉動電位計我們可以達到不同的音樂音階輸出,範例如下。



RGB全彩LED測試:

本例中因為要使用PWM控制全彩LED,因此將R(紅色)G(綠色)B()三隻接腳分別接在D5D6D9,每一支接腳單獨控制一個顏色,由於S4APWM輸出可以從0~255一共有256種變化,因此三隻接腳即可變化出全彩1677萬色(256*256*256),我們先來測試單一顏色,確認一下程式輸出與各接腳亮燈是否正常。
首先,拿出三個“analog 9 value 255 ”積木,將接腳全部改成5用來控制紅色,並將值分別改成2551280,然後分別雙擊點選積木,會發現模組紅燈全亮、半亮、不亮,因此可以知道“值”就是輸出的功力(PWM,脈波頻寬調變),可以控制燈的亮度。
   

測試完畢之後,記得點選“analog 5 value 0”積木,將紅燈關掉,以免測試其他顏色時混到色,接下來請以同樣方法依序測試綠燈(D6)和藍燈(D9),以確認你的三個顏色分別都能正常運作。

※如果你的顏色和接腳搭配錯誤,則以實際發生的情形來做設計即可,因為對岸製造的模組品質不一,有時接腳標示會錯誤,有時零件品質有問題某個燈不亮也是常有的事、還有線材接觸不良也會發生,可以交叉測試一下就會知道問題出在哪裡。

燈光調色盤程式製作

首先我們要將Analog 0旋轉電位計的輸入(0~1023)轉化成控制D5PWM輸出範圍(0~255),因此要做一點簡單運算,於是將Analog 0的值除以1023再乘上255,然後因為PWM輸出訊號得用整數,因此再將結果四捨五入即可,將得到的結果放進點亮D5不斷地做PWM輸出,程式如下圖:

當我們按下綠旗執行後,只要旋轉A0上面的旋轉電位計,就能調整紅燈的亮度,同時為了能將亮度數值顯示在螢幕上,我們增加一個紅燈變數“紅燈R

然後我們將剛剛運算的結果先放在這個變數中,然後再以這個變數輸出PWM,所以程式修改成下圖:

這時,再次旋轉A0上面的旋轉電位計,除了能調整紅燈的亮度,還能顯示紅燈R的亮度數值在螢幕上,如圖。

接下來產生“綠燈G”和“藍燈B”的變數,同時將整個程式複製成三份,分別修改第二隻程式使用變數“綠燈G”、“value of sensor Analog 1”、“analog 6 value 綠燈G”、以及第三隻程式改成使用變數“藍燈B”、“value of sensor Analog 2”、“analog 9 value藍燈B”,程式如下圖:



恭喜你,完成這樣就完成本次燈光調色盤專案,你可以參考網路上的RGB配色表,分別調整三個電位計所代表的三原色,自由調配出想要的顏色了!

教學影片



2015年4月28日 星期二

專題-S4A-達標計分器-基礎數位輸出輸入的練習

專題-S4A-達標計分器--基礎數位輸出輸入的練習


本主題可用於運動計數、分組計分

利用S4A偵測按鈕模組輸入,在LED及螢幕上輸出,當達成目標時LED閃爍同時鈴聲大作,恭喜達成目標。



材料:(本教案使用預設為粗體設備)

1.      Arduino開放式硬體,建議預先上傳好S4A韌體
2.      感測器擴充板V4V5均可使用,有擴充板接線比較簡單,無擴充板也能使用
3.      按鈕模組(按下為false)、碰撞模組、紅外線模組均可使用(※模組使用不同程式寫法稍有差異)
4.      LED模組、人魚燈LED模組、RGB全彩LED模組(共陰)、七彩燈模組均可使用,或以LED+220歐姆電阻取代(※模組使用不同電路連接稍有差異)
5.    雙母頭杜邦彩虹排線

準備工作:

電腦事先安裝S4A、喇叭、麥克風


=========================================================================

開始上課!


連接本專題Arduino硬體與模組如下圖













按鈕模組連接電路說明

按鈕模組為數位輸入,因此其訊號輸出(OUT)要接到Arduino的輸入端,可接到D2(D3),擴充板則接在S2(S3)S代表信號的意思,就是Arduino板子上的數位輸出入D0-D13,裡面的D2D3S4A裡被用來做數位輸入偵測,連接腳位如下:
   按鈕模組    Arduino
   =======    ======
    OUT  ←→ S2(D2)
    VCC  ←→ V(5V)
    GND  ←→ G(GND)

RGB全彩LED連接電路說明


RGB全彩LED模組有分共陽或共陰,接線和控制方法各有不同,本例以比較直覺之共陰極模組為主,除了“-”即為接地GND外,另三隻接腳分別為三原色的控制訊號,我們把它分別接至擴充板上的S10S11S13,也就是Arduino板上的D10D11D13,連接腳位如下:
   RGB模組       Arduino
   =======       =======
    - (GND)   ←→ G(GND)
    R(RED)   ←→ S13(D13)
    G(GREEN) ←→ S11(D11)
    B(BLUE)  ←→ S10(D10)
====================================================================================

按鈕程式測試、撰寫與說明

以數位輸入用法(本專題將以此為範例):


  本專題將按鈕輸入接在ArduinoD2數位輸入接腳,因此在S4A中請觀察sensor board上的Digital2欄位的值,當我們未按下按鈕時值為true,而按下按鈕時值變為false(※每批模組不同,有的恰恰相反),這樣的方式將按鈕視為數位輸入,寫程式時就要用數位輸入的方法來判斷,例如下列程式會在按下按鈕時發出Do的鋼琴聲。

類比輸入用法:

  如果你將按鈕模組接到類比輸入A0~A5也能用,但是這時就要觀察Sensor boardAnalog0~5的數字,例如:我如果將它接在A0輸入,那你會發現沒按按鈕,A0值為1023,有按按鈕,A0值變成0,因此上面的程式就會變成這樣的寫法,必須找一個可以分辨出10230的中間的任何值(本例用500最為哨兵值,非一定要用500),利用大於小於,甚至是等於來做判斷。

 LED程式的測試、撰寫與說明

數位控制三原色輸出(本專題將以此為範例)

  LED使用數位方式點亮的話,僅有兩種狀態,意即亮或不亮,而本次使用的RGB全彩彩LED,如果以數位方式控制的話,除了接地腳外,控制腳位接在ArduinoD10/11/13(S4A1.5版以後D12也能使用),則顏色會有2*2*2=8種顏色(包含全滅)
下圖程式即是將三原色以0.1秒的時間間隔輪流點亮(未混色)

下面程式則是數位方式隨機混色輸出

PWM控制三原色全彩輸出:

  如果想要全彩輸出,腳位得接在D5/6/9,則可利用PWM(脈波頻寬調變)給予0~255階不同的亮度,因此3隻控制接腳即可以256*256*256呈現16777216色組合,就是全彩的意思。下方程式即是以每0.1秒的間隔,隨機混和1677萬色全彩輸出,色彩的組合可以參考網路查詢“RGB配色表”。

=====================================================================

“達標計分器”專題實作開始:


本達標計分器可用於教師分組學習時為每組學生計分,每組使用1個按鈕1個顏色的燈,因此1Arduino6個按鈕、2RGB全彩燈即可做成六組的達標計分器,本專題僅以一組為例,可自行延伸。
一開始可設定本次目標分數,然後課程進行中小組得分即可按鈕1次加1分,如果達標就會燈光閃爍加響鈴大作恭賀一番。

先新增一個變數“達標分數”,然後在程式中以提問積木將達標分數設定進來。

(本程式有誤,其實不需用到變數,迴圈裡也不用減一,請等待下次修正程式)
做一個迴圈,設定執行次數為達標分數,每次在按鈕狀態切換時(由沒按→有按),就將達標數減去1,因此如果達標分數為10分,本迴圈就會執行10次,執行完10次達標分數就會變成零,迴圈也會結束,此時利用廣播積木將訊號“恭喜達成目標”傳送出去。

利用廣播積木的原因是因為要讓文字、音樂、控制LED的動作同時多工發生,所以我們分別將文字、音樂、控制LED的動作設定在個別的接收廣播中,以達到多工的作用,聲音或音樂可先由聲音資料庫中匯入或自行錄音準備好如下圖。


廣播部分程式如下:

然後我們可再增加,當我們每次按鈕時也閃兩下燈,再播點音效以增加互動趣味性,這樣就完成我們的程式了!最後程式就如下圖。


是不是很有趣呢?

想一想,如果要擴充第二組,模組、線路該怎麼接?程式要怎麼改呢?


想一想,本專題亦可將按鈕換成觸碰感測器,也會有一樣的效果嗎?如果換成其他的感測器模組呢?會變成甚麼樣的輸入才能控制呢?程式又要怎樣改呢?


例:如果換成紅外線則運用更廣,可以測量仰臥起坐、伏地挺身、跑操場圈數的運動量,創意可以無限發揮歐,是不是很迷人呢?


課程影片