今天在整理桌上的文件時, 找到這學期初參加菁菁的班親會時, 儀如老師給我們家長的書面資料中很有趣的人格特質分析表, 據說非常準, 是她去進修時學到的 :
下面是問卷部分, 依照描述與自己個性符合程度回答 :
這是我的作答 :
嗯, 的確蠻準的.
參考 :
MBTI 職業性格測試 (1~16)
2017年10月30日 星期一
購買 Carbonbook 筆電充電器
這幾天遍尋不著我的 Carbonbook 筆電充電器, 昨日回鄉下也沒找到, 只好找原廠詢問如何重購一個 (19V, 2.37A, 約 45W, 外徑約 3.0mm, 內徑約 1.75mm). 透過應宏客服找到筆電部門的廖先生, 報價說含運 1050 元, 中午匯入指定匯款帳戶後, 廖先生回應將於今日寄出貨品.
沒有充電器就無法用筆電, 而我重要資料都在裡面, 兩周前開會還在用啊, 怎會突然消失? 真傷腦筋. 其實露天也有賣筆電充電器, 例如 :
# (A96)96W萬用變壓器 筆電筆記型電腦電源充電器 LCD液晶螢幕 12V-24V 19V $299
# 小牛蛙數位 AMEX 19V 2.64A 變壓器 筆電充電器 筆電變壓器 旅充 筆記型電腦變壓器 $490
# 全新款 方形 ASUS 19V 3.42A 接口 4.5*3.0mm 筆電充電器 變壓器 $699
2017-10-31 補充 :
今天收到貨品了, 但不是我原先那種正方形的原廠充電器, 而是台達電 ADP-65WH BB 型號 (3.42A) 的, 市價約 800 多 :
# 台達電 INNERGIE mCube 65 (W)/ADP-65WH ABCJ1萬用電源充電器 $840
# Asus充電器(原廠)-華碩 19V,3.42A,65W $704
早知道網路上買就好了, 何必多花 200 元. 其實只要同規格就可以, 例如 :
# 華碩 ASUS 筆電 19V_3.42A 電源變壓器 65W(副廠)【全新品、保固一個月】(不附電源線) (仁武可自取) $220
# 原廠品質 3C認證 華碩 ASUS 筆電 3.42A 電源變壓器 65W (仁武可自取) $350
# ASUS 台達電 19V~3.42A 65W 筆電專用變壓器 $250
# 高質 華碩 19V4.74A 3.42A 2.1A 5.5mm 2.5m L頭 筆電變壓器
# ASUS 筆電變壓器 19V 3.42A 65W ASUS19V3.42A-4.5x2.0mm-SL $350
# 正華碩原廠最新版 ASUS 筆電 變壓器 充電器 19V 3.42A 65W $490
由於所附的電源線又長又粗, 整個體積比原先的大了 2 倍, 所以我找到下面這種短電源線與米老鼠轉接頭 :
# 超【短】米老鼠電源線 AC 延長線 梅花頭 純銅芯 短線 約30公分 超短電源線 $50
# 光華CUMA散熱精品*電腦電源線 梅花型 (米老鼠頭) 20公分 超短線材 18AWG $60
# 【全冠】美規 米老鼠 3孔 轉接座 轉接頭 2.5A 125V 清倉價 1顆/30元
最後決定買 30 元的轉接頭比較小巧. 唉, 丟了一個充電器真麻煩.
下面這個產品說明有充電器接頭規格教學 :
# 【新莊3C】高質 聯想Thinkpad 20V4.5A變壓器(帶針)20V4.5A 筆電變壓器
沒有充電器就無法用筆電, 而我重要資料都在裡面, 兩周前開會還在用啊, 怎會突然消失? 真傷腦筋. 其實露天也有賣筆電充電器, 例如 :
# (A96)96W萬用變壓器 筆電筆記型電腦電源充電器 LCD液晶螢幕 12V-24V 19V $299
# 小牛蛙數位 AMEX 19V 2.64A 變壓器 筆電充電器 筆電變壓器 旅充 筆記型電腦變壓器 $490
# 全新款 方形 ASUS 19V 3.42A 接口 4.5*3.0mm 筆電充電器 變壓器 $699
2017-10-31 補充 :
今天收到貨品了, 但不是我原先那種正方形的原廠充電器, 而是台達電 ADP-65WH BB 型號 (3.42A) 的, 市價約 800 多 :
# 台達電 INNERGIE mCube 65 (W)/ADP-65WH ABCJ1萬用電源充電器 $840
# Asus充電器(原廠)-華碩 19V,3.42A,65W $704
早知道網路上買就好了, 何必多花 200 元. 其實只要同規格就可以, 例如 :
# 華碩 ASUS 筆電 19V_3.42A 電源變壓器 65W(副廠)【全新品、保固一個月】(不附電源線) (仁武可自取) $220
# 原廠品質 3C認證 華碩 ASUS 筆電 3.42A 電源變壓器 65W (仁武可自取) $350
# ASUS 台達電 19V~3.42A 65W 筆電專用變壓器 $250
# 高質 華碩 19V4.74A 3.42A 2.1A 5.5mm 2.5m L頭 筆電變壓器
# ASUS 筆電變壓器 19V 3.42A 65W ASUS19V3.42A-4.5x2.0mm-SL $350
# 正華碩原廠最新版 ASUS 筆電 變壓器 充電器 19V 3.42A 65W $490
由於所附的電源線又長又粗, 整個體積比原先的大了 2 倍, 所以我找到下面這種短電源線與米老鼠轉接頭 :
# 超【短】米老鼠電源線 AC 延長線 梅花頭 純銅芯 短線 約30公分 超短電源線 $50
# 光華CUMA散熱精品*電腦電源線 梅花型 (米老鼠頭) 20公分 超短線材 18AWG $60
# 【全冠】美規 米老鼠 3孔 轉接座 轉接頭 2.5A 125V 清倉價 1顆/30元
最後決定買 30 元的轉接頭比較小巧. 唉, 丟了一個充電器真麻煩.
下面這個產品說明有充電器接頭規格教學 :
# 【新莊3C】高質 聯想Thinkpad 20V4.5A變壓器(帶針)20V4.5A 筆電變壓器
2017年10月28日 星期六
二哥參加 APCS 檢測
早上載二哥去中山大學圖資中心參加 APCS 檢測, 考試從 10 點開始進行到下午五點, 時間這麼長, 原本打算馬上回家, 傍晚再去接他回來, 但想說以前在這裡進修外文的時候只是在行政大樓旁的教室上課, 從來不曾上去半山腰的文學院外文系逛逛, 今天就上去逛逛吧! 也趁此機會操一下剛買的新機車.
好久沒回我的第二母校了, 發現原來往柴山的路改了, 以前是要沿著校內大道經過蔣公行館往山上走, 但現在是分離開來, 往柴山的路彎出去變成外環道, 隔出校內外之別. 騎機車沿著山路緩緩往上, 海風徐徐吹來無比涼快. 路上不時看見零星的猴母揹著或掛著猴子走在馬路邊, 停下來想拍牠們, 卻一溜煙鑽進樹叢裡.
文學院大樓矗立在半山腰的路邊, 往西望去就是藍色天際的台灣海峽, 啊! 我多久沒看到海了? 整天埋首 0 與 1, 都忘了海的樣子了. 往上一點是藝術大樓, 我也騎上去繞了一圈, 感覺這裡比較偏僻, 還好以前上課教室不是在這裡.
離開文學院繼續往前騎, 我也沒有特定目標, 就是探險. 不久看到有一個聚落, 進去發現有一個叫山海宮的廟, 廟前有一個蠻寬闊的看海平台, 視野超好, 海面上大約有十幾艘輪船, 航行很慢感覺似乎定在那裏不動. 這麼好的視野早知道應該帶菁菁一起來才對, 而且她超愛探險. 反正她李麥克英語班改成周五晚上了, 以後可以找一個周六跟水某騎兩台機車來此野餐.
晚上看麻醉風暴 2 完結篇, 我發現裡面有些外景好像就是在西子灣取景的.
好久沒回我的第二母校了, 發現原來往柴山的路改了, 以前是要沿著校內大道經過蔣公行館往山上走, 但現在是分離開來, 往柴山的路彎出去變成外環道, 隔出校內外之別. 騎機車沿著山路緩緩往上, 海風徐徐吹來無比涼快. 路上不時看見零星的猴母揹著或掛著猴子走在馬路邊, 停下來想拍牠們, 卻一溜煙鑽進樹叢裡.
文學院大樓矗立在半山腰的路邊, 往西望去就是藍色天際的台灣海峽, 啊! 我多久沒看到海了? 整天埋首 0 與 1, 都忘了海的樣子了. 往上一點是藝術大樓, 我也騎上去繞了一圈, 感覺這裡比較偏僻, 還好以前上課教室不是在這裡.
離開文學院繼續往前騎, 我也沒有特定目標, 就是探險. 不久看到有一個聚落, 進去發現有一個叫山海宮的廟, 廟前有一個蠻寬闊的看海平台, 視野超好, 海面上大約有十幾艘輪船, 航行很慢感覺似乎定在那裏不動. 這麼好的視野早知道應該帶菁菁一起來才對, 而且她超愛探險. 反正她李麥克英語班改成周五晚上了, 以後可以找一個周六跟水某騎兩台機車來此野餐.
晚上看麻醉風暴 2 完結篇, 我發現裡面有些外景好像就是在西子灣取景的.
2017年10月27日 星期五
退休金試算
今天在 Yahoo 看到下面這篇關於退休理財規劃的報導, 呼籲及早做好退休理財規劃, 越早準備就越輕鬆 :
# 30歲起步更輕鬆 老中青退休理財策略懶人包
以上班族月平均收入 52928 元, 國民平均壽命 80 歲, 以及 70% 所得替代率估算, 大約需要準備近 900 萬元才能放心退休, 摘要如下 :
上班族月平均收入 : 52908
退休所得替代率 70% : 52908*0.7=37036
60~80 歲 20 年所需退休金 : 37036*12*20=888 萬
好大的數目啊! 但其實不需要這麼多啦! 因為還要扣掉勞退金與勞保年金, 我自 94 年改為勞退新制後, 每月自提 6%, 每年存入帳戶的金額因為加薪升職等緣故逐年上升, 去年約 20 萬元, 12 年來已累計約 152 萬, 到 65 歲退休還有 13 年, 若每年存入金額仍為 20 萬的話, 則退休時總金額預估 20 * 13+152=412 萬. 可見自提 6% 很重要, 可以強迫存錢, 而我竟然還晚了兩年才決定自提.
另外還有勞保年金, 勞退金與勞保年金是不同的退休給付制度, 參考 :
# 還在以為勞退金會破產?5個Q&A,告訴你「勞退金」和「勞保」差在哪
如果勞保年金沒有被砍的話, 照同事計算大約每月 16000 左右, 20 年就是 20 * 12 * 16000=384 萬, 與勞退金 412 萬加起來就是 796 萬, 與所需的 888 萬差大約 100 萬, 嘿! 似乎離目標並不遠啊! 但是這想法馬上遭到同事打臉, 因為退休了還是要養房養車, 年紀大了醫療費用也增加, 更何況勞保年金隨時會被政府打折支付, 每個月 37000 元可能不太夠. 好像也有道理, 所以還是要理財才行, 偏偏我興趣廣泛, 理財只不過是其中一小部分, 股票買了常常擱在那邊沒時間照顧, 股價創新高時渾然不覺沒賣, 等到注意時已住進套房, 真的很糟糕. 最近下決心要整理這些住套房的房客汰弱留強, 資金轉入 0056 每年賺 5% 的穩定報酬率算了.
查詢勞退金可以攜帶身分證, 存簿, 原留印鑑及晶片金融卡到各地郵局辦理勞保局資料查詢服務同意書, 完成申請手續約 2~3 天後就可在郵局 ATM 查詢個人勞退金專戶最近 6 筆明細及專戶的累積金額. 也可以在手機下載 "勞保局行動服務" APP 查詢, 不過須先勞保局網站申請行動服務帳號才行 :
參考 :
# [勞保老年給付V.S勞退金 (新制)] 兩筆退休金,你搞懂了嗎?
# 【圖解新聞】未滿55歲的人快看 這筆錢原來你60歲不能領
# https://edesk.bli.gov.tw/na/ (須使用 IE 連線)
# http://www.bli.gov.tw/sub.aspx?a=vrseRVOKftE%3D
# 勞工退休金個人專戶查詢及試算
# http://www.bli.gov.tw/userfiles/file/6.pdf
# 30歲起步更輕鬆 老中青退休理財策略懶人包
以上班族月平均收入 52928 元, 國民平均壽命 80 歲, 以及 70% 所得替代率估算, 大約需要準備近 900 萬元才能放心退休, 摘要如下 :
上班族月平均收入 : 52908
退休所得替代率 70% : 52908*0.7=37036
60~80 歲 20 年所需退休金 : 37036*12*20=888 萬
好大的數目啊! 但其實不需要這麼多啦! 因為還要扣掉勞退金與勞保年金, 我自 94 年改為勞退新制後, 每月自提 6%, 每年存入帳戶的金額因為加薪升職等緣故逐年上升, 去年約 20 萬元, 12 年來已累計約 152 萬, 到 65 歲退休還有 13 年, 若每年存入金額仍為 20 萬的話, 則退休時總金額預估 20 * 13+152=412 萬. 可見自提 6% 很重要, 可以強迫存錢, 而我竟然還晚了兩年才決定自提.
另外還有勞保年金, 勞退金與勞保年金是不同的退休給付制度, 參考 :
# 還在以為勞退金會破產?5個Q&A,告訴你「勞退金」和「勞保」差在哪
如果勞保年金沒有被砍的話, 照同事計算大約每月 16000 左右, 20 年就是 20 * 12 * 16000=384 萬, 與勞退金 412 萬加起來就是 796 萬, 與所需的 888 萬差大約 100 萬, 嘿! 似乎離目標並不遠啊! 但是這想法馬上遭到同事打臉, 因為退休了還是要養房養車, 年紀大了醫療費用也增加, 更何況勞保年金隨時會被政府打折支付, 每個月 37000 元可能不太夠. 好像也有道理, 所以還是要理財才行, 偏偏我興趣廣泛, 理財只不過是其中一小部分, 股票買了常常擱在那邊沒時間照顧, 股價創新高時渾然不覺沒賣, 等到注意時已住進套房, 真的很糟糕. 最近下決心要整理這些住套房的房客汰弱留強, 資金轉入 0056 每年賺 5% 的穩定報酬率算了.
查詢勞退金可以攜帶身分證, 存簿, 原留印鑑及晶片金融卡到各地郵局辦理勞保局資料查詢服務同意書, 完成申請手續約 2~3 天後就可在郵局 ATM 查詢個人勞退金專戶最近 6 筆明細及專戶的累積金額. 也可以在手機下載 "勞保局行動服務" APP 查詢, 不過須先勞保局網站申請行動服務帳號才行 :
參考 :
# [勞保老年給付V.S勞退金 (新制)] 兩筆退休金,你搞懂了嗎?
# 【圖解新聞】未滿55歲的人快看 這筆錢原來你60歲不能領
# https://edesk.bli.gov.tw/na/ (須使用 IE 連線)
# http://www.bli.gov.tw/sub.aspx?a=vrseRVOKftE%3D
# 勞工退休金個人專戶查詢及試算
# http://www.bli.gov.tw/userfiles/file/6.pdf
2017年10月26日 星期四
製作 16340 鋰電池座
這幾天在研究如何用 18650 鋰電池組取代鉛酸電池時, 發現下面這部自製 4 槽電池座的影片很有啟發性 :
# How to make Balanced Battery Charger at home
作者使用迴紋針焊在萬用板上自製電池座, 讓我想起之前曾向 MCUApps 買過的 1W 太陽能鋰電池組, 參考 :
# 太陽能 1W 2200mAh 充電供電蓄電套件,Arduino 等 MCU 或各類小型裝置 $550
# 用太陽能驅動 Arduino 系統
其中的 2200mAh 鋰聚合物電池包竟然已經充不進電了, 而以前買的 16340 鋰電池 (1800mAh) 則一直沒在用, 何不用這 16340 來取代它呢?
# How to make Balanced Battery Charger at home
作者使用迴紋針焊在萬用板上自製電池座, 讓我想起之前曾向 MCUApps 買過的 1W 太陽能鋰電池組, 參考 :
# 太陽能 1W 2200mAh 充電供電蓄電套件,Arduino 等 MCU 或各類小型裝置 $550
# 用太陽能驅動 Arduino 系統
其中的 2200mAh 鋰聚合物電池包竟然已經充不進電了, 而以前買的 16340 鋰電池 (1800mAh) 則一直沒在用, 何不用這 16340 來取代它呢?
晚飯後便開始動手, 找來一塊嫌醜不想用的萬用板來做底板, 以及數根迴紋針來做正負極接頭與左右固定架, 焊好後使用小鋸機鋸開即大功告成, 測試 OK!
迴紋針攔腰剪斷
將迴紋針焊在洞洞板上引出正負端子
JST 2.0 端子插入充電控制板
放入 16340 鋰電池
接上負載同時用外接充電器充電
最後一張圖左下角就是已壞掉的 2200 mAh 鋰聚合物電池, 才用幾次就 GG 了, 原以為是電池爛, 後來在 16340 放電過程發現可能是這款充電控制板的問題, 因為當鋰電池低於 2.5V 時居然還繼續放電! 難怪會把鋰電池搞死.
2017-10-27 補充 :
原以為這樣就可以讓這個 1W 太陽能板重生, 但發現 16340 可能昨天試圖用烙鐵焊接導線時過熱, 竟然只能充到 3.53V 而已, 連基本的 3.7V 都上不去, 所以很快就放完電了, 殘念! 我看還是買新的 18650 加一節電池座, 配上新版 TP4056 充控板算了.
2017-10-27 補充 :
原以為這樣就可以讓這個 1W 太陽能板重生, 但發現 16340 可能昨天試圖用烙鐵焊接導線時過熱, 竟然只能充到 3.53V 而已, 連基本的 3.7V 都上不去, 所以很快就放完電了, 殘念! 我看還是買新的 18650 加一節電池座, 配上新版 TP4056 充控板算了.
2017年10月24日 星期二
以 18650 取代鉛酸電池儲存太陽能板電能
上週稍微研究了一下鉛酸電池作法, 覺得雖然原理簡單製作容易, 但覺得有許多缺點, 尤其鉛是有毒金屬, 鉛酸電池壞了若隨意丟棄將造成重金屬汙染. 其次, 鉛酸電池自耗電現象較明顯, 壽命僅約 2~3 年左右, 體積龐大笨重, 雖然價格便宜, 但放電效率較低. 反觀現在廣用於電動自行車的鋰離子電池 18650 電量高達 3600 mAh, 只要兩顆便可與一般最小的鉛酸電池之 7 Ah 容量匹敵了, 而且內阻小 (低於 35 毫歐姆), 自耗電極小, 放電效率高. 因此我考慮將我的 10W 實驗用的小型太陽能板改為以 18650 並聯組成蓄電池組來儲存電能.
我的 10W 太陽能板額定輸出是 18V, 我在露天找到下面這款非常合用的穩壓模組, 其輸入電壓最高容許 35V, 額定輸出 1A (最高 1.2A), 非常適合物聯網終端供電 :
# L7805 LM7805 三端穩壓器模組 5V穩壓模組 5V穩壓電源模組 $45
此模組以 L7805 穩壓晶片為主體, 可提供穩定的 5V 電壓輸出, 其電路圖如下 :
由於輸入端為橋式整流器, 因此就算接錯太陽能板的極性也沒有關係, 當然接入峰值 35V 以內的風機交流輸出也是可以的. LM7805 內阻極低, 低於 17 毫歐姆, 詳細規格參考 :
# http://datasheet.octopart.com/L7805CV-STMicroelectronics-datasheet-7264666.pdf
如果自行製作模組更便宜, 大概不到 20 元就可以了, 主要零件如下 :
# 全新原裝ST L7805CV 1.5A 三端穩壓電路 TO-220 1個一拍 w2 $6
# 1N4007 整流 二極管 (10個一拍) $3
# 直插鋁電解電容 100V 100UF 10*16MM體積 一個起拍 $2*3=6
下面這個影片介紹如何利用 L7805C 製作手機充電器, 其技法值得學習 :
# HOW TO MAKE A FREE ENERGY EMERGENCY MOBILE PHONE CHARGER
不過 L7805 最高只能輸出 1.2A, 如果需要較大驅動能力的話 (例如 30W 以上的太陽能板), D可以考慮下列這款固定 5V 輸出, 具有 3A 輸出能力的模組 :
# DC-DC電源模組3A降壓模組 小體積 24V-12V 9V 轉5V 固定輸出 W72 $39
接下來需要一個鋰電池充電保護板, 目前最常用也最便宜的是以 TP4056 晶片為基礎的充電保護板 (過充過放保護), 此晶片標準輸入電壓 5V, 最低 4V, 最高 8V, 因此剛好可接 L7805 穩壓模組的輸出. TP4056 充電電流最高為 1A (更換板上 Rprog 電阻可調充電電流, 1.2K 歐姆時為 1A), 板上有兩個顯示 LED, 藍燈亮表示充電中, 充飽後改為紅燈亮, 輸入介面還包括一個 Micro USB 插座或 Mini USB, 如果陰天沒有太陽時, 也可用一般手機充電器給 18650 充電 :
# Micro Mini USB 充電板 TP4056 1A 鋰電池 充電模組 $9
# 1A鋰電池專用充電板 充電模塊 TP4056鋰電池充電器 高精度 移動電源 Micro USB $8
# [鋰鐵鋰]TP4056 1A鋰電池專用充電板 充電模塊 鋰電池充電器 MICRO USB $20
# (2個)TP4056 1A 超小尺寸 鋰電池充電板 充電模組 充電電流可調 Mini USB介面 $29
下面這款還提供 Micro USB 或 Mini USB 插座兩款可選 :
# Micro Mini USB 充電板 TP4056 1A 鋰電池 充電模組 充電器 鋰離子電池 $9
上面那個 8 元的說明裡有列出板上 Rprog 電阻與充電電流之關係. 不過我覺得最好不要去改充電電流, 因為 SMD 貼片電阻要自己換挺麻煩的, 就固定用 1A 充電就好. 根據說明, 充電電流最好是電池容量的 0.37 倍, 因此若以 1A 充電, 則換算此充電板適合之鋰電池容量是 1000 mA/0.37=1702, 亦即此板適合使用 2600 mAh 以下的鋰電池.
下面這部影片有詳細的性能測試 :
# Charging a Lithium 18650 Cell using the TP4056
不過現在已有新版具有鋰電池保護功能的模組推出了, 改成 Micro USB 輸入插槽, 參考 :
# 現貨 NX|18650鋰電池保護3.7v 3.6V 4.2V鋰電池充電板1A 過沖過放保護(2個) $26
# 18650 3.7v 3.6V 4.2V 鋰電池充電與保護一體板充電保護二合一 過充過放保護 $30
新版模組多了 ML8205 與 DW01x 這兩顆充電保護 IC, 前者是一顆雙併的 MOSFET 晶片, 作為鋰電池供電輸出的閘門, 具有低於 25 毫歐姆的內電阻; 而 DW01x 則是用來控制 ML8205 閘門的啟閉以達到保護鋰電池的功能, 參考下面的影片 :
# New TP4056 Lithium Cell Charger Module with Battery Protection
TP4056 是一款恆流恆壓的單一 (Single) 線性鋰電池充電晶片, 內建的 PMOSFET 架構可以阻斷來自電池的逆向回充電流, 因此不須外接二極體. 充電電壓固定在 4.2V, 充電電流可透過一個外部電阻調節, 最高 1A. 當電池電壓到達 4.2V, 充電電流降低到設定值的 1/10 以下時 (設定 1A 的話就是低於 100 mA) 後即為浮充狀態, TP4056 將自動停止充電. 參考規格書 :
# https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf
18650 鋰電池是接在 B+ 與 B- 端子上, 注意, 接線不可太細. 負載則接在 +OUT 與 -OUT 上. 下面這個商品說明裡有接線說明 :
# buy360-ic 1A 電池充電與保護一體板 充電+保護 二合一 18650電池充電板 $45
由於 18650 標稱電壓為 3.7V, 充飽為 4.2V, 因此若要供電給一般 5V 或 12V 負載, 必須在 OUT 後面加一個升壓板, 例如下面這塊 :
# DC-DC升壓模塊(0.9V~5V)升5V 600MA USB 升壓電路板 行動電源升壓 W2 $17
至於 18650 鋰電池, 我上回買過下面這款, 還蠻好用的 :
# 特價批發全新18650 印刷3800MAH充電鋰電池 強光手電筒最佳搭配充電池 (無帶保護板) $30
高雄可自取的賣家參考 :
# 《耀升》18650 2200mAh充電電池 鋰電池 $50
# {名森自行車}X-FREE【保護板設計】可充電尖頭鋰電池 2600mAh【18650】 $50
# 2016自行車零配件-X-FREE 可充電尖頭鋰電池 $60
關於 18650 知識參考 :
# 18650鋰電池知識全解析
下面影片介紹如何利用 TP4056 製作 18650 充電模組 :
# How to make Balanced Battery Charger at home
也可以購買現成電池盒, 一節才 7 元 :
# 18650 電池盒 單節電池盒 1節充電座 18650電池盒 帶線 (1個一拍) $7
# 18650電池盒 ABS外盒 彈片接點 插針 單顆 $10
下面這個影片就是使用單節電池盒 :
# DIY: Lithium 18650 Cells Charger By Using TP4056 Modules
也可以使用多節電池盒, 但要注意串並聯問題, 要買各節獨立沒有串並聯鐵片的 :
# 【鋰鐵鋰】 4顆 18650電池盒 ABS外盒+ 彈片接點 非彈簧 鉚釘 (有尺寸) $50
# DIY 帶插針18650 4槽電池盒 w55 $62
下面是另一個範例 :
# Battery Charger for 18650 Lithium Cells
綜合以上調查評估, 系統架構如下圖 :
上圖中 L7805 即已輸出穩定的 5V, 因此也可以直接將 5V 的負載加在此處, 但是只有在有陽光的時候才能驅動. 如果需要驅動 12V 的 LED 照明燈或澆水的小幫浦, 則可在 L7805 輸出端加上一組 12V 升壓模組.
參考 :
# MPPT 5A太陽能控制器 DC-DC恒壓恒流降壓模組 多功能數位雙顯 $409
# MPPT 5A太陽能控制器 DC-DC降壓模組 帶數顯 恒壓恒流 $373
# MPPT 5A太陽能充電板 電瓶充電反接保護防回流低功耗(C3B5) $416
# Solar-Powered 3.7V Lithium Battery Charger (youtube)
# HOW TO MAKE A SOLAR POWER BANK FROM USED LAPTOP BATTERY (youtube)
# 鋰電池太陽能控制器 11.1V 3A 充18650鋰電池三串太陽能控制器
# 鋰電池充電器設計技巧:從太陽能電池獲取更大功率
# 求助各位版友...太陽能充電式投射燈具
# 改裝電動自行車電池 (鉛酸電池→磷酸鋰鐡電池)
# 除硫器 延壽器 再生器 修復器 脈衝器(鉛酸電池電瓶) $340
# 太陽能電池板 單晶 6V2W 高效 太陽能板 2瓦A級光伏板 $149
2017-11-13 補充 :
今天在 Youtube 看到下面這部影片, 提供了許多 18650 知識, 原來其名稱來自直徑 18mm, 長度 65mm, 而且容量超過 3400 mAh 者都是誇張騙人的 :
# DIY18650充電站
我的 10W 太陽能板額定輸出是 18V, 我在露天找到下面這款非常合用的穩壓模組, 其輸入電壓最高容許 35V, 額定輸出 1A (最高 1.2A), 非常適合物聯網終端供電 :
# L7805 LM7805 三端穩壓器模組 5V穩壓模組 5V穩壓電源模組 $45
此模組以 L7805 穩壓晶片為主體, 可提供穩定的 5V 電壓輸出, 其電路圖如下 :
Source : kenwilliam's blog
由於輸入端為橋式整流器, 因此就算接錯太陽能板的極性也沒有關係, 當然接入峰值 35V 以內的風機交流輸出也是可以的. LM7805 內阻極低, 低於 17 毫歐姆, 詳細規格參考 :
# http://datasheet.octopart.com/L7805CV-STMicroelectronics-datasheet-7264666.pdf
如果自行製作模組更便宜, 大概不到 20 元就可以了, 主要零件如下 :
# 全新原裝ST L7805CV 1.5A 三端穩壓電路 TO-220 1個一拍 w2 $6
# 1N4007 整流 二極管 (10個一拍) $3
# 直插鋁電解電容 100V 100UF 10*16MM體積 一個起拍 $2*3=6
下面這個影片介紹如何利用 L7805C 製作手機充電器, 其技法值得學習 :
# HOW TO MAKE A FREE ENERGY EMERGENCY MOBILE PHONE CHARGER
不過 L7805 最高只能輸出 1.2A, 如果需要較大驅動能力的話 (例如 30W 以上的太陽能板), D可以考慮下列這款固定 5V 輸出, 具有 3A 輸出能力的模組 :
# DC-DC電源模組3A降壓模組 小體積 24V-12V 9V 轉5V 固定輸出 W72 $39
接下來需要一個鋰電池充電保護板, 目前最常用也最便宜的是以 TP4056 晶片為基礎的充電保護板 (過充過放保護), 此晶片標準輸入電壓 5V, 最低 4V, 最高 8V, 因此剛好可接 L7805 穩壓模組的輸出. TP4056 充電電流最高為 1A (更換板上 Rprog 電阻可調充電電流, 1.2K 歐姆時為 1A), 板上有兩個顯示 LED, 藍燈亮表示充電中, 充飽後改為紅燈亮, 輸入介面還包括一個 Micro USB 插座或 Mini USB, 如果陰天沒有太陽時, 也可用一般手機充電器給 18650 充電 :
# Micro Mini USB 充電板 TP4056 1A 鋰電池 充電模組 $9
# 1A鋰電池專用充電板 充電模塊 TP4056鋰電池充電器 高精度 移動電源 Micro USB $8
# [鋰鐵鋰]TP4056 1A鋰電池專用充電板 充電模塊 鋰電池充電器 MICRO USB $20
# (2個)TP4056 1A 超小尺寸 鋰電池充電板 充電模組 充電電流可調 Mini USB介面 $29
下面這款還提供 Micro USB 或 Mini USB 插座兩款可選 :
# Micro Mini USB 充電板 TP4056 1A 鋰電池 充電模組 充電器 鋰離子電池 $9
上面那個 8 元的說明裡有列出板上 Rprog 電阻與充電電流之關係. 不過我覺得最好不要去改充電電流, 因為 SMD 貼片電阻要自己換挺麻煩的, 就固定用 1A 充電就好. 根據說明, 充電電流最好是電池容量的 0.37 倍, 因此若以 1A 充電, 則換算此充電板適合之鋰電池容量是 1000 mA/0.37=1702, 亦即此板適合使用 2600 mAh 以下的鋰電池.
下面這部影片有詳細的性能測試 :
# Charging a Lithium 18650 Cell using the TP4056
不過現在已有新版具有鋰電池保護功能的模組推出了, 改成 Micro USB 輸入插槽, 參考 :
# 現貨 NX|18650鋰電池保護3.7v 3.6V 4.2V鋰電池充電板1A 過沖過放保護(2個) $26
# 18650 3.7v 3.6V 4.2V 鋰電池充電與保護一體板充電保護二合一 過充過放保護 $30
新版模組多了 ML8205 與 DW01x 這兩顆充電保護 IC, 前者是一顆雙併的 MOSFET 晶片, 作為鋰電池供電輸出的閘門, 具有低於 25 毫歐姆的內電阻; 而 DW01x 則是用來控制 ML8205 閘門的啟閉以達到保護鋰電池的功能, 參考下面的影片 :
# New TP4056 Lithium Cell Charger Module with Battery Protection
TP4056 是一款恆流恆壓的單一 (Single) 線性鋰電池充電晶片, 內建的 PMOSFET 架構可以阻斷來自電池的逆向回充電流, 因此不須外接二極體. 充電電壓固定在 4.2V, 充電電流可透過一個外部電阻調節, 最高 1A. 當電池電壓到達 4.2V, 充電電流降低到設定值的 1/10 以下時 (設定 1A 的話就是低於 100 mA) 後即為浮充狀態, TP4056 將自動停止充電. 參考規格書 :
# https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf
18650 鋰電池是接在 B+ 與 B- 端子上, 注意, 接線不可太細. 負載則接在 +OUT 與 -OUT 上. 下面這個商品說明裡有接線說明 :
# buy360-ic 1A 電池充電與保護一體板 充電+保護 二合一 18650電池充電板 $45
由於 18650 標稱電壓為 3.7V, 充飽為 4.2V, 因此若要供電給一般 5V 或 12V 負載, 必須在 OUT 後面加一個升壓板, 例如下面這塊 :
# DC-DC升壓模塊(0.9V~5V)升5V 600MA USB 升壓電路板 行動電源升壓 W2 $17
至於 18650 鋰電池, 我上回買過下面這款, 還蠻好用的 :
# 特價批發全新18650 印刷3800MAH充電鋰電池 強光手電筒最佳搭配充電池 (無帶保護板) $30
高雄可自取的賣家參考 :
# 《耀升》18650 2200mAh充電電池 鋰電池 $50
# {名森自行車}X-FREE【保護板設計】可充電尖頭鋰電池 2600mAh【18650】 $50
# 2016自行車零配件-X-FREE 可充電尖頭鋰電池 $60
關於 18650 知識參考 :
# 18650鋰電池知識全解析
下面影片介紹如何利用 TP4056 製作 18650 充電模組 :
# How to make Balanced Battery Charger at home
也可以購買現成電池盒, 一節才 7 元 :
# 18650 電池盒 單節電池盒 1節充電座 18650電池盒 帶線 (1個一拍) $7
# 18650電池盒 ABS外盒 彈片接點 插針 單顆 $10
下面這個影片就是使用單節電池盒 :
# DIY: Lithium 18650 Cells Charger By Using TP4056 Modules
也可以使用多節電池盒, 但要注意串並聯問題, 要買各節獨立沒有串並聯鐵片的 :
# 【鋰鐵鋰】 4顆 18650電池盒 ABS外盒+ 彈片接點 非彈簧 鉚釘 (有尺寸) $50
# DIY 帶插針18650 4槽電池盒 w55 $62
下面是另一個範例 :
# Battery Charger for 18650 Lithium Cells
綜合以上調查評估, 系統架構如下圖 :
上圖中 L7805 即已輸出穩定的 5V, 因此也可以直接將 5V 的負載加在此處, 但是只有在有陽光的時候才能驅動. 如果需要驅動 12V 的 LED 照明燈或澆水的小幫浦, 則可在 L7805 輸出端加上一組 12V 升壓模組.
參考 :
# MPPT 5A太陽能控制器 DC-DC恒壓恒流降壓模組 多功能數位雙顯 $409
# MPPT 5A太陽能控制器 DC-DC降壓模組 帶數顯 恒壓恒流 $373
# MPPT 5A太陽能充電板 電瓶充電反接保護防回流低功耗(C3B5) $416
# Solar-Powered 3.7V Lithium Battery Charger (youtube)
# HOW TO MAKE A SOLAR POWER BANK FROM USED LAPTOP BATTERY (youtube)
# 鋰電池太陽能控制器 11.1V 3A 充18650鋰電池三串太陽能控制器
# 鋰電池充電器設計技巧:從太陽能電池獲取更大功率
# 求助各位版友...太陽能充電式投射燈具
# 除硫器 延壽器 再生器 修復器 脈衝器(鉛酸電池電瓶) $340
# 太陽能電池板 單晶 6V2W 高效 太陽能板 2瓦A級光伏板 $149
2017-11-13 補充 :
今天在 Youtube 看到下面這部影片, 提供了許多 18650 知識, 原來其名稱來自直徑 18mm, 長度 65mm, 而且容量超過 3400 mAh 者都是誇張騙人的 :
# DIY18650充電站
2017年10月23日 星期一
Arduino 433M 超再生無線模組測試
做完 nRF24L01 無線模組測試後, 我在零件箱裡又找出之前向露天賣家 XLAN 買的 433MHz 超再生無線收發模組, 也是一樣來沒測試過能不能用, 參考 :
# [X-LAN] Arduino RF 433M 超再生模組 發射接收一對 $45
# 露天 XLAN 電子零件購買清單
剛好上週五向市圖借的 "Arduino 自造指南 (碁峰, 曾繁勛等譯)" 書已拿到, 其中的專案 47 "建構無線遠端控制" 就是使用這種無線射頻連結模組 (SparkFun 零件編號 wrl-10534 的 RF Link 模組). 今天就趁著上班前的空檔測試看看. 以下的測試還參考了下面這本書 :
# Arduino 互動設計專題與實戰 (碁峰, 柯博文)
此模組有分收發不同板子如下所示, :
這種 RF Link 模組沒有錯誤檢查功能, 無法確認送出的資料是否正確接收. 注意, 接收板中間的兩個針腳是相同的 Data 腳, 接哪一個都可以. 另外, 兩塊板子上都有一個 ANT 天線孔, 可以用單心線繞原子筆捲成一個 2cm 的彈簧天線, 一端焊在 ANT 孔上才能讓傳送距離增加, 參考商品說明 :
"使用前,發射與接收端都要接上天線,以達到最佳接收效果; 天線可以用單心線捲成螺旋狀,長度約2公分即可。"
沒有天線的話傳遞距離大約只有 40~50 公分而已, 加上天線空曠處可達 40 公尺 (書上說可達 100 公尺), 參考其規格 :
工作電壓(V):DC 5V
傳輸速率:<10KB/S (一般 4KB/S)
發射功率:25mW
工作電流:4mA
調製方式:調幅
工作溫度: -10 ℃ ~ 70 ℃
接收靈敏度(dBm):-105DB
工作頻率(MHz):433.92MHz
實測距離可以達40公尺(視實際環境有無干擾而定)
使用此模組傳遞資料須使用 VirtualWire 函式庫, 可從下列網址下載最新的 1.27 版, 將 ZIP 檔解壓縮後放在 Arduino 安裝目錄的 libraries 子附錄下即可 :
# http://www.airspayce.com/mikem/arduino/VirtualWire/VirtualWire-1.27.zip
VirtualWire 函式庫各函式用法說明可參考 :
# https://www.pjrc.com/teensy/td_libs_VirtualWire.html
在 "Arduino 自造指南" 專案 47 中, 傳送板與接收板的 Data 腳都接到 Arduino 的 D8 腳, 傳送板 Arduino 的 D2, D3 各接上一個按鈕開關與上拉電阻; 接收板 Arduino 的 D6, D7 各接一組 LED 與 560 歐姆電阻串聯電路以顯示收到的按鈕狀態訊號. 專案 47 的範例程式如下 :
傳送端程式 :
#include <VirtualWire.h>
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
const char *on2="a";
const char *off2="b";
const char *on3="c";
const char *off3="d";
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(300);
vw_set_tx_pin(8);
pinMode(2, INPUT);
pinMode(3, INPUT);
}
void loop() {
if (digitalRead(2)==HIGH) {
vw_send((uint8_t *)on2, strlen(on2));
vw_wait_tx();
Serial.println("a");
delay(200);
}
if (digitalRead(2)==LOW) {
vw_send((uint8_t *)off2, strlen(off2));
vw_wait_tx();
Serial.println("b");
delay(200);
}
if (digitalRead(3)==HIGH) {
vw_send((uint8_t *)on3, strlen(on3));
vw_wait_tx();
Serial.println("c");
delay(200);
}
if (digitalRead(3)==LOW) {
vw_send((uint8_t *)off3, strlen(off3));
vw_wait_tx();
Serial.println("d");
delay(200);
}
}
接收端程式 :
#include <VirtualWire.h> 4 6
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
const char *on2="a";
const char *off2="b";
const char *on3="c";
const char *off3="d";
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(300);
vw_set_rx_pin(8);
vw_rx_start();
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
if (vw_get_message(buf, &buflen)) {
switch(buf[0]) {
case 'a':
digitalWrite(6, HIGH);
Serial.println("a");
break;
case 'b':
digitalWrite(6, LOW);
Serial.println("b");
break;
case 'c':
digitalWrite(7, HIGH);
Serial.println("c");
break;
case 'd':
digitalWrite(7, LOW);
Serial.println("d");
break;
}
}
}
但是我沒有使用上面這組程式來進行測試, 因為我覺得它的範例比較複雜, Arduino 的 DIO 腳本身就有內建上拉電阻了, 不需要外加. 我的測試方法很簡單, 就是在接收端用兩個全域變數紀錄 LED 現在的狀態, 當接收到傳送的送來的信號時就將狀態反轉, 這樣方便一個人做距離測試時檢查狀態是否有改變 (增加測試距離時記住原先狀態, 按下按鈕後再跑過去檢查). 我將其改編為如下的測試 1 :
測試 1 : 接收端 LED 顯示傳送端按鈕的 toggle 狀態
傳送板程式 :
#include <VirtualWire.h>
const char *sendA="A"; //按鈕 A 要傳送的資訊
const char *sendB="B"; //按鈕 B 要傳送的資訊
int buttonA=2;
int buttonB=3;
int TXpin=8; //傳送板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true); //設定RF Link 模組 "push to talk" 極性
vw_setup(300); //設定速率 300bps
vw_set_tx_pin(TXpin); //設定 Data 傳送腳 (D8)
pinMode(buttonA, INPUT_PULLUP); //開啟上拉電阻
pinMode(buttonB, INPUT_PULLUP); //開啟上拉電阻
}
void loop() {
if (digitalRead(buttonA)==LOW) { //若按鈕 B 被按下
vw_send((uint8_t *) sendA, strlen(sendA)); //傳送字元 'A' 給接收板
vw_wait_tx();
Serial.println("Send 'A'");
delay(200);
}
if (digitalRead(buttonB)==LOW) { //傳送字元 'B' 給接收板
vw_send((uint8_t *) sendB, strlen(sendB));
vw_wait_tx();
Serial.println("Send 'B'");
delay(200);
}
}
接收板程式 :
#include <VirtualWire.h> 4 6
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
boolean LEDA_ON=false; //LED 預設熄滅
boolean LEDB_ON=false; //LED 預設熄滅
int LEDA=6;
int LEDB=7;
int RXpin=8; //接收板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true); //設定RF Link 模組 "push to talk" 極性
vw_setup(300); //設定速率 300bps (須與傳送端一致)
vw_set_rx_pin(RXpin); //設定接收板接 Arduino 哪一隻腳
vw_rx_start(); //RF Link 模組開始接收資料
pinMode(LEDA, OUTPUT);
pinMode(LEDB, OUTPUT);
Serial.println("Receiving...");
}
void loop() {
if (vw_get_message(buf, &buflen)) {
if (buf[0]=='A') {
Serial.println("Receive 'A'");
LEDA_ON = !LEDA_ON;
if (LEDA_ON) {digitalWrite(LEDA, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LEDA, LOW);} //狀態為 OFF 就點亮 LED
}
if (buf[0]=='B') {
Serial.println("Receive 'B'");
LEDB_ON = !LEDB_ON;
if (LEDB_ON) {digitalWrite(LEDB, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LEDB, LOW);} //狀態為 OFF 就點亮 LED
}
}
}
可見按鈕按下時, 對應的遠端 LED 就會交替明滅 (雖然這個遠端只有 50 公分不到).
傳送端序列埠監控視窗輸出訊息如下 :
Send 'A'
Send 'B'
Send 'A'
Send 'B'
Send 'B'
Send 'B'
Send 'A'
Send 'A'
接收端序列埠監控視窗輸出訊息如下 :
Receiving...
Receive 'A'
Receive 'B'
Receive 'A'
Receive 'B'
Receive 'B'
Receive 'B'
Receive 'A'
Receive 'A'
2017-10-24 補充 :
今天用原子筆捲了兩個彈簧天線焊在收發板上測試, 結果距離有比較遠, 從 30~40 公分變成 5~6 公尺, 這 ..... 對我而言簡直沒有任何實用性, 說好的 40 公尺呢? 失望.我認為不要把時間浪費在這種無用的模組上.
2015-10-25 補充 :
今天在柯博文寫的 "Arduino 互動設計專題與實戰" 的 13.7 節找到此 433MHz RF 收發器的介紹, 提到發射距離 20~200 公尺 ("不同電壓不同距離"), 原來此種模組可工作於 3.5V~12V 電壓, 所以 200 公尺或許是在 12V 下於空曠地方才有這樣的傳送距離. 難怪這種便宜的模組常用在玩具車, 遙控飛機, 鐵捲門, 防盜器, 汽機車遙控車門啟閉等應用裡, 且常用 12V 的乾電池 (小圓筒形或方形).
我將其範例改編為如下測試 2 :
測試 2 : 傳送板持續送出 'Hello' 給接收板
傳送板程式 :
#include <VirtualWire.h>
int TXpin=8; //傳送板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(TXpin);
}
void loop() {
const char *msg="Hello";
digitalWrite(13, HIGH);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
digitalWrite(13, LOW);
delay(200);
}
接收板程式 :
#include <VirtualWire.h> 4 6
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
int RXpin=8; //接收板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(RXpin);
vw_rx_start();
Serial.println("Receiving...");
}
void loop() {
if (vw_get_message(buf, &buflen)) {
int i;
digitalWrite(13, HIGH);
Serial.println("Got: ");
for (int i=0; i<buflen; i++) {
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("");
digitalWrite(13, LOW);
}
}
傳送板的 Arduino 內建 LED 13 閃爍表示它不斷送出 "Hello" 字串, 而接收板若有收到資料的話, Arduino 的板上 LED 13 也會不斷閃爍, 若超出收訊範圍即停止閃爍.
接收板序列埠監控視窗輸出 :
Receiving...
Got:
48 65 6C 6C 6F
Got:
48 65 6C 6C 6F
Got:
48 65 6C 6C 6F
Got:
48 65 6C 6C 6F
.......
收到的這些 16 進位 bytes 值其實就是 "Hello" 的 ASCII 編碼, 參考 :
# https://zh.wikipedia.org/wiki/ASCII
# http://maniacbug.github.io/RF24/starping_8pde-example.html
# [X-LAN] Arduino RF 433M 超再生模組 發射接收一對 $45
# 露天 XLAN 電子零件購買清單
剛好上週五向市圖借的 "Arduino 自造指南 (碁峰, 曾繁勛等譯)" 書已拿到, 其中的專案 47 "建構無線遠端控制" 就是使用這種無線射頻連結模組 (SparkFun 零件編號 wrl-10534 的 RF Link 模組). 今天就趁著上班前的空檔測試看看. 以下的測試還參考了下面這本書 :
# Arduino 互動設計專題與實戰 (碁峰, 柯博文)
此模組有分收發不同板子如下所示, :
這種 RF Link 模組沒有錯誤檢查功能, 無法確認送出的資料是否正確接收. 注意, 接收板中間的兩個針腳是相同的 Data 腳, 接哪一個都可以. 另外, 兩塊板子上都有一個 ANT 天線孔, 可以用單心線繞原子筆捲成一個 2cm 的彈簧天線, 一端焊在 ANT 孔上才能讓傳送距離增加, 參考商品說明 :
"使用前,發射與接收端都要接上天線,以達到最佳接收效果; 天線可以用單心線捲成螺旋狀,長度約2公分即可。"
沒有天線的話傳遞距離大約只有 40~50 公分而已, 加上天線空曠處可達 40 公尺 (書上說可達 100 公尺), 參考其規格 :
工作電壓(V):DC 5V
傳輸速率:<10KB/S (一般 4KB/S)
發射功率:25mW
工作電流:4mA
調製方式:調幅
工作溫度: -10 ℃ ~ 70 ℃
接收靈敏度(dBm):-105DB
工作頻率(MHz):433.92MHz
實測距離可以達40公尺(視實際環境有無干擾而定)
使用此模組傳遞資料須使用 VirtualWire 函式庫, 可從下列網址下載最新的 1.27 版, 將 ZIP 檔解壓縮後放在 Arduino 安裝目錄的 libraries 子附錄下即可 :
# http://www.airspayce.com/mikem/arduino/VirtualWire/VirtualWire-1.27.zip
VirtualWire 函式庫各函式用法說明可參考 :
# https://www.pjrc.com/teensy/td_libs_VirtualWire.html
在 "Arduino 自造指南" 專案 47 中, 傳送板與接收板的 Data 腳都接到 Arduino 的 D8 腳, 傳送板 Arduino 的 D2, D3 各接上一個按鈕開關與上拉電阻; 接收板 Arduino 的 D6, D7 各接一組 LED 與 560 歐姆電阻串聯電路以顯示收到的按鈕狀態訊號. 專案 47 的範例程式如下 :
傳送端程式 :
#include <VirtualWire.h>
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
const char *on2="a";
const char *off2="b";
const char *on3="c";
const char *off3="d";
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(300);
vw_set_tx_pin(8);
pinMode(2, INPUT);
pinMode(3, INPUT);
}
void loop() {
if (digitalRead(2)==HIGH) {
vw_send((uint8_t *)on2, strlen(on2));
vw_wait_tx();
Serial.println("a");
delay(200);
}
if (digitalRead(2)==LOW) {
vw_send((uint8_t *)off2, strlen(off2));
vw_wait_tx();
Serial.println("b");
delay(200);
}
if (digitalRead(3)==HIGH) {
vw_send((uint8_t *)on3, strlen(on3));
vw_wait_tx();
Serial.println("c");
delay(200);
}
if (digitalRead(3)==LOW) {
vw_send((uint8_t *)off3, strlen(off3));
vw_wait_tx();
Serial.println("d");
delay(200);
}
}
接收端程式 :
#include <VirtualWire.h> 4 6
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
const char *on2="a";
const char *off2="b";
const char *on3="c";
const char *off3="d";
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(300);
vw_set_rx_pin(8);
vw_rx_start();
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
if (vw_get_message(buf, &buflen)) {
switch(buf[0]) {
case 'a':
digitalWrite(6, HIGH);
Serial.println("a");
break;
case 'b':
digitalWrite(6, LOW);
Serial.println("b");
break;
case 'c':
digitalWrite(7, HIGH);
Serial.println("c");
break;
case 'd':
digitalWrite(7, LOW);
Serial.println("d");
break;
}
}
}
但是我沒有使用上面這組程式來進行測試, 因為我覺得它的範例比較複雜, Arduino 的 DIO 腳本身就有內建上拉電阻了, 不需要外加. 我的測試方法很簡單, 就是在接收端用兩個全域變數紀錄 LED 現在的狀態, 當接收到傳送的送來的信號時就將狀態反轉, 這樣方便一個人做距離測試時檢查狀態是否有改變 (增加測試距離時記住原先狀態, 按下按鈕後再跑過去檢查). 我將其改編為如下的測試 1 :
傳送板程式 :
#include <VirtualWire.h>
const char *sendA="A"; //按鈕 A 要傳送的資訊
const char *sendB="B"; //按鈕 B 要傳送的資訊
int buttonA=2;
int buttonB=3;
int TXpin=8; //傳送板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true); //設定RF Link 模組 "push to talk" 極性
vw_setup(300); //設定速率 300bps
vw_set_tx_pin(TXpin); //設定 Data 傳送腳 (D8)
pinMode(buttonA, INPUT_PULLUP); //開啟上拉電阻
pinMode(buttonB, INPUT_PULLUP); //開啟上拉電阻
}
void loop() {
if (digitalRead(buttonA)==LOW) { //若按鈕 B 被按下
vw_send((uint8_t *) sendA, strlen(sendA)); //傳送字元 'A' 給接收板
vw_wait_tx();
Serial.println("Send 'A'");
delay(200);
}
if (digitalRead(buttonB)==LOW) { //傳送字元 'B' 給接收板
vw_send((uint8_t *) sendB, strlen(sendB));
vw_wait_tx();
Serial.println("Send 'B'");
delay(200);
}
}
接收板程式 :
#include <VirtualWire.h> 4 6
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
boolean LEDA_ON=false; //LED 預設熄滅
boolean LEDB_ON=false; //LED 預設熄滅
int LEDA=6;
int LEDB=7;
int RXpin=8; //接收板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true); //設定RF Link 模組 "push to talk" 極性
vw_setup(300); //設定速率 300bps (須與傳送端一致)
vw_set_rx_pin(RXpin); //設定接收板接 Arduino 哪一隻腳
vw_rx_start(); //RF Link 模組開始接收資料
pinMode(LEDA, OUTPUT);
pinMode(LEDB, OUTPUT);
Serial.println("Receiving...");
}
void loop() {
if (vw_get_message(buf, &buflen)) {
if (buf[0]=='A') {
Serial.println("Receive 'A'");
LEDA_ON = !LEDA_ON;
if (LEDA_ON) {digitalWrite(LEDA, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LEDA, LOW);} //狀態為 OFF 就點亮 LED
}
if (buf[0]=='B') {
Serial.println("Receive 'B'");
LEDB_ON = !LEDB_ON;
if (LEDB_ON) {digitalWrite(LEDB, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LEDB, LOW);} //狀態為 OFF 就點亮 LED
}
}
}
可見按鈕按下時, 對應的遠端 LED 就會交替明滅 (雖然這個遠端只有 50 公分不到).
傳送端序列埠監控視窗輸出訊息如下 :
Send 'A'
Send 'B'
Send 'A'
Send 'B'
Send 'B'
Send 'B'
Send 'A'
Send 'A'
Receiving...
Receive 'A'
Receive 'B'
Receive 'A'
Receive 'B'
Receive 'B'
Receive 'B'
Receive 'A'
Receive 'A'
今天用原子筆捲了兩個彈簧天線焊在收發板上測試, 結果距離有比較遠, 從 30~40 公分變成 5~6 公尺, 這 ..... 對我而言簡直沒有任何實用性, 說好的 40 公尺呢? 失望.
2015-10-25 補充 :
今天在柯博文寫的 "Arduino 互動設計專題與實戰" 的 13.7 節找到此 433MHz RF 收發器的介紹, 提到發射距離 20~200 公尺 ("不同電壓不同距離"), 原來此種模組可工作於 3.5V~12V 電壓, 所以 200 公尺或許是在 12V 下於空曠地方才有這樣的傳送距離. 難怪這種便宜的模組常用在玩具車, 遙控飛機, 鐵捲門, 防盜器, 汽機車遙控車門啟閉等應用裡, 且常用 12V 的乾電池 (小圓筒形或方形).
我將其範例改編為如下測試 2 :
測試 2 : 傳送板持續送出 'Hello' 給接收板
傳送板程式 :
#include <VirtualWire.h>
int TXpin=8; //傳送板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(TXpin);
}
void loop() {
const char *msg="Hello";
digitalWrite(13, HIGH);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
digitalWrite(13, LOW);
delay(200);
}
接收板程式 :
#include <VirtualWire.h> 4 6
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen=VW_MAX_MESSAGE_LEN;
int RXpin=8; //接收板 Data 腳接 Arduino D8 腳
void setup() {
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(RXpin);
vw_rx_start();
Serial.println("Receiving...");
}
void loop() {
if (vw_get_message(buf, &buflen)) {
int i;
digitalWrite(13, HIGH);
Serial.println("Got: ");
for (int i=0; i<buflen; i++) {
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("");
digitalWrite(13, LOW);
}
}
傳送板的 Arduino 內建 LED 13 閃爍表示它不斷送出 "Hello" 字串, 而接收板若有收到資料的話, Arduino 的板上 LED 13 也會不斷閃爍, 若超出收訊範圍即停止閃爍.
接收板序列埠監控視窗輸出 :
Receiving...
Got:
48 65 6C 6C 6F
Got:
48 65 6C 6C 6F
Got:
48 65 6C 6C 6F
Got:
48 65 6C 6C 6F
.......
收到的這些 16 進位 bytes 值其實就是 "Hello" 的 ASCII 編碼, 參考 :
# https://zh.wikipedia.org/wiki/ASCII
# http://maniacbug.github.io/RF24/starping_8pde-example.html
2017年10月22日 星期日
樹莓派安裝中文輸入法 (酷音輸入法)
鄉下那台 XP 老電腦上個月被我換成樹莓派 Pi 3, 因為已經開不了機了. Pi 3 效能大概跟我那台 XP 差不多, 雖然語系指定為英語, 但瀏覽中文網頁沒有問題, 也可以寫 blogger, 唯一的問題是如何輸入中文?
我找到下面這篇文章, 原來只要一個指令就可以安裝酷音中文輸入法了 :
# 樹莓派Raspberry Pi安裝中文輸入法與字型
$ sudo apt-get install scim-chewing
酷音輸入法類似 Windows 上的注音輸入法, 但配詞比較聰明, 參考 :
# 新酷音輸入法
安裝完後樹莓派須重新啟動才能使用此中文輸入法. 在樹莓派中切換中英文是按 Ctrl+SPACE; 若安裝了多個輸入輸入法, 按 Ctrl+Shift 可切換不同之輸入法.
安裝過程如下 :
pi@raspberrypi:~ $ sudo apt-get install scim-chewing
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
dialog im-config libchewing3 libchewing3-data libscim8c2a scim
scim-gtk-immodule scim-im-agent scim-modules-socket
Suggested packages:
scim-uim scim-pinyin scim-hangul scim-m17n scim-prime scim-anthy scim-skk
scim-canna scim-tables-additional scim-tables-ja scim-tables-ko
scim-tables-zh scim-thai
Recommended packages:
ttf-arphic-uming
The following NEW packages will be installed:
dialog im-config libchewing3 libchewing3-data libscim8c2a scim scim-chewing
scim-gtk-immodule scim-im-agent scim-modules-socket
0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,573 kB of archives.
After this operation, 8,346 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libchewing3-data all 0.4.0-2 [1,399 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libchewing3 armhf 0.4.0-2 [67.8 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main libscim8c2a armhf 1.4.15-3 [226 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian/ jessie/main dialog armhf 1.2-20140911-1 [233 kB]
Get:5 http://mirrordirector.raspbian.org/raspbian/ jessie/main im-config all 0.27-2 [53.7 kB]
Get:6 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim armhf 1.4.15-3 [372 kB]
Get:7 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-modules-socket armhf 1.4.15-3 [54.0 kB]
Get:8 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-im-agent armhf 1.4.15-3 [60.9 kB]
Get:9 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-gtk-immodule armhf 1.4.15-3 [44.3 kB]
Get:10 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-chewing armhf 0.3.4-4.1 [62.5 kB]
Fetched 2,573 kB in 10s (242 kB/s)
Selecting previously unselected package libchewing3-data.
(Reading database ... 122949 files and directories currently installed.)
Preparing to unpack .../libchewing3-data_0.4.0-2_all.deb ...
Unpacking libchewing3-data (0.4.0-2) ...
Selecting previously unselected package libchewing3:armhf.
Preparing to unpack .../libchewing3_0.4.0-2_armhf.deb ...
Unpacking libchewing3:armhf (0.4.0-2) ...
Selecting previously unselected package libscim8c2a:armhf.
Preparing to unpack .../libscim8c2a_1.4.15-3_armhf.deb ...
Unpacking libscim8c2a:armhf (1.4.15-3) ...
Selecting previously unselected package dialog.
Preparing to unpack .../dialog_1.2-20140911-1_armhf.deb ...
Unpacking dialog (1.2-20140911-1) ...
Selecting previously unselected package im-config.
Preparing to unpack .../im-config_0.27-2_all.deb ...
Unpacking im-config (0.27-2) ...
Selecting previously unselected package scim.
Preparing to unpack .../scim_1.4.15-3_armhf.deb ...
Unpacking scim (1.4.15-3) ...
Selecting previously unselected package scim-chewing:armhf.
Preparing to unpack .../scim-chewing_0.3.4-4.1_armhf.deb ...
Unpacking scim-chewing:armhf (0.3.4-4.1) ...
Selecting previously unselected package scim-modules-socket:armhf.
Preparing to unpack .../scim-modules-socket_1.4.15-3_armhf.deb ...
Unpacking scim-modules-socket:armhf (1.4.15-3) ...
Selecting previously unselected package scim-im-agent.
Preparing to unpack .../scim-im-agent_1.4.15-3_armhf.deb ...
Unpacking scim-im-agent (1.4.15-3) ...
Selecting previously unselected package scim-gtk-immodule:armhf.
Preparing to unpack .../scim-gtk-immodule_1.4.15-3_armhf.deb ...
Unpacking scim-gtk-immodule:armhf (1.4.15-3) ...
Processing triggers for man-db (2.7.0.2-5) ...
Processing triggers for gnome-menus (3.13.3-6) ...
Processing triggers for desktop-file-utils (0.22-1) ...
Processing triggers for mime-support (3.58) ...
Processing triggers for libgtk2.0-0:armhf (2.24.25-3+deb8u1) ...
Processing triggers for libgtk-3-0:armhf (3.14.5-1+deb8u1rpi1rpi1g) ...
Setting up libchewing3-data (0.4.0-2) ...
Setting up libchewing3:armhf (0.4.0-2) ...
Setting up libscim8c2a:armhf (1.4.15-3) ...
Setting up dialog (1.2-20140911-1) ...
Setting up im-config (0.27-2) ...
Setting up scim (1.4.15-3) ...
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/ja_JP (xinput-ja_JP) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/ko_KR (xinput-ko_KR) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_CN (xinput-zh_CN) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_TW (xinput-zh_TW) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_HK (xinput-zh_HK) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_SG (xinput-zh_SG) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/ja_JP (xinput-ja_JP) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/ko_KR (xinput-ko_KR) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_CN (xinput-zh_CN) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_TW (xinput-zh_TW) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_HK (xinput-zh_HK) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_SG (xinput-zh_SG) in auto mode
Setting up scim-chewing:armhf (0.3.4-4.1) ...
Setting up scim-modules-socket:armhf (1.4.15-3) ...
Setting up scim-im-agent (1.4.15-3) ...
Setting up scim-gtk-immodule:armhf (1.4.15-3) ...
Processing triggers for libc-bin (2.19-18+deb8u7) ...
pi@raspberrypi:~ $
但是使用時發現有時候會卡住, 按注音都沒反應, 要切回英文模式才可輸入, 不知啥原因.
參考 :
# Raspberry Pi 筆記(三十八):系統語系與中文輸入法
# 樹莓派 Raspberry Pi 安裝中文輸入法與字型
我找到下面這篇文章, 原來只要一個指令就可以安裝酷音中文輸入法了 :
# 樹莓派Raspberry Pi安裝中文輸入法與字型
$ sudo apt-get install scim-chewing
酷音輸入法類似 Windows 上的注音輸入法, 但配詞比較聰明, 參考 :
# 新酷音輸入法
安裝完後樹莓派須重新啟動才能使用此中文輸入法. 在樹莓派中切換中英文是按 Ctrl+SPACE; 若安裝了多個輸入輸入法, 按 Ctrl+Shift 可切換不同之輸入法.
安裝過程如下 :
pi@raspberrypi:~ $ sudo apt-get install scim-chewing
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
dialog im-config libchewing3 libchewing3-data libscim8c2a scim
scim-gtk-immodule scim-im-agent scim-modules-socket
Suggested packages:
scim-uim scim-pinyin scim-hangul scim-m17n scim-prime scim-anthy scim-skk
scim-canna scim-tables-additional scim-tables-ja scim-tables-ko
scim-tables-zh scim-thai
Recommended packages:
ttf-arphic-uming
The following NEW packages will be installed:
dialog im-config libchewing3 libchewing3-data libscim8c2a scim scim-chewing
scim-gtk-immodule scim-im-agent scim-modules-socket
0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,573 kB of archives.
After this operation, 8,346 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libchewing3-data all 0.4.0-2 [1,399 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libchewing3 armhf 0.4.0-2 [67.8 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main libscim8c2a armhf 1.4.15-3 [226 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian/ jessie/main dialog armhf 1.2-20140911-1 [233 kB]
Get:5 http://mirrordirector.raspbian.org/raspbian/ jessie/main im-config all 0.27-2 [53.7 kB]
Get:6 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim armhf 1.4.15-3 [372 kB]
Get:7 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-modules-socket armhf 1.4.15-3 [54.0 kB]
Get:8 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-im-agent armhf 1.4.15-3 [60.9 kB]
Get:9 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-gtk-immodule armhf 1.4.15-3 [44.3 kB]
Get:10 http://mirrordirector.raspbian.org/raspbian/ jessie/main scim-chewing armhf 0.3.4-4.1 [62.5 kB]
Fetched 2,573 kB in 10s (242 kB/s)
Selecting previously unselected package libchewing3-data.
(Reading database ... 122949 files and directories currently installed.)
Preparing to unpack .../libchewing3-data_0.4.0-2_all.deb ...
Unpacking libchewing3-data (0.4.0-2) ...
Selecting previously unselected package libchewing3:armhf.
Preparing to unpack .../libchewing3_0.4.0-2_armhf.deb ...
Unpacking libchewing3:armhf (0.4.0-2) ...
Selecting previously unselected package libscim8c2a:armhf.
Preparing to unpack .../libscim8c2a_1.4.15-3_armhf.deb ...
Unpacking libscim8c2a:armhf (1.4.15-3) ...
Selecting previously unselected package dialog.
Preparing to unpack .../dialog_1.2-20140911-1_armhf.deb ...
Unpacking dialog (1.2-20140911-1) ...
Selecting previously unselected package im-config.
Preparing to unpack .../im-config_0.27-2_all.deb ...
Unpacking im-config (0.27-2) ...
Selecting previously unselected package scim.
Preparing to unpack .../scim_1.4.15-3_armhf.deb ...
Unpacking scim (1.4.15-3) ...
Selecting previously unselected package scim-chewing:armhf.
Preparing to unpack .../scim-chewing_0.3.4-4.1_armhf.deb ...
Unpacking scim-chewing:armhf (0.3.4-4.1) ...
Selecting previously unselected package scim-modules-socket:armhf.
Preparing to unpack .../scim-modules-socket_1.4.15-3_armhf.deb ...
Unpacking scim-modules-socket:armhf (1.4.15-3) ...
Selecting previously unselected package scim-im-agent.
Preparing to unpack .../scim-im-agent_1.4.15-3_armhf.deb ...
Unpacking scim-im-agent (1.4.15-3) ...
Selecting previously unselected package scim-gtk-immodule:armhf.
Preparing to unpack .../scim-gtk-immodule_1.4.15-3_armhf.deb ...
Unpacking scim-gtk-immodule:armhf (1.4.15-3) ...
Processing triggers for man-db (2.7.0.2-5) ...
Processing triggers for gnome-menus (3.13.3-6) ...
Processing triggers for desktop-file-utils (0.22-1) ...
Processing triggers for mime-support (3.58) ...
Processing triggers for libgtk2.0-0:armhf (2.24.25-3+deb8u1) ...
Processing triggers for libgtk-3-0:armhf (3.14.5-1+deb8u1rpi1rpi1g) ...
Setting up libchewing3-data (0.4.0-2) ...
Setting up libchewing3:armhf (0.4.0-2) ...
Setting up libscim8c2a:armhf (1.4.15-3) ...
Setting up dialog (1.2-20140911-1) ...
Setting up im-config (0.27-2) ...
Setting up scim (1.4.15-3) ...
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/ja_JP (xinput-ja_JP) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/ko_KR (xinput-ko_KR) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_CN (xinput-zh_CN) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_TW (xinput-zh_TW) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_HK (xinput-zh_HK) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim to provide /etc/X11/xinit/xinput.d/zh_SG (xinput-zh_SG) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/ja_JP (xinput-ja_JP) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/ko_KR (xinput-ko_KR) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_CN (xinput-zh_CN) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_TW (xinput-zh_TW) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_HK (xinput-zh_HK) in auto mode
update-alternatives: using /etc/X11/xinit/xinput.d/scim-immodule to provide /etc/X11/xinit/xinput.d/zh_SG (xinput-zh_SG) in auto mode
Setting up scim-chewing:armhf (0.3.4-4.1) ...
Setting up scim-modules-socket:armhf (1.4.15-3) ...
Setting up scim-im-agent (1.4.15-3) ...
Setting up scim-gtk-immodule:armhf (1.4.15-3) ...
Processing triggers for libc-bin (2.19-18+deb8u7) ...
pi@raspberrypi:~ $
但是使用時發現有時候會卡住, 按注音都沒反應, 要切回英文模式才可輸入, 不知啥原因.
參考 :
# Raspberry Pi 筆記(三十八):系統語系與中文輸入法
# 樹莓派 Raspberry Pi 安裝中文輸入法與字型
2021-05-22 補充 :
這兩天因為幫湘雲老師以樹莓派架站, 又遇到中文輸入問題, 趁此機會徹底搞定新酷音輸入法設定問題, 此輸入法預設以 Ctrl+Space 啟動, 然後透過全域設定將左 Shift 鍵設為切換鍵即可將使用方法設成跟 Windows 的新注音輸入法完全一樣, 參考下面這篇文章的第 4 項 :
2017 年第 42 周記事 : 買新機車
上週二水某的機車在自由市場拋錨, 我過去檢查發現雖然可以發動, 但一加油門就熄火, 牽去附近孟子路機車行, 老闆只看了一下就說引擎應該 GG 了, 修划不來, 建議說換新車, 光陽 GP-125 汰舊換新 49000, 會退貨物稅等 4300 元. 回去考慮了幾天, 是要把鄉下的山葉迅光騎來高雄, 還是換新車呢? 去問了袁老闆, 說 CUE 100 是 44600 元, GP-125 是 47600, 外加稅款大約 1000 元, 送竊盜險. 週三晚上還到力行路一家機車行詢價, 跟孟子路一樣 GP-125 是 49000. 最後 10/19 週四還是跟袁老闆買了 GP-125, 總價 47600+1000 (稅費)=48600, 扣掉退稅 4300 實際上支出 45300 元. 六月底買 CUE 100 花了 46000, 扣掉退稅 4300+1500=5800 實際支出 40200, 十月又買 GP-125, 今年買兩台機車共花了 45300+40200=85500 元.
姊姊週五晚上坐自強號回到高雄, 周六跟我們一起去她們國中母校禮堂吃歐式自助餐, 因為岳母是同鄉會顧問, 但週四已回鄉下無法趕回來, 所以就叫我們代替她去出席同鄉會的午宴, 菜色還蠻可口的, 但似乎還有人在吃, 就有人說要打包的可以包回去, 結果一堆人就在還有人用餐情況下開始打包, 我覺得實在無禮, 現在鄉下有些喜宴有時也會遇到這種人, 最後幾道菜大概都吃不下了, 有人就會客氣地問 : 請問大家還吃得下嗎? 要不然我想打包這道, 免得浪費. 這麼問誰會回答還要吃呢? 雖然臉上三條線, 但大都還是說您請包吧這種不得不說的違心話 (還幫忙包哩).
菜園的棗樹已結出小小深綠色的果實, 大一點可能要包才有得吃 :
小舅的橙蜜番茄也茁壯開出小花了 :
不過灌溉是個問題, 唉! 我的菜園灌溉系統要何時才能完成呢?
下午爸在馬路邊的小菜園拔草時遇見鄰居阿磬姊, 她自從三年前搬去她阿娜答那邊住之後就很少回來三合院了, 從她口中得知她大哥道彩哥兩個月前已因肝癌仙遊了, 難怪最近兩個月周日傍晚去慢跑經過他屋後發現菜園雜草長得比人高, 還以為年紀大了就懶得種菜了哩! 阿磬姊說沒在鄉下處理而是送回台北的家, 所以大家都不知道. 以前他每天都騎著機車到處跑, 特別是菁菁還在鄉下給媽帶時, 他常去台糖甘蔗園抓老鼠, 蔗園的老鼠肉質肥美, 菁菁都叫他 "抓老鼠阿伯". 沒想到一段時間沒碰到, 道彩哥已經去做仙了, 人生啊, 每一個人都有這一天, 但這個令我驚訝的消息警醒的是, 我是否日復一日地還在揮霍著時光呢?
姊姊週五晚上坐自強號回到高雄, 周六跟我們一起去她們國中母校禮堂吃歐式自助餐, 因為岳母是同鄉會顧問, 但週四已回鄉下無法趕回來, 所以就叫我們代替她去出席同鄉會的午宴, 菜色還蠻可口的, 但似乎還有人在吃, 就有人說要打包的可以包回去, 結果一堆人就在還有人用餐情況下開始打包, 我覺得實在無禮, 現在鄉下有些喜宴有時也會遇到這種人, 最後幾道菜大概都吃不下了, 有人就會客氣地問 : 請問大家還吃得下嗎? 要不然我想打包這道, 免得浪費. 這麼問誰會回答還要吃呢? 雖然臉上三條線, 但大都還是說您請包吧這種不得不說的違心話 (還幫忙包哩).
菜園的棗樹已結出小小深綠色的果實, 大一點可能要包才有得吃 :
小舅的橙蜜番茄也茁壯開出小花了 :
不過灌溉是個問題, 唉! 我的菜園灌溉系統要何時才能完成呢?
下午爸在馬路邊的小菜園拔草時遇見鄰居阿磬姊, 她自從三年前搬去她阿娜答那邊住之後就很少回來三合院了, 從她口中得知她大哥道彩哥兩個月前已因肝癌仙遊了, 難怪最近兩個月周日傍晚去慢跑經過他屋後發現菜園雜草長得比人高, 還以為年紀大了就懶得種菜了哩! 阿磬姊說沒在鄉下處理而是送回台北的家, 所以大家都不知道. 以前他每天都騎著機車到處跑, 特別是菁菁還在鄉下給媽帶時, 他常去台糖甘蔗園抓老鼠, 蔗園的老鼠肉質肥美, 菁菁都叫他 "抓老鼠阿伯". 沒想到一段時間沒碰到, 道彩哥已經去做仙了, 人生啊, 每一個人都有這一天, 但這個令我驚訝的消息警醒的是, 我是否日復一日地還在揮霍著時光呢?
電腦 LCD 螢幕市調
鄉下舊 XP 電腦前陣子因無法開機被我改換成 Pi 3 後, 原本的 Samsung 液晶螢幕 (2006 年購) 剛好作 Pi 3 的顯示幕 (須 HDMI 轉 VGA). 但最近發現它會突然變黑屏, 過幾秒才恢復, 直覺是螢幕太舊, 可能快掛了. 考慮把 Win10 用的 那台 ViewSonic (2005 年購) 給 Pi 3 用, 買過新的給 Win 10. 經調查發現宏碁這台 KA200HQ 最便宜, 自取只要 1899 元 :
# [數位3C]不閃頻/濾藍光護眼機種!ACER KA200HQ LED KA200HQ $1899
自取在鹽埕區麥當勞 : 高雄市鹽埕區大勇路120號
上週有在找二手良品, 但價格在 900~1500 之間, 大都是使用快 10 年的中古螢幕, 例如仁武澄合街這家二手店 :
# 天天開心 特價 優惠 二手 中古 華碩 acer 奇美 優派 19吋 液晶 螢幕 顯示器 16:10 寬螢幕 $900
如果是 600 元以下我就會考慮, 900 元我覺得不如用 1900 買新的.
目前只是紀錄一下市調資料, 還在考慮要不要買. 畢竟 Pi 3 可以用 headless access 從 Win 10 遠端連線, 不需要直接開螢幕, 我想能用則用, 務必榨乾剩餘價值才行. 不過從這兩台舊螢幕的購買年份來看, 以前三隻小鳥品質確實嚇嚇叫, 12 年了還在服役中, 而三星的晚三年買已經開始兩光了.
# [數位3C]不閃頻/濾藍光護眼機種!ACER KA200HQ LED KA200HQ $1899
自取在鹽埕區麥當勞 : 高雄市鹽埕區大勇路120號
上週有在找二手良品, 但價格在 900~1500 之間, 大都是使用快 10 年的中古螢幕, 例如仁武澄合街這家二手店 :
# 天天開心 特價 優惠 二手 中古 華碩 acer 奇美 優派 19吋 液晶 螢幕 顯示器 16:10 寬螢幕 $900
如果是 600 元以下我就會考慮, 900 元我覺得不如用 1900 買新的.
目前只是紀錄一下市調資料, 還在考慮要不要買. 畢竟 Pi 3 可以用 headless access 從 Win 10 遠端連線, 不需要直接開螢幕, 我想能用則用, 務必榨乾剩餘價值才行. 不過從這兩台舊螢幕的購買年份來看, 以前三隻小鳥品質確實嚇嚇叫, 12 年了還在服役中, 而三星的晚三年買已經開始兩光了.
2017年10月18日 星期三
Arduino 聲音感測模組測試
以前在露天買過一個麥克風模組, 也是放在零件箱中不見天日.
# ►267◄聲音感測器 聲音檢測模組 咪頭模組 聲控口哨開關 聲音模組 Arduino
# 向 allen_6833 採購電子零件模組一批
上週從母校高應大圖書館借到下面這本 Arduino 的書, 裡面12-1 節介紹麥克風模組, 可以用來偵測環境音量遂行控制, 例如聲控燈或聲控開關等.
# 跨入Maker物聯網時代 : 誰都可以用Arduino / 楊佩璐, 任昱衡編著
以下測試還參考了下面幾本書 :
# 超圖解 Arduino 互動設計入門 2, 趙英傑 (旗標)
# 輕鬆入門-Arduino 範例分析與實作設計, 葉難 (博碩)
麥克風模組 (或稱聲音感測模組, 麥克風放大器模組) 有兩種, 我買的這組是常見的三針腳式的模組, 只有 VCC, GND, 以及 DO (Digital Ooutput) 三隻腳, 運作電壓 3V~5V, 因此 Arduino 與 ESP8266 均可使用, 一般價位 17~40 元之間 :
# T電子 現貨 Arduino模組 Arduino UNO R3 聲音模組 口哨模組 電子積木 聲音感測器 $30
# Arduino 麥克風 放大器 聲音傳感器 模組 聲控 開關 數位輸出 01高低電平(附範例) $35
這種模組板上有一顆可變電阻來設定聲音感測的靈敏度, 當電容式麥克風感測到的聲音所產生的電壓高於靈敏度電阻所設之門檻電壓時, 板上的運算放大器 LM358 會驅動 OUT 針腳輸出 LOW 位準, 否則輸出 HIGH 位準. 缺點很明顯, 就是無法透過程式去控制門檻電壓, 所以不要買這種三腳貓的模組.
另外一種是四支接腳的, 它多了一個 AO 輸出 (Ananlog Output), 透過 Arduino 的類比輸入腳讀取經 A/D 轉換後, 呼叫 AnalogRead() 的會傳回值域 0~1023, 使用這樣的模組才能根據環境與應用來調整採取動作的門檻值 :
# 麥克風放大器模組 聲音模組MIC模組麥克風模組語音模組 $40
# KY-037 高感度麥克風/聲音感測器模組 for Arduino / 附 範例 $40
# 廠家熱賣 麥克風放大器模組 聲音模組MIC模組麥克風模組語音模組 $40
也可以自己兜模組, 需要一個電容式麥克風, 一個 LM358 運算放大器, 電阻 1K (棕黑紅), 2.2K (紅紅紅), 68K (藍灰橙), 100K (棕黑黃) 各一個, 0.1uF (104) 電容一個, 參考趙英傑寫的 "超圖解 Arduino 互動設計入門 2" 這本書的 6-3 節, 電路圖如下 :
這裡主要的元件是 LM358 運算放大器與電容式麥克風, 可在露天購得 :
# 帶引腳 咪頭 6*5mm 電容式 駐極體話筒 拾音器 麥克風靈敏度52D $6
# 直插 LM358P 晶片 運算放大器 雙路 DIP-8 $3
LM358 內含兩組運算放大器, 這裡只用到其中一組而已. 上圖中麥克風的輸出會經過一個高通濾波器穿送至運算放大器的 + 腳, 然後與 1K+100K 分壓電阻進行差分放大, 其中 100K 電阻可改用 100K ~ 200K 可變電阻來調整信號放大倍率. 當然, 如果買有四隻腳的模組就比較方便, 不需要自己兜啦. 不過, 若要安裝在機箱中, 麥克風須拉到機殼外拾音, 或許自己兜會比較好安排元件配置.
下面測試 1 是從接到 Arduino A0 輸入的聲音感測模組的 AO 輸出讀取音量資料, 如果超過門檻值就點亮內建 LED, 否則就熄滅 :
測試 1 : 當環境聲音超過門檻值時點亮 LED
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
Serial.println(micVal);
if (micVal > 200) { //若超過門檻值
Serial.println(micVal);
toggle = !toggle; //反轉 LED 狀態
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
delay(1000);
}
上面測試 1 只要拍手的音量超過門檻值, 板上 LED 就會切換狀態, 如果要連續拍兩次才動作的話該怎麼做呢? 下面測試 2 參考趙英傑寫的 "超圖解 Arduino 互動設計入門 2" 這本書的 6-4 節改寫 :
測試 2 : 連續拍手 2 次控制 LED 明滅
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
unsigned long current=0; //紀錄目前過門檻時戳
unsigned long last=0; //紀錄上次過門檻時戳
unsigned long diff=0; //紀錄前後兩次時間差
unsigned int count=0; //紀錄已偵測到的次數
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
if (micVal > 200) { //若超過門檻值
current=millis(); //紀錄目前時戳
++count; //增量偵測次數
Serial.print("count="); //輸出偵測次數
Serial.println(count);
if (count >= 2) { //若次數已達 2 次, 判斷間隔時間是否在 0.3~1.5 秒內
diff=current-last; //計算前後兩次時間差
if (diff > 300 && diff < 1500) { //判斷間隔時間是否在 0.3~1.5 秒內
toggle = !toggle; //反轉 LED 狀態
count=0; //計數器歸零
}
else {count=1;} //間隔太短或太長則第二次不算, 計數器還原為 1
}
last=current; //以目前時戳更新上次時戳, 以便下一次偵測時比較之用
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
}
當然也可以改為連續拍兩次手觸發, 那就需要多一個變數來儲存時戳了, 不過, 或許用有限狀態機 (FSM) 會比較容易. 如下列測試 3 所示 :
測試 3 : 連續拍手 3 次控制 LED 明滅 (使用有限狀態機)
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
unsigned long current=0; //紀錄目前過門檻時戳
unsigned long last=0; //紀錄上次過門檻時戳
unsigned long diff=0; //紀錄前後兩次時間差
typedef enum { //定義有限狀態機之狀態
S_START,
S_FIRST,
S_SECOND,
S_THIRD
} State;
State state; //建立 State 類型變數
boolean detect(); //函數 detect 原型宣告
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
state=S_START; //起始狀態
}
void loop() {
switch(state) { //判斷目前狀態
case S_START:
if (detect()) { //偵測到第1個信號:進入狀態1
state=S_FIRST;
Serial.println("count=1");
}
break;
case S_FIRST:
if (detect()) { //偵測到第2個信號:進入狀態2
state=S_SECOND;
Serial.println("count=2");
}
break;
case S_SECOND:
if (detect()) { //偵測到第3個信號:進入狀態3
state=S_THIRD;
Serial.println("count=3");
}
break;
case S_THIRD:
toggle = !toggle; //反轉 LED 狀態
state=S_START; //回到起始狀態
break;
}
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
boolean detect() { //if volume reaches threshold return true
micVal=analogRead(MIC); //讀取感測器輸出
boolean ret=false; //預設傳回值 false
if (micVal > 200) { //若超過門檻值
current=millis(); //紀錄目前時戳
diff=current-last; //計算前後兩次時間差
if (diff > 300 && diff < 1500) { //間隔時間在 0.3~1.5 秒內
ret=true; //有效信號,傳回值改為 true
last=current; //更新上次時戳為目前時戳
}
}
return ret; //傳回偵測結果
}
上面程式中使用 typedef 定義了一個 enum 的有限狀態機, 開機起始狀態是 S_START, 在 loop() 迴圈中使用 switch case 來判斷目前狀態, 然後依據全域變數 toggle 之值變更 LED 狀態. 偵測音量訊號的部分被寫成了 detect() 函數, 當音量超過門檻值, 且與上一次偵測到訊號之間隔在 0.3~1.5 秒內表示訊號有效, 就會更新上一次時戳 last 並傳回 true.
在每一個 case 中會先呼叫 detect() 函數, 若傳回 true 表示偵測到有效的信號, 就進入下一個狀態, 狀態機依序從 S_START 走到 S_FIRST, S_SECOND, S_THIRD, S_START, ... , 周而復始. 當進入第三狀態 S_THIRD 時, LED 狀態變數會被反轉, 使 LED 明滅, 同時狀態機也會回到初始的 S_START 狀態, 狀態遷移圖如下所示 :
使用有限狀態機技巧可以讓我們將一個複雜的邏輯運算分解為多個獨立的作業, 使運作邏輯的實作簡化, 有利於軟體後續的維護與擴充. 對於像 Arduino 這樣無作業系統的嵌入式設備, 有限狀態機似乎就是一個超迷你作業系統. 關於有限狀態機的用法, 可參考葉難寫的 "輕鬆入門-Arduino 範例分析與實作設計" 第 3-5 節與 6-5 節或下列文章 :
# Arduino練習:Simon Says請你跟我這樣做
# 有限状态机在单片机编程中的应用
# Arduino编程之----如何让你Arduino以状态机方式运行
在上面的範例中使用的音量偵測門檻值都是武斷的, 在實際應用中都需要根據環境噪音的強弱加以調整, 程式需重新編譯上傳非常麻煩, 實用性不高. 在楊佩璐寫的 "跨入Maker物聯網時代 : 誰都可以用Arduino" 第 12.1.3 節介紹了自動調整門檻值的方法, 我參考這個方法將上面測試 1 改寫為如下測試 4 :
測試 4 : 當環境聲音超過門檻值時點亮 LED (可偵測背景音量)
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
int background=0; //紀錄環境音量最大值
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
while (millis() < 3000) { //以3秒時間偵測環境音量
micVal=analogRead(MIC); //讀取麥克風音量
if (micVal > background) { //若大於前一次音量就更新為目前音量
background=micVal;
}
}
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
Serial.println(micVal);
if (micVal-background > 10) { //若超過背景音量 10
Serial.println(micVal);
toggle = !toggle; //反轉 LED 狀態
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
delay(1000);
}
此程式中添加了一個全域變數 background 來記錄背景音量的最大值, 然後在 setup() 中以一個 3 秒的迴圈來記錄背景雜音的最高值, 記錄在 background 中. 在 loop() 中的音量偵測就改為比 background 高出 10 視為有效之信號而使 LED 改變狀態.
不過上面測試 4 程式有個缺點, 它只在一開機或 reset 時會偵測一次背景音量, 之後若背景噪音變化就失靈了. 解決辦法就是週期性去偵測環境音量, 這就要用到計時器了, 參考之前做 NTP 測試時所用的 Time 與 TimeAlarm 這兩個函式庫 :
# 利用 NTP 伺服器來同步 Arduino 系統時鐘 (三)
可從 GitHub 下載 Time 與 TimeAlarm 函式庫 :
# https://github.com/PaulStoffregen/Time
# https://github.com/PaulStoffregen/TimeAlarms
解壓縮 zip 檔後將 Time 與 TimeAlarm 兩個子目錄複製到 Arduino IDE 安裝目錄下的 libraries 下即可.
測試 5 : 當環境聲音超過門檻值時點亮 LED (可定時偵測背景音量)
#include <Time.h>
#include <TimeAlarms.h>
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
int background=0; //紀錄環境音量
void update_background(); //函數 update_background() 原型宣告
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
update_background(); //更新環境音量最高值
Alarm.timerRepeat(60, update_background); //設定計時器每 60 秒更新環境音量最高值
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
Serial.println(micVal);
if (micVal-background > 10) { //若超過背景音量 10
Serial.println(micVal);
toggle = !toggle; //反轉 LED 狀態
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
delay(1000);
}
void update_background() { //更新背景環境音量最大值
while (millis() < 3000) { //以3秒時間偵測環境音量
micVal=analogRead(MIC); //讀取麥克風音量
if (micVal > background) { //若大於前一次音量就更新為目前音量
background=micVal;
}
}
}
上面程式在 setup() 中先呼叫 update_background() 做 background 的初始更新, 然後呼叫 Alarm.timerRepeat() 設定計時器, 每 60 秒去呼叫 update_background() 更新背景環境音量最大值.
參考 :
# Arduino : 聲控開關
# Arduino 聲控開關
# ►267◄聲音感測器 聲音檢測模組 咪頭模組 聲控口哨開關 聲音模組 Arduino
# 向 allen_6833 採購電子零件模組一批
上週從母校高應大圖書館借到下面這本 Arduino 的書, 裡面12-1 節介紹麥克風模組, 可以用來偵測環境音量遂行控制, 例如聲控燈或聲控開關等.
# 跨入Maker物聯網時代 : 誰都可以用Arduino / 楊佩璐, 任昱衡編著
以下測試還參考了下面幾本書 :
# 超圖解 Arduino 互動設計入門 2, 趙英傑 (旗標)
# 輕鬆入門-Arduino 範例分析與實作設計, 葉難 (博碩)
麥克風模組 (或稱聲音感測模組, 麥克風放大器模組) 有兩種, 我買的這組是常見的三針腳式的模組, 只有 VCC, GND, 以及 DO (Digital Ooutput) 三隻腳, 運作電壓 3V~5V, 因此 Arduino 與 ESP8266 均可使用, 一般價位 17~40 元之間 :
# T電子 現貨 Arduino模組 Arduino UNO R3 聲音模組 口哨模組 電子積木 聲音感測器 $30
# Arduino 麥克風 放大器 聲音傳感器 模組 聲控 開關 數位輸出 01高低電平(附範例) $35
這種模組板上有一顆可變電阻來設定聲音感測的靈敏度, 當電容式麥克風感測到的聲音所產生的電壓高於靈敏度電阻所設之門檻電壓時, 板上的運算放大器 LM358 會驅動 OUT 針腳輸出 LOW 位準, 否則輸出 HIGH 位準. 缺點很明顯, 就是無法透過程式去控制門檻電壓, 所以不要買這種三腳貓的模組.
另外一種是四支接腳的, 它多了一個 AO 輸出 (Ananlog Output), 透過 Arduino 的類比輸入腳讀取經 A/D 轉換後, 呼叫 AnalogRead() 的會傳回值域 0~1023, 使用這樣的模組才能根據環境與應用來調整採取動作的門檻值 :
# 麥克風放大器模組 聲音模組MIC模組麥克風模組語音模組 $40
# KY-037 高感度麥克風/聲音感測器模組 for Arduino / 附 範例 $40
# 廠家熱賣 麥克風放大器模組 聲音模組MIC模組麥克風模組語音模組 $40
也可以自己兜模組, 需要一個電容式麥克風, 一個 LM358 運算放大器, 電阻 1K (棕黑紅), 2.2K (紅紅紅), 68K (藍灰橙), 100K (棕黑黃) 各一個, 0.1uF (104) 電容一個, 參考趙英傑寫的 "超圖解 Arduino 互動設計入門 2" 這本書的 6-3 節, 電路圖如下 :
這裡主要的元件是 LM358 運算放大器與電容式麥克風, 可在露天購得 :
# 帶引腳 咪頭 6*5mm 電容式 駐極體話筒 拾音器 麥克風靈敏度52D $6
# 直插 LM358P 晶片 運算放大器 雙路 DIP-8 $3
LM358 內含兩組運算放大器, 這裡只用到其中一組而已. 上圖中麥克風的輸出會經過一個高通濾波器穿送至運算放大器的 + 腳, 然後與 1K+100K 分壓電阻進行差分放大, 其中 100K 電阻可改用 100K ~ 200K 可變電阻來調整信號放大倍率. 當然, 如果買有四隻腳的模組就比較方便, 不需要自己兜啦. 不過, 若要安裝在機箱中, 麥克風須拉到機殼外拾音, 或許自己兜會比較好安排元件配置.
下面測試 1 是從接到 Arduino A0 輸入的聲音感測模組的 AO 輸出讀取音量資料, 如果超過門檻值就點亮內建 LED, 否則就熄滅 :
測試 1 : 當環境聲音超過門檻值時點亮 LED
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
Serial.println(micVal);
if (micVal > 200) { //若超過門檻值
Serial.println(micVal);
toggle = !toggle; //反轉 LED 狀態
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
delay(1000);
}
上面測試 1 只要拍手的音量超過門檻值, 板上 LED 就會切換狀態, 如果要連續拍兩次才動作的話該怎麼做呢? 下面測試 2 參考趙英傑寫的 "超圖解 Arduino 互動設計入門 2" 這本書的 6-4 節改寫 :
測試 2 : 連續拍手 2 次控制 LED 明滅
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
unsigned long current=0; //紀錄目前過門檻時戳
unsigned long last=0; //紀錄上次過門檻時戳
unsigned long diff=0; //紀錄前後兩次時間差
unsigned int count=0; //紀錄已偵測到的次數
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
if (micVal > 200) { //若超過門檻值
current=millis(); //紀錄目前時戳
++count; //增量偵測次數
Serial.print("count="); //輸出偵測次數
Serial.println(count);
if (count >= 2) { //若次數已達 2 次, 判斷間隔時間是否在 0.3~1.5 秒內
diff=current-last; //計算前後兩次時間差
if (diff > 300 && diff < 1500) { //判斷間隔時間是否在 0.3~1.5 秒內
toggle = !toggle; //反轉 LED 狀態
count=0; //計數器歸零
}
else {count=1;} //間隔太短或太長則第二次不算, 計數器還原為 1
}
last=current; //以目前時戳更新上次時戳, 以便下一次偵測時比較之用
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
}
當然也可以改為連續拍兩次手觸發, 那就需要多一個變數來儲存時戳了, 不過, 或許用有限狀態機 (FSM) 會比較容易. 如下列測試 3 所示 :
測試 3 : 連續拍手 3 次控制 LED 明滅 (使用有限狀態機)
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
unsigned long current=0; //紀錄目前過門檻時戳
unsigned long last=0; //紀錄上次過門檻時戳
unsigned long diff=0; //紀錄前後兩次時間差
typedef enum { //定義有限狀態機之狀態
S_START,
S_FIRST,
S_SECOND,
S_THIRD
} State;
State state; //建立 State 類型變數
boolean detect(); //函數 detect 原型宣告
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
state=S_START; //起始狀態
}
void loop() {
switch(state) { //判斷目前狀態
case S_START:
if (detect()) { //偵測到第1個信號:進入狀態1
state=S_FIRST;
Serial.println("count=1");
}
break;
case S_FIRST:
if (detect()) { //偵測到第2個信號:進入狀態2
state=S_SECOND;
Serial.println("count=2");
}
break;
case S_SECOND:
if (detect()) { //偵測到第3個信號:進入狀態3
state=S_THIRD;
Serial.println("count=3");
}
break;
case S_THIRD:
toggle = !toggle; //反轉 LED 狀態
state=S_START; //回到起始狀態
break;
}
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
boolean detect() { //if volume reaches threshold return true
micVal=analogRead(MIC); //讀取感測器輸出
boolean ret=false; //預設傳回值 false
if (micVal > 200) { //若超過門檻值
current=millis(); //紀錄目前時戳
diff=current-last; //計算前後兩次時間差
if (diff > 300 && diff < 1500) { //間隔時間在 0.3~1.5 秒內
ret=true; //有效信號,傳回值改為 true
last=current; //更新上次時戳為目前時戳
}
}
return ret; //傳回偵測結果
}
上面程式中使用 typedef 定義了一個 enum 的有限狀態機, 開機起始狀態是 S_START, 在 loop() 迴圈中使用 switch case 來判斷目前狀態, 然後依據全域變數 toggle 之值變更 LED 狀態. 偵測音量訊號的部分被寫成了 detect() 函數, 當音量超過門檻值, 且與上一次偵測到訊號之間隔在 0.3~1.5 秒內表示訊號有效, 就會更新上一次時戳 last 並傳回 true.
在每一個 case 中會先呼叫 detect() 函數, 若傳回 true 表示偵測到有效的信號, 就進入下一個狀態, 狀態機依序從 S_START 走到 S_FIRST, S_SECOND, S_THIRD, S_START, ... , 周而復始. 當進入第三狀態 S_THIRD 時, LED 狀態變數會被反轉, 使 LED 明滅, 同時狀態機也會回到初始的 S_START 狀態, 狀態遷移圖如下所示 :
使用有限狀態機技巧可以讓我們將一個複雜的邏輯運算分解為多個獨立的作業, 使運作邏輯的實作簡化, 有利於軟體後續的維護與擴充. 對於像 Arduino 這樣無作業系統的嵌入式設備, 有限狀態機似乎就是一個超迷你作業系統. 關於有限狀態機的用法, 可參考葉難寫的 "輕鬆入門-Arduino 範例分析與實作設計" 第 3-5 節與 6-5 節或下列文章 :
# Arduino練習:Simon Says請你跟我這樣做
# 有限状态机在单片机编程中的应用
# Arduino编程之----如何让你Arduino以状态机方式运行
在上面的範例中使用的音量偵測門檻值都是武斷的, 在實際應用中都需要根據環境噪音的強弱加以調整, 程式需重新編譯上傳非常麻煩, 實用性不高. 在楊佩璐寫的 "跨入Maker物聯網時代 : 誰都可以用Arduino" 第 12.1.3 節介紹了自動調整門檻值的方法, 我參考這個方法將上面測試 1 改寫為如下測試 4 :
測試 4 : 當環境聲音超過門檻值時點亮 LED (可偵測背景音量)
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
int background=0; //紀錄環境音量最大值
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
while (millis() < 3000) { //以3秒時間偵測環境音量
micVal=analogRead(MIC); //讀取麥克風音量
if (micVal > background) { //若大於前一次音量就更新為目前音量
background=micVal;
}
}
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
Serial.println(micVal);
if (micVal-background > 10) { //若超過背景音量 10
Serial.println(micVal);
toggle = !toggle; //反轉 LED 狀態
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
delay(1000);
}
此程式中添加了一個全域變數 background 來記錄背景音量的最大值, 然後在 setup() 中以一個 3 秒的迴圈來記錄背景雜音的最高值, 記錄在 background 中. 在 loop() 中的音量偵測就改為比 background 高出 10 視為有效之信號而使 LED 改變狀態.
不過上面測試 4 程式有個缺點, 它只在一開機或 reset 時會偵測一次背景音量, 之後若背景噪音變化就失靈了. 解決辦法就是週期性去偵測環境音量, 這就要用到計時器了, 參考之前做 NTP 測試時所用的 Time 與 TimeAlarm 這兩個函式庫 :
# 利用 NTP 伺服器來同步 Arduino 系統時鐘 (三)
可從 GitHub 下載 Time 與 TimeAlarm 函式庫 :
# https://github.com/PaulStoffregen/Time
# https://github.com/PaulStoffregen/TimeAlarms
解壓縮 zip 檔後將 Time 與 TimeAlarm 兩個子目錄複製到 Arduino IDE 安裝目錄下的 libraries 下即可.
測試 5 : 當環境聲音超過門檻值時點亮 LED (可定時偵測背景音量)
#include <Time.h>
#include <TimeAlarms.h>
int MIC=A0; //聲音感測模組 AO 輸出接至 A0 腳
int LED=13; //Arduino 板上內建 LED
boolean toggle=false; //紀錄 LED 狀態,預設為熄滅
int micVal; //紀錄偵測到的音量
int background=0; //紀錄環境音量
void update_background(); //函數 update_background() 原型宣告
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
update_background(); //更新環境音量最高值
Alarm.timerRepeat(60, update_background); //設定計時器每 60 秒更新環境音量最高值
}
void loop() {
micVal=analogRead(MIC); //讀取感測器輸出
Serial.println(micVal);
if (micVal-background > 10) { //若超過背景音量 10
Serial.println(micVal);
toggle = !toggle; //反轉 LED 狀態
if (toggle) {digitalWrite(LED, HIGH);} //狀態為 ON 就點亮 LED
else {digitalWrite(LED, LOW);} //狀態為 OFF 就點亮 LED
}
delay(1000);
}
void update_background() { //更新背景環境音量最大值
while (millis() < 3000) { //以3秒時間偵測環境音量
micVal=analogRead(MIC); //讀取麥克風音量
if (micVal > background) { //若大於前一次音量就更新為目前音量
background=micVal;
}
}
}
參考 :
# Arduino : 聲控開關
# Arduino 聲控開關
2017年10月17日 星期二
幫姊姊訂台鐵與高鐵票
姊姊說這禮拜要回來, 因為之後要練啦啦隊比較忙. 上回她訂高鐵有 85 折學生優惠, 但時段有限, 數量也有限, 我上網一查發現不管幾折都是離峰時段, 根本不合用, 合用的也太晚訂被搶購一空, 參考 :
# 高鐵訂位查詢與付費
# 高鐵大學生優惠
# 高鐵會員系統
除了時間問題外, 車錢才是真正有感的. 我查了一下北高票價, 高鐵全票 1490, 是自強號的 1.8 倍, 搭一趟高鐵幾乎是自強號兩趟了, 就算是早鳥 65 折也還是比自強號多出 141 元, 比較如下 :
當然, 自強號的時間是高鐵的兩倍, 所以不趕時間的話還是搭自強號好了. 上回聽阿英說家宏往返台中高雄都坐台鐵, 加入會員累積里程還可以換免費車票, 所以我就幫姐姐註冊了台鐵會員, 參考 :
# 台鐵會員系統
這個會員系統還有一個功能, 若買不到票, 又沒時間常上網去看看有無退票釋出的話, 可以透過會員系統自動媒合, 每天早上 06:00 後可以輸入所需班次與數量, 若有退票就會依序媒合, 媒合結果會以電子郵件通知. 不過媒合需求是以一天為單位, 若當日媒合失敗, 第二天還是要再次人工輸入需求, 並不會延續前一天的輸入. 媒合成功後, 買票還是要到台鐵訂票系統去買.
# 台鐵訂票系統
# 台鐵網路付款
# 台鐵列車時刻查詢
# 台鐵會員系統
# 台鐵網路訂便當
預定台鐵車票是乘車日前 14 天開放, 參考 :
非乘車當日訂票:
乘車前二週(十四天)開始預訂,即週一可預訂次次週一內之乘車票,但每逢週五可多預訂二天至次次週日之乘車票(即逢週五可預訂至次次週五、六、日之乘車票)。
經過這次幫姊姊訂自強號, 我整理了適合她往返北高的班次如下, 143 次與 136 次行車時間最少, 所以列入優先選項 :
回高雄 :
台北 - 新左營 175 次 : 16:00~20:46 (4:46)
台北 - 新左營 139 次 : 17:00~21:39 (4:39)
台北 - 新左營 141 次 : 17:30~22:12 (4:42)
台北 - 高雄 143 次 : 18:00~22:07 (4:07) (逢週五開)
回台北 :
高雄 - 台北 普悠瑪 136 15:30~19:06 (3:36)
新左營 - 台北 134 次 : 14:42~19:32 (4:50)
新左營 - 台北 5116 次 : 15:03~20:15 (5:12)
新左營 - 台北 138 次 : 15:49~20:31 (4:42)
新左營 - 台北 142 次 : 16:20~21:10 (4:50)
以信用卡網路付款後, 記下訂票電腦代碼於開車前 30 分鐘攜身分證至櫃台取票即可. 也可在超商用 ibon 取票, 但每張要付手續費 8 元, 參考 :
取票或網路付款截止時間:
您訂的車票已網路付款,請取票人持訂票人身份證明證件正本(僑胞及外籍人士持護照或居留証)及電腦代碼,於車站營業時間最遲於開車前至車站售票窗口或開車前30分鐘至全國各地電腦連線郵局、超商取票。(請斟酌取票時間,以免不及乘車)
# 高鐵訂位查詢與付費
# 高鐵大學生優惠
# 高鐵會員系統
除了時間問題外, 車錢才是真正有感的. 我查了一下北高票價, 高鐵全票 1490, 是自強號的 1.8 倍, 搭一趟高鐵幾乎是自強號兩趟了, 就算是早鳥 65 折也還是比自強號多出 141 元, 比較如下 :
台鐵自強號 | 高鐵 | |
高雄 - 台北 | 843 元 | |
新左營 - 台北 | 824 元 | 標準1490 元 自由座 1445 元 早鳥票 65 折 965 元 大學生 85 折 1265 元 大學生 7 折 1040 元 大學生 5 折 745 元 |
當然, 自強號的時間是高鐵的兩倍, 所以不趕時間的話還是搭自強號好了. 上回聽阿英說家宏往返台中高雄都坐台鐵, 加入會員累積里程還可以換免費車票, 所以我就幫姐姐註冊了台鐵會員, 參考 :
# 台鐵會員系統
這個會員系統還有一個功能, 若買不到票, 又沒時間常上網去看看有無退票釋出的話, 可以透過會員系統自動媒合, 每天早上 06:00 後可以輸入所需班次與數量, 若有退票就會依序媒合, 媒合結果會以電子郵件通知. 不過媒合需求是以一天為單位, 若當日媒合失敗, 第二天還是要再次人工輸入需求, 並不會延續前一天的輸入. 媒合成功後, 買票還是要到台鐵訂票系統去買.
# 台鐵訂票系統
# 台鐵網路付款
# 台鐵列車時刻查詢
# 台鐵會員系統
# 台鐵網路訂便當
預定台鐵車票是乘車日前 14 天開放, 參考 :
非乘車當日訂票:
乘車前二週(十四天)開始預訂,即週一可預訂次次週一內之乘車票,但每逢週五可多預訂二天至次次週日之乘車票(即逢週五可預訂至次次週五、六、日之乘車票)。
回高雄 :
台北 - 新左營 175 次 : 16:00~20:46 (4:46)
台北 - 新左營 139 次 : 17:00~21:39 (4:39)
台北 - 新左營 141 次 : 17:30~22:12 (4:42)
台北 - 高雄 143 次 : 18:00~22:07 (4:07) (逢週五開)
回台北 :
新左營 - 台北 134 次 : 14:42~19:32 (4:50)
新左營 - 台北 5116 次 : 15:03~20:15 (5:12)
新左營 - 台北 138 次 : 15:49~20:31 (4:42)
新左營 - 台北 142 次 : 16:20~21:10 (4:50)
以信用卡網路付款後, 記下訂票電腦代碼於開車前 30 分鐘攜身分證至櫃台取票即可. 也可在超商用 ibon 取票, 但每張要付手續費 8 元, 參考 :
取票或網路付款截止時間:
您訂的車票已網路付款,請取票人持訂票人身份證明證件正本(僑胞及外籍人士持護照或居留証)及電腦代碼,於車站營業時間最遲於開車前至車站售票窗口或開車前30分鐘至全國各地電腦連線郵局、超商取票。(請斟酌取票時間,以免不及乘車)
- 會員服務系統委託訂票媒合提供會員於網路訂票系統開放訂票後,無法訂到所需班次,又無法經常上網查詢預訂時,可藉由會員制服務系統,於夜間將剩餘可售座位(即旅客逾期未取及退票後之剩餘座位),進行媒合,於媒合成功時,以電子郵件方式通知會員媒合成功之訊息。會員服務系統委託訂票媒合,僅開放乘車前3天到前12天,共計10天的媒合服務,主要係提供與車站窗口同步開放乘車日(含當日)12天前之預購服務。
- 會員制旅客服務系統帳號即是身分證字號,依據會員制消費金額累積及點數換算規定: 會員需實際搭乘本局列車抵達目的站始可累積消費金額,消費金額於實際乘車後翌日累積;每筆消費記錄可保留兩年,為確保消費金額累積正確,辦理購票/取票手續時, 於車站售票窗口提示身分證字號聲明具會員身份、網路付款購買本局車票,或於訂妥車票後利用本局對號列車自動售票機、郵局取票或超商取票等方式完成購/取票,並已完成搭車事實後,即可累計消費金額並享點數回饋酬賓兌換。
- 會員累積點數到達可兌換車票門檻後,可使用網路訂票,再去櫃檯進行兌換車票或直接至售票櫃檯進行兌換車票,只要您的會員點數達到兌換標準,可先於網路訂票(勿網路信用卡付款)後於取票期限內持會員身分證件正本至本局各車站售票窗口取票. 取票時,請向售票員說明為會員點數兌換車票即可.會員酬賓兌換之免費車票基本點數為500點,可兌換乘車區間100公里內乘車票一張。例如旅客已累積520點,則可用500 點兌換新竹=臺北區間(78.1公里)乘車票(不限車種)1張,其中剩餘之20點可繼續參加累積點數,原剩餘可兌里程 21.9公里(可兌換100公里-已兌換78.1公里)則視同放棄。
2017 年第 41 周記事
本周二哥與菁菁第一次段考, 考完讓他們輕鬆一下, 周末向補習班請假大家回鄉下. 已經好久沒有這樣大家一起回去了. 有時候也很後悔讓菁菁週日去補習. 談到我以前反對的補習, 唉, 這個教育, 算了, 投降.
姊姊連假返家帶回新身分證, 我週四中午午休時去新光銀行與元富證券幫她開戶, 打算開啟零股平台功能, 希望每月自動扣 3000 元長期買進台灣高股息存股, 只要每年過年時存入 40000 元, 就足夠扣一整年. 對於沒時間理財或不懂理財的人, 這種定期定額的存股術應該是最穩當了, 但是要越年輕開始越好, 正如巴菲特說的, 他們有足夠長的山坡可以滾下巨大的雪球.
由於卡努颱風以及東北季風共伴效應, 週五開始一連下了三天雨, 好像是梅雨季. 現在的天氣真是越來越奇怪了. 不過, 這周只上了三天班又放假了, 真好.
2017-10-29 補充 :
感謝網友留言提示, 長期投資台灣高股息在獲利與稅費方面似乎不如台灣 50, 因此可能要重新考慮了, 參考 :
# 股價才20出頭...「台灣高股息」放到第幾年才保證賺?這張圖告訴你
# 最適合上班族的ETF》為什麼0050比0056好?基金經理人沒說的3個真相
姊姊連假返家帶回新身分證, 我週四中午午休時去新光銀行與元富證券幫她開戶, 打算開啟零股平台功能, 希望每月自動扣 3000 元長期買進台灣高股息存股, 只要每年過年時存入 40000 元, 就足夠扣一整年. 對於沒時間理財或不懂理財的人, 這種定期定額的存股術應該是最穩當了, 但是要越年輕開始越好, 正如巴菲特說的, 他們有足夠長的山坡可以滾下巨大的雪球.
由於卡努颱風以及東北季風共伴效應, 週五開始一連下了三天雨, 好像是梅雨季. 現在的天氣真是越來越奇怪了. 不過, 這周只上了三天班又放假了, 真好.
2017-10-29 補充 :
感謝網友留言提示, 長期投資台灣高股息在獲利與稅費方面似乎不如台灣 50, 因此可能要重新考慮了, 參考 :
# 股價才20出頭...「台灣高股息」放到第幾年才保證賺?這張圖告訴你
# 最適合上班族的ETF》為什麼0050比0056好?基金經理人沒說的3個真相
2017年10月16日 星期一
長距離低功耗無線通訊技術 LoRa
前陣子有網友詢問 LoRa 問題, 好像曾在哪裡看到此 RF 技術的介紹, 當時並沒有放在心上. 最近因為這個機緣, 連帶讓我想起之前買過的 nRF24L01 模組, 過去一周在採購的 LoRa 模組尚未收到之前, 我就先把玩了 nRF24L01 一番, 發現它雖然價格便宜 (一片約 30 元), 但是可能因為走較高的 2.4GHz 頻段以及使用 PCB 天線之關係, 傳輸距離太短, 僅 100 公尺不到, 而且無法穿越牆壁, 實用範圍屬於近距離通訊而已.
但 LoRa 技術就不同了, 由於先進的技術突破, 加上走 Sub-GHz 頻段, 因此傳輸距離與穿牆性能據說都令人刮目相看, 空曠地方可達 2km~5km, 在建築物內可穿透 7 層牆壁. 因此在測完 nRF24L01 後, 我想研究 LoRa, 實際測試看看是否真的那麼厲害.
目前市面上的 LoRa 模組主要是使用 SX1276 與 SX1278 這兩種晶片, 兩者性能與功能相同, 差別只是頻段不同而已. SX1276 頻段是 868MHz 與 915MHz, 主要用在歐洲與北美地區; 而 SX1278 頻段為 433MHz 與 470MHz, 主要用在中國, 東南亞, 南美洲, 以及東歐等地區, 參考 :
# SX1276 与SX1278扩频芯片的区别
在露天拍賣上販售的大都是 SX1278 的模組. 我買的是這款 433MHz 的 (附彈簧天線) :
# [史塔克實驗室][Arduino/RPi]每個180元2個一組販售SX1278 Lora module 模組433MHz $180
賣家有提供 Arduino 範例程式, 可在 dropbox 下載 :
# https://www.dropbox.com/sh/beaswh5a3h69ho6/AABNL6J0KtAe9x_hfsz1P8SAa?dl=0
事實上這在 Aliexpress 上含運才賣 US$3.72 元而已, 折合台幣 111 元 :
# 433Mhz Lora SX1278 Long Range RF Wireless Module SPI Build-in Temperature Sensor For Arduino DRF1278F $3.72
注意, 這種裸片的模組大都沒有附底板或轉接板 (甚至沒有附彈簧天線), 而且其接腳間距為 2 mm, 因此必須找 2 mm 的排母來焊接, 例如 :
# 2.0MM 單排座1*40 單排母座 排針座(10只一拍) [1-89085] $70
我覺得最好是使用 2.0mm 的排母, 因為 2.0 mm 間距的排針較細, 一般杜邦線母接頭插上去根本就鬆垮垮的無法固定; 而 2.0 mm 排母的洞卻剛剛好可以讓一般杜邦線公插頭插進去沒問題.
如果要買有底板或轉接板, 可以焊接 2.54 mm 針腳的模組, 可以考慮下面這款 :
# 【傑森創工】SX1278 帶底板 LORA 模組 安信可 RA-02 Arduino $250
這塊使用的是安信可 (AI Thinker) 的 RA-02 SX1278 模組, 採用 IPEX 天線座而非短的彈簧天線, 而且有鐵殼包覆不會有電磁干擾問題 (FC/EC 相容認證). 其實這塊在 Aliexpress 一對含運才賣 US$13.5, 折合台幣 405 元, 平均一片才 203 元 :
# Elecrow 2pcs/lot SX1278 LoRa Module 433M 10KM Ra-02 Ai-Thinker Wireless Spread Spectrum Transmission Socket for Smart Home DIY US$13.5
也有採用 nRF24L01 接腳配置 (8 Pins) 的模組, 一對含運 US$13.51, 折合台幣 405 元, 平均一片也是 203 元左右, 這款好處是免焊, 而且採用 IPEX 天線 :
# 2pcs/lot Newest SX1278 LoRa Module 433M 10KM Ra-02 Ai-Thinker Wireless Module Spread Spectrum Transmission Electronic Diy Kit US$13.51
採用彈簧天線的是這款 :
# Elecrow 2pcs/lot LoRa Module SX1278 Ai-Thinker 433M Wireless Spread Spectrum Transmission Ra-01 DIY Kit for Smart Meter Reading US$13.59
如果買不含底板且搭配彈簧天線的 RA-01 模組的話更便宜, 一對 US$8.88, 折合台幣 266 元, 平均一片 133 元 :
# 2PCS Ra-01 SX1278 LoRa Spread Spectrum Wireless Module 433MHz Wireless Serial Port UART Interface Ra01 US$8.41+0.47=US$8.88
安信可的 Ra-02 模組通常都不附 IPEX 天線, 如果要買 IPEX 天線可參考 :
# 433m內置彈簧天線 433mhz模塊天線 433數傳天線 ipex介面 1.13線 $40
# 868MHZ/900MHz/915MHz/920MHz內置彈簧天線 無線數傳天線 高增益IPEX天線 $70
# 黑色868MHZ/900MHz/915MHz/920MHz/925MHz天線,SMA內針介面 $90
以上是關於模組採購的調查, 接下來整理一下 LoRa 技術的相關資訊.
LoRa 為 Low power long Range (低功耗長距離) 的縮寫, 它是一種低功耗無線廣域網路 (LPWAN, Low Power Wide Area Network) 通訊技術, 最早源自法國長距離無線傳輸技術 IP 公司 Cycleo, 它在 2009 年提出了創新的低功耗長距離技術 LoRa, 於 2012 年被美國 Semtech 公司以 500 萬美元併購, 參考 :
# Cycleo unveils its first innovative semiconductor IP bringing unprecedented range to wireless data transmission
# Semtech Acquires Wireless Long Range IP Provider Cycleo
美商 Semtech (先科) 1960 年創立於美國加州, 是一家類比與混和信號 IC 供應商, 1967 年公開上市, 目前於 NASDAQ 掛牌 (SMTC), 市值約 25 億美元. 主力產品為電源管理晶片, 數位感測與高階通訊射頻 IC 等, 參見 :
# https://en.wikipedia.org/wiki/Semtech
# http://www.semtech.com/wireless-rf/internet-of-things/
Semtech 併購 Cycleo 後大力推廣 LoRa 技術, 結合全世界電信商, 設備商, 晶片商等組成非營利的 LoRa 聯盟, 目前會員數已超過 500 個, 包括 52 個電信運營商, 範圍橫跨全球 100 餘國, 超過 350 個城市正在測試與佈建 LoRaWan 網路, 近日 ( 2017-10-17 ~ 2017-10-25) 將於中國蘇州舉辦第九屆全球會員大會, 參考 :
# https://www.lora-alliance.org
# http://whatis.techtarget.com/definition/LoRa-Alliance
關於 LoRa 技術的特性摘要如下 :
# Long Range Wireless Data Communicatoin using LoRa (Up to 10km Line of Sight)
參考 :
# LoRa:長距離低功耗物聯網傳輸技術
# LPWAN-大家天天熱聊的LORA技術到底是什麼?
# 智能家居無線技術解決方案:LoRa超遠距離無線通信
# LPWAN:科技改變生活,淺談LoRa與物聯網技術
# 物聯網時代來臨,IBM 推 LoRa 技術讓機器也有自己的網路
# 新一代無線傳輸技術-LoRa
# 長距離無線通訊
# 5分鐘搞清楚LoRa技術是什麼
# 細說LoRa(一)——LoRa、LoRaWAN、LoRa聯盟的由來及簡介
# NB-IoT與LoRa的巔峰對決不是你想的那樣
# 想快速全面了解LoRa?看這篇就夠了!
# 由台北 IoT 平台聊 LoRA & LPWAN (1) - LoRA & LoRaWAN
# 低功耗廣域網(LPWAN)- LoRa連接
# 主流的LPWAN技術,無非就這幾種!
# 從技術到應用對比LoRa、NB-IoT,企業如何正確打開物聯網大門?
# NB-IoT究竟是什麼?終於有人講透了
2018-06-04 :
今天在秋葉原的 LoRa 模組看到 LoRa 的通訊模式說明, 值得參考 :
# LORA模組 ATK-LORA-01無線串口模組 SX1278 433M 20db TTL串口
但 LoRa 技術就不同了, 由於先進的技術突破, 加上走 Sub-GHz 頻段, 因此傳輸距離與穿牆性能據說都令人刮目相看, 空曠地方可達 2km~5km, 在建築物內可穿透 7 層牆壁. 因此在測完 nRF24L01 後, 我想研究 LoRa, 實際測試看看是否真的那麼厲害.
目前市面上的 LoRa 模組主要是使用 SX1276 與 SX1278 這兩種晶片, 兩者性能與功能相同, 差別只是頻段不同而已. SX1276 頻段是 868MHz 與 915MHz, 主要用在歐洲與北美地區; 而 SX1278 頻段為 433MHz 與 470MHz, 主要用在中國, 東南亞, 南美洲, 以及東歐等地區, 參考 :
# SX1276 与SX1278扩频芯片的区别
在露天拍賣上販售的大都是 SX1278 的模組. 我買的是這款 433MHz 的 (附彈簧天線) :
# [史塔克實驗室][Arduino/RPi]每個180元2個一組販售SX1278 Lora module 模組433MHz $180
賣家有提供 Arduino 範例程式, 可在 dropbox 下載 :
# https://www.dropbox.com/sh/beaswh5a3h69ho6/AABNL6J0KtAe9x_hfsz1P8SAa?dl=0
事實上這在 Aliexpress 上含運才賣 US$3.72 元而已, 折合台幣 111 元 :
# 433Mhz Lora SX1278 Long Range RF Wireless Module SPI Build-in Temperature Sensor For Arduino DRF1278F $3.72
注意, 這種裸片的模組大都沒有附底板或轉接板 (甚至沒有附彈簧天線), 而且其接腳間距為 2 mm, 因此必須找 2 mm 的排母來焊接, 例如 :
# 2.0MM 單排座1*40 單排母座 排針座(10只一拍) [1-89085] $70
我覺得最好是使用 2.0mm 的排母, 因為 2.0 mm 間距的排針較細, 一般杜邦線母接頭插上去根本就鬆垮垮的無法固定; 而 2.0 mm 排母的洞卻剛剛好可以讓一般杜邦線公插頭插進去沒問題.
如果要買有底板或轉接板, 可以焊接 2.54 mm 針腳的模組, 可以考慮下面這款 :
# 【傑森創工】SX1278 帶底板 LORA 模組 安信可 RA-02 Arduino $250
這塊使用的是安信可 (AI Thinker) 的 RA-02 SX1278 模組, 採用 IPEX 天線座而非短的彈簧天線, 而且有鐵殼包覆不會有電磁干擾問題 (FC/EC 相容認證). 其實這塊在 Aliexpress 一對含運才賣 US$13.5, 折合台幣 405 元, 平均一片才 203 元 :
# Elecrow 2pcs/lot SX1278 LoRa Module 433M 10KM Ra-02 Ai-Thinker Wireless Spread Spectrum Transmission Socket for Smart Home DIY US$13.5
也有採用 nRF24L01 接腳配置 (8 Pins) 的模組, 一對含運 US$13.51, 折合台幣 405 元, 平均一片也是 203 元左右, 這款好處是免焊, 而且採用 IPEX 天線 :
# 2pcs/lot Newest SX1278 LoRa Module 433M 10KM Ra-02 Ai-Thinker Wireless Module Spread Spectrum Transmission Electronic Diy Kit US$13.51
採用彈簧天線的是這款 :
# Elecrow 2pcs/lot LoRa Module SX1278 Ai-Thinker 433M Wireless Spread Spectrum Transmission Ra-01 DIY Kit for Smart Meter Reading US$13.59
如果買不含底板且搭配彈簧天線的 RA-01 模組的話更便宜, 一對 US$8.88, 折合台幣 266 元, 平均一片 133 元 :
# 2PCS Ra-01 SX1278 LoRa Spread Spectrum Wireless Module 433MHz Wireless Serial Port UART Interface Ra01 US$8.41+0.47=US$8.88
安信可的 Ra-02 模組通常都不附 IPEX 天線, 如果要買 IPEX 天線可參考 :
# 433m內置彈簧天線 433mhz模塊天線 433數傳天線 ipex介面 1.13線 $40
# 868MHZ/900MHz/915MHz/920MHz內置彈簧天線 無線數傳天線 高增益IPEX天線 $70
# 黑色868MHZ/900MHz/915MHz/920MHz/925MHz天線,SMA內針介面 $90
以上是關於模組採購的調查, 接下來整理一下 LoRa 技術的相關資訊.
LoRa 為 Low power long Range (低功耗長距離) 的縮寫, 它是一種低功耗無線廣域網路 (LPWAN, Low Power Wide Area Network) 通訊技術, 最早源自法國長距離無線傳輸技術 IP 公司 Cycleo, 它在 2009 年提出了創新的低功耗長距離技術 LoRa, 於 2012 年被美國 Semtech 公司以 500 萬美元併購, 參考 :
# Cycleo unveils its first innovative semiconductor IP bringing unprecedented range to wireless data transmission
# Semtech Acquires Wireless Long Range IP Provider Cycleo
美商 Semtech (先科) 1960 年創立於美國加州, 是一家類比與混和信號 IC 供應商, 1967 年公開上市, 目前於 NASDAQ 掛牌 (SMTC), 市值約 25 億美元. 主力產品為電源管理晶片, 數位感測與高階通訊射頻 IC 等, 參見 :
# https://en.wikipedia.org/wiki/Semtech
# http://www.semtech.com/wireless-rf/internet-of-things/
Semtech 併購 Cycleo 後大力推廣 LoRa 技術, 結合全世界電信商, 設備商, 晶片商等組成非營利的 LoRa 聯盟, 目前會員數已超過 500 個, 包括 52 個電信運營商, 範圍橫跨全球 100 餘國, 超過 350 個城市正在測試與佈建 LoRaWan 網路, 近日 ( 2017-10-17 ~ 2017-10-25) 將於中國蘇州舉辦第九屆全球會員大會, 參考 :
# https://www.lora-alliance.org
# http://whatis.techtarget.com/definition/LoRa-Alliance
關於 LoRa 技術的特性摘要如下 :
- 採用線性 Chirp 展頻調變技術 (CSS, Chirp Spread Spectrum), 具低功耗, 長距離, 低成本, 可擴充, 與抗干擾等特性, 可使用電池長時間運作, 範圍可達數公里. LoRa 省電的原因主要來自非同步通訊與自適應之傳輸速率功能. LoRa 節點的接收電流僅 10mA, 休眠電流 200nA, 因此 LoRa 技術的電池壽命高達 3~10 年.
- LoRaWAN 網路使用非同步方式通訊, 其媒介存取協定 (Media Access Protocol) 採用 ALOHA 法, 節點會依需要進入或長或短的休眠狀態, 從而降低了功率消耗; 而現行手機屬於同步通訊, 每 1.5 秒需與基地台同步一次, 功耗較大.
- 在 LoRAWAN 中, 節點並不與特定閘道器 (Gateway) 相關聯, 而是與多個閘道器關聯, 所傳送之資料將被多個閘道器接收. 此外, LoRaWAN 閘道器具有容量高與可擴充特性, 可從大量節點接收數據, 這是其他 LPWAN 所欠缺的優點.
- LoRa 具有網路與應用雙層安全防護, 網路節點不能檢視應用層數據, 並使用 AES 對傳輸之數據進行加密.
# Long Range Wireless Data Communicatoin using LoRa (Up to 10km Line of Sight)
參考 :
# LoRa:長距離低功耗物聯網傳輸技術
# LPWAN-大家天天熱聊的LORA技術到底是什麼?
# 智能家居無線技術解決方案:LoRa超遠距離無線通信
# LPWAN:科技改變生活,淺談LoRa與物聯網技術
# 物聯網時代來臨,IBM 推 LoRa 技術讓機器也有自己的網路
# 新一代無線傳輸技術-LoRa
# 長距離無線通訊
# 5分鐘搞清楚LoRa技術是什麼
# 細說LoRa(一)——LoRa、LoRaWAN、LoRa聯盟的由來及簡介
# NB-IoT與LoRa的巔峰對決不是你想的那樣
# 想快速全面了解LoRa?看這篇就夠了!
# 由台北 IoT 平台聊 LoRA & LPWAN (1) - LoRA & LoRaWAN
# 低功耗廣域網(LPWAN)- LoRa連接
# 主流的LPWAN技術,無非就這幾種!
# 從技術到應用對比LoRa、NB-IoT,企業如何正確打開物聯網大門?
# NB-IoT究竟是什麼?終於有人講透了
2018-06-04 :
今天在秋葉原的 LoRa 模組看到 LoRa 的通訊模式說明, 值得參考 :
# LORA模組 ATK-LORA-01無線串口模組 SX1278 433M 20db TTL串口
2017年10月13日 星期五
Free Energy Light Bulbs 230v-using Magnet?
我在 youtube 看到下面這個多數人評為造假的影片, 看標題我也認為是假的, 小發電機不可能發出 230V, 而且永動機違反熱力學第二定律. 但怎麼看都看不出這影片的破綻, 難道視頻也有類似 P 圖的工具嗎?
# https://www.youtube.com/watch?v=4rPWx8aaXjY
影片中使用壓電打火機 (piezo igniter) 產生的短暫電壓激勵馬達啟動, 讓內外兩個環形磁鐵因吸斥作用而持續轉動, 看起來似乎是非常完美的永動機, 但這個小小的電弧初始能量真的能產生比它還大得多的電能嗎? 能持續運轉下去嗎?
永動機與 free energy 儘管違反已知的物理定律, 但自古以來總是吸引許多人前仆後繼投入這種神奇機器的發明. 其實我的態度是很開放的, 從不以有限的所知知識侷限想像力, 因為我們對這宇宙的了解還是很有限, 這世界有無限種可能. 實驗是檢驗真理的唯一工具, 或許最後徒勞無功, 但有空的話倒是很想來複製影片中的實驗. 材料可在露天購得 :
# 壓電材料、壓電、點火器配件、打火機配件
# 釹鐵硼強力磁鐵 超強磁鐵 23*16*5 釤鈷磁鐵 超長磁鐵
另外還有一個類似的影片, 但它使用一顆電解電容來儲能, 參考 :
# make free energy generator mini best of world 2017 new project
同樣底下留言也是一片 "fake!" "fakee!" "idiot!" 罵聲, 但就是沒看到有人捲起袖子複製實驗後再來罵. 人外有人, 天外有天, 最保險的態度就是保持 open-minded 的心胸, 避免成為見識淺薄的井底之蛙. 古典的熱力學在現代量子資訊理論衝擊下或許會有所變化也說不定. 科學就是永遠不排除有被推翻的可能.
關於永動機的探討, 參考 :
# 永動機有可能嗎?——《悖論:破解科學史上最複雜的9大謎團》
# 熱力學第二定律被打破:打造永動機或成為可能
# 愛因斯坦認為它永遠不會被推翻,如今被量子資訊理論逼到了死角
# https://www.youtube.com/watch?v=4rPWx8aaXjY
影片中使用壓電打火機 (piezo igniter) 產生的短暫電壓激勵馬達啟動, 讓內外兩個環形磁鐵因吸斥作用而持續轉動, 看起來似乎是非常完美的永動機, 但這個小小的電弧初始能量真的能產生比它還大得多的電能嗎? 能持續運轉下去嗎?
永動機與 free energy 儘管違反已知的物理定律, 但自古以來總是吸引許多人前仆後繼投入這種神奇機器的發明. 其實我的態度是很開放的, 從不以有限的所知知識侷限想像力, 因為我們對這宇宙的了解還是很有限, 這世界有無限種可能. 實驗是檢驗真理的唯一工具, 或許最後徒勞無功, 但有空的話倒是很想來複製影片中的實驗. 材料可在露天購得 :
# 壓電材料、壓電、點火器配件、打火機配件
# 釹鐵硼強力磁鐵 超強磁鐵 23*16*5 釤鈷磁鐵 超長磁鐵
另外還有一個類似的影片, 但它使用一顆電解電容來儲能, 參考 :
# make free energy generator mini best of world 2017 new project
同樣底下留言也是一片 "fake!" "fakee!" "idiot!" 罵聲, 但就是沒看到有人捲起袖子複製實驗後再來罵. 人外有人, 天外有天, 最保險的態度就是保持 open-minded 的心胸, 避免成為見識淺薄的井底之蛙. 古典的熱力學在現代量子資訊理論衝擊下或許會有所變化也說不定. 科學就是永遠不排除有被推翻的可能.
關於永動機的探討, 參考 :
# 永動機有可能嗎?——《悖論:破解科學史上最複雜的9大謎團》
# 熱力學第二定律被打破:打造永動機或成為可能
# 愛因斯坦認為它永遠不會被推翻,如今被量子資訊理論逼到了死角
訂閱:
文章
(
Atom
)