アーカイブ

TE、次世代ジャイロ安定化「AXISENSE-Gダイナミック傾斜センサ」を発表

TE Connectivityは、AXISENSE-Gダイナミック傾斜センサを設計した。ジャイロスコープ補正を使用したこの次世代傾斜センサは、強力なMEMSセンシング エレメントと最先端のフィルタリングを組み合せて、安定した高精度の傾斜出力を実現するという。

高所作業車および農業・建築車両の世界的な安全規定は、かつてないほど厳格化されていまる。溝を掘削する掘削機から作業者がチェリーを摘んだり架線を設置したりするためのブーム式リフトまで、傾斜センサは大きな動きを伴う過酷な環境下でも、安全性と稼働時間の増加を確実に満たすために役立つものである。

■AXISENSE-Gダイナミック傾斜センサの主な利点
●センサフュージョン – AXISENSE-Gは加速度、回転速度と温度を測定するセンサを組み合わせて使用する。アルゴリズムはこちらのデータを使用して精度の高い、迅速な出力信号を計算する。
●カスタムフィルタリングおよび信号処理 – デジタル信号処理には、加速度計とジャイロスコープの出力キャリブレーション、および温度キャリブレーションが含まれる。慎重に設計された信号コンディショニングは、カスタム可能なフィルタレベルと、カスタム可能なノイズ出力オプションを揃えたことにより、このセンサを様々なノイズの多い環境下で使用できる。
●高精度 – TEのAXISENSE-G傾斜センサは 、-40° から 85°Cの幅広い動作温度範囲で高い精度を保つ。静的状態で、精度は±0.5°。動的状態で、精度は±1.5°。AXISENSE-Gは最大±75°のピッチおよびロール角度を同時に測定でき、100ミリ秒未満の高速応答時間で大幅に低いノイズの出力を提供する。
●設置が簡単 –コンパクトなサイズで、衝撃耐性の高いプラスチック筐体を備えたAXISENSE-Gは前世代モデルをそのまま置き換えられる。IP67保護等級により、結露、オイル、グリース、燃料およびその他汚染物質のある過酷な環境下でも優れた保護性能を確保する。CAN J1939およびUSB出力が利用可能。

ニュースリリースサイト:https://prtimes.jp/main/html/rd/p/000000024.000053196.html

従来の約5倍、3,000m級まで地下探査を可能にした超高感度磁気センサ

超電導センサテクノロジー(株)(以下、SUSTEC)が開発した、超高感度な超電導磁気センサを搭載した「電磁探査機器」は、従来の磁気センサの約5倍である3,000m級の深さまで地下探査が可能。また同社の開発した超電導磁気センサによる探査機器はCCSや地熱資源の調査だけでなく、既存油田の有効活用など幅広い用途に活用できるという。

此度SUSTECは、磁気センサによる地下探査技術を世界中で注目されている資源エネルギー開発の巨大なマーケットに活用するため、信頼の置けるパートナー企業とともに、世界に向けビジネスを展開すること目指し、2021年8月3日より株式投資型クラウドファンディングFUNDINNOにおいて、募集案内の事前開示を開始した。
募集期間は2021年8月11日~2021年8月13日、上限とする募集額は 70,020,000円(1口 9万、1人 5口まで)。

SUSTECの強みは、「超電導センシング技術研究組合」として長年、地下探査技術の研究を行なってきたこと。同社は世界トップレベルの探査機器を自社で製造することができる。さらに国内外で複数の特許を取得し、参入障壁を構築している。
今後は国内外の地熱資源開発に貢献しつつ、中東の産油国で既存の油田のCO2圧入モニタリングの実証実験を進め、5年後、10年後は同社の超高感度な超電導磁気センサを使用した探査機器を、資源エネルギー開発のグローバルスタンダードにすることで、企業の成長を目指すという。

ニュースリリースサイト:https://prtimes.jp/main/html/rd/p/000000002.000083997.html

OKI、SABWAYにてAIを用いた感情推定技術を活用した提案型注文システムの実証実験

OKIと日本サブウェイ(同)は、サブウェイ渋谷桜丘店において、OKIの「AIを用いた感情推定技術(以下、感情AI技術)」を活用した「提案型注文システム」の実証実験を開始した。本実証実験では、利用客の興味・関心が高そうな「オススメ」メニューを提案して注文時の迷いを軽減する機能の有効性と、店舗における接客業務の効率化、さらにウィズコロナ時代に求められる非対面・非接触操作による注文の有用性を検証する。

感情AI技術は、深層学習(ディープラーニング)を用いて、人の自然な表情や振る舞いから潜在的な感情を推定する技術。「提案型注文システム」は、OKIの接客支援ミドルウェア「CounterSmart」に搭載した感情AI技術の1つである「興味・関心推定技術」を用い、セルフ注文端末のカメラから得た表情データと視線センサから得た視線データから、独自のアルゴリズムにより、お客様の興味・関心が高そうな「オススメ」メニューを提案して、利用客の注文をサポートする。メニュー選択の迷いを解消することに加えて、注文のしかたがわからないことによる利用客の焦りや緊張の緩和、さらには、注文時間の短縮とスムーズな注文による店舗スタッフの生産性向上とストレス軽減などが期待できるという。

本実証実験では、サブウェイの実店舗において、実験に同意した利用客に実際に注文をしてもらい、その使用感をアンケートにより収集して、サブウェイの注文スタイルに不慣れな利用客でも容易に、かつ非接触操作で安心して注文ができるかを検証する。また、一人あたりの接客対応時間の短縮など、効率化を検証する。

OKIは、注文を完全に自動化した端末において、視線入力や音声入力などを組み合わせた非接触対応を実現することにより、ウィズコロナ時代における感染症予防の「新常態」に適応した新しい接客サービスの提供を目指すとしている。

■実証実験の概要
目的:興味・関心推定技術を用いた提案型注文システムの有効性の検証
期間:2021年8月2日~6日
場所:サブウェイ 渋谷桜丘店
実施方法:当該システムの使用後、アンケート回答
実験参加者:当日募集(先着順)

ニュースリリースサイト:https://prtimes.jp/main/html/rd/p/000000508.000017036.html

ams 、使い捨て内視鏡用にピンの頭ほどのデジタルカメラモジュール「NanEyeM」

ams OSRAMの日本法人、ams ジャパン(株)はNanEyeポートフォリオを拡大し、使い捨て医療用内視鏡用カメラモジュール、NanEyeMを発表した。
NanEyeMは、デジタル内視鏡用カメラモジュールの分野において、現行の市場基準を満たす高解像度を最小サイズで提供する。

気管支鏡などの内視鏡検査では、近年、再使用可能な気管支鏡から使い捨ての気管支鏡への移行が加速しているが、新型コロナウイルスの流行をきっかけに、使い捨て気管支鏡への需要がさらに高まっている。使い捨て用として開発されたNanEyeMは、高レベルの無菌性を確保でき、二次汚染の可能性が低減される。これは、新型コロナウイルスを発症した重篤な患者にとって必要不可欠である。1.0mm×1.0mm×2.7mmの小型サイズで、非常に狭い場所でモジュールを使用することができるという。

◇NanEyeMの構造
このモジュールは、いわゆる「Chip-on-tip」方式を採用している。ここでは、イメージセンサと光学系がデバイスの先端(遠位端)に配置されている。これにより、カメラモジュールが他方の一端、すなわち近位端に配置されている場合に比べて、画質が大幅に向上する。
NanEyeMは、完全に一体化された画像処理モジュールであり、ウェハレベルの多素子光学系により高画質を実現する。これは、近距離での最適なパフォーマンスを実現するために特別に設計されており、広い視野(FoV)と広い被写界深度(DOF)を組み合わせたレンズは、歪みを抑え、鮮明で正確な画像を実現する。
このカメラは、デジタルLVDS(Low Voltage Differential Signaling)シリアルインターフェースを採用しており、高いS/N比(SNR)を提供する。このため、カメラは信号の完全性を損ったり、ノイズを増加させたりすることなく、長尺のケーブルで伝送することができる。
さらにNanEyeMは最大49fps(1秒あたりフレーム数)のフレームレートを誇り、低消費電力を維持しながら、幅広い標準インターフェース上で滑らかかつ遅延の少ない表示を可能にしている。イメージセンサは高感度の画素により、必要な照明が少なくて済み、このことにより、デバイス先端部の発熱が抑えられる。
このモジュールには、顧客の要件に応じて最大3mの長さまでカスタマイズ可能なケーブルが付属。この付属のケーブルを使用することで、内視鏡機器へのスムーズかつシームレスな組み込みを確実に行うことができる。また、先端部にLED光源を追加することも可能。

◇NanEyeMがスペースとコストを節約
NanEyeMの完全デジタル出力は、アナログ-デジタル変換(ADC)がチップ上で行われるため、外部ADCのコストが不要となる。このモジュールは、手術環境における医療機器からの磁気干渉(EMI/EMC)の影響を受けにくいため、同軸ケーブルやシールドケーブルも不要になる。
あらかじめケーブルが接続されているため、追加の取得コストを回避でき、内視鏡の製造コストを削減できる。使い捨て内視鏡にNanEyeMを使用することで、非常に衛生的になるだけでなく、日常の臨床現場でありがちな再使用可能な内視鏡のメンテナンス、再処理、修理のコストを削減することができる。
さらに、次に使用する前に滅菌する必要がないため、いつでも使用可能。このモジュールは、コスト競争力と供給力を確保するために、大量生産を前提に設計されている。

NanEyeMは、ams OSRAMのNanEye2Dの第2世代である。このカメラモジュールは生産が開始されており、注文を受け付けている。

製品詳細情報(ams):https://ams.com/NanEyeM

シングルボードコンピュータの食品成分分析・環境測定への応用(1)

京都大学
大学院農学研究科 助教
小林 敬

1. 背景

近年、各種工業製品において、それらの機器をインターネットとつないで制御する機能が盛んに実装されるようになってきた。これらは一般にInternet of Things (IoT;もののインターネット)と呼ばれている。種々の機器がネットワークに対応することで、機器の制御がより容易になるとともに、機器間の通信による高機能化が図れるなど、様々なメリットがある。そして、今やIoTは家庭用電化製品(家電)からスマートハウスや社会基盤に至るまで、様々な機能を実装する際に必須のものとなりつつある。

一方、IoTで主に対象とされる機器に対してパーソナルコンピュータ(PC)などを適用することは、コストやサイズ、可搬性などを考慮すると不利である。そのような中、安価なシングルボードコンピュータ(SBC)が多種類・多数発売されるようになってきた。SBCはPCなどと比較して一般に小型で安価であり、ワンコイン程度で購入できるものもある。また、低消費電力のものもあり、バッテリ駆動が可能であるなど、IoTを指向する上では非常に都合のよいデバイスである。さらに近年のSBCは非常に高機能化してきており、かつてのPCを上回るパフォーマンスを有する機種も多数存在する。

一般的なSBCにはPC等とは異なり、GPIO(General-Purpose Input/Output、汎用入出力)を備えるものが多い。これはSBCをIoTデバイスとして使用するために非常に強力な武器となる。すなわち、これまでのPCでは非常にハードルの高かった、外部機器の直接制御が非常に簡単に行える。SBCがこのような特徴を有していることから、SBCの使用によりセンサなどの出力を容易に記録する一方、それを加工したり、表示やネットワーク配信したりすることも容易に実現できるようになってきた。このようにして、各種機器をSBC経由でネットワークにつないで連携させ、所望の機能を実現できることが期待されている。

次々に新製品が出る家電などでは広くIoTが普及している。一方、産業用機器などに目を向ければ、更新間隔が長いものが多く、その制御も旧式のPCによるレガシーな通信(RS-232Cなど)を利用するものが多い。そのような中、これらの機器を制御する新たな手段として、GPIOを有し、容易にカスタマイズ可能で、利用までの敷居が低い各種SBCは有望な選択肢である。

産業用機器の一つである化学分析機器についても、最新機器についてはネットワークを介した制御が可能となっている場合が多い。しかし、旧来の機器は専用のPCを用いてスタンドアローンで使用されることが多く、ネットワークを介した制御やデータの取得は事実上不可能な場合が多い。場合によっては、最新ソフトウェアを使用することでネットワーク制御に対応できるが、ソフトウェア導入などに新たなコストがかかる。そして、多くの場合、それらは非常に高価であり、中小企業などでは容易に導入できない。このような場面で、SBCを用いた安価な機器制御システムが開発・提供できれば、分析機器のローコストなネットワーク対応につながる。

本稿では、SBCの活用例として、高速液体クロマトグラフィ(High-Performance Liquid Chromatography、HPLC)記録システムおよび水晶振動子マイクロバランス(Quartz Crystal Microbalance、QCM)記録システムについて述べる。

2. 高速液体クロマトグラフィ記録システムの構築

HPLCは液体試料に溶解している各種化合物の分離・定量手段として幅広く用いられている1)。HPLC機器の制御および機器からのデータ出力を取り扱うソフトウェアは通常、何らかの形で用意されている。しかし、システムとして大がかりな場合もあり、一般に高価である。そこで、筆者は小型で安価なSBCを用いて、機器からのアナログ信号を記録するためのシステムを構築した(図1)。

図1 SBCを利用した分析機器のネットワークを介したデータ収集システム(HPLC、QCM)

アナログ信号をデジタル化し、データとして保存する際の流れは、本システムの場合、以下の通りである。①アナログ信号をデジタルデータに変換する。②SBCによりデジタルデータをネットワーク上でPCから配信する。③PC上でデータ処理ソフトウェアを用いて結果を解析する。

このシステムの詳細を以下に示す。まず、HPLC機器(示差屈折率検出器)からのアナログ出力をADコンバータ(ADC)によりデジタルデータに変換した。アナログ出力は、正または負の電圧である。そこで、これらの入力に対応できるADCを使用した(MAX186、12ビット、逐次比較型、8チャンネル、マキシム)。ADCの制御はSBC の1つであるRaspberry Pi Zero W(ラズベリーパイ財団)を用いて行った。ADCとSBC間の通信にはSPI(Serial Peripheral Interface)規格に準じたシリアル通信を利用した。通信プログラムはC言語で作成し、Wiring Pi(GPIO汎用ライブラリ)を使用して通信を行った。なお、本ADCは8チャンネルの入力が可能であるため、同時に最大8台のアナログ出力を記録できるが、12ビットの分解能でしかデジタルデータ化できない。より分解能の高い24ビット対応品を用いるなどすれば、より精細なクロマトグラムを取得できる。

次に、ADCによりデジタルデータとなった出力電圧をSBCによりネットワーク上で配信できるようにした。得られたデジタルデータをテキスト化し、Webサーバ(lighttpd)により配信し、HTTPプロトコルによりアクセスできる形とした。なお、データのフォーマットは
year month day hour minute second millisecond ch1 ch2 ch3 ch4 ch5 ch6 ch7 ch8 trigger
(chn はチャンネル n の変換結果、triggerはHPLCインジェクタからのスタート信号の入力”O” (open)または”S” (short))の並びとなるようにした。なお、本稿における機器ではデータの暗号化を特に行わなかったが、本格運用を考慮する場合には暗号化は必須である。このサーバを2台作製し、各サーバに複数のHPLC機器からのアナログ出力を接続した。

サーバから配信されたデータをPCで読み取り、クロマトグラムとして可視化した。このデータ処理を行うソフトウェア(以下、クロマトグラム処理ソフト)はWindows上で動作するものとして、C++ Builder 10.4 (エンバカデロ・テクノロジーズ)を用いて開発した。クロマトグラム処理ソフトの仕様として、クロマトグラムを取得し、表示するとともにピーク面積をマニュアル積分により計算できるようにした。

このようにしてHPLC用データ処理システムを構築し、食品成分の分析に供した。図2は、得られたクロマトグラムの一例である。HPLCのデータとして問題の無いレベルでデータ収集ができ、可視化することができた。Webサーバを通じてのデータのやりとりはLAN上で行ったが、サンプリング間隔を200 msに設定したため、データを取りこぼすことはなかった。またネットワーク負荷を測定したところ、0.1 Mbps以下であり、ほとんど問題にならないレベルであった。さらに、筆者所有のPC(Core i7-4790、3.60 GHz、24 GB RAM)を用いてPCへの負荷を計測したところ、CPUの使用率は0.1~0.2%程度、RAMの使用量も10 MB未満であった。一方、SBCのCPU使用率は常時20%前後とやや高かった。このように、データ取得とデジタル化をSBCに任せることができれば、PC側で重い処理を行う必要がなくなる。そして、文書作成などをこなしながらバックグラウンドでデータを収集する作業が可能になる。

図2 取得できたクロマトグラムの一例

本クロマトグラム処理ソフトはWebサーバから得たテキストデータを元にグラフを描くことが第一の目的である。すなわち、HPLCにとどまらず、他の出力形式でもテキストにできれば本ソフトウェアを汎用データロガーとして利用できる。そこで、同じクロマトグラフィの一種であるガスクロマトグラフィーの記録への適用を試みたところ、ソフトウェアに手を加えることなく容易にクロマトグラムを記録できた。このように、SBCベースのサーバとPCの間で単純にテキストが転送できれば、分析機器類を容易にIoTベースの機器に変えることができる。さらに、SBCと分析機器の間のインターフェースさえ整えられれば、旧式のハードウェアからでも容易にデータ取り込みができることにもなる。

次回に続く-



【著者紹介】
小林 敬(こばやし たかし)
京都大学 大学院農学研究科 助教

■略歴
1998年3月 京都大学農学部食品工学科 卒業
2000年3月 京都大学大学院農学研究科 修士課程修了
2003年3月 京都大学大学院農学研究科 博士後期課程修了
2003年4月 大阪市立工業研究所 研究員
2007年4月 京都大学大学院農学研究科 助教。現在に至る。
博士(農学)

感染症対策にも活用できる、シングルボードコンピュータを使った「密」センサ(1)

センサイト協議会
理事
三田 典玄

〔1〕特定の場所の人の「密」を検知し遠隔地に知らせるセンサを試作する

【概要】
※本センサは、小さな筐体の中に、人感センサ(人の「動き」を検知する)、超小型コンピュータ、無線LANインターフェイスを持ち、指定されたインターバルで、インターバル間の人の動きの「数」をカウントすることによって、その場所(最大で半径12m以内の半円)の人の「密」を測ることができます。

※計測された数値は、インターネット上でやり取りされるため、世界中のどこでも、インターネット接続さえあれば、それを知らせ、集計することができます(今後のプログラムの拡張次第です)。また、人が密になって危険な数値になった場合は、その場所の「密アラーム」を出すこともできます(これも、今後のプログラムの拡張次第です)。また、AWSなどのクラウド上にサーバーを別途用意し、そこで動くソフトウエアを開発し、用意すると、数台から数万台の世界各地に散らばった同センサの統計処理も可能です。統計データが集まれば、人が密になる場所の予測などをAIで行うことも可能になります(別途AIソフトウエアの開発が必要)。

※センサは「焦電センサ」と呼ばれる「人体の体温付近を選択的に取得する赤外線センサ」を使うため、センサそのものの価格が低廉(ホームセンターなどで売っているトイレなどの照明の自動点灯につかわれています)で、カメラなどを使う方式とは違い、プライバシーにも配慮がされています。

【特徴】
1.人の「密」を検知します。値は「人の動き」を示すカウント値になります。
2.検知した「密」に対し、カウント値が一定以上であることを検知し、アラームを出せます。
3.統計情報が出せます。
4.リアルタイムでメールなどに知らせることができます。(本試作開発の簡易サーバーの機能)
5.インターネットを通じて、世界のどこでも、人の「密」のデータを知ることができます。
6.必要であれば、センサ側の蓄電池と太陽電池での駆動も可能です(試作品ではこの機能なし)。

【試作品の製造コスト概算】
現在の試作品でのコスト概要は一台あたり以下です。
実際の製品には、美しい画面を作るなど、ソフトウエア開発のコストが別途かかります。

1.人感センサ(約500円)
  Panasonic製の「PaPIRs 12m EKMC1603111」(半径12m用)または、
  Panasonic製の「PaPIRs 5m EKMC160111」(半径5m用)を使用しています。
  ※今回はこのセンサを使いましたが、同様の他社製品もあるはずです。

2.超小型ボードコンピュータ(約¥3,000-)
  Raspberry Pi 3 Model A+を使いました。
  ※Raspberry Piの他のモデルも利用可能ですが、CPUのスピードにより、検知のカウント値が変わります。

3.電源供給用USBケーブル(約¥100-)
4.筐体(約¥800-)
5.他は、政策人件費。ソフトウエアが完備していれば、1台あたり約30分。

以上、人件費を除いた部品代合計は、¥4,400-(量産時は、さらに個々の部品の数量値引きがあるかと思います)

以下、試作品の写真です。ご覧のように、コンピュータに更に小さいものを使うことによって、更に小さなものにできます。消費電力も更に小さくできます。現在の消費電力は5V/0.1Aです。

※一番右の写真は、試作の簡易型ではありますが、メールで10分ごとに送られてくる画面で、メール到着時点から、190分前までの人の動きが見られます。現在のところ、1年間の稼働で問題なく動いています。このインターバルの時間はプログラムで設定できます(試作プログラムの場合)。

【センサ側回路図】

【プログラム利用・改造・発表・商用利用は自由です】

※本ハードウエアの回路図、及びプログラムの改変、改造を歓迎します。
※本プログラム等の資料は、全て「参考」として、使ってください。完全なものではありません。
※本プログラム等は、完全にPublic Domainに置きます。改変、改造には、三田の許可なく行っても問題はありません。
※実際のアラームの設置、アラームの値は、サーバー側のプログラムの改造で行いますが、実機でのテストが必要です。実機によって、カウント数値が変わります。

ちなみに、本試作プログラムとハードウエアでは
– 45カウント以下は、人がいなくてもカウントされる可能性がある。
– カウント数によって、メールの文面、WebのHTMLで検知カウントの評価を変えている表示をしています。
– 本試作プログラムでは、LEDも点灯させており、常時点灯させ、カウントが行われると、LEDが一瞬消える、というようになっています。

この試作プログラムも、この方針で書かれています。

※プログラムはそれぞれ200行以内の小さなものです。十分理解したうえ、必要であれば改造を加えて、自由にお使いください。

【センサ側プログラム(サンプル)】

●Raspberry Pi内でコンパイルするときの簡単なコンパイル用シェルスクリプト
 xxxx.c と tcpcli.c がプログラムです。wiringPiライブラリを使います。

cc xxxx.c tcpcli.c -o xxxx -lwiringPi

●メインプログラム(xxxx.c)


#include <stdio.h>
#include <wiringPi.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

#define PORT (27)
#define LED (29)
#define IPADDR  "192.168.1.4"  // IP Address for Server. Please change this value.
#define TCPPORT (9022)
#define BUFFER_SIZE     (2048)
#define MAX_COUNT       (10000)
#define FETCH_TIME      (600)
#define NOCNT           "NOCNT\0"
#define CNT_BUFFER_SIZE (100)
#define LEDON           (1)
#define LEDOFF          (0)

// #define      DEBUG   1

int     timeover = 0;

extern void     ClientSendData(char *,char *,int);

void    timeisover()
{
timeover = 1;
}

#if 1
void    LEDAction(void)
{
int     fret;

if(0 > (fret = fork())) // fork Error
        exit(1);
else if (0 < fret)      // Parent
        {
        (void)signal(SIGCHLD,SIG_IGN);
        return;
        }
else if(0 == fret)      // Child
        {
        digitalWrite(LED,LEDOFF);
        delay(300);
        digitalWrite(LED,LEDON);
        exit(0);
        }
}
#else
void    LEDAction(void)
{
digitalWrite(LED,LEDOFF);
}
#endif

int main(void){
        int data,datap,i;

#ifndef DEBUG
        if(0 != fork())
                exit(0);
#endif

        if(0 > wiringPiSetup())
                {
                printf("No wiringPi.\n");
                return 1;
                }

        pinMode(PORT,INPUT);
        pinMode(LED ,OUTPUT);

        datap = digitalRead(PORT);
        i = 0;

#ifdef  DEBUG
        printf("Now Status=[%d]\n",datap);
#endif

        (void)signal(SIGALRM,timeisover);
        alarm(FETCH_TIME);
        timeover = 0;

        ClientSendData("00000\0",IPADDR,TCPPORT); // Send Activated Sign for the Server.
        digitalWrite(LED,1);                      // Connection OK. LED ON.

        for(;;){
                if(timeover)
                        {
                        char bufx[CNT_BUFFER_SIZE + 2];

                        sprintf(bufx,"%05d\0",i);               // Counter Value writeout.
                        i = 0;                                  // Counter Reset.
                        ClientSendData(bufx,IPADDR,TCPPORT);    // Send Data to Server.
#ifdef DEBUG
                        printf("SEND[%s]\n",bufx);
#endif
                        (void)signal(SIGALRM,timeisover);       // Set next signal.
                        alarm(FETCH_TIME);                      // Set next fetch time.
                        timeover = 0;                           // Reset TIMEOUT flag.
                        continue;
                        }

                data = digitalRead(PORT);

                if(datap != data)
                        {
                        char    buffer[BUFFER_SIZE +2];

                        datap = data;

                        if(data != 0)
                                {
                                i++;
#ifdef  DEBUG
                                printf("[%06d]GPIO%d = %d\n",i,PORT,data);
#endif
                                LEDAction();
                                }
                        }
        }
        return 0;
}


●メインプログラム内部で使われているサーバーとの通信部分のプログラム(tcpcli.c)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

/* Global valiables */

struct sockaddr_in client_addr; // write socket

/*
        Connect to Server
*/

int     ConnectServer(char *ipaddr, int port)
{
int     sockfd;         // Listen Socket File Descripter

if(0 > (sockfd = socket(PF_INET, SOCK_STREAM,0))) // Make Socket
        {
        perror("reader: socket");
        return (-1);
        }

bzero((char *)(&client_addr),sizeof(client_addr));      // clear struct for read
client_addr.sin_family = PF_INET;                       // set value to struct
client_addr.sin_addr.s_addr = inet_addr(ipaddr);       // set value to struct
client_addr.sin_port = htons(port);                     // set value to struct

if(0 > connect(sockfd,(struct sockaddr *)(&client_addr),sizeof(client_addr)))
        {
        perror("Client: Cannot Connect\n");
        close(sockfd);
        return (-1);
        }

return sockfd;
}

/*
        Send Data to Server
*/

int     SendDataToServer(int fd,char *data,int datalen)
{
if(0 > write(fd,data,datalen))
        {
        perror("Client: Cannot Send.\n");
        close(fd);
        return (-1);
        }

return datalen;
}

/*
Client systen Send Data
*/

int     ClientSendData(char *bufx,char *ipaddrx,int portx)
{
int     sockax;
int     len;
char    cntbuff[256];

if(0 > (sockax = ConnectServer(ipaddrx,portx)))
        {
        printf("CLIENT: Cannot Connect Server.\n");
        return(-1);
        }

len = strlen(bufx);
sprintf(cntbuff,"%-6d\0",len);

SendDataToServer(sockax,cntbuff,CNTLEN);        // Send Data Length.
SendDataToServer(sockax,bufx,len);              // Send data.
close(sockax);                                  // Close Socket.
return len;
}

※コンパイル時に若干Warninngが出ます。これは、TCP/IPのライブラリの新旧によるもので、通常は問題なく動きますが、問題がある場合はWarninngが出た部分を書き換えてください。

【サーバー側プログラム(サンプル)】

●コンパイルのためのシェルスクリプト

cc xxxx.c tcpserv.c -o xxxx

プログラムは「xxxx.c」と「tcpserv.c」、出来上がるバイナリプログラムは「xxxx」です。

●メインプログラム(xxxx.c)

※ヘッダの部分は各自の環境に合わせて書き換えてください。望むべくは、外部パラメータにして、設定するように、プログラムを書き換えたいですが、今回は緊急なので、エッセンスをわかっていただくためにも、簡単なプログラムにしています。


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <string.h>

// #define      DEBUG   1               // If debug, Set 1

#define PORT            (9022)
#define LOW_VALUE       (45)

extern int      ServerInit(int);
extern int      WaitIncomming(int);
extern void     ServerReadDatas(char *,int);
extern char     *AcceptedIP;

#define         BUFFER_SIZE     (2048)
#define         FETCH_TIME      (600)   // fetch time is 1-min
#define         HTML_FILE       "/var/www/xxxx/human/index.html"        // Result HTML file
#define         HTML_URL        "http://xxxx.or.jp/human/index.html"    // Result HTML URL
#define         EMAIL_FILE      "/home/xxxx/human/email"                // Email text temporaly file
#define         TO_LINE         "To:%s\n"
#define         TO_ADDRESS      "xxxx@xxxx.com"                         // Email Send to xxxx@xxxx.com
#define         FROM_LINE       "From:%s\n"
#define         FROM_ADDRESS    "yyyy@yyyy.com"		// Email From Address
#define         SUBJECT_LINE    "Subject:%s\n"
#define         SUBJECT         "Human Moving Report"
#define         NOCNT           "NOCNT\0"
#define         NOT_ACTIVE      (2)
#define         ACTIVE          (500)
#define         CNTBUF_NUM      (20)
#define         BAR_LEN         (100)
#define         BAR_RATE        (100)
#define         NETSTAT_FILE    "/home/xxxx/human/netstat.txt"          // Netstat temporaly file
#define         NETSTAT_COMMAND "/bin/netstat -t -n | /bin/grep 192.168.1 | /bin/grep %d > %s"
int             cntbuf[CNTBUF_NUM];

void    Clearcntbuf(void)
{
int     i;

for(i = 0 ; i < CNTBUF_NUM ; ++i)
        cntbuf[i] = 0;
}


// SendEmail Real

/*
        Send E-Mail
*/


void    SendEmail(char *body)
{
FILE    *fp;
FILE    *fpin;
int     i;
char    EmailCommandLine[BUFFER_SIZE + 1];

if((FILE *)NULL == (fp = fopen(EMAIL_FILE,"w")))
        {
        printf("Cannot open Email File[%s]\n",EMAIL_FILE);
        exit(1);
        }

sprintf(EmailCommandLine,NETSTAT_COMMAND,PORT,NETSTAT_FILE);
system(EmailCommandLine);

if((FILE *)NULL == (fpin = fopen(NETSTAT_FILE,"r")))
        {
        printf("Cannt Open NETSTAT_FILE[%s]\n",NETSTAT_FILE);
        exit(1);
        }

fprintf(fp,TO_LINE,TO_ADDRESS);
fprintf(fp,FROM_LINE,FROM_ADDRESS);
fprintf(fp,SUBJECT_LINE,SUBJECT);
fprintf(fp,"\n\n");

for(i = 0;i < 100 ; ++i)
        {
        char *pp;
        char NetstatLine[BUFFER_SIZE];

        if((char *)NULL == fgets(NetstatLine,BUFFER_SIZE,fpin))
                {
                fclose(fpin);
                break;
                }
        else
                {
                fprintf(fp,"%s",NetstatLine);
                }
        }

fprintf(fp,"\n\n");
fprintf(fp,"%s\n\n%s\n\n.\n\n",body,HTML_URL);

fclose(fp);

sprintf(EmailCommandLine,"/usr/sbin/sendmail %s < %s",TO_ADDRESS,EMAIL_FILE);
system(EmailCommandLine);
}

// Send Email Interval

void    SendEmailInterval(int mincnt)
{
char    buffern[BUFFER_SIZE + 2];
char    *p;
time_t  now;
char    *nowtime;

(void)time(&now);               /* Get time for now */
nowtime = ctime(&now);          /* convert to strings */

for(p = nowtime ; (*p) != (char)0 ; p++)
        if((char)('\n') == (*p))
                {
                *p = (char)0;
                break;
                }

#ifdef DEBUG
printf("[%s] Count=%d in %d sec.\n",nowtime,mincnt,FETCH_TIME);
#endif

if(NOT_ACTIVE > mincnt)
        sprintf(buffern,"[%s] NOT-ACTIVE: X In %d sec. there are %d actions.\n",nowtime,FETCH_TIME,mincnt);
else if(ACTIVE > mincnt)
        sprintf(buffern,"[%s] ----ACTIVE: *** In %d sec. there are %d actions.\n",nowtime,FETCH_TIME,mincnt);
else
        sprintf(buffern,"[%s] EXT-ACTIVE: ***** In %d sec. there are %d actions.\n",nowtime,FETCH_TIME,mincnt);

SendEmail(buffern);
}

// Make Web Pages

void    MakeWebPage(int cnt_fetch)
{
FILE    *fp;
time_t  now;
char    *nowtime;
char    *p;
int     i;

for(i = (CNTBUF_NUM - 1) ; i > 0 ; --i)
        cntbuf[i] = cntbuf[i - 1];

cntbuf[0] = cnt_fetch;

if((FILE *)NULL == (fp = fopen(HTML_FILE,"w")))
        {
        printf("Cannot open FILE[%s]\n",HTML_FILE);
        exit(1);
        }

fprintf(fp,"\n");
fprintf(fp,"\n");
fprintf(fp,"\n",FETCH_TIME);
fprintf(fp,"Human Alive Check\n");
fprintf(fp,"\n");
fprintf(fp,"\n");

(void)time(&now);               /* Get time for now */
nowtime = ctime(&now);          /* convert to strings */

for(p = nowtime ; (*p) != (char)0 ; p++)
        if((char)('\n') == (*p))
                {
                *p = (char)0;
                break;
                }

for(i = 0 ; i < CNTBUF_NUM ; ++i)
        {
        int blen;
        char bar[BAR_LEN + 2];
        int ix;

        if(LOW_VALUE >= cntbuf[i])
                {
                bar[0] =(char)('-');
                bar[1] =(char)0;
                }
        else if(BAR_RATE > cntbuf[i])
                {
                bar[0] = (char)0;
                }
        else
                {
                blen = cntbuf[i] / BAR_RATE;

                for(ix = 0 ; ix < blen ; ++ix)
                        {
                        bar[ix] = (char)('*');
                        }

                bar[blen] = (char)0;
                }
        fprintf(fp,"[%03d min ago] [%06d] %s
\n",(i * 10),cntbuf[i],bar); } fprintf(fp,"
\n"); fprintf(fp,"IP=[%s]",AcceptedIP); fprintf(fp,"
\n"); if(0 < cnt_fetch) fprintf(fp,"** [%s] ALIVE. COUNT=[%d]

\n",nowtime,cnt_fetch); else fprintf(fp,"** [%s] NOT ALIVE?

\n",nowtime); fprintf(fp,"\n"); fprintf(fp,"\n"); fclose(fp); } // TIMEOUT FUNCTION int main() { int socka,sockb; char buffer[BUFFER_SIZE+2]; #ifndef DEBUG if(0 != fork()) /* if it's a parent, then quit */ exit(0); #endif Clearcntbuf(); /* Count Buffer Clear */ for(;;) { if(0 > (socka = ServerInit(PORT))) { printf("cannot init TCP/IP.\n"); exit(1); } if(0 > (sockb = WaitIncomming(socka))) { printf("No Datas.\n"); exit(1); } ServerReadDatas(buffer,sockb); #ifdef DEBUG printf("[%s]\n",buffer); #endif close(socka); close(sockb); SendEmailInterval(atoi(buffer)); MakeWebPage(atoi(buffer)); } }

●通信部分プログラム(tcpserv.c)


/*  TCP Server */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <malloc.h>

int     writer_len;     // Data Write Length
struct sockaddr_in reader_addr; // read socket
struct sockaddr writer_addr; // write socket
int     readedbytes;
int     readbytes;
char    *p;
char    AcceptedIP[256];

#define CNT_BYTES       (6)
#define TESTPORT        (8001)

/*
        Read specified bytes from client
*/

void    ReadBytes(int fd,char *buff,int bytes)
{
int     readbytes;
int     readedbytes;
char    *p;

p = buff;
readbytes = bytes;
readedbytes = 0;
bzero(buff,bytes);

for(;;)
        {
        if(0 > (readedbytes = read(fd,p,readbytes)))
                {
                printf("ReadError in Line %d.\n",__LINE__);
                }

        if(bytes > readbytes)
                {
                p = p + readedbytes;
                readbytes = readbytes - readedbytes;
                }
        else
                break;
        }
}

/*
        Server Ready
*/

int     ServerInit(int port)    // return Socket
{
int     yes = 1;
int     usv;
int     sockfd;

if(0 > (sockfd = socket(PF_INET, SOCK_STREAM,0))) // Make Socket
        {
        perror("SERV: reader: socket");
        return -1;
        }

bzero((char *)(&reader_addr),sizeof(reader_addr));      // clear struct for read
reader_addr.sin_family = PF_INET;                       // set value to struct
reader_addr.sin_addr.s_addr = htonl(INADDR_ANY);        // set value to struct
reader_addr.sin_port = htons(port);                     // set value to struct

setsockopt(sockfd,
 SOL_SOCKET,SO_REUSEADDR,(const char *)&yes,sizeof(yes));       // Set Socket options

if(0 > bind(sockfd,(struct sockaddr *)(&reader_addr),sizeof(reader_addr)))      // set bind
        {
        perror("SERV: reader: bind");
        return -1;
        }

if(0 != listen(sockfd,50))      // wait the connection
        {
        perror("SERV: reader: listen");
        close(sockfd);
        return -1;
        }

return sockfd;
}

int     WaitIncomming(int waitsock)
{
int     new_sockfd;


writer_len = sizeof(writer_addr);


if(0 > (new_sockfd = accept(waitsock,(struct sockaddr *)(&(writer_addr)),(socklen_t *)(&(writer_len)))))
        {
        perror("SERV: reader: accept");
        return(-1);
        }

bzero(AcceptedIP,255);
// (void)strcpy(AcceptedIP,(char *)inet_ntoa(writer_addr.sin_addr));

return new_sockfd;
}

void    ServerReadDatas(char *DataBuffer,int fda)
{
int     cnt;
int     len;
char    counter[CNT_BYTES+2];

ReadBytes(fda,counter,CNT_BYTES);
counter[CNT_BYTES]=(char)0;
len = atoi(counter);

ReadBytes(fda,DataBuffer,len);
DataBuffer[len] = (char)0;
}

※プログラム内にコメントアウトした行、デバッグメッセージなどが残っています。

次回に続く-



【著者紹介】
三田 典玄(みた のりひろ)
一般社団法人 センサイト協議会 理事
株式会社オーシャン IoT事業推進部長

■略歴
東海大学工学部通信工学科卒業 ( アモルファス半導体物性専攻 ) 工学士
1986年 株式会社アスキーより「入門 C 言語」執筆/出版。
     コアダンプ者創業。同社専務取締役(後に代表取締役)
〜2000年 以降、「実習C言語」「応用C言語」を続けて執筆・出版。
     日本国内合計約100万部。
     韓国戦後初の日本人が著者の大学の教科書として翻訳・採用。
1996年 東京大学先端科学技術センター 協力研究員。
2002年 独立行政法人・産業技術総合研究所 特別研究員(生命科学)
〜2003年 技能五輪世界大会・情報技術職種・委員
2006年 台湾新聞・日本語版副編集長
2011年 ジョルダン株式会社(JASDAQ上場)顧問 〜
2013年 韓国・慶南大学 工学部コンピュータ学科 教授 〜2015年
2015年 NPO法人・日本フォトニクス協議会知財戦略専門部会事務局長
     及びITアドバイザー 〜現在著書多数。
2019年 株式会社オーシャン IoT事業推進部長

■知見
日本のインターネットの草分けの一人。
台湾、韓国を中心としたアジア各国の事情に精通。
サイバーセキュリティの専門家として「サイバー戦争」をKindleで出版。
IoTの専門家として「ラズベリーパイ」等IoTの学習者向け書籍をKindleで出版。

センシング技術応用研究会からのご挨拶

センシング技術応用研究会
会長
筒井博司

1.はじめに
センサイトの皆様、2020年よりセンシング技術応用研究会会長に就任いたしました筒井博司と申します。ご挨拶を兼ねて、センシング技術応用研究会の紹介をさせていただきます。
私は神戸大学で計測工学を専攻しました。当時は計測工学とは何ぞや?ケイソツ工学科?という議論から始まり、電気電子・機械から自動制御まで幅広く学びました。
1975年松下電器産業株式会社(現パナソニック)に入社し、中央研究所にて放射線センサの研究からスタートしました。その開発第1号機が米国スリーマイルアイランド原子力発電所事故の被ばく管理に使用され、この放射線センサ及び計測システムはその後チェルノブイリ原子力発電所事故、福島原子力発電所事故においても使用されました。このことをきっかけに、医療・ヘルスケア分野に目覚め、新しいセンシング技術の研究開発を行いました。

その後2002年に大阪工業大学工学部機械工学科の教授となり、大学では2006年に生体医工学科、2010年にロボット工学科を新設しました。大学においてはMEMS技術を用いたヘルスケアセンシングからスタートし、筋芽細胞から培養した培養骨格筋を用いたバイオアクチュエータ、触覚センサを有するロボットハンドを用いたBMI研究などを行い、新学科を設立するごとに研究テーマが増えました。現在は自分自身の年齢を考慮して、脳科学に基づく認知症・フレイル予防のためのロボティクス、をテーマに調査研究を継続しております。私の研究してまいりました、蛍光体・半導体材料・プロセス、MEMS技術、細胞培養、ロボットハンド、脳計測など、一見ばらばらな技術は、計測工学、センサ・センシング技術という範疇からしますと、材料・プロセスからシステム設計まで一貫していると自分では思っています。

さらに21世紀の加速度的な情報化の中で、センサ・センシング技術は大変重要な位置づけになり、時代は新しいステージを迎えました。そのような状況下で、2020年に前会長奥山雅則先生よりバトンを受け継ぎました。センサイトの皆様にご理解をいただけますよう、ここからはセンシング技術応用研究会のご紹介をいたします。

2.センシング技術応用研究会のご紹介
センシング技術応用研究会は1977年に関西の産官学合同で設立され、大阪府立産業技術総合研究所、現在の大阪産業技術研究所内に事務局を置きます。この45年間、センシング技術応用研究会はセンサ材料・プロセス技術・半導体技術・バイオ技術をベースとした情報発信、共同研究を行ってまいりましたが、近年の情報処理技術・ネットワーク技術の進歩により、関連技術分野のすそ野が大きく広がってまいりました。現在の状況をSociety5.0の方向性と関連付けて、私どものセンシング技術応用研究会の目指す方向性をご紹介し、今後センサイト様、会員の皆様とご一緒に、センサ・センシング技術の発展に尽くしてまいりたいと思います。

2-1.Society5.0にみるスマート社会とセンサ・センシング技術の関連性
第5期科学技術基本計画で打ち上げられたSociety5.0、第6期ではその実現に向けた取り組みが始まりました。その中に、「サイバー空間とフィジカル空間の融合による新たな価値の創出」が挙げられています。私たちのセンシング技術応用研究会がめざすセンシング技術は、まさにこのサイバー空間とフィジカル空間を結ぶ要として重要な役割を担っていると考えます。
センシング技術応用研究会が考える、超スマート社会におけるサイバー空間とフィジカル空間を結ぶセンサ・センシング技術の位置づけを、図1に示します。デジタル社会では日常生活から多くの産業に至るまで、センサからのあらゆる情報がIoT、ICT技術を通してサイバー空間にビッグデータとして吸収され、AIなどの情報処理・情報解析により、新しい価値を生み出し、フィジカル空間に還元され、社会実装されていきます。このように、大きな循環の中で、センサ・センシング技術は未来社会の中で重要な役割を担っています。

図1.超スマート社会におけるセンサ・センシング技術の位置付け

COVID-19パンデミックは、日本が世界の中で情報化に遅れているということを教えてくれました。私たちセンシング技術応用研究会においても、大きな情報技術の進歩の中でのセンサ・センシング技術の役割を見出していくことが重要です。センサ・センシング技術は情報技術を取り込むことにより、新しい価値を創造し、将来更なる発展のチャンスを得ることができます。今がチャンスの分岐点です。
とはいえ、センサ・センシング技術はマテリアルサイエンス、材料・プロセス技術、製造技術から制御技術、通信技術まで非常に幅の広い技術を包含しています。センシング技術応用研究会はこの幅の広い技術に対し、産官学が力を合わせて現在の課題解決から新しい方向性に関する情報発信源としての役割を担っています。

2-2.センシング技術応用研究会がめざす役割と方向性
センサ・センシング技術は以下のように大きく分けられます。
1)センサ・センシング技術の創出:材料技術およびMEMS技術や半導体技術等からなるデバイスプロセス技術をベースにした研究開発・製造技術からなるセンサの創出。
2)センサ・センシング技術の応用:センサ・センサデバイスからの情報を、インタフェースを通してAI・IoTの情報として利用する技術、およびインタフェースを通して計測器やアクチュエータを制御するロボット技術などへのセンサの応用。
センシング技術応用研究会は技術の創出と応用を両輪として情報発信を行っています。図2にこの両輪を分析したセンシング技術応用研究会の役割を示します。従来は赤の矢印に示すセンサの創出側からセンサの応用に注目してまいりました。しかし昨今の情報技術の急速な進歩により、AI・IoT技術、ロボット技術の急速な進展および市場の拡大が始まっています。今後は青の矢印の方向からの視点をフィードバックすることにより、センサ・センシング技術の新しい価値創造につながると考えます。
従来のセンサ・センシング技術は物理現象等を検出しデータとして有用な情報に変換する技術として捉えられていますが、これからのセンサ・センシング技術にはより幅の広い分析・解析・判断が求められます。図2に示すインタフェースは、データの伝達のみではなく、より高次の判断を行うための前処理が含まれます。ここにセンサ・センシング技術の大きな付加価値が生まれます。さらには、AI・IoT技術およびロボット技術と融合することにより、新しいシステムが創生されるでしょう。

図2.センシング技術応用研究会の役割

センシング技術応用研究会は、センサの創出に基盤を置きつつ、センサの応用からAI・IoT技術やロボット技術の最新動向、およびセンサとのインタフェースの標準化技術に関する情報などを積極的に取り入れて、研究例会、セミナー等を通してセンサ・センシング技術に関わる会員の皆様への情報発信、技術課題相談に取り組みます。

3.おわりに
センサイトの皆様、センシング技術応用研究会は関西を拠点としておりますが、コロナ禍でオンライン化が進み、関東をはじめ全国との距離が縮まりました。ご興味を持たれましたら、ぜひ下記ホームページに立ち寄られましてご覧いただきますと共に、センシング技術に関わるセンサイトの皆様とご一緒に、新しい時代を切り開いていこうではありませんか。今後ともどうぞ宜しくお願いいたします。
センシング技術応用研究会ホームページ:http://tri-osaka.jp/dantai/sstj/



筒井博司経歴
1975 神戸大学大学院工学研究科修士課程計測工学専攻終了
同年松下電器産業株式会社入社中央研究所配属
1993 博士(工学)神戸大学
2002 大阪工業大学工学部機械工学科教授
2006 同大学生体医工学科教授
2010 同大学ロボット工学科教授
2017 同大学ロボティクス&デザイン工学部客員教授
2020 センシング技術応用研究会会長

専門分野
放射線計測、MEMS技術、ヘルスケアデバイス、触覚センサ、ロボットハンド、BMI、脳科学

学会
IEEE、日本生体医工学会、日本ロボット学会会員

東京測器、T-ZACCSシリーズのフラグシップモデル「T-ZACCS 9 TS-960」発売

(株)東京測器研究所はひずみ、応力、荷重測定、大型構造物の強度試験、材料実験などに活躍する次世代データロガー「T-ZACCS 9 TS-960」を、2021年7月より販売開始する。
(画像は高度な構造実験への利用例)

■開発の背景
T-ZACCS® (テザックス)は、次世代測定システムとして測定器、センサの枠にとらわれない、新たな製品群のブランド。
今回発売開始するT-ZACC9 TS-960は、高速スキャニングと高安定性の両立、高度な処理機能と拡張性を備えたT-ZACCSシリーズのフラグシップモデルである。

■T-ZACCS 9 TS-960の特長
“T-ZACCS 9 TS-960”は、ひずみゲージをはじめ、ひずみゲージ式変換器、熱電対、白金測温抵抗体、直流電圧などの測定が可能。測定点数は本体10点、外部測定ボックスを併用することで最大1000点までの測定が可能で、あらゆる規模の測定に対応できる。
同社独自の高精度・高安定と高速測定を両立する次世代A/D 方式とEthernet をベースとした超高速フィールドネットワークの採用により、各種熱起電力、増幅器の零点移動、商用電源ノイズを除去し、高精度で高安定な測定を実現しながら、測定点数に関係なく、高速モードは0.1秒、高精度モードは0.4 秒(50Hz)間隔の測定とストレスフリーな操作性を実現し、静的現象から準動的現象まで、幅広い現象の測定に対応できる。

パソコンを用いることなく、さまざまなモニタ、さまざまな自動測定、さまざまな演算が可能。

モニタは、IPS パネルによる広い視野角を持った、9 インチワイドLCD を採用し、数値表示、MAX・MIN 表示、グラフ表示(Y-T)、グラフ表示(X-Y)、グラフ表示(BAR)と5 種類のモニタを、5つのテーブル、4つのフレームで表示可能です。DVI 出力により外部ディスプレイへの表示も可能。 自動測定は、10 系統×100 ステップのインターバル測定、10 系統×100 ステップのコンパレータ測定、アラーム、サンプリング測定、さまざまな機能や条件を順番に組み合わせて、一連の測定を実行するシーケンス測定を搭載している。

演算機能も充実し、四則演算や三角関数、ロゼット解析などの演算式を装備し、指定したチャンネルの測定値、定数、四則演算、関数を組み合わせて、自由に演算式を作成できる拡張チャンネルも装備されている。拡張チャンネルには演算式の計算結果が代入され、その値を表示・記録することもできる。関数は新たにMAX(最大値)関数・MIN(最小値)関数・IF(分岐返送)関数が使用できる。なお、LAN、USB、RS-232Cインターフェースを標準装備しているため、パソコンを用いての最適なオンライン計測も可能。
外付けのアナログ出力ユニット“T-ZACCS UNIT EU-10VO”により、測定に連動した電圧出力も可能である。

■概要
名称:高速・高精度・高機能データロガー T-ZACCS 9 TS-960
製造元:(株)東京測器研究所
発売開始日: 2021年7月
発売価格:130万円(本体価格) *10点以上の測定ボックスEX-50Hが必要(別売)

ニュースリリースサイト:https://prtimes.jp/main/html/rd/p/000000001.000081536.html

TOPPAN、鉄道事業者7社連携によるAIを活用した乗客案内の実証実験に参加

凸版印刷(株)は、近畿日本鉄道(株)、京王電鉄(株)、東急電鉄(株)、南海電気鉄道(株)、西日本旅客鉄道(株)、阪急電鉄(株)、東日本旅客鉄道(株)(以下 JR東日本)の鉄道事業者7社が実施する、AI を活用した「非対面」や「非接触」での乗客案内の実証実験(以下 本実証)に参加し、「BotFriends® Vision」と「BotFriends® Vision+」を、JR東日本山手線の高輪ゲートウェイ駅、阪急電鉄の大阪梅田駅、東北4県ターミナル駅、計6駅に設置する。
 凸版印刷は本実証において、非接触型の多言語AIサイネージ「BotFriends® Vision」と「BotFriends® Vision+」を、駅を利用する乗客に安心して使って貰える仕組みとして提供すると同時に、音声認識による方言の認識精度の検証を本実証で実施予定。

▮ 「BotFriends® Vision」と「BotFriends® Vision+」の設置期間について
・阪急電鉄: 大阪梅田駅 2021年7月7日(水)~10月31日(日)予定
・JR東日本: 高輪ゲートウェイ駅 2021年7月16日(金)~2023年7月15日(土)予定
       仙台駅、盛岡駅、秋田駅、新青森駅 2021年4月1日(木)~2022年4月30日(土)予定

▮ 「BotFriends® Vision」「BotFriends® Vision+」の特長
・非接触型タッチパネルフレーム「CleanTouch」を採用
 非接触型タッチパネルフレーム「CleanTouch」は画面に触れる事なくタッチコンテンツの操作が可能なセンサデバイス。表示画面とセンサガイドとの距離を保つ事で、画面内に入った指の位置を検知、ポインタトリガーを出す事で画面上の操作位置を認識する。タッチポイントは10ポイント実装しているため、画像のピンチ拡大・縮小など、多点操作にも対応している。

・バリアフリーに配慮した筐体設計を実現
 公共・商業施設への導入設置を考慮し、バリアフリーに配慮した筐体設計を実現。
音声に関しても、専用スピーカーを内蔵する事で騒音環境下でも聞き取りやすい音声案内を実現。

・AIと人によるハイブリッド接客を実現(「BotFriends® Vision+」のみ)
 よくある質問に関しては、多言語AIチャットボットによる自動応答で無人化。自動応答での対応が難しい質問や、イベントと連動させた特別な案内については遠隔地からネットワークを介して有人案内を行うなど、AIと人がコラボレーションしたハイブリッド接客が可能。
 なお、凸版印刷オリジナルキャラクターである「小石川 彩」が利用者の質問に回答を行い、仙台・盛岡・秋田・新青森駅では、JR東日本オリジナルキャラクター「陸奥 めぐ」が案内を行う。

・利用シーンに合わせて複数パターンの接客方法を実現(「BotFriends® Vision+」のみ)
① 案内係の映像と音声を繋いだ遠隔接客
 案内係の映像と音声および地図などの画像を「BotFriends® Vision+」筐体へ配信し、利用者の映像と音声を内勤室やお客様センターに設置したPCへ配信する事で、遠隔地からの接客案内を実現。同時に案内係へはAIによる回答アシスト機能を提供し、乗客に対する案内業務をサポートする。
② バーチャルキャラクターを介した遠隔接客
 イベントやキャンペーン等ではバーチャルキャラクターを遠隔から操作する事で、乗客との対話を楽しんでもらえるような演出が可能。
③ 案内係のスマートフォンやコールセンターへ入電を行う遠隔接客
 追加オプション機能として、IP電話機能を内蔵することで、案内係の持つスマートフォンや、コールセンターへ直接入電することも可能となった。

▮ 今後の目標
 凸版印刷は本実証への参加を通じて、音声認識の精度などさらなる機能向上を進めるとともに、「BotFriends® Vision」および「BotFriends® Vision+」を、鉄道、流通、小売、ホテルなどのサービス・インフラ業界に向けて拡販を進め、2025年度までに遠隔体験ソリューションや先端表現ソリューションなど関連受注含め50億円の売り上げを目指すとしている。

ニュースリリースサイト(TOPPAN):https://www.toppan.co.jp/news/2021/07/newsrelease210730_2.html

iftiny、「micro:bit専門ウェブストア」をオープン

教育現場や家庭など、プログラミング教育やmicro:bitに興味を持つ人が、必要な機器・機材を購入する際に、「どのように機器を選べばいいかがわからない」や「機器・機材の組み合わせ方がわからない」など、専門知識がないと購入しにくい場合がある。 そのハードルを下げるとともにmicro:bitの普及を図るため、イフティニー(株)はmicro:bitに特化したウェブストア「iftiny store」をオープンした。

●ストアの特徴① micro:bitに特化
micro:bit(マイクロビット)は、エコシステム製品となっており、拡張デバイス・センサ・モジュール・ロボットカー、ビルディングブロックなど、多くの関連デバイスと一緒に利用することが可能。
しかし、様々な機器・機材の中で、micro:bit に対応しているかかどうかは、初心者にとって判断が難しい。
本ウェブストアでは、micro:bit(マイクロビット)に特化しているので、セット製品はもちろん、単品でセンサやモジュールを購入する場合でも、製品選びがしやすいのが特徴の一つ。

●ストアの特徴② 分かりやすいジャンル分け
これまで、電子デバイス販売専門サイトで欲しいカテゴリの製品を探そうとしても、ジャンル分けが複雑で、入門のハードルになっていることがあった。
本ウェブストアでは、わかりやすいジャンル分けがされており、同じカテゴリの商品比較と選択がよりしやすくなる。

●ストアの特徴③ 製品選びの参考情報
プログラミング学習においては、同じ系統のツールを使って、初期から一貫して学習を行うのが効率的である。micro:bit(マイクロビット)では、幅広い対応製品があるため、初心者だけではなく、中上級者の需要にも対応が可能。
本ウェブストアでは、初心者でも比較的に扱いやすい「おすすめ製品」の紹介や、レベルに合わせて製品を選択する「製品選択フロー」も掲載されている。

●ストアの特徴④ 製品利用に関する情報が豊富
各製品ページに商品の詳細情報が掲載されており、様々なレベルのユーザに対応している。製品紹介、特徴、仕様、付属品、使用例、関連ドキュメントなど、一貫した情報を表記することで、より選びやすくなるように工夫がされている。
また、各製品のmicro:bitの利用参考情報では、対応するmicro:bitのバージョン情報や利用するにあたって必要な機材情報も掲載されている。
その他、人気製品について、メーカーの商品利用マニュアル以外に、運営会社イフティニー(iftiny)のオリジナル日本語ドキュメントも今後掲載していく予定という。

●micro:bitについて
micro:bit(マイクロビット)は、教育用途で開発されたシングルボードコンピュータ。
2015年3月12日に、BBC(英国放送協会)のMake It Digitalキャンペーンにて発表され、Microsoft社、Lancaster大学、ARM社、Samsung社Cisco社、Python Software Foundationなど、29のパートナーがBBCと一緒に開発を行い、クレジットカード半分のサイズで、様々な機能を搭載したmicro:bitが誕生した。現在はMicro:bit Educational Foundation(非営利団体)にて、世界各地でmicro:bitを提供している。
micro:bit(マイクロビット)は、多機能且つ低価格で、豊富な関連製品エコーシステムが形成されているため、世界のプログラミング教育で最も注目されているデバイスの一つとなっているとのこと。
​イフティニー株式会社は、micro:bitの国内正規販売店。

ウェブストア(iftiny store):https://store.iftiny.com