Quantcast
Channel: CAVEDU教育團隊技術部落格
Viewing all 678 articles
Browse latest View live

[App Inventor] 比特幣價格顯示器

$
0
0

本文要介紹如何使用 App Inventor 的 Web 元件來取得網路上的比特幣價格走勢,並以 Google Chart折線圖來呈現。相關的應用我們已經寫過很多種,藉此您可知道 json 格式算是相當普遍的應用。

作者/攝影   曾吉弘
時間   3小時
成本  0
難度   * * *
材料表
  • 個人電腦Android手機 (也可用電腦端的 Android模擬器)

比特幣這款虛擬貨幣誕生於2009年,從一開始就受到矚目,價格也節節攀升。世界上許多企業與人們開始接受比特幣作為付款方式之一。有些實體店家也收/販售比特幣,例如台灣全家超商。當然,比特幣也可以匯兌方式交易,因此有以美金與其他主要貨幣計價的價格。2017年2月份查詢結果為1:1031。

 

線上比特幣服務

開始寫程式之前,我們得先知道如何取得比特幣的目前價格 (美金為單位)。

在網路上提供比特幣的目前價格或是歷史價格走勢的網站很多,例如Coindesk:

http://www.coindesk.com/price/

您可以在網站上取得比特幣的目前價格,還有相當漂亮的圖表來顯示比特幣的歷史價格走勢:

 

但這只能在網站上操作,我們需要一個介面或格式讓App Inventor可以擷取。因此在此我們採用另一個 coindesk 所提供的 API,這樣就能透過App Inventor的Web元件來處理它了:

http://api.coindesk.com/v1/bpi/currentprice.json

您可以直接從網路瀏覽器開啟,可看到這樣的文字網頁,只是格式是我們喜歡的json:

或是可用 JSONEditorOnline 這類型的網頁幫助您了解這份 json 的架構:

App Inventor程式說明

本範例所使用的元件不多,Button用來觸發網路爬資料等作業、Web元件負責擷取並解析json格式資料後轉成list。Clock元件是用來控制每20秒要求Web元件去取得資料,累積到10筆資料的話就要求WebViewer元件以Google Chart 折線圖的方式來呈現比特幣價格走勢。

 

Designer頁面

請依照下圖來完成本範例的元件配置,不需要一模一樣,差不多就可以了。

請記得把 Web (不是 WebViewer喔!) 元件的 Url 欄位填入資料來源:”http://api.coindesk.com/v1/bpi/currentprice.json

 

Blocks頁面

STEP1 按鈕啟動Clock取得最新價格的json資料

按下 Button_update 會把相關的變數、list 清空,並啟動 Clock.Timer 來更新資料。

STEP2   每20秒取得一次資料

Clock.Timer每20秒會啟動一次(TimerInterval = 20000),首先呼叫 web.get 方法去取得網頁內容。接著檢查 temp list 的長叫度,如果 >= 10 (這是我們自行決定的資料長度,您可以自行修改) 就呼叫 updateGraph 更新畫面並關閉 Clock.Timer。反之如果筆數不到10,則把 parseJson (就是該次呼的比特幣美金計價資料) 丟到 temp list 中。

STEP3 取得資料後進行解析

Web.GotText事件會在取得資料後自動啟動,在此我們把取得的網頁資料(純文字網頁,只是格式剛好是 json,因此您也可以這樣建立網頁,超簡單) 使用 Web.JsonTextDecode指令轉成 list 之後放入 json 變數中,並設定為 ListPicker 的內容。

STEP4 parseJson 副程式

這就是圖形化介面比較麻煩的地方了,為了取得比特幣的美金價格,要使用 select list item指令依序拆解,因此為了不要讓畫面被這一堆指令塞滿,還是用副程式包起來比較好。

STEP5 updateGraph 副程式

本副程式中,首先使用 for 迴圈重複10來組合每次取得的比特幣價格,搭配”,”分隔之後再組合下一筆價格。

最後呼叫 WebViewer 開啟 Google Chart API 網頁即可看到走勢折線圖。由於我們只需要修改 chd=t: 後面的資料內容,所以前面的網址都以字串方式寫在程式當中。相關Google Chart API 請參閱官方網站

操作

安裝好程式之後請點選[Update bitcoin price]按鈕,就會在狀態列看到目前已取得的資料筆數,一旦累積到10筆資料就可以看到折線圖了。比特幣一直在漲啊…

如果不耐煩的話,您可以把Clock.Timer的 TimerInterval改快一點,例如1000代表每秒更新一次,但這樣一來由於時間太密集,比特幣價格變化不會太大(當然還是有可能暴漲暴跌),所呈現的走勢圖應該就會是一條直線了。

 

相關文章:


[物聯網屋專題實作計畫]用LEGO®製作物聯網屋

$
0
0

誤:為了名正言順的動用公司資金玩LEGO,特別提案製作LEGO物聯網企劃。

正:為了提供更好的物聯網學習體驗,使用互動性、模組化最佳的LEGO積木為素材,整合Linkit Smart 7688 Duo物聯網開發板、聯發科雲端服務(MCS)、Seeed Grove感應器,打造【CAVEDU第三代物聯網屋】。

作者/攝影   鄭建彥/CAVEDU教育團隊
時間
  •  30分鐘(開箱時間)
  • 2~5分鐘(製作時間)
成本
  • Linkit Smart 7688 Duo
  • Linkit Smart7688 Duo Arduino相容擴充轉接板
  • LEGO 75827
  • Grove加速度感應器
  • Grove火焰感應器
  • Grove溫溼度感應器
  • Grove 水感應器
  • 風扇模組
  • 5mmLED
難度  

我們家老闆也不是那麼好騙的,哪有這麼隨便就讓我們動用公司資源開專案,一定要有範例佐證一下。

還好我出門遊玩工作時,有順手拍照記錄的好習慣。

這是2016 CAVEDU物聯網應用發表會,亞馬遜雲端服務(AWS)所展出的LEGO物聯網屋。

2016年的新加坡Maker Faire,Cognizant的攤位活動也是LEGO小屋+樹莓派+平板

 

已經可以證明使用LEGO為房屋素材,是世界級大廠的共同選擇,所以我們選用LEGO也只是剛好跟上一流國際科技品牌的腳步而已。

我們在玩了評測好幾間LEGO屋之後,決定選用LEGO 75827。

是的,就是那棟魔鬼剋星消防局總部,滿滿三層樓的回憶與感動(想當年那卷魔鬼剋星錄影帶我也是一看再看啊!)。

這麼豐富的零件,讓滿懷感動的我們,花了好幾個晚上組裝才完成。

 

說好的物聯網功能呢?

首先,先研究如何將感應器跟LEGO積木裝在一起。Seeed Studio推出了可以將Grove系列模組跟LEGO積木結合的保護殼(工商服務:http://shop.robotkingdom.com.tw/seeedstudio/grove.html),剛好解決這個問題。

接下來就可以輕鬆愉快的Grove感應器們裝上去了。

 

安頓好了各輸出入模組,下個問題才讓我們手忙腳亂,線 要 按 怎 牽 ?

每個樓層都有好幾個模組,每個模組都要拉線到控制板上,這麼多線要如何安全、整齊的配置呢?我們製作了這個黑盒子(商業機密,恕不公開內部照片),解決了這個惱人的問題。

 

好用又好玩的LEGO物聯網屋就完成啦。

 

等等,你以為我們這樣就滿意了。

我們再接再厲的改裝了LEGO辛普森他們家。

 

下個改裝目標據說是這個

 

想看實體嗎?歡迎在2017/5/27、28來華山1914文創園區的東二館,我們會在【放課後】展出。

購票網址:http://shop.robotkingdom.com.tw/funschool/funschool.html

 

相關文章:

電路設計軟體Multisim Blue]電路繪製-基本LED電路篇

$
0
0
作者/攝影   偉和
時間   20min
成本 NT.15
難度   * * *
材料表
  • 單面電路板
  • 220歐姆*1
  • 3mmLED*1

安裝完畢後,執行Multisim Blue。開啟後就會看到下面的畫面,中間空白的區域就是我們放元件的位置喔!

在剛開始學習繪製電路前,我們會有個目標電路圖,無論是自行設計的或者是別人提供的,我們要將這些電路圖轉繪製到Multisim Blue上。

下圖為這次的目標,上面一長一短的圖示為電池(電源),左下角箭頭圖案的為LED(發光二極體),最後右下角的是電阻。

 

 

知道要畫什麼圖後我們就要開始新增元件將電路圖畫出來。

 

1. 新增元件:點擊上方的Place→Component(或者Ctrl+W)

 

 

2. 點擊後,就會出現

3. 點選Group選擇Diodes:我們要先拉出LED元件

4. 點選LED→選擇LED_blue(可選擇自行想要的顏色)→點選OK

5. 在元件放置區找空白處點擊左鍵放下元件,按下Close關閉新增元件視窗

6. Ctrl+R旋轉LED元件直到如下圖

7.新增元件(參考步驟1、2)點選Basic

8. 選擇Resistor→在上方輸入200→點選200→Package選擇「IPC-2221A/2222/RES1300-700X250」:Package是選擇哪種詳細元件,電阻的外觀、特性、尺寸百百總,透過這個就能明確指出要哪個電阻

9.左鍵點擊led最右邊

 

 

10. 拉到電阻左端再左鍵點擊一次就會相接起來了

 

 

11.接著新增Vcc(正極電源),Source→POWER_SOURCES→VCC,點擊OK,放置「元件放置區」的空白處

 

12.再來新增GND(電源負極/接地),Source→POWER_SOURCES→Ground,點選OK,放置「元件放置區」的空白處

13. 如下圖將VCC、GND與LED、電阻相接

到這邊還不算完整,VCC以及GND是屬於虛擬元件,相較於LED、電阻有選擇Package,VCC、GND這二元件卻沒得選擇,我們接下來要選擇電源接頭讓VCC、GND實體化。

 

14. 新增元件→Connectors

15.HEADERS_TEST→HDR1X2,按下OK

16.將HDR接腳分別將上VCC與GND(參考11、12)

17.設計完畢後,接下來要將電路圖轉成PCB:

Transfer→Transfer to Ultiboard→Transfer to Ultiboard 14.0

18.存檔

19.按下OK

你就會看到Ultiboard介面了

20. 框選元件

21.挪到原點(左下角、白色十字)附近、黃色框線內

22.將元件旋轉(Ctrl+R旋轉)並排列整齊

23.在右上方快捷欄內按下閃電符號快速佈線

24.佈線完畢後,由於線位於板子的上方,習慣上會將焊接面置於背面,所以我們選擇線

25.按下翻轉紐

26.這樣佈線就完成了!

27. 接著我們要將外板線縮小置我們要的大小,點擊左側PCB→Board Outline 2下

28. 點選外板線,並縮放至符合元件的範圍

29.完成

30.點選3D瀏覽可以觀看3D圖喔~

3D圖

31. 若要匯出給CNC、電路雕刻機等機械使用,File→Export

32.依照設備的需求設定並匯出Grbl檔就可以將電路板做出來了喔!

 

相關文章:

放課後限定 – AR拍照體驗 (Android) 與拍照機上傳Google相本 (Raspberry Pi)

$
0
0

放課後倒數4天了,我們精心準備了很多好玩的東西,本篇來介紹 AR拍照體驗 (Android)拍照機 (Raspberry Pi)。一定要來玩玩看喔!

AR拍照體驗 (Android + Unity)

使用 Unity 做的 Android app,開啟相機之後掃描[放課後](放心,這三個字在現場到處都是~),就會跳出可愛的小圖框,火箭框會旋轉喔~   旋轉到喜歡的位置就拍照吧~

圖像裡可能有文字

請先下載Android app吧,記得給我們評分喔

拿新書與鋼彈合照是一定要的

沒有自動替代文字。

拍照機 (Raspberry Pi)

剛好公司有現成的 pitop CEED,有片不錯的螢幕與外殼,就直接拿來用了。拍照之後就會上傳到放課後的 Google 相本(會加上圖框喔)

歡迎您來現場玩玩看這台拍照機,後續要改造或用於上課都非常棒喔

拍照後會自動把照片加上放課後圖框傳到放課後的 Google 相本,來看看拍照的效果吧

App Inventor IoT 新元件 – Arduino 101 與 BBC Microbit

$
0
0

App Inventor 新元件測試版釋出!看來BLE是大勢所趨,並新增了兩個主要的平台:Arduino 101 與 BBC Microbit不用再透過BLE元件去收發 integer, char 這麼底層的指令,直接有對應的感測器元件可以使用,上課更方便啦!

本文將以介紹App Inventor 結合 Arduino 101 為主,請參考MIT目前提供的植物監控App教學請由以下載點來匯入各個 aix 檔:

BLE藍牙元件 aix 載點

Arduino 101元件 aix載點

BBC® Micro:bit元件 aix載點

請由App Inventor 主站建立一個新專案,並由 Designer 頁面左下方的 Extension -> Import extension 來匯入上述的 aix 即可使用。我們會依序寫完各個範例,敬請期待喔~

Arduino 101 元件 (MIT說明)

加速度計(本身)

按鈕

陀螺儀(本身)

溫濕度(Grove)

LED(可指定腳位)

光感測器(Grove)

土壤濕度(Grove)

PWM馬達控制

腳位控制

接近度感測器(Grove)

RGB LCD(Grove)

Servo(一般servo)

錄音機(Grove)

MicroBit 元件介紹

Microbit 主元件

加速度計

按鈕

裝置資訊

DFU控制

事件

通用存取

通用屬性

腳位控制

LED

磁力計

溫度

UART

 

[3D繪圖]教你用Designspark快速畫出羊毛氈用模

$
0
0

去年暑假,我們在小小自造者營中教小朋友如何利用Designspark畫出空心模,這個模子不僅能夠當作氈羊毛氈時用來塑型的便利工具,也可以拿來當作餅乾模,黏土模等等~只要靠這個低中年級小朋友也能夠上手的好用軟體,很快就能輕鬆畫出空心模囉!請看以下教學~

作者/攝影  陳亭妏(阿圓老師)
時間   小於一小時(不含列印時間)
成本 NT.100元以下
難度   * * *
材料表
  • 3D列印機一台
  • 3D列印線材

阿圓老師習慣上視圖的環境下畫草圖,才有把紙擺正的感覺(?)

請先在左上角按下正面視圖,就可以準備開始畫草圖啦~

 

畫圖的主要工具在游標所在地方,首先我們先用圓形來做示範吧~

點選座標(0,0)當做圓的中心,依據各位的喜好選擇圓的大小~除了移動滑鼠,也可以用鍵盤鍵入數字,軟體預設單位是mm。

畫好以後,選取圓並點選平移複製,就可以完美的製造空心!這真是一個非常實用又簡單的功能~

點選中間的圓按下右鍵,並且選擇刪除,此時的刪除是刪除中間圓的面,因為我們接下來只需要外圈~

接著,按下上方的拉動,就可以把圈圈從2D拉成3D了~一樣除了滑鼠,講求精準的朋友也可以用鍵盤鍵入尺寸。

圓形基本款就在短短的幾個步驟完成了!!超級簡單!大家已經可以烤餅乾了(誤)

簡單的圓形做好了,接著讓我們來做一些變化型吧~

回到一開始的圓形,點選建構直線,在半圓的地方畫出中心線,長度不限。

點選中心線後按下右鍵,點選「設為鏡像線條」。

接著點回直線,畫左邊的時候,可以發現右邊也跟著有對稱的線出現!看得出來要畫什麼嗎~

鏘鏘!貓耳朵完成啦~只要靠著鏡像線條就能輕鬆的畫出對稱圖形喔!如果之後再畫上別的線條,也一樣會跟著被鏡射,若是不需要鏡射了,就點選右鍵將它刪除。

接著,點選左上方的修剪。

點一下耳朵與頭連接的地方,這條是不需要的線,所以要把它們剪掉。

刪掉之後,貓咪的外框線條就完成囉!接著跟剛剛一樣的方法,使用平移複製製作出空心模。

刪掉中間的面之後,阿圓習慣把視角傾斜一點,比較好把草圖拉高,想要改變視角,可以按住滑鼠的滾輪,並且移動游標就可以囉!

最後一個步驟,拉高囉~

做到這邊其實已經完成了!但是阿圓擔心貓的耳朵太尖銳,使用的時候會被刺到,那麼該怎麼導圓角呢?

按下Control可以多重選取,點選兩邊耳朵尖角處的線,也就是圖上黃箭頭指的地方(是線喔!不要選成面了!!!)

點好之後,要選哪個鍵呢?答案是都不用選!!!只要按住滑鼠左鍵,並且左右移動,就可以拉出圓角了!超神奇又超快的啊~~~

完成!它變成無害的貓頭了。

最後來參考一下封面圖片中,孩子自己畫的小章魚的草圖~頭是圓形,身體是直線,用修剪工具剪掉圓形的下半部,腳的部分則是用曲線工具來完成。

這邊有一個要注意的地方!使用平移複製工具,將圖形內縮時,會發現章魚的腳變形了!

所以,此時我們可以改成把圖形「往外長」,把滑鼠移到草圖的外面,就不會影響草圖原本的形狀~

再用剛剛的教學如法炮製,就完成啦~是不是超級簡單的呢?大家快一起試試看,做出獨一無二的空心模吧!

 

相關文章:

[活動] 放課後Fun School,100種撒野提案

$
0
0
作者/攝影  Eva
活動時間   2017 5/27-5/28
活動地點   華山1914文創園區-東二ABCD四連棟

放課後、下班後,除了看電視或者約吃飯之外,能不能試著跳脫生活日常?放課後主辦單位CAVEDU教育團隊本著「Make Something」的精神,邀請各方手作達人共同發想他們的放課後提案,不論是運用厚紙板或者程式碼,這些Maker不是要解決多麼了不起的問題,只是回歸童心,不分大人小孩,找到純粹的樂趣。

 

 

活動為期兩天(5/27-28),與其說是展覽,現場更像是個遊樂場、嘉年華會,有許多家長帶著小孩,開心玩遍每個攤位,自己也忍不住開始DIY;參展人員和工作人員不斷重複同樣的話,但每一遍還是耐心地笑著解釋。問了兩、三個家長怎麼會來逛展,都回答說是被門口的再生環保手作香包吸引,進來之後發現別有洞天,關卡太多只恨沒有早點進來。

 

上圖:再生環保作香包

八零年代撒野奇招!

本次的展區分為「撒野區」、「玩社團」、「研究室」三大區域。「撒野區」由主辦單位CAVEDU教育團隊發想,利用吸管、紙杯、寶特瓶、保麗龍球等隨手可得的材料,設計出不插電塗鴉機器人、風洞飛船、抖抖先生畫卡片等八大關卡,看起來好像有點陽春,娛樂性卻完全不輸給電玩。恍惚中有種錯覺,以為回到八零年代,只要幾顆彈珠、幾個拼片或幾個香包就能揮霍整個童年。

上圖:漂浮立蛋

漂浮立蛋中,玩家需要用吸管將保麗龍球依序吹到各個放置點,這似乎是最難卻也最有挑戰性的一關,保麗龍球很輕,常常被吹落在地,參與者不斷要去撿球,但是每個參與者都捨不得離開攤位,很有耐心地試了七、八次以上。

 

火箭攻城這關特別受到男孩們的喜愛,利用寶特瓶和 PVC 水管製作。玩家先排好紙箱、裝好寶特瓶、調整發射角度,然後大力踩踏寶特瓶,產生壓力,藉此發射PVC管口的寶特瓶火箭。這個過程非常過癮,每個人至少也都試了七、八次,其實滿耗費體力的。

 

獨樂樂不如眾樂樂

「玩社團」展區中,發現社團可以玩得多麼認真!這已經不是一周一次社團活動等級了,每個攤位似乎都抱著強大的企圖心,試圖席捲全台灣。這當然是有點誇張的說法,但有些社團不是貪圖一時玩樂,而是永遠玩樂,一群人長期投注時間與心力,穩定發展成現在的規模。

圖:未來產房-絹印

圖:未來產房-玻璃瓶雕刻

圖:未來產房-客製單車

FutureWard未來產房是一個自造者空間,串聯各種軟硬體資源,因為位於大同大學內,許多院校學生參與,這裡的作品都年輕有活力,放課後現場提供翻模、玻璃瓶雕刻、絹印、雷切、3D列印體驗,這些都是未來產房內不定期舉行的工作坊,某位同學還展示了學長的玻璃瓶雕刻字體:「要練習很多次才有辦法刻這麼美。」

圖:永春高中轉轉手陀螺 (趙珩宇提供)

 

永春高中轉轉手陀螺的攤位上充滿琳琅滿目的指尖陀螺,三角型、三個圓形、手裏劍型⋯⋯有的還會發光,永春高中生活科技老師趙珩宇因為看到學生玩著時下正夯的指尖陀螺,開始研究怎麼DIY,利用3D繪圖軟體設計造型,不斷嘗試、修正,大家一起討論怎麼可以讓陀螺轉得更久。放課後現場完全可以感受到指尖陀螺的魅力,一直都是滿滿的人潮。

 

圖:豆采龍兒藝術中心

豆采龍兒藝術中心是板橋一間繪畫教室,他們這次展示了學生手繪自製的桌遊,玩法類似記憶遊戲,重點是他們的牌卡圖案天馬行空,每一幅都像是藝術品,難怪畢卡索曾說:「我曾經像拉斐爾那樣作畫,但是我卻花費了終身的時間,去學習像孩子那樣畫畫。」

 

圖:Young Maker展區- 投幣販售機

 

Young Maker展區中,年輕Maker也大膽秀出創意。有個團隊用樂高製作投幣販售機,現場操作時經常故障,小編站在旁邊看他們故障、修復、故障、修復、故障、修復,重複了無數次,每一次糖果終於掉下來的那瞬間,大家一陣歡呼,那個畫面格外令人感動。作品不一定成熟,但是Maker精神值得敬佩。

圖:Young Maker展區-祕密基地,展示一些動腦小遊戲,例如挑戰如何裁切一張紙(不可剪斷),才能折成一個同一面色紙都向外的立方體。

 

機器人,永遠的研究

「研究室」這一區比較進階,Maker具備一些電子、機械知識,許多互聯網、Arduino、Linkit、樂高專題展出。不過機器人可以說是Maker的浪漫,邁克兄弟、ROBOTSMART人型機器人、機器人鋼鐵聯盟都投入機器人研究。

圖:舞台區的機器人格鬥1、2、3,觀眾都快比參賽者嗨了。

圖:ROV水下機器人體驗,機器人游速超慢,可是看著看著莫名紓壓,所以也吸引了很多玩家。

 

除了攤位之外,主辦單位CAVEDU教育團隊也開設「物聯網大專教師實作研習」、「Arduino、藍牙與智慧型手機整合運用」等研習課程,並舉辦「影響未來的科技們」系列講座,邀請第一線教學者、資深工程師、社群精神領袖演講,包括南港高中高慧君老師「我與高中生的Python搏鬥史」、LASS創辦人哈爸「LASS與我,從群眾議題推動的社會科技應用」、聯發科技資深工程師陳柏儒「Linkit 7697與MCS Lite」,可以滿足對科技新知有興趣的民眾。

圖:「影響未來的科技們」系列講座

 

講座或研習課程太進階?工作坊取名為麻瓜教室,親切又可愛,就是希望大家不要想太複雜,就開始動手吧!3D列印指尖陀螺、組自己的飛行器、繪本玩創意,課程多元,比較特別的是,這次還邀請到陶藝家蒲浩明老師開設黏土雕塑工作坊。蒲浩明為台灣雕塑界拓荒者蒲添生之子,沒有藝術家的高冷,他先簡單介紹這次雕塑的步驟:用鐵絲將人偶彎曲成想要的姿勢(攤位上有紙膠帶圖案可供參考),再選擇黏土顏色,慢慢包覆鐵絲、塑形。小朋友們很快就上手了,過程中幾乎不需要指導,但是老師和學生一問一答間(老師問學生答),大家更認識了彼此,作品完成後,連誰最近交了女朋友我們都知道了(咦?)

圖:蒲添生雕塑紀念館工作坊&北浦印象-添啊~3D攤位

 

第一屆放課後Fun School順利結束,有種「自己的玩具自己做」的味道,過程和結果一樣好玩,希望明年也可以一起撒野!

[電路設計軟體Multisim Blue]電路繪製-感應燈電路篇

$
0
0

將LED基本電路按照步驟繪製到Multisim Blue上,轉成PCB板

繼上篇[電路設計軟體Multisim Blue]電路繪製-基本LED電路篇]繪製完畢簡易LED電路後,在本篇我們要增互動性,我們選用C9013電晶體做控制的主體。

作者/攝影  偉和
時間   20min
成本  NT:85
難度   * * * *
材料表
  • C9013*1
  • LED 5mm*1
  • 5ψ光敏電阻*1
  • 9V電池座*1
  • 220歐姆電阻*1
  • 500K可變電*1
  • 電路板*1

下面這張圖就是本篇的目標,有時候找到的電路圖不一定是用電路符號繪製的,也有可能是實體照片、3D圖等,皆可以轉繪至Multisom Blue上。

1.新增元件Transistors>2N222A,然後點選OK

這時會有疑問,我們不是要用C9013嗎?怎麼卻用2N222呢?原因是Multisim並沒有市面上所有的電子元件,所以我們先選擇性質接近的元件

2.對2N222點選右鍵>Properties

3.點選「Edit component in DB」

4.將Name裡的2N222更改為C9013

5.在Transistors中新增「Def」(名稱可自取)

6.新增元件User Database>Def>C9013,並且刪掉原本在元件編輯區的2N222

7.新增元件RESISTOR>220歐姆,Package選擇PC-2221A/2222

8.新增元件>Diodes>LED>選擇自己要的顏色

9.新增元件>Basic>Trimmer_TH_top_Murata_PV36W>500K歐姆

10.將元件旋轉並相接起來如下圖

11.加上VCC以及GND

12.新增元件>Diodes>PHOTODIODE_TO5_Vishay>EL-PS204-6CA3

13.將光敏電阻接上

14.要記得將電源拉給接頭喔(請參考電路設計軟體Multisim Blue]電路繪製-基本LED電路篇

15.電路完成圖~

16.將檔案轉至Ultiboard上

17.按下OK後就會看到剛才拉的元件了

18.將元件移至左下角

19.選轉元件並整理排列好

20.將外板框縮小至元件範圍

21.按下快速佈線

22.將電路反轉至背面(焊接面)

23.完成!

 

相關文章:


[課程紀錄]物聯網大專教師研習-使用LinkIt 7697@經濟部通推小組

$
0
0
作者/攝影 曾吉弘
課程時間   2017 5/12
課程講師  曾吉弘
課程場地  TQC電腦技能基金會

通訊大賽物聯網組的大專教師研習開跑,2015年是LinkIt ONE, 2016是 LinkIt 7688,今年則是一片可愛的LinkIt 7697 (具備 Wi-Fi, BLE 的 Arduino相容板)。

7697的投影片在此(還有學習筆記),快100頁喔,喜歡就幫忙分享出去吧!

當天上課內容如下:

  • 7697 硬體介紹以及當作 Arduino使用
  • 基礎電路操作 – 使用 BlocklyDuino 與 Arduino IDE
  • BLE 基礎介紹,使用App Inventor 編寫Android app 來控制 7697
  • 由MCS雲服務來控制7697腳位
  • 上傳感測器資料到 MCS 雲服務指定之資料頻道
  • 如何外部取得 MCS channel 的資料點 (JSON format)

這次有個重要的亮點是 BlocklyDuino 圖形化介面(離線執行,載點請按我),除了基本的I/O指令之外,Seeed Grove套件、Adafruit 套件甚至 IFTTT, Blynk 等雲端服務等都寫好了。請一定要試試看。

對於小朋友來說,拉拉方塊就能寫好當然是最棒啦。但如果是會Arduino IDE 語法的朋友,可以轉成Arduino 語法之後再進行最佳化。不管怎樣,聽起來都是很棒的東西呢。

BlocklyDuino 主畫面

上圖之積木方塊轉為Arduino 語法

BlocklyDuino 之設定畫面

其實像是 IFrog ICblockwebduino 或是 Motoduino慧手科技的motoblockly 都有類似的服務。 

上課實況,感謝諸多老師參加喔!

上課會使用 7697 搭配簡易電子元件來做到各種互動功能,不過物聯網系列的課程重點都是在資料聯網之後的應用,能夠正確控制周邊應該是最大公因數,在此也感謝許多廠商努力提供好用的軟硬體。

使用App Inventor 藉由 BLE 通訊來與 LinkIt 7697 互動

下圖是上傳光敏電阻資料到 MCS 的資料頻道上:

LinkIt 7697(數大就是美)

Motoblockly.com 主畫面

webduino (轉 javascript) 主畫面

 

相關文章:

 

[LattePanda] 從零開始教學,在LattePanda上使用Python與Arduino來控制meArm機械手臂

$
0
0

本文章將帶領讀者從基礎開始,到學會用在LattePanda上面使用Python跟內建的Arduino Leonardo來控制機械手臂,想學習Python圖控界面,與Arduino的Serial溝通,或者是機械手臂的介紹的朋友不妨來看看本篇教學文喔!

作者/攝影  袁佑緣
時間   3小時
成本   約1,850(不含LattePanda)
難度   * * * * *
材料表

1.Python的環境安裝

首先請到python的官網(https://www.python.org/downloads/windows/)下載最新版的安裝檔,在這邊要提醒一下python目前有兩種版本,一個是7x版,另一個3.x版,2.7x版python是比較舊的版本,同時官方也有發出聲明將不會在繼續更新了,而本篇的範例使用的是新版3.x的python,所以請讀者注意一下不要選錯囉。

以筆者為例,最新的Python版本是3.6.1,以及LattePanda是64bit版本的,所以點選Windowsx86-64-excutable installer,如下圖。

接下來請記得在安裝python的時候將下方”Add Python 3.6 to PATH”勾選起來,意思是要把python加入windows的環境變數內。

安裝完後,為了測試我們的電腦是否能正常呼叫python,請呼叫您電腦的終端機,windows的使用者請按下快捷鍵”win+R”便會在左下角顯示執行視窗,接著輸入”cmd”,這樣一來就會叫出windows的命令提示字元,如下圖。

命令提示字元(command prompt)

接下來請輸入”pip install matplotlib”,使用python的套件管理員pip來安裝numpy這個套件。

接下來請輸入”pip install pyserial”,使用python的套件管理員pip來安裝numpy這個套件。

接下來為了要讓讀者方便開發python的程式,請到以下的網站(http://thonny.org/)下載並安裝Thonny這個python IDE。

2.Arduino 環境準備

請到官網下載最新板的Arduino IDE,下載網址請點這裡。以筆者為例,最新版本的Arduino IDE為8.2板,因為LattePanda上面運行的Windows10,所以請記得點選windows版的IDE來下載,另外為了不覆蓋到LattePanda系統原本舊版的Arduino,請點選”Windows ZIP file for non admin install”。

想直接下載的話請點選JUST DOWNLOAD,當然如果行有餘力的話也可以給予Arduino一些贊助喔!

最後解壓縮完成之後,點開Ardunio的資料夾執行IDE的程式即可。

另外,為了要控制LattePanda內建的Arduino Leonardo,必須將控制板選為Arduino Leonardo。

Arduino IDE在上傳程式碼的時候,需要選擇對應的port(連接埠)才能上傳到控制板上,如下圖,請選擇有Arduino Leonardo的COM port。

 

3.執行本專案的程式碼

請在Arduino IDE 上面完成以下的程式碼。

#include <Servo.h> // 引入Arduino控制伺服馬達的函式庫

Servo s[4]; // 建立一個長度為4的servo物件

// 宣告收到Serial的訊息與長度
int  data;
size_t data_size = sizeof(data_size);

void setup()
{
    Serial.begin(115200); // 將Serial的鮑率設定為115200
    
    // 將4個servo對應到以下4個Arduino腳位
    s[0].attach(7); 
    s[1].attach(8);
    s[2].attach(9);
    s[3].attach(10);
}


void loop()
{
    // 如果從Python圖控界面收到的資訊是s開頭,則檢視下一個字元
    // 是指定哪一個伺服馬達(0~3號)
    // 最後再接收一4個bytes的整數,作為馬達要轉到的角度(0~180度)
    if(Serial.available())
        if(Serial.read() == 's')
        {
            int servo_number = Serial.read() - '0';
            if(servo_number < 4 && servo_number >= 0)
            {
                Serial.print("Servo number: ");
                Serial.println(servo_number);

                while(Serial.available() < data_size);
                Serial.readBytes((char*)&data, data_size);
                Serial.println(data);
                s[servo_number].write(data);
            }
        }
}

上傳Arduino程式碼

請先確認您的Arduino IDE是否有按照2. Arduino環境設定,將Arduino Leonardo的板子與連接埠都選擇正確,並按下快捷鍵<Ctrl+U>或者是如下圖點選上傳的箭頭來上傳程式碼。

打開Thonny,完成以下的Python程式碼。

# matplotlib是用來顯示GUI的函式庫
# serial則是用來跟Arduino溝通的函式庫
# struct跟pack則是在Serial傳輸資料時,打包資訊會用到的工具
from matplotlib.widgets import Slider 
import matplotlib.pyplot as plt
import serial
from struct import pack

# 在連接埠COM8建立一個鮑率為115200的Serial
# 這裡要提醒讀者,記得要把COM8改成您LattePanda上的COM port
ser = serial.Serial('COM8', 115200, timeout=0)

# 定義一個函式,將會根據i(馬達/拉桿編號),回傳指定的函式
def send_ith(i):
    def send(val): # 定義一個函式,用來送出控制馬達角度的訊號
        data_header = bytes('s' + str(i), 'UTF8')
        data = int(val)
        ser.write(pack('<2si', data_header, data))
    return send


# 初始化伺服馬達控制拉桿的圖形化界面以及其對應的函式
a = []
s = []
for i in range(4):
    a.append(plt.axes([0.2, 0.2*(4 - i), 0.6, 0.07]))
    s.append(Slider(a[i], 'Servo' + str(i+1) + ' ', 0, 180, valfmt = '%d', valinit = 90))
    s[i].on_changed(send_ith(i))

plt.show()

執行Python程式

請在Thonny IDE上,按下快捷鍵<F5>或者是點選下圖中的播放鍵來執行Python

如果在執行Python時遇到如下的錯誤,那有可能是您的COM port沒有設定正確,請回去看一下2. Arduino 環境設定那一步中的COM port,並把正確的port輸入上面Python程式碼中。

成功執行後,就可以看到一個簡單的Python互動界面,讀者可以透過上面的拉桿來操控四個伺服馬達各別的角度。

4.接上機械手臂,來動手玩玩看吧

完成上述的步驟後,我們就可以來執行最後的實做部份了,本次範例所使用的機械手臂是有名的開源機械手臂meArm,上面有4個伺服馬達,一共有四個自由度,然後因為特殊的平行連桿機構,最尾端的夾爪會一直保持水平,方便機器夾取物件,加上使用壓克力平板與螺絲螺帽就能輕易組裝,是一個相當好入門的教育套件,接下來我們就來看一下要如何完成電路的連接吧。

LattePanda與機械手臂的接線如下圖,由於本範例所使用的Arduino腳位是7, 8, 9, 10,所以請按照官方給的腳位圖接上去(紅圈的部份)。

特別注意,為了保護馬達與電路系統,電源的部份請最後再接上去。

電路接線圖

LattePanda腳位圖

 

完成圖

上視圖

 

相關文章:

 

[DIY人形機器人] 日本Kondo人型機器人(22軸馬達)組裝篇

$
0
0

上回[[DIY人形機器人] 日本Kondo公司機器人<零組件分享KHR-3HV Ver.2>],我們完成了災損KONDO開箱,清點所有零件,這次我們要正式開始組裝,重建之路始動!

作者/攝影   高稚然
時間  備嘗艱辛的一年
成本
  •   17軸-新台幣63,000元(商城連結
  • 無盡的愛心與耐心
  • 優秀的夾線技術
難度  
材料表
  • KHR-3HV Ver.2一套
  • +五軸擴充套組或KHR-3HV Ver.2兩套
  • +JP24150端子(母接頭及3pin公座)
  • +杜邦母頭、3pin杜邦座
  • +端子鉗

有關詳細的硬體規格、型號及官網說明,請參考上篇:KONDO機器人KHR-3HV Ver.2開箱文([DIY人形機器人] 日本Kondo公司機器人<零組件分享KHR-3HV Ver.2>)。

 

上回我們辛苦地把零件清點完了(抹汗),但可別興沖沖地直接開始組,必須先確認零件功能一切正常並且校正才行,若貪快待組裝完畢才察覺問題,可是偷雞不成蝕把米呢。

KHR-3HV Ver.2的馬達是KONDO自家開發的串接模式,可以大幅減少接線的凌亂程度,但必須設定彼此間的串接關係。除了以專用軟體設定ID外,每顆馬達上都還有張貼紙標示區別。下圖1為17軸機器人各馬達的位置及ID編號:

圖1(圖片取自17軸的組裝說明書

 

這裡使用光碟內附的:ICS3.5 Serial Manager來檢測、校正、修改馬達狀態。依說明書指示組裝線路、開啟軟體並連線如下:

圖2

 

使用下拉式選單或直接按「取得」連上對應的ID,之後便可使用「動作」欄的拖曳桿操控馬達位置,數值範圍3500-11500,對應-135度到135度,結束前務必將馬達歸零(數值7500)。如果想改變馬達組裝部位,需使用該軟體更動編號並寫入(書込),但請於硬體標示清楚避免搞混。ICS3.5 Serial Manager尚可讀取馬達的溫度、電流值,並且調整保護閾值。

經過檢測後,有幾顆馬達宣告陣亡,面對眼前1點多套KHR-3HV Ver.2的我,一時鬼迷心竅,決定直接挑戰KONDO機器人最豪華的22軸版本!(關於KHR-3HV Ver.2各種擴充套件的說明,可以參考[KONDO KHR3-HV Ver. 2 硬體配備])

增加一個腰或頭的可動度、兩個胯的自由度,一隻手再加一個可動度,可以扭腰、轉腳、護住中線,聽起來多麼的吸引人啊!立刻比對了17軸的組裝說明書以及擴充5軸的組裝說明書,發現除了馬達數量、螺絲多了幾顆、接線長度改變外並無差異,完全沒有問題!帶著KODON的線材到光華尋找近似的規格,除了沒有現成的3 pin排線以及防呆杜邦頭外其餘都找著了。圖3為採買的耗材種類,由左上瞬時針依序為:螺絲膠、杜邦母頭、3pin杜邦座、JP24150端子座、JP24150端子,另外還有五彩繽紛的排線。

圖3

那麼就開始夾線囉!目前為止看似一切順利──才怪,1.5 mm的端子加上纖細的排線,用端子鉗DIY的良率不到五成啊,更別提實際組裝時又拉斷好幾條。圖4就是鐵錚錚地失敗紀錄,奉勸大家若想組裝擴充套件,還是找專人製作好的線材才是。

圖4

 

但在此時我並沒有預料到之後可能會有的慘烈,也忘了先檢查測試控制版,就這麼一股腦地往前衝了。

硬體的組裝並不難,但要注意的是由於22軸為擴充套件,KONDO預設使用者先組好了17軸機器人,所以它最開始的步驟──是拆解。為了避免裝裝拆拆作虛功,先將擴充5軸說明書掃過一遍,記下要改裝的位置,以便在兩份說明書切換。在組裝上半身、腰時看22軸的說明書,其他部分則以17軸為主,組到最後要接線整線時在跳回22軸。歷時近一年(其間我報名了兩次研究所,落榜了兩次),終於完成所有的組裝過程了,真是備嘗艱辛啊!如果大家想早點完機器人的話,建議還是先組17軸基礎版就好,後續Debug的問題也會比較少。

鎖螺絲、上伺服臂相對簡單,麻煩的是接線,務必仔細、再三確認正確與否,而自製的接線五彩繽紛且乏於防呆,更增加了挑戰性。套件中附有貼紙,以顏色及號碼區別接在控制版上的各條接線。成品如圖5。

圖5

KONDO也提供了整線的設計,利用塑膠塊及束線帶,將接線們整理地服服貼貼,相當地細膩,附上左腳及後腰的整線成果。

圖6

圖7

 

最後附上完成照,結束今天的文章,感謝一路讀到這邊的你/妳!

圖8

 

下回預告:慘烈慘烈再慘烈◢▆▅▄▃-崩╰(〒皿〒)╯潰-▃▄▅▆◣,除錯與通訊篇。

 

相關文章:

[課程紀錄]170615,16 國中小自造者教育師資培訓營@日新國小

$
0
0
作者/攝影  曾吉弘/趙偉伶
課程時間  2017 6/ 15 16 
課程講師  徐豐智、趙偉伶、陳煜倫
課程場地   台北市日新國小 / 台北市自造教育示範中心

來自台北市二十多位國小教師齊聚一堂,一起來認識如何將新的物聯網開發板 LinkIt 7697 應用於國小教學,為此聯發科技實驗室特別開發了以 Google Blockly 為基礎的 Blocklyduino 圖形化介面,不僅具備了圖形化介面,相關周邊如各種感測器的指令,還有Wi-Fi / BLE / 雲服務的指令也都有了,可以說是相當完整。

 

Blocklyduino 各作業系統版本下載頁面

106年度臺北市政府教育局與財團法人聯發科技教育基金會自造者教育合作計畫之夏令營報連結(請點選報名)

 

本次課程除了感謝台北市日新國小暨台北市自造教育示範中心聯發科技教育基金會的大力支持,讓所有老師都能有一套完整的設備帶回去慢慢研究。最感謝的當然就是兩天超認真上課的各位老師囉,期待各位能實際運用LinkIt 7697 x Blocklyduino於課堂中。

 

這兩天課程上了什麼呢?

6/15 6/16
  • 安裝程式環境
  • 接線讓LED亮
  • 組裝搶答器按鈕
  • 寫程式
  • 組裝搶答器外殼
  • 光線感測器程式講解
  • 組裝繼電器
  • 講解繼電器程式
  • 溫溼度感測器程式講解
  • 物聯網教室/物聯網屋demo

 

投影片:

 

來看課程花絮吧~

 

日新國小徐臺屏老師,近年推廣maker教育不遺餘力,本次活動很高興能在日新國小舉行,場地非常專業,相信上課的老師們都有同感。

(聯發科技教育基金會 Alan & Cynthia)


第一天:Blocklyduino 環境應用與搶答器製作

動手做就是快樂,哪怕手上都是雷切灰~

慢慢有樣子出來了

 

第二天:使用 :Blocklyduino 結合 MCS雲服務

第二天的課程內容是將7697的資料上傳到MCS雲服務,對小朋友來說就能從網頁上去監測某些感測器數值的變化。在此有請聯發科技基金會Alan來分享開發祕辛。

上傳之後除了可以看到最新一筆資料,也可以用折線圖的方式來呈現歷史資料,馬上知道數值的變化趨勢喔!

當然有了手機app,就可以設定當感測器值滿足我們所設定的條件時,自動推播訊息給您(這位老師的訊息有點… 但我想小朋友發的推播訊息內容應該會更勁爆吧)

樂高物聯網小屋示範

CAVEDU針對教學場域的物聯網應用也是很積極在推動的,除了有比較貼近生活情境的應用之外,還有一個比較整合性的思考。學生可以去構思在一個場域(教室、家庭或百貨公司)需要應用哪些技術可以解決現實生活中的問題。使用Blocklyduino 編寫 LinkIt 7697 板子的程式,再搭配 MCS 雲服務,看起來是相當不錯的選擇。可以從雲端控制電器狀態,也可以多人透過網頁/app 來觀看場域狀態。如果滿足某些條件的話,還可以寄發email / app 推播或經由 webhook 觸發其他應用程式,非常方便!

 

(更多資訊請參考,可以名正言順買樂高了![物聯網屋專題實作計畫]用LEGO®製作物聯網屋)

透過手機就能控制家中各種簡易電器開關,是不是很方便呢?

更多照片請參考台北市自造教育示範中心的Facebook粉絲頁,本文部分照片經中心同意只用之,特此感謝。

註:台灣如 webduino, iFrog 以及 Motoduino 也有類似的Blockly 圖形化環境並針對自家產品最佳化,也請點選上述連結來看看喔!

 

相關文章:

[雷射切割一點也不難 ]使用Inkscape簡單自製立式相框

$
0
0

市面上的相框有許多款式古典、簡約、華麗等等……五花八門的選擇,但有時卻無法找到合乎自己需要的大小,這時就可以使用繪圖軟體來自己畫出需要的尺寸,甚至是為相框點綴出具有特色風格的樣貌。

作者/攝影   陳煜倫
時間   2小時
成本  約200元
難度   * * *
材料表
  • 雷切用5mm壓克力
  • 雷射切割機X1
  • 螺絲螺帽5組
  • 相片或圖片皆可

本次主要繪圖出來的檔案是要由「雷射切割」的方式製作出相框,但因雷切機本身機台較大且不宜放置於家中,所以要使用雷切的朋友們,可搜尋附近的Maker Space或是創客基地,有些地方會提供雷切機租用的服務喔!

今天分享的透明壓克力相框是這次我製作出來的成品喔~當然相片中的女孩兒是我們家小公主(可愛吧!)

在畫圖之前,先來介紹一下今天使用的繪圖軟體-INKSCAPE 0.92.0,相信熟悉雷射切割的朋友們都知道提供給雷切機的檔案需使用「向量繪圖軟體」,而INKSCAPE是一套簡易操作的向量圖編輯器,開發者非常很大方的開放出免費軟體授權提供給設計者們使用,如果是想畫簡單向量圖的朋友們,它是個不錯的選擇喔!另外也有其他的向量軟體的選擇,如Adobe Illustrator(簡稱AI)或AUTOCAD這兩套軟體也是設計者們經常使用的熱門軟體,不過要注意這兩套繪圖軟體為付費軟體,如果只是單純想體驗的朋友們,不妨考慮先使用INKSCAPE喔!

INKSCAPE官網:https://inkscape.org/en/

點選進入官網時,將游標移入右上的「English」,按鈕自動會展開出欄位,這時點選「繁體中文」。

接著點選「Download」選擇您電腦的系統,進行下載軟體。

(在這個部分上覺得INKSCAPE的CP值蠻高的,雖然是免費軟體,還是不忘提供多種語言及系統版本提供給大家做挑選,非常貼心呢!)

安裝完畢後,開啟軟體後會看見圖上的畫面,表示您成功完成安裝了(拍手)。

圖上的成品就是今日教學目標,成品最後的應用不僅可以當作相框,也能當記事牌或是月曆板等等,大家可以自行發揮創意來利用喔!

接下來我們就要開始進行繪圖的部分了!

在軟體版面上會出現白底黑框的介面,黑框內則就是代表著我們今天繪製圖檔的範圍

當您想改變繪圖範圍尺寸時,請點選上方選單的「檔案」->點選「文件屬性」。

畫面會跳出「文件屬性」的設定視窗,軟體固定的預設,通常為A4(210X297mm)若有其他繪圖範圍需求可直接於設定值上調整。

這次的相框主體尺寸為長:120mm X寬:100mm,所以直接使用A4的繪圖範圍即可喔!設定完畢後點選「關閉視窗」回到軟體繪圖範圍的版面。

 

接下來就是繪圖的部分了,繪圖階段我們可分為五個步驟:

 

 Step1. 繪製外框

點選左邊工具列的「矩形工具」(上方數下來第六個工具,外型是方框圖型),在繪圖範圍中畫出矩形(這邊可隨意的畫出矩形即可)。

完成後矩形繪製後,會看見矩形4邊的角只有3邊有描點,再仔細一看右上方的描點為圓形,其餘則是方形。(這裡我們先不做動作,等會回頭再來做調整)

接著點選左方工具列的「選取工具」(按鈕的圖面為箭頭),就會發現3個點消失了,矩形的尺寸則會出現在上方的欄位。

我們這次繪製使用的單位為mm(公厘),在尺寸欄位旁會顯示出設定單位值(如果習慣使用其他單位的朋友們可在這邊做更換),使用mm的好處則是我們一般使用游標卡尺量測時mm是比較好掌握的單位。(單位的部分其實還是因人而異所以大家就使用自己慣用的單位做換算及填寫即可喔!)

我們將今天預定的寬高數值輸入進尺寸欄中(寬:100mm 長:120mm)。

將尺寸輸入之後,圖形就自動變成我們需要的樣子。

大家還記得之前出現在矩形4角的三個描點嗎?現在我們要回去找他們,在已選取剛畫出矩形的情況下,點選工具列上的「矩形工具」,回復到4角有三個描點的狀態。

接下來要點選右上角的小圓點,注意在上方及右方尺規上有個小箭頭,這箭頭是用來告訴你游標的位置的,可以借用來做尺寸的概估。

使用滑鼠左鍵按下並拉動小圓點往下,就會發現矩形四周慢慢變圓,利用左方尺規畫出想要的圓弧。因為我想要留下15mm寬的邊框,所以圓弧最好不要超過15mm。

完成後會發現原本的描點上還是有個圓點,那是用來做不等邊圓弧用的,若想要圓弧形狀兩邊不一樣時才會需要用到。

 

再來我們要畫出相框內部的格局。

 

 Step2.繪製邊框

之前提到的邊邊寬度想要留下15mm的尺寸,我們稍微計算一下,寬公式:100mm-15mmX2(寬因為有兩邊所以要乘2)=70mm ; 長公式:120mm-15mm(長因為只有下方需要所以扣單邊尺寸即可)=105mm,整合出來的尺寸為70mmX105mm的矩形,這也就是我們現在要繪製出的尺寸。

繪製可直接在旁邊空白處就可以(畫好後再對齊即可),按照步驟一的方式在畫出一個70mmX105mm的矩形。

在這邊可能有人會發現,繪製的矩形會變成有導圓角的狀態,這是因為剛剛我們畫得矩形邊邊有圓弧(也就是圓角),軟體很聰明記住了您前一次繪圖的紀錄,這時不需要很費工的將圓點拉回去,直接按下上方尺寸表旁的按鈕「使頂角便銳角」(按鈕為直角圖樣)點下後就可以直接變回直角矩形了。

再來將畫好的框框放回應該有的位置,這時就能夠使用對齊功能,若右方沒有看到「對齊」工具欄,也可以像圖片中一樣選擇點選上方選單「物件」->「對齊與分佈」點選出來。

使用滑鼠配合鍵盤中「Shift鍵」,選取圓角的外框,再選剛畫出的內框,將兩個物件複選起來。

按下對齊工具中的縱軸置中。

再按對齊頂邊。框框就會乖乖定位了。

接下來,我們要開始畫出固定相框重要的角色喔~

 

 step3.螺絲孔

一般平常我們再使用的螺絲可是有制式規格的,平常或許沒怎麼在意,可是這裡需要依照想要使用的規格去畫出需要的大小,所以上網查詢了一下,可以發現要自由活動的M3螺絲孔需要的直徑為3.3mm。

接著就用「圓形」功能準備畫出螺絲孔。

按照之前畫矩形的方式,一樣先繪製出再改變尺寸大小,我們將寬高都改成3.3mm。

再來螺絲孔要如何定位呢?其實有很多種方法,我們就挑一種來介紹。

首先注意到最右方的功能鍵,那些其實不是產生圖形用的,而是定位用的,因為我們要畫的圖形不是很複雜,所以各種定位功能可以全都打開。

之後就跟我一起計算啦!螺絲孔是要打在邊框的中間,而且一般會打在四個角落,所以我們就把它定位在邊框中,邊框寬為15mm孔位的中心點距離角落就是7.5mm。

但我們想要定位的地方是在圖形的四個邊邊,所以3.3÷2=1.65;7.5-1.65=5.85。畫出個5.85的方形。

再來就是用對齊的方式放在其中一個角落。(對齊左邊,對齊底邊)

再來就是將原本螺絲孔對齊方塊的右上角。(將物件的左邊對齊描點的右邊,將物件對齊描點的頂邊)

這樣就能將孔位的位置確定,當然若想要做進去一些將方形尺寸調大就行了。

依樣畫葫蘆就能完成4個孔位,這樣就有相框基本的樣子了。

 

Step4.路徑相減

繪製出來的圖形(外框+內框+4邊孔洞)目前則都是獨立的圖型堆疊起來,現在我們要使用「路徑相減」工具,來將圖型整合為同一片圖形之中,並將相框的前後板繪製出來,這樣我們就成功繪製出組裝在相框本體的組裝要件了!

首先點選外框跟其中一個孔位,由於孔位比外框晚畫,所以孔位的圖會在上層,直接依上圖按下「減去」,就像是使用外框相同大小的紙張將螺絲孔大小的打孔器打洞一樣,這樣我們就能夠得到彙整在同一片的圖形了,接下來將剩下3邊孔洞重複動作執行。

完成後,雖然圖形看似沒有不同,但它已成功合併為一個圖形了。

接下來我們將已打好孔位外框的圖形,複製出兩組相同圖形於空白處,這兩片圖形就是我們相框的前後板。

接著但選於繪圖範圍中的圖形,使用「路徑減去」將外框與內框相減,就能得到中間支架的形狀了。

將三塊版子稍微重新排列一下,並讓所有圖形都在預設繪製範圍內(黑框內)。

 

最後一個步驟我們要做支撐架。

 

Step5.支撐架

支撐架的角度需要稍微想一下,由於相框必須後仰,以便在觀看上較為舒適,而後仰的傾斜角度該如何決定呢? 我們則是用支撐腳架的位置與長度做決定。

這裡有些三角函數的觀念,可以作為簡單的參考。

當我想要的角度為15~30度之間(可自行調整),而邊框寬尺寸為15mm,我希望能夠比邊框高一些,所以我抓出25mm來做支撐架的位置。

公式為:

25Xtan60゚= 43.301270189221932338186158537647

25Xtan75゚=93.301270189221932338186158537647

這樣表示支撐架的腳長尺寸範圍為43.5~93.3mm。

這次我們使用的材料為厚度有3mm的壓克力,所以腳位的支撐插孔及螺絲孔位置就要推算出來。

在其中一個複製的板上隨意畫出25mm高的矩形對齊於板子中央下方,接著畫出一個3.3mm的螺絲孔及寬12mm高3mm的矩形。使用滑鼠將中心放在25mm高矩形的頂端中間。

畫出兩個寬20mm高3mm矩形連在兩旁。

將需要的圖形刪除。這樣後板的支架支撐孔就完成了。

 

接下來我們要將支撐架畫出來,將我們之前估算出得尺寸拿出來,(支架長度範圍為43.5mm~93mm之間),這次我們就取個60mm吧!至於寬度可直接利用剛剛繪製的孔位做數值就可以了。

這樣子直接畫在一起等等再分開就行了。

我們將高改為60mm,我們還需再孔位畫些東西。

在兩個孔洞之間利用定位畫出長方形。

接著,將剛剛畫得兩個長方形複選之後,移到相框中間的空白區。

點選「減去」就變成個凹字圖形。

 

Step6.垂直方向固定螺絲孔

最後一個步驟,還記得剛剛中央還有個螺絲孔吧!這可是支撐架及相框本體的重要支撐的環節,現在我們就來畫吧~

上圖為上網查詢螺帽M3規格,想看更清楚規格表的朋友可直接在網上收尋,在這裡可以依照資訊找出M3螺帽尺寸為寬5.5mm,高.2.4mm。

至於我購買的螺絲是M3螺芽長度10mm,所以製作完成後只要紙張不要大於0.6mm都是可以放得。

再來我們將凹字圖形的中間畫出高12mmX寬3.3mm的矩形,這是用來當螺絲通道用,請記得定位於中間下方。至於為何圖形的高尺寸為10mm卻要畫出12mm是因為不希望把螺絲孔抓得太緊而預留的空間。

再畫個寬5.6mm X高2.6mm矩形,同樣也是希望不要太緊。至於螺帽距離上下的距離不是需要到非常精確,粗估大概在中間就好,接著我們就要用路徑的相加相減完成圖形。

先將最後兩個矩形相加。

最後將整個板子一次相減。

這樣我們的相框基本完成了,若不希望相框使用時,更換紙張或照片時只能用倒的話。可直接在後板上切出手指頭或圓筒形狀來當作拉出口。

在後板上方畫出有圓角的矩形,這裡我們設定為寬18mmX高50mm的數值(這只是依我的手畫得)至於50mm是簡單抓出的數值,放在中間切除後就會是25mm。

減去後則就會留下個凹洞。

這樣就基本的相框就完成囉!大家可以自行發揮創意繪製不同形狀來點綴相框喔!

希望滿意這次的相框教學喔~

 

 

[Arduino/Genuino101 專題] Arduino101 x BLE x MeArm x App Inventor 使用手機藍牙遙控機械手臂

$
0
0

本文將帶領讀者認識Arduino/Genunio101的功能,以及如何使用I2C界面來控制機械手臂MeArm、用BLE(Bluetooth Low Energy)來跟手機溝通,並使用MIT App Inventor來撰寫手機的應用程式來跟控制板溝通。

作者/攝影  袁佑緣
時間   3小時
成本   約1,850(不含101)
難度   * * * * *
材料表

 

1.Arduino/Genuino 101 介紹

2015年10月,Arduino與Intel合作發表了一塊名為Arduino/Genuino 101的開發板,使用x86的核心並搭載BLE(Bluetooth Low Energy)以及IMU(Inertial Measurement Unit),也就是內建加速度感測與陀螺儀,而本次範例將使用101上面的BLE功能,如果想要了解IMU在101上面的應用,可以參考部落格上的另外一篇文章[ Arduino101 專題實作計畫] Arduino101二輪平衡小車DIY

 

101 的詳細規格介紹

 

2. Arduino IDE 環境準備

首先請到Arduino的官網下載最新版本的IDE,https://www.arduino.cc/en/Main/Software
以筆者為例,最新的Arduino IDE版本是8.3,Windows使用者如果不想要系統安裝Arduino IDE的話,可以直接點選Windows zip的選項,下載後解壓縮,點選裡面的.exe檔也可以直接執行。

 

打開Arduino IDE後,我們要來安裝最新的101套件包,因為驅動程式也會包含在裡面,所以不需要在額外安裝囉。請打開Tools -> Board -> Boards Manager,並搜尋101,應該就會有最新版本的Intel Curie Boards跳出來,以筆者為例,最新版本為2.0.2版。

接下來因為我們的101在連接到機械手臂之間,會經過一塊16通道的伺服馬達控制板PCA9685,所以我們必須先下載PCA9685的函式庫才能控制我們的伺服馬達。

請到Adafruit的github上面下載Adafruit-PWM-Servo-Driver-Library

請點選Download,並將下載後的壓縮檔解壓縮後,放到Arduino資料夾裡面的libraries資料夾裡面。

 

3.硬體電路

接下來請準備好若干條母對公的杜邦線,以及電池提供額外的電源(6v),以防驅動機械手臂時電源供應不足,導致101控制板無法正常運作。

完整的電路接線圖如下,基本機械手臂上的四顆伺服馬達只要把接頭正確的接上PCA9685上就行了,PCA9685上面黑色的部份表示接地線,紅色部份表示電源線,黃色則是訊號線,我們可以透過此腳位輸入PWM訊號來控制伺服馬達。

PCA9685接到101的部份只要把SDA、SCL這兩個腳位接起來,好讓101可以透過I2C來跟PCA9685溝通,另外再接上VCC跟GND以提供PCA9685工作時所需的電壓就行了。

接完之後大概就會如下完成圖,因為這塊伺服馬達控制板的關係,所以我們不需要一塊額外的麵包板跟很多條的杜邦線互相接,是不是很方便啊?

 

4.Arduino 程式設計

請在Arduino IDE 上面完成以下的程式碼。

#include <CurieBLE.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

#define SERVOMIN  150 
#define SERVOMAX  600 

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

BLEService BLE_serv("19B10010-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedIntCharacteristic BLE_char("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

void setup() 
{
    Serial.begin(9600);
    pwm.begin();
    pwm.setPWMFreq(60);

    BLE.begin();
    BLE.setLocalName("mearm");
    BLE.setAdvertisedService(BLE_serv);
    BLE_serv.addCharacteristic(BLE_char);
    BLE.addService(BLE_serv);
    BLE_char.setValue(0);
    BLE.advertise();

    Serial.println("Waiting for connections...");
}

void loop() {
    BLEDevice central = BLE.central();
    if(central)
    {
        Serial.print("Connected to central");
        Serial.println(central.address());
        while(central.connected())
            if(BLE_char.written())
            {
                int servo_num = BLE_char.value();
                int pulse_len = BLE_char.value();
                pwm.setPWM(servo_num, 0, pulse_len);
            }
        Serial.println("disconnected");
    }
}

程式說明:

以上的程式碼主要會引入兩個函式庫,一個是用來控制馬達的<Adafruit_PWMServoDriver.h>,另一個則是待會要用來跟手機溝通的<CurieBLE.h>,接下來的程式碼就是初始化一個BLE的Service,然後裡面

包一個Characteristic,主要負責來接收手機端傳送過命令。來馬達編號,還有指定的馬達PWM訊號,藉此來操控我們的機械手臂。

在while(central.connected())迴圈當中,101會一直去確認是否有新的訊息送過來,如果有收到訊息,就會把收到的來馬達編號,還有指定的馬達PWM訊號,透過pwm.setPWM(servo_num, 0, pulse_len);來控制指定的伺服馬達,藉此來操控我們的機械手臂。

 

5.App Inventor 程式設計

App Inventor是一款圖形化的Android App設計界面,只要您有google帳號,就可以直接線上編輯,雲端儲存,還可以打包下載成APK檔,然後傳到手機裡安裝,如果想要知道App Inventor的教學與應用,可以參考App Inventor中文學習網

接下來我們就要實際動手來寫我們的應用程式了,請先連到MIT App Inventor官網

接下來請新建一個專案,並進到Designer界面,開始進行我們的手機界面佈置。

因為本次專案會用到BLE的元件,所以我們必須用到App Inventor的擴充元件功能,請複製以下的網址http://iot.appinventor.mit.edu/assets/edu.mit.appinventor.ble.aix

並在extension中把BLE元件import進來,如下圖。

接下來請完成以下的元件佈置,其中Slider的最大數值是600,最小數值是150,跟前面Arduino 程式碼裡面定義的一樣,另外Connect按鈕其實是一個清單(而非一般的按鈕元件),按下去之後可以讓使用者去選取要連哪一個藍牙裝置,最下方有一個scan的按鈕,可以用來掃描新的藍牙裝置,掃描附近的裝置後,app就會自動更新清單中可以連線的裝置列表。

 

接下來我們進到Blocks界面,開始設計我們的後台程式。

首先是初始化以及連線清單的設定,在初始化的過程就會先進行一次掃描的動作,並把掃描的結果更新在清單上,此外,當清單被點選之後,程式就會呼叫BLE元件去連線清單內的指定的裝置。

讀者可能會好奇,其中有一個叫做is_connected的函式,這個自定義的元件是有什麼功能呢?其實它就是會根據是否連接到裝置來做一些按鈕跟拉桿的設定,以及此刻狀態的提示,如下圖。

以下則是基本的連線、斷線功能,以及掃描附近裝置與更新的實作。

接下來的這四個Blocks,讀者可以直接從字面上的意思去解讀他的功能,也就是當編號1到4的拉桿被拖動時,就會執行update_and_send的函式,也就是更新拉桿上面馬達狀態的提示以及送出指定的馬達脈波長度。

update_and_send的實作如下,基本上就是會根據拉桿的位置對應到的數值,送出指定的控制指令,這邊值得注意的是要記得把serviceUuid跟characteriscUuid改成跟前面Arduino程式碼裡面指定的一模一樣喔,不然BLE會無法進行資料的溝通。

到此為止已經大功告成囉,接下來就剩下把App下載到手機上就完成了,您可以點選Build -> App(provide QR code for apk,讓App Inventor把編譯好的程式碼暫時存到雲端,並顯示QRcode,讓您可以掃描它來安裝App。

 

注意:

由於BLE元件是App Inventor相當新的功能,所以對於一些手機較舊的讀者可能會發現無法安裝或者是無法使用的問題,這只能換更新版本的Android系統或者是看看App Inventor官方未來是否會有相關的計畫來支援舊版本的手機。

 

相關文章:

[LinkIt 7697 專用] BlocklyDuino之圖形化介面 –環境建置與介面

$
0
0

本文要介紹可用於LinkIt 7697開發板之圖形化開發環境 – BlocklyDuino,包括環境建置與基礎I/O控制。

作者/攝影  曾吉弘
時間   3小時
成本 LinkIt 7697開發板
難度   * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板

什麼是Google Blockly

Google Blockly (wiki) 是 Google 開發的圖形化程式介面。並可讓使用者自行包裝成更多指令,非常方便。下圖是 Google Blockly 主頁面,您很快抓到它的使用方法,並由畫面右側轉成JavaScript、Python、PHP、Lua與Dart 等其他語言,就看您喜歡哪一種了。

阿吉老師說:這樣的兩階段開發可以兼顧初學者與進階玩家。初學者只要拉拉方塊就能完成許多應用,進階玩家則可進一步轉乘其他程式語言之後做到更多功能,不會受限於積木指令本身的功能限制,反而可以快速驗證想法是否可行。

國內的 webduino 也有提供這樣的開發介面,可以把 block 轉成 java script,周邊指令也非常豐富。

什麼是BlocklyDuino

顧名思義,BlocklyDuino 是以 Google Blockly 為基礎,也因為可以轉成 Arduino code,也就代表了 Blockly 並不只限於 LinkIt 7697 才能使用,其他Arduino相容開發板也可以使用(回頭看看 LinkIt ONE、LinkIt Smart 7688 Duo 與 Arduino UNO等等…   真是太好了!)

您有3 種使用方式: 1. 離線使用 2. 匯入成 Google Chrome extension  3. 線上版

github: https://github.com/x43x61x69/BlocklyDuino

下載 .zip 檔解壓縮之後,打開您的 Google Chrome瀏覽器,

對,就是把這個資料夾拖到網頁上,就會匯入成一個 extention,完成如下圖:

點選啟動之後就會跳出一個視窗是 BlocklyDuino的主畫面,如下圖:

來看看目前提供了什麼?畫面左側可看到有以下主選項:

  • Logic:
  • loops
  • Array
  • Math
  • Text
  • Variables
  • Function
  • Initializes
  • In/Out
  • Time
  • Serial
  • Interrupt

由於In/Out底下相關功能與後續操作 7697 息息相關,在此特別拉出來介紹。各位讀者日後如果有哪邊覺得不足,除了可以透過github 自行修改,也可以把您的意見告訴我們,一起來向7697開發團隊許願吧!

不只這樣呢,請點選畫面右上角的齒輪[設定],可以看到 Seeed studio(7697生產商) 與 adadruit 的常用套件、第三方雲服務()都有!把想要用的項目勾起來就可以使用了。

值得一提的是,除了自家的MCS雲服務之外,BlocklyDuino也為7697寫好了 IFTTT、M2X與Blynk等其他雲服務的指令,太感動啦!

如何存檔與上傳

BlocklyDuino 可與 Arduino IDE 同步,也就是說您的積木指令不但可轉成Arduino code 還會自動根據修改而轉換,不必擔心不同步的問題。

請開啟 Arduino IDE file/Preferences,找到 External Editors(使用外部編輯器)選項並勾選起來,代表可使用外部編輯程式。

隨便新增一些方塊之後存檔,存檔時您會發現有 .ino 與 .xml 兩個檔案,ino 自然就是 Arduino 草稿碼,但 .xml 是什麼呢?

用瀏覽器來檢視一下,這就是積木指令的定義格式

或直接點選畫面右上角選單中的 Export,BlocklyDuino會把目前這一堆積木指令以 xml 格式匯出。您當然也能反向利用 Import 功能來匯入其他以 xml 格式定義好的積木指令集。

存檔完成之後只要修改任何積木指令,都可以看到Arduino IDE中對應的程式碼也會一併修改喔,不用再擔心漏東漏西了。

後續專題會介紹如何使用 BlocklyDuino 控制 LinkIt 7697 的基礎I/O、BLE藍牙通訊與MCS雲服務,敬請期待喔

 

相關文章:


[腦波弱開箱] 大人的科學-自動手寫機器

$
0
0

前年暑假到東京參加Maker Faire時,正好遇到大人の科學正在特價,一時手滑,便帶了一套臺灣沒有代理的自動手書きマシン回來。沒想到一直到今年寒假搬宿舍整頓完畢才有機會拆開來玩,並且至今為止,國內仍未有中文版出現。

作者/攝影  高稚然
時間  兩個人邊組邊玩一個半小時
成本  日幣3100円(原價3500円+稅)
難度   * *
材料表
  • 大人の科學 自動手書きマシン
  • 螺絲起子
  • 剪刀
  • 毛筆

這套「自動手書きマシン」(自動手寫機器)オートマ・テ是由明和電機與大人的科學共同開發的。使用凸輪及連桿、滑軌來控制手臂的三個自由度,是現成的機動學教材;可以自行設計凸輪來改變繪製圖案,要換成伺服馬達直接控制也沒問題;部份組件外露,運轉時喀喀的齒輪聲及寫意的「壽」字,全部都超級~吸引人的!事不宜遲,讓我們即刻開始拆箱組裝。

套件由材料包及雜誌組成,總共有三組凸輪,除了封面的「壽」字書法,還有明和電機社長土佐信道(とさ のぶみち)的簽名TOSA,以及代表勝利(Victory)的V手勢。

雜誌附於材料包之後,稍微施力可無損拆下。雜誌內除了組裝說明書外,還有各種擴充套件的方式,包含自製繪圖凸輪、使用伺服馬達控制,以及自動手寫機器人的歷史。

將零件通通倒出來,基本上白色是機體、水藍色是凸輪、藍色是桿件、黑色是齒輪,還算好分的。螺絲總共有五種,全為自攻螺絲,包含:長短平頭螺絲(なべネジ)、大小華司螺絲(つば付きネジ)、皿頭螺絲(皿ネジ),外觀及圖示都沒有非常明顯得差異,組裝時要特別注意文字說明。最好先照零件總表對照一一認識,避免錯拿形狀相似、規格不同的零件,這次就因為貪玩搶快走了些冤枉路拆鎖錯的螺絲。除了這些材料外,你還會需要螺絲起子、剪刀,以及試寫的筆。

那麼就讓我們開始吧!

首先組裝底版的電路,電子元件已焊接完畢,只需卡至相應的溝槽固定。馬達有兩種啟動方式:其一是用上板的按鈕,線路將會連到下圖左上方的接頭;其二是壓下中央的金屬簧片開關。

接著依序放入減速齒輪組。

最後的中央大齒輪別有玄機,讓我們把它翻過來瞧瞧。齒輪背面有個凹槽,與金屬簧片開關相配合。機器未啟動時,金屬簧片恰好置於凹槽內,處於斷路。按下按鈕、啟動馬達後,大齒輪旋轉,進而壓下金屬簧片、導通電路,此後便可放開按鈕,大齒輪會轉滿一圈後停止。實際操作時需按住按鈕一會兒,待中央大齒輪確實壓下金屬簧片開關後才可放開,不然機器是不會繼續動的。

接著組裝上版的多連桿、滑軌。開始愉快地玩弄各個連桿。

除了連桿外,Y軸及Z軸的控制都是透過釣魚線再牽到滑軌及握把的。將魚線對分,綁在桿見上的掛勾,穿過軟管後繞在華司螺絲上,再將螺絲鎖緊。需手推移動連桿,調整魚線的長度及鬆緊,使滑軌能於上下界自由移動。

手掌部份內含握把及彈黃,一樣需調整釣魚線,確保下筆深度。

把上下版所起來後就是安裝凸輪啦。透過錯位凸輪,可以一窺該軸向的帶動機構。先看原始狀態:

移動X軸:

Y軸:

Z軸:(上圖為提筆,下圖為下筆)

最後扣上蓋版,蓋版背面有個扭簧,會卡在溝槽中固定凸輪,輕輕一壓即可取下並更換凸輪。

終於完成這台自動手寫機器了!不論是用手動連桿或自動運轉都超好玩喔~

來看看它寫「壽」字的過程吧。

 

其實想要寫出美美的成品還是需要一點架設技巧的,首先必須使用軟筆,給予Z軸向的可動空間,才能寫出鐵畫銀鉤的韻味。此外需調整Z軸魚線長度,確認按筆力道。因為重力的關係,手掌會微微前傾,使得Y位置較大的筆畫墨跡深了一些,是比較可惜的地方。

最後附上書寫成品,因為筆彈性不足使得轉折處十分明顯,有點走鐘。下次再來試試自製凸輪模版吧,光是想要寫些甚麼就讓人好期待啊~

相關文章:

[LinkIt 7697 開發板] BLE藍牙簡介

$
0
0

本文要介紹聯發科技實驗室7697開發板的BLE藍牙4.0通訊機制,包含central、iBeacon 以及 peripheral 等三種角色。

作者/攝影  曾吉弘
時間   3小時
成本   LinkIt 7697開發板
難度   * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板

LinkIt 7697的BLE

LinkIt 7697支援藍牙低功耗通訊協定Bluetooth Low Energy),但不支援傳統的 profile 像是 Bluetooth BR 或 EDR。Bluetooth Low Energy 裝置可作為 central 或 peripheral 裝置。peripheral裝置(像是心跳計) 會把關於本身的資料廣播出去。central裝置則會尋找附近的peripheral裝置,並可進一步連到peripheral 來存取其屬性,例如服務(service)或特徵(chracteristic)。

*BLE peripheral 與 Central   001

LinkIt 7697 提供了以下 Arduino 函式庫類別:

  • LBLE:用來初始化 Bluetooth Low Energy子系統subsystem
  • LBLECentral:提供central裝置的基本功能,例如掃描鄰近的peripheral
  • LBLEPeripheral:提供peripheral裝置的基本功能:
    • 設定advertisement package
    • 設定 characteristic與service(UUID).

7697 可用作 Central、iBeacon 以及 peripheral,請看以下介紹:

 

7697作為Central

7697的LBLE 函式庫可讓 7697 成為一個central裝置來掃描附近的BLE裝置。如以下程式中的scanner

LBLE.begin();
while(!LBLE.ready())
{
delay(10);
}
Serial.println(“BLE ready”);

//開始掃瞄鄰近的廣播資料
LBLECentral scanner;
scanner.scan();

呼叫scan()之後,central裝置就會不斷蒐尋附近的Blueotooth裝置,掃描結果會更新在LBLECentral類別,後續可呼叫 getPeripheralCount() 來取得掃瞄到的 peripheral 裝置數量。

for(int i = 0; i < scanner.getPeripheralCount(); ++i)
{
Serial.println(scanner.getName(i));
}

請注意藍牙 peripheral 的廣播內容會因不同的裝置而異,例如,一台 iBeacon 裝置丟出來資料可能會有 connectivity flag 以及製造商資料,但心跳計則可能包含 service UUID 與裝置名稱。

常見的情境是 central 去掃描附近的 iBeacon 裝置,在此會用到兩個方法isIBeacongetIBeaconInfo,用來解析iBeacon廣播資料相當好用。有掃到裝置的話,就可由Arduino IDE 的 serial monitor 畫面看到該裝置的基本資料。

 

File > Examples > LBLE > ScanPeripherals

#include <LBLE.h>
#include <LBLECentral.h>

LBLECentral scanner;

void setup() {
  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(10);
  }
  Serial.println("BLE ready");

  //開始掃瞄鄰近的廣播資料
  scanner.scan();
}

void printDeviceInfo(int i) {
  Serial.print("Addr: ");
  Serial.println(scanner.getAddress(i));
  Serial.print("RSSI: ");
  Serial.println(scanner.getRSSI(i));
  Serial.print("Name: ");
  Serial.println(scanner.getName(i));
  Serial.print("UUID: ");
  if (!scanner.getServiceUuid(i).isEmpty()) {
    Serial.println(scanner.getServiceUuid(i));
  } else {
    Serial.println();
  }
  Serial.print("Flag: ");
  Serial.println(scanner.getAdvertisementFlag(i), HEX);
  Serial.print("Manu: ");
  Serial.println(scanner.getManufacturer(i));

  if (scanner.isIBeacon(i)) {
    LBLEUuid uuid;
    uint16_t major = 0, minor = 0;
    uint8_t txPower = 0;
    scanner.getIBeaconInfo(i, uuid, major, minor, txPower);

    Serial.println("iBeacon->");
    Serial.print("    UUID: ");
    Serial.println(uuid);
    Serial.print("    Major: ");
    Serial.println(major);
    Serial.print("    Minor: ");
    Serial.println(minor);
    Serial.print("    txPower: ");
    Serial.println(txPower);
  }
}

void loop() {
  delay(3000);

  //顯示找到的peripheral裝置
  Serial.println(scanner.getPeripheralCount());
  for (int i = 0; i < scanner.getPeripheralCount(); ++i) {
    Serial.println("---");
    printDeviceInfo(i);
  }

  Serial.println("----------------------");
}

 

7697作為iBeacon

iBeacon是一個只會廣播(advertise)資料的BLE裝置,廣播的資料格式可以自訂。請注意做為 iBeacon 的 BLE 裝置無法被連接。

請用LBLEAdvertisement類別就能產生所需的iBeacon廣播資料。並可呼叫configAsIBeacon方法將廣播資料設定為iBeacon格式,如以下程式碼所示:

LBLEAdvertisementData beaconData;
beaconData.configAsIBeacon(“E2C56DB5-DFFB-48D2-B060-D0F5A71096E0”, 01, 02, -40);

  • E2C56DB5-DFFB-48D2-B060-D0F5A71096E0是您的 iBeacon UUID。這個值您可以自行產生。E2C56DB5-DFFB-48D2-B060-D0F5A71096E0因為是iOS AirLocate iBeacon example 中所用的UUID,因此許多 iOS 工具程式都有內建設定來搜尋這組UUID。
  • 01與02是 major ID 與 minor ID,可用來區別不同的iBeacon裝置。例如,您可能會在會議室或辦公室放置多台7697。您可把 major number 設為樓層,minor number 則是房間編號等。這樣一來iBeacon scanner只要透過這兩個數字就能知道使用者現在是在哪一層樓的哪一間房間了。
  • 最後一個數字Tx Power,-40,代表該裝置的發送功率。beacon scanner只要去比較這個數值與實際的訊號強度就能約略估算距離。實際的發送功率會根據天線設定方式而有異,所以建議這個數值要與 scanner 一併校正。

廣播資料設定完成之後,只要呼叫LBLEPeripheral的 advertise方法就能開始廣播資料:

LBLEPeripheral.advertise(beaconData);
LinkIt 7697 會馬上開始廣播資料,呼叫 stopAdvertise() 即可停止廣播。

7697 有現成的範例(BeaconAdvertisement),您可運用Locate Beacon這類的 ibeacon 工具來搜尋。以下是這個 app 的搜尋畫面擷圖:

File > Examples > LBLE > BeaconAdvertisement

#include <LBLE.h>
#include <LBLEPeriphral.h>

void setup() {
  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");

  //將廣播資料設定為iBeacon.
  LBLEAdvertisementData beaconData;

  //以下是AirLocate通用的UUID.
  LBLEUuid uuid("E2C56DB5-DFFB-48D2-B060-D0F5A71096E0");
  beaconData.configAsIBeacon(uuid, 01, 02, -40);

  Serial.print("Start advertising iBeacon with uuid=");
  Serial.println(uuid);

  //開始廣播
  LBLEPeripheral.advertise(beaconData);
}

void loop() {
  // The underlying framework will advertise periodically.
  // we simply wait here.
  // You can use iBeacon apps such as
  // "Locate Beacon" by Radius Networks on iOS devices to locate this beacon.
  delay(3000);
}

7697作為peripheral

第三種應用是將 7697 作為周邊,這時我們就能從別的裝置去連接它。這也是CAVEDU之前在使用LinkIt ONE較常用的方式,搭配手機來與開發板互動。

 

peripheral device裝置上需要先建立一個 GATT 伺服器,才能讓其他的 BLE central 連到這個peripheral。GATT伺服器包含了一組屬性:service與characterstic。像是心跳帶這類的服務就是用UUID來區分。一個服務可能包含多個具有數值(value)的特徵(characteristic),例如心跳帶服務就應該會有一個heart rate measurement value特徵。BLE central裝置就可以發送需求來讀寫這些數值。

關於GATT屬性,請參考Bluetooth.com 或 https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt#services-and-characteristics

啟動GATT伺服器之前,需要定義這個服務以及我們要用到的特徵。由於服務與特徵都是永久性(persistent),並且應該會被其他central裝置頻繁讀寫,在此把service與characteristic定義為global是比較好的做法,如下所示:

#include <LBLE.h>
#include <LBLEPeriphral.h>

//定義具備一個特徵GATT服務
LBLEService ledService(“19B10010-E8F2-537E-4F6C-D104768A1214”);
LBLECharacteristicInt switchCharacteristic(“19B10011-E8F2-537E-4F6C-D104768A1214”, LBLE_READ | LBLE_WRITE);

  • 19B10010-E8F2-537E-4F6C-D104768A1214是服務UUID,可供其他central裝置尋找到它。
  • 19B10011-E8F2-537E-4F6C-D104768A1214是特徵UUID。. GATT通訊協定會把特徵視為一個緩衝器,長度最大可到512位元組。 LBLECharacteristicInt可用來定義整數型別的特徵,您再用setValue() 去設定其整數參數即可,不必去動到緩衝器內部。

定義好服務與特徵之後,接著要定義它們的關係,再把這些服務加入peripheral裝置,如下所示:

void setup() {
//將特徵加入ledService
ledService.addAttribute(switchCharacteristic);

//將服務加入GATT伺服器(即一個 BLE peripheral)
LBLEPeripheral.addService(ledService);
使用以下語法來初始化GATT伺服器:

LBLEPeripheral.begin();
請注意一旦呼叫begin()之後,就無法加入更多service,也無法修改service與characteristic之間的關係了。

peripheral裝置現在已準備好由central裝置來連線,並可藉由isWritten()檢查特徵值是否有被外部裝置來修改:

 

File > Examples > LBLE > SimplePeripheral

 

為了安全性起見,裝置的addr 不會直接寫在板子上(當然也是有這麼做的)。本範例透過以下語法將 7697 addr 顯示於 serial monitor 中,您再修改 App Inventor 即可。

 

Serial.println(LBLE.getDeviceAddress());

 

#include <LBLE.h>
#include <LBLEPeriphral.h>

// Define a simple GATT service with only 1 characteristic
LBLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");
  Serial.print("device address is:");
  Serial.println(LBLE.getDeviceAddress()); //顯示7697 BLE addr

  //設定廣播資料
  // In this case, we simply create an advertisement that represents an
  // connectable device with a device name
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE LED");

  // Configure our device's Generic Access Profile's device name
  // Ususally this is the same as the name in the advertisement data.
  LBLEPeripheral.setName("BLE LED");

  // Add characteristics into ledService
  ledService.addAttribute(switchCharacteristic);

  // Add service to GATT server (peripheral)
  LBLEPeripheral.addService(ledService);

  //啟動GATT伺服器,此時已可被連線
  LBLEPeripheral.begin();

  //開始廣播
  LBLEPeripheral.advertise(advertisement);
}

void loop() {
  delay(100);
  if (switchCharacteristic.isWritten()) {
    const char value = switchCharacteristic.getValue();
    switch (value) {
      case '1':
        digitalWrite(LED_BUILTIN, HIGH); //7697就是D7, 其他Arduino為D13
        break;
      case '0':
        digitalWrite(LED_BUILTIN, LOW);
        break;
      default:
        break;
    }
  }
}

Android端(App Inventor)

要寫一個小程式來與7697互動,在此推薦使用App Inventor來編寫Android端程式,一方面是圖形化介面開發非常快,另一方面則是手機端有許多豐富的資源,可以讓您的專題更完整。別忘了參考CAVEDU所開發的App Inventor中文學習網喔!

請登入App Inventor (http://ai2.appinventor.mit.edu) 之後建立一個新的專案,或由此下載本範例所需之 .aia 檔

 

Designer 頁面

本範例用到的元件有多個按鈕、顯示訊息用的 Labe; 當然也需要用到最新的 BluetoothLE 元件。Designer 頁面完成如下圖,您只要做得差不多就好,不需要一模一樣。

 

Blocks 頁面

STEP1:

宣告 addr 變數,代表所要連線的7697 藍牙位址。

Screen1初始化時,要求 BluetoothLE元件開始掃瞄,連線成功的話會自動呼叫BluetoothLE.Connnected事件,並修改相關元件的設定。

STEP2:

按下連線按鈕時,根據按鈕的文字來決定要連線或斷線。您也可以使用兩個獨立的按鈕來做到這件事。

STEP3  :

斷線時呼叫BluetoothLE事件,並將元件回復到初始狀態等候下一次連線。

 

STEP4  :

按下按鈕時,透過 WriteIntValue 方法分別發送 1 與 0 出去,7697 接到這兩個整數值之後就會執行對應的動作。您可以依照這樣的架構加入更多按鈕或其他二元觸發條件(例如Google語音辨識、感測器值等等)。別忘了 7697 端也要加入更多case 來接收您新增的控制碼。

操作

請先上傳7697端的程式並開啟serial monitor來看看狀態,在此7697是一個peripheral。請點選App端的 Connect按鈕就會連線,連線成功即可點選ON/OFF按鈕(在連線成功之前不可按)來控制7697的 D7 USR LED燈亮滅。

 

相關文章:

[7697教學]PWM類比模擬控制-LinkIt 7697開發板 x Blocklyduino圖形化開發環境

$
0
0

本文要介紹聯發科技實驗室推出的Blocklyduino圖形化開發環境搭配LinkIt 7697開發板製作的小型電路專題。您可由此比較與一般Arduino IDE的類C語法的異同。

作者/攝影   曾吉弘
時間   3小時
成本  LinkIt 7697開發板
難度   * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板

 

Blocklyduino簡介

        Blocklyduino是由聯發科技實驗室所開發,是根據Google Blockly搭配LinkIt 7697 開發板的圖形化開發環境。說是搭配LinkIt 7697,但其實轉成Arduino code之後,要燒到別片Arduino當然也可以。差別就在於一些特殊的函式庫。這樣的兩階段開發可以兼顧初學者與進階玩家。初學者只要拉拉方塊就能完成許多應用,進階玩家則可進一步轉成Arduino類C語言之後做到更多功能,不會受限於積木指令本身的功能限制,反而可以快速驗證想法是否可行。

 

阿吉補充(阿不整篇都是我寫的嗎?):說真的聯發科技實驗室真的…與眾不同。除了開發板之外,還有一個免費的MCS雲服務,現在又出一個Blocklyduino來降低使用者門檻。也許就是因為這樣才樂得一直寫書。不是做一片可以上網的板子,就是物聯網的player

 

6月於台北市日新國小暨台北市自造教育示範中心已經舉辦了第一梯物聯網種子教師研習,就是使用LinkIt 7697喔,請參考我們上課的投影片

 

硬體線路

請將Linkit 7697插上麵包板,並如以下示意圖將LED正負極接到P9與GND腳位。

 

7697支援PWM的腳位相當多,供電得當的話可以做出8-servo的四足機械獸。請參考本圖:MTK pinout (來源: https://docs.labs.mediatek.com/)

接下來將使用Blocklyduino 與 Arduino 類C語言來比較,使用LED呼吸燈範例。

Blocklyduino程式碼

本程式中用到了變數i,請先由Blocklyduino左側的變數中找到第一個指令,預設變數名稱為item,點選下拉式選單即可改名。

另外在本指令的左側”整數”點選下拉式選單可以看到目前Blocklyduino支援的資料型態,雖然是給小朋友或初學者用的開發環境,定義上可不馬虎呢。(對比:App Inventor只把資料型態分為數字、文字與布林)。

請對邏輯的”或”點擊滑鼠右鍵,選擇”多行輸入”,就會從原本的一個橫列改為多個橫列,這樣在畫面擷圖或製作學習單上會比較方便喔。

7697程式碼

這是Arduino IDE的基本範例。使用analogWrite()指令去控制腳位的PWM狀態,藉此來模擬類比輸出的效果。Arduino與相容開發板在此通常都是把0~1之間再劃分成256格,意即2的8次方。其他高檔一點的開發板可能可到2的10次方或更高的解析度。

 

if判斷式去檢查亮度是否達到上下限值,如果brightness變數值等於255,就將fadeamount x -1,下ㄧ次進迴圈執行 brightness += fadeamount 就會變成 255 + (-5),這樣LED就會慢慢變暗了。一路當 brightness 降到0時,fadeamount 又再次乘以-1,負負得正,LED就慢慢變亮囉。

 

在此我們特意把Arduino IDE 與 BlocklyDuino的變數命名方式一致,您可以比較看看彼此異同。

路徑:File/Example/Basic/Fade

int brightness = 0;	//本變數會在0~255之間變化,用於控制LED亮度
int fadeAmount = 5; //每次亮度的累加值
void setup() {
  pinMode(led, OUTPUT);   //設定9號腳位模式為輸出
}
 
void loop() {
  analogWrite(led, brightness);  //本指令控制 LED 亮度
 
  i += 5; //累加或累減
  if (brightness == 0 || brightness == 255) {  //判斷上下限
	fadeAmount = -fadeAmount ;
  }
  delay(30);   //每秒更新33次
}

以下是本blocklyduino程式轉出來的Arduino code,您也可以比較一下喔。

相關文章:

[3D繪圖設計] 3DP筆套設計(上篇)

$
0
0

用筆套簡單表現出自己的心情,既簡單又有趣,馬上就能像社交軟體那樣表現出自己的情緒,利用3D列印簡單製作出自己想要的表情,馬上將呆板的筆套換掉吧!

作者/攝影  陳煜倫
時間   2小時
成本  參考列印時間17分鐘
難度   * * *
材料表
  • 游標卡尺X1
  • 鉛筆X1
  • 3D印表機X1
  • PLA耗材X1

筆套我想大家都看過,不過因為不怎麼在意,或是不小心,很容易就遺失了。而鉛筆一般本來就沒有筆套,有時要攜帶會有些許困擾。今天我們就來準備畫出自己的筆套。

 

Step 1. 繪製準備

本次使用的軟體是DesignSpark Mechanical 2.0

軟體優勢:

繪製方便、計算精準、與高階繪圖軟體方式相近、免費軟體

到DesignSpark官網下載軟體

 

使用工具:

首先除了量測工具外,還要準備要拿來套的目標,我們準備的是鉛筆一隻。

利用游標卡尺來量測目標鉛筆的規格,再用些簡單的計算來規劃我們筆套的尺寸

 

Step 2.繪製流程

先量測鉛筆,依據量測結果訂出各個特徵數據

畫出筆套外筒

畫出卡榫

畫出造型圓球並圓角美化

定出相切於圓球的垂直平面

畫出想要的大概草圖

依草圖及個人喜好畫出表情

 

Step 3.量測

先量測出筆的寬度

再量測出筆尖長度

游標卡尺後方深度量規可知鉛筆圓錐部位大約24.1

因此歸納出以下數據

直徑:7.45mm

圓錐:24.1mm

管套預留:10mm

管徑預留:0.3mm

設計管深25mm

設計管徑7.75mm(內徑)

 

Step 4.開始繪製

開啟DesignSpark Mechanical

開啟新設計圖

檔案→新增設計

快捷鍵(Ctrl+N)

 

Step 5.畫出筆套圓筒

進來開新檔案會處於畫面現在的情況,但是為了跟我們視覺方向一致,會先重新選擇平面,改到XZ平面作圖。

我們點擊3D模式再轉回草圖模式,這樣就能重新選擇平面了。

接著在螢幕上移動選好平面之後點擊確定。

再進入草圖後會發現下面有4個功能鍵,按下最右邊的正面視圖。

選擇建構直線。

從原點向上依設計畫出25mm參考線。

完成後從上向下再畫一次輸入7.75/2要程式幫計算,目的是要定位出我們要的位置,建構線的兩端及中點都可以拿來當作參考點。

選擇掃移弧線。

以頂端向下計算的端點為圓心,畫一個90度弧形。

用直線向下畫出線至原點左方。

選平移複製。 輸入偏移量1。

再次選用直線。

將兩端封閉。

這樣就畫好了外殼形狀。

 

Step 6.畫出卡榫

選用建構直線。

用建構直線計算所需的點自左下方向上5mm。

往回1.2mm定出想要的圓心。

選用掃移弧形。

依定點自上方向下畫出圓弧。

向內畫出180度。

使用修剪。

選擇多餘線段。

完成後使用拉動。

按下後選擇封閉圖形左方會出現選項,選旋轉。

依提示選擇旋轉軸。

用滑鼠中鍵向上轉個角度看到環形箭頭後轉出部分實體輸入360。

完成後就成為一圓柱體。

這樣套管跟卡榫就都畫好了。

 

Step 7.造型圓球及圓角美化

以草圖模式回到XZ平面。

看到剖面後選用正面視圖轉正。

選擇掃移弧線。

如圖用頂點當圓心以超過圓弧下方一格為半徑。

畫至頂端上方。

選擇直線自上方向下畫至圓心。

選擇投射到草圖。

將與圖形相鄰的邊緣投射到草圖。並將兩邊以直線封閉。

按下拉動就發現有封閉區域可以選。

選擇後以拉動→旋轉作圖。

拉動部分實體後輸入360。

這樣基本完成造型圓球,再來點選圓球圓柱交界準備圓角美化。

 

雖然拉動時並沒有藍底字體提示可輸入,可此時滑鼠不放仍然可以輸入,此時輸入直接改變圓角大小。

完成這有點像旗桿的造型。

轉到筆套底部將邊緣做成圓角。圓角大小可以依喜好。

我們已經做好了基本形狀,之後就要來畫造型了,為了怕各位累了看不下去,今天就先這樣吧!請各位繼續觀賞下集喔!當然需要等候幾天啦。

 

 

[LattePanda] 使用Weather API、Google 雲服務打造氣象預報機器人

$
0
0

本文說明如何使用 LattePanda搭配 python語言去使用雲服務來打造一個簡單的氣象預報機器人。

作者/攝影  袁佑緣
時間   1小時
成本
  • LattePanda = 5,950
  • 螢幕
  • 鍵盤
  • 滑鼠
  • 喇叭
  • 麥克風
難度   * *
材料表
  • LattePanda = 5,950
  • 螢幕
  • 鍵盤
  • 滑鼠
  • 喇叭
  • 麥克風

 

本文說明如何使用 LattePanda搭配 python語言去使用雲服務來打造一個簡單的氣象預報機器人本範例的操作環境是以LattePanda的Windows10為主如果想要一般的PC上操作也可以另外對於linux與mac os的使用者建議用您的系統的軟件管理員來安裝以下的程式套件。

 

  1. 安裝python3 https://www.python.org/downloads/windows/記得在安裝時要選擇將python加入系統變數喔

  1. 執行Windows命令列

按下”win+R”的快捷鍵並輸入cmd便會叫出windows的命令提示字元 如果是windows10的使用者建議改輸入powershell。

 

  1. 安裝python套件

請在命令列中輸入以下的指令

pip install SpeechRecognition pyaudio python-forecastio gtts

  1. 從github上下載本專案 https://github.com/YuanYouYuan/weather-bot

  1. 從下列網址中下載mpv播放器如果您想要用windows media player也是可以但是要記得在第6步中程式碼修改播放器的檔案位置。

mpv 下載網址 https://mpv.srsfckn.biz/

如果您無法解壓縮7z檔案可以從以下的網址中下載7z的解壓縮安裝檔。

7z安裝檔下載網址 http://www.developershome.com/7-zip/

最後請記得將解壓縮後的mpv.exe移動到剛剛從github下載並解壓縮的專案資料夾中。

  1. 執行程式碼

請點開本專案資料夾並用python IDLE編輯器打開weather-test.py

請將裡面的api_key改成你在darkskyhttps://darksky.net/dev/上取得的api key。

請註冊一個新的帳號並取得一個weather api key。

本專案程式碼 weather-test.py

# This version is for windows, and there must be a mpv application in this work directory

import forecastio 引入python氣象互動函式庫from gtts import gTTS 引入google文字轉語音函式庫import subprocessapi_key = 'Enter your api key' 請輸入您的api key

# the following coordinate is Taipei/Taiwan
lat = 25.0391667 #在此您可以設定所要查詢的地點的經緯度
lng =  121.525
lang = 'zh-TW' 設定語言為繁體中文
file_name = 'weather.mp3'
player = './mpv' #設定播放器為mpv

forecast = forecastio.load_forecast(api_key, lat, lng)

by_hour = forecast.hourly()

for data in by_hour.data:
    text = '在' + str(data.time) + '氣溫是' +  str(data.temperature) + '度西' 取出預報時間與氣溫
    print(text)
    tts = gTTS(text, lang) 
    tts.save(file_name)
    subprocess.call([player, file_name]) 啟動一個子程序來播報氣象預報音檔

7.youtube影片範例

  1. 延伸應用

如果您想要再玩玩更多進階的功能可以參考python-forecastio的github網站裡面有詳細的說明跟應用比如說想要知道當下的氣溫、或者是知道今天的氣象概況甚至還能做到降雨率的預報有興趣的朋友不妨去試一試吧

 

相關文章:

Viewing all 678 articles
Browse latest View live