2017年12月25日 星期一

Word圖表標號及自動產生目錄

Word圖表標號及自動產生目錄
日期:2017/12/25
  我會寫這篇文章是因為某人寫論文時遇到困難,我只好又幫忙測試。其實我很討厭 Microsoft Word,平常只用 LibreOffice Writer。以下是我找出來的方法,使用的版本為 Word 2013。(Word 檔pdf 檔

步驟1:設定章節用的多層次清單
路徑:常用 ⇒ 段落 ⇒ 第1列第3個圖示多層次清單 ⇒ 定義新的多層次清單

2017年12月14日 星期四

將 Python 程式碼打包為可執行檔

將 Python 程式碼打包為可執行檔
Version 1: December 4, 2017
Version 2: December 5, 2017

  最近正好要將一些以前寫的 Python 程式碼打包為可執行檔,這樣才能把程式拿到沒有安裝 Python 的電腦上執行。在請教 Google 之後,找到了3個目前最多人使用的方法:
  1. py2exe ( http://www.py2exe.org/ )
  2. cx_Freeze ( https://anthony-tuininga.github.io/cx_Freeze/ )
  3. PyInstaller ( http://www.pyinstaller.org/ )
其中 py2exe 只有支授到 Python 2.7 版,但是我使用的是 Python 3.6.3 版,所以我就跳過這個軟體不進行測試。所用的作業系統為 Windows 10 64-bit 家用版。以下是另外2個軟體的安裝及測試結果。


cx_Freeze
  1. 打開指令界面,輸入並執行以下指令安裝軟體
    python -m pip install cx_Freeze --upgrade
  2. 新增一個測試用的資料夾,我是在桌面上新增名為 "cx_Freeze" 的資料夾,把想要轉檔的 Python 程式碼複製到這個資料夾中,我的檔案為 "gcd.py"
  3. 進到安裝 Python 的資料夾中,將 "cxfreeze-quickstart" 檔案複製到測試用的資料夾中。路徑可能為
    (a) 安裝給所有使用者:"C:\Program Files\Python36\Scripts\"
    (b) 安裝給特定使用者:"C:\Users\[username]\AppData\Local\Programs\Python\Python36\Scripts\"
  4. 在指令界面中使用 cd 指令切換到測試用資料夾中,輸入並執行以下指令以產生轉檔用的 setup.py 檔
    python cxfreeze-quickstart
    依據畫面指示輸入適當的選項,執行完畢後會產生 setup.py
  5. 輸入並執行以下指令以完成轉檔
    python setup.py build
  6. 進入 "build\exe.win-amd64-3.6\" 找到輸出的 .exe 檔,但在執行時出現以下的錯誤訊息 " ModuleNotFoundError: No module named 'codecs' " ,再度請教 Google 之後發現這似乎是 cx_Freeze 的 bug,已經有人向開發者回報問題,詳細情形可以參考 https://github.com/anthony-tuininga/cx_Freeze/issues/325

2017年12月4日 星期一

紅外線發射接收器

作者:王一哲
Ver. 1:2016/11/20
Ver. 2:2018/3/29



所需元件



  1. 紅外線發射 LED 2 個
  2. 紅外線接收 LED 2 個
  3. 3 mm 或 5 mm LED 1 個
  4. 220 Ω 電阻 1 個(串聯普通 LED)
  5. 560 Ω 電阻 2 個(串聯紅外線發射 LED)
  6. 1 MΩ 電阻 2 個(串聯紅外線接收 LED)
  7. 麵包板 1 塊
  8. Arduino Uno 開發板 1 塊
  9. 麵包板連接線數條
  10. 自製的 LED 支架 2 組

圖中藍色的是紅外線發射 LED、透明的是紅外線接收 LED。
請注意,各廠牌的發射器及接收器顏色不一定相同,購買前最好先向店家確認。

自製的LED支架


去除按鈕彈跳的應用

作者:王一哲
日期:2017/5/5



所需元件



  1. 可插入麵包板的按鈕4個
  2. 220 Ω 電阻3個
  3. 3 mm 或 5 mm LED 3 個
  4. 麵包板 1 塊
  5. Arduino Uno 開發板 1 塊
  6. 麵包板連接線數條


用按鈕控制數值



本裝置的要求:
  1. 按下「增加按鈕」使數值 +1,按下「減少按鈕」使數值 -1,按下「重設按鈕」使數值回到預設值0。
  2. 使用 Bounce2.h 去除按鈕彈跳的問題,不能持續按著按鈕。
  3. 使用開發板內建的上拉電阻,使接線方式更加簡單。
線路圖

實際的裝置照片

序列埠監控視窗截圖


按鈕及彈跳

作者:王一哲
日期:2016/9/7



所需元件



  1. 可插入麵包板的按鈕1個
  2. 220 Ω 電阻1個
  3. 10 kΩ 電阻1個
  4. 3 mm 或 5 mm LED 1個
  5. 麵包板1塊
  6. Arduino Uno 開發板1塊
  7. 麵包板連接線數條

使用外接電阻



將 5 V 接到按鈕,按鈕的另一端串聯1個 10 kΩ 電阻再接地,這樣的接法被稱為下拉電阻(pull-down resistor)。若測量電阻及按鈕間的電壓,當按鈕未按下時電路未接通,測量到低電位;當按鈕按下時測量到高電位。當按鈕被按下時,點亮LED;反之則熄滅。
線路圖

實際的裝置照片


程式碼如下:
/* 實驗5-1:用按鈕控制LED                              *
 *          使用外接10kOhm電阻                         *
 * 參考資料:葉難(2014)。Arduino輕鬆入門              *
 * 日期:Sep. 17, 2016                                 *
 * 作者:王一哲                                        */
#define LEDPIN 7     //定義LED接腳
#define BUTTONPIN 4  //定義按鈕接腳
#define BAUDRATE 9600
int state;

void setup() {
    pinMode(LEDPIN, OUTPUT); //定義LED接腳為輸出
    pinMode(BUTTONPIN, INPUT); //定義按鈕接腳為輸入
    Serial.begin(BAUDRATE);
}

void loop() {
    state = digitalRead(BUTTONPIN); //讀取按鈕狀態,按下為HIGH
    if (state == HIGH) {               //若按下按鈕則點亮LED
        digitalWrite(LEDPIN, HIGH);
    } else {                        //若沒有按下按鈕則熄滅LED
        digitalWrite(LEDPIN, LOW);
    }
}

超音波測距模組

作者:王一哲
日期:2016/5/10



超音波測距模組運作原理



模組先發射超音波,超音波撞到物體反射回模組,測量發射、反射、接收所需要的時間,再由時間計算物體與模組間的距離。由於物體必須反射超音波,物體最好有一個不算太小、平滑的反射面。在網路上找到的範例程式通常會用以下的程式碼計算距離
cm = pulseIn(echoPin, HIGH) / 29.41 / 2.00
上式當中 pulseIn(echoPin, HIGH) 會讀取指定的接腳 echoPin 的電壓值為高電位的時間(單位為微秒,microsecond, μs),也就超音波測距模組發出訊號到訊號反射回來被接收到所經過的時間,但我們只需要發出訊號到撞到物體所經過的時間 t ,因此需要將回傳的數值除以 2。29.41 則是超音波在空氣中前進 1cm 所花的時間(單位為μs),將 t 除以 29.41 即為物體與模組間的距離(單位為 cm)。 29.41 的來源如下 $$ t_0 = \frac{0.01}{340} \approx 2.941 \times 10^{-5} ~\mathrm{s} = 29.41 ~\mathrm{\mu s} $$ 如果需要更精準的數據,可以由氣溫計算空氣中的聲速 $$ v = 331 + 0.6 T ~\mathrm{m/s} $$ 再將較準確的聲速代入上式中。另外也可用改用帶有溫度補償的模組 US-100,但是需要的程式碼就會有點不同。
超音波測距模組 HC-SR04,售價約80元。

超音波測距模組帶溫度補償 US-100,售價約150元。


利用可變電阻控制LED

作者:王一哲
日期:2016/9/6



分壓電路



分壓電路是我們在Arduino裡最常用的技巧之一,我們可以利用可變電阻或是光敏電阻與固定電阻串聯,讀取中間接腳的電壓值,並利用這個值來控制其它元件。最簡單的接法如下
分壓電路示意圖


圖中電池和R1、R2電阻串聯,利用歐姆定律可得到電流值 $$ I = \frac{\varepsilon}{R_1 + R_2} $$ 因此R1、R2電阻的端電壓分別為 $$ V_1 = IR_1 = \frac{R_1}{R_1 + R_2} \varepsilon $$ $$ V_2 = IR_2 = \frac{R_2}{R_1 + R_2} \varepsilon $$ 如果我們使用最簡單的可變電阻,將左邊的接腳接到+5V上,右邊的接腳接0V,轉動旋鈕時會改變中間接腳到右邊接腳之間的電阻值,因此電壓值會跟著變化,我們就可以藉此控制其它元件。
單圈碳膜式可變電阻


分壓電路的簡單練習



我們可以用 Arduino 上的 +5 V 接腳供電,將兩個固定電阻串聯,使用三用電表測量電阻的端電壓。為了避免通過電阻器的電流過大,建議使用 10 kΩ 或 100 kΩ 的電阻器。請同學計算一下測量到的電壓值應該是多少?再用三用電表測量看看。
簡單的分壓電路


安裝 Arduino IDE

安裝 Arduino IDE
日期:May 6, 2016


  1. 於 Google 搜尋 Arduino ,通常第1個搜尋結果就會是 https://www.arduino.cc/
  2. 按上方的 Download ,進入下載頁面。
Arduino.cc_home.png


Arduino簡介

Arduino簡介
version 1:May 9, 2016
version 2:Sep. 16, 2016

  1. 什麼是Arduino

  Arduino是一種開放原始碼的單晶片控制器,使用的程式語言與C語言非常相似,但又不像C語言那麼複雜,即使沒有程式語言的基礎也能很快上手。Arduino的開發板有許多版本,例如mega、yun、nano……等等,最適合初學者使用的應該是uno,也是我們在這學期的課程中採用的開發板。

Arduino_Mega.jpg
Arduino mega 開發板