2017年10月12日 星期四

Decoding 6 servo channel inputs with an Arduino UNO

最近學生在玩 RC 遙控,本來這是用在四軸飛行器的接收器,拿下來當遙控車使用。

原本以為 Arduino 的 SDK 都寫得不錯,所有的功能都能輕易完成。
PS. 事實上也是這樣。很快就完成了。
可是,我們實際上線使用時,發現控制動作會有嚴重的延遲。經過反覆的分析測試,發現 Arduino 的 pulsein 函數在其內部會有 delay 的動作,造成了當我們的 signal input 有多腳時,就會造成控制動作的延遲。套一句敏哥上課說的話,這不符合 real time 的要求。所以,我們去找了幾個方法。最後,找到這個作者使用中斷計時法來解決 6 channel 的輸入計時。

http://ceptimus.co.uk/?p=66

特地記錄下來,讓開發 RC 控制的同好,可以更容易進行開發。

2017年10月9日 星期一

Unity程式設計初體驗

好玩的程式設計

程式設計是一門很好玩的學科,可以訓練邏輯概念,透過指令的排列組合,完成某一個特定任務,最方便是電腦已經成為每個家庭必供的家電用品,對於有些家庭成員來說,花在電腦上的時間可能都比看電視時間還長。學習程式設計自學很重要也很方便,因為只要一部電腦即可,在現在以工業4.0或社會5.0都很重視程式設計,學習程式設計可以指揮機器人的運作,也可發展網路服務軟體,既好玩又有趣。

Unity是學習程式設計非常實作的平台

為什麼我們學習Unity?Unity應用在哪些領域,前景又如何?目前許多知名的遊戲都是使用Unity開發,更重要的是Unity具有很強的跨平台能力,不管是桌機、手機、遊戲機都有支持。Unity具有很好優勢和前景,特別是在3D/AR/VR上。Unity程式語言可以使用C#或JavaScript,目前以C#為主流。

學習Unity程式設計就從MonoBehaviour類別開始

MonoBehaviour是基礎的類別,這個類別有兩個很重要的函式Start()和Update(),Start()只會執行一次,負責初始化的任務,但Update()就會不斷地被呼叫執行,是程式的主函式。以下是我們建立一個新的C#程式的樣版,類別名稱是NewBehaviourScript,繼承MonoBehaviour類別。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class NewBehaviourScript : MonoBehaviour {


   // Use this for initialization
   void Start () {

  }

   // Update is called once per frame
   void Update () {

  }
}

GameObject是遊戲世界的基本物件

GameObject我們稱遊戲物件,它是Unity場景中所有實例的基本的類別。首先我們先介紹Find()函式,該函式可以用來找遊戲物件,例如:要找一個叫Cube的物件,我們可以使用GameObject.Find("Cube");,當找到這個物件時,會傳回GameObject物件指標,因此我們需要先宣告一個GmaeObject物件,private GameObject cube;採用private是表示該物件是私有的,只能在該類別內使用。找到可以控制的物件後,我們就可以使用GameObject內的translation變數來進行對遊戲物件的轉換控制。translation變數其資料型態是Translation變數,它可以用來控制遊戲物件的位置(Position)、旋轉(Rotation)、大小(Scale)等。首先我們先來學習如何控制遊戲物件的旋轉方向,我們可以呼叫Rotate()函式,三個參數分別是X、Y、Z,我們來控制Y軸的旋量,採用時間物件Time.deltaTime。其完整的程式如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    private GameObject cube;

    // Use this for initialization
    void Start () {
       cube = GameObject.Find("Cube");

    }

// Update is called once per frame
void Update () {
        cube.transform.Rotate(0, 100 * Time.deltaTime, 0);
    }
}

使用Prefab預製功能,讓控制更輕鬆

Unity中的Prefab資源類型我們稱它為預製,它可以透過添加組件並將其屬性設置為適當的值,可以方便地在場景中構建一個遊戲物件(GameObject),那兩者之間有何差別呢?Prefab資源類型可以讓您存儲一個完整的組件和屬性的GameObject對象。 預製作為模板,您可以在該模板中在場景中創建新的對象實例。 對預製資產進行的任何編輯都會立即反映在從其生成的所有實例中,但也可以單獨覆蓋每個實例的組件和設置。
我們可以通過選擇Asset->Create Prefab來建立預製,然後再將對象從場景拖動到“空”預製資產上。換句話,場景上的所有物件,都是 GameObject物件,Prefab就是把場景上,製作好的 GameObject 拖曳到 Assets 目錄下保存起來。在使用預製功能要注意,在前面的例子,我們使用到Find()找特定的物件,因此您使用預製功能時,把原本的物件變成三個,一個Cube,其兩個是使用預製Prefab來製造出的兩個Cube,您會發現在轉動的Cube只有一個,要三個都能使用,可以改成下列程式,改用this物件指標。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {


    // Use this for initialization
    void Start () {

    }

// Update is called once per frame
void Update () {
        this.transform.Rotate(0, 100 * Time.deltaTime, 0);
    }
}


2017年10月1日 星期日

擴增實境的工具:Unity跨平台的遊戲引擎

Unity 是一套具備跨平台的遊戲引擎的遊戲應用程式開發工具,不但可用於開發 WindowsMacOSLinux 平台的單機遊戲也可以用來iOSAndroid 行動裝置的遊戲,Unity 更可以用來開發支援 WebGL 技術的網頁遊戲,或 PlayStationXBoxWii 主機上的遊戲。

想學習Unity可以參考CG數位學習網http://www.cg.com.tw/Unity/

耕雲智慧生活科技股份有限公司的業師介紹三款Unity所設計的遊戲,分別是:

<<神魔之塔>> 陳研希代言



爐石戰記


鬥陣特攻



Unity 3D概念及工具詞彙

  • Assets創建的專案文件都儲存在這個資料夾中,模型、貼圖 、聲音、程式碼。
  • Scenes編輯物件的主要視窗,可切換2D3D顯示模式。
  • Game Object 變數型態,指定要控制的物件,例如 : 模型。
  • Scripts 腳本,C#JavaScript

  • Prefabs可以用來儲存預先製作的物件。
Unity基本介面

以下是業師提供的講義:











2017年9月30日 星期六

體驗擴增實境

今天很高興邀請到耕雲智慧生活科技股份有限公司的工程師擔任業師來教導同學認識擴增實境,首先先介紹何謂擴增實境Augmented Reality,簡稱AR,大家可以參考維基百科的定義,擴增實境是運用攝影機影像的位置角度來進行分析及運算,可以在螢幕上顯示攝影機看到的世界以及3D元件、影片、照片等內容,進行虛實互動。其主要的內容有:

  • 虛實結合
  • 即時互動
  • 三維空間
接下來介紹兩款擴增實境的案例:

  • 家俱IKEA





  • 麥當勞



接下來讓同學體驗一個很有趣的小型AR軟體http://09.aid-dcc.com/暖身:


2017年8月6日 星期日

當個快樂的物聯網自造者

物聯網是目前熱門科技之一,也是各行各業都會用到的智慧生活科技,但有些人一聽到物聯網,總感覺它是困難的,需要設計電路?需要寫程式?這點也是往往成為台灣創新的腳石,要創新需要懂得時代發展的潮流,不管是物聯網(IoT)、雲端服務(Cloud Service)、大數據(Big Data)、人工智慧(AI),都需要用到能夠掌握環境的資訊,來進行判斷,做出良好的決策及適當的反應,以無人車為例:車子本身要能判斷前方是否有障礙物,目的地在什麼地方?這些都需要經由感知器(Sensor)才能做到,這也就是為什麼物聯網很重要,因為物聯網是繼網際網路(Internet)或互聯網的下一代的網路基礎建設,網際網路/互聯網讓全世界所的電腦都能聯上網路,彼此之間可以交換資訊,造就現在數位炸的時代,未來當萬物都能聯網,每個物品都能彼此交換資訊,這又會是什麼樣的時代呢?
    學習物聯網要設計電路?需要寫程式?這個答案是「要」,也可以是「不要」,能夠設計電路和軟體這當然很好,但擁有物聯網專業知識,透過構思、設計、實作、操作的CDIO模式,把物聯網作品設計出來,這才是最重要的。這個時代是講究分工,設計電路和寫程式就留給電子、電機、資工領域的人,他們會設計出最穩定的硬體,最棒的軟體,而對於管理、工程、民生等非電子電機專業的人士,懂得掌握物聯網技術,經由瞭解使用者需求或市場需求,運用正規的設計方法,以及好用的實作工具,將產品快速地打造出,這就是物聯網自造者(IoT Makers)的精神。因此,不管您的專業是什麼?都要更認真地學習物聯網。

CDIO的網址:http://www.cdio.org/

2017年6月20日 星期二

[硬體Hack]無線滑鼠供電改裝

(以下技術部分僅供分享,若因為自行操作造成滑鼠毀損,則須自行負責,與作者無關)
嗨,大家好,我是盟鋼,今天的主角是這顆無線滑鼠
他還不錯用,只是有個問題一直困擾著我,就是那該死的乾電池,原因是乾電池沒辦法回收再利用,所以相對的就要一直花錢買新的去替換,時間久了,之前花的錢其實就能累積買充電型的,但也要買相對應的充電器才能充電,種種以上的問題對我是個很大的困擾

所以我就想到14500電池,或許能做為滑鼠的主要供電來源,會選用14500電池原因是因為他與3號電池體積與大小差不多,只是長度長了點,所以最後只需稍微修改外殼即可完美的安裝到原本的滑鼠上,以下是3號電池與14500電池比較

不過在開始修改前有個問題,因為3號電池的電壓是1.5V,與14500充電電池的電壓3.7V有很大的差距,所以貿然地將14500電池直接裝到滑鼠上,很有可能會直接毀損滑鼠。那這邊需要一個降壓模組,將3.7V降到穩定的1.5V,而這邊選用的降壓模組型號是MP1584,這片雖然輸入電壓的規格是4.5V to 28V,也就是說最低的輸入電壓是4.5V,但秉持著改造的精神測試了一下,發現其實3.7V也還是能將電壓往下降,所以就用了三用電表量測輸出的電壓為1.5V後,將調整電壓的可變電阻用熱熔膠黏起來,避免以後裝到滑鼠裡面後,因為跟其他零件碰撞,造成輸出電壓跑掉,進而燒毀滑鼠。以下是降壓模MP1584的樣子

好的,接下來就是拆解與查線拉,拆解這顆滑鼠不難,只要把一個螺絲鬆開就能輕鬆將電路板取出了,所以這邊就只傳拆下來的電路的照片,因為改造得太快,所以下圖是已經改造好的原圖

而這邊因為要將3.7V轉成1.5V,所以只需要動到+電的部分,-電則不動,圖片中的紅線則是原本滑鼠+電從電池的簧片供給到內部電路的路徑

那這邊我是拿美工刀把接近+電的銅箔給切斷(紅圈處),然後再將原先電池的簧片接點透過導線接到模組的IN+,而-電則是接一條線到模組的IN-或OUT-,因為這兩點其實是導通的,所以接哪邊都行。這邊最好拿三用電表量一下切斷的線是否還有導通,若無導通才可繼續接下來的步驟

轉到電路的正面做模組的安裝,因為要接到滑鼠的OUT+在正面的關係,所以就找了最接近的點將線焊接上去,而這點是原本用電池供電進去的第一個節點,所以才選擇將OUT+焊接在此

以下是將模組焊接好的樣子,那這邊因為滑鼠本身內部空間比較擠的關係,所以就不把模組給黏起來,讓模組可以自由的跑到剩餘的空間去,避免卡到一些零件

最後的最後,將14500電池安裝上去,那最一開始有說電池比較長的關係,所以我就那美工刀將紅圈處給割掉,讓14500電池能安裝得進去

完美,收工


2017年2月11日 星期六

Asus Tinker Board 使用心得

今年一月底見到網路上有關於華碩推出一塊外型與樹梅派一樣的ARM開發版,近期在FB上看到台灣可以賣到的資訊。原本個人對於一個系統廠要跨入開發版(Single Board Computer )市場並不看好,但思考了幾個小時後想想買一塊回來玩玩支持一下"國產"品牌也不錯。

2017年1月23日 星期一

[ESP8266] 利用ArduinoIDE開發ESP8266專案--開發環境設定

目前市售的ESP8266模組有很多種版本,如下圖
本篇是選用ESP01作為介紹
接下來分幾個部分
1.ESP8266 Core For Arduino安裝
2.連接ESP8266燒錄電路
3.燒錄Arduino程式到ESP8266


1.ESP8266 Core For Arduino安裝
這邊先到Arduino官網下載頁面




然後找舊版的ArduinoIDE[整合開發環境(Integrated Development Environment)]安裝

這裡選擇1.6.9版本

進入下載頁面後選Just Download
接下來安裝就不贅述,就一直下一步就好,若你有安裝其他版本的ArduinoIDE,安裝程式會先解除你目前的ArduinoIDE,才會繼續安裝1.6.9版本的ArduinoIDE

安裝好ArduinoIDE後,可能不會像畫面是中文的,不過沒關係,先選擇圖片中相對位置的選項進行更改,檔案->偏好設定

選擇後會出現這個視窗,若沒中文的同學請在Editor language選擇Chinese(Taiwan),然後再選擇下方的按鈕

跑出另一個視窗後輸入http://arduino.esp8266.com/stable/package_esp8266com_index.json,然後選擇OK,另一個視窗也選擇OK,再重開ArduinoIDE之後,就是中文的啦!

接下來到"工具->板子->板子管理員"中安裝ESP8266 Core

 選擇後後會出現下面這個視窗,選擇2.3.0版本安裝,然後他就會開始跑下載,下在完成後關閉按鈕才會跑出來,這時候才能關掉視窗

若有成功安裝,則板子內會出現許多新的選項

2.連接ESP8266燒錄電路
接下來會需要幾樣工具,麵包版或洞洞板USB轉TTL模組(建議用CH340系列或CP2102系列,較不會燒錄程式失敗)、5V轉3.3V降壓模組或降壓IC,以下是我用的USB轉TTL模組和ESP01版本的腳位圖(黑色板子跟藍色板子的ESP01腳位一樣)



幾個比較要注意的地方
1.ESP8266能接受的電壓3.3V
2.要接3.3V的有ESP8266的VCCCH_PD兩個部分
3.GPIO0要在接上電前接到GND,否則會沒辦法進入燒錄模式
電路如下圖
USB TTL <–> ESP-01
GND               GND
TX                   RX
RX                  TX
3.3V               VCC
 3.3V             CH_PD
GPIO0           GND

3.燒錄Arduino程式到ESP8266內
這裡要先確定你ESP8266的Flash Size,若你的ESP01是藍色的,就選第一個512K(64K SPIFFS),若你的ESP01是黑色的,就選第四個1M(512K SPIFFS)
再來就是Upload Speed,若CH340系列或CP2102系列的USB轉TTL模組,可以選擇921600,若不是CH340系列或CP2102系列的USB轉TTL模組或是上傳一直失敗的同學,請選擇115200,然後甚麼都先不用寫,直接選擇"上傳"按鈕(箭頭那個)
若程式有上傳成功,會出現像下圖的訊息(要在"偏好設定"中,勾選"顯示詳細輸出"的"編譯"和"上傳",才會有橘色字的訊息)

那本篇的教學先到這邊告個段落,下次會繼續寫關於ESP8266程式部分與電路部分,大概內容會以現在目前常見的Arduino模組,將電路與程式碼移植到ESP8266上

參考:
1.Arduino core for ESP8266 WiFi chip
https://github.com/esp8266/Arduino
2.燒錄程式電路圖
http://www.circuitsgallery.com/2016/01/getting-started-with-esp8266-esp-01.html
3.ESP8266模組
http://web-engineering.info/node/65
http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family