置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2017年12月4日 星期一

去除按鈕彈跳的應用

作者:王一哲
日期: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 開發板

2014年8月21日 星期四

數值積分

許多函數的積分結果並沒有解析解,此時就要利用數值積分算出近似值,常用的方法有
  • 矩形法(維基百科 中文 en)
  • 梯形法(維基百科 中文 en)
  • 辛普森1/3法則及3/8法則(維基百科 中文 en)

為了完成這些計算,我們可以自己寫程式,也可以利用LibreOffice Calc、Microsoft Excel這類的工作表軟體,甚至還可以利用Wolfram Alpha網站(http://www.wolframalpha.com/)查詢答案。以運算速度以及可以分割的區間數量而言,自己寫程式一定是最好的。

以下是我用LibreOffice Calc製作的檔案:數值積分.ods
數值積分_calc_pic4.png

2014年1月17日 星期五

函數繪圖軟體


我常用來畫函數的軟體有
  • Gnuplot:Gnu計劃下功能強大的數值分析軟體,免費,但是需要背一點指令。
  • LibreOffice Calc:免費的試算表軟體,用描點的方式畫圖。
  • Wolfram Alpha:出版科學計算軟體Mathematica的公司Wolfram設立的網站,最好是用Mathematica的指令格式輸入,可以免費使用,但是進階版的功能要付費。


以95指考單選第6題為例來說明這三種工具畫圖的方式:


# 試題
某生做滑車實驗如圖5所示,每次實驗在吊掛之處逐次增加一個質量為50 g的砝碼,並且記錄滑車的加速度。如果滑車質量為100g,細繩質量可忽略,則下列曲線,何者最適合描述滑車加速度隨著吊掛砝碼個數的變化?





2013年7月11日 星期四

Scilab

最近開始學習使用Scilab,這是一個與Matlab很類似的科學計算軟體,最大的不同之處在於Scilab是免費的自由軟體,而Matlab則是相當貴的商業軟體。以下幾個網站有較為詳細的介紹:
不過這個軟體的知名度沒有Matlab那麼高,在網路上搜尋時大部分找到的資料都是英文或簡體中文的。在經過這陣子的摸索之後,我做出了兩個行進正弦波疊加的動畫,看起來效果還不錯。


2013年5月22日 星期三

如何在Ubuntu上安裝webcam


筆電型號:Acer Aspire One AO531h
作業系統:Ubuntu 12.04
我在安裝好作業系統之後,幾乎所有的功能都可以正常運作,但webcam就是沒有反應,後來在Google之後找到了幾個英文的網頁,照著上面的方法將問題解決了。
首先,從這個網頁(http://git.linuxtv.org/media_build.git)上下載所需要的套件,但在下載時需要用到 “git" 這個指令,因此我們需要在終端機裡執行以下的指令:
$ sudo apt-get install git
$ git clone git://linuxtv.org/media_build.git 
$ cd media_build

但在編譯的過程中需要用到 "lsdiff" 及 "Proc::ProcessTable" 兩個指令,因此我們需要在終端機裡執行以下的指令:
$ sudo apt-get install patchutils libproc-processtable-perl
$ ./build
$ sudo make install

整個過程大約需要30分鐘,接下來我的webcam就能正常運作了。

參考資料:
  1. https://help.ubuntu.com/community/Webcam
  2. http://git.linuxtv.org/media_build.git
  3. http://www.stylesen.org/lsdiff_in_debian_ubuntu
  4. https://patchwork.kernel.org/patch/1024902/