成立 PCMan Facebook 專頁

之前常被許多網友要求加 Facebook,但是數量過多難以管理,大部分也都不認識,無法一一加入,所以成立 PCMan FB 專頁。未來長篇的文章還是會放 Blog 上,而平常的小動態會放在 FB。
另外,現在也可以使用 http://blog.pcman.im/ 來連到本網站

2015年12月19日 星期六

[教學] Raspberry Pi 搭配力量感測器 (force sensing resistor)

前言

Raspberry Pi 是像名片一樣大小的低價電腦 ,搭配各種外接裝置,能做許多應用。最近對這類開發板有興趣,於是我也買了一片 Raspberry Pi 2 來學習使用。原計畫的應用要搭配可感測壓力的 sensor,偵測使用者施壓的力量大小,但過程中遇到許多困難,尤其是類比訊號的 sensor 適合 Arduino 用,但接上 Raspbery Pi 無法直接使用。基於這方面的中文文件較少,逐一摸索克服之後,決定寫一篇教學,分享給有同樣需要的朋友,可以少走一些冤枉路。


本文使用的硬體裝置

  1. Raspberry Pi 2 開發板
  2. 類比-數位轉換器 (ADC): Microchip MCP3008 
  3. 力量感測 (FSR): Interlink FSR 406
  4. 麵包板及各種杜邦跳線
MCP3008

FSR 406

詳細實驗過程

類比-數位轉換器 (ADC, analogue to digital converter)

坊間買得到的 sensors,部份是輸出類比訊號 (例如 linear hall effect sensor、溫度感測...等等),而 Raspberry Pi 無法讀取類比訊號 (Arduino 可以),要額外加裝一枚 ADC  晶片,才能讀取。但這是值得的投資,可以在不用買 Arduino 轉板的情況下,讓 RPi 可以玩 Arduino 的類比 sensors。
推薦大家用 Microchip MCP3008,因為外國網站的教學幾乎都是這款,資料好找。缺點是電子商場不常賣。拍賣網站可取得,但推薦 RS components 網站訂購,便宜不少還免運費 (缺點是一次一定要買兩顆以上,到貨要一週)
MCP3008 是 10-bit 的 ADC,可以將輸入類比訊號轉成 0 - 1024 之間的數值,透過 SPI 界面 (不是一般 GPIO) 讓 Raspberry Pi 讀取

連接 MCP3008 到 RPi 有兩篇不錯的教學可以參考 (請搭配下列注意事項):
https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/overview
http://atceiling.blogspot.tw/2014/04/raspberry-pi-mcp3008.html#.VnWKzHYiLmU

有幾點要特別注意的

  1. 這兩篇適用舊款 Raspberry Pi 一代,若是 RPi2,照著前述教學文件接,是完全不會動的,因為 GPIO 腳位改了。請照新的 RPi2 腳位圖連接,接法相同,但所有 SPI 相關的 pin 位置幾乎都不同。
  2. Rasbian 系統預設沒開 SPI 界面,需要手動開啟 (可用 raspi-config 工具,在 Advanced 選項裡面開啟 SPI)
  3. 若 SPI 無法運作,可用 spi-test 程式檢測。需要注意的是,檢測時要用一條母-母跳線,把 SPIO MOSI 和 SPIO MISO 這兩個 pin 直接對接起來。這個動作很容易漏掉,會造成測試失敗。(原理是直接把 SPI 輸出 loop back 回輸入,也就是你送出去的資料會繞一圈送回來又送給自己,所以理論上只要 SPI 有運作,一定收得到資料,故可用來檢測)

力量感測器 (force sensing resistor)

感測的是「力量」而非「壓力」,偵測範圍約 10 g - 10 Kg,在 sensor 上有效區域施力都能偵測,但精度不佳,且無法判斷施力點位置。主要的生產商是 Interlink,型號從 FSR 400-408 有多種尺寸,但一般店面少見大尺寸,款式很少,建議網拍購買較便宜。(本文使用 FSR406)
需要特別注意的,是 FSR 406 的連接方式。FSR 尾端的接頭"理論上"直接插上麵包板即可用,但這樣使用容易折彎連接頭造成 FSR 損壞或訊號干擾,建議還是用連接線。不幸的是,一般接 sensor 和麵包板用的杜邦 2.54 mm 跳線母頭,無法接上這款 FSR。經實驗可使用 JST (XH-style) 2.5 mm 的母頭代替,可密合得很好。建議購買這種線,然後在另外一端「自行壓製」杜邦 2.54 mm 的公頭,就可以製作出能從麵包板轉接到 FSR 406 的延長線了。
XH-style 的 JST 2.5 mm 線,以及其塑膠頭
FSR 406 的尾端接不上一般杜邦 2.54 跳線母頭,我問了三間電子商場,都說沒這種接頭,建議我直接焊接。我不死心,把每一種母頭都拿起來試接,發現 JST 2.5 mm 的正好可以密合,如圖,接得很好。
自行購買的杜邦 2.54 公端子和塑膠套,準備壓在 JST 2.5 線的另外一端
把 JST 2.5 mm 的線材,另外一端自行壓上杜邦 2.54 端子,就成了特製的延長線了,可以順利插入到麵包板上。理論上壓製線材,有專用的端子鉗,但是售價太過昂貴,我又很少用。所以最後是使用尖嘴鉗和蠻力土法煉鋼。一樣可以壓緊,也能用,但是形狀較為醜陋,而且我壓壞了一個...

FSR 連接方式 

連接 FSR 可以參考這篇教學,照著接即可,只有幾點要注意
  1. 原教學是把電壓變化的類比訊號,接到 Arduino 的訊號輸入,而我們是要接給 ADC 讀取轉成數位訊號,所以是要改接到 MCP 3008 的 channel (0 - 8 都可以,程式內可以控制要讀哪個 channel)
  2. FSR 只是一個電阻,本身不發出訊號,但它受到壓力電阻會變小。所以施加電壓,通過的電流大小,就可以反映出所受到的力量 (但不是線性變化)。不過我們不能直接讀電流大小,所以需要額外串聯一個電阻 Rm 做 voltage dividing,來讀取 Rm 兩端的電壓,而這個電壓就是我們給 ADC channel 的訊號輸入。(原理是:當 FSR 受到越大壓力,電阻變小,則通過的電流越大,此時串聯的電阻 Rm 兩端就會有較高的電壓 V = I * Rm 所以我們讀取 ADC,就會讀到比較大的數值了)
  3. 施加外力大小,和 FSR 的電阻或可以量到的電壓都不是線性關係,請見官方文件有曲線圖
  4. 串接的電阻不同,會使得能夠測量到的數值範圍改變,雖然教學文件建議 10K歐姆,不一定適合每種應用,需要實驗。
我最後連接好的結果長這樣,麵包板左下角超出畫面外的紅線和黑線,是連接到 FSR406 的特製 XH 2.5mm 跳線。麵包板中央的黑色晶片是 MCP3008 ADC


如果還需要 FSR 更完整詳細的資訊,可參考這篇 Integration Guide

程式範例


#!/usr/bin/env python3
import time
import spidev

# Read SPI data from MCP3008, Channel must be an integer 0-7
def ReadADC(spi, ch):
    if ((ch > 7) or (ch < 0)):
       return -1
    adc = spi.xfer2([1,(8+ch)<<4,0])
    data = ((adc[1]&3)<<8) + adc[2]
    return data

if __name__ == "__main__":
spi = spidev.SpiDev()
spi.open(0,0)

try:
while True:
value = ReadADC(spi, 0)
print("ADC", value, float(value)*100/1024, "%")
time.sleep(0.1)
except KeyboardInterrupt:
pass
spi.close()

省錢小撇步

使用麵包板時,經常需要用跳線連接。市售跳線盒很方便,有多種長度彩色的短線可用。或也可用杜邦公-公跳線取代,但跳線盒一個通常要 80 - 150 元不等,而杜邦跳線現成的一包十條約 65元,長度通常太長,很難使用。
推薦可以買單芯線替代,用剪刀就能輕易剪出所需長度,再兩端剝皮,可做麵包板跳線,三公尺才約台幣 10 元,非常划算又好用。(剝皮用剪刀輕輕的就可以剝,小心一些並不需要專用鉗子)
把公-公跳線都換成單芯線,清爽很多,才花不到十元。缺點是我只買了一種顏色。後來我把接地的那幾條用奇異筆塗成黑色,就不會搞錯了... =.=  其實應該要買白色的,這樣需要什麼顏色的線就自己塗色就好了 XDD


以上是本次實驗的經驗分享,希望對有在玩 RPi + FSR 的朋友有幫助。

2015年9月21日 星期一

成立 PCMan Facebook 專頁

之前常被許多網路上的朋友要求加 Facebook,但是數量過多難以管理
加上大部分我幾乎都不認識,實在無法一一過濾加入,所以決定成立 PCMan FB 專頁
未來長篇的文章還是會放 Blog 上,而平常的小動態會放在 FB
有興趣的朋友歡迎追蹤 https://www.facebook.com/pcman.im
上面的內容沒有固定的主題,就一般 FB 會放的東西 XD

2015年9月20日 星期日

[吉他譜] 亂彈阿翔 - 完美落地 (附前奏詳細指法)



一直很喜歡亂彈阿翔的完美落地這首歌,正好最近在學習抓歌,又找到了這個好聽的不插電版本,就試著練習抓了。
原曲是 G 調,網路上找得到的譜也多是 G 調,但是轉成 C 調會更好彈,而且方便降 key,所以這裡提供的是轉成 C 調之後的版本。吉他手阿偉的 Solo 對我來說太困難了,所以就沒有抓,只抓了前奏和尾奏的部份。

完美落地 (翻滾吧 ! 阿信 電影主題曲)

前奏及尾奏詳細指法 pdf 檔:


作詞/作曲:亂彈阿翔
key: G, play: G, capo: 7

前奏 (C G Dm7 Fm) x 2

C          G
從現在我不會再逃避

       F          Am  G
重新的喚起 埋葬在我心底的血液

C          G
沉住氣 我的心不再移

       F          Am  G
屏息不放棄 慢慢的朝著我的夢前進

Am           G
忘了吧! 混亂的事不再提

Am           G
放了吧! 把心思變唯一

C         G
我會用盡所有力

Am            G
奮力的躍起在天際 迎著光明

C         G
我會更用力呼吸

Am            G
飛到另一個燦爛天空 完美 落地


間奏 F Am F Am G G x 2

C          G
我相信有努力會開啟

      F         Am  G
久違的光明 老天爺總是會看的清

C          G
重新又回到最初自己

      F           Am  G
每一次練習 我只想朝著我的夢前進

Am           G
忘了吧! 混亂的事不再提

Am           G
放了吧! 把心思變唯一

C         G
我會用盡所有力

Am            G
奮力的躍起在天際 迎著光明

C         G
我會更用力呼吸

Am            G
飛到另一個燦爛天空 完美 落地


尾奏 C G Dm7 Fm C

2015年9月10日 星期四

好書推薦 - 台灣的兩面鏡子:從中國、日本缺什麼, 看台灣如何加強競爭力

最近剛和研究所同學去了日本旅遊,出發前讀了這本書
日本人近藤大介寫的「台灣的兩面鏡子:從中國、日本缺什麼, 看台灣如何加強競爭力


作者為曾經派駐中國的日本人,長輩在台灣出生,他也曾造訪台灣。近藤大介藉著自身觀察,試著探討中日台三國的民族性、歷史、和文化差異,以及造成的影響。雖然我不完全認同書中全部的內容,還是覺得本書值得一讀。多了對日本民族性的了解,實地造訪日本,除了看知名景點之外,就會看到更深一層的東西。
在作者的描述當中,日本在經濟泡沫化之後,失落的二十年,使得財富和權力集中在老人身上。年輕人努力工作卻買不起房,而日本領先全球的許多成就,使得許多日本人開始只關心國內,而相對缺少國際觀,不喜歡出去外面看看,也喪失了向外開拓的勇氣,成了溫馴的草食動物。年輕人最關心的事情,不是議員的選舉,而是「AKB48 美少女選拔」。走到秋葉原,看著滿街的AKB48海報和動漫店,這話雖然聽來偏頗,或許也有幾分真實。連咖啡館都用鋼彈和AKB48作為招牌。


日本是已經邁入高齡化的國家,在大阪和東京的街頭,觀察著往來的群眾,可以明顯發現年輕族群和老人的差別。老人或是中年一輩,仍然保持著固有的日本傳統文化,重視禮節和規矩,服務業總是親切帶著微笑,有種特別的氣質。在車上不用手機,甚少交談,表情嚴肅,給人安靜內斂,又帶點壓抑的感覺。
列車到站,看著湧入的年輕高中生,各個濃妝豔抹的超齡時髦打扮,穿著不能再短的裙子,互相嬉鬧著,滑著智慧型手機,和一旁安靜的上班族形成矛盾的強烈對比,即使那就是再過幾年他們就要扮演的角色。我思索著為何會有這樣的差別?日本經濟泡沫化之後,失落的二十年,失落的或許不只是經濟而已,還有日本的傳統價值觀?也或許是高中時期,是他們最後能如此「不壓抑」的年紀了吧?
也不過約一世紀前,當時人們還信仰神道教,相信天皇是天照大神的後代,武士們誓死奉獻天皇,如今現代化的日本,天皇只剩下象徵性質,武士已經消失,而人們雖然還是會去神社祈福,卻已經不再有人相信天皇是神而不是人類。這麼短時間內經歷這麼劇烈的變革,也難怪日本處處充斥著矛盾吧!有趣的是,仔細看熱門的動漫模型「鋼彈」會發現,那機器人造型,根本就是脫胎自日本武士的盔甲。
對這個國家有更多了解之後,下次再去日本,走在街上,就不再是為了「趕去下一個景點」或是「找地方吃飯或買紀念品」而是可以細細品嚐周遭那獨特又矛盾的「日本風味」。: )

2015年8月28日 星期五

[吉他譜] 田馥甄 - 小幸運 (詳細指法+和弦)



剛開始學抓歌,第一次抓完整首,分享給需要的朋友,若有錯誤請多指教!
原曲 F 調,轉成 C 調就沒封閉,且副歌會變成卡農,對初學者比較簡單
但是聽得出來原曲應該沒 capo,因為有兩個音太低,夾了 capo: 5 彈不出
所以找了相近的音代替,和原曲有些微不太一樣


小幸運 (電影 我的少女時代 主題曲)
作者/歌手:作詞:徐世珍、吳輝福  作曲/編曲:Jerry C  演唱:田馥甄

前奏、尾奏及主歌詳細指法 (pdf 檔):
https://drive.google.com/file/d/0B4BhmC8V2mivcmNKanNSU0lMX3M/view?usp=sharing

前奏 C   Dm7  G7  C

C        Dm7
我聽見雨滴 落在青青草地

G7        C
我聽見遠方 下課鐘聲響起

Am       D        G7   C
可是我沒有聽見你的聲音 認真呼喚我姓名

C          D
愛上你的時候 還不懂感情

G      C
離別了 才覺得刻骨銘心

Am           D     G7         C
為什麼沒有發現 遇見了你 是生命最好的事情

F             G    Em           Am
也許當時忙著微笑和哭泣 忙著追逐天空中的流星

F
人理所當然的忘記

F         F           G
是誰風裡 雨裡 一直默默守護在原地

      C
原來你是 我最想留住的幸運

G               Am
原來我們 和愛情曾經靠得那麼近

Em         F     C
那為我對抗世界的決定 那陪我淋的雨

D          G
一幕幕都是你 一塵不染的真心

C
與你相遇 好幸運

G        Am         Em
可我也失去 為你淚流滿面的權利

F                C
但願在我看不到的天際 你張開了雙翼

D          G        C
遇見你的注定 她會有多幸運

Am        D
青春是段跌跌撞撞的旅行

F       C
擁有著後知後覺的美麗

Am        D        F          C
來不及感謝 是你給我勇氣 讓我能做回我自己

2015年8月15日 星期六

8/15 COSCUP 演講 - 用 "Python" 快速開發 Windows 的中文輸入法 (會後資料釋出)

今天早上在 COSCUP 2015 大會演講圓滿結束 :)
據朋友轉述,門外像是演唱會在排隊一樣排了兩圈
這麼無聊的題目,真感謝大家捧場 XD


專案的程式碼網址在:
https://github.com/EasyIME/PIME

這裡有編譯好可以直接下載安裝試驗的版本 (使用前需先安裝 python 3 和 python 的 pywin32 套件):
https://github.com/EasyIME/PIME/releases/download/v0.01/PIME-git-setup.exe

注意:目前安裝好後 python server 並不會自動啟動,所以無法打字,需要自己手動執行 server.py 才能進行測試

歡迎有興趣研究的朋友一起參與
之後會找時間包安裝程式釋出方便試用和測試

以下是這次 presentation 的投影片

PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)

程式的雛型都可以正常運作了,但目前文件還比較缺乏
有興趣有空的朋友也歡迎幫忙撰寫
Patches are welcomed!

2015年7月31日 星期五

8/15 COSCUP 演講 - 用 "Python" 快速開發 Windows 的中文輸入法

今年 8/15 將在 COSCUP 開放原始碼 2015 年會發表新專案
這次的題目是:PIME - 用 "Python" 快速開發 Windows 的中文輸入法


是的,你沒有看錯,真的是用 Python! 而且這能跑在 Windows 下。開源的中文輸入法框架,在Linux下選擇很多樣化,也已蓬勃發展多年,但在Windows 上則相對缺乏,尤其是 Windows 8 之後,新的 TSF 架構實做有相當的困難,使得很多開發者空有設計輸入法的構想,卻無法落實到很多人使用的 Windows 系統上。新的 metro mode 又加諸了許多限制,使得輸入法開發變得相當困難。本議程將介紹 PIME - 第一個嘗試在 Windows 上用 python 開發中文輸入法的架構,底層採用 C++ 開發的 LibIME (取自新酷音輸入 Windows 版),幫助有志於改善中文輸入環境的朋友,在不了解太多細節,也不用會 C++ 的狀況下,也能用 Python 語言設計新的輸入法。
有興趣在 Windows 下開發中文輸入法的 COSCUP 會眾,歡迎可以來參加!
將會現場 demo 實際使用的方式 :-)