2017年5月22日 星期一

[電路] PH meter 電路

要讓MCU(ex Arduino)讀取PH計的輸出,必須要做一點讀整。

我使用的這款PH計輸出範圍約在 +/- 414 mV ,

PH 0 為414mV , PH 7 為 0 mv , PH 14 為 - 414 mV

我需要讓MCU可以讀取它,負值就變成一個需要處理的地方。

而且值太小了,我們來把它放大一點。


第一階段我們把+/- 414 mV 放大5.7倍變成+/-  2.359V

下圖中電池的部份就是模擬我們在PH為0時的輸入414mV,而電壓錶V的地方,

就是第一階段的Output 。




















我們來看一下模擬的結果,輸入414mV 會輸出2.36V



















若我們把輸入改成-414mV,模擬則顯示-2.36V( 注意正負方向)




















第二階段則是一個OFFSET ,讓電壓的範圍變成0~5V內,方便MCU的類比腳讀取。

不過注意一件事,由於輸入是接在反向端,所以出來的結果會變成

PH 0為 0.043V , PH 14為 4.76V

我們模擬一下PH 14 -414mV 的輸入,會輸山4.76V




















模擬一下PH0  +414mV輸入,會輸出40.3mV





















詳細電路的設計及計算可以參考這一篇,這也是我的資料來源,
https://www.sparkyswidgets.com/portfolio-item/ph-probe-interface/

電路模擬軟體是Every Circuit
http://everycircuit.com/app/

2017年5月11日 星期四

[MySQL] safe mode

最近在mariadb 更新後,突然後台程式失效,檢查後發現,所有的DELETE和UPDATE

全都無法使用,錯誤如下:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that
uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor -> Query Editor and reconnect.



記得在過去我是手動把這個選項關掉的,但是現在公司不允許我關閉這個選項,

所以我們來分析一下SQL_SAFE_UPDATES = 1時,做了什麼事是不被允許的。

1.如果你的UPDATE 或是DELTE 沒有指定where及limit條件,是不允許被執行的。

例如 DELETE  from myTable; 

2.如果你帶了where條件, 但where條件的column指定的不是pk,抱歉一樣不行


假如我有以下資料表 qoo

PK 

sn    name   group 

1      boywhy   chen_family

2     monkey   chen_family

3     google     search

4     ebay         store


我要刪除group為chen_family的話

delete from qoo where group chen_family ; 

也是不被允許的。

但如果你要刪除where sn =1  or sn=2 or sn=3 則是被充許的,因為它是PK。

如果要刪除chen_family的話,其實還是有方法的。

DELETE FROM  qoo where  sn IN (Select sn from (Select sn from qoo as myqoo where `group`='chen_family')tmp)  limit 20;

記得,一定要加limit ,否則是不會被充許執行的,在delete中limit的用途表示,最多刪除幾

筆,例如條件內有一百筆符合,但是limit 10的話只會刪除10筆,所以limit要怎麼下,可能要

考量程式架設設計上,並不是隨便一個數字都可以。


參考資料:

[Arduino] Arduino Nano + ENC28J60 LED問題

最近使用Arduino Nano V3 搭配ENC28J60 Ethernet Shield Network Module

For Arduino Nano 時遇到Pin 13 LED 沒反應問題。



 + 



研究後發現,在Ethernet.begin(mac);後, Pin 13 LED就失去反應了。

上網爬文後,得到解答,我使用UIPEthernet Library  , ENC28J60使用SPI協定與

Arduino溝通,SPI使用的腳位分別是D10~D13,所以13 Pin除了是LED之外,也作為SCK

用途,被佔用了,當然LED就不會亮囉。



Pin nameETHER_28J60EthercardUIPEthernetMy eBay Module
 SS 10 (!) 10 10
 MOSI (SI) 11 11 11 11
 MISO (SO) 12 12 12 12
 SCK 13 13 13 13
表格來源:





[Arduino] Linkit ONE 小筆記

最近在公司接觸到Linkit ONE,碰到一些小問題,筆記一下。

1. Linkit ONE只有二支腳支援PWM(D3及D9),而不像Arduino一樣有六支。
 
2. Linkit ONE在接上電腦後會有二個Comport。只有一個可以顯示Serial.print的內容。

3 .Linkit ONE 的PWM是13 bit的解析度,範圍由0~8191,電壓為0~3.3V。

4. LinkIt ONE在連上WI-FI後要稍等一下,讓它有時間取得IP,不要一連線就急著連網。

2017年5月2日 星期二

[電路]比較器

用OP做比較器時,有以下二個特性

若輸入大於參考電壓時,會輸出現OP的正電源最大值,

若輸入小於參考電壓時,則會輸出OP的負電源最大值。



電路如下



當OP + 輸入>2.5V特時,就會產生正+15V,若小於<2.5時,則會產生-15V ,

透過1個方波的輸入源接在OP + ,  OP - 透過分壓得到2.5V。


輸出波形如下:

紫色是輸入源的方波,青色是輸出方波(+/-15V)