2016/11/19

123Duino:開箱介紹

有幸早一步拿到123Duino這片板子的試用品,趕緊來嘗鮮。

123Duino目前正在flyingV群眾募資,打出的口號是「程式設計學習平台」,強調即插、即寫、即用。結束時間是在2016/12/29 23:59,有興趣的人,務必前往贊助,鼓勵新創專案。

募資活動已結束,有意者可到露天拍賣,搜尋「123Duino」找到商品並購買。
板子的正面照,小小的,約7.5 x 3公分而已。
板子的背面照,咦,怎麼有顆鋰電池,而且板子正面有個開關,待我一撥...
哇,通電開機囉,板子正面的OLED顯示著溫度與濕度。
板子上不只有溫溼度感測器和OLED顯示器,其右邊是個RGB LED以及蜂鳴器,另外有加速度與多軸感測器,以及光敏電阻。
我拿到板子,預設已經燒錄測試所有功能的程式,會先顯示溫溼度,讓RGB LED以紅、綠、藍順序閃爍發光。
接著會以蜂鳴器發出一小段音樂。

然後是加速度與多軸感測器。
光敏電阻感測光強度。
最後畫面出現Press the right or left key,可按下板子左右兩邊的按鈕,可控制RGB LED發光。
嘿,這可是相容於Arduino的板子啊,接下來,讓我試著燒錄其他程式吧。

我的環境是Windows 10,Arduino IDE 1.6.12 。

插入電腦,咦,怎麼沒要求安裝驅動程式呢,嗯,123Duino採用ATmega32U4,而我之前應該已用過同一顆微控制器板子,所以已經安裝了,若你需要詳細步驟的話,請參看這篇文章

開啟Arduino IDE,從選單「工具-板子」選擇「LilyPad Arduino USB」。123Duino與這塊板子完全相容,因為此時開發團隊尚未準備好板子的相關組態定義,以後應該會有名為123Duino的設定可選。
然後,從選單「工具-序列埠」選擇正確的序列埠,你的埠號不一定跟我一樣。
開發團隊給了我一堆範例程式,開啟其中的Blink_RGB_LED,編譯燒錄,哈哈,成功讓LED按照紅綠藍順序發光囉。

嗯,至此算是告一段落,最後讓我燒錄Test_All,也就是板子原本的程式功能。

咦,怎麼出現錯誤訊息啊,哦,因為123Duino需要許多程式庫,而我尚未安裝;一個一個解決吧。首先到選單「草稿碼-匯入程式庫-管理程式庫...」開啟程式庫管理員,尋找Adafruit_SHT31_Library、Adafruit_GFX_Library、Adafruit_SSD1306,一一安裝。

Adafruit_SHT31_Library,溫溼度感測器的程式庫。
Adafruit_GFX_Library,繪圖程式庫。
Adafruit_SSD1306,OLED程式庫。
另外還有兩個程式庫,需要自已手動下載安裝。請到https://github.com/jrowberg/i2cdevlib,整個打包下載後,在子目錄Arduino裏頭有兩個子目錄I2Cdev與MPU6050,整個搬移到Arduino IDE存放程式庫的地方,也就是草稿碼簿(sketchbook)的子目錄libraries哩,如此即可。

然後再試著編譯,出現如下的錯誤訊息:
#error("Height incorrect, please fix Adafruit_SSD1306.h!");

哇哩咧,搞什麼啊,嗯,因為123Duino的OLED尺寸的高度是64像素,而Adafruit_SSD1306程式庫預設設定為32像素,所以要修改Adafruit_SSD1306.h,改成如下的樣子:
   #define SSD1306_128_64
//   #define SSD1306_128_32
//   #define SSD1306_96_16


耶,成功了,把測試全部功能的程式碼,燒錄回去囉。

最後再提醒各位,123Duino目前正在flyingV群眾募資,將於2016/12/29 23:59結束,有興趣的人,務必前往贊助,鼓勵新創專案。

2016/11/11

讀後漫談:王道劍 by 上官鼎

書名:王道劍
作者:上官鼎
出版社:遠流
出版日期:2014年4月
字數:約八十八萬字

背景是明朝初期,包括明太祖、建文帝、明成祖朱棣,歷史事件方面以錦衣衛、靖難之役和建文帝失蹤懸案為主軸,以及鄭和下西洋、編修永樂大典等。
看完後,隨手記錄一些想法。

底下隨便亂寫,順序凌亂,不喜者勿看。

一開始就滅村,就死一大堆人,還有個暗藏身分的明教軍師高手,真是老套啊,算了,太陽底下沒有新鮮事,想要弄出令人耳目一新的情結,太困難了,也算OK啦。

首先是男女主角,傅翔和鄭芫,一開始便登場,不消說,當然是天資聰穎、天生麗質,12歲左右時,就已讓師父方冀暗中傳授內功,學了四五年武功,便已讓他人驚艷,男主角再過個三五年,創制出前無古人後無來者的絕世武學「王道劍」,天下第一,哇哩咧,有沒有這麼厲害啊?算了,反正主角威能嘛,

武俠小說有個難處,就一般的情形,成為高手要有三四十年以上的苦練,但主角往往只有十幾、二十幾歲,沒時間慢慢來啊,因此要有各種說法、情節、奇遇、天份,讓他們能夠快速變身成超級賽亞人、啊不對啦,是武林高手才對,甚至要成為前十名、前五名高手才行,此書主角傅翔具有奇怪的能力,能順心順意地組合招式,理解其中奧祕之處,嘛,算你行,我也可以接受,要不然怎麼辦咧。

書中雖有各大門派幫會,但談及武功,主要以釋家(達摩祖師、少林寺)和道家(太極、張三丰)為根源,而反派天竺一伙,聲稱少林武學來自天竺,這也有理,還說其他武功也不過是衍生品而已,不過天地二尊後來得到太極經,深受啟發,武學更上一層樓,算是還個公道。

既是武俠小說,武功一道也要有所創新渲染,此書以儒學「王道之學」另闢蹊徑,創造武林至高境界「王道劍」,有別於一般的「霸道」,雖然令我想到鄭丰靈劍的春秋劍法, 但還算不錯,夠創意,描述的夠多夠深。另外還有全真派完顏道士的「後發先至」,也算不錯,讓我想起漫畫龍狼傳的念體,呵。

談及幫派的武功,說明其與門派的不同,幫派人物來自四面八方,非師父弟子傳承,因此要怎麼更進一步呢?書中寫著明教十大高手互相切磋,把一身武學寫錄成書,後來才能傳給主角,由主角融會貫通,並找出巧妙結合的法門,提昇至十成功力。嗯,雖說不無道理,但也太過一廂情願,大家都這麼友好啊,開誠布公,我覺得太過天真。

人物關係,似乎也太過天真和諧,例如方冀與章逸曾出現過的隔閡,總覺得猶如小孩子扮家家酒,不過鄭芫與三位男士的感情因並未寫得很詳細、寫得若有似無,反而讓我從中窺見出一些意趣。

天真的還有武林結盟,因為有反派天竺,導致中原武林結盟,互相援助,大家肝膽相照,捨己為眾,明教方冀甚至以身試毒喪失生命,嘿,真強。對照金庸武俠小說裡的各種聯盟,甚少有規模如此之大、合作無間之至此,所以讓我覺得太過天真,徐克電影東方不敗裡有一句話說的好:「人就是江湖,你怎麼退出江湖啊?」(有人就有恩怨,有恩怨就是江湖),王道劍一書裡的武林聯盟,居然如此緊密,嘿,雖有可能,但書中描述沒有讓我覺得合情合理。

書中曾在武當山集結武林同盟,讓我想起金庸倚天屠龍記的屠獅武林大會,但相較之下,不可同日而語,總有絮絮叨叨,有點兒東西、但又有囉嗦無味之感。

反派天竺,來中原奪取武功秘笈,讓我覺得,ㄟ,怎麼才來這麼少人啊?雖然天地二尊幾乎天下無敵,但底下戰將不過十人左右而已,而中原各門派至少幾十人,太狂了吧?其中有一段情節,就是少林寺秉持傲氣,不像他人聯手圍攻,以二對二,受傷了就換另兩人,戰至最後一人,果然就消耗了天地二尊的功力,嘿,但在那之後,只天地二尊閉門修煉更進一步,其他弟子並無長進,到最後才來個人尊與幾個弟子,嗯,總讓我覺得很彆扭。明明有派人臥底十幾年,但是後續攻擊行動,無組織無章法,幾乎是靠武力強行進入嘛。

人尊使毒,於是中原武林盟主請出唐門,呃,其間鬥毒的描寫,還有思考解毒的過程,嗯,我覺得不太有趣、怪怪的,或許是不習慣吧,或許是我熟悉金庸的說法,以致如此。

除了武林,歷史方面有戰爭、靖難之役的描寫,雖有其可看之處,描寫刻劃其中的幾位人物,但我沒有太多感動,看完後不想再看一遍,我覺得這部份應該盡量少,畫龍點睛,寫出故事主角群在裡頭的作用即可,描述太過細節,比不上真正的戰爭小說。

關於武功招式,除了主角創制王道劍,其他的描寫也不錯,此書盡量少用金庸的說法,例如不用打狗棒法,而改用蓮花杖法,明教十大高手的武功,也都是新創,除了少林的易筋經,另外還安排情節,講述洗髓經不只強身健體,不錯,主角也受益於洗髓經,在武學、武功的描述上,有其可觀之處。

因為此書的歷史情節,前以靖難之役為主,後以建文帝失蹤懸案為主,除了應付天竺,中原武林各幫會門派,幾乎都有人參與保護建文帝的任務,嘛,前面說過,我覺得太過天真,雖有一些不同於其他武俠小說的情節,值得一看,但看完後也不覺得很有趣。

書中出現的歷史真實人物,因為我不熟明朝歷史,並沒有特別感覺,雖說是小說之言,但另行查閱資料後,我也多了幾分認識。

書中有時會出現【但是xxx不知道,以為會暫居,但卻會待上十幾年】,直接破梗,透漏後面的劇情,我覺得很反感。

看完此書後,的確有所收獲,感謝作者用心費力寫出五冊巨作,讓我可以暢遊於武俠世界,有些地方有其新穎之處,值得記起來,但很多地方讓我覺得不合情理,敘述簡陋,無法說服我,總體而言是我給其中上的評價。


參考資料:

2016/10/29

【情報】2016新北自造嘉年華(10/29 ~ 10/30)——隨手拍拍幾張照片

今天去看New Taipei Mini Maker Faire 2016​新北自造嘉年華,隨手拍了幾張照片。

我只拍了幾張而已,展場攤位,遠遠不止於此。若想查詢詳情,瀏覽更精美的活動紀錄照片,還請移駕到官網

居家環境模型,可用來製作自動化專案,不必真的去搞家裡的電器。
哦,組合包,不錯。
電路板雕刻機。
產品,主板已內建藍牙,並幫你寫好程式,連接各感測器,如溫度、揮手、土壤溼度等,從你的手機連線,設定啟動條件。
同上。那根棒子是溫度感測器,若超過設定溫度,就開啟電扇。
ESP8266與ESP32的產品,加上螢幕與按鈕,可玩遊戲,並連線對打。
多肉植物的溫室。
競賽作品,裏頭居然有Arduino和Intel NUC。
自動避障車,好像也能遙控。
嗯,這滿不錯的。
會閃光與發雷聲(?)的雲朵。
樂高作品。
我覺得最棒的就是這個啦,用簡單的材料,製作一台無動力車,從高處釋放,看看車子能不能跑完全程。
老少咸宜,看似簡單,但要跑完全程,也不容易喔。

2016/10/23

【情報】2016新北自造嘉年華(10/29 ~ 10/30)

新北Maker Faire活動超級多,即將舉辦2016新北自造嘉年華。

時間:10/29(六) ~ 10/30(日) ,10:00上午 ~ 05:00下午。

地點:新北市政府大樓,一到六樓、新北市政府市民廣場 (新北市板橋區中山路1段161號)

參展資格:自行製作的作品(類型不限)、製作工具、材料、零件等、製作物品用的服務(軟體、網路服務等)、鼓勵民眾動手作之活動、作品表演、展演活動

詳情情形,請到官網查詢
已在3/26舉辦的機器人體驗會。
已在7/16舉辦的動力奔馳自造松。
另外將於9/11,舉辦自造者影展 – 共設時代。

2016/10/02

UP board:2016 UP Board Virtual Hackathon黑客松

UP board正在舉辦『2016 UP Board Virtual Hackathon』黑客松活動,只要手上有UP Board的朋友都可以參加,歡迎您將創意產品,藉由這場線上比賽分享給全世界,同時又有獎金可拿,耶。

報名網址:這裡
參賽條件:握有UP board即可。
參賽產品:採用UP board的原創產品或專題實作。
參賽方式:將作品細節上傳至UP board官網,只會秀出您的作品主旨及參賽者大名。
獎金:從中選出最精采的5名優勝者,將獲合計超過台幣四萬元的高額獎金哦。
報名時間:2016/ 9/ 21 – 10/ 31
競賽時間:2016/ 11/ 1 – 12/ 31
最後展示:2017/ 1/ 10
得獎公佈:2017/ 1/20

比賽為線上參與,最終5名優勝,將安排作品寄至AAEON歐洲公司。

評比分為複雜程度(25%)、商用價值(25%)、獨特性(30%)、可量產性(20%)。

2016/09/30

讀後佩服:風格練習(Exercices de style)by 雷蒙.格諾(Raymond Queneau)

《風格練習》原文書於1947年出版,作者受巴哈《賦格的藝術》啟發靈感,問世後引發各種跨界效應,譯本超過三十多種語言。

書名:風格練習(Exercices de style)
作者:雷蒙.格諾(Raymond Queneau)
譯者:周丹穎
出版社:一人出版社
相同一段情節,你能以多少種寫法表達呢?本書作者展現了九十九99種手法,極盡想像之能事,包括倒敘、亂敘、隱喻、邏輯分析、頌歌、浮誇風、哲學風、集合論、肉販黑話、諧音、矯揉風、詩詞歌賦、史哲理數等等,千變萬化,將法文風貌嶄露無遺,帶有遊戲趣味,深具互動性,嘗試創意寫作,不僅是創造,也是破壞舊式看法。看著讀著,見識作者深厚的功力,已成為法語修辭、創意寫作及外語翻譯的範本,成書年代已久,但現在讀來仍深有啟發。

不得不佩服譯者周丹穎,不僅要懂法語,也要懂法國文化,以及各種隱語黑話,原文書既然要練習,還採用了其他語言的特質,混合揉入文章,諸如日語化、中國古文、自由體詩、漢儒風、宋詞、舊體詩等等,嘿,篇幅雖短,但費時耗力,字句斟酌不知要花去多少心血。

中文譯本首度問世,特別邀請唐捐、胡晴舫、張亦絢、孫梓評、王聰威、楊佳嫻、臥斧、李桐豪、沈意卿九位台灣作家一起來練習,展現個人「台風」,同樣以一段情節為依歸,分別寫出不同風格,包括編註體、雜阿含體、偽樂評風、什麼都不寫派、適得其所體、爆料公社體、靠北體、一則被不停打斷而肝腸寸斷的徐志摩體。

底下選錄幾則:

1. 筆記Notations
S線公車上,尖峰時刻。一名二十六歲左右的男子,軟帽繫繩,而非絲帶;脖子過長,像是被人往上拉過。人們下車了。此男對身旁的乘客發火。他責怪他每次一有人經過就推擠他。想裝兇的哭腔。男子由於看到一個空位,火速衝了上去。

兩小時後,我在聖拉札車站前、羅馬廣場 上又遇見他。他和一個同伴在一起,同伴對他說:「你應該請人在你的風衣上多加一顆扣子。」他指給他看應該加在哪兒(領口處),並告訴他為什麼。

4. 隱喻Métaphoriquement
日中,一隻拔了毛的長頸雞,被扔進白腹甲蟲裡一堆旅遊中的沙丁魚間,忽然訓斥了其中安靜的一尾。牠的言語漫布空氣中,浸潤了一抹抗議的氣息。接著,這雛鳥般的雞,為一種空無所引誘,撲上前去。
當天,在一方陰鬱的城市荒漠裡,我又再次看見了牠,正因為某顆無關緊要的扣子,被挫了銳氣。

5. 倒敘Rétrograde
你應該在你的風衣上加一顆扣子,他的朋友對他說。我在羅馬廣場中央又遇到了他,在任他貪婪地衝向一個座位,與他各分東西了以後。那時他剛因另一位乘客的推擠而出聲抗議。他說,那人每次有人下車就推撞他。這個瘦削的年輕人戴著一頂可笑的帽子。這事發生在當天中午,在滿載的S線的車尾平台上。

15. 另一造主觀觀點Autre subjectivité
今天在公車上,車尾平台那兒,我身邊站著一個乳臭未乾的小毛頭──幸好大家沒生太多這款的,不然我有天恐怕會忍不住宰了一個。這個小子,大約二十六到三十歲,特別讓我火大,這比較不是因為他像拔光毛的火雞一樣的長脖子,而是他帽上絲帶的類型:絲帶被換成一種茄子色的細繩!啊!混蛋!實在讓我噁心得不得了!那個時段車上有很多人,我就趁著有人上車或下車的推擠中,藉機用手肘撞了他的雞肋幾下。在我決定多踩他幾腳、給他點「腳」訓之前,他就膽小地落跑了。要不是這樣,我還會為了激怒他,跟他說他的風衣領口少了顆扣子,太開了。

33. 舊體詩Alexandrins
僕僕斯車追日影,
青年長頸帽冠奇。
不疑旅客摩肩立,
卻道鄰人刻意欺。
鬼哭神號聲有怨,
狼奔鼠竄步無姿。
同窗衣扣黃昏驛,
再歎人情世道離。

41. 浮誇風Ampoulé
在晨曦玫瑰色的手指開始龜裂之時,我如迅速擲出的標槍,上了一輛體型龐大、有著牛兒般一雙大眼、行車路線曲折的S線公車。我以如備戰的印第安人般的精確和敏銳,注意到在場有個年輕人,脖子比腳程快的長頸鹿還長;他有凹痕的軟氈帽,則如某風格練習的主人翁一樣,裝飾著一條編繩。預示著不幸的、胸如碳黑的不睦女神,現身來用她因牙膏闕如而臭氣熏天的口──不睦女神,我說,現身來散播她惡性的病毒,在這帽上繞有編繩、長頸鹿般的年輕人和一名面色慘白、帶優柔寡斷之色的乘客之間。前者用以下話語向後者表示:「噫!惡人,您看似故意往我的腳上踩!」語畢,帽上繞有編繩、長頸鹿般的年輕人,很快到別處去坐下了。

稍晚,在氣勢雄偉的羅馬廣場上,我又看見了那名帽上繞有編繩、長頸鹿般的年輕人,身邊傍著一名宛如美姿美儀評審般的同伴。這同伴正對他發表著以下我得以由我靈敏的耳朵親聞的批評。那針對帽上繞有編繩、長頸鹿般的年輕人最外一層衣服的評語乃是:「你也許應該在其環繞的外緣,以增添或往高處提升一顆鈕扣,來減少領口的開敞度。」。

45. 內心獨白Apartés
塞滿乘客的公車來了。希望我不要錯過這班車,運氣好還有我的位子!乘客之中,有個人表情滑稽、脖子超長的戴著一頂 繞有某種取代絲帶的細繩的軟氈帽這讓他看起來很自命不凡,忽然間喲他不知發什麼神經叱責起他身邊的乘客那人沒注意聽他在嚷啥,他責怪那人故意踩他看似要跟 那人單挑,但馬上就畏縮了他的腳。然而公車裡有空位了我就說吧,他便轉過身去,跑去坐下了。

大約兩小時後莫名其妙也還真巧,他和一個朋友和他同款的蠢蛋在羅馬廣場那兒,朋友用食指指他風衣上的一顆扣子給他看哎他能跟他講些什麼呢?

53. 宋詞Sonnet
頸長面如瓷,帽帶編成辮。草包日乘車,滿載時分現。
此線喚哀思,車尾平台淺。擦膀復挨肩,炫富點菸捲。
長頸青年上露台,怨嗔鄰客踏蹄哀,怯夫見位遂逃開。
飛轉金烏遲玉兔,回程又見頸長孩,潑才為扣費疑猜。


參考資料:

2016/09/28

讀後摘要:《好音樂的科學:破解基礎樂理和美妙旋律的音階秘密》

書名:《好音樂的科學:破解基礎樂理和美妙旋律的音階秘密》
原書名:How music works:The Science and Psychology of Beautiful Sounds, from Beethoven to the Beatles and Beyond
作者:John Powell(約翰•包威爾)
譯者:全通翻譯社
出版社:大寫出版
出版日期:2016年6月21日
寫推薦文實在很難,這件事一直以來困擾著我,我不認識你、你不認識我,要怎麼設定閱讀這篇文章的對象呢?如果不加設限,越廣越好,嘿,那可需要高超的素養與文筆,才能寫出適當的介紹文,超出我的能力;所以只好把對象設定成尚未閱讀這本書的自己,跟過去的自己一個人對話,以簡單篇幅、摘要描述本書內容,嗯,這樣就簡單多了。

本書作者兼具物理學博士學位、也有音樂作曲碩士學位,太厲害啦,遊走於科學與音樂之間,也因此才能寫出這本超棒的入門書;如同書名《How Music Works》所說,這本書要以科學陳述來解釋音樂相關的種種問題,同時了解理性認知與感性體會。

音樂不僅是藝術創作,其背後也有堅實的物理定律、工學、科學基礎。聲學的技術書籍,早已很多,但都含有大量的複雜圖表,而這本書卻能以淺顯易懂的圖表和口語描述,讓讀者了解聲音的原理。

第1章,介紹音樂到底是什麼,樂音的組成:響度、時值、音色、音高,音的命名,標準音頻率的制定。

第2章,一連串音高的上下起伏(音程),一般人唱有些偏高有些偏低,好歌手則有正確的上下起伏,若擁有絕對音感,就能與標準音相符。

第3章,樂音與噪音,聲音是空氣波動,振動體能製造出重複的規律波動時,才是樂音,而圓柱體和桿狀物,最容易辦到,如長笛、豎琴。解釋琴弦振動時的基本頻率與泛音。

第4章,音色,不同樂器雖發出同樣基本頻率的音,但因為泛音不同,所以會發出不同的音色,例如木琴與薩克斯風。

第5章,不同樂器類型的發聲方式,豎琴、吉他、小提琴,管風琴、小哨笛、單簧管,鍾琴、鋼琴,最後介紹電子合成器。

第6章,音量,聲波如何結合在一起,響度與聲音的頻率和時值的關係;如何測量聲音強度與響度,解釋愚蠢的分貝系統,最後介紹phone與sone系統。

第7章,和弦與和聲,主旋律與伴奏,為什麼某些音一起演奏時會比較好聽,持續長音,琶音,對位法。西方與非西方音樂的差異,複音樂器,單旋律樂器。

第8章,音階與音級,曲調,八度,十二等分的音程,只選七個音,大調,小調,轉調;五聲音階,如何調音調成五聲音階。平均律,音不固定的樂器,音頻固定的樂器。

第9章,曲調與感覺,大調音階與小調音階,包威爾醜怪豎琴,自然小音階、上行旋律小調音階、和聲小音階。為音調命名,CDEFGAB,各種調子並沒有情緒上的差異,而是轉變本身帶來情緒衝擊。選擇調子:樂器的設計、音域、作曲者的想像、絕對音感等。各種古代調式,異樣的風味。迷思:即便有平均律,不同調子仍給人不同的感受;打破迷思:調子本身沒有情緒,但變換調子會改變情境。

第10章,節奏、律動速率、拍子強弱;樂譜,調號、音符、小節,節拍器,

第11章,創作音樂,音樂天分的迷思,選擇樂器,作曲;古典樂曲的命名,交響樂、協奏曲、奏鳴曲。指揮的收入,即興創作。

第12章,聆聽欣賞音樂,音樂廳的音響效果,高傳真,錄音系統,黑膠唱片與CD,類比和數位,CD與MP3,家庭音響發燒友。

第13章,音程命名,調音成五聲音階,平均律的計算,各大調的音組。

最後,若想要一本輕薄短小的樂理書,可看看《基礎樂理》,作者張錦鴻。

2016/09/27

自製抽線盒

製作電子專案時,需要各種外皮顏色的電線,線若捲成線軸狀放在一起,想要時只要抽拉出來並剪斷即可,甚為方便。

現成產品,看起來非常漂亮。
不過還是自己做吧,先拿個適當的盒子,我的是個紙盒,容易鑽孔、裁切。
兩側鑽孔,筆刀、螺絲起子、斜口鉗,什麼都好,反正就鑽個孔。
穿過一條繩子,然後套入線捲,盒子前方也鑽出好幾個孔,拉出電線。
嗯,線捲糾纏不清。再裁切出幾塊適當大小的紙板,隔離開來。
闔上盒子,綁上兩條橡皮筋固定一下,呵,真陽春啊。
呵,雖然不是挺好看的,但還OK吧。

2016/09/24

【翻譯新作】Arduino穿戴式裝置專案製作(Arduino Wearable Projects )

嗨,我翻譯了一本書,在此敬告舊雨新知。

書名:Arduino穿戴式裝置專案製作
原書名:Arduino Wearable Projects
作者:Tony Olsson,瑞典馬爾默大學教師,授課主題包括多種設計領域,以實感原型和穿戴式計算裝置為中心,研究方向包括觸覺互動和電子觸覺溝通。除了在大學工作,也是獨立藝術家∕設計師和作者。
譯者:我
出版社:碁峰
出版日期:2016年9月18日
頁數:240

PS 全彩印刷喔。
內容簡介:
一開始先帶您認識基本電子元件,包括LED與感測器,學會建構電子專案的基本知識。然後實際動手;打造第一個穿戴式電子裝置,從自行車手套開始,這雙手套能夠提昇您在夜間騎車的安全性;接下來製作LED眼鏡,以及酷炫的GPS手錶;另外也會鑽研其他類型的專案,包括無鑰門鎖、可配戴在身上的NFC標籤健身資訊追蹤裝置、以及具備Wi-Fi無線連網能力的Spark開發板;最終專案,將會結合上述種種概念,建構智慧型手錶,採用技術含有健身資訊、網路通知功能、GPS。

學習目標:
.定義穿戴式運算,學習基本知識
.利用Arduino開發穿戴式裝置原型
.穿戴式裝置建構過程,所需要的設計程序與步驟
.深入了解適合開發穿戴式電子裝置的材料與材質
.製作互動式自行車手套、GPS定位器手錶等穿戴式裝置
.學習程式設計,撰寫人機互動功能
.學習如何經由藍牙和Wi-Fi無線技術,連接穿戴式電子裝置並傳輸溝通
.親手製作的實際經驗,設計個人化風格

目錄:
第1章 初探Arduino與燈光閃爍
介紹如何安裝開發環境的基本步驟,如何起手開始撰寫程式,也會建構我們第一個電子電路:控制LED。

第2章 感測器
介紹如何連接感測器並溝通,從感測器取得資料;也會介紹各種數位與類比感測器,簡單的、複雜的都有。

第3章 自行車手套
引領讀者建構本書第一個專案,目標是打造自行車手套,運用LED並說明如何操控,並且介紹感測器進行簡單的手勢辨認。

第4章 LED眼鏡
學習如何打造能受程式操控的LED眼鏡,鏡面滿佈LED,由程式控制、顯示不同的樣式與形狀,也會逐一描述建構太陽眼鏡的步驟。

第5章 茫茫世界我在何處?
聚焦在可戴在手腕上的GPS追蹤裝置,以小型LCD螢幕顯示資訊;此章還包含詳細的指引與技巧,解說如何建構外殼容納零件,讓你戴在手腕上。

第6章 親手體驗NFC
介紹NFC技術與伺服馬達,結合成為智慧型門鎖,本章還包含了圍繞NFC標籤的設計,製作可配戴的指環,作為門鎖的鑰匙。

第7章 低功耗藍牙
介紹耗電量極低的智慧藍牙技術,實際運用製作穿戴專案;內容包括Blend Micro開發板,拿來打造專案連接到你的智慧型手機。

第8章 乘Wi-Fi飛翔
介紹具備Wi-Fi能力的Particle Core開發板,以及它的網頁介面IDE,還介紹如何連接各種線上服務。

第9章 時間也能有智慧
專心致力打造智慧型手錶,連接到網際網路,使用線上服務自訂通知功能,並把通知資訊顯示在小型OLED螢幕上頭。

2016/09/20

《Python程式設計入門》一書的投影片

之前曾開設共30小時的Python入門課程,分為5天、每天6小時,製作了一份投影片,以及相關範例程式。

網址:https://github.com/yehnan/python_book_slides。

內容大致按照拙作《Python程式設計入門》一書的介紹順序,但稍加改動,有所增減,除了投影片(PDF格式),另有相關的原始程式碼檔案。

投影片裡的中英文字型分別是新細明體和Arial,各作業系統應已內建,程式碼的字型則採用inconsolata-g

2016/09/18

UP board:簡單試用GPIO

照著RPi.GPIO - UpWiki的範例,運用RPi.GPIO模組、撰寫Python程式來控制UP board的GPIO腳位。

UP board的腳位功能圖,其中Pin欄是板子的實體針腳編號,UP pinout則是UP板子SoC的腳位編號,Linux GPIO是Raspberry Pi板子的SoC腳位編號。底下範例一律使用Pin欄的編號。
首先更新套件:
$ sudo apt-get update
$ sudo apt-get install python-rpi.gpio

接下來三個範例,閃爍LED,LED明暗度,開關控制LED亮滅。

範例,閃爍LED,讓LED亮一秒、滅一秒,不斷重複。電路圖如下:
程式碼:
import RPi.GPIO as GPIO
import time

LED_PIN = 16

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)

try:
    while True:
        GPIO.output(LED_PIN, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(LED_PIN, GPIO.LOW)
        time.sleep(1)
except:
    GPIO.cleanup()

範例,LED明暗度,以軟體PWM控制LED的亮度,LED會從全暗漸漸到全亮,再漸漸回到全暗。電路圖同前。

程式碼:
import RPi.GPIO as GPIO
import time

LED_PIN = 16

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)
p = GPIO.PWM(LED_PIN, 50)
p.start(0)

try:
    while True:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
except:
    pass

p.stop()
GPIO.cleanup()

範例,開關控制LED亮滅,不按下開關時LED熄滅,按下時才亮起。電路圖如下:
程式碼:
import RPi.GPIO as GPIO
import time

LED_PIN = 16
BUTTON_PIN = 13

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN)

try:
    while True:
        print(GPIO.input(BUTTON_PIN))
        if GPIO.input(BUTTON_PIN):
            GPIO.output(LED_PIN, GPIO.HIGH)
        else:
            GPIO.output(LED_PIN, GPIO.LOW)
except:
    GPIO.cleanup()


參考資料:

2016/09/15

UP board:Ubilinux安裝OpenCV

我的環境是UP board、Ubilinux(ubilinux-3.0.iso),自行編譯OpenCV(Open Source Computer Vision Library),我抓的版本是3.1.0。

先更新套件清單並升級:
$ sudo apt-get update
$ sudo apt-get dist-upgrade -y

若是直接安裝現成的套件,指令如下:
$ sudo apt-get install libopencv-dev

不過得到的OpenCV版本通常過舊,因此自行下載原始碼,手動建置編譯。從OpenCV官方的安裝步驟,得知需要先安裝一堆相依套件。

建置與編譯所需工具:
$ sudo apt-get install build-essential gcc cmake pkg-config

抓原始檔需要的工具:
$ sudo apt-get install git

Python相關:
$ sudo apt-get install python python-dev python-numpy

圖形視窗程式庫:
$ sudo apt-get install libgtk2.0-dev

音訊視訊的編解碼、錄製、轉換、串流:
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev

圖檔格式(選用性):
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev

IEEE 1394相機介面(選用性):
$ sudo apt-get install libdc1394-22-dev

TBB(Intel's Threading Building Blocks)(選用性):
$ sudo apt-get install libtbb2 libtbb-dev

接著是OpenCV,原始碼檔案約580 MB,建置後需要2.6 GB,請先確認儲存空間是否足夠。

以git下載位於GitHub的OpenCV原始碼,得到目錄opencv,切換進去:
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv

目前處於最新的版本分支,到OpenCV官網查詢後,得知目前釋出的正式版本為3.1.0,所以決定切換到該分支:
$ git checkout 3.1.0

新增目錄build存放建置結果,切換進去:
$ mkdir build
$ cd build

先執行cmake產生建置需要的設定檔:
$ cmake -DWITH_TBB:BOOL=TRUE -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

其中「-DWITH_TBB:BOOL=TRUE「代表我們想要使用TBB,「-D CMAKE_INSTALL_PREFIX=/usr/local」代表之後要安裝的路徑,最後的「..」代表原始碼所在路徑。

然後開始建置:
$ make -j4

因為UP board的CPU有4顆核心,所以可下參數「-j4」充分利用,相當快,花了不到一小時。

最後終於出現完成的訊息:
...
[100%] Building CXX object modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/test/test_main.cpp.o
Linking CXX executable ../../bin/opencv_traincascade
[100%] Built target opencv_traincascade
Linking CXX executable ../../bin/opencv_test_calib3d
[100%] Built target opencv_test_calib3d
Linking CXX shared module ../../lib/cv2.so
[100%] Built target opencv_python2

然後安裝:
$ sudo make install

執行指令更新程式庫:
$ sudo ldconfig

試著檢查OpenCV的版本:
$ pkg-config --modversion opencv
3.1.0

耶!

然後是是撰寫C++程式,顯示一張圖檔。新增檔案test.cpp,準備一張圖檔test.png,程式內容如下:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
    Mat image = imread("test.jpg", CV_LOAD_IMAGE_COLOR);
    namedWindow("test", WINDOW_AUTOSIZE);
    imshow("test", image);
    waitKey(0);
    return 0;
}

以底下兩道指令之一進行編譯:
$ g++ -lopencv_core -lopencv_highgui -lopencv_imgcodecs test.cpp
$ g++ `pkg-config --libs opencv` test.cpp

執行:
$ ./a.out

啊哈,成功囉。
試試Python程式,新增檔案test.py,與圖檔test.png放在一起,程式內容如下:
import cv2

img=cv2.imread('test.jpg')
cv2.imshow('test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

然後執行:
$ python test.py

結果與先前的C++程式相同。

參考資料:

2016/09/11

UP board:安裝USB音效卡

UP board的音訊輸出,除了HDMI與I2S,應該就剩下加裝USB音效卡。PS:但我不是100%確定。

嗯,怎麼辦呢,雖然我有HDMI螢幕,但沒有兩端都是HDMI的線材;還是要用能把HDMI轉成RGB D-sub與3.5mm耳機孔的轉接器呢?至於I2S,目前似乎尚未支援

想起以前為Raspberry Pi買了一張USB音效卡,用了一陣子,後來就積灰塵,現在終於可以重見天日。
我買的是這款,接下來要介紹設定程序,基本上,各產品用的晶片皆不同,所以底下內文只適用於這款產品。參考文件在此

根據文件,首先判斷晶片為何,
$ dmesg | grep cm109
$ dmesg | grep Headphone
[    3.325467] usb 1-7.1: Product: C-Media USB Headphone Set
[    3.327013] input: C-Media USB Headphone Set   as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.1/1-7.1:1.3/0003:0D8C:000C.0004/input/input3
[    3.380759] hid-generic 0003:0D8C:000C.0004: input,hidraw3: USB HID v1.00 Device [C-Media USB Headphone Set  ] on usb-0000:00:14.0-7.1/input3

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 0424:2530 Standard Microsystems Corp.
Bus 001 Device 005: ID 0d8c:000c C-Media Electronics, Inc. Audio Adapter
Bus 001 Device 004: ID 0424:4603 Standard Microsystems Corp.
Bus 001 Device 003: ID 093a:2521 Pixart Imaging, Inc.
Bus 001 Device 002: ID 046d:c31d Logitech, Inc. Media Keyboard K200
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

代表我拿到的是CM-Headphone Type。然後作設定。

新增檔案/etc/asound.conf,內容如下,
pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}

原始文件說是1,但我改成0才正確,因為,
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
  Subdevices: 0/1  Subdevice #0: subdevice #0
card 1: IntelHDMI [IntelHDMI], device 0: IntelHDMI [IntelHDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

然後修改或新增檔案/etc/modprobe.d/alsa-base.conf,修改成或加入底下這行:
options snd-usb-audio index=0

完成,播放mp3音檔與mp4影片檔,都有聲音,但是玩遊戲卻沒有,例如FreeCiv,嗯,為什麼呢?

2016/09/09

UP board:把USB 3.0 Micro埠改為序列埠

UP board在HDMI插槽旁邊,有個USB 3.0 Micro埠,根據此處文件,可以改為序列埠。

PS:另外還有兩個地方提供序列埠

準備一條USB線, 一頭A公,插電腦,一頭Micro公,插UP board。我這條是2.0的線。
USB 3.0的Micro端子,其實如圖所示,但我只有2.0的線,所以只插入其中一部分而已,但仍相容可用。
開機時按著F7,選Enter Setup進入BIOS設定畫面,修改處有兩個。
第一個,Chipset > South Bridge > Default DRD Config,改成DeviceMode。
第二個,Chipset > South Bridge > USB OTG Support改成PCI mode。
然後重開機,開啟終端機,輸入底下指令,載入驅動模組並啟動該序列埠:
$ sudo modprobe g_serial
$ sudo systemctl start getty@ttyGS0

然後把USB線另一頭插入電腦,我插入的是Win 10,開啟裝置管理員,看到多出一個COM埠,記住是COM4。你的編號不一定與我的相同。
開啟可連接序列埠的終端機模擬軟體,譬如PuTTY,輸入適當的設定。
連線,耶,成功囉,看到登入提示,輸入帳號密碼。
進去囉,試著執行指令「w」,共有三個人登入,分別是從主控台、SSH、以及本篇的序列埠。
但是這個序列埠位於USB之上,所以必須等作業系統準備好後,才能提供,沒辦法輸出開機時的早期訊息,一旦重開機就會斷線。