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

高感度+高線量測定

BDKG-24 は、高感度検出器でありながら、高線量1 Sv/hまで測定できるバランスのとれた放射線測定モジュールの1つです。

感度が高い=放射線を捕まえる能力が高いため、低線量でも短時間で測定できます。

車やドローンなど移動しながら測定する場合でも、短時間で測定できる性能によって測定もれが発生しません。毎秒ごとに精度の高い放射線測定ができます。

開発サポート

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

Windows, Mac, Linux, Android, iPhone などシリアル接続ができるデバイスから命令を送信することで、独自のアプリ開発が行えます。

Windows C#, Android Java などのサンプルプログラムも提供しております。簡単なプログラムで放射線測定器を使ったモニタリングシステムを構築できます。

無線化とModbus

通信方式は、Modbus RTSです。この方式は工場などで稼働する産業用ロボットや制御機器に利用されている標準的な通信方法であるため、 測定器の有線ケーブルを無線化するための様々な機器を利用することができます。(おすすめの無線機器の例)

複数個所に放射線測定器を設置する場合には、測定器のアドレスを1,2,3.. と変えていくことで単一ネットワーク内に最大255台の測定器を設置することができます。

変換にも対応

BDKG-24は、RS232通信です。市販のシリアル変換器を利用することで、 USB, RS485, Bluetooth LowEnergy といった別のシリアル接続に変換することも可能です。 ケーブル設置が難しい施設の場合には、 940MHz 帯の無線機に接続することで直線距離で1km ほど伝送することもできます。

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

シリアル通信の仕組み

この3ステップを繰り返すことで、定期的に測定値を取得することができます。

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

1

命令を送信

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

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

測定値を受け取る

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

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

アプリに表示

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

放射線の測定値

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

  • 測定単位の切替( Sv, Rem )
  • 線量率 [Sv/h]
  • 線量率の偏差[%]
  • CPS
  • 平均CPS
  • CPSの偏差[%]
  • 積算線量 [Sv]
  • 積算時間 [秒]
  • 積算線量を0にリセット
  • 探索モードでの CPS 基準を保存
  • 探索モードの ON/OFF
  • 探索アラーム音の ON/OFF
  • 背景放射線の差分モード ON/OFF
  • 診断モード
  • 測定器の識別番号の取得
  • 背景放射線量の差分モードを設定
  • カウント率を背景放射線量として保存
  • 放射線測定器の初期化
  • 放射線測定器の自己診断モード開始
  • 解読不可能な命令の例外を検出
  • CRC符号の追加

接続回路の例

電源として ACアダプターで6~40V の直流電源が必要です。

電源には、モバイルバッテリーなども利用できます。放射線量が高くなると消費電力も上がりますが、最大でも 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);

}

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

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

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

安心の修理体制、修理期間は代替器を無料レンタル

メーカー保証期間、保証後も、修理の場合には、いつでも代替器を提供しております。

お客様のご負担を最小限にして、いつでも高性能な放射線の測定器を安心してご利用頂きたいという想いから、弊社サポートスタッフで考えた 代替器の無料サービスです。代替器はPM1610です。

修理の際の送料は、お客様側からの発送については、修理品、代替器ともに、お客様のご負担となります。たろうまるからの発送分は、弊社の負担で行う形になりますので、あらかじめご了承ください。

校正と点検

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

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

サポート

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

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

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

  • 写真

    Atomtex BDKG-24 - シリアル接続放射線測定器
  • 製品の分類

    • 高線量向け・放射線測定器
    • 線量計
    • 空間線量率
    • CPS値の測定
    • シリアル・放射線測定器
    • ロボット・ドローン用の放射線測定器
  • 検出器

    人体組織等価・プラスチック型シンチレーション検出器
  • 検出器の容量

    Φ50 x 40mm
  • エネルギー範囲

    25keV~10MeV
  • 線量率の測定範囲

    0.03μSv/h~1Sv/h
  • 線量率の固有相対誤差

    ±20
  • ボーレート 

    300~230,400 bit/s
  • 積算線量の測定

    0.1nSv~100Sv
  • 積算線量の固有相対誤差

    ±20
  • エネルギー依存性

    ±25 (25keV~3MeV)
    ±40 (3~10MeV)
  • 感度

    241Am3,200cps/(μSv/h)
    137Cs530cps/(μSv/h)
    60Co270cps/(μSv/h)
  • シリアル接続

    RS232のみ
  • 通信プロトコル

    Modbus RTU形式に準拠
  • 電源電圧

    6~40V
  • 消費電力 

    0.3W以下
  • 校正

    照射・線量率 単位
    0.07 μSv/h
    0.7 μSv/h
    7 μSv/h
    70 mSv/h
    0.7 mSv/h
    7 mSv/h
    70 mSv/h
    0.7 Sv/h
  • 動作温度

    -50~50
  • 動作湿度

    -40~70
  • 防水・防塵

    IP 64
  • サイズ

    Φ 60 x 205mm
  • 重さ

    0.5kg
  • 保証

    • メーカー保証1年
    • 初期動作保証
  • 取扱説明書

  • ダウンロード

  • 開発サンプルコード 

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

    Windows 10, 11~
    Windows 10対応
  • Android 対応

    • Bluetooth LEは 4.0 以上
    • OTG USB接続に対応
    Android 対応
  • 国際規格

    • GOST 30804.4.2-2013
    • Rohs
  • 校正・試験所規格

    ISO 17025