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 下載 TimeTimeAlarm 函式庫 :

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 聲控開關

2017年10月17日 星期二

幫姊姊訂台鐵與高鐵票

姊姊說這禮拜要回來, 因為之後要練啦啦隊比較忙. 上回她訂高鐵有 85 折學生優惠, 但時段有限, 數量也有限, 我上網一查發現不管幾折都是離峰時段, 根本不合用, 合用的也太晚訂被搶購一空, 參考 :

高鐵大學生優惠

除了時間問題外, 車錢才是真正有感的. 我查了一下北高票價, 高鐵全票 1490, 是自強號的 1.8 倍, 搭一趟高鐵幾乎是自強號兩趟了, 就算是早鳥 65 折也還是比自強號多出 141 元, 比較如下 :

 台鐵自強號 高鐵 
 高雄 - 台北 843 元
 新左營 - 台北 824 元 標準1490 元
 自由座 1445 元
 早鳥票 65 折 965 元
 大學生 85 折 1265 元
 大學生 7 折 1040 元
 大學生 5 折 745 元

當然, 自強號的時間是高鐵的兩倍, 所以不趕時間的話還是搭自強號好了. 上回聽阿英說家宏往返台中高雄都坐台鐵, 加入會員累積里程還可以換免費車票, 所以我就幫姐姐註冊了台鐵會員, 參考 :

台鐵會員系統

這個會員系統還有一個功能, 若買不到票, 又沒時間常上網去看看有無退票釋出的話, 可以透過會員系統自動媒合, 每天早上 06:00 後可以輸入所需班次與數量, 若有退票就會依序媒合, 媒合結果會以電子郵件通知. 不過媒合需求是以一天為單位, 若當日媒合失敗, 第二天還是要再次人工輸入需求, 並不會延續前一天的輸入. 媒合成功後, 買票還是要到台鐵訂票系統去買.

台鐵訂票系統
台鐵網路付款
台鐵列車時刻查詢
台鐵會員系統

預定台鐵車票是乘車日前 14 天開放, 參考 :

非乘車當日訂票

乘車前二週(十四天)開始預訂,即週一可預訂次次週一內之乘車票,但每逢週五可多預訂二天至次次週日之乘車票(即逢週五可預訂至次次週五、六、日之乘車票)。

經過這次幫姊姊訂自強號, 我整理了適合她往返北高的班次如下, 143 次與 136 次行車時間最少, 所以列入優先選項 :

回高雄 :

台北 - 新左營 139 次 : 17:00~21:39 (4:39)
台北 - 高雄 143 次  : 18:00~22:07 (4:07)  (逢週五開)

回台北 :

高雄 - 台北 普悠瑪 136 15:30~19:06  (3:36)
新左營 - 台北 138 次 : 15:49~20:31 (4:42)
新左營 - 台北 142 次 : 16:20~21:10 (4:50)

以信用卡網路付款後, 記下訂票電腦代碼於開車前 30 分鐘攜身分證至櫃台取票即可. 也可在超商用 ibon 取票, 但每張要付手續費 8 元, 參考 :

取票或網路付款截止時間:
您訂的車票已網路付款,請取票人持訂票人身份證明證件正本(僑胞及外籍人士持護照或居留証)及電腦代碼,於車站營業時間最遲於開車前至車站售票窗口或開車前30分鐘至全國各地電腦連線郵局、超商取票。(請斟酌取票時間,以免不及乘車)


  1. 會員服務系統委託訂票媒合提供會員於網路訂票系統開放訂票後,無法訂到所需班次,又無法經常上網查詢預訂時,可藉由會員制服務系統,於夜間將剩餘可售座位(即旅客逾期未取及退票後之剩餘座位),進行媒合,於媒合成功時,以電子郵件方式通知會員媒合成功之訊息。會員服務系統委託訂票媒合,僅開放乘車前3天到前12天,共計10天的媒合服務,主要係提供與車站窗口同步開放乘車日(含當日)12天前之預購服務。
  2. 會員制旅客服務系統帳號即是身分證字號,依據會員制消費金額累積及點數換算規定: 會員需實際搭乘本局列車抵達目的站始可累積消費金額,消費金額於實際乘車後翌日累積;每筆消費記錄可保留兩年,為確保消費金額累積正確,辦理購票/取票手續時, 於車站售票窗口提示身分證字號聲明具會員身份、網路付款購買本局車票,或於訂妥車票後利用本局對號列車自動售票機、郵局取票或超商取票等方式完成購/取票,並已完成搭車事實後,即可累計消費金額並享點數回饋酬賓兌換。
  3. 會員累積點數到達可兌換車票門檻後,可使用網路訂票,再去櫃檯進行兌換車票或直接至售票櫃檯進行兌換車票,只要您的會員點數達到兌換標準,可先於網路訂票(勿網路信用卡付款)後於取票期限內持會員身分證件正本至本局各車站售票窗口取票. 取票時,請向售票員說明為會員點數兌換車票即可.會員酬賓兌換之免費車票基本點數為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個真相

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 技術的特性摘要如下 :
  1. 採用線性 Chirp 展頻調變技術 (CSS, Chirp Spread Spectrum), 具低功耗, 長距離, 低成本, 可擴充, 與抗干擾等特性, 可使用電池長時間運作, 範圍可達數公里.  LoRa 省電的原因主要來自非同步通訊與自適應之傳輸速率功能. LoRa 節點的接收電流僅 10mA, 休眠電流 200nA, 因此 LoRa 技術的電池壽命高達 3~10 年.
  2. LoRaWAN 網路使用非同步方式通訊, 其媒介存取協定 (Media Access Protocol) 採用 ALOHA 法, 節點會依需要進入或長或短的休眠狀態, 從而降低了功率消耗; 而現行手機屬於同步通訊, 每 1.5 秒需與基地台同步一次, 功耗較大. 
  3. 在 LoRAWAN 中, 節點並不與特定閘道器 (Gateway) 相關聯, 而是與多個閘道器關聯, 所傳送之資料將被多個閘道器接收. 此外, LoRaWAN 閘道器具有容量高與可擴充特性, 可從大量節點接收數據, 這是其他 LPWAN 所欠缺的優點. 
  4. LoRa 具有網路與應用雙層安全防護, 網路節點不能檢視應用層數據, 並使用 AES 對傳輸之數據進行加密. 
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聯盟的由來及簡介

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大謎團》
熱力學第二定律被打破:打造永動機或成為可能
愛因斯坦認為它永遠不會被推翻,如今被量子資訊理論逼到了死角

2017年10月11日 星期三

2017 年第 40 周記事

放了四天連假, 差點連周記都忘了寫了. 週三中秋只有一天就沒回鄉下了, 早上測試研究 nRF24L01 無線模組, 下午把後陽台壞掉的曬衣繩換新, 順便沖洗一下後陽台, 準備把洗衣機搬回來, 沖水後發現後陽台中間 3, 4 塊磁磚似乎低了約 1mm, 感覺有點積水. 聯絡師傅周四下午來看, 說要叫施工的人來修補. 這幾天想了一下, 反正只是一點點而已, 只要用拖把拖一下很快就乾了, 犯不著又再敲敲打打, 叫師傅不用再修補了.

姊姊週五晚上到高雄, 她說做統聯暈車不舒服, 我說以後都坐高鐵啦! 舒適又省時. 上回坐一次自強號覺得怎麼左右搖晃得厲害, 害我在火車上看書也不舒服, 以後我連台鐵都不想再坐哩. 週六與菁菁, 水某三人前往湖內明璜的魚塭參加同學會, 雖然天氣很熱, 但大家聊得好高興.

因為姐姐周一中午要參加同學會, 所以還是週日晚上就回高雄了. 其實本周在鄉下也沒時間做甚麼, 每周書都是帶去帶回, 帶安心地而已, 事實上只要帶一本書就夠了. 週日在鄉下圖書館找到下面這本好書 :

# 表裡日本, 蔡亦竹 (遠足文化出版)

作者為實踐大學應用日語系助理教授, 曾在日本留學生活多年, 對於日本歷史文化有深刻了解與研究. 本書以散文方式寫作, 雖然很有文化深度, 但讀來毫不費力氣, 我一天就看完了. 書中關於金閣寺的來龍去脈有精闢描寫, 原來足利義滿所建的金閣寺竟然與其架構一樣有三層特別的意義啊!

2017年10月8日 星期日

如何製做鉛酸電池

在 Youtube 看到下面這兩部尼泊爾人自製鉛酸電池的影片感到非常新奇, 原來鉛酸電池是這樣做出來的, 裡面所需要的部件大都是使用小坩鍋自行熔解廢鉛塊為液狀, 然後倒入模型中塑造再加工, 鉛是柔軟展性佳的有毒重金屬, 容易切割加工, 導電性低抗腐蝕性強, 熔點低約攝氏 328 度.

# Part 1 of 2 Local Battery Manufacturing in Nepalgunj




Part 2 of 2 Local Battery Manufacturing in Nepalgunj




現代電池工廠製造程序已高度自動化, 例如下面是美國 USA Batery 公司的深循環鉛酸電池的詳細製程 :

Deep Cycle Battery 101 manufacturing - OEM ending




鉛酸電池最早是 1859 年法國物理學家普蘭特 (Gaston Planté) 所發明, 由二氧化鉛當正極, 鉛板當負級, 防止正負極短路的中間隔板, 以及濃度 30~40% 的稀硫酸溶液組成. 普蘭特是巴黎工藝美術學院物理學教授, 早年曾在巴黎郊外發現了史前一種不飛鳥-冠恐鳥的化石, 這種已滅絕之大型不飛鳥便以其名字 Gaston 命名為加斯頓鳥. 另外, 月球上的普蘭特隕石坑也是因為他發明鉛酸電池的偉大貢獻而以其姓氏命名. 參考 :

https://baike.baidu.com/item/普兰特/15385934

鉛酸電池一格標稱電壓為 2V, 可充電到 2.4V, 放電至 1.5V. 通常由六格鉛酸電池串聯組成標稱電壓 12V 的模組. 鉛酸電池具有內阻低, 供電流大特性, 但過充時會產生易燃的氫氣, 須注意排氣避免爆炸之危險. 長期低電量會使電池壽命縮短, 使用久了之後電池極板上會有硫酸鉛結晶使蓄電量降低, 可用脈衝式充電加以消除.

鉛酸電池正負極的二氧化鉛與鉛會與稀硫酸電解液產生硫酸鉛溶液與水而放電; 當施予電壓時, 硫酸鉛溶液與水又會還原成二氧化鉛, 鉛與稀硫酸溶液, 這個充放電的電化學反應是可逆的. 參考 :

https://zh.wikipedia.org/wiki/铅酸蓄电池

其反應原理可參考下列影片 :

Working Principle of Lead Acid Battery




參考 :

DIY 一個成本 20 元的 360W 充電器 (1000W 亦同
Lead-acid storage battery
大學教授把垃圾場金屬變成自製的超級電池!