2014年4月28日 星期一

Fritzing - 設定為全面鋪銅

下圖是 Fritzing 做出來的 PCB 圖,
這樣子如果自洗板子的話不只會耗損比較多的蝕刻液, 相對的也不環保。




因為 Fritzing 是預設為 "移除銅層充填",所以如果要全面鋪銅的話,只要如下設定即可:
下拉功能表 > Routing > Ground Fill > Copper Fill(top and bottom)



底下圖片是全面鋪銅的情形。

2014年4月27日 星期日

Fritzing - 如何將雙面佈線指定為單面佈線?

預設的 PCB 板為雙面佈線,所以沒有辦法強制自動佈線功能只做單面佈線。
至於 Fritzing 會如何佈線,端看你的PCB板種類而定。

例如,如果所有使用中的零件都是穿過洞,那麼你可以先切換到其中一面做自動佈線,然後再切換為雙面再做一次自動佈線。

若要選取不同種類的PCB板,你可以先選取圖面上的 PCB 板元件,然後再到右側的性質視窗選擇你要的 PCB 類型,如下圖:



Fritzing - 讓線從IC兩支腳位之間通過

Fritzing 的 Grid 預設為 0.1in (2.54mm),所以當你在畫圖時,元件或PCB線都會定位在 Grid 點上面。在這個情況下,是無法讓 PCB線從 IC 兩支腳位之間通過的,以下步驟可以解決這個問題:

1. 選取下拉功能表  檢視 > Set Grid Size...

2. 將 Grid Size 設定為 0.05,如下圖:


3. 重新拖拉 PCB 線。

Fritzing - 變更線的粗細

一般來說,PCB線的粗細得依很多情況而定。

Fritzing 的PCB模式下, 線的預設粗細是24mil,在這個寬度下如果要從IC兩支腳位之間通過,勢必會造成短路,因此我們有必要去變更線的粗細,方法如下:

1. 選取線。

2. 到右側的性質視窗,將線的寬度變更為16mil或12mil,如下圖:


2014年4月23日 星期三

居家常備生薑 病痛不用慌

居家常備生薑 病痛不用慌


「家備生薑,小病不慌。」薑因保健作用已被使用了幾千年,不僅是人們喜愛的廚房調味料;其性辛溫,還有散寒發汗、化痰止咳、和胃止嘔等保健功效,若再配上紅糖、大棗或綠茶等不同配料,妙用無窮,可以預防許多疾病喔!

我認識一個退休老幹部,曾經是科委主任,名叫金石。金主任非常熱愛中醫及回醫回藥,也是我父親的好友。有次我去探望這位前輩時,閒聊中他談到自己治療拉肚子的經驗,我在此如實記下,希望對大家有所助益。
■生薑炒飯改善拉肚子
二○○七年冬天,寧夏極為寒冷,金主任和老伴只能一天到晚待在家裡烤火爐,根本沒辦法出門。只不過,金主任還是受了涼,出現了拉肚子的症狀,可是當時他家裡正好沒有治療拉肚子的藥,又怕冷不願意出去買,怎麼辦呢?
金主任的老伴在廚房裡找了一塊生薑(注:相對於乾薑──經過太陽曝曬的生薑而言,生薑可能是嫩薑也可能是老薑),把薑炒乾、炒黑,再加上大米,把米也炒黃以後,和水一起煮,然後讓金主任喝下薑粥水,薑粥水很有效,金主任很快就好了。這就是生活中的食療學,回醫的很多經驗就是這麼代代相傳下來的。很多朋友都有脾胃虛寒的問題,稍微吃一些涼的東西或者不小心受涼就容易腹痛腹瀉,經常感覺腹部冷冷的,喜歡喝熱水,有此種症狀的朋友就可以經常吃生薑炒飯。
■不同搭配,不同療效
● 大棗薑湯:薑性味辛溫,可溫中止嘔、解表散寒,大棗性味甘溫,可補中益氣、養血安神;二者合用,可充分發揮薑的作用,促進氣血流通,改善手腳冰涼的症狀。生薑重補暖,大棗重補益,對治療寒涼引起的胃病也很有效。
● 紅糖薑湯:紅糖具有養血活血的作用,薑湯裡放些紅糖,可改善體表循環,治療傷風感冒。要注意的是,紅糖薑湯只適用風寒感冒和淋雨後胃寒,不適用暑熱感冒和風熱感冒。
● 綠茶薑湯:新鮮的薑汁對預防中暑很有效果,搭配清熱解毒、益氣舒心的綠茶,效果更佳。取綠茶和薑絲各五克,用沸水沖泡十分鐘左右即可。這道食療方尤其適合在盛暑與秋熱交替時喝,有清熱舒心的功效。
● 鹽醋薑湯:盛夏之時,天氣炎熱,不少人容易得「空調病」,肩膀和腰背會遭受風、寒、濕等病邪的侵擾,特別是老人肩周炎容易發作。遇到這種情況,可熬鹽醋薑湯熱敷,在熱薑湯裡加少許鹽和醋,用毛巾浸泡擰乾,敷於患處,反覆數次,能使肌肉由張變弛,舒筋活血,大大緩解疼痛,也可用毛巾沾熬製好的熱薑湯敷於四肢痠痛處。

● 薑汁可樂:這個常見飲品具有防寒去痰的功效,可增加熱量,暖胃驅寒,最適宜在冬季飲用。
● 烏梅生薑:取兩個烏梅置於碗內,放入適量生薑汁以及二十毫升醬油、少許砂糖,然後沖入沸水趁熱飲用,可以有效治療胃痛及腹痛。

■生薑這樣挑、這樣煮
要注意的是,熬薑湯應該挑選表皮沒有裂口、顏色鮮豔的新鮮生薑,不要選那些起皺、變乾發黑的。生薑表皮中有較多營養成分,熬湯時,應該少去皮或不去皮,避免養分的流失。另外,生薑性味辛溫,凡屬陰虛火旺、目赤內熱者,不宜長期食用。

2014年4月4日 星期五

Arduino內部的上拉電阻

有不少像我一樣的Arduino初學者,都以為只要把程式打進去並且依下圖去拉線,在按下按鈕之後引腳12就可以得到一個HIGH,
 
void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, INPUT);
}
 
void loop() {
  bool buttonState = digitalRead(12);
  digitalWrite(13, buttonState);
}


然而,事實並非如此。
按鈕是一個機械動作,在你按下按鈕那零點幾秒內,Arduino實際上是收到很多HIGH和LOW的信號,這種在HIGH和LOW之間跳動的現像我們稱之為彈跳。
即使你沒按下按鈕,引腳12也是會持續收到彈跳信號。

為了要抑制彈跳,大多數教學文章都會建議要裝一個上拉電阻(註A),如下圖:

 
void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, INPUT);  
  digitalWrite(12, HIGH);
}
 
void loop() {
  bool buttonState = digitalRead(12);
  digitalWrite(13, buttonState);
}

如此,在沒按下按鈕時會一直收到HIGH,但在你按下按鈕後,就可以得到一個穩定的LOW。


事實上,Arduino的數位引腳都已經連接有一個內部的上拉電阻,詳官網
我們只要在pinMode()函式內將它啟用即可。



void setup(){ 
  Serial.begin(9600); 
  pinMode(2, INPUT_PULLUP);
  pinMode(13, OUTPUT);
}

void loop(){ 
  int sensorVal = digitalRead(2); 
  Serial.println(sensorVal); 
 
  if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  }
  else {
    digitalWrite(13, HIGH);
  }
}


註A: 若安裝下拉電阻也可以,只不過電路接法也要改變一下。

avrdude: stk500_getsync(): not in sync: resp=0x00

我想用UNO把bootloader 燒進 pro mini裡, 步驟如下:

1.開啟範例檔案ArduinoISP.ino並upload, 這個OK

2.將UNO與pro mini接線
UNO            pro mini
D10            RESET
D11            D11(MOSI)
D12            D12(MISO)
D13            D13(SCK)
GND           GND
VCC           VCC

3.選取board > Arduino Pro or  Pro mini(5V, 16MHz) w/ATmega328

4.選取 Programmer > Arduino as ISP

5.選取 burn bootloader但出現下列問題:

avrdude: stk500_getsync(): not in sync: resp=0x00

我發現之所以會出現上述問題, 通常都是serial port driver沒安裝好, 使得Arduino編譯器無法與MCU通訊.
目前市面上有不少USB轉TTL的硬體, 包括 FT232RL, CP2102, PL2303, CH340G...,在安裝driver之前最好要先搞清楚你用的是哪一種晶片.

2014年4月3日 星期四

用Python寫Arduino sketches.

其實也可以使用 Python 程式語言搭配眾多的 Python UI 來控制 Arduino,
熟悉 Python 的人都知道它的好處, 
其中 eMail Notifier 只是一個不錯的例子 http://www.robofun.net/forum/vie ... &extra=page%3D1
其它的我就不多說了.

Python 和 Arduino 它們之間也是透過 Firmata 方式連繫的,
所以 Arduino 端必須要先 upload 「Standard Firmata」這支程式,
下列是一個能讓 pin 13 燈閃亮的範例.

相關資料:
Python http://www.python.org/
pyFirmata https://bitbucket.org/fab/pyfirmata/src/96116e877527?at=default

程式碼:

#inoBlink.py
import pyfirmata

PIN = 13 # Pin 13 is used
DELAY = 1 # A 1 seconds delay

# Adjust that the port match your system, see samples below:
# On Linux: /dev/tty.usbserial-A6008rIF, /dev/ttyACM0,
# On Windows: \\.\COM1, \\.\COM2
PORT = '\\.\COM3'

# Creates a new board
board = pyfirmata.Arduino(PORT)

# Loop for blinking the led
while True:
    board.digital[PIN].write(1) # Set the LED pin to 1 (HIGH)
    board.pass_time(DELAY)
    board.digital[PIN].write(0) # Set the LED pin to 0 (LOW)
    board.pass_time(DELAY)

2014年4月2日 星期三

About Reset

Arduino一個很少被人注意的功能 - Reset

大多數的Arduino初學者大都把注意力集中在程式的寫作, 我也如此。
一直到有一天玩手機藍芽連線到Arduino時,因為不明原因導致藍芽無法連線,
這時才想到Arduino如果可以自我重置,就可以恢復藍芽連線。

忽然想到,許多電子產品都有一個小孔,重置按鈕就隱藏在裡面。他是一個救命的裝置,如果你的電子設備當機了,就可以按下這個按鈕,讓機器重新正常運作。

以下是我對Arduino的Reset一些粗淺的心得:

1. Arduino的millis()計時器在經過49天後,會重置Arduino。 

2. Arduino的IDE在開啟Serial monitor時, 會自動重置Arduino.

3. 其他程式藉由建立與Arduino的Serial port連線時, 也會重置Arduino.

4. DTR引腳是用來下載程序過程中自動復位的信號引腳。Arduino串口監視器啟動時,會默認給DTR一個信號,讓Arduino自動復位。所以如果使用Arduino的串口監視器,為了防止重啟,最好是把這個信號線跳帽拔掉。

5. 如果要關閉 Auto Reset 該怎麼做呢? 可以詳 Cooper Maa http://coopermaa2nd.blogspot.tw/ ... uno-auto-reset.html

6. 有三種用程式讓Arduino重置的方法