Category Archives: 技術交流

[ 介紹文 ]CAVEDU教育團隊如何看AI 與科技教育

作者/攝影

文:曾吉弘

圖:CAVEDU教育團隊

主題圖片:Designed by Starline

文章分類介紹文
成本X
難度

X

時間X

 

CAVEDU怎麼看 AI 人工智慧

近年來全世界都掀起了一股「大家來coding」的風潮,台灣政府也開始推動基礎程式教育,目標是讓孩子們能在學習程式設計的過程中培養基礎的運算思維(Computational thinking)能力,能對這個快速變動的環境有更多的好奇心與觀察力。另一方面,自從大陸在今年(2018) 4月於上海發表全球第一本AI高中教材《人工智能基礎》之後,大家好像都緊張了起來:

  • 業界:「不 AI 一下,好像不行?得趕快說自己是 AI 產業。

  • 家長、同學:「我要找 AI 相關科系!」(當年的生科與資管也是這樣?)

  • 學校老師:「把原本的課程名稱加上AI兩個字!

 

上述也許誇大了點,但科技領域關鍵字一日數變,AI 領域又包山包海,除了極少數頂尖研究者之外,又有誰敢說自己是 AI大師、AI領航者呢?

 

AI 等資訊科技是現在進行式,今天弄得要死要活的東西,明天說不定點點按鈕就好了?近兩年物聯網教學就是很好的例證,使用 LinkIt 7697 搭配 MCS 雲服務,已經能讓國小學生也能做出簡單的物聯網專案,從網頁與手機就能監看感測器資訊或控制開發板。在此的並非說網路通訊協定不重要,而是對於非專業人士來說,這樣的設計能幫助他們聚焦在最重要的事情上:資料。如果資料對於開發者來說是有意義或是重要的,那先從資料本身開始是個相當好的出發點。

圖1

 

圖2

 

關鍵字會變,但流程與理論基礎不會。CAVEDU從2008年開始使用樂高機器人來教學(如果要回溯到我與鄭建彥最開始接觸樂高的話,那是1999年的RCX了),一路邁入手機App (Android / App Inventor@2010)、互動聯網裝置(Arduino / Rpi / LinkIt…@2013)、物聯網(@2015) 到去年開始如野火燎原一般的 AI。如果只追關鍵字的話,真的會無所適從。

 

根據美國麻省理工學院媒體實驗室終身幼兒園小組的Mitchel Resnick教授表示,幼兒(小學前)時期可說是我們一生中最具創造力的時候。該團隊所開發的 Scratch 已經是小學階段的最主要圖形化程式介面之一,Resnick教授也主張 「Scratch 是幫助孩子們成為創意思考者(Creative Thinker)的絕佳平台」,並致力於讓 Scratch 「很簡單」,他認為程式提供愈多功能或愈多元件反而會限縮孩子們的創造力。(關於創意思考者,請參考 Learning Creative Learning 課程,正體中文由阿吉老師與諸多好朋友一起翻譯完成。)

 

另一方面,MIT App Inventor小組創辦人 Hal Abelson 教授(阿吉老師於2017- 2018 於該實驗室擔任訪問學者)也說:「如果資訊科技一日數變,那為什麼還要讓孩子們和他們的祖父母一樣的方式來學習?” 因此,在這股浪潮下也有另一種反思:「是否人人都需要學如何寫程式?這樣同質化的過程會對孩子造成怎樣的影響?

 

CAVEDU的理念是:根據當前的科技發展趨勢,針對不同學習課群提供合適的教學內容。

 

對於孩子來說,好玩最重要

圖3

 

圖4

 

點我觀看與Hal Abelson教授的訪談   /   點我觀看與Mitchel Resnick教授的訪談

 

使用 Raspberry Pi 實作AI 視覺辨識無人小車

AI 對多數人來說,還是太虛無飄渺了。CAVEDU 為了讓學生理解 AI 諸多領域中最容易有感也是最容易實踐的:視覺辨識,我們使用 Raspberry Pi B3+ (後簡稱 Pi3)所設計的 「邊緣運算 AI 無人自駕小車」。

 

這是我們認為對於基礎 AI 視覺應用的最佳教學套件。之所以選用 Pi3 自然是因為其性價比以及豐富的教學資源,當年還是 Pi 2的時候就有相當不錯的 OpenCV 視覺追蹤效果,各樣的函式庫套件也非常豐富,一下子很多專題都可以使用它來完成,與Arduino 兩者號稱是學生專題救星呢(笑)!

 

AI 視覺應用的難點在於收集影像資料。喜歡養貓的阿吉老師開玩笑說:「我要幫我家的貓要拍多少張照片都沒問題,但是要蒐集十種不同的貓就難囉!」我們所設計的課程會帶學生體驗完整的訓練流程,不使用現成的資料集(因為訓練結果不會差太多),而是針對無人小車的場地實際收集影像,標記,最後選定模型來進行訓練。其中每一個環節都會影響到小車最終的辨識結果。一定有感!

圖5 學員自行收集的影像資料

 

圖6 AI視覺辨識課程實況

 

圖7 視覺辨識課程使用的AI無人小車

 

邊緣運算?

邊緣運算是指終端裝置也具有一定的能力來處理資料 ,可以加快資料的處理與傳送速度,只要把運算後的結果而非原始資料丟回雲端 (不過不一定什麼事情都要與雲端結合,後續會繼續討論)即可,自然能大幅減少因網路頻寬受限而產生的延遲。

 

例如就經濟面的考量,如果要做到抓到臉部之後能進一步辨識情緒/微笑或五官位置這類功能的話。後面的進階功能可以使用 Microsoft Azure 認知服務 或其他類似的雲端服務來做到,但這些雲端服務都需要付費(或部分免費),且多數需要信用卡來進行身份認證,這件事在多數學校就卡關了吧…   因此我們在課程設計上就朝「終端裝置就能做到」這個方向來努力。在此簡單做一些比較:

 

邊緣運算 VS 雲端服務

  1. 程式碼開源雲端服務很厲害,但它不會告訴你他是怎麼算的。我們能做的只能相信這些雲端服務供應商的結果。例如:Facebook 每天都有一大堆人在打卡與自拍,合理推斷在超大量的資料之下,Facebook在辨識臉孔上非常準,當然事實也是如此。如果把這些運算改到邊緣裝置來做的話,由於程式碼已知,就能循序漸進讓學生學到更多東西,也可以針對後續的情境來擴充。
  2. 不受網路環境影響:相信各位老師都體認到了:教室可以上網,不代表可以進行物聯網教學。能夠進行物聯網課程的話,教室的 router 要很夠力,基本要能夠負擔 「上課人數 x 3」的連線數:聯網裝置 + 手機 + 電腦 都要在同一個網段下才行。因此20人上課,連線數的基本需求就是 60。已經有許多學校著手升級網路基本設備,非常欣慰。
  3. 運算即時:以 CAVEDU 的AI教學車為例,這樣的情境就需要即時,而非連結雲端。Rpi 的速度不算太快,拍照上傳雲端,呼叫API,收到回傳結果來決定車子動作,這個過程再怎麼快也要3~5秒,這樣就算偵測到什麼東西,車子也已經撞牆了。因此有些標榜AI語音辨識結合自走車控制,好像有點奇怪⋯⋯。

 

作為邊緣運算裝置,如何提升 Raspberry Pi 的算力?

CAVEDU 的 Pi3 AI無人小車,直接讓 Rpi 執行使用 Keras 神經網路架構來進行視覺辨識,辨識張數每秒約2~5張(0.5 ~ 0.2秒/張)。這大大限制了車子的移動速度。畢竟,Pi 3只要開多一點網頁,系統就到100%了,何況大量的模型訓練呢?在不更換主板的前提下,要如何提升 Raspberry Pi 的算力呢?

 

Intel 所推出的 Movidius NCS神經運算棒來得恰到好處,可以把最耗資源的運算分一點去做。以 Pi3 小車來說,只要搭配一隻 Intel Movidius NCS 就可以讓每秒的張數提升到每秒約14~20張(0.07 ~ 0.05秒/張)。算是相當經濟實惠不錯的選擇,當然也可以期待 Pi 4就是了。根據 Intel 原廠文件表示,可以串接多隻 Movidius 達到更好的效能。

 

的確,覺得Pi 效能不佳的讀者,當然可以購買更高級的硬體例如 Nvidia TX1,但對於學校來說,經費可以買幾台呢?買一台大家圍著看嗎?另一方面,課程的延伸性呢?本課程已經與台灣微軟技術中心合作開辦多梯次的人工智慧實務工作坊(AGV),並搭配其 Azure 雲服務下的資料科學虛擬機器 (Data Science Virtual Machine) 來加速神經網路訓練速度,適合業界人士使用。另一方面,對於教學單位來說,可使用個人電腦來進行訓練,使用我們所提供的架構使用一般的電腦也可以完成訓練,並搭配 Pi3 完成至少一學期的課程(課表已經完成,歡迎來信索取或找我們去辦研習喔!E-mail:service@cavedu.com

圖8 Intel Movidius NCS神經運算棒

 

CAVEDU 提供各式各樣的最新課程,當第一線教學者的強力後盾。如果您也認同CAVEDU的理念,不喜歡好高騖遠的名詞大戰,歡迎來CAVEDU走走看看。

 

相關文章

 

 

[ 教學技術文 ] 用電腦即時與micro:bit互動!!怎麼做到?一起來看這一篇(有片請入)

作者/攝影

作者:Thomas Kluyver

文字翻譯、整理:宗諭

審閱:阿吉老師

圖片:截圖自相關網站,特此致謝!

文章分類教學技術文
說明

本文改編自作者Thomas Kluyver的開放原始碼專案,特此感謝作者!原文請見

成本
難度

材料表
  • Micro:bit*1
  • 電腦*1(安裝Linux或Windows作業系統)

 

讓我們先看一段曾正男老師拍攝的影片:

 

在影片中,曾老師試用 Jupyter notebook 上的micro:bit ubit_kernel,即時與micro:bit 互動,不需寫好程式再燒錄至micro:bit 上。

 

在說明如何實現這項功能前,小編先向讀者們簡介MicroPython和Jupyter。

 

MicroPython是Python 3的軟體實作(Software Implementation),經過最佳化以在微控制器上運作。如果讀者們想要在micro:bit上撰寫程式的話,MicroPython是一種強大的程式語言。若想進一步了解MicroPython,請參考micro:bit的官方教學文件

圖1

 

簡單來說,Jupyter是針對交互程式設計的一套工具。而這個ubit_kernel套件使Jupyter介面,可直接在micro:bit上運作MicroPython程式碼。若想進一步了解Jupyter,請參考這裡

圖2

 

簡單介紹完後,接下來,讓我們來看如何操作:

 

Step1:首先,將您的micro:bit接上電腦,我們要確定micro:bit上有安裝MicroPython。如何確認呢?我們要在micro:bit的網頁版編輯器中,產生一段Python程式腳本(Script)。然後根據網頁上的指示,將程式腳本燒錄至micro:bit。在這個步驟中,不論程式腳本執行了什麼都沒有關係。

 

Step2:依據您的作業系統,您也許需要一些額外設定,使作業系統的內核可以告訴您的micro:bit,使用一個序列埠。

 

  • 若您的電腦是Linux系統,您也許需要將您自己加入dialout群組。請執行下面這段指令:
sudo usermod -a -G dialout <your-username>

   然後登出並再次登入。

 

 

Step3:請安裝Jupyter

 

Step4:安裝ubit_kernel套件

pip install ubit_kernel
python3 -m ubit_kernel.install

 

完成上述步驟後,當您開啟Jupyter Notebook,在選單中應該會有一個micro:bit選項,以產生一個新的Notebook。趕快試試看吧!

 

備註:如果您想洽詢micro:bit相關元件,歡迎至機器人王國

 

相關文章

[ 翻譯 ] 2018.10.12-根據TensorFlow團隊,TensorFlow將於2020年1月起,停止支援Python 2

原文作者

TensorFlow團隊

圖片

截圖自https://python3statement.org/

網站,特此致謝!

翻譯宗諭審閱鈺莨
說明

感謝TensorFlow團隊的授權翻譯,特此致謝!

 

以下公告由Martin代表TensorFlow團隊發佈:

 

程式語言Python的開發者們,將於2020年1月1日停止支援Python 2.7(詳見此文)。

 

因此,TensorFlow專案也將停止支援Python 2,當Python 2的上游支援終止於2020年。在2020年1月1日後,團隊針對TensorFlow所有原始碼的改變,將不再需要相容於Python 2。總之,TensorFlow可能自2020年起,不再適用於Python 2。

 

這樣的改變將可簡化我們的程式碼,並且可使用Python 3.x標準函式中的新功能。

 

備註:如果您想購買AI人工智慧相關產品,歡迎洽詢機器人王國商城,謝謝。

 

相關文章

[ 教學技術文 ] 誰改造了樂高積木!?——WoW!樂高 Power Function 馬達也能以LinkIt7697無線控制

作者/攝影

Mason Chen

文章分類教學技術文
時間
成本
難度

材料表
  • LinkIt7697 x 1
  • L9110S DC 馬達控制板 x 1
  • 擴充板 x 1(非必要,只是方便接線用)
  • micro USB 線 x 1(燒錄程式及提供電源)
  • 5V 行動電源
  • 手機 x 1 (事先安裝好LinkIt Remote App)
  • 樂高 PF 馬達 x 1 (這裏用的是 PF 8883 M-Motor)
  • 樂高積木

透過樂高的科技磚和 Power Function 動力組馬達來學習結構、齒輪、動力機械⋯⋯等領域,是好玩又容易上手的工具。但 PF 馬達除非另外搭配紅外線套件,不然只能手動及定速使用。

 

這次的發想就是要用 LinkIt 7697開發板,還有方便的 LinkIt Remote App,控制 PF馬達的轉向和速度,讓原本只能定速的馬達,變成可以BLE 無線操控。另外,原本樂高的電池盒也不需要了,直接改用 5V USB 供電。

 

以下跟讀者們分享製作方法:

Step1:剪斷一條樂高馬達擴充線。原本四條線當中的兩條用以控制馬達,我們需要的就是這兩條線。

圖1

 

Step2:按照下圖2,將這兩條線接至 L9110S 的Motor-A(不同的接法,只會影響馬達的轉向)。

圖2

 

Step3:再把 LinkIt 7697 和 L9110S,按照下圖3所標示的方式,以杜邦線連接(務必注意 Vcc 和 GND 不要接反了)。

圖3

 

Step4:請至網址:https://goo.gl/Cgv6aw下載 LinkIt 7697 Arduino 程式,並燒錄至 7697 內。

 

Step5:接上 USB 電源,開啟手機上的 LinkIt Remote 程式,即可尋找到LinkIt 7697 ,並顯示以下畫面控制馬達。我們可以透過LinkIt Remote,控制馬達的轉速和方向。

圖4

 

最後,就請讀者們盡情發揮創意,用樂高積木和馬達做出專屬於自己的有趣作品。 這次筆者自造的是一個小型樂高摩天輪。

 

小型樂高摩天輪影片:

 

備註:如果想要購買LinkIt 7697開發板,或是樂高積木,歡迎洽詢機器人王國商城,謝謝。

 

相關文章

[ 翻譯 ] 2018.10.09- TensorFlow團隊發佈最新的TensorFlow模型最佳化工具包,一起來看看!

原文作者

TensorFlow團隊

圖片TensorFlow團隊提供

主題圖片:Designed by Freepik

翻譯宗諭審閱阿吉老師
說明

感謝TensorFlow團隊的授權翻譯,特此致謝!原文請見這裡

 

We are excited to introduce a new optimization toolkit in TensorFlow: a suite of techniques that developers, both novice and advanced, can use to optimize machine learning models for deployment and execution.

我們很高興向大家介紹:新的TensorFlow最佳化工具包,它包含了一整套的技術,不論您是入門或進階開發者都可運用這套工具包來最佳化機器學習模型的部署與執行。

 

While we expect that these techniques will be useful for optimizing any TensorFlow model for deployment, they are particularly important for TensorFlow Lite developers who are serving models on devices with tight memory, power constraints, and storage limitations. If you haven’t tried out TensorFlow Lite yet, you can find out more about it here.

我們期待這個工具包對於部署任何TensorFlow模型,都能做到最佳化,然而,這個工具包對TensorFlow Lite的開發者來說尤其重要!因為,TensorFlow Lite的開發者需要在裝置上運作模型,這些裝置不論在記憶體、電源與儲存容量上都更為吃緊。如果您尚未試用過TensorFlow Lite,可在這裡了解更多相關資訊。

 

The first technique that we are adding support for is post-training quantization to the TensorFlow Lite conversion tool. This can result in up to 4x compression and up to 3x faster execution for relevant machine learning models.

這個工具包加入的第一項技術是針對TensorFlow Lite轉換工具的訓練後量化(post-training quantization)功能。針對相關的機器學習模型,這項技術最高可達到4倍的壓縮率,並使執行速度最高加快3倍。

 

By quantizing their models, developers will also gain the additional benefit of reduced power consumption. This can be useful for deployment in edge devices, beyond mobile phones.

藉由量化模型,開發者也將因電源功耗減少而得到額外益處。這有助於部署模型在非手機範圍的邊緣裝置上。

 

Enabling post-training quantization

The post-training quantization technique is integrated into the TensorFlow Lite conversion tool. Getting started is easy: after building their TensorFlow model, developers can simply enable the ‘post_training_quantize’ flag in the TensorFlow Lite conversion tool. Assuming that the saved model is stored in saved_model_dir, the quantized tflite flatbuffer can be generated:

啟用訓練後量化

訓練後量化技術已被整合至TensorFlow Lite轉換工具中。如何開始使用呢?很簡單!在建立TensorFlow模型後,開發者只要在TensorFlow Lite轉換工具中啟用「post_training_quantize」旗標就可以了。假設我們把模型放在saved_model_dir 這個資料夾中,就能產生量化後的「tflite flatbuffer」:

converter=tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
converter.post_training_quantize=True
tflite_quantized_model=converter.convert()
open(“quantized_model.tflite”, “wb”).write(tflite_quantized_model)

 

Our tutorial walks you through how to do this in depth. In the future, we aim to incorporate this technique into general TensorFlow tooling as well, so that it can be used for deployment on platforms not currently supported by TensorFlow Lite.

我們的教學文件會詳細告訴您關於「訓練後量化」這項技術。未來,我們希望把這項技術也納入一般TensorFlow工具中,使它能部署於一些目前TensorFlow Lite尚未支援的平台上。

 

Benefits of post-training quantization

  • 4x reduction in model sizes

  • Models, which consist primarily of convolutional layers, get 10–50% faster execution

  • RNN-based models get up to 3x speed-up

  • Due to reduced memory and computation requirements, we expect that most models will also have lower power consumption

「訓練後量化」的效益:

  • 模型大小最高可減少4倍

  • 主要由卷積層所組成的模型,執行速度可加快10%-50%。

  • 以遞迴神經網路RNN為基礎的模型,最高可加速3倍。

  • 由於減低記憶體和低運算的要求日增,我們期待大多數的模型也能做到低功耗。

 

See graphs below for model size reduction and execution time speed-ups for a few models (measurements done on Android Pixel 2 phone using a single core).

關於降低模型大小與提高執行速度,請參考下面幾張圖表(使用Android Pixel 2 單核心手機)。

圖1 Model Size Comparison: Optimized models are almost 4x smaller 模型大小比較:最佳化後,模型大小幾乎小了4倍。

 

圖2 Latency Comparison: Optimized models are 1.2 to 1.4x faster 延遲比較:經過最佳化的模型加速1.2至1.4倍。

 

These speed-ups and model size reductions occur with little impact to accuracy. In general, models that are already small for the task at hand (for example, mobilenet v1 for image classification) may experience more accuracy loss. For many of these models we provide pre-trained fully-quantized models.

執行加速及降低模型大小對準確性影響不大。總體來說,原本就輕量化、專門針對行動裝置任務的模型(例如用於影像分類的mobilenet v1),準確性可能會損失較多。針對前述這些模型,我們提供預先訓練好的全量化模型

圖3 Accuracy Comparison: Optimized models show negligible accuracy drop, except for mobilenets. 準確性比較:除了mobilenets外,其它最佳化後的模型,準確性幾乎沒有降低。

 

We expect to continue improving our results in the future, so please see the model optimization guide for the latest measurements.

我們未來會繼續改良。關於最新的量測結果請參考模型優化教學。

 

How post-training quantization works

Under the hood, we are running optimizations (otherwise referred to as quantization) by lowering the precision of the parameters (i.e. neural network weights) from their training-time 32-bit floating-point representations into much smaller and efficient 8-bit integer ones. See the post-training quantization guide for more details.

「訓練後量化」如何運作?

我們運作最佳化(又稱為量化)的方式,是藉由降低參數的精確性(例如,神經網路權重),使參數的模型訓練時間,從32位元浮點表示法降低為更小也更有效率的8位元整數。如果讀者想更深入了解,請參考「訓練後量化」教學。

 

These optimizations will make sure to pair the reduced-precision operation definitions in the resulting model with kernel implementations that use a mix of fixed- and floating-point math. This will execute the heaviest computations fast in lower precision, but the most sensitive ones with higher precision, thus typically resulting in little to no final accuracy losses for the task, yet a significant speed-up over pure floating-point execution. For operations where there isn’t a matching “hybrid” kernel, or where the Toolkit deems it necessary, it will reconvert the parameters to the higher floating point precision for execution. Please see the post-training quantization page for a list of supported hybrid operations.

這樣的最佳化,將確保在結果模型中精確性降低後的操作定義能符合內核實作,後者在實作混用了定點和浮點數學。這樣可在精確度較低的情況下做到最多的運算,但其中最敏感且精確性較高的模型,通常不會 (或僅微量)因此導致精確度降低,反之如果是純浮點數執行的話,執行速度則有顯著提升。針對非「混合型」內核的運算,或工具包認為有必要,「訓練後量化」會再將參數轉換為較高精度的浮點數。關於「訓練後量化」支援哪些混合運算,請參考「訓練後量化」網頁。

 

Future work

We will continue to improve post-training quantization as well as work on other techniques which make it easier to optimize models. These will be integrated into relevant TensorFlow workflows to make them easy to use.

未來改進

我們將持續改善「訓練後量化」技術,以及其它模型最佳化技術。而這些技術將被整合至相關的TensorFlow工作流程,使大家能夠更方便使用。

 

Post-training quantization is the first offering under the umbrella of the optimization toolkit that we are developing. We look forward to getting developer feedback on it.

這套還在開發中的最佳化工具包中,「訓練後量化」是我們推出的第一項技術。期待收到大家的回饋。

 

Please file issues at GitHub and ask questions at Stack Overflow.

 

請在GitHub提出你們的建議,並請在Stack Overflow詢問問題。

 

備註:若您想購買AI人工智慧相關產品,歡迎洽詢機器人王國商城

 

相關文章

[ 教學技術文 ] MCS事件觸發功能進階教學——如何用更新後的 Webhook 功能連動外部服務?

作者/攝影

本文改編自聯發科技Cloud Sandbox(MCS)官方部落格上的文章,特此感謝聯發科技的授權,圖文版權均屬於聯發科技。

文章分類教學技術文

 

在之前的文章中,聯發科技的工程師介紹了在原型開發階段,事件觸發功能的最佳化,包含支援觸發條件的資料通道新增網頁警告的視覺化提示,以及如何自行定義該警告提示的嚴重性名稱而在這一篇文章,他們要教讀者們如何使用最佳化的 Webhook 功能,並以一個實例進行教學。若您尚未閱讀之前的文章,建議可看完後再回本文閱讀,以利交互搭配新功能一起使用。一起來閱讀吧!

延續之前的介紹,讀者們可看見連接MCS的工廠機台,在分別發生警告嚴重性為橘色 / 警告名稱為 Medium,以及警告嚴重性為紅色 / 警告名稱為High 兩種事件時,在測試裝置頁面的呈現,請參考下面2張圖:

圖1 顯示各別資料通道的網頁警示 | mcs.mediatek.com

 

圖2 在裝置列表頁面,僅顯示該裝置所有資料通到中警告嚴重性最高的警示燈號。 | mcs.mediatek.com

 

現在,除了網頁警告提示外,如果讀者們希望在事件發生的同時,能更進一步連動到某個遠端的實體裝置,例如智能音箱、無線燈泡⋯⋯等等,以提示在該地點的管理者,能否透過MCS實現呢?答案是可以的。

 

首先,我們必須選擇想要連動的物聯網裝置。除了挑選情境適合的裝置外,這個物聯網裝置在技術上必須滿足以下條件:

  1. 有對外開放的 API 接口

  2. API 支援 HTTP Restful 的通訊協定

 

讓我們假設情境設定如下:

工廠機台發生上述兩種事件觸發的緊急狀況時,透過 MCS 連動到管理者家中臥房的無線燈泡,而且燈泡直接顯示紅色或橘色燈光。在這個案例中,我選擇使用彩色的Wifi LED智能燈泡——美國LIFX 燈泡(也可選擇較常見的Philip Hue,只是筆者 2 年多前剛好為嘗鮮而購入)。從該公司網站上,我們可以確定產品都支援HTTP Restful的 API 接口,以利外部服務並與其整合。

圖3 截圖來源:美國LIFX 官網 https://www.lifx.com/

 

回到MCS,我們以設定橘色警告燈的Medium 觸發事件1為例。回到原型下事件觸發設定的步驟三進行編輯,在動作類型的選項,下拉新增 Webhooks。

圖4

 

如果過去曾用過Webhook這個功能,眼尖的讀者應該發現目前的Webhook 設定介面,我們新增了三個欄位:動作(Actions)標頭(Headers)內文(Body),這樣的格式也是今日普遍的HTTP Restful 請求格式。

圖5 上圖左為舊版 Webhook功能設定,上圖右為新版 Webhook功能設定。 | mcs.mediatek.com

 

讓我們到LIFX 官方的開發者頁面,找到改變燈泡行為(Set State的教學頁面(https://api.developer.lifx.com/docs/set-state),並將觸發該燈泡所需必要資訊填入MCS上的 Webhook 觸發動作頁面:

圖6

 

圖7 動作類型選取Webhook後的設定選單,填入LIFX 開發者頁面相關資訊。 | mcs.mediatek.com

 

動作:PUT

 

控制此燈泡的 HTTP 要求動作:

URL: https://api.lifx.com/v1/lights/:selector/state

其中selector為變數,可為all、label:[value]、id:[value] 任一種識別資訊指定想要連動的燈泡。

 

標頭Authorization:Bearer XXXXXXXXXXXX Content-Type:application

其中 Authorization 的值為使用者的識別碼,需在登入 LIFX cloud Home 頁面後,創建該 personal access tokens(LIFX 教學頁面有說明如何創建)。內文格式則為json。

 

內文

{
“power”: “on”,
“color”: “orange”
}

 

LIFX 的官方文件中有針對燈光的細節,例如亮度、燈光持續時間、模式等提供更完整說明,且對應的物件都可以放入內文。此情境中僅放入 power 及 color 兩個物件。接著,按下寄發 Webhook 按鈕,測試打到 LIFX服務的 Webhook 是否成功觸發燈泡開啟橘色燈光。讀者們可看見下圖中燈泡成功開啟橘光,按下儲存便完成這個事件觸發設定的更新。

圖8 按下測試按鈕,確認該燈泡有正確開啟橘色燈光。 | mcs.mediatek.com

 

依此類推,讓我們複製同樣設定在高警告嚴重性的 High事件——即當機台運轉狀態轉為弱時,同時觸發家中臥房的 LIFX 燈泡,開啟紅色燈光。在此設定中,除了內文的 「color」修改為「red」外,其餘資訊皆和事件1相同。

圖9 事件2的觸發事件設定內容 | mcs.mediatek.com

 

完成後,可看到在觸發條件和動作列表中,兩個告警事件後方的觸發動作下,已新增 Webhooks。至此,我們完成了工廠機台發生狀況時,透過 MCS 遠端連動家中臥室燈光的設定。

圖10

 

透過MCS事件觸發中的簡單設定,我們可輕鬆遠端連動除了智能燈泡外不同的物聯網裝置。除本文中的 LIFX燈泡或其它物聯網的硬體裝置外,當然也可透過 Webhook 的功能,在事件發生時連動到其他支援HTTP Restful 的軟體服務,如IFTTT、Slack 或 Line⋯⋯等等,讀者們可針對您所需的應用,選擇適當軟硬體產品,並參照該服務網站上的相關說明。

 

最後特別說明一下,這個案例是透過 MCS 本身的 Webhook功能控制 / 連動遠端軟硬體服務;相反地,若要透過第三方的軟體服務和MCS互動,則需透過申請appId及appSecret的方式,並透過該服務的webhook來和MCS互動。有興趣的讀者,可以複習此篇教學。

 

現在,馬上開始建立您的事件觸發情境吧!

 

相關文章

[ 介紹文 ] 2018.10.04- 我挖!我挖!!我挖挖挖!!!Tamiya怪手大改造 從線控成為BLE遠端控制

作者

SmallpTsai

圖片

pixabaySmallpTsai

撰稿

宗諭

審閱

鈺莨

說明

感謝專案作者SmallpTsai開放授權,讓CAVEDU教育團隊能撰寫本文,特此致謝!若想更進一步了解專案詳細檔案、資料,請點這裡

 

這次的挑戰,是改裝Tamiya 70170線控怪手,安裝上LinkIt 7697開發板,使手機能透過低功耗藍牙(BLE),遠端控制。看看作者SmallpTsai如何製做。

圖1 SmallpTsai專案的目標

 

第一步:Tamiya 70170怪手組裝

主要按照產品的使用者說明書,一步步組裝。但記得略過步驟1至4,因為這個專案不需線控。至於該如何確認怪手組裝成功呢?必須透過手動接電池測試,確認怪手內的三顆馬達都能正常運作。

 

第二步:電腦端環境設定

如果您過去沒有使用過Arduino IDE,請Google搜尋「Arduino IDE」,接著下載並安裝。近一步Google搜尋「7697設定Arduino IDE」,並根據聯發科技的教學文件設定。而在聯發科技的教學文件中,提供了一個範例程式,請依照教學文件一步步操作,便可將範例程式燒錄至LinkIt 7697。但我們可以在程式中的LRemote.setName(),把括號內的名稱改成自己喜愛的名字。

 

第三步:手機端環境設定

請至App Store(iOS)或Play商店(Android),下載「LinkIt Remote」並安裝。開啟LinkIt Remote後,請按右上角的「refresh」按鈕,讀者們應該會看到自己的裝置名稱,請選擇它。如果一切運作順利,讀者們應會看見下圖:

圖2 LinkIt Remote初始時的使用者介面

 

經過電腦端和手機端的環境設定後,我們需確定能以手機遙控LinkIt 7697上的LED燈。測試方法就是點擊USR LED這個切換按鈕,應該會看見 LinkIt 7697 開發板上內建的USR LED亮起來。

 

第四步:接電路

這個專案運用2個L293D馬達控制板,控制3顆馬達。而控制3顆馬達需用到6個腳位,運用到的腳位,請見下表:

馬達A腳位B腳位
Left1716
Right1514
ARM1312

表一

接線圖:

圖3

 

電路接好後,應能以手機控制馬達正轉或反轉。若讀者在接電路部分想更多了解,請至作者的GitHub頁面上交流,謝謝。

 

接下來,就是把程式碼燒錄至Linkit 7697開發板,然後就可用手機遠端控制怪手了。以下是不同學員的作品,給大家參考。雖然Tamiya 70170怪手的外型和結構基本上是固定的,仍可發揮一些巧思,使作品更有創意。

圖4 學員Hanny的怪手

 

圖5 Hanny設計的控制介面

Hanny的控制介面的原始碼

 

圖6 學員Jenny的作品

 

圖7 Jenny設計的控制介面

Jenny的控制介面的原始碼

 

備註:若想購買LinkIt 7697,歡迎洽詢機器人王國商城。

 

相關文章

 

[ 介紹文 ] 2018.09.25- 當車子有了智慧,對我們的行車體驗有何影響?來看看Smart Car!

作者

Josh Go成功大學資訊工程系教授
黃崇明/成功大學資訊工程系博士生林士颺

圖片

pixabay

說明

轉載、改寫自「臺灣網路科教館」生活科學補給站內文章,特此致謝!原文請見

現今,車輛多半只負責運送乘客抵達目的地。然而,不久的將來,「智慧車」將提供過往未能達成的許多新功能,例如:主動式安全系統、自動駕駛系統、即時車流導航資訊系統⋯⋯等等。目前只出現在科幻電影內的許多特殊功能,即將實現於本文主角「智慧車」上。

 

什麼是智慧車?

「智慧車」不同於傳統汽車,它結合汽車、半導體、電子、資通訊及光電等科技於一身。其上整合應用多種不同感測器、雷達、無線通訊、攝影機等裝置,以達成我們需要的功能。「智慧車」的開發,通常以車輛安全、舒適便利及環保節能等三方向為主軸,可進一步探討如下:

圖1 廠商開發的智慧車

 

一、安全防護

車輛的安全性始終為車廠與駕駛關注的重要議題。以往,車廠透過許多技術提升車輛安全性,而未來的科技將更進一步於事故可能發生前,即產生安全防護。例如,在主動式防碰撞系統中,車輛利用裝配於其上裝置,提供的資訊進行運算,在事故可能發生前,即警示駕駛或產生相對應動作,例如自動減速⋯⋯等等,降低事故發生機率。

 

二、便利駕駛

未來的「智慧車」將提供更完整、豐富的功能,減輕駕駛負擔。其中一種無人駕駛的智慧車,許多科技大廠正積極研發中。無人智慧車提供語音或觸控螢幕,讓使用者輸入目的地,再依即時車流量資訊選擇最佳路線,將乘客以自動駕駛方式,安全運載至目的地。

圖2 無人智慧車提供語音或觸控螢幕(示意圖)

 

三、即時導航

以往的車輛導航系統,依全球定位系統(GPS)將車輛位置定位後,顯示於螢幕上,並依所設定目的地,找出較佳導航路線。而未來的即時導航系統,在尋找導航路線時,將同時考量車流量與擁塞⋯⋯等資訊,避免將車輛導引至塞車路段,讓駕駛可快速抵達目的地,同時降低廢氣污染,達成環保節能的目標。

 

四、車間通訊

「智慧車」能提供以往無法達成的許多功能。為達到這些功能,彼此交換車間訊息即為必須。除了行車資訊的傳遞和交換,「智慧車」更能透過車間通訊等方式,讓駕駛在車輛上連接各種不同網路。目前,車間通訊的重要發展,以結合通訊(Telecommunications)與資訊(Informatics)的車用資通訊(Telematics)技術為主。

 

五、環保要求

近年來,地球的平均溫度,因二氧化碳大量排放而日趨升高。為保護這獨一無二的地球,「智慧車」將以零汙染、零碳排的電力能源為動力系統。智慧車於日光充足時,利用太陽能電板補給電力;當日光微弱或夜晚時,可利用家用電源補足電力。此外,為便利使用者,不需電線的「無線充電系統」也將使用於智慧車上,只需將車開回車庫內(不需直接連接電源),即可自動替車子充電。

圖3 智慧車以電力能源做動力系統

 

六、延伸應用

除本身能提供的服務和功能外,「智慧車」更能擴展應用領域。例如,結合智慧型運輸系統(Intelligent Transport Systems,ITS) ,以提升先進交通管理服務、先進旅行者資訊服務、先進公共運輸服務、先進車輛控制安全服務、商車營運服務、緊急事故支援服務、電子收付費服務、資訊管理系統、弱勢使用者保護服務等九大領域。

 

小結

為更快速抵達目的地,以及有更安全、舒適的行車體驗,「智慧車」應運而生,並提供過往車輛未能具備的功能。而在不久的將來,過去只有在科幻電影中現身,車輛的種種炫麗功能,將可能一一實現在智慧車上。就讓我們拭目以待吧!

 

相關文章

[ 翻譯 ] 2018.09.21- 認識TensorFlow.js,在瀏覽器就能用JavaScript 訓練機器學習模型喔!

原文作者

Josh Gordon  Sara Robinson

圖片

Josh Gordon、Sara Robinson提供

翻譯宗諭審閱阿吉老師
說明

感謝兩位作者的授權翻譯,特此致謝!原文請見這裡

We’re excited to introduce TensorFlow.js, an open-source library you can use to define, train, and run machine learning models entirely in the browser, using Javascript and a high-level layers API. If you’re a Javascript developer who’s new to ML, TensorFlow.js is a great way to begin learning. Or, if you’re a ML developer who’s new to Javascript, read on to learn more about new opportunities for in-browser ML. In this post, we’ll give you a quick overview of TensorFlow.js, and getting started resources you can use to try it out.

 

我們很興奮能向大家介紹TensorFlow.js。TensorFlow.js是一個完全開放原始碼的函式庫,只要運用Javascript與其高階API,就能在瀏覽器中直接定義、訓練並運行機器學習模型。若您本身是一位Javascript開發者,但對機器學習不是那麼熟悉,那TensorFlow.js是一個很好的學習方式。又或者,您是一位對Javascript不太熟的機器學習開發者,請繼續閱讀本文以幫助您深入了解更多關於瀏覽器內機器學習的新契機。在這篇文章中,我們將快速介紹TensorFlow.js,還有您可用來嘗試TensorFlow.js的快速上手資源。

 

In-Browser ML

Running machine learning programs entirely client-side in the browser unlocks new opportunities, like interactive ML! If you’re watching the livestream for the TensorFlow Developer Summit, during the TensorFlow.js talk you’ll find a demo where @dsmilkov and @nsthorat train a model to control a PAC-MAN game using computer vision and a webcam, entirely in the browser. You can try it out yourself, too, with the link below — and find the source in the examples folder.

 

瀏覽器內的機器學習

在瀏覽器客戶端就能直接執行機器學習程式能帶出許多新契機,例如互動式的機器學習!您可以看看TensorFlow開發者大會直播,在關於TensorFlow.js的分享中有一段是@dsmilkov@nsthorat 正demo一個完全跑在瀏覽器中的範例,運用電腦視覺和網路攝影機訓練一個模型以控制小精靈遊戲。您也可以使用下面的連結親自試一下,並在examples資料夾中找到原始程式碼。

 

If you’d like to try another game, give the Emoji Scavenger Hunt a whirl — this time, from a browser on your mobile phone.

 

如果想試試看其他遊戲,可以試試看Emoji Scavenger Hunt ,但這次請使用您手機上的瀏覽器嘗試。

圖1

 

ML running in the browser means that from a user’s perspective, there’s no need to install any libraries or drivers. Just open a webpage, and your program is ready to run. In addition, it’s ready to run with GPU acceleration. TensorFlow.js automatically supports WebGL, and will accelerate your code behind the scenes when a GPU is available. Users may also open your webpage from a mobile device, in which case your model can take advantage of sensor data, say from a gyroscope or accelerometer. Finally, all data stays on the client, making TensorFlow.js useful for low-latency inference, as well as for privacy preserving applications.

 

由使用者的角度來說,在瀏覽器中就能執行機器學習代表不用再安裝任何函式庫或驅動程式了。只要打開網頁就可以執行程式了。此外,它還可支援GPU加速。TensorFlow.js會自動支援WebGL,當GPU可用的時候,它會在背景中加速您的程式。使用者也可透過行動裝置開啟網頁,這樣一來您的模型就能取用手機的感測器資料,例如陀螺儀或是加速度計。最後,所有資料皆保留在客戶端上,使TensorFlow.js既適用於低延遲推論,也適用於需要保護的應用程式。

 

What can you do with TensorFlow.js?

If you’re developing with TensorFlow.js, here are three workflows you can consider.

  • You can import an existing, pre-trained model for inference. If you have an existing TensorFlow or Kerasmodel you’ve previously trained offline, you can convert into TensorFlow.js format, and load it into the browser for inference.

 

  • You can re-train an imported model. As in the Pac-Man demo above, you can use transfer learning to augment an existing model trained offline using a small amount of data collected in the browser using a technique called Image Retraining. This is one way to train an accurate model quickly, using only a small amount of data.

 

  • Author models directly in browser. You can also use TensorFlow.js to define, train, and run models entirely in the browser using Javascript and a high-level layers API. If you’re familiar with Keras, the high-level layers API should feel familiar.

 

我們可以運用TensorFlow.js做些什麼?

若您正使用TensorFlow.js進行開發,以下三個工作流程是您可考慮的:

  • 您可匯入現有、預先訓練好的模型進行推論。若您有一個現有的TensorFlow或Keras模型,您可將其轉換為js的檔案格式,並將其載入至瀏覽器中進行推論。

 

  • 您可以重新訓練一個已匯入的模型。在前面提及的小精靈遊戲範例中,您可使用遷移式學習,透過使用一種叫做「影像再訓練(Image Retraining)」的技術,運用在瀏覽器中收集到的少量數據,做到在離線狀態下也能訓練現有模型。這是一種只需少量資料也能快速訓練精確模型的方法。

 

  • 直接在瀏覽器中建立模型。您也可以用TensorFlow.js,運用Javascript和高階API,直接在瀏覽器內定義、訓練並運作模型。若您熟悉Keras,那麼這些高層API對您來說應該不陌生。

 

Let’s see some code

If you like, you can head directly to the samples or tutorials to get started. These show how-to export a model defined in Python for inference in the browser, as well as how to define and train models entirely in Javascript. As a quick preview, here’s a snippet of code that defines a neural network to classify flowers, much like on the getting started guide on TensorFlow.org. Here, we’ll define a model using a stack of layers.

 

一起來看看程式碼

若您願意,您可直接使用範例教程開始學習。它們展示了如何匯出用Python定義的模型並在瀏覽器中進行推論,還有如何單單使用Javascript定義並訓練模型。很快提一下,以下的程式碼,它定義了一個可以分類花朵的神經網絡,很類似TensorFlow.org上的入門教學。在此用到了多個層來定義模型。

import * as tf from ‘@tensorflow/tfjs’;
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [4], units: 100}));
model.add(tf.layers.dense({units: 4}));
model.compile({loss: ‘categoricalCrossentropy’, optimizer: ‘sgd’});

 

The layers API we’re using here supports all of the Keras layers found in the examples directory (including Dense, CNN, LSTM, and so on). We can then train our model using the same Keras-compatible API with a method call:

 

這個layers API支援範例目錄中所有的Keras層(包括Dense、CNN、LSTM等等)。接著,只要呼叫對應的方法就可以使用相容於Keras的API訓練模型。以下是這個方法:

await model.fit(
  xData, yData, {
    batchSize: batchSize,
    epochs: epochs
});

 

The model is now ready to use to make predictions:

這個模型已經可以進行預測了:

// Get measurements for a new flower to generate a prediction
// The first argument is the data, and the second is the shape.
const inputData = tf.tensor2d([[4.8, 3.0, 1.4, 0.1]], [1, 4]);

// Get the highest confidence prediction from our model
const result = model.predict(inputData);
const winner = irisClasses[result.argMax().dataSync()[0]];

// Display the winner
console.log(winner);

 

TensorFlow.js also includes a low-level API (previously deeplearn.js) and support for Eager execution. You can learn more about these by watching the talk at the TensorFlow Developer Summit.

 

TensorFlow.js也包括一個低階的API(前身是deeplearn.js),並且支援Eager execution。請參考TensorFlow開發者大會的內容,您就能更深入了解。

圖2 TensorFlow.js API的概述

 

How does TensorFlow.js relate to deeplearn.js?

Good question! TensorFlow.js, an ecosystem of JavaScript tools for machine learning, is the successor to deeplearn.js which is now called TensorFlow.js Core. TensorFlow.js also includes a Layers API, which is a higher level library for building machine learning models that uses Core, as well as tools for automatically porting TensorFlow SavedModels and Keras hdf5 models. For answers to more questions like this, check out the FAQ.

 

TensorFlow.js與deeplearn.js的關聯是什麼?

這是一個好問題!TensorFlow.js是一個為了機器學習而誕生的JavaScript工具生態系,是deeplearn.js的繼承者,而deeplearn.js現在則被稱為TensorFlow.js Core。TensorFlow.js還包括一個Layers API,這是一個更高階的函式庫,能運用Core來建置機器學習模型,它也是一款自動移植TensorFlow SavedModels與Keras hdf5模型的工具。更多類似問題的答案,請參閱FAQ

 

Where’s the best place to learn more?

To learn more about TensorFlow.js, visit the project homepage, check out the tutorials, and try the examples. You can also watch the talk from the 2018 TensorFlow Developer Summit, and follow TensorFlow on Twitter.

 

哪裡最適合學習TensorFlow.js呢?

想更深入了解TensorFlow.js,請到本專案的首頁查看教學,玩玩看各個範例。您還可觀看2018年TensorFlow開發者大會的演講,並在Twitter上關注TensorFlow

 

Thanks for reading, and we’re excited to see what you’ll create with TensorFlow.js! If you like, you can follow @dsmilkov@nsthorat, and @sqcaifrom the TensorFlow.js team on Twitter for updates.

 

謝謝您耐心讀完本文,我們很期待看到您運用TensorFlow.js做出的成果!喜歡的話,可以在Twitter上關注TensorFlow.js團隊的@dsmilkov@nsthorat@ sqcai 等人的帳號來獲得最新消息。

 

備註:若您想購買AI人工智慧相關產品,請洽機器人王國商城,謝謝。

 

相關文章

[Raspberry Pi] 電腦跨網段,也可遠端連線樹莓派喔!!

本篇為[Raspberry Pi] 如何使用遠端桌面 的延續文章,使用RealVNC與各位讀者分享,如何不需在同一網段內也可進行遠端連線。

作者/攝影

CAVEDU教育團隊 許鈺莨

文章分類教學技術文
時間一小時內
成本最低1500起
難度

*

材料表
  1. 電腦或其他行動裝置
  2. Raspberry Pi(若欲購買樹莓派,請洽機器人王國商城)

1.在Raspberry Pi上安裝VNC

一開始必須在Raspberry Pi安裝VNC Connect,建議外接螢幕、鍵盤、滑鼠,或用類似像Putty、MobaXterm的軟體SSH登入Raspberry Pi,相關教學請看
[Raspberry Pi] 完全不接螢幕鍵盤滑鼠,電腦一開始就用網路線遠端連線Pi 

 

打開終端機之後,請鍵入:

	sudo apt-get update
	sudo apt-get install realvnc-vnc-server
圖1

 

圖2

 

圖3 按Y同意安裝,即可安裝完成。

 

如何開機自動執行RealVNC

a.有接螢幕、鍵盤、滑鼠

圖4 點選左上角樹莓派圖示,選「Preferences」 ->「Raspberry Pi Configuration」。

 

圖5 選「Interfaces」,再至VNC選「Enabled」。

 

圖6 重新開機即可

 

b.使用Putty或MobaXterm等軟體SSH遠端登入

在終端機輸入:

	sudo raspi-config 

 

圖7

 

會出現選項,如下圖:

圖8 選「Interfacing Options」

 

圖9 再選VNC選項

 

圖10 選擇即可設定完成

 

2.在VNC官網註冊帳號

就和登入臉書或LINE等通訊軟體的概念一樣,要先註冊一組帳號,VNC官網: https://www.realvnc.com/en/onboarding/home/ ,註冊完畢後,便可依自己的帳號登入。

圖11 建立新帳號

 

圖12 勾選「我不是機器人」選項

 

圖13 填寫個人相關資訊

 

圖14 其它行動裝置教學

 

由於RealVNC可由帳號登入,所以不管是電腦或是可上網的行動裝置,只要安裝RealVNC Viewer,皆可遠端登入,讓我們以電腦為例子。

圖15 收到驗證信件

 

圖16 註冊成功

 

如圖15,當收到驗證信件時,請按下「VERIFY EMAIL」按鈕後,會跳轉至官方頁面,顯示如上圖16,表示註冊成功。

 

3.下載RealVNC Viewer至電腦

圖17 下載RealVNC Viewer(以Windows版本為例)

 

圖18 安裝完成畫面

 

圖19 按右上角「Sign in」輸入帳號

 

圖20 登入畫面,右邊為欲登入Raspberry Pi的區域。

 

4.遠端登入Raspberry Pi

圖21 新增連線對象,選「File」->「New connection」。

 

圖22 輸入Raspberry Pi的ip 位置及名稱後,按下OK。

 

圖23 成功新增連線對象Raspberry Pi

 

圖24 輸入驗證的使用者和密碼

 

這裡預設Username為「pi」,Password為「raspberry」。

圖25 第一次連線會出現認證警告,按「Continue」即可。

 

圖26 遠端登入成功畫面

 

相關文章

[ 智慧機器人大趨勢 ] 2018.08.20- 銀髮族商機驚人! 台廠積極佈局服務型機器人 透過台灣智慧機器人玩具聯盟做跨領域整合 準備搶進全球市場

作者

林裕洋

攝影

林裕洋

主題圖片:pixabay

活動講師

CAVEDU教育團隊 曾吉弘

活動地點

北部物聯網智造基地

活動時間

2018年8月9日,文章轉載、改編自旗訊科技網站,特此致謝!

阿吉老師最近都在忙些什麼呢?除了進行AI人工智慧方面的研究、教學,以及寫作、翻譯之外,8月份,他也應台灣智慧機器人玩具聯盟的邀請,從他自己在麻省理工學院(MIT)擔任訪問學者的經驗,分享智慧型教玩具的發展歷程,以及怎麼樣結合創新思維在教學中,達成寓教於樂的目標。

 

阿吉老師指出,目前市面上最受關注的手機App開發環境,莫過源自於Google子計畫、現由麻省理工工學院維護的MIT App Inventor。該軟體可讓任何熟悉或不熟悉程式設計的人,能以簡單易用的圖型化程式語言,快速創造基於Android作業系統的應用軟體。MIT App Inventor 在全球擁有超過300萬使用者,打造超過2400萬個App,其中台灣使用者排名全球第三,約達 30萬人使用,預計將於今年秋天推出iOS版。

 

CAVEDU教育團隊是 MIT App Inventor 的正式教育推廣夥伴,2008 年初創辦後,就積極推動國內的機器人教育,以出版書籍、技術研發、教學研習及設備販售為團隊主軸,希望能讓有興趣進入這個領域的夥伴們,能夠取得優質的服務與課程。而我們的團隊也將定期舉辦研習會及新知發表,盼望帶給國內的自造者及科學DIY愛好者,更豐富、多元的學習內容,讓機器人教育能夠普及。

圖1 阿吉老師

 

智慧機器人玩具聯盟 幫大家掌握商機

這次研討會的主辦單位是「台灣智慧機器人玩具聯盟」,它是一個為推廣並促進智慧玩具及機器人的產業發展,提升智慧物聯與智造能量而成立的聯盟。聯盟的副總召集人暨資策會服創所主任何偉光說,在經濟部工業局支持、資策會協助下,台灣智慧機器人玩具聯盟於2018年正式成立。他也強調,台灣的ICT產業在全球市場居於領導地位,擁有很強的設計能力和整合能量,只是過去很少有彼此交流的機會。台灣智慧機器人玩具聯盟就是盼望透過讓不同產業,能在同一個平台內進行交流和互動,激發出更多跨領域合作的可能性,使台灣能掌握先機,搶進商機無限的服務型機器人市場。

圖2 台灣智慧機器人玩具聯盟副總召集人暨資策會服創所何偉光主任

 

銀髮族商機驚人 唯應先取得信任與信賴

小編這次有幸參加了8月底在南港展覽館舉辦的「智慧機器人展」,發現已經有更多台灣的業者投入服務型機器人的研發、製造,而銀髮族正是他們所設定主要的目標對象。回到研討會本身,智齡公司「智樂活樂齡活動社群」執行長、同時也是聯盟秘書長李立國,就分享了智慧機器人在銀髮族應用的發展趨勢,更介紹了智慧機器人可能的應用和商業模式。

 

李立國指出,因應台灣進入高齡社會,市面上有許多針對長者設計的產品或服務,智齡公司所設立的「智樂活樂齡活動社群」,就是一個關注於熟齡銀髮族的活動平台。那企業如果想要搶攻銀髮族商機,最重要目標是需要得到長輩的信任,然後進一步取得信賴,而非一昧推銷商品或服務。建議應先從關心長者的日常生活,深入了解他們的真正需求,再提供長者適合的服務或商品。

圖3 智齡公司智樂活樂齡活動社群李立國執行長

台灣的創意與智造能量向來備受全球肯定,只可惜過去欠缺資源整合及跨域交流平台,相關領域的成員多半是獨立奮鬥經營,少有跨域合作,難以得到產業的綜效。所以,台灣智慧機器人玩具聯盟期待能透過跨域合作及垂直整合,推動領域產業的生態鏈結和夥伴關係,幫助產業資源接軌並推動創新發展,發展出台灣(MIT)的自有品牌。

 

相關文章

[科技新訊] 2018.08.14- C的速度、Ruby的動態、Python的好用、R的處理統計能力、Perl的處理字串能力、學習曲線極致簡單 新的程式語言Julia 1.0誕生!!

翻譯

Julia Taiwan社群成員

紀錄攝影

CAVEDU教育團隊、pixabay

講師訪問地點
授權

轉載自julia官方網站,由Julia Taiwan社群成員協助翻譯,特此致謝!

眾所期待的 Julia 語言 1.0 版是近十年的心血結晶。在 JuliaCon 2018年會上,Julia 社群歡慶並共同正式將該版本升級為 1.0.0

 

Julia 語言第一次公開發佈,並有不少強烈的期待:

我們想要一個開源的語言,擁有自由的版權。我們想要 C 的速度及 Ruby 的動態。我們想要有一個語法與內在表示有一致性(homoiconic)的語言, 並且像 Lisp 一樣擁有真的macro,但是擁有像 Matlab 一樣熟悉好懂的數學符號。我們也想要像Python 一樣好用的泛用型程式語言, 處理統計要和 R 一樣,處理字串要和 Perl 一樣地自然,要有和 Matlab 一樣強大的線性代數功能,串接程式要如同 shell 一樣好用。要學習的東西極致簡單,同時能讓大多數嚴苛的黑客寫起來開心。我們希望它是互動式且也是可編譯的。

圖1

 

一個充滿活力和繁榮的社群圍繞著這樣的語言成長起來,來自世界各地的人們都在為這個目標而努力不懈改進並塑造 Julia。 超過 700 人對 Julia 做出貢獻,更多人創造了上千的開源的 Julia 套件。總而言之,我們創造了這樣一種語言:

  • 快速:Julia 一開始就是為高效能設計的。Julia可藉由 LLVM 被編譯成不同平台的高效機器碼。

  • 泛用:Julia使用多重分派(multiple dispatch)作為程式典範(paradigm),可以更容易表達物件導向和函數式的設計模式。標準函式庫提供了非同步I/O、行程控制、日誌記錄、效能分析、套件管理器⋯⋯等等。

  • 動態:Julia是動態型別的,用起來像腳本語言,並且很好支援了互動式的操作方式。

  • 技術:Julia擅長數值運算,有非常貼近數學的語法,支援多種數值型別,並且支援平行運算。Julia 的多重分派,結合數值和陣列相關的資料型別,可說是渾然天成。

  • 選擇性的型別標註:Julia有豐富的資料型別描述,型別宣告可使得程式更加清楚且穩固。

  • 組合性:Julia的套件可以很和諧地一起運作。矩陣的單位數量或是資料表中一行的貨幣和顏色可一起運作,並且擁有良好的效能。

圖2

 

現在可下載 Julia 1.0 版本來試試 Julia。若您現在從 Julia 0.6 或更早的版本開始升級程式碼,我們建議您先使用過渡的0.7版本, 其中包括了棄用警告(deprecation warning)來指導您升級的過程。一旦您的程式碼無警告通過, 那麼您可無痛將程式碼更改為1.0版本。 已註冊過的套件可利用這個作為墊腳石,並發佈與1.0相容的版本更新。

 

當然,在Julia 1.0版本中一個最重要的新特性,是對語言API穩定性的保證:您為 Julia 1.0撰寫的程式碼,將可繼續在Julia 1.1、1.2中執行。這種語言是足夠成熟的。基於這樣一個穩固的基礎,核心語言的開發者與社群,皆可集中於第三方套件、工具及新特性的開發上。

 

但是 Julia 1.0 並不只意味著穩定,它也引入一些新的、強大的及新穎的語言特性。其中一些新的特性是0.6版就有的:

  • 一個全新的內建套件管理器。它比過去的套件管理器效能更好,在安裝套件上也比以往更加簡單。它也為每個專案支援虛擬環境,並記錄目前工作環境的狀態,然後將它分享給其它開發者或者是自己。最後重新設計的套件管理器,也帶來了私有套件和repository的無縫銜接。您同樣可使用開源套件的方式,管理並安裝自己的私有套件。這個JuliaCon 的演講展示了套件管理器的新設計。

  • Julia 具有新的遺失值(missing value)的正式表示法。能表示及處理遺失值是統計學及資料科學一項基本能力。在典型的 Julia 寫法(Julian fashion)內,新的解決方案是具有廣義性、組合性,也是高效能的。任何一般的集合型別(collection type)皆可以簡單地使用預先定義好的 missing 變數有效支援遺失值。而這種集合型別的效能在過去的 Julia 版本裡可能會很慢,但現在編譯器已可使得 Julia在遺失值的表示上,達到類似C或C++的速度,然而遠比C或C++更廣義且靈活。

  • 內建的 String 型別可安全地使用並處理任意的資料。您的程式不會因一個無效 Unicode 字元而壞掉好幾個小時或好幾天。所有的字串資料會保留,同時指出哪些字元是有效的,哪些是無效的。這樣允許您的應用程式,安全且方便地執行在不可避免缺陷的真實世界的資料中。

  • Broadcasting已成為語言的核心特性,並且有著方便的語法支援。現在,它將比過去更加強大。在 Julia 1.0 裡,賦予自定義型別 broadcasting 特性,以及在 GPU 和向量化硬體上實作最佳的運算皆更加容易, 這是為未來更多的效能提升鋪路。

  • Named tuples是一個新的語言特性,它允許高效且方便地表示和存取資料的名字以獲取資料。例如,你可以這樣表示一列資料 row = (name=”Julia”, version=v”1.0.0″, releases=8) 並且透過 row.version 存取 version 資料,而這和 row[2] 有著同樣的效能,卻更加方便。

  • 點運算子現在可被重載,並且允許型別使用 obj.property 的方式來存取物件資訊,而不是用額外撰寫欄位setting和getting function的方式。 這有助於將以類別為基礎的語言,例如Python或Java更加流暢地翻譯至Julia。屬性存取器的重載讓存取一行資料與named tuples的存取語法一致:您可以寫 table.version 來獲取表格中的 version 這一行,就如同 row.version 會取得 version 這一列的這個欄位一樣。

  • Julia 語言的最佳化器在多個方面皆更加聰明,我們無法全部羅列,但有值得列舉的一些重要的特點。最佳化器現在可在函式呼叫間傳遞常數,這將使得編譯器可有比過去更好執行死碼刪除(dead-code elimination)和靜態求值。編譯器現在也能避免對短期封裝(short-lived wrappers)的長期物件(long-lived objects)做記憶體配置,這讓程式設計師可用方便的高階抽象,而不會有效能損失。

  • 參數化型別(Parametric type)的建構子(constructors),現在將使用和宣告同樣的語法進行呼叫,這將減少一些對語法的困惑。

  • 迭代器協定被重新設計。新的迭代器協定更加簡單,不需要定義三個不同的函式:startnextdone。現在只需定義一個參數和兩個參數的 iterate 函式即可。這允許我們可簡單定義一個帶有預設值的函式給出一個初始值。更重要的是,這也實現了一個只有在嘗試回傳失敗後就結束的迭代器。這種迭代器可以非常普遍使用在I/O、網絡及生產者-消費者模型中;而Julia現在可更直接並正確地撰寫這樣的迭代器。

  • 作用域的規則被簡化了。引入區域作用域的結構提高了一致性,而不需要管全域的命名綁定是否已經存在。 這將消除之前的「軟/硬作用域」的區別,也意味著現在 Julia可靜態地確定變數是區域的還是全域的。

  • Julia 語言本身變得更加輕量級,很多部分皆被從核心分離至標準函式庫中。這個標準函式庫將與Julia一起發佈,但是不會作為語言的基礎。 若您需要他們,只需引入這些函式庫即可(不需再安裝),但是不會強制使用。在未來,這些標準函式庫將會獨立被標記版本和更新,以達成更快的改進和升級。

圖3

 

我們仔細地審查了Julia的API,並且提高了它的一致性和可用性。許多費解的命名和低效的實作皆被重新命名和重構, 能夠更優雅地發揮Julia的能力。這樣的改變促使集合的使用方式更加一致和連貫,確保在整個語言中,遵循一致的參數的順序, 並且將關鍵字參數(現在更快了)整合至API中。

  • 我們特地創建了一些新的外部套件相容於Julia 1.0的新特性,例如:

    • 資料處理相關套件已經改版並支援新的遺失值

    • Cassette.jl 提供了Julia程式碼轉換至編譯器中的強大機制,允許post-hoc analysis和拓展既有程式碼。除了提供profiling和debugging這樣的工具之外, 甚至可用於實現機器學習任務的自動微分。

    • 異質架構(Heterogeneous architecture)的支援被大大提高,並且從 Julia編譯器中解耦了出來。Intel KNL系列硬體上可直接使用 Julia。而Nvidia的GPU 也可透過CUDANative.jl直接編寫程式(不需撰寫 CUDA 程式碼), 而支援 Google TPU的介面也正開發中。

還有無數個大大小小的改善。你可以查看0.7 NEWS 文件當中的完整的更新。在我們 2012 年的“為什麼我們創造 Julia” 文章內,我們寫到:

它還沒有完工,但是是時候發佈一個 1.0 版本了(其實歷時 6 年才發布)—— 我們創造了一個語言叫做 Julia。

 

雖然對1.0的發佈,我們放了大家好幾次鴿子,但這一次我們終於正式發佈了。 我們真心為上千位,以各種形式貢獻給這個真正的數值計算,和泛用程式設計的現代語言的人,感到自豪及無比欣喜。

圖4

 

相關文章

[教學文] What!智能寶比可遙控!!沒錯,用超級搭檔LinkIt 7697 + Robot Shield達到(文末有彩蛋喔)

作者/攝影

文:Mason Chen (Mason亦為遙控智能寶比的作者,特此致謝!)

圖:Mason Chenfreepik (主題圖片背景)

文字潤飾:CAVEDU 宗諭

文章分類教學技術文
時間

成本

難度

材料表
  • LinkIt 7697*1

  • Robot Shield*1

  • 寶工智能寶比*1

  • 用來遙控的手機 *1

近來,不少Maker皆喜愛把現成的套件、模組加以改裝,置入開發板,例如LinkIt 7697、Arduino系列⋯⋯等等,使改裝後的套件、模組有更、更聰明的應用。比如之前我門曾專文介紹過的Wall-E機器人,便是一個很好的例子。

 

接著這股趨勢,本文所要介紹的,是由Mason Chen大大所改裝,可用手機的低功耗藍牙遙控的AI智能寶比。

 

寶工(Pro’s Kit)出品的「AI智能寶比」是一款智慧型機器人,能與8歲以上的小朋友一起互動、遊玩。它配有紅外線感應器,因此具備避障的功能,經過Mason的改裝後,把原先的紅外線感應玩法,改換成以手機的低功耗藍牙( BLE )進行遙控。

圖1 卡哇伊的智能寶比

 

小知識:什麼是低功耗藍牙(Bluetooth Low Energy,簡稱BLE)?

低功耗藍牙是一種個人區域網路技術,多應用於醫療保健、運動健身、家庭娛樂⋯⋯等領域。顧名思義,低功耗藍牙跟經典藍牙相比,目的在於保持同等通訊範圍的同時,顯著降低功耗及成本。根據藍牙技術聯盟(SIG)預測,至2018年,高於90%有藍牙的智慧型手機將支援低功耗藍牙。

 

接下來,我們就要進到硬體改裝部分:

 

Step1:把寶比的頭部拆下來,並且以斜口鉗或適當工具,把原先的電池檔板破壞掉。這部分會需要花點時間,且要小心處理,只破壞裏面,外殼要保留好。 處理完後可試擺LinkIt 7697與MiniPlan出品的Robot Shield,看看是否可以完全置入。

圖2

 

圖3

 

圖4

 

Step2:把原先的馬達插頭,按照圖5中所標示的,連接至 Robot Shield 中。

圖5

 

Step3:再把寶比的頭部小心地裝回去。這樣,硬體部分就完成了。

 

再來,是軟體開發部分:

Step1:我們使用 LinkIt 7697 arduino 進行開發。

  • 設定好Arduino IDE的環境,並燒錄已經寫好的程式至LinkIt 7697 中。
圖6

 

Step2:手機端請下載LinkIt Remote APP

  • 請打開手機藍芽,以及Robot Shield的電源。
  • 開啟 LinkIt Remote APP,順利的話,便可以找到已改裝好的寶比。
圖7

 

  • 按住Joystick移動,便可遙控寶比了。
圖8

 

文末彩蛋:透過Scratch 3.0遙控智能寶比

還記得之前的一篇文章,教大家運用Scratch 3.0連接micro:bit嗎?在Masen Chen大大的努力下,現在Scratch 3.0也可連接LinkIt 7697,進而控制智能寶比囉!其基本原理仍是運用Scratch Link連接Scratch 3.0與LinkIt 7697,然而,因Scratch 3.0並不支援LinkIt 7697,所以在運用Scratch Link之外,LinkIt 7697的韌體及Scratch 3.0上的指令積木皆必須重寫。至於如何撰寫、操作,就請各位讀者多跟Mason Chen大大交流了。

 

備註:若想購買相關開發板,請點這裡,謝謝。

 

相關文章

[介紹文]以LinkIt7697搭配LinkIt Remote打造智慧門禁系統 6項功能、6大特色一次帶您看!!

作者/攝影

智慧門禁系統作者:曾希哲老師

文字整理:CAVEDU 宗諭

圖片:曾希哲老師、pixabay

文章分類介紹文
時間

成本
難度
材料表
  • LinkIt 7697*1(若欲購買,請洽機器人王國商城)

  • RC522 RFID讀取器*1

  • 電磁鎖*1

  • LCD*1

  • 蜂鳴器*1

  • Mifare S50 Card*1

  • 智慧型手機*1

因長期致力於科技教育,CAVEDU團隊認識許多老師,但慢慢地我們才發現,教師當中真是人才濟濟,高手藏身於教育界。對科技、程式教育,有熱忱又富能力的老師其實相當多,例如熱衷於四軸飛行器教學的洪雅慧老師,還有對於Micro:bit深有研究的劉正吉老師⋯⋯等等,而花蓮的曾希哲老師也是其中之一。

圖1 各路高手在教師界

 

若仔細瞧瞧曾希哲老師的臉書頁面,上面幾乎都是他各種學習程式、物聯網、開發板的心得、照片及影片,例如,他最近就在玩LinkIt 7697的擴充板,不斷發出新的貼文,真感受到他的樂此不疲!為將所學得的技術充分教導給學生,曾老師也架設一個網站「曾希哲的學習天地」,上面有他學習物聯網、LinkIt 7697、Arduino⋯⋯等等心得,讀者們記得抽空去逛逛喔!

圖2 曾希哲老師的個人網站

 

本文的主角是曾希哲老師一手打造的「智慧門禁系統」。當初,曾老師有做過RFID的門禁系統,並於2017年以此系統參加過「花蓮創客賽物聯網組」,卻一直找不著適合的按鍵輸入方式。

 

因此,曾希哲老師便逐漸萌生以手機當作藍牙鍵盤的想法,並想透過LinkIt Remote實現。後來,他在手機上實做出藍牙鍵盤,並加入原有的門禁系統中,再把幾項一直想做出的功能實現,最後「智慧門禁系統」就大功告成。(噹啷~~)

圖3 智慧門禁系統

 

讓我們先看看曾希哲老師親自錄製的介紹影片:

 

這個「智慧門禁系統」包含哪些單元呢?請見下圖:

圖4

 

智慧門禁系統的功能與特色

系統是以LinkIt 7697為核心建立,有以下幾項功能:

  1. 可用RFID刷卡輸入

  2. 可以藍牙鍵盤輸入

  3. LCD顯示輸出

  4. 蜂鳴器輸出

  5. 若使用者兩次輸入錯誤,系統就會透過Line即時訊息通知屋主。

  6. 假設使用者受威脅必須開門,可輸入威脅密碼,門一樣會打開,但會在威脅者無法察覺情況下,以Line即時訊息通知屋主,使屋主能盡快報警。

 

這個系統又有哪些特色呢?

  1. 以手機作為藍牙鍵盤,使用起來相對方便。

  2. 使用者受威脅需開門時,可使用威脅密碼。

  3. 同時使用藍牙與WiFi功能,LinkIt 7697是以IFTTT網路服務,透過Wi-Fi傳送Line即時訊息。

  4. 不需使用App Inventor撰寫手機程式,只要撰寫7697程式即可。

  5. 使用LinkIt 7697 BlocklyDuino,程式撰寫比較容易。

圖5

 

圖6 圖5、6為曾希哲老師運用LinkIt 7697 BlocklyDuino,所撰寫的程式碼。

 

6.可透過這個系統,學習RFID的概念。

 

進一步交流

關於如何自造智慧門禁系統,應是因製作步驟較複雜,曾希哲老師只簡單提及,就是拆解系統各部分功能,然後進行各單元製作、測試,逐步組成為一個完整系統。若讀者閱畢本文,有興趣進一步了解此系統,歡迎直接至曾希哲老師的臉書頁面與他交流。

 

前文提及,曾老師設計、製作此系統很重要的原因,是為了實踐把手機當成藍牙鍵盤。而他是用BlocklyDuino撰寫藍牙鍵盤的程式,若讀者想更多了解,可點此下載原始程式碼。

 

結語

總之,曾希哲老師目前正積極測試LinkIt 7697擴充板的各式功能,若後續有任何消息、成果,CAVEDU教育團隊也會成為報馬仔,透過技術部落格或臉書粉絲專頁,跟讀者們分享,敬請期待!

 

附錄:

曾希哲老師以BlocklyDuino撰寫藍牙鍵盤的程式碼

/*
 * Generated using BlocklyDuino:
 *
 * https://github.com/MediaTek-Labs/BlocklyDuino-for-LinkIt
 *
 * Date: Wed, 27 Jun 2018 18:58:00 GMT
 */

#include <LRemote.h>

int SetPasswd;

int PhonePasswd;

int c;

String S1;

String S2;

String S3;

String S4;

String InputPsaawd;

String OpeningDoor;

String PasswdError;

LRemoteLabel label1;
LRemoteButton button7;
LRemoteButton button8;
LRemoteButton button9;
LRemoteButton button4;
LRemoteButton button5;
LRemoteButton button6;
LRemoteButton button1;
LRemoteButton button2;
LRemoteButton button3;
LRemoteButton button0;
LRemoteButton button10;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);
    label1.setPos(0, 0);
    label1.setText("Input Password");
    label1.setSize(3, 1);
    label1.setColor(RC_ORANGE);
    LRemote.addControl(label1);

    button7.setPos(0, 1);
    button7.setText("7");
    button7.setSize(1, 1);
    button7.setColor(RC_BLUE);
    LRemote.addControl(button7);

    button8.setPos(1, 1);
    button8.setText("8");
    button8.setSize(1, 1);
    button8.setColor(RC_GREEN);
    LRemote.addControl(button8);

    button9.setPos(2, 1);
    button9.setText("9");
    button9.setSize(1, 1);
    button9.setColor(RC_BLUE);
    LRemote.addControl(button9);

    button4.setPos(0, 2);
    button4.setText("4");
    button4.setSize(1, 1);
    button4.setColor(RC_GREEN);
    LRemote.addControl(button4);

    button5.setPos(1, 2);
    button5.setText("5");
    button5.setSize(1, 1);
    button5.setColor(RC_BLUE);
    LRemote.addControl(button5);

    button6.setPos(2, 2);
    button6.setText("6");
    button6.setSize(1, 1);
    button6.setColor(RC_GREEN);
    LRemote.addControl(button6);

    button1.setPos(0, 3);
    button1.setText("1");
    button1.setSize(1, 1);
    button1.setColor(RC_BLUE);
    LRemote.addControl(button1);

    button2.setPos(1, 3);
    button2.setText("2");
    button2.setSize(1, 1);
    button2.setColor(RC_GREEN);
    LRemote.addControl(button2);

    button3.setPos(2, 3);
    button3.setText("3");
    button3.setSize(1, 1);
    button3.setColor(RC_BLUE);
    LRemote.addControl(button3);

    button0.setPos(0, 4);
    button0.setText("0");
    button0.setSize(1, 1);
    button0.setColor(RC_GREEN);
    LRemote.addControl(button0);

    button10.setPos(1, 4);
    button10.setText("Clear");
    button10.setSize(2, 1);
    button10.setColor(RC_ORANGE);
    LRemote.addControl(button10);
  LRemote.begin();
  SetPasswd = 10;
  PhonePasswd = 0;
  c = 0;
  digitalWrite(LED_BUILTIN, LOW);
  S1 = "*";
  S2 = "**";
  S3 = "***";
  S4 = "****";
  InputPsaawd = "Input Password";
  OpeningDoor = "Opening Door";
  PasswdError = "Password Error";
}


void loop()
{
  LRemote.process();
  if (button0.isValueChanged()) {
    if (button0.getValue() == 1) {
      c = c + 1;
      if (c == 1) {
        PhonePasswd = PhonePasswd + 1;

      }

    }

  } else if (button1.isValueChanged()) {
    if (button1.getValue() == 1) {
      c = c + 1;
      if (c == 2) {
        PhonePasswd = PhonePasswd + 2;

      }

    }
  } else if (button2.isValueChanged()) {
    if (button2.getValue() == 1) {
      c = c + 1;
      if (c == 3) {
        PhonePasswd = PhonePasswd + 3;

      }

    }
  } else if (button3.isValueChanged()) {
    if (button3.getValue() == 1) {
      c = c + 1;
      if (c == 4) {
        PhonePasswd = PhonePasswd + 4;

      }

    }
  } else if (button4.isValueChanged()) {
    if (button4.getValue() == 1) {
      c = c + 1;

    }
  } else if (button5.isValueChanged()) {
    if (button5.getValue() == 1) {
      c = c + 1;

    }
  } else if (button6.isValueChanged()) {
    if (button6.getValue() == 1) {
      c = c + 1;

    }
  } else if (button7.isValueChanged()) {
    if (button7.getValue() == 1) {
      c = c + 1;

    }
  } else if (button8.isValueChanged()) {
    if (button8.getValue() == 1) {
      c = c + 1;

    }
  } else if (button9.isValueChanged()) {
    if (button9.getValue() == 1) {
      c = c + 1;

    }
  } else if (button10.isValueChanged()) {
    if (button10.getValue() == 1) {
      label1.updateText(String(InputPsaawd));
      c = 0;
      PhonePasswd = 0;

    }
  }
  if (c == 1) {
    label1.updateText(String(S1));

  } else if (c == 2) {
    label1.updateText(String(S2));
  } else if (c == 3) {
    label1.updateText(String(S3));
  } else if (c == 4) {
    label1.updateText(String(S4));
    delay(500);
    if (SetPasswd == PhonePasswd) {
      label1.updateText(String(OpeningDoor));
      digitalWrite(LED_BUILTIN, HIGH);
      delay(5000);
      digitalWrite(LED_BUILTIN, LOW);

    } else {
      label1.updateText(String(PasswdError));
      delay(5000);

    }
    label1.updateText(String(InputPsaawd));
    c = 0;
    PhonePasswd = 0;
  }
  delay(100);
}

 

相關文章

[教學文] 快說!怎樣不用Arduino也能做出電子鐘!!(555 IC篇)

  現在是微處理器盛行的時代,許多東西皆簡化成以一顆MCU取代所有電路,但要編寫MCU需要的不僅僅是程式語言編寫能力,還要有很多基本程式觀念及門檻,以及要有一台電腦才能作業。想像一下70年代的矽谷,電腦一台要價4,700,000美金,這可不是人人負擔得起的,那麼那時的電子鐘要怎麼製作出來呢?

 

本系列專題就要帶大家不用Arduino做出電子鐘。電子鐘分成三個部分:

  1. 頻率為1Hz的時脈
  2. 計算時脈的計數器
  3. 顯示數字的七段顯示器

本篇重點在於介紹1Hz時脈的產生。

作者/攝影

CAVEDU實習生 陳俊霖

文章分類教學技術文
時間

30mins

成本

約20元

難度*
材料表
  • 麵包版X1

  • IC555  X1

  • 杜邦線或單心線

  • 剝線鉗x1

  • 電池組x1

  • 51k電阻 x1

  • 47k電阻x1

  • 10u電容x1

(若想購買相關材料,請洽機器人王國商城)

  對於沒有學過電子電路的讀者想必對555這組數字很陌生,有人說555的名字是來自於使用三顆5KΩ的電阻,所以就直接取名為555,也有人說555只是當時老闆喜好的一組數字而已。

 

  當時工程師Hans R. Camenzind花費好幾周的時間想出方法,運用簡單的電晶體與電阻,做出可任意調整周期與空占比的電路,使用時只需外加電阻與電容,便可完成相似於能夠程式化編寫的時脈產生器。雖然現今電腦普及,但我們仍可用不到10元的價格從網路取得555計時晶片,現在就讓我們看看怎麼使用這顆「經典IC」吧!

 

  555的功能主要分成三種:單穩態模式、雙穩態模式及無穩態模式。我們這次使用的是無穩態模式,這種模式用在產生方波,如同它的名稱,無穩態表示不會穩定下來,會一直震盪。至於其他的使用模式在先前文章有提過,不妨參考看看:[ 電路設計軟體Multisim Blue ] 自己來設計一個腳踏車方向燈吧!

圖1 555IC外觀

 

Step1:首先,我們拿出麵包板,並將555 IC、電阻、電容如圖連接。

圖2 麵包板電路

 

圖3 接線圖

 

小提醒:

  麵包板模擬圖上的電阻值與我們要使用的不同,圖2只是給位置參考而已,實際電路元件數值如圖3所示。

 

  在這裡跟大家補充介紹555的腳位及對應功能,以及IC腳位識別:

圖4 IC接腳辨認

 

  第一次看到IC時,請仔細觀察它的表面會有一個小圓點在IC的邊角(有的IC其中一邊有一個缺口)。那個圓點的位置,就是IC的第一隻腳(若是只有一邊有缺口的,就把缺口朝向自己的左手邊,左下的腳就是第一隻腳)。若腳位接錯會使電路無法作動,嚴重一點會使整顆IC燒壞。

圖5 555 接腳圖

第1腳(接地GND):接至電源負極

第2腳(觸發TRI):當此腳位電壓低於1/3Vcc時,會使第三隻腳(OUT)輸出高電位,且讓第7腳(DIS)對地開路。

第3腳(輸出OUT):555IC的輸出腳,受到2、4、6腳控制產生對應的輸出。

第4腳(重製RST):若此腳電壓低於0.4v時,會使第三腳(OUT)輸出為低態。

第5腳(控制 CTRL):控制晶片的閾值電壓,一般使用都接一顆0.1uF電容後接地。

第6腳(臨界 THR):當此腳位電高於2/3Vcc時,會使第三腳(OUT)輸出為低態,且讓第7腳(DIS)對地短路。

第7腳(放電 DIS):與第3腳(OUT)同步動作,第3腳輸出高態則第7腳對地開路;第3腳輸出低態第7腳對地短路。

第8腳(電源Vcc):接至電源正極

 

  以TI生產的 NC555為例,最高可接至18V電源,輸出腳可輸出200mA,使用時也要注意負載有沒有超出額定功率。而這次元件和工作模式都和上面提到的文章:[ 電路設計軟體Multisim Blue ] 自己來設計一個腳踏車方向燈吧!一樣。

 

  頻率公式 f = 

 

  我們將頻率設定成1Hz,並使用常見的電子元件得到元件數值:R1=51kΩ、R2=47kΩ、C=10μF。(由於電阻與電容的製造誤差,出來的時間無法太精準。)連接完成後接上電源,LED燈就會一秒一秒閃爍了!

圖5 成果

 

成果影片:

 

  為什麼我們在今日仍需要555 IC呢?因為,555的發明讓只想產生簡易時脈功能的Maker,不必仰賴MCU去編寫一個相似於Arduino裡的「Blink」程式,更能降低生產成本且電路也很簡單。而555的應用還不只這些,許多有關脈波的應用,例如伺服馬達(Servo motor)控制電路;以及頻率應用,例如音調產生器(Tone Generator)⋯⋯等等,讀者們還可以發揮創造力與想像力來運用555 IC。

 

延伸挑戰:

  1. 既然頻率可由公式計算出來,我們是否可把R1、R2以可變電阻取代呢?會產生甚麼變化呢?

  2. 若把可變電阻改成光敏電阻、熱敏電阻,又有什麼應用呢?

  3. 若把第3腳(OUT)連接至小型揚聲器上,會有甚麼事情發生呢?

 

相關文章