| 
               
            Raspberry Piで動かす、CO2センサーのよみとりプログラムをPythonで作ります。  
            K30 CO2 センサーは電源が入っているといつでも計測しており、レジスタに入っている最新の計測値を外部から読みに行きます。 
            K30 CO2 センサーには、センスエアABCアルゴリズムという自己校正機能があります。これは予め設定された時間インターバル(デフォルトは180時間)中のCO2センサの最小測定値を常に内部記録し、長期ドリフトを緩やかに補正する機能です。屋内アプリケーションを想定しており、デフォルトではこの機能はオンになっています。当方のように長期間同じ条件で計測したい場合は、オフとすべきと考えます。 
            サンプルプログラムががこちらにありますが、センスエアABCアルゴリズムを無効にすることを含め、 Modbusプロトコル仕様 Document TDE2336 にしたがって、あらたに作りました。 
             
            CO2sensor.py をコメント番号にしたがって説明します。 
             
            (1)  UARTを読めるようにserialをinclude 
             
            (2)  /dev/ttyAMA0 にUARTの設定  
            Baud rate = 9600 
            timeout=0.5 
             
            (3)  ABCアルゴリズムを無効にする 
            Document TDE2336 によると、ABCアルゴリズムの周期をゼロにすることにより無効にできます。そのためセンサーに次の8バイトを送ります。 
            <>はhexadecimal 
            <FE> <06> <00> <1F> <00> <00> <AC>
            <03> 
            ここで<FE> :Any address <06> :Write Single Register <00> <1F> :レジスタ・アドレス<00> <1F>にゼロ<00> <00>を書き込む <AC> <03>:CRCコード 
             
             
            (4) データの読み取りコマンド 
            データの読み取りの前にセンサーに次のコマンドを送ります。 
            <FE> <04> <00> <03> <00> <01> <D5>
            <C5> 
            ここで<FE> :Any address  <04>: Read input registers  <00> <03>:レジスタ・アドレス  <00> <01>:Quantity of registers <D5> <C5>:CRCコード 
             
            (5) 8バイトのreturn valueを読んでresultに代入 
            3バイト目と4バイト目にCO2濃度(ppm)が入る。CRCコードはドントケア 
             
            (6) 出力データは時刻、濃度 
             
            (7) ファイル出力 
            CO2data.txtというCSV形式のファイルができる。たとえば 
            2019/07/23 14:51:19,437 
             
            (8) 1分に一度よみとる 
             
             |