2018年1月19日 星期五

[Tinkercad arduino程式設計] 設計按鈕監控程式

按鈕(Push Button)是常見使的輸入裝置,透過開與關(On and Off)來控制輸出設備的狀態,上面影片很清楚地說明控鈕有四個接點,分別是11,12,21,22,其中11和12始終是連接在一起,21和22也是,因此其實只有2個接點。接下來用它來當做數位輸入,接到arduino 第2支腳,其接法如下:

程式如下:
int buttonState = 0;

void setup()
{
  pinMode(2, INPUT); //第2支腳為輸入
  pinMode(13, OUTPUT); //第13支腳為輸出
}

void loop()
{

  buttonState = digitalRead(2);//讀取第2支腳的訊號

  if (buttonState == HIGH) { //檢查狀態是高電位?
    //LED ON
    digitalWrite(13, HIGH);
  } else {
    // LED Off
    digitalWrite(13, LOW);
  }
  delay(10); // 延遲10ms
}
上面程式很簡單使用digitalRead()來讀取第2支腳的訊號,儲存在buttonState的變數中,檢查狀態是高電位,若是則點亮LED否則熄滅LED。

開關是屬於機器結構,會有所謂彈跳現象,因此我們必須撰寫消除彈跳現象的程式,如下:

(millis() - lastDebounceTime) > debounceDelay

完整程式如下:


2018年1月16日 星期二

[Tinkercad arduino程式設計]使用脈波寬度調變PWM控制LED亮度

前一篇我們使用digitalwrite來控制LED的on/off,本篇則介紹如何使用脈波寬度調變(Pulse Width Modulation, PWM)控制LED亮度,造成一種由暗到漸漸亮,亮到漸漸暗的效果。
上圖剛開始使用title block comment視覺模塊來當成註解,說明程式的功能,接下來用兩個count計數視覺模塊來設計迴圈效果,一個是上數up,另外一個是下數down,每次增減量都是以5為單位,範圍從0-255或255-0。控制變數為brightness,然後用set pin輸出視覺模塊來控制第9腳LED的亮度。最後再利用wait來製造延遲效果。以下是將上圖轉換成程式,要特別留意是set pin輸出視覺模塊會被轉換成analogwrite()以類比輸出方式來控制LED的亮度,這就是PWM技術。 在arduino中標有"~"符號者,就是可以被當成類比輸出,有 ~3、~5、 ~6、 ~9、 ~10 和 ~11等腳位。


2018年1月15日 星期一

[ Tinkercad Arduino] 用Ardino快樂學習程式設計

前幾篇文章我們介紹如何使用Tinkercad去設計以及模擬電路,Tinkercad是一套免費的工具,功能相當強大,可以學習3D建模、電路設計、以及程式設計。今天本文要介紹就是如何使用Tinkercad來學習程式設計。以步驟如下:

1.開啟Tinkercad網站:https://www.tinkercad.com,登入帳號和密碼後,選擇Circuits以及Create new Circuit。



2.選擇Arduino元件。


3.加上LED以及330歐姆的電阻,並將它連接到Arduino第13支腳以及GND。

4.開啟Code Editor,可以看到程式碼已經撰寫好了。


5.按下Start Simulation,就可以看到它在執行。
這次從123d circuit到Tinkercad circuit的改版,在程式部份增加視覺化的程式設計,用拼圖方式就能寫程式。程式設計如下圖,先把內建LED(build-in LED)點亮,等待(wait)1秒,再把內建LED(build-in LED)熄滅,再等待(wait)1秒,依此循環,雖然視覺化的程式設計看不出來有循環的意思,但對於嵌入式系統,會有一點超級大迴圈。

上圖的轉換成程式列表如下:

void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
}


2018年1月14日 星期日

[Tinkercad] 簡易電路LED串並聯介紹


(影片來源:https://www.youtube.com/watch?v=upuGkCdGEKA&t=30s)

Tinkercad是一套教導小朋友認識基本電路的好工具,上面影片中教導我們如何用三用電錶來量測電壓電流、以及電阻,再教導我們認識兩個LED的串並聯電路。

以上是我使採用330歐姆的電阻以及9V的電池,來觀察發現電流高達20.9mA,已經呈現過電流的現象。



採用LED串聯電路,指一顆LED正極接至另一顆的負極,我們可以發現電流下降到14.9mA,已經沒有過電流的現象,記得串聯流經每顆LED的電流是相同的。

採用LED並聯指一顆LED正極和負極分別接至另一顆的正極和負極,我們發現電流增加到21.1mA,也沒有發現LED有過電流的情形,因為並聯所以每個LED的電流值僅10.55mA。


接下來我們來做實驗,求LED過電流最低是多少呢?

(1) 大約超過20mA就有過電流現象。


(2) 大約超過145mA就有燒毀現象。



2018年1月10日 星期三

[Tinkercad] 好用的電路學習工具-TinkerCAD

Tinkercad不僅是適合所有人的簡單線上3D設計和3D列印應用程式,同時也是學習電路設計、模擬的好工具。首先,可以在上圖右上方先註冊,取得帳號後就可以登入。


在上圖有左方,可以選擇Circuits選單,然後按下Create New Circuit按鈕,就可以開始設計,下面影片是教導如何用一個開關來啟閉馬逹的運轉。




這套工具很強,也很實用。

2018年1月8日 星期一

[英雄出少年系列] 測水位

目前市面上賣售的水位計,可以看水利署電子報認識水位計

本文介紹的接觸式水位計。
電路圖:


程式碼:



結果:



作者:
雲林科技大學-資訊工程所 莊尚儒
曾於財團法人資訊工業策進會 DIGI+ Talent計畫中研習,平時興趣為設計開發板的應用、網頁設計、App設計與科技和商品結合的設計

2018年1月7日 星期日

[英雄出少年系列] 用Arduino控制伺服馬達

伺服馬達用在機器人關節的控制,對於設計機器人而言,是很重要的技術,伺服馬達就是使用伺服機構的馬達(電動機),簡單說就是可以精準控制,如本篇文章提到用角度來控制。

電路圖:


程式碼:

#include

#include

Servo myservo; // 建立Servo物件,控制伺服馬達

void setup()
{
  myservo.attach(2); // 連接數位腳位2,伺服馬達的訊號線
}

void loop()
{
  for(int i = 0; i <= 180; i+=1){
    myservo.write(i); // 使用write,傳入角度,從0度轉到180度
    delay(20);
  }
  for(int i = 180; i >= 0; i-=1){
    myservo.write(i);// 使用write,傳入角度,從180度轉到0度
    delay(20);
  }
}

實驗結果:

作者:
雲林科技大學-資訊工程所 莊尚儒
曾於財團法人資訊工業策進會 DIGI+ Talent計畫中研習,平時興趣為設計開發板的應用、網頁設計、App設計與科技和商品結合的設計

[英雄出少年系列] Arduino超音波測距範例

電路圖

程式碼:

實驗結果:









作者:
雲林科技大學-資訊工程所 莊尚儒
曾於財團法人資訊工業策進會 DIGI+ Talent計畫中研習,平時興趣為設計開發板的應用、網頁設計、App設計與科技和商品結合的設計

2018年1月6日 星期六

跨出混合實境的第一步,地板和天花板的偵測

虛擬實境(Virtual Reality, VR)是指用電腦虛構出生活情境,與使用者進行互動的一種科技,跟使用者所處環境無關,一切的影像都是虛構出來的,而擴增實境(Augmented Reality, AR)是在現實生活中呈現出3D的物件或數位內容,如影片等,最常使用的技巧是用標籤(Marker)方式,Vuforia是採用非標籤(Markless)的方式,用影像物件(Image Target)的方式其實影像物件也可以算是標籤的一種,只是沒有邊框而已,當然使用不的樣式來設計,其辦識的方法就不同。以下是用Vuforia影像物件來實現AR的情形:



混合實境(Mixed Reality,MR)是較新的概念,它結合AR和VR,利用現實環境來打造電腦虛構出來的場景,因此地板和天花板的偵測就變得相當重要,要讓運算裝置(電腦或手機)能知到地板、天花板、和牆壁等。以下微軟推出Hololens專案的展示影片:



看完影片,您是不是覺得很有趣,也很好玩呢?接下來我們來看到如何使用Vuforia以及Unity來實現地板和天花板的偵測。
軟體的版本:
Vuforia 7
Unity 2017.3 (ARKit enabled iOS devices only)
目前Android要等Unity 2017.3的補丁檔或是Unity 2017.4才會支援,以下是建立地板偵測實驗步驟:
1.開啟Unity 2017.3(含以後)
2.建立新的專案
3.在Edit選單中選擇Project Settings> Player,按下 PlayerSettings按鈕,在“XR Settings”區塊中,將“Vuforia Augmented Reality Supported”打勾。

4.替換預設的“Main Camera”成為"ARCamera",在Game Object選單中,選擇Vuforia> AR Camera,在scene視窗中產生新的AR Camera物件,移除預設 “Main Camera”。
5.在Game Object選單中,選擇Vuforia> Ground Plane> Ground Plane Stage。
6.地平面階段遊戲物件(Ground Plane Stage GameObject)為其他遊戲物件(GameObject)的父親的角色。數位內容應該是地平面階段遊戲物件的一個小孩。 請注意,地平面舞台有視覺標記,表明它是100平方厘米。 這些視覺指南僅在Unity編輯器中呈現,並用於確定Unity編輯器中的真實世界的比例。 此外,地面平台允許內容相對於地平面本身定位,允許將內容相對於現實世界的地平面。
7.接下來放一些數位內容放到地平面舞台上。 在 Game Object單中,選擇3D Object> Cube。 這將在Unity  Hierarchy 窗口中,建立新的Cube物件。 拖動Cube,使它位於地平面舞台GameObject的內部。 將Cube的X,Y和Z位置設置為0.將X,Y和Z Scale設置為0.1,您應該看到它佔據了舞台的大約一半。


8.在Game Object選單中,選擇 Vuforia> Ground Plane> Plane Finder, 平面搜查器(Plane Finder)的主要任是:

1.使用錨點輸入監聽器行為(Anchor Input Listener Behaviour)來監聽用戶的輸入(例如在設備屏幕上輕按)。
2.試圖找到一個適當的平面,在真實世界中以平面搜索行為(Plane Finder Behaviour)放上數位內容。
3.在真實世界使用內容定位行為(Plane Finder Behaviour),嘗試找到一個合適地方將在數位內容放在現實世界,本範例的數位就是指在步驟7的Cube。

9.將“Ground Plane Stage”物件拖到“Content Positioning Behavior”組件的“Anchor Stage”參數中。

10.在Project視窗中,可以在Assets\Editor\Vuforia\ForPrint\Emulator\目錄下,找到下列影像物件,把它放在地上就可以進行測試。


11.敏哥偷懶直接在電腦中打開,按下Play鈕進行測試,結果如下圖:


2018年1月1日 星期一

Vuforia 7讓擴增實境更貼進我們的生活

在2017年12月19日Vuforia推出新版本 - Vuforia 7,發表"Vuforia 7 is Available!"的文章,這個版本有三個主要的特點,分述如下:

  1. Vuforia模型目標(Vuforia Model Targets)”透過形狀來識別物體,而現有的方法是以平面影像上的特徵點,例如:平面印刷品、產品包裝和許多消費品上。 模型目標是完美的,可以把數位內容聯結到工業設備、汽車或家用電器等物品上。
  2. Vuforia地平面 (Vuforia Ground Plane)”可以將數位內容呈現在地面、天花板或桌面上,Vuforia構建一個可視化應用的理想解決方案,從家俱購買到擴增實境的設計評論。 地平面功能支持從啟用的iOS設備的ARKit開始到各式各樣的設備 ,擴展到時下流行的Android和iOS設備。
  3. Vuforia聚變 (Vuforia Fusion)”是全新的功能,主要是用來解決在相機、傳感器、晶片組、以及軟體框架(ARKit和ARCore)等內部支持AR技術的碎片化(Fragmentation)問題。 借助Vuforia聚變應用程應可自動提供解決此問題,而不需要額外的工作。
Vuforia模型目標(Vuforia Model Targets)


Vuforia地平面 (Vuforia Ground Plane)



Vuforia聚變 (Vuforia Fusion)用在同步定位與地圖構建(SLAM或Simultaneous localization and mapping)視覺慣性測程(visual inertial odometry)