2026年3月27日金曜日

おうちでユニクロタグやってみた話-おやつポイントで運動不足解消


最近ちょっと遊びで、 家でRFID使って遊んでます。 いわゆるユニクロタグです。

今回やろうと思ったのは、 「運動不足どうにかしたいな」っていうやつです。 ついでに、ダイエット的な管理もできたらいいかなと。

…まあ、建前はそんな感じで、
本当はちょっとした実験です。

どうせなら子どもと一緒にやろうと思って、 スマホだけでいけるマニカモバイルにしました。 PC立ち上げる必要ないので手軽です。

やってることはすごく単純で、

運動したらポイントつく
おやつ食べたらポイント減る

それだけです。

子どもが帰ってくる前に設定しておこうかとも思ったんですが、 一緒に作ったほうがいいかなと思って。

「こんなことやろうと思ってるんだけど…」
「どうやってやろうかなぁ…」

と私が考えている間に、 あれもこれもと、あっという間に作ってくれました。

トレーニングメニューとおやつポイント

こういう感じ、好きです。

私はついAIで仕上げようとしちゃうんですが、 子どものほうが早かったです。

大人って、新しいことやるとき
「ちゃんとやらないと」
ってなりがちじゃないですか。

でも子どもには、そういう前提がないんですよね。 完全に遊びです。

未完成さにも魅力があって、 楽しさがあります。

もし最初から完成形を出して
「こうやるんだよ」ってやってたら、
たぶん興味示さなかったと思います。

自分で考えるから楽しいんでしょうね。

で、実際の運用なんですけど、

貸出機能でポイントGET、
返却機能でおやつ消費。

とりあえず
スクワットと腕立てやってみました。

2ポイントGET。
ミニチョコ1個分です。

誰のポイントか分かるように、
棚で管理します。


使える機能はとりあえず使っていく感じです。

こうしてポイント登録している間にも、
子どもはめちゃくちゃやる。

なんか無駄に筋トレしてる。

やっぱり
「おやつがかかってる」と違いますね。

「これ何のタグ?」ってなると、
返却のとき困るので、
ここは普通に手書きで管理。

数日間運用してみました。

RFID=「効率化目的」を家で活用しようとすると、
ちょっと違いますね。

正直、準備のほうが手間に感じます。
(子どもは全く気にしてませんでしたが)

ただ、

スチーム教育として見ると、
かなりいいなと感じました。

結果的には、満足してます。

これ、学校とかでやったら すごくいいんじゃないかと思いました。

2人分だとあまり実感なかったんですが、 30人分とかになったら 一気に便利になりそうです。

またなんか思いついたらやります。

2026年3月25日水曜日

RFIDファラデー ケージを作ってみよう (4) ファラデーケージの中から外のRFID ICタグを読んで見た①

  ハヤト・インフォメーションの製品に「MANICA EXCEL TOOL 棚卸しパッケージ」(マニカ エクセルツール棚卸しパッケージ)があります。

 https://www.hayato.info/tanaorosi/index.htm 

です。エクセルからRFIDを読み取ることが可能です。お手頃な価格で役に立ちます。

RFIDハンディを便利に使う。特に「読み込みすぎて困る」お悩みに役立つことを祈って、今回は電波を遮断するファラデーケージを安価に試して見ようと思ってファラデーケージのシリーズです。


前回はファラデーケージの中にはICタグを入れて、ケージの外から読み取りを試しました。

今回は改修したケージの中から、外のICタグの読み取りを試したいと思います。


アパート敷地内の階段の上に配置します。


















3つ並べます。














読み取りは、道向かいから試して見ます。(道は、だいたい5mくらいが一般的ですね。)
















SP1をむき出しで普通に読み取りを試すと、5mの距離で4秒以内の電波照射で3つのICタグを読み取れます。


こんどは、RFIDファラデーケージ(改)の中のSP1リーダーから読み取りを試すと、













なかなか読み取れません。

5mでは、1W出力で試しても、だめです。

かといって近づいて、50cmくらいの距離で試すと、真ん中のICタグの場所で3つとも読み取れる場合があります。

挙動が安定しませんね。


電波出力を半分(約250mW)に抑えると、50cmくらいの場所で直線的にまっすぐな場所のICタグが読取れます。

電波照射を5秒以上の期間で続けると、となりのICタグが読める場合もチラホラあります。

今回使用したファラデーケージは、高さ35cm、幅13cm、奥行48cmです。


今回は以上です。






















































2026年3月18日水曜日

RFIDファラデー ケージを作ってみよう (3) ファラデーケージの中から外のRFID ICタグを読んで見る準備

 ハヤト・インフォメーションの製品に「MANICA EXCEL TOOL 棚卸しパッケージ」(マニカ エクセルツール棚卸しパッケージ)があります。

 https://www.hayato.info/tanaorosi/index.htm 

です。エクセルからRFIDを読み取ることが可能です。お手頃な価格で役に立ちます。

RFIDハンディを便利に使う。特に「読み込みすぎて困る」お悩みに役立つことを祈って、今回は電波を遮断するファラデーケージを安価に試して見ようと思ってファラデーケージのシリーズです。


前回はファラデーケージの中にはICタグを入れて、ケージの外から読み取りを試しました。

今回は改修したケージの中から、外のICタグの読み取りを試したいと思います。


前回で作成したファラデーケージを、「中から外のICタグを読み取る」仕様に改造します。

箱の6面のうち、1面を電波が通る改造です。

始めに、追加で1枚のサバイバルシートで包みました。


そして、下の図のように箱の1面からはサバイバルシートを除去しました。

開口部は 10cm x 30cmのサイズです。

ダンボールは電波を通すので、ハンディの電波は、この面から照射されるはずです。











前回はICタグを入れた入り口は改修しません。ここからRFIDリーダーをケージの中に入れます。










これで電波は、ひとつの面からだけで照射されることを期待します。


次にICタグの置き方です。

安価に調達できるシューズケースを使って、ICタグの向きが固定できるようにします。


素材は「ポリプロピレン」なので、電波的には影響は低いと思われます。

ICタグはセロテープで貼り付けて、3つ用意します。

ICタグの電子IDは

・000000000000000000000226 (印字はRF-UHF-226)

・000000000000000000000227 (印字はRF-UHF-227)

・000000000000000000000228 (印字はRF-UHF-228)

です。

























準備ができました。

これを並べて、読み取りを試します。


読み取りの距離を測るためのメジャーは、非金属のメジャーを使うことにします。

このメジャーは非金属なので、電波に対する影響も少ないと思われます。

今回は以上です。


2026年3月11日水曜日

RFIDファラデー ケージを作ってみよう (2) 安価なダンボール箱とサバイバルシートを試して見よう

ハヤト・インフォメーションの製品に「MANICA EXCEL TOOL 棚卸しパッケージ」(マニカ エクセルツール棚卸しパッケージ)があります。

 https://www.hayato.info/tanaorosi/index.htm 

です。エクセルからRFIDを読み取ることが可能です。お手頃な価格で役に立ちます。


RFIDハンディを便利に使う。特に「読み込みすぎて困る」お悩みに役立つことを祈って、今回は電波を遮断するファラデーケージを安価に試して見ようと思います。 


使う素材は安価のものが望ましいです。なので、広い面積の割に、価格が100円~200円程度の、いわゆるサバイバルシートを使います。



サイズは、137cm X 213cm なので、十分に大きいです。

素材は、「アルミ蒸着ポリエステル製」なので、アルミの層はとても薄くなります。


ダンボール箱をサバイバルシートで包むことにします。













ダンボール箱は、最近通販した際に使われていたダンボール箱がありました。
サイズ的にもSP1リーダーを入れるのにちょうど良さそうだったので、このダンボール箱を使うことにします。













ダンボール箱を包むと、左側の面は1層になるのですが、サバイバルシートは長いので、反対の面は折りたたんでモコモコの2層になります。




物を出し入れするために、上の面はくり抜いて、サバイバルシートにも穴が開いています。












中に入れるICタグは、100円ショップで調達したペンケースにICタグをセロテープで貼り付けます。

こうすれば、ICタグを箱の中に入れた時にICタグの向きを固定することが可能です。

ICタグは非金属物用の一般的なタグ、アンテナサイズは 70mm X 17mm です。
















中に入れると左図のようになるので、右図のように開口部はアルミシートでふさぎます。

このRFIDファラデーケージを使って、どのように電波遮断されるか試して見ます。

使うリーダーはデンソーウェーブ社のSP1と弊社のMANICA EXCEL TOOLアプリです。電波出力は1Wにて行います。

























MANICA EXCEL TOOLアプリを使えば、読み取ったICタグの電子IDを画面に表示するし、電波出力も調整できるので、

このような読み取りテストで重宝します。


【サバイバルシートが1層の面の読み取り】























1層の面です。1W出力で50cmの間隔を取って5秒間の連続照射すると4秒目あたりで読み取りました。

50cm以上の距離では5秒間の照射をしても読み取れません。


【2層の面の読み取り】


2層の面です。50cmで5秒でも読み取れない。ハンディのアンテナを2層面にピタリと近づけても5秒間の照射をしても読み取れません。
(ちからを込めてハンディのアンテナ面を押し付けたわけではありません。ふんわりピタリと近づけました。)

この2層は少し皺もあるし間隔も2センチくらいは空いている。これが作用していると推測されます。

なので、試してみました。余っていた切れ端のサバイバルシートを1層の面にかぶせます。

















すると、50cmで5秒でも読み取れなくなりました。安価で薄い「アルミ蒸着ポリエステル」のシートも間に少しの空間を持たせて2層にすると、電波遮断効果は良い感じです。

これは、現場で電波遮断する必要が生じたい際は、安価なサバイバルシートを2枚重ねすると役立ちそうです!


次の回は、逆の方法でファラデーケージを使ってみます。

逆というのは、SP1リーダーをファラデーケージに格納して、ファラデーケージに穴をあけて、狭い範囲の読み取りに使えるか。

という視点での実験のようなことを実施したいと思います。


今回は以上です。


【ご参考です】

RFIDシステムにては、電波を遮断することは皆さま共通の課題としてあります。

弊社にても社員で実験試行錯誤して、お客様の役に立つべく情報公開しています。

 塗料のシールド効果を実験してみた

 https://enjoy-rfid.blogspot.com/2022/01/blog-post.html 

もご覧ください。


2026年3月4日水曜日

RFIDファラデーケージを作ってみよう (1) 動機 - 棚卸しパッケージをもっと役に立たせたい

動機

ハヤト・インフォメーションの製品に「MANICA EXCEL TOOL 棚卸しパッケージ」(マニカ エクセルツール棚卸しパッケージ)があります。

 https://www.hayato.info/tanaorosi/index.htm 

です。エクセルからRFIDを読み取ることが可能です。お手頃な価格で役に立ちます。

5年、7年、と愛用いただいているユーザー様が多いです。

お話をうかがうと、貸出し、返却、棚卸し、電波で物探し、といった一通りの資産管理ができて、

(1)エクセルのシートにRFID読み取りを自動的に反映できるので物品管理作業が楽にできる。

(2)シートの列を増やして、業務にピッタリの情報を持てる。

(3)物品管理のソースコードが公開されているので、現場で業務ピッタリに改変できる。

という回答が多いです。


要望として、RFIDは広く一気に読取れてスピーディだし、ダンボール箱の中も見えなくても電波で読取れて便利。

しかし、物品が広く配置されている場所で狭い範囲だけを読み取りたい時は、読み取りたくない物品も読めてしまう。

何とかならないの?、があります。

2026年3月現在の回答は、

(a)読取りたい範囲にあるべき物品だけにしぼったエクセルファイルを作成してRFIDハンディを操作してください。

(b)読取りたい物品だけを対象になるように、一時的にエクセルファイルで電子IDや属性を書き換えてください。

(c)読取りたい範囲を電波が遮断されるようにアルミシートで囲んでRFIDハンディを操作してください。

(d)RFIDハンディの電波出力を弱くして、読み取りたい範囲にハンディを近づけて読み取ってください。

という回答になります。

ですが、手間がかかったり、うっかりミスが混入する可能性があります。


そこで、RFIDシステムである「棚卸しパッケージ」を販売するものとして、RFIDハンディの読み取り範囲を調整するための、現場で簡単に使える方法にチャレンジしたいと思いました。

電波業界では「ファラデーケージ」という理論は常識とのことです。WiKiペディアで「ファラデーケージ」を調べると説明があります。

検索エンジンで「ファラデーケージ アルミ箔」を検索すると、

AI による概要
アルミ箔を使ったファラデーケージのポイント
効果: 電気伝導性により、静電気や電磁波を遮断(シールド)し、ノイズを低減。
利用例: ノイズ計測時のシールド、電子機器の保護、電波遮断。
注意点: 完全に密閉する必要があり、隙間や厚さが薄いと遮断効果が低下する可能性がある。 
銅の金網が理想的ですが、アルミ箔でも十分なシールド効果が期待できます
ということです。そこで、

(4)アルミ素材を使って各種のRFIDファラデーケージを手作りしてみよう

という、実験やら何やら遊んでみます。


(1)エクセルのシートにRFID読み取りを反映できるので物品管理作業が楽にできる。

MANICA EXCEL TOOL棚卸しパッケージの標準の物品管理用のシートで管理する属性はこうなっています。


(1)管理番号(ICタグの電子ID)

(2)品名

(3)型番

(4)枝番

(5)ロケーション

(6)ステータス

(7)貸出回数

(8)貸出先

(9)貸出日

(10)確認者

(11)返却予定日

(12)返却日

(13)棚卸結果

(14)最終棚卸日時

(15)登録日

(16)ラベル発行日

(17)廃棄日

です。

1つの物品は1行ですので、RFIDハンディでICタグを「管理番号」のセルに読取れば、直ぐにRFID物品管理ができます。


(2)シートの列を増やして、業務にピッタリの情報を持てる。


棚卸しパッケージの標準の列は並べ替えもできるし、列を追加することができるので、
例えば測定器を管理したい場合は、
(18)資産番号
(19)機器メーカー名
(20)機器校正日(電子測定器などの校正を行って、正しい精度に調整した日)
(21)次回校正予定日
というような属性を追加することも可能です。操作は普通のエクセルの操作で列を追加します。黄色いセルの列です。


このようにして、貴社の業務ピッタリにすることが出来ます。


(3)物品管理のソースコードが公開されているので、現場で業務ピッタリに改変できる。

エクセルには標準でVisual Basic Editorが入っていて、ビジュアルベーシックでセルの値を操作できます。

Altキーを押しながらF11をポンとたたくと、Microsoft Visual Basic for Applications という開発環境が開きます。

いわゆるVBAエディタですね。


棚卸しパッケージはVBAソースコード付きで納品するので、

このVBAエディタで棚卸しパッケージの画面を改変できるし、


エクセルファイルのシートの自動的な書き換えも改変できます。


なので、貴社の業務にピッタリのシステムにすることができます。

もちろん、貴社で改変するぶんには、追加費用はゼロ円です。

お客様が独自にコードを追加して、業務効率を向上させることも可能です。

と、便利なので、弊社のロングセラー商品であり、7年間使用してリーダーが経年劣化したのでリーダーだけを買い換え。

というお客様もいらっしゃいます。


(4)アルミ素材を使って各種のRFIDファラデーケージを手作りしてみよう

RFIDハンディ用のRFIDファラデーケージは色々と試して見ようと思います。

大きな円錐や、小さな円錐や、ホーン付き円錐や、四角い箱や、ホーン付き四角い箱や、何やらを実験して行こうと思います。

分かった中で役に立ちそうなことは、お客様の現場ですぐに使って、業務に役立てて欲しいです。

なので、実験に使うのは、現場で手軽に手に入る素材を使っていこうと思います。

例えば下に示すように、SP1 RFIDリーダーを入れているのは、皆さんのお家のキッチンの排気用ダクトホースを使ってみます。


箱型はダンボール箱をアルミシートで覆って、その中からRFIDハンディで読み取りを試します。

読み取りテストはMANICA EXCEL TOOL棚卸しパッケージのAndroid用アプリを使って読み取ります。
このアプリは「スライダー」をつまんで左右に移動させることにより、電波の強弱を変更できて便利です。




次回以降にて、RFIDファラデーケージをシリーズで報告させて頂きます。


今回は以上です。

2026年2月19日木曜日

AIと相談してコレクタで、古いPCのリナックスサーバーに方向検知をRFID読み取りで記録してみた


簡単にRFIDできるツールとして、マニカ コレクタがあります。

 https://www.hayato.info/collector.htm 

です。

前回は「プロセスを起動する」を使いましたが、今回は「Webサーバへ投げる」です。

Webサーバーは安価に済ませたいです。


「サーバへ投げる」のところで、
nec/cgi-bin/collect/add.cgi?PC=REUSE1&TAG=[タグID]&YYYYMMDD=[YYYYMMDD]&HHMMSS=[HHMMSS]&ANT=[アンテナNO]

を設定しました。(サーバーPCの名前は「nec」でPCのhostsに設定してあります。)

MANICAコレクタには、読み取ったアンテナ番号も通知させる設定です。


MANICAコレクタは、HTTPまたはHTTPSにてGETメソッドで送信することができます。

なので、送信先のWebサーバーに対して自分のPC名(PC=REUSE1)と、コレクタが置き換えてくれる値を設定します。

(一般的なWebに対する送信の、引数の書き方はAIに相談すると教えてくれます。)


さらにAIに相談しました。

「会社には、もう古くなって誰も使わないWindows7のPCがあります。これをWebサーバーにしたいのですが良い案はありますか?」

と質問すると、

AIは「Ubuntu Linux(ウブンツ リナックス)」という無償ソフトに入れ替えればすれば快適にWebサーバーを作れます。」

と回答があったので試すことにしました。

ということで、「どうやってインストールするのですか?」「試したらこういうエラーになったのですが原因を推測できますか?」「なるほど、それを試して見ます!」ということを、繰り返していたら動くようになりました。


Webサーバーでは、

(1)HTTPでGETメソッドでデータを受け取ったら、受け取ったデータをテキストファイルに追記する。

(2)次に、その履歴データから最新の20行を抜き出す。

(3)次に、上記(2)のデータの秒単位の時刻経過とアンテナ番号とEPCを判断する。

(4)次に、上記(3)の方向検出データでhtmlファイルを書き換える。

(5)htmlファイルでは、ブラウザに対して、数秒置きに再度読み取らせる。

ということをしたいです。

と、AIに相談すると、かくかくしかじか推奨です。と回答してくれます。

上記の(5)についてはhtmlファイルにて

<head>
<meta charset="utf-8">
<meta http-equiv="Refreshcontent="1">
<title>LIST - MANICAコレクタ</title></head>
</head>

と書けば、ほっておいても、PCではブラウザが読み直してくれるので、最新のデータを表示できます。

まぁ簡単!

上記(1)から(4)については、AIに質問して試してみて、巧く行かなかったらまたAIに質問して、を地道に繰り返します。

AIに相談してWebサーバーで動かすスクリプトも作成しました。


すると、できました!


左のウィンドウはMANICAコレクタのログ画面です。

右のウィンドウはWebブラウザで状況表示しています。

コレクタが読取ると、Webブラウザ画面にすぐに反映されています。


今は使っていない古いPCと、お金のかからないリナックス。

コレクタが動くPCと組み合わせて便利に使うことができました。


AIに相談して作った、Webサーバーで動かしたスクリプトも紹介しておきますね。

名前はadd.cgiです。

#!/usr/bin/perl
#@TOP マニカコレクタ用のCGI

#@使うモジュール
use CGI;
use Time::Piece;
use utf8;

#@ここから始まり。
my $qq = new CGI;
my($bContinue)=1;

#@EPCと製品名を紐づけるグローバル変数
my(%TagInfo)=(); # EPCと詳細情報を紐づけるデータ
$TagInfo{'000000000000000000000230'}="治具(一般的)";
$TagInfo{'000000000000000000000231'}="治具(その1)";
$TagInfo{'000000000000000000000232'}="治具(その2)";
$TagInfo{'000000000000000000000233'}="治具(その3)";
$TagInfo{'000000000000000000000234'}="治具(その4)";
$TagInfo{'000000000000000000000235'}="治具(その5)";
$TagInfo{'000000000000000000000000'}="治具(一般的)";

#@エラーログを開く
open $efh, '>> ', "error.txt" ; # エラーログを開く
flock($efh,2) or die; # Ubuntu Linuxだと、ブロックされて待ちになるな、、。
print $efh "start. ----------\n"; # エラーログに追加

#@データファイルを開き、http通信で受け取ったデータ記録する。
my($fh);
my($pf_name)=sprintf("log.txt");
if($bContinue){
    open $fh, '>> ', $pf_name ;
    flock($fh,2) or die; # Ubuntu Linuxだと、ブロックされて待ちになるな、、。
}

if($bContinue){ #@受け取ったデータを記録する。
    # PC,ANT,YYYYMMDD,HHMMSS,TAG
    print $fh $qq->param("PC").",";
    print $fh $qq->param("ANT").",";
    print $fh $qq->param("YYYYMMDD").",";
    print $fh $qq->param("HHMMSS").",";
    print $fh $qq->param("TAG")."\n";
    close $fh; #閉じる。
}

#@データを記録するグローバル変数配列を宣言する。
my(@aPC)=();
my(@aANT)=();
my(@aYYYYMMDD)=();
my(@aHHMMSS)=();
my(@aTAG)=();
my(@aMove)=(); #移動方向を記録する。

#@データを記録する
if($bContinue){
    $/ = undef;
    my($tmpFName)="tmp.$$.txt"; #print $efh "tmpf=".$tmpFName."\n";
    system("tac ".$pf_name." | head -20 >$tmpFName"); #最新データをピックアップ。
    open $fh2, '< ', $tmpFName ;
    my($buf)=<$fh2>;
    close $fh2;
    unlink($tmpFName);
    
    my(@aBuf)=split(/\n/,$buf);
    for (my $m=0; $m < @aBuf; $m++ ){ #行単位
	my(@aLine)=split(/,/,$aBuf[$m]); #カンマ区切り単位
	push(@aPC,$aLine[0]);
	push(@aANT,$aLine[1]);
	push(@aYYYYMMDD,$aLine[2]);
	push(@aHHMMSS,$aLine[3]);
	push(@aTAG,$aLine[4]);
	push(@aMove," "); #数を合わせるため、空行を入れる。
    }
}

#@記録されたデータから、移動方向を判断する。
if($bContinue){
    my $aNum=@aPC; #print $efh "aNum=".$aNum."\n";
    if ( $aNum == 0 ) {
	# データが空っぽならNOP
    }
    else{
	for(my $m=0; $m < $aNum; $m++){ #print $efh '$m='.$m."\n";
	    if($m == ($aNum -1)){
		# 最後のデータは、ひとつ後の行とは差分をとれない。	    }
	    }
	    else{ # PCがどこなのか、今のところチェックしない。
		#直近の同じEPCのタグを探す。見つからない可能性はある。
		#print $efh "m=".$m.":";
		my($mm)=0;
		for($mm=$m+1; $mm < ($aNum-1); $mm++){ # $mmを設定。
		    if($aTAG[$m] eq $aTAG[$mm]){
			#print $efh "aNum=".$aNum.":TAG ID HIT. mm=".$mm.":[".$aTAG[$m]."][".$aTAG[$mm]."] last\n";
			last;
		    }
		}
		#print $efh " mm=".$mm."\n";
		if($aTAG[$m] eq $aTAG[$mm]){ # タグのIDは同じか?
		    #print $efh "[".$aYYYYMMDD[$m].$aHHMMSS[$m]."][".$aYYYYMMDD[$mm].$aHHMMSS[$mm]."]\n";
		    my $t  = Time::Piece->strptime($aYYYYMMDD[$m].$aHHMMSS[$m],     '%Y%m%d%H%M%S');
		    my $t2 = Time::Piece->strptime($aYYYYMMDD[$mm].$aHHMMSS[$mm], '%Y%m%d%H%M%S');
		    my $diff = $t - $t2;

		    #print $efh "[".$aYYYYMMDD[$m].$aHHMMSS[$m]."][".$aYYYYMMDD[$mm].$aHHMMSS[$mm]."]\n";
		    #print $efh "diff sec = ".$diff->seconds."\n";
		    if ($diff->seconds < 20){ # 間隔の最大値は、この秒数とする。
		     	if($aANT[$m] eq $aANT[$mm]){ #print $efh "移動なし"."\n";
			    $aMove[$m]="移動なし";
		     	}
		     	elsif($aANT[$m] eq "1"){ #print $efh "持ち込み"."\n";
			    $aMove[$m]="持ち込み";
		     	}
		     	elsif($aANT[$m] eq "2"){ #print $efh "持ち出し"."\n";
			    $aMove[$m]="持ち出し";
		     	 }
		     	else{ #print $efh "空間転移"."\n";
			    $aMove[$m]="空間転移";
		     	}
		    }
		    else{#print $efh "タイムアウト"."\n";
			$aMove[$m]="";
		    }
		}
	    }
	}
    }
}

#@htmlのテーブル部分を作成する。
my($tableStr)=""; #@テーブル部分を作成する。
if($bContinue){
    my $aNum=@aPC; #print $efh "aNum=".$aNum."\n";
    if ( $aNum == 0 ) {
	# データが空っぽならNOP
    }
    else{
	$tableStr="";
	$tableStr .= '<table border="1">'."\n";;
	$tableStr .= "<tr><th>移動方向</th><th>年月日</th><th>時分秒</th>";
	$tableStr .= "<th>読取PC</th><th>アンテナ</th><th>EPC</th><th>タグ情報</th></tr>\n";
	for(my $m=0; $m < $aNum; $m++){ #print $efh '$m='.$m."\n";
	    $tableStr .= "<tr>";
	    $tableStr .= "<td>".$aMove[$m]."</td>";
	    $tableStr .= "<td>".$aYYYYMMDD[$m]."</td>";
	    $tableStr .= "<td>".$aHHMMSS[$m]."</td>";
	    $tableStr .= "<td>".$aPC[$m]."</td>";
	    $tableStr .= "<td>".$aANT[$m]."</td>";
	    $tableStr .= "<td>".$aTAG[$m]."</td>";
	    if ( exists($TagInfo{$aTAG[$m]}) ){
		$tableStr .= "<td>".$TagInfo{$aTAG[$m]}."</td>";
	    }
	    else{
		$tableStr .= "<td>"."未登録タグ"."</td>";
	    }
	    $tableStr .= "</tr>\n";
	}
	$tableStr .= '</table>';
    }
}

#@htmlファイルを更新する。
my($htmlStr)=""; #@html全体を作ってhtmlファイルを更新する。
if($bContinue){
    my($t)=1; # htmlファイルの再読み込み間隔秒
    $htmlStr = $htmlStr. "<html>\n";
    $htmlStr = $htmlStr. "<head>\n";
    $htmlStr = $htmlStr. '<meta charset="utf-8">'."\n";
    $htmlStr = $htmlStr. "<meta http-equiv=\"Refresh\" content=\"$t\">"."\n";
    $htmlStr = $htmlStr. "<title>LIST - MANICAコレクタ</title></head>\n";
    $htmlStr = $htmlStr. "</head>\n";
    $htmlStr = $htmlStr. "<body>\n";
    $htmlStr = $htmlStr. '<h1>MANINCAコレクタ 方向検出の最新読取情報</h1>';
    $htmlStr = $htmlStr. "最新のデータが".$t."秒ごとに再度読み込みされます。"."\n";
    $htmlStr = $htmlStr. "<hr>\n";
    $htmlStr = $htmlStr.$tableStr."<br>\n";
    $htmlStr = $htmlStr. "<hr>\n";
    $htmlStr = $htmlStr. "</body>\n";
    $htmlStr = $htmlStr. "</html>\n";

    my($fhHtml);
    open $fhHtml, '> ', '/var/www/html/collect/direct.html' ;
    flock($fhHtml,2) or die; # Ubuntu Linuxだと、ブロックされて待ちになるな、、。
    print $fhHtml $htmlStr;
    close $fhHtml;
}

#@エラーログを閉じる。
print $efh "end. ----------\n"; # ログファイルに追加
close $efh; # エラーログを閉じる

#@呼び出すPCが判断できるように応答を返す。
#もし応答しないと、コレクタはWebサーバーの内部障害として認識する。
print "Content-Type: text/html\n\n";
print "<html><head><title>response</title></head>\n";
print "<body>\n";
print "OK\n";
print "</body>\n";
print "</html>\n";

1;

以上です。


2026年2月18日水曜日

最近のレゴと、IoTブロック

同じ「ブロック」だけど、やってることは全然ちがう話


STEAM教育って言葉、ここ数年でよく目にするようになりました。
正直、ちゃんと説明しろと言われると少しあいまいですが、
「なんとなく、これから必要そう」
そんな距離感で気になっている人も多いんじゃないでしょうか。

私もその一人です。

子どもが将来どういう分野に進むかは分かりませんが、
テクノロジーについては、どの分野に行っても
分かっていてマイナスになることはなさそうだなと思っています。


最近のレゴを見ていて思ったこと

最近のレゴ公式ストアを見ると、
完成度の高いセットがかなり増えました。

どれも
「作る → 完成する → 眺める」
までがきれいに設計されていて、
遊びとしてはとても分かりやすいです。

もうすぐリリースされる レゴ スマートプレイシステム も、
組み立て方によって音や動きが変わる仕組みで、
いかにもレゴらしい進化だな、という印象です。

作る楽しさ、集中力、想像力。
このあたりは、やっぱりレゴは強いです。


「IoTブロック」って何だろう、と思って調べた

「IoTブロック」について、少し調べてみました。
試しにそのまま「IoTブロック」で検索してみると、
よく出てくるのが MESH や PLOCO。

どちらも「ブロック」と呼ばれていますが、
レゴのように形を作るブロックとは、
どうも考え方が違いそうです。

調べていくと、
同じブロックでも、
そもそもの役割や遊び方がかなり違う
ということが見えてきました。


MESHは「仕組みをいじる」ブロック

MESHは、

  • センサー
  • 無線
  • アプリ

を組み合わせて、
「こうなったら、こう動く」
というルールを自分で作っていくタイプのブロックです。

完成形が決まっているというより、
ずっと途中、みたいな感じ。

触っていると、

  • 条件を変える
  • 結果が変わる
  • また直す

という流れが自然に出てきます。

レゴのように「完成したら終わり」ではなく、
 動きや仕組みを調整し続ける遊び、という印象です。


PLOCOは、レゴに近い感触だった

一方の PLOCO。

PLOCOは、
  • ブロックを組み立てる
  • その形をスマホで読み取る
  • 数値に変換される
  • 画面上で結果(バトルなど)が出る
という流れです。

自分で条件分岐を作ったり、
処理の流れを設計したりするわけではありません。

なので、
IoTブロックというよりは、
レゴの延長線上にある遊びに近いと感じました。

「作って、読み取って、結果を見る」
という分かりやすさがあります。


同じブロックでも、向いている遊び方は違う

並べてみると、こんな感じです。

  • レゴ/スマートプレイ
    → 作ること自体を楽しむ
  • PLOCO
    → 作った形と結果の関係を楽しむ
  • MESH
    → 仕組みを考えて動かすことを楽しむ

どれが上とか下とかではなく、
そもそも遊びのタイプが違う、というだけの話です。


まとめ(特にオチはないです)

最近のレゴを見ていると、
ブロックと一口に言っても、
ずいぶん役割が分かれてきたなと感じます。

  • 形を作るブロック
  • 結果を返すブロック
  • 仕組みをいじるブロック

どれも同じ「ブロック」ですが、
やっていることはかなり違います。

STEAM教育とか、IoTとか、
大きな言葉で考えると難しくなりますが、
まずは
「何をして遊んでいるか」
くらいの目線で見ると、分かりやすい気がしました。