2017年2月28日 星期二

[名詞定義] rail to rail OPAMP

運算放大器(OPAMP)中,有一種特別的規格:rail to rail

所謂【rail to rail】就是工作範圍非常逼近極限的軌道,就是系統電壓,有的op甚至可以逼近到10mV以內。

使用此類op,要注意一個限制,就是負載越輕越好,以AD822為例,

負載20uA,飽和電壓只有10mV,可是當負載為15mA時,

飽和電壓便會達到1V,此時便與一般op的特性差不多了。


Rail-to-Rail 指的就是輸入與輸出的範圍可以與工作電壓的範圍是相同的. 

也就是說如果工作電壓是 5V , 輸入是 Rail-to-Rail 的 OP , 

可以接受的輸入電壓也是 0 .. 5V. 輸出的規格也是同理 !


參考資料:

到底什麼是:rail to rail OPAMP?

2017年2月25日 星期六

[python] Curve Fitting 3次曲線計算

之前寫過一篇文章[名詞定義]Curve Fitting ,

這篇紀錄一下如何用python來算出3次曲線的Curve Fitting,

感覺python好像會去做normalize,如果不放心,可以自己手動以程式做再丟進array中。

import numpy as np
x = np.array([52010,52104,52198,52292,52386,52480,52574])
y=np.array([-3.89177,-2.756,-2.11687,-1.91851,-2.12506,-2.70859,-3.62756])
z = np.polyfit(x, y, 3)
print z


它會去算出四個系數a,b,c,d

[  7.52449150e-09  -1.20358144e-03   6.41491191e+01  -1.13927772e+06]
將X代入就可以求得Fitting出來的曲線上y的值。







[Electric imp] 如何在agent 網頁顯示控制項

以往我們都把agent網頁當作一個處理我們post過去參數的後端,

如何讓它變成前端呢?


在IDE裡將以下內容貼在agent端的程式碼


const html = @"<!doctype html>
 
<html lang=""en"">
<head>
  <meta charset=""utf-8"" />
  <title>Electric Imp NeoPixel Colorpicker</title>
  <link rel=""stylesheet"" href=""https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"" />
  <script src=""https://code.jquery.com/jquery-1.9.1.js""></script>
  <script src=""https://code.jquery.com/ui/1.10.3/jquery-ui.js""></script>
  <style>
  #red, #green, #blue {
    float: left;
    clear: left;
    width: 300px;
    margin: 15px;
  }
 
  #red .ui-slider-range { background: #d3d3d3; }
  #red .ui-slider-handle { border-color: #ef2929; }
  #green .ui-slider-range { background: #8ae234; }
  #green .ui-slider-handle { border-color: #8ae234; }
  #blue .ui-slider-range { background: #729fcf; }
  #blue .ui-slider-handle { border-color: #729fcf; }
  </style>
  <script>
    function sendToImp(value){
        if (window.XMLHttpRequest) {devInfoReq=new XMLHttpRequest();}
        else {devInfoReq=new ActiveXObject(""Microsoft.XMLHTTP"");}
        try {
            devInfoReq.open('POST', document.URL, false);
            devInfoReq.send(value);
        } catch (err) {
            console.log('Error parsing device info from imp');
        }
    }
  function hexFromRGB(r, g, b) {
    var hex = [
      r.toString( 16 ),
      g.toString( 16 ),
      b.toString( 16 )
    ];
    $.each( hex, function( nr, val ) {
      if ( val.length === 1 ) {
        hex[ nr ] = ""0"" + val;
      }
    });
    return hex.join( """" ).toUpperCase();
  }
  function refreshSwatch() {
    var red = $( ""#red"" ).slider( ""value"" ),
      green = $( ""#green"" ).slider( ""value"" ),
      blue = $( ""#blue"" ).slider( ""value"" ),
      hex = hexFromRGB( red, green, blue );
    $( ""#swatch"" ).css( ""background-color"", ""#"" + hex );
    sendToImp('{""red"":""' + red +'"",""blue"":""' + blue + '"",""green"":""' + green + '""}');
  }
  $(function() {
    $( ""#red, #green, #blue"" ).slider({
      orientation: ""horizontal"",
      range: ""min"",
      max: 255,
      value: 127,
      
      stop: refreshSwatch
    });
    $( ""#red"" ).slider( ""value"", 0 );
    $( ""#green"" ).slider( ""value"", 0 );
    $( ""#blue"" ).slider( ""value"", 0 );
  });
  </script>
</head>
<body class=""ui-widget-content"" style=""border: 0;"">
 
<p class=""ui-state-default ui-corner-all ui-helper-clearfix"" style=""padding: 4px;"">
  <span class=""ui-icon ui-icon-pencil"" style=""float: left; margin: -2px 5px 0 0;""></span>
  Lamp Web Controller 
</p>

<div id=""red""></div>
<div id=""green"" style=""display:none""></div>

<div id=""blue""></div>

<div id=""swatch"" class=""ui-widget-content ui-corner-all""></div>
 
 
</body>
</html>";

http.onrequest(function(request,res){
    if (request.body == "") {
        res.send(200, html);
    }else{
        local json = http.jsondecode(request.body);
        server.log(json)
        if("red" in json && "green" in json && "blue" in json){
            server.log("RGB: " + request.body);
            device.send("rgb", json);
        }else {
            server.log("Unrecognized Body: "+request.body);
        }
        res.send(200, "");
    }
});

執行畫面








































這是我拿一個RGB的調整範例來改的,因為只需要二個拉bar,所以我把green不顯示

[分享] 朋友問,要多少鹽,才能讓小孩在浴缸中不沉下去

一般海水的鹽度約在3.5%,也就是一公升水中有35公克的鹽。

要讓小孩不沉下去,就要像死海一樣的鹽度,死海的鹽度是一般海水的10倍。

一般家用浴缸,假設300公升,則需要 350 g * 300 = 105 KG 的鹽。


參考資料:

鹽度wiki
https://zh.wikipedia.org/wiki/%E9%B9%BD%E5%BA%A6

死海盐度有多少?https://zhidao.baidu.com/question/55914410.html


2017年2月24日 星期五

「養魚知識」海水比重與鹽度換算

比重的定義是「與標準物質相比的密度比值」
通常這個標準物質會定為4度C時的水(密度=1.000g/cm3) 

28度C時的水,密度為0.996g/cm3 

所以水在28度時的比重




比重不一定會以4度C時的水當作標準

一樣鹽度千分之35的標準海水,水的密度是1.022g / cm3

玻璃比重計如果準的話,量出來的比重會是1.022 

但光學比重計若以28度的水作為標準,去量同樣28度C、鹽度為千分之35的標準海水





這不代表誰準誰不準,單純是因為參考的標準不同

鹽度的定義則是「在溶液中溶有多少的鹽類」 科學上常用的單位是「重量百分濃度」或是「重量/體積濃度」(或千分濃度) 常見公式如下:

               加了多少鹽
鹽度= --------
               加了多少水

單位是g/L(重量體積濃度)或是PPT(重量千分濃度)


若海水素若是有受潮,海水素的重量會因為含水而有極大的誤差,

所以還是要用比重計驗證過比較保險

以上參考自

Re: [閒聊] 比重計,是我對不起你.
https://www.ptt.cc/bbs/Aquarium/M.1266155325.A.13D.html



以下找到一個公式,以比重在溫度下的鹽度

水溫>17.5度 :

鹽度=1035 * (比重-1) +0.3 * (溫度℃ -17.5)

水溫>17.5度 :

鹽度=1035 * (比重-1) +0.2 * (17.5-溫度)

例如在26度時,在比重1.022時,鹽度度多少?

=1305*(1.022-1)+(26-17.5)*0.3

= 31.26 PPT 

若是溫度升到30度時

=1305*(1.022-1)+(30-17.5)*0.3

32.46 PPT

溫度降到20度時


=
1305*(1.022-1)+(20-17.5)*0.3

29.46 PPT




接下來做一個表格來看一下9種溫度下的比重/鹽度變化

/℃05101517.5202530
比重鹽度鹽度鹽度鹽度鹽度鹽度鹽度鹽度
1.00155.45754.45753.45752.45751.95752.70754.20755.7075
1.00165.5884.5883.5882.5882.0882.8384.3385.838
1.0026.115.114.113.112.613.364.866.36
1.0037.4156.4155.4154.4153.9154.6656.1657.665
1.0048.727.726.725.725.225.977.478.97
1.00510.0259.0258.0257.0256.5257.2758.77510.275
1.00611.3310.339.338.337.838.5810.0811.58
1.00712.63511.63510.6359.6359.1359.88511.38512.885
1.008114.070513.070512.070511.070510.570511.320512.820514.3205
1.00915.24514.24513.24512.24511.74512.49513.99515.495
1.0116.5515.5514.5513.5513.0513.815.316.8
1.011518.507517.507516.507515.507515.007515.757517.257518.7575
1.01320.46519.46518.46517.46516.96517.71519.21520.715
1.014121.900520.900519.900518.900518.400519.150520.650522.1505
1.015223.33622.33621.33620.33619.83620.58622.08623.586
1.01624.3823.3822.3821.3820.8821.6323.1324.63
1.017125.815524.815523.815522.815522.315523.065524.565526.0655
1.018227.25126.25125.25124.25123.75124.50126.00127.501
1.018527.642526.642525.642524.642524.142524.892526.392527.8925
1.019528.947527.947526.947525.947525.447526.197527.697529.1975
1.0229.628.627.626.626.126.8528.3529.85
1.021131.035530.035529.035528.035527.535528.285529.785531.2855
1.021531.557530.557529.557528.557528.057528.807530.307531.8075
1.022232.47131.47130.47129.47128.97129.72131.22132.721
1.022933.384532.384531.384530.384529.884530.634532.134533.6345
1.023534.167533.167532.167531.167530.667531.417532.917534.4175
1.023934.689533.689532.689531.689531.189531.939533.439534.9395
1.024435.34234.34233.34232.34231.84232.59234.09235.592
1.02536.12535.12534.12533.12532.62533.37534.87536.375
1.025436.64735.64734.64733.64733.14733.89735.39736.897
1.02637.4336.4335.4334.4333.9334.6836.1837.68
1.026538.082537.082536.082535.082534.582535.332536.832538.3325
1.027138.865537.865536.865535.865535.365536.115537.615539.1155
1.02840.0439.0438.0437.0436.5437.2938.7940.29
1.028540.692539.692538.692537.692537.192537.942539.442540.9425
1.02941.34540.34539.34538.34537.84538.59540.09541.595
1.029541.997540.997539.997538.997538.497539.247540.747542.2475
1.030543.302542.302541.302540.302539.802540.552542.052543.5525
1.031544.607543.607542.607541.607541.107541.857543.357544.8575

來看一下0度~17.5度的圖表 ,我們發現愈靠近0度,相同比重的情況下,鹽度愈高。



來看一下17.5度~30度的圖表 ,發現愈靠近30度,相同比重的情況下,鹽度愈高


所以假設你在調製海水時,想要調成30%塩度,則要注意調整來源水的溫度,與缸內的

水溫溫度是否差異很大。

參考來源:


Re: [閒聊] 比重計,是我對不起你.
https://www.ptt.cc/bbs/Aquarium/M.1266155325.A.13D.html

已知海水比重1.012,温度32度,求海水盐度?问海水比重与盐度的换算公式?http://zuoye.zhishihao.com/zuoye/40950

求比重计和海水盐度的换算公式?(公式的温度有限制没?)比重计的温度使用有限制吗?
https://zhidao.baidu.com/question/358540090.html?fr=qrl&index=2&qbl=topic_question_2