2013年3月31日 星期日

Python Serial 自動重連

幾天前,發現 Arduino 的藍芽有的時候會斷線,造成 Python 的上傳軟體當掉,資料上傳不過去
所以想了好久解決.....

主要是運用 pyserial 的timeout 和 writetimeout
當連結斷掉的時候,會造成兩件事:

  1. Python 寫資料給Arduino 的時候會造成writetimeout
  2. Python 讀不到 Arduino 資料的時候會造成timeout
所以我先寫一個副程式叫做 reconnect()
由於 COM PORT 要先關掉才能重連,所以先關掉再開PORT直到成功:
def reconnect():

 global error

 s.close()
 error = 1

 while error == 1:

    try:
      s.open()
      error = 0

    except:
      print "Error connection"
      error = 1  
然後再寫入的部分:

 try:
    s.write("a")
  except:
    print "time out"
    reconnect()
    s.write("a")
而讀取的時候 serial.readline 會自動timeout(要先設定)而跳過
所以不用動

所以總結以上
當Arduino 和 PC 斷線的時候:
寫入失敗=>reconnect()=>再次寫入
讀取失敗=>跳過直到寫入失敗=>reconnect()


不過我還在想有沒有比較好的方法......
畢竟這樣搞,讀11個 data 都 timeout的話
要等至少一分鐘才會重連 =  =




   

熱敏電阻的換算

查了一下資料.....

首先要找感應器的常溫電阻,和B值

再來就代公式了

R測=EXP(B值 * ((1/溫度)-(1/288.15)))*常溫電阻值

好多新東西

最近又從掏寶買了不少東西回來,終於把電池系統(太陽能板,鋰電池充電版,升壓板)加了上去
還有大氣壓力計,不過依然是在找澆水的門閥值就是了......

還有阿,以前要上船程式碼到 Arduino mini pro 的時候,總是要接線道 Arduino UNO再把 UNO上的IC拔下來.....
現在有個這個東西終於不用這樣搞了~~
FTDI轉接器
還有還有,有鑑於我的USB轉接線爆掉了(被扯斷)
還買的一個三件式的USB街頭,還把線捲成麻花狀XDXDXD (訊號表示:.....)

2013年3月28日 星期四

土壤濕度計--------自動澆水器(中)



總之是做完了土壤濕度計,上圖的釘子就是感測器之一
現在就剩下決定要澆水的溼度數值了~~

土壤濕度計示意圖: