2016年12月18日 星期日

OPENCV(12)--追蹤顏色物件並利用它來做打磚塊遊戲


        這篇文章利用之前所介紹的OPENCV基礎方法來做一個可以追蹤顏色物件的範例。
首先我用3D印表機列印一個綠色的小物件,然後用筆電的內建webcam 抓取即時影像透過OPENCV的處裡來追蹤這個綠色物件的位置。然後可以畫出他移動的軌跡。接著利用這個特點把它應用在經典遊戲打磚塊擋板的控制,當該綠色物件往右移時打磚塊裡的擋板也會跟著往右移,往左移也跟著往左移,提供一種不需透過鍵盤或滑鼠就可以隔空操作擋板的方式,增加遊戲的樂趣。實際操作請觀看底下影片連結。

  主要處理步驟如下

1.開啟Web camera 擷取影像
       _, frame = cap.read()
2. 高斯模糊
     frame = cv2.GaussianBlur(frame,(77,77),0)
3.從BGR轉成HSV 色域
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
4.設定擷取綠色物件範圍
lower_green = np.array([60,50,50])
upper_green = np.array([80,255,255])
mask = cv2.inRange(hsv, lower_green, upper_green)
5.利用找出的mask 跟原圖做 Bitwise-AND
res = cv2.bitwise_and(frame,frame, mask= mask)
6.找出輪廓
        cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
7.找出輪廓之後便可以找出其質心或是面積周長
       M = cv2.moments(cnt)


<圖一>追蹤物件並劃出軌跡



<圖二>應用在打磚塊遊戲,擋板位置會跟著綠色物件X軸位置而移動



2016年12月1日 星期四

OPENCV(11)--contours and convex hull(輪廓與凸包)


         這篇介紹OPENCV提供找出輪廓與繪製輪廓,凸包的函數。

<圖一輪廓,凸包>





 什麼是輪廓:

        輪廓可以簡單認為成將連續的點(連著邊界)連在一起的曲線,具有相同的顏色或者灰度。輪廓在形狀分析和物體的檢測和識別中很有用。

• 為了更加準確,必須使用二值化圖像。所以在尋找輪廓之前,要進行閾值化處理或者 Canny
   邊界檢測。
• 查找輪廓的函數會修改原始圖像。如果你在找到輪廓之後還想使用原始圖像的話,應該將
   原始圖像存儲到其他變數中。
• 在 OpenCV 中,查找輪廓就像在黑色背景中找超白色物體。注意,要找的物體應該是白色
   而背景應該是黑色。

OPENCV提供函數 cv2.ftndContours()找輪廓:
        它有三個參數,第一個是輸入圖像,第二個是輪廓檢索模式,第三個是輪廓近似方法。
返回值有三個,第一個是圖像,第二個是輪廓,第三個是輪廓的層析結構。
第二個返回值"輪廓"是一個Python 清單(list),其中存儲這圖像中的所有輪廓。每一個輪廓都是一個 Numpy 陣列,包含物件邊界點(x,y)的座標。

2016年11月28日 星期一

機器學習(2)--使用OPENCV SVM實作手寫辨識

 
      這一篇我們要來利用OPENCV 所提供的SVM(支援向量機)來實作手寫辨識。在程式實作中,我稍微改變了OPENCV官版原本的範例程式,除了修正在Python3.5+OPENCV3.x
build code 會error以外,程式最後並加入自己手畫的數字圖進行預測。可以使用小畫家直接手繪一20x20 pixel 黑底白字數字圖當作自己輸入預測的樣本。如下<圖一>

另外可以跟前一篇KNN做比較
機器學習(1)--使用OPENCV KNN實作手寫辨識


<圖一>上方為用小畫家手寫輸入的樣本圖片,下方是使用OPENCV SVM辨識出的結果



2016年11月22日 星期二

Conway's Game of Life in Python(使用Python實現Conway的生命遊戲)

    這篇文章提供一Python範例程式來實現Conway的生命遊戲,並使用Pygame套件實現出動畫效果。

在1970年,英國數學家約翰·康威(John Conway)創造了他的“生命遊戲”。
這是一組規則,在一殖民地裡模仿生物有機體的混亂和生長及死亡。
在“遊戲”裡由“活的”和“死的”細胞單元組成,並將演變呈現在網格上。
從這一代過到下一代的規則如下:
     在網格上以該細胞為中心計算其八個相鄰的細胞,

1.假設人口過剩:如果該"活細胞"被三個以上的活細胞包圍,它就會死亡。
2.停滯:如果活細胞被兩個或三個活細胞包圍,它可以繼續存活。
3.如果人口過少:如果活細胞被少於兩個活細胞包圍,它也會死亡。
4.繁殖:如果死細胞被正好三個細胞包圍,它將變成活細胞。

    在程式裡我們設定0為死細胞,1為活細胞,利用Numpy及Pygame做成演變動畫
透過一直循環執行這些規則,可以出現美麗和意想不到的圖案,
有些已死的區域或是長時間不再變化的區域,經由更長的時間演變
因外來的細胞將再重新活耀起來。這遊戲迷人的地方在於它不完全是
由隨機亂數產生,他有上述的幾個規則存在,但是結果又是那麼不可預期,
好像是真的生命細胞在自己演化一般,然而實質上這只是一段程式代碼。


<圖一>隨機產生的細胞自由演化



2016年11月17日 星期四

機器學習(1)--使用OPENCV KNN實作手寫辨識

 
      這一篇我們要來利用OPENCV 所提供的kNN(k-Nearest Neighbour )來實作手寫辨識。在程式實作中,我稍微改變了OPENCV官版原本的範例程式,除了修正在Python3.5+OPENCV3.x
build code 會error以外,程式最後並加入自己手畫的數字圖進行預測。可以使用小畫家直接手繪一20x20 pixel 黑底白字數字圖當作自己輸入預測的樣本。如下<圖一>

<圖一>上方為輸入的手寫樣本圖片,下方是使用OPENCV KNN辨識出的結果


OPENCV(10)--Canny Edge Detection(Canny邊緣檢測)


    這篇介紹Canny 邊緣檢測原理,即OPENCV提供的Canny演篹法函式庫並實作一範例程式
可用兩個Trackbar 去調整minVal(T1) ,maxVal(T2)閥值,可以清楚看出minVal ,maxVal閥值對Canny 邊緣的變化影響。




原理:
    Canny  邊緣檢測是一種非常流行的邊緣檢測演算法,是 John  F.Canny 在
1986  年提出的。它是一個有很多步驟形成的演算法,我們接下來逐步介紹。

Canny邊緣檢測演算法步驟:

Step 1.雜訊去除
由於邊緣檢測很容易受到雜訊影響,所以第一步是使用 5x5 的高斯濾波器 去除雜訊。

Step 2.計算圖像梯度
    對平滑後的圖像使用 Sobel 運算元計算水平方向和垂直方向的一階導數(Gx  和 Gy),
根據得到的這兩幅梯度圖(Gx  和 Gy)找到邊界的梯度和方向,公式如下:


2016年11月16日 星期三

OPENCV(9)--Image Gradients(圖像梯度)



這篇文章介紹Image Gradients(圖像梯度),Gradient(梯度)簡單來說就是求導數(微分)。
利用Gradient(梯度)可以找出圖像邊界,通常會將圖像先灰值化,而邊界就存在像素變化差異大的地方。
    例如:鄰近連續的黑像素(0)與白像素(255)之間必然存在一邊界,鄰近像素值差異越大,存在的邊界越明顯。可以把鄰近連續的像素值變化看作一函數,而利用Gradient(梯度)便可查知其形成的可能邊界。


Sobel 運算元和 Scharr 運算元

        Sobel,Scharr 可求一階或二階導數。
        Scharr 其實是Sobel在kernel 核心3X3時的優化。
        Sobel 運算元是高斯平滑與微分操作的結合體,所以它的抗雜訊能力很好。
        你可以設定求導的方向,x方向或y方向(即對X或Y作偏微分)。也可以設定使用的卷積核的大小ksize)。
        如果 ksize=-1,會使用 3x3 的 Scharr 濾波器,它的的效果要 比 3x3 的 Sobel 濾波器好
        3x3 的 Scharr 濾波器卷積核如下:

Sobel 濾波器卷積核如下:



Laplacian 運算元

         Laplacian 是求二階導數,其找出邊界效果佳,但是對於抗雜訊能力不佳。
可假設其離散實現類似於二階Sobel 導數,事實上,OpenCV 在計算拉普拉斯運算元時直接調用Sobel 算子。計算公式如下:


拉普拉斯濾波器使用的卷積核:

OpenCV 提供了這種不同的梯度濾波器,或者說高通濾波器。Sobel,Scharr 和 Laplacian。
使用到的函數為:cv2.Sobel(),cv2.Schar(),cv2.Laplacian()        
下圖為其程式範例結果:

<圖一>Sobel ,Scharr ,Laplacian 


2016年11月14日 星期一

OPENCV(8)--Histogram & Histograms Equalization(長條圖與長條圖均衡化)


        這篇文章介紹長條圖原理及OPENCV對長條圖的處裡,包含如何均等化長條圖。

長條圖原理:
        什麼是長條圖呢?通過長條圖你可以對整幅圖像素的分佈有一個整體的瞭解,特別是對灰階圖。
        長條圖的 x 軸是灰度值0(黑) 到 255(白),y 軸是圖片中相同灰度值數量。
透過長條圖我們可以 對圖像的對比度,亮度,灰度分佈等有一個直觀的認識。

   如下<圖一> 左上圖為一對比不強烈的原圖,其對應的右上角長條圖可以看出像素值大多集中在中間像素,通常一張亮度,對比均衡的圖片應當像左下角,而可以看出其對應的右下角長條圖可以看出像素值分布較為均衡。而實際上在圖中下方圖片是經過長條圖均衡化後的結果,底下即來介紹如何用OPENCV,Numpy,MatplotLib來製作長條圖。

<圖一>





2016年11月6日 星期日

OPENCV(7)--2D Convolution ,Image Filtering and Blurring (旋積,濾波與模糊)


        這篇介紹OPENCV提供的對影像作空間濾波的工具,透過2D Convolution(旋積或譯卷積),可以達到對影像作濾波的功能,而對影像實施低通濾波(LPF),實質上就是對影像作去除雜訊,模糊化的作用,而高通濾波(HPF)實質上對影像的作用就是銳利化,以及可以凸顯出影像的邊緣。

2D Convolution 

        跟信號一樣我們也可以對 2D 圖像實施低通濾(LPF)高通濾波(HPF)等。OpenCV 提供的函數 cv.ftlter2D() 可以讓我們對一幅圖像進行卷積操作。
如下圖<一>我們對一幅圖像Convolution (旋積),底下是使用一個 3x3 kernel (核)的運算範例圖。

        操作如下:將核放在原圖像的一個像素A 上,求與核對應的圖像上 3x3個像素的和,用這個值替代像素 A 的值。重複以上操作直到 將圖像的每一個像素值都更新一遍。

圖<一>2D Convolution演算法

此圖來源:



人工神經網路(2)--使用Python實作後向傳遞神經網路演算法(Backprogation artificial neature network)

     這篇文章介紹後向傳遞神經網路演算法(Backprogation artificial neature network),並使用Python語言實作實現一XOR邏輯功能的多層網路模型。
     在底下前一篇文章單一神經元感知器的實作上知道,單一感知器無法實作出具XOR邏輯運算的功能,在這篇會改用多層網路模型並使用後向傳遞神經網路演算法(Backprogation artificial neature network)來實現XOR的邏輯功能。

人工神經網路(1)--使用Python實作perceptron(感知器)


多層神經網路:

          多層感知器是有一個或是多個隱含層的神經網路,通常網路包含一個來源神經元的輸入層,至少包含一個計算元的隱含層,以及一個計算神經元的輸出層,輸入號信一層一層的向前傳遞,這動作也稱之為前饋式傳遞神經網路,其模型如下圖<一>所示
          多層神經網路,各層多有其特定的功能,輸入層為接受外部的輸入信號,輸出層從隱含層接受輸出信號,為整個網路建立輸出形樣類別。
          隱含層的神經元發現特徵,其權重表示了其輸入型樣中的特徵,輸出層再根據這些特徵確定輸出型樣。
          利用一個隱含層,可以表示輸入信號的任何連續ˋ函數,利用兩個隱含層甚至可以表示不連續的函數,換言之,多個隱含層也可以解決單一感知器只能做單一線性分割的問題。


<圖一>有兩個隱含層的多層感知器神經網路



多層神經網路如何學習?

           最常用的是後向傳遞神經網路演算法,在1969年被首次提出(Bryson和Ho),但是由於對計算要求過於嚴苛而被忽略,直到20世紀80年代這種演算法才又被重新重視。
          多層網路的學習過程與感知器類似,提供輸入信號經過權重調節加總,計算出實際輸出,跟期望輸出比較算出誤差,再藉由調整權重來減小收斂誤差。
         在感知器中,每個輸入Xi僅有一個相對應的權重Wi和一個輸出Y,但在多層神經網路中,每一個權重對每一個輸出都有貢獻,而每一個輸入信號Xi,連接到各隱含層的神經元都有相對應的權重Wij,每個隱含層輸出也會有相對應的Wjk連結到每個輸出Yk,如下<圖二>所示:
         其中i為輸入層第i個輸入,j表示隱含層第j個神經元感知器,k為輸出層第k個輸出。
在後向傳遞網路中,學習演算法過程分為兩個階段,第一階段與感知器前饋式演算雷同,信號由輸入端向隱含層一層一層傳遞直到輸出層,如果實際輸出與預期的輸出不同,則計算其誤差,而第二階段則是將此誤差反向從輸出端經過隱含層再傳遞回輸入層,在這過程則同時調整其權重Wjk和Wij。反覆這樣的動作直到誤差收斂到一定的滿足條件值。


<圖二>三層後向傳遞網路

2016年11月5日 星期六

人工神經網路(1)--使用Python實作perceptron(感知器)



        這篇文章介紹人工神經網路最基本的單元,perceptron(感知器)。使用最簡化的數學公式
說明,並利用Python語言實作單一感知器and 及or 的邏輯功能.

        1943年,Warren McCulloch 和Walter Pitts 提出了一簡單計算元素的神經元,這個思想現在仍然是大多數人工神經網路的基礎.
        如下<圖一>神經元接收了來自輸入連結的一些輸入信號(X1......Xn),這些輸入信號可以是原始資料或是其他神經元的輸出信號。輸出信號則可以是最終答案,也可以是其他神經元的輸入信號。
        神經元計算帶權重輸入信號和並將結果和臨界值θ比較,如果網路淨輸入比臨界值低,則神經元輸出0,反之,如果網路淨輸入比臨界值低,則神經元輸出1。

<圖一>典型的神經元




        換言之,神經元使用下面的轉移或激勵函數.
其中X是神經元的淨權重輸入,Xi 是"輸入i"的值,Wi是"輸入i"的權重,
n是神經元輸入數量,Y是神經元的輸出。



2016年11月1日 星期二

OPENCV(6)--Trackbar(軌道桿)


    這篇介紹OPENCV提供的另一個基本工具Trackbar(軌道桿).可以用滑鼠拖拉改變特定的數值.
如下圖,拖拉 R,G,B Trackbar(軌道桿) 即可以更改,RGB顏色,範圍可以設定為0~255之間的數值.
Opencv 並沒有提供如Checkbox 這樣的工具,但是只要將Trackbar(軌道桿) 範圍值成0~1 ,也可以權當如checkbox的功能,當然如果需要更多一些GUI介面的元件,在Python 裡也可以利用別人提供的套件,如Tkinter ,或是PyQT 之類的.也可以跟OPENCV 套件整合在一起由Python實現.這就是Python 語言的便利性.


<圖一>當切換ON/OFF Trackbar(軌道桿) 在ON 位置時, 拉動R,G,B Trackbar(軌道桿)可以及時改變顏色




2016年10月27日 星期四

OPENCV(5)--Drawing



    這篇介紹OPENCV提供的的基本畫圖工具.主要是可以應用在影像辨識出輪廓或特徵時
圈選或標註之用.

<圖1>

    首先使用Numpy 產生一黑底圖矩陣img , 512x512 像素當畫布
       程式如下,3為channel (B,G,R) =(0,0,0)
       img = np.zeros((512,512,3), np.uint8)

1.畫直線:
       OENCV 函式:  cv2.line(img,(20,20),(500,500),(255,0,0),5)
        *1. 畫在img 圖像
        *2. 給定對角兩點(20,20),(500,500) 
        *3. 給定線條顏色(255,0,0) 為(B,G,R) 所以為一藍色線
        *4. 5:為設定的線寬,預設為1 ,值越大線條越粗

2.畫矩形:
        OENCV 函式:  cv2.rectangle(img,(25,25),(400,400),(0,255,0),4)
        *1. 畫在img 圖像
        *2. 給定對角兩點(25,25),(400,400) 
        *3. 給定線條顏色(0,255,0)為(B,G,R) 所以為一綠色線
        *4. 4:為設定的線寬,預設為1 ,值越大線條越粗

OPENCV(4)--Grayscale,Binarization,Threshole(灰階化,二值化,閥值)


    這篇簡單的介紹OPENCV的灰階化(Grayscale),二值化(Binarization),閥值(Threshole)

灰階化(Grayscale):顧名思義將原本讀取進來原本具有B.G.R三個頻道的彩圖,轉換成只有
    一個頻道為0-255,的黑白值分佈,由值0為最黑到255為最白.處於中間的即為漸黑或漸白
   如<圖1 >讀進一原圖為藍白漸層圖,轉成灰階值後呈現在圖中Gray
如果要將讀取進來的圖片做灰階化有兩種方式
a. 在使用 cv2.imread()讀圖時,將第二參數設為0,這樣讀取的img即為灰階化後的圖形矩陣
EX:     img = cv2.imread('bl2w.jpg',0)
b. 使用cv2.cvtColor(),將原圖讀進來的矩陣放置第一參數位置
    將第二參數設為cv2.COLOR_BGR2GRAY
EX:gray=cv2.cvtColor(img_RGB,cv2.COLOR_BGR2GRAY)
    那麼原本img_RGB如果為一BGR 圖檔即可轉成灰值圖矩陣gray

在Python裡處理影像矩陣式利用Numpy矩陣物件來處理.
而Numpy 提供一個.shape 屬性,使用此屬性可得知該矩陣的大小及維數.
如下圖2,在紅色框框裡img_RGB.shape 為(256,256,3) 其256x256 為其圖片像素rows,clos值
也是像素解析度大小,而3代表R.G.B 三通道.
而img_RGB.shape 為(256,256) 代表灰階化後只剩一通道像素解析度大小仍然是256x256.

<圖1>





2016年10月22日 星期六

OPENCV(3)--Matplotlib pyplot bassic function


    這篇簡單的介紹Matplotlib的基本用法,主要可以用來秀圖特別是可以畫出函數或是矩陣元素圖形,以利我們做數學上的分析,他的功能類似於有名的Matlab軟體.

底下分別畫出三種圖.



第一個放置在最左邊,單純任意輸入一維陣列
y=[1,3,5,7,9,12,16,22]     #隨便輸入幾個數字
x=[0,1,2,3,4,5,6,7]           #X 軸序號
那利用plt.plot 即可畫出該圖,也就是我可以從圖視覺畫的看出y陣列分布的狀況
至於'ro' 參數,r 代表紅色o 代表畫出圓點,
plt.plot(x,y,'ro')
而底下另一方式'b-',b 代表藍色,-代表線段
plt.plot(x,y,'b-', linewidth=3.0)
除了o,-可以使用外
('o', 'v', '^', '<', '>', '8', 's', 'p', '*', 'h', 'H', 'D', 'd')   都是可以使用的特定符號
x,y則分別是輸入的x陣列及y陣列
linewidth=3.0  可以指定線寬,數字越大線越粗

2016年10月21日 星期五

OPENCV(2)--Capture Video from Camera


    這篇介紹如何透過OPENCV 開啟電腦上的Webcam 擷取影像並做灰階化後及時同步顯示影像. 
     video可以看成是一段時間內幾十張單一影像的連續呈現,如30FPS(Frames per second) 就是每秒30張影像,因為人眼視覺暫留的作用,所以在我們看起來它就變成了動畫.所以camera擷取進的影像也是一張一張的圖片,而我們也可以直接對這一張張的影像圖片連續做處裡如灰階化.所以在OPENCV處理video的影像跟單一張圖片的影像並沒有區別.
     底下圖(1) 左邊即為webcam讀取的原始影像,右邊為灰階化後的即時影像

<圖1>



從程式碼中觀看,frame即為從webcam 讀取的單張影像,而只要連續對讀取的frame做處理即可
顯示即時處理後的影像結果.當然電腦的CPU/GPU處理的速度,會直接影響處理效率.
一般使用預設的的640x480 來做處理即可,即使未來對影像特徵值得處理也不需太高解析度的影像,甚至更小解析度32x32 就夠了.

     要在OPENCV裡使用Webcam 只要底下一行程式即可
     預設電腦的webcam 代號0
     cap = cv2.VideoCapture(0)

2016年10月19日 星期三

OPENCV(1 )--How to install OPENCV in Python


   This page show how to install OPENCV in Python.

A.In windows
1.先下載及安裝Python 2.7 or 3.x
       https://www.python.org/downloads/

      雖然很多人還是愛用python2.7版,但是我還是建議安裝Python3.x 版
      安裝時記得將底下add python 3.5 to path 打勾,至於安路徑目錄可以自行修改到
     任一磁碟都可以.




安裝好之後,直接開啟Dos 命令視窗.直接打python  按Enter ,應該會出現如下畫面
表示python 安裝成功,



2016年9月24日 星期六

使用中文語音下令機器人去控制家裡的電燈



      使用中文語音下達指令給機器人,讓機器人去控制家裡的電燈.
原本的範例也可以直接利用手機平板或是電腦直接做控制家裡的電燈,這次利用
Google語音辨識的功能,讓機器人去完成該指令動作,一來是省去了必須另外打開手機電腦
的麻煩,二來是讓機器人比較像是家裡一份子的感覺. 是機器人與物聯網概念的結合,其運用也可以用在其他家電如電視,電風扇,冷氣,電子鎖等等.

<圖一>系統概念圖


<圖二>阿布拉機機器人



<圖三>辨識語音輸出文字



影片DEMO:

2016年9月11日 星期日

ESP8266 WIFI(6) -Using Python to control LED ON/OFF




這篇介紹如何用Python 語言透過ESP8266 Wifi連線去控制Arduino 端的LED.

<圖一概念圖>





<圖二> 下圖是Python GUI 程式執行時,及Arduino 端LED實際運作狀態.
              當按下分別對應的LED按鈕後,LED即會 ON/OFF 動作. 



2016年9月2日 星期五

ESP8266 WIFI(5) -Set LED ON/OFF from WEB browser


 這篇文章介紹如何在瀏覽器透過ESP8266 wifi連線控制Arduino上的LED 開關.


<圖1>概念圖,非完整接線圖


<圖2>實際工作狀態



首先請先參閱之前的ESP8266介紹完成基本接線及測試,

ESP8266 Wifi (1)---Connected with PC.

http://arbu00.blogspot.tw/2015/12/esp8266-wifi-1-connected-with-pc.html
ESP8266 WIFI(2) -update firmware and modify baud rate.

2016年7月29日 星期五

使用Python透過Bluetooth與Arduino連結


        這篇文章示範如何使用Python透過Bluetooth跟Arduino連結.並使用Python建立出來的圖形介面來控制Arduino上LED 的ON/OFF.
 底下實驗概念接線圖

   Python 因為是跨平台的程式語言所以也執行在windows或是Linux,底下範例是直接使用一般電腦及windows 10去做示範.Python原始程式碼只要稍微修改一下也可以改成使用在安裝Linux的系統上,如樹梅派.


底下是之前USB2Serial範例的介紹連結:
http://arbu00.blogspot.tw/2016/07/pythonarduinoled.html




    底下所建立出來的圖形介面如下圖所示,
當按下按鈕<check>去跟Arduino確認是否已經連線成功.
按下按鈕<ButtonA>則會傳送字元'a' 到arduino當指令去啟動LED跑馬燈1
按下按鈕<ButtonB>則會傳送字元'b' 到arduino當指令去啟動LED跑馬燈2
按下按鈕<ButtonC>則會傳送字元'c' 到arduino當指令去啟動LED閃燈的動作.
按下按鈕<Exit>則會傳送'ESC' 鍵字元到arduino當指令去結束視窗跟所有動作.
當成是執行時必須先按下<Check>Button 再reset Arduino才能順執行以確保連線成功.
 


底下圖示當按下Button A 時會傳字元'a' 到Arduino,即可進行跑馬燈動作.
 




2016年7月26日 星期二

使用python與arduino連接控制LED之GUI圖形介面


        這篇文章示範如何使用Python跟Arduino連結.並使用Python建立出來的圖形介面來控制
Arduino上LED 的ON/OFF.

底下是第一個範例的介紹連結:
http://arbu00.blogspot.tw/2016/07/pythonarduinoled.html

    所建立出來的圖形介面如下圖所示,按下按鈕<Connect>去跟Arduino確認是否連線成功.
按下按鈕<ButtonA>則會傳送字元'a' 到arduino當指令去啟動LED跑馬燈1
按下按鈕<ButtonB>則會傳送字元'b' 到arduino當指令去啟動LED跑馬燈2
按下按鈕<ButtonC>則會傳送字元'c' 到arduino當指令去啟動LED閃燈的動作.
按下按鈕<Exit>則會傳送'ESC'鍵 字元到arduino當指令去結束視窗跟所有動作.
 




有關這個範例的實際示範及詳細的說明可以觀看底下的影片教學.




2016年7月21日 星期四

使用python與arduino連接控制LED


        這篇文章示範如何使用Python跟Arduino連結.並簡單的控制LED ON/OFF.
由於Python 是跨平台的程式語言所以可以安裝在一般電腦的windows上,也可以安裝在
使用Linux的系統如樹梅派.
   
         底下的範例程式是在一般的電腦windows 裡執行Python程式.
使用這樣的連結的好處在於分工,例如我們可以把影像識別或是語音識別建立在執行速度比較快的CPU上,如一般PC或是樹梅派,而把一些如機械手臂的動作或是資料感測建立在arduino端,透過Python 的套件Pyserial 就可以從Python端下自訂的文字命令去控制Arduino ,或是得到從Arduino端回傳過來的一些感測器數值資料.

        為什麼選擇Python?因為Python 語法簡單易學但是功能強大,並且世界上網路上都有開源的
原始碼可以參考.例如之前建立的OPENCV 做影像識別或是語音辨識都可以透過Python做到
,而只要再透過Pyserial 就可以控制Arduino做出如機器人方面的應用.
     
          而Python本身也有支援強大的網路功能,所以要做到IOT物聯網的功能,如從Arduino端得到感測器的資料再透過Python傳到網路伺服器或是從網路端得到指令透過Python傳給Arduino作一些控制也都是可以的.

       Python的功能還不只如此對於統計或是科學方面上的應用也是支援很多的套件可以使用,可以說Python 是功能全面性的程式語言但是又不如C++那樣複雜難懂.最主要的是網路幾乎都可以找到你想要的範例程式碼而且都是開源免費的.






有關這個範例的實際示範及詳細的說明可以觀看底下的影片教學.




2016年7月16日 星期六

Make Electric current stick game by Arduino (使用Arduino製作電流急急棒)


    這是用Arduino 自製的電流急急棒範例.
其實我主要是想要測試智能串口HMI 顯示屏的功能,剛好小朋友的媽媽有學校園遊會的活動
於是應老婆大人要求做了這個小專案.


<前面> 螢幕為一HMI panel 型號為TJC4832T035_011R.綠色阻礙棒子接在一顆MG 90伺服馬達上,當開始計時時,馬達會每隔3秒揮動一次,另外也可以在綠色棒子上再貼上鋁箔,並把鋁箔連接上路徑鋁箔,當急急棒碰觸時一樣可以做到導電失敗.


主要功能及製作說明:
1.有兩隻粗細不同的棒子可以選擇,原因是怕小朋友很難過關所以原本是用3DP印出一
   直徑1.5CM 的棒子,測試過覺得難度太高,所以又增加了一隻用竹筷的細棒子.

2.路徑寬度原本是規劃2.5CM ,但是由於木板不好切割所以不是很均勻,建議用瓦楞板或是
厚紙箱做地圖即可,然後在路徑上可以貼上會導電的烤箱用的鋁箔,我在鋁箔有貼上銅箔膠帶
當固定膠帶,銅箔膠帶電子材料行買的到,但是一捲要好幾百(不至於全部用完),只是用來固定鋁箔.我之前就有買了這次剛好可以用到.

3.左側為一起始紅外線感測器,右端為一終點紅外線感測器,這個感測器跟用來做尋跡車用的紅外線感測器是一樣的,當棒子經過感測器左端上方即會自動開始計時,在時限60秒內,棒子沒碰觸到即可過關.當棒子經過右端終點感測器時會自動感應.

4.中途有架設一伺服馬達接上一綠色棒子當阻礙,每隔3秒會揮動一次,當然時間是由程式控制,可以自行改成是改變時間.

5.使用一串口HMI 的觸控panel當顯示,基本上主用是用來顯示狀態及倒數計時,可以參考下面實際圖片的說明. ㄧ般來說要顯示數字也可以用七節顯示器來做,所以這個顯示屏並非必要也可以用七節顯示器替代,不過我提供的Arduino source code 只有我使用的HMI 處屏的code,如果用七節顯示器則這部分的code就要自行修改.

    PS.這個HMI觸屏為一USART傳輸可控制的螢幕,透過簡單的UART跟Arduino連線
  可以透過文字指令跟這個觸屏作互動切換顯示.事先在HMI 觸屏提供的控件軟體編輯好
切換畫面或是按鈕或是文字欄,再透過UART序列傳輸指令即可以跟Arduino作互動.
  可以在掏寶上搜尋 "hmi觸摸屏"即可找到相關產品,至於使用方式,通常賣家都會提供資料.

2016年7月9日 星期六

My Robot ,Arbu_Lucky, feet parts.(阿布拉機機器人_雙足)



This page share  feet parts of My Robot < ArbuLucky>.

You can download 3DP parts fromm below website:
http://www.thingiverse.com/thing:1665399

   The 3DP element "Pillar.stl" defaul lengh is 60mm .you need to resize by youself.
Just use the slice AP like as Cura can easy to change the lengh.






2016年5月23日 星期一

How to install OPENCV in Raspbarry pi 3.(如何在樹梅派上安裝OPENCV)

    這篇來記錄如何安裝OPEVCV 在Raspbarry pi 3 上.

  使用OS :Ubuntu MATE 16.04,請參照前兩篇有關Raspbarry pi 3的安裝.

(1)How to install Ubuntu Mate 16.04 in Raspbarry Pi 3(如何在Raspbarry pi 3安裝Ubuntu 16.04)
http://arbu00.blogspot.tw/2016/05/how-to-install-ubuntu-mate-1604-in.html

(2)How to install SSH,WinSCP and VNC in Raspbarry pi 3(如何在Raspbarry pi 3安裝SSH,WinSCP,VNC)
http://arbu00.blogspot.tw/2016/05/how-to-install-sshwinscp-and-vnc-in.html

   接下來會說明如何安裝OPENCV 以及匯入OPENCV 到Python 3.x 語言上,透過Python
即可以操作OPENCV 的功能.OPENCV原本是Intel 內部的一個計劃專案,主要可以從事影像處裡及辨識,如人臉辨識,也包含了一些機器學習,統計,類神經網路的功能.是一個強大好用的開源API.原本的OPENCV 是由C/C++的開源碼寫成. 底下透過一些方式可以將OPENCV 編譯成一個.so檔.即可以匯入Python 3 語言中使用.最後實作一個範例可以辨識出圖片的紅色區塊並將其圈起來.





2016年5月14日 星期六

How to install SSH,WinSCP and VNC in Raspbarry pi 3(如何在Raspbarry pi 3安裝SSH,WinSCP,VNC)


   This tutarial show how to use SSH and VNC to connect Raspbarry pi3 and your PC.

 Also see How to install Ubuntu Mate 16.04 in Raspbarry Pi 3
http://arbu00.blogspot.tw/2016/05/how-to-install-ubuntu-mate-1604-in.html


Step 1:Enable SSH service
In fact, SSH already installed in Ubuntu mate 16.04 .
so you can just in terminal type:

How to install Ubuntu Mate 16.04 in Raspbarry Pi 3(如何在Raspbarry pi 3安裝Ubuntu 16.04)


This tutorial show How to install Ubuntu Mate 16.04 in Raspbarry Pi 3

Step 1 :
Download the Ubuntu MATE 16.04 for Raspbarry Pi 3 from below web:
https://ubuntu-mate.org/download/





Selecting  "Via Direct Download"  to get ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img.xz 

2016年4月17日 星期日

Arduino Smart Car V3.0(手機藍芽遙控多功能自走車V3.0)


  Base on Smart Car V2.0 to modify theUltraSonic portion.Add one servo(MG 90s) to check turn left or turn right when close the barrier.


See the previous Smart Car design:
http://arbu00.blogspot.tw/2015/11/arduino-btsmartcarv2-v20.html
 To connect Servo signal on D13 pin.

Download 3DP things from below website:
http://www.thingiverse.com/thing:1497224


Below source code just to reference ,it can work normally,but not yet perfect.
Download the new Arduino source code:
https://github.com/Ashing00/Smart_Car-V3.0/tree/master




2016年4月9日 星期六

Make the trible layer MAZE By 3DP(使用3D列印機製作三層陷阱迷宮)



  This maze have 3 layer ,Layer A and Layer B are the normal maze and Layer C is a trap layer
 Put a iron bell and try to find the way from  Entrance (A)  to Exit (B) .see the <Picture 6>

  Using your hand to control theiron bell and be careful that there are a lot of dead holes on the way.The squae hole are the dead holes.When the iron bell drop in.It will drop into trap layer C,then the game is over.
  You  need to get the iron bell from DEAD hole,then replay it again.The circle hole is right way to enter another maze layer B.On Layer B also have a lot of dead holes.Enjoy!

 Of cause you also can go from B to A.

Download this thing:
http://www.thingiverse.com/thing:1478081


To see below pictures to know how to made it.

<Picture 1> Just combine layer A.B.C .


2016年4月8日 星期五