プログラム開発者向け・放射線測定器

高線量に対応

BDKG-02 は、X線・ガンマ線、特に高線量向けの放射線測定器モジュールです。

高線量向けであるため、検出器は低感度です。感度が低いということは放射線を捕まえる能力が低いわけですが、高線量では低い感度の検出器の方が安定して動作します。

高線量では、空間中に放射線がたくさんあります。高感度な検出器を使うと、 多すぎるほどの放射線が検出器に入り込んでしまい正しく測定できなくなります。

一方、低感度の測定器であれば、わずかしか放射線が入ってこないため高線量の環境でも安定して測定できることになります。

開発をサポート

検出器モジュールは、表示部を持たない開発者向けの放射線測定器です。

測定値は、付属のWindows 用のソフトウェアで確認することができます。

開発者であれば、付属の通信仕様書やサンプルプログラムを参考にしてご自身でソフトウェアを開発できます。 ソフトウェアに測定値を取り込み、表示やデータベースへの保存などが可能です。

シリアル通信は、ほとんどのプログラム言語でサポートされているため、Windows, Mac, Linux, Android, iPhone, マイコンなどあらゆるデバイスと接続可能です。

RS485,232,無線化

開発用モジュールは、2タイプあります。

  • BDKG-02 (RS485通信)
  • BDKG-01 (RS232通信)

RS485 は、通信ケーブルを最長1000m まで伸ばすことができます。RS232 は20m 程度です。

通信フォーマットには、よく知られたModbus プロトコルです。簡単なプログラムで通信でき、市販の Modbus 無線機や、Bluetooth 変換器を使うことで無線通信にすることも可能です。

開発システムの概要をご連絡いただければ、通信機器、放射線測定器について技術的なアドバイスも行っております。 ご遠慮なく連絡ください。

長期間の放射線測定

BDKG-02 は、数年に渡る連続測定の目的として開発された高耐久・放射線測定モジュールです。

幅広い測定範囲( 0.1 μSv/h ~ 10 Sv/h ) があるため、原子力発電所から、放射線管理区域の警告などあらゆる開発用途に利用することができます。

消費電力も低くマイコンやバッテリーを使った開発にも使うことができます。使用電圧は、9-30V ( RS485 ), 6-12V ( RS232 ) で動作します。

開発システムの概要をご連絡いただければ、通信機器、放射線測定器について技術的なアドバイスも行っております。ご遠慮なく連絡ください。

シリアル通信の仕組み

シリアルはプログラム開発の中でも簡単な手順で実行できる通信方式です。

シリアル通信のプログラムでは、Write 命令を使って放射線測定器に命令文を送ると、放射線測定器が測定値を返してくるのでこれを read で読み出すという単純なプログラムになります。こちらの3ステップを繰り返すことで、定期的に測定値を取得することができます。

アプリの開発は弊社たろうまるでも必要なアプリの開発を行うことができます。ご遠慮なくご相談ください。

1

命令を送信

お使いのWindows パソコンや Android, iPhone のスマートフォンからシリアル通信上に命令文を送信します。 命令文は8ビットのバイト列です。プログラムから Write して測定器へ測定命令を送信します。

送信例
0x12
0x34
0x56
0xAB
2

測定値を受け取る

続いてプログラムでシリアル通信を Read すると測定器から届いた測定値情報が入ったバイト列を受信できます。このバイト列には、線量率、CPSなどの浮動小数点情報が含まれています。

受信例
0xCD
0xEF
0x01
0x0F
3

アプリに表示

線量率などの測定値を値に変換し、パソコンやスマートフォンの画面に表示します。この動作を繰り返すことで、測定値情報を使ったアプリケーションを簡単に開発することができます。

放射線の測定値

放射線測定器の制御コマンド一覧

  • 線量率 [Sv/h]
  • 線量率の偏差[%]
  • CPS
  • 平均CPS
  • CPSの偏差[%]
  • 探索モードでの CPS 基準を保存
  • 探索モードの ON/OFF
  • 探索アラーム音の ON/OFF
  • 背景放射線の差分モード ON/OFF
  • 2段階の線量率警告の設定
  • 2段階の線量率警告に対するドライコンタクトスイッチ発動
  • Baudrate (300-115,200 bit/s)の変更
  • 測定器のネットワークアドレスの変更
  • 診断モード
  • 測定器の識別番号の取得
  • 背景放射線量の差分モードを設定
  • カウント率を背景放射線量として保存
  • 放射線測定器の初期化
  • 放射線測定器の自己診断モード開始
  • 解読不可能な命令の例外を検出

接続回路の例

放射線測定器 BDKG-02 は、電圧 9~30V で動作します。(RS232 タイプは 6-12V ) 電源には、モバイルバッテリーなども利用できます。

放射線量が高くなると消費電力も上がりますが、最大でも 1W 以下です。

放射線測定器への電源供給方法1

外部電源を使う

ACアダプターを使って連続的に安定電源を供給する方法です。バッテリーを使うこともできます。

放射線測定器への電源供給方法2

USBから電源供給

こちらは持ち運び安い方にUSBから電力を使う方法です。USBは通常5Vですので、9Vへ変換が必要になります。変換ケーブル等はご要望に合わせて提供しております。

開発例

検出器モジュールを使って病院施設の放射線モニタリングを行った例です。

放射線モニタリングシステムの開発例

サンプルコード

こちらのサンプルコードは、Linux 版 C言語, Windows 版 .NET C#, .NET VB 、Android 版 Java、Arduino, Lazruiteなどです。
パソコンから放射線測定器のデバイスに USB接続、またはシリアル通信で接続し、線量率(μSv/h)の値を取得するコードとなっています。

/***************************************************************
 * Linux - C言語 サンプルプログラム (命令コマンド部分は購入後に公開しております)
 ***************************************************************/
main(){

  BYTE buffer[BUFFER_SIZE];
  buf[BUF_SIZE];
  ssize_t ret, len, wrlen;
  
  /* 初期化 */
  init();

  /* シリアルポートを読み書き可能な非制御端末 ttyS3 をオープン */
  serial_fd = open(”/dev/ttyS3”, O_RDWR | O_NOCTTY );
  
  /* エラーメッセージの表示 */
  if (serial_fd < 0){ exitfail_errno(”open”); }

  /* 終了シグナルに対してハンドラを設定 */
  set_sig_handler( terminate_sig_list,  ARRAY_SIZE(terminate_sig_list),  terminate_sig_handler);

  /* シリアルポートを設定 */
  setup_serial(serial_fd);

  /* バッファーを0で初期化 */
  clearbytes( buffer, BUFFER_SIZE);

  /* 命令文を格納 */
  buffer[0] = COMMAND_1;
  buffer[1] = COMMAND_2;
  buffer[2] = COMMAND_3;

  /* 命令分を送信 */
  ret = write(serial_fd, buffer, sent );
  if (ret < 0) { exitfail_errno(”write”); }

  /* バッファーを0で初期化 */
  clearbytes( buffer,BUFFER_SIZE);

  /* シリアルポートから読み込み 、5回チャレンジ */
  for(x=0;x<5;x++){
    ret = read(serial_fd, buffer, BUFFER_SIZE);

    if (ret < 0){  /* 受信失敗 */
      if( errno == EINTR){ exitfail_errno(”read”);}
    }else{ /* 受信成功 */
      printbytes(”Received : “, buffer, ret);
      /* 線量率、積算線量、積算時間の表示 */
      if( checker( buffer, sent, ret ) == 1){ 
      	print_R_data( buffer,sent ); break; 
      }else{ 
      	exitfail_errno(”not match”);}
    }
   }
  return EXIT_SUCCESS;

}
'========================================================= '
'                                                          '
'  .NET Visual Bacis 言語サンプルコード (命令コマンド部分は購入後に公開しております)    '
'                                                          '
'========================================================= '

Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.IO.Ports
Imports System.ComponentModel
Imports System.Data
Imports System.Diagnostics
Imports System.Threading
Imports System.Management
Imports USBXpressNET

Namespace BDG_VCS
    Module mainModule
        Sub Main()

            Dim myDevice As New Serial()

            ' デバイスと接続して、命令を送信、受信データを待ちます '
            myDevice.start_serial()
            myDevice.make_command()
            myDevice.send()
            myDevice.ReceivedAction()

        End Sub
    End Module
    
    Class Serial

        Public PACKET_HEAD As Byte = &H55
        Public DEVICE_ID As Byte = &H30
        Public crc As Crc

        Private Const BUFFER_SIZE As Integer = 128
        Private Const WAITTIME As Integer = 5000
        Public writeBuffer As Byte() = New Byte(BUFFER_SIZE - 1) {}
        Public readBuffer As Byte() = New Byte(BUFFER_SIZE - 1) {}
        Public Handle As UInteger
        Public count As Integer

        Public MainEncording As Encoding = Encoding.ASCII

        Public Sub start_serial()

            crc = New Crc()

            Dim devices As Integer = 0
            Dim x As Integer = 0
            Dim productstrings As String = ""

            ' デバイス情報を取得します '
            Dim retVal As ReturnValue = API.GetNumDevices(devices)
            Dim retVal2 As ReturnValue = API.GetProductString(x, productstrings, DirectCast(0, GetProductOptions))
            Debug.WriteLine("SI_RETURN_SERIAL_NUMBER : " & productstrings)
            Dim retVal3 As ReturnValue = API.GetProductString(x, productstrings, DirectCast(1, GetProductOptions))
            Debug.WriteLine("SI_RETURN_DESCRIPTION : " & productstrings)
            Dim retVal4 As ReturnValue = API.GetProductString(x, productstrings, DirectCast(2, GetProductOptions))
            Debug.WriteLine("SI_RETURN_LINK_NAME : " & productstrings)
            Dim retVal5 As ReturnValue = API.GetProductString(x, productstrings, DirectCast(3, GetProductOptions))
            Debug.WriteLine("SI_RETURN_VID : " & productstrings)
            Dim retVal6 As ReturnValue = API.GetProductString(x, productstrings, DirectCast(4, GetProductOptions))
            Debug.WriteLine("SI_RETURN_PID : " & productstrings)

            If devices > 0 Then

                Debug.WriteLine("{0} 個のデバイスが見つかりました !", devices)

                retVal = API.Open(0, Handle)
                If retVal = ReturnValue.SI_SUCCESS Then

                    ' 無限に待つ場合 Dim inifity As Integer = 0xFFFF; '
                    Dim notinfinity As Integer = 5000
                    '最初、送受信バッファーを空にします '
                    API.FlushBuffers(Handle, True, True)
                    ' 送受信の待ち時間を設定 '
                    API.SetTimeouts(notinfinity, notinfinity)
                    ' ボードレートの設定 '
                    API.SetBaudRate(Handle, 115200)

                Else
                    Debug.WriteLine("デバイスが見つかりません")
                    Environment.[Exit](0)
                End If
            End If
        End Sub
        Public Sub make_command()

            ' 送信コマンドの作成 '
            writeBuffer(0) = PACKET_HEAD
            writeBuffer(1) = COMMAND_1
            writeBuffer(2) = COMMAND_2
            writeBuffer(3) = COMMAND_3
            writeBuffer(4) = crc.makecrc(writeBuffer)
            write_command(writeBuffer)

        End Sub
        Public Sub send()
            Debug.WriteLine("Write: " & Convert.ToString(writeBuffer))
            write_command(writeBuffer)
        End Sub
        Public Sub ReceivedAction()
            ' 受信データの処理 '
            Debug.WriteLine("Read: start index count = " & count)
            Dim ret As ReturnValue = API.Read(Handle, readBuffer, count)
            If ret <> ReturnValue.SI_SUCCESS Then
                Debug.WriteLine("Read is not success !!! {0}", ret)
            Else
                If crc.checkcrc(readBuffer) Then
                    '正しく受信できているので、'
                    Debug.WriteLine("Read:" & BitConverter.ToString(readBuffer, 0, readBuffer.Length))
                    Dim data_printer As New BDG2_data()
                    ' 誤り訂正符号のチェック '
                    If readBuffer(2) = COMMAND_X Then
                        data_printer.command_R(readBuffer)
                    End If
                End If
            End If
            '待ち時間'
            Thread.Sleep(WAITTIME)
        End Sub
        Public Sub write_command(ByVal buffer As Byte())
            'デバイスへの書き込み'
            Debug.WriteLine("Write in byte : " & BitConverter.ToString(buffer, 0, buffer.Length))
            Dim ret As ReturnValue = API.Write(Handle, buffer, count)
            If ret <> ReturnValue.SI_SUCCESS Then
                Debug.WriteLine("Write not success !!! {0}", ret)
            End If
            '待ち時間'
            Thread.Sleep(WAITTIME)
        End Sub
        Public Sub close_serial()
            API.Close(Handle)
        End Sub
    End Class
    
    Class BDG2_data

        Public Sub command_R(ByVal buffer As Byte())
            ' 受信データを出力ロジックをここに書きます '
            ' ..... '
            ' ..... '
            ' ..... '
            ' ..... '
        End Sub
    End Class
        
End Namespace
/***************************************************************
 * .NET C# 言語サンプルコード(命令コマンド部分は購入後に公開しております)
 ***************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Threading;
using System.Management;
using USBXpressNET;   // USBXpressNET ライブラリが使えるようになります。

namespace BDG_VCS
{
    class Program
    {
        static void Main(string[] args)
        {
			// デバイスと接続して、命令を送信、データを受信します。
            Serial myDevice = new Serial();
            myDevice.start_serial();
            myDevice.make_command();
            myDevice.send();
            myDevice.ReceivedAction();
        }
    }
    class Serial
    {
        public byte PACKET_HEAD = 0x55;
        public byte DEVICE_ID = 0x30;
        public Crc crc;

        private const int BUFFER_SIZE = 128;
        private const int WAITTIME = 5000;
        public byte[] writeBuffer = new byte[BUFFER_SIZE];
        public byte[] readBuffer = new byte[BUFFER_SIZE];
        public uint Handle;
        public int count;

        public Encoding MainEncording = Encoding.ASCII;

        public void start_serial()
        {
            crc = new Crc();

            int devices = 0;
            int x = 0;
            string productstrings = "";

			// デバイス情報の取得
            ReturnValue retVal = API.GetNumDevices(out devices);
            ReturnValue retVal2 = API.GetProductString(x, out productstrings, (GetProductOptions)0);
            Debug.WriteLine("SI_RETURN_SERIAL_NUMBER : " + productstrings);
            ReturnValue retVal3 = API.GetProductString(x, out productstrings, (GetProductOptions)1);
            Debug.WriteLine("SI_RETURN_DESCRIPTION : " + productstrings);
            ReturnValue retVal4 = API.GetProductString(x, out productstrings, (GetProductOptions)2);
            Debug.WriteLine("SI_RETURN_LINK_NAME : " + productstrings);
            ReturnValue retVal5 = API.GetProductString(x, out productstrings, (GetProductOptions)3);
            Debug.WriteLine("SI_RETURN_VID : " + productstrings);
            ReturnValue retVal6 = API.GetProductString(x, out productstrings, (GetProductOptions)4);
            Debug.WriteLine("SI_RETURN_PID : " + productstrings);

            if (devices > 0)
            {
                Debug.WriteLine("{0} 個のデバイスが見つかりました !", devices);
                retVal = API.Open(0, out Handle);
                if (retVal == ReturnValue.SI_SUCCESS)
                {
                    int notinfinity = 5000; //int inifity = 0xFFFF;
                    API.FlushBuffers(Handle, true, true); // 送受信バッファーを空にする。
                    API.SetTimeouts(notinfinity, notinfinity); // 送受信の待ち時間の設定
                    API.SetBaudRate(Handle, 115200); // ボードレートの設定
                }
                else
                {
                	// デバイスが見つからない場合
                    Debug.WriteLine("No devices found");
                    Environment.Exit(0);
                }
            }
        }
        public void make_command()
        {
			// 送信コマンドを作成
            writeBuffer[0] = PACKET_HEAD;
            writeBuffer[1] = COMMAND_1;
            writeBuffer[2] = COMMAND_2;
            writeBuffer[3] = COMMAND_3;
            writeBuffer[4] = crc.makecrc(writeBuffer);
            write_command(writeBuffer);
        }
        public void send()
        {
            Debug.WriteLine("Write: " + writeBuffer);
            write_command(writeBuffer);
        }
        public void ReceivedAction()
        {
			// データを受信した場合
            Debug.WriteLine("Read: start index count = " + count);
            ReturnValue ret = API.Read(Handle, ref readBuffer, out count);
            if (ret != ReturnValue.SI_SUCCESS)
            {
            	// 受信失敗の場合
                Debug.WriteLine("Read is not success !!! {0}", ret);
            }
            else
            {
                if ( crc.checkcrc(readBuffer) ) // 誤り訂正符号のチェック
                {
                    Debug.WriteLine("Read:" + BitConverter.ToString(readBuffer, 0, readBuffer.Length));
                    BDG2_data data_printer = new BDG2_data();

                    if (readBuffer[2] == COMMAND_X)
                    {
                        data_printer.command_R(readBuffer);
                    }
                }
            }
            Thread.Sleep(WAITTIME); //待ち時間
        }
        public void write_command(byte[] buffer)
        {
            Debug.WriteLine("Write in byte : " + BitConverter.ToString(buffer, 0, buffer.Length));
            ReturnValue ret = API.Write(Handle, ref buffer, out count);

            if (ret != ReturnValue.SI_SUCCESS)
            {
                Debug.WriteLine("Write not success !!! {0}", ret);
            }
            Thread.Sleep(WAITTIME);//待ち時間

        }
        public void close_serial()
        {
            API.Close(Handle);
        }
    }

    class BDG2_data
    {
        public void command_R(byte[] buffer)
        {
            //  ここに受信データの解析や、出力を記載します。
        }
    }    
}
/***************************************************************
 * Java - Raspberry Pi 言語サンプルコード(命令コマンド部分は購入後に公開しております)
 ***************************************************************/

/*

(1) Change Device PID to 0xEA60. This is enable to work as Serial Device.
Use CP210xSetIDs.exe from silabs.com


(2) Check your Raspberry Pi Kernel has Cp210x driver.
dmesg | grep 210x
lsmod | grep 210x
otherwise, You have to do compile kernel with 
in Kernel configuration, You can find the device at :
Device Drivers -> USB support -> USB Serial Converter support ->
  USB CP2101 UART Bridge Controller

(3) Install library.
sudo apt-get install librxtx-java

(4)
in .bashrc, Add this.
export CLASSPATH=$CLASSPATH:/usr/share/java/RXTXcomm.jar
LD_LIBRARY_PATH=/usr/lib/jni/

(5) compile
javac bdg3.java

(6) execute
java -Djava.library.path=/usr/lib/jni/  jp.taroumaru.bdg3.bdg3

*/



package jp.taroumaru.bdg3;

import gnu.io.*; // こちらは、apt-get で install できる。
//import javax.comm.*; // Sun の Serial ライブラリだが、raspberry では使えない。

import java.io.*;
import java.util.*;


class bdg3 implements SerialPortEventListener {


    private SerialPort port;
    private InputStream inputStream;
    static OutputStream outputStream;
    private static BufferedReader reader;
    private static bdg3 obj;
    private byte[] cmd = new byte[5];
    
    bdg3() {
        try {
            
        	// シリアルポートの初期化
        	Enumeration portList = CommPortIdentifier.getPortIdentifiers();

            while (portList.hasMoreElements()) {
            	CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
                if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                
                     // シリアルデバイス Raspberry Pi で割り当てられたデバイスを探す
                     // dmesg | grep 210x で探せます。
                     if (portId.getName().equals("/dev/ttyUSB0")) {
                        try {
                        	
                            // デバイスオープン
                            port = (SerialPort)
                            portId.open("serial", 2000);
                        } catch (PortInUseException e) {}
                        try {
                        
                            // 入出力の設定
                            outputStream = port.getOutputStream();
                            inputStream = port.getInputStream();
                            reader = new BufferedReader(new InputStreamReader(inputStream));
                        } catch (IOException e) {}
                        try {
                        
                          // ポートの設定
                        	port.setSerialPortParams(115200,
                                SerialPort.DATABITS_8,
                                SerialPort.STOPBITS_1,
                                SerialPort.PARITY_NONE);
                            port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
                        } catch (UnsupportedCommOperationException e) {}
                        try {
                        
                          // データ(測定値)を受信した時のイベント
                            port.addEventListener(this);
                            port.notifyOnDataAvailable(true);
                        } catch (TooManyListenersException e) {
                            System.out.println("Error: " + e);
                        }
                    }
                }
            }
            


        } catch (Exception e) {
            System.out.println("Error: " + e);
            System.exit(1);
        }
    }
    public static String buffer2str(byte[] buffer) {

		  // Hex の値を画面に表示する
          
		  String bufferstr = "";
		  
	        for (int i = 0;i < buffer.length; i++){
	            bufferstr += String.format("%02x ", buffer[i]);
	        }

	        return bufferstr;
	}
    public void run() {
        try {
            
            // 測定器に、測定値を返信するようにする命令(秘密保持契約書が必要です)
        	cmd[0]=0x00;
        	cmd[1]=0x00;
        	cmd[2]=0x00;
        	cmd[3]=(byte)0x00;
        	cmd[4]=0x00;
        	
            OutputStream out = port.getOutputStream();
            out.write(cmd);
            System.out.println("Write: "+buffer2str(cmd));
            Thread.sleep(3000); 
        	port.close();

        } catch (Exception e) {
            System.out.println("Error: " + e);
        }
    }

    public void serialEvent(SerialPortEvent event) {
    
      // データ(測定値)を受け取ったときのイベント
    
        if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
        	byte[] readBuffer = new byte[30];
            try {
               // read data
               while (inputStream.available() > 0) {
                  int numBytes = inputStream.read(readBuffer);
               } 
               System.out.println("Read: "+buffer2str(readBuffer));
            } catch (IOException e) {}
        }
    }

    public static void main(String arg[]) {
       
        // 実行します。
    	obj = new bdg3();
    	obj.run();
    }
}
/***************************************************************
 * Android サンプルコード(命令コマンド部分は購入後に公開しております)
 ***************************************************************/

package com.example.bdg_for_android;

public class MainActivity extends Activity {

    private final String TAG = MainActivity.class.getSimpleName();
    private TextView tvMsg;

    private static UsbSerialPort sPort = null;
    private SerialInputOutputManager mSerialIoManager;
    private PendingIntent mPermissionIntent = null;

    private final SerialInputOutputManager.Listener mListener =
            new SerialInputOutputManager.Listener() {

                public void onNewData(final byte[] data) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

			    //データを受信後、誤り訂正符号のチェック
                            if (crc.checkcrc(data)){
                                updateReceivedData(data);
                            }
                        }
                    });
                }
            };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvMsg = (TextView)findViewById(R.id.tvMsg);


	//デバイスと接続
        if( connectUSB() ) {

	    //命令を送信
            send();
            
        }
    }


    private boolean connectUSB(){

        // デバイス情報の取得
        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);

        UsbSerialProber prober = new UsbSerialProber(customTable);
        List availableDrivers = prober.findAllDrivers(manager);

        if (availableDrivers.isEmpty()) {
            tvMsg.setText("No available drivers.");
            return false;
        }

        UsbSerialDriver driver = availableDrivers.get(0);

        // 接続の許可
        if (mPermissionIntent == null) {
            mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent("USB_PERMISSION"), 0);
        }
        manager.requestPermission(driver.getDevice(), mPermissionIntent);
        if (!manager.hasPermission(driver.getDevice())) {
            tvMsg.setText("The driver does not have permission.");
            return false;
        }

        UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
        if (connection == null) {
             tvMsg.setText("Can not open a connection to the driver.");
            return false;
        }

        // Open port
        List myPortList = driver.getPorts();
        sPort = myPortList.get(0);
        try {
            sPort.open(connection);
            sPort.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
        } catch (IOException e) {
            tvMsg.setText("Error opening device: " + e.getMessage());
            try {
                sPort.close();
            } catch (IOException e2) {
                // Ignore.w
            }
            sPort = null;
            return false;
        }

        onDeviceStateChange();
        return true;

    }

    private void send() {

	// 送信コマンドを作成
        writeBuffer[0] = PACKET_HEAD;
        writeBuffer[1] = COMMAND_1;
        writeBuffer[2] = COMMAND_2;
        writeBuffer[3] = COMMAND_3;
        writeBuffer[4] = crc.makecrc(writeBuffer);


        try {
            sPort.write(writeBuffer, writeBuffer.length);
        } catch(IOException e){
            Log.e(TAG,e.getMessage());
        }

    }

    private void updateReceivedData(byte[] buffer) {

	// データを受信した場合
        ByteBuffer buffer_wrap = ByteBuffer.wrap(buffer).order(ByteOrder.LITTLE_ENDIAN);

        final String message;
        message = "Statistics : " + der_statistics + "\n"
                + "Dose rate  : " + (String.format("%.2f μSv/h", der)) + "\n"
                + "Dose       : " + (String.format("%.3f mSv", de)) + "\n"
                + "Dose       : " + (String.format("%.3f μSv", de_uSv)) + "\n"
                + "Dose time  : " + (String.format("%d second", de_second)) + "\n";

        tvMsg.setText(message);

    }

}
/***************************************************************
 * Arduino UNO 用のサンプルコード(命令コマンド部分は購入後に公開しております)
 *
 *  Arduino UNO は、ハードウェアシリアルポートが一つだけなので、
 *  ハードウェアシリアルポート(ボーレート 115,200) を測定器に利用、
 *  Windows のCOMポートに割り当てられたシリアルモニターが使えなくなるため、
 *  結果の表示に、SoftwareSerial mySerial(11, 12); // RX, TX を利用しました。
 *
 *  [ Arduino UNO ] --- [UART-RS485変換チップ] ----RS485ケーブル--- [ 測定器 ]
 *      |
 *      |
 *      +------[Serial USB変換器]-----[Windows PC]
 *
 ***************************************************************/


// for Arduino UNO

#include <SoftwareSerial.h>

#define PIN_RTS 3
#define BUFFER 30
int del=100;

SoftwareSerial mySerial(11, 12); // RX, TX

void setup() {
  
// 測定器は、115200 のボーレートが必要なため、Serial を利用。
  Serial.begin(115200);

// 動作結果の表示は、ソフトウェアシリアルを利用する。
// パソコン等につないで、teraTerm で結果を表示する。
  mySerial.begin(9600);

// RS485の送信・通信の制御ピン
  pinMode(PIN_RTS, OUTPUT);
}
void printbyte( byte *cmd, int length ){

// Byte の配列を hex の形で表示する
  int i;
  
  for(i=0;i<length;i++){
    if( ( cmd[i] >> 4 ) == 0 ){
      mySerial.print("0");
    }
    mySerial.print(cmd[i],HEX);
    if( i<length-1 ){
      mySerial.print(",");
    }
  }
  mySerial.print("\r\n");
  
}
void print_der(byte *buf){

  float der;
  int stat;

  union u_tag {
     byte b[4];
     float fval;
  } u;

  stat = buf[4+21];
  u.b[0] = buf[4+14];
  u.b[1] = buf[4+15];
  u.b[2] = buf[4+16];
  u.b[3] = buf[4+17];

  der = u.fval;

  mySerial.print(der,3);
  mySerial.println( " uSv/h");
  
  mySerial.print(stat,DEC);
  mySerial.println( " %");
   
}
void loop() {

  byte cmd[5] = { /* 通信仕様のコマンド */0x00, 0x00, 0x00, 0x00, 0x00 };
  byte txbuf[BUFFER];
  int i;

// データの書き込み
    mySerial.println("Writing..");
    printbyte(cmd,5);
    
    digitalWrite(PIN_RTS, HIGH);
    
    // RTS(送受信制御)を切り替えた後、少し時間を置いた方がよい
    delayMicroseconds(120); 
    
    for(i=0;i<5;i++){
      Serial.write(cmd[i]);
    }
    // 送信後に、少し時間を置いた方がよい
    delayMicroseconds(400);
    digitalWrite(PIN_RTS, LOW);
    
    // RTS(送受信制御)を切り替えた後、少し時間を置いた方がよい
    delay(15);

// データの受信
    i=0;
    for(i=0;i<BUFFER;i++){
      txbuf[i]=Serial.read() ;
    }
    printbyte(txbuf,BUFFER);
    print_der(txbuf);
  
    delay(1000);

}

プログラム開発では、様々なプログラム言語で接続できるようにサポートしております。

高耐久・放射線測定器モジュールシリーズ

こちらの機種は、耐久性を高めた仕様をもつ放射線測定器・検出器モジュールです。

BDKG-22

ガンマ線・高耐久GM菅

ガイガーカウンター検出器
ガンマ線量率 積算線量 CPS値 耐振動 高耐久EMI 防水IP67 高温70度 RS485 シリアル通信

高い耐久性のあるエネルギー補償型GM菅を採用した高耐久ガンマ線・線量率モジュールのベーシックタイプです。

GM菅・ガイガーカウンター検出器の詳細

BDKG-23/1

ガンマ線・100 Sv/h 超高線量・高耐久GM菅

ガイガーカウンター検出器
ガンマ線量率 積算線量 CPS値 超高線量 100 Sv/h 耐振動 高耐久EMI 防水IP67 高温70度 RS485 シリアル通信

高い耐久性のあるエネルギー補償型GM菅を2つ搭載し、100 Sv/h の高線量まで測定できる高耐久ガンマ線・線量率モジュールのベーシックタイプです。

超高線量対応のGM菅検出器の詳細

BDKG-23

空気カーマ率の測定・100 Gy/h 超高線量・高耐久GM菅

ガイガーカウンター検出器
空気カーマ率 積算カーマ CPS値 耐振動 高耐久EMI 防水IP67 高温70度 RS485 シリアル通信

空気カーマ率を測定するため開発者・シリアル検出器の高い耐久性のあるエネルギー補償型GM菅を2つ搭載し、100 Sv/h の高線量まで測定できる高耐久ガンマ線・線量率モジュールのベーシックタイプです。

空気カーマ率・放射線測定モジュール

たろうまるの安心サポート体制

高性能な放射線測定器を、ずっと安心してお使いいただくために、最高のサービスを提供したいと考えています。
いつでもご遠慮なくお問い合わせください。

校正と点検

たろうまるは、正規販売店です。

測定器の販売、点検・校正、技術サポートまで、メーカーの技術者から教育を受けたスタッフが対応しております。 購入頂いた線量計、放射線測定器、サーベイメーター、食品用放射線測定器は たろうまるを経由して、メーカーでの修理、点検、校正を行うことができます。

安心の修理体制

メーカー保証期間、保証後も、修理は承っております。

修理品の送料につきまして、
弊社側からの発送の場合は弊社負担、お客様側からの発送については、お客様のご負担となります。あらかじめご了承ください。

サポート

すべての製品は、10年間以上利用されることを想定した耐久性のある設計です。 お求めいただく測定器は、長い期間お使いいただく製品になります。

たろうまるでは、お客様が製品を使用している間ずっとサポートを行っていく体制をとっております。 使い方、修理、校正、点検など、あらゆる場面において技術スタッフが、いつでも対応しております。

シリアル通信・放射線測定器モジュール BDKG-02 仕様

  • 写真

    Atomtex BDKG-02 - シリアル接続放射線測定器
  • 壁付け金具

    Atomtex BDKG-02 - 壁固定金具
    (オプション)
  • 製品の分類

    • 線量計
    • 積算線量の測定
    • 空間線量率
    • CPS値の測定
    • シリアル・放射線測定器
    • モニタリング用の放射線測定器
  • 検出器

    GM菅
  • エネルギー範囲

    60keV~3MeV
  • 線量率の測定範囲

    0.1μSv/h~10Sv/h
  • エネルギー依存性

    -20~+35
  • 感度

    4cps/(μSv/h)
  • 通信プロトコル

    Modbus RTU形式に準拠
  • ボーレート 

    300~115,200 bit/s
  • 電源電圧

    • RS485 : 9~30V
    • RS232 : 6~12V
  • 消費電力 

    1W以下
  • 動作温度

    -40~50
  • 防水・防塵

    IP 57
  • サイズ

    Φ 55 x 260mm
  • 重さ

    0.5kg
  • 保証

    • メーカー保証1年
    • 初期動作保証
  • ダウンロード

  • 開発サンプルコード 

    • Linux - C言語等
    • Windows - .NET Visual Basic
    • Windows - .NET C#
    • Android - Java
  • Windows 対応

    Windows 10, 11~
    Windows 11対応
  • Android 対応(要変換器)

    • Bluetooth LEは 4.0 以上
    • OTG USB接続は対応可能
    Android 対応
  • 校正

    照射・線量率 単位
    0.7 μSv/h
    7 μSv/h
    70 μSv/h
    0.7 mSv/h
    7 mSv/h
    70 mSv/h
    0.7 Sv/h
    7 Sv/h
  • 校正・試験所規格

    ISO 17025