[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

ガイガーカウンター・γ線スペクトロメーターを試してみる

Amazonガイガーカウンターのキットが売られていたので購入してみました。

ガイガーカウンター: https://amzn.to/3CVRkr6
https://m.media-amazon.com/images/I/61RhbJXdzgL._SL1500_.jpg


比較用として、ボケットサイズのγ線スペクトロメーター Radiacode 103 と比べてみます。
これは Csl シンチレーターを使った高感度なガンマ線検出機を搭載しています。また、スマートフォンBluetoothで接続して、アプリで計測値を記録したりγ線のエネルギースペクトルを分析、すなわちピークから放射元素を調べたりバックグラウンドから差分を取ったりといったことができます。ちなみに RadiaCode はキプロスの会社だそうです。

Radiacode 103:
www.radiacode.comhttps://d2j6dbq0eux0bg.cloudfront.net/images/94284268/3959291889.png

放射線源としては、ウランガラスのおはじきと,モズナ石(モズナイト)の鉱石サンプルを試してみました。モズナ石は微量のウランやトリウムを含んでいます。

放射線を検知するとカチカチと音が鳴る*1のですが、明らかに Radiacode 103 の方が敏感なようです。

まず、バックグラウンド(測った環境の自然状態)の計測値 0.05μSv でした。
ガイガーカウンターの方はβ線γ線の両方に反応し、ウランガラスをすぐそばに置くと 0.5μSv、モズナ石では 3μSv くらいの数値が出ました。
Radiacode 103 はβ線には反応せずγ線を検出しますが、ウランガラスの方には反応は見られず、モズナ石の方には 2〜3μSv くらいの数値が出ました。
ウランガラスはβ線は出るもののγ線はあまり出さないようですね。

Radiacode 103 でモズナ石のγ線スペクトルを取ってみるとこんな感じでした。アプリ上でスペクトルをタップすると該当する放射性元素のピーク位置が表示されるようになっており、Tl-208 のものが目立っていそうです。これは Th-232 系列 (トリウム系列) だよという情報も表示されています。

なお、動画では警告音が鳴りまくっていて一見危険そうにも見えますが、今回使ったような線源はごく弱いもので、実際少しでも計測器から離すと計測値は急激に下がり(距離の2乗に反比例)、すぐに自然に存在するバックグラウンドの放射線と区別がつかないレベルになる程度のものです。したがって、特に取り扱いに気を使う必要はありません。まあ年中肌身離さず身につけ続けるとか、食べたりとかはしないほうがいいと思いますが 😅。

*1:ちなみにどちらもマイコンで検出してスピーカーを鳴らしているので、いわゆる昔のガイガー管の音としてイメージされるものと言うわけではありません

macOS 15 Sequoia で全ての通知を閉じるスクリプト

以前、以下の記事で全ての通知センターの通知パネルを閉じるAppleSciptを書きました。
neocat.hatenablog.com
これは macOS 14 でもそのまま動作していたのですが、 macOS 15 ではウィンドウの構造が変わったようでうまく動作しなくなってしまったため、書き直しました。

以前は何度かループし直さないとうまく閉じられないパネルが出てきていたのですが、今回はそういうことはない模様。
ただ、パネルが最後の1つになるとグループがなくなるようで、最後に対象を親に変えて performClose を呼び直すということをやっています。。

on performClose(theWindow)
	tell application "System Events"
		tell theWindow
			-- log (description of actions) as list
			try
				repeat with theAction in actions
					set desc to description of theAction
					if desc is "閉じる" or desc is "Close" then
						perform theAction
						exit repeat
					end if
				end repeat
			end try
		end tell
	end tell
end performClose

activate application "NotificationCenter"
tell application "System Events"
	tell process "NotificationCenter"
		if not (exists window "Notification Center") then
			return
		end if
		set theGroup to group 1 of scroll area 1 of group 1 of group 1 of window "Notification Center"
		tell theGroup
			set theWindows to every UI element as list
			set n to (count theWindows)
			repeat with i from n to 1 by -1
				tell me to performClose(item i of theWindows)
			end repeat
			tell me to performClose(theGroup)
		end tell
	end tell
end tell

M5UnifiedでLCDに「℃」を表示する方法

M5Unified を使って M5StickC のLCDに温度を表示しようと思った際に、単位の ℃ を描画する方法の備忘録です。

fonts::Font4 など、widtbl_f16 を使っているフォントでは、 ` (GRAVE・バッククォート)を °(DEGREE・度)に置き換える define マクロが有効になっています。
M5GFX/src/lgfx/Fonts/Font16.h at master · m5stack/M5GFX · GitHub

これを使って、

M5.Lcd.setFont(&fonts::Font4);
M5.Lcd.print("`C");

のように表示すれば、「℃」を描画できます。

下記はENV Hatから取得した温度・湿度・気圧を30秒ごとにLCDに表示しています。(なるべくセンサが温まらないよう、3秒表示してスリープに入っています。)
なお古い M5StickC ENV Hat を使っているので、温湿度センサはDHT12です。

#include <M5Unified.h>
#include <DHT12.h>
#include <Adafruit_BMP280.h>

DHT12 dht12;
Adafruit_BMP280 bme;

void setup() {
  Serial.begin(115200);
  Serial.println("Start ENV HAT");
  // センサの準備ができるまで待機
  M5.Power.lightSleep(2000000LL);

  Wire.begin(0, 26);
  bme.begin(0x76);

  float temp = dht12.readTemperature();
  float hum = dht12.readHumidity();
  float prsr = bme.readPressure() / 100;

  Serial.println(String("temp: ") + temp + " hum: " + hum + " prsr: " + prsr);

  M5.begin();
  M5.Lcd.setBrightness(80);
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(BLACK);

  M5.Lcd.setCursor(10, 10, &fonts::Font8);
  M5.Lcd.printf("%.1f", temp);
  M5.Lcd.setFont(&fonts::Font4);
  M5.Lcd.print("`C");

  M5.Lcd.setCursor(10, 110);
  M5.Lcd.print(String(int(hum)));
  M5.Lcd.print("%   ");

  M5.Lcd.print(String(prsr));
  M5.Lcd.print("hPa");
}

void loop() {
  delay(3000);
  M5.Power.deepSleep(27000000LL);
}

常温で液体のガリウム合金「ガリンスタン」を作ってみた

常温で液体のガリウム合金「ガリンスタン」

今年は暑い…冷房をかけていないとガリウムもすっかり液体になってしまいます。

ガリウムの融点は29.8℃ですが、合金にするとさらに融点が下がるものがあります。
例えばガリウムインジウムを重量比3:1くらいで混ぜると融点は15℃前後に下がります。

さらに、ガリウム - インジウム - 錫 を 68.5% - 21.5% - 10% で混ぜた合金は ガリンスタン *1 という名前が付けられており、融点は -19 ℃にまで下がるため、常温で液体となります。

PlayStation 5 のCPUに塗られているヒートシンクに熱を伝えやすくするための液体金属がこのガリンスタンではないかということでもちょっと話題になりました。

https://upload.wikimedia.org/wikipedia/commons/thumb/7/72/AMD%407nm%40Zen2_RDNA_APU%40Oberon%40PlayStation5%40100-000000189_9JF8970V00437_S_DSC09306_-_DSC09306_%2850943149992%29.jpg/2560px-AMD%407nm%40Zen2_RDNA_APU%40Oberon%40PlayStation5%40100-000000189_9JF8970V00437_S_DSC09306_-_DSC09306_%2850943149992%29.jpg
(Fritzchens Fritz from Berlin - AMD@7nm@Zen2_RDNA_APU@Oberon@PlayStation5@100-000000189_9JF8970V00437_S___DSC09306_-_DSC09306, CC0, https://commons.wikimedia.org/w/index.php?curid=105989332)

合金にするのは非常に簡単で、室温で固体の状態のガリウムインジウムを擦り合わせるだけで合金化が進み、みるみるうちに液体となっていきます。
ガリウムを温めて液体状態にしてから混ぜても良いですし、作業的には楽です。)

というわけで実際に作ってみました。
材料はいずれもamazonで入手できました。

www.youtube.com

濡れ性が高くてガラスや手など色々なものにくっついてしまいますし、特にアルミニウム製のものに付着すると内部まで浸透してボロボロに脆化させてしまうなど、取り扱いには注意が必要です。
自作PCなどに利用する際には導電性があるためショートしないようにも対策が必要です。実用するのはもうちょっと先かな…。

*1:これはドイツの企業 Geratherm. Medical AG の登録商標とのこと

WindowsでCPUパッケージ・コア温度をPowerShellで取得する

1.28インチ丸形ディスプレイにCPU温度を表示するというデバイスを作りました。
これ自体はシリアルで温度を受け取り、LVGLでグラフや数字を描画するという簡単なものです。

CPU温度の取得はPC(Windows)上で動くプログラムで取得して送信しています。

CPU温度といってもマザーボード上のセンサやCPUに内蔵されたパッケージおよびコアの温度など、いろいろあります。
今回はCPUのパッケージ温度や平均コア温度を取得したかったのですが、いざやってみるとプログラムから簡単に取得できる方法が見つかりにくく手こずりました。

検索すると出てくるのが、管理者権限のあるPowerShellで以下のように取得する方法。単位はケルビンの10倍で出てきます。

(Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi").CurrentTemperature

しかしこの方法ではマザーボードにも依存するのかもしれませんが常に一定の値しか取れず、有効ではありませんでした。

他の方法として、LibreHardwareMonitor というOSSのDLLを利用する方法を見つけました。
github.com

これはOpen Hardware Monitorというツールの後継として開発されているもので、マザーボードやCPU,GPUなどの温度などの計測値を取得できるツールで、GUIでも閲覧できるものですが、DLL単体から関数を呼んで利用することも可能になっています。

上記GitHubページのReleasesから最新版のZIPファイルを取得できます。
なお最近のWindowsではインターネットから取得したDLLをロードしようとするとデフォルトでブロックされるようになっているため、ダウンロード・展開後に LibreHardwareMonitorLib.dll のプロパティを開き、ブロックの解除にチェックをつけてやる必要があります。

このDLLを利用して、以下のようにPowerShellからCPU温度などを取得することができます。
以下ではCPUの各コアの温度とその平均、およびCPUパッケージ温度を取得しています。
また、パッケージ温度についてはシリアルポートにも書き出しており、丸形ディスプレイの表示に反映させています。

# シリアルポートを開く
$c = New-Object System.IO.Ports.SerialPort "COM3", 115200, ([System.IO.Ports.Parity]::None)
$c.NewLine = "`r"
$c.Open()
$c.DiscardInBuffer()

# DLLを読み込み
$dll = ".\LibreHardwareMonitor-net472\LibreHardwareMonitorLib.dll"
Add-Type -Path $dll

$monitor = [LibreHardwareMonitor.Hardware.Computer]::new()
$monitor.IsCPUEnabled = $true
$monitor.Open()

# 1秒ごとに温度取得
while ($true) {
    $temp = 0
    $count = 0
    $pkg = 0

    $monitor.Hardware.Update()
    foreach ($sensor in $monitor.Hardware.Sensors) {
        if ($sensor.SensorType -eq 'Temperature' -and $sensor.Name -eq "CPU Package") {
            $pkg = $sensor.Value
        }
        if ($sensor.SensorType -eq 'Temperature' -and $sensor.Name.Startswith('CPU Core #') -and -not $sensor.Name.Contains("Distance")) {
            write-host $sensor.Name, ":", $sensor.Value
            $temp += $sensor.Value
            $count++
        }
    }

    $avg = [math]::Round($temp / $count)
    write-host "CPU Core Average : ", $avg -f y
    write-host "CPU Package :      ", $pkg -f y

    # 温度をシリアルに出力
    $c.WriteLine($pkg)

    sleep 1
}
$monitor.Close()

自動起動したいところですが、管理者権限も必要だし、どうせならサービス化したほうが良いので、下記記事の方法を使うのがよさそうです。
qiita.com

スマートロック SESAME5 をスマホでもESP32でも操作できるように

スマートロックSESAME5

安価でいろいろな鍵に対応したスマートロック SESAME5 を導入しました。

https://jp.candyhouse.co/products/sesame5?variant=40074599792703SESAME5

SESAMEの素晴らしいところは、スマホアプリでの操作はもちろん、Web APIの対応、さらにはBluetoothSDKまで公開されているところです(約一月前に公開されました)。

Web API の利用は手軽ですが、デメリットはWiFiモジュールが別途必要になる点、月に3000回を超えるAPI呼び出しは有料となる点です。
無料で使うとすると90秒に1度の状態取得が限界となるので、リアルタイムに反応するようなアプリケーションを作るのは厳しいでしょう。

そんな時はBluetoothSDKを使用することになります。SDKiOS/Mac向けAndroid 向け、 そしてなんと ESP32 向け が用意されています。今回はこの ESP32 向けを使ってみました。

続きを読む

AD-HD26TC のおかげでM1 MacBook ProでスマートグラスMOVERIO BT-40が使えるようになった

エプソンのMOVERIO BT-40というスマートグラスがあります。

エプソン MOVERIO スマートグラス BT-40
これはUSB Type-C DP Alt Mode出力に対応したPCやスマートフォンなどに接続して、FullHD (1920x1080) 60Hzの映像を仮想的な大画面で楽しめるというものです。
専用コントローラ(Androidバイスらしい)付きのモデルもあるのですが、コントローラなしのモデルをもっぱらディスプレイとして映像鑑賞などに使っていました。


過去形なのは、Intel CPUなMacBook Proでは全く問題なく使えていたのですが、M1のMacBook Proに接続するとなぜか映像が一瞬映っては消えてを繰り返すという状態になっていまい、互換性がないのかと諦めていたためです。


ところが最近、HDMI端子の出力をUSB Type-C DP Alt Mode接続に変換してくれるという、ありそうでなかったアダプタが発売されたのを見つけました。

サンワサプライ HDMI-Type-C(DP Altモード)変換アダプタ(4K/60Hz) AD-HD26TC

これはUSB Type-C接続で映像と電源を受け取るタイプのモバイルディスプレイを、HDMIしか出力できないデバイスで使うことが想定されている商品のようです。このスマートグラスでも入力方法は同じと言えるので、これを使ってM1 MacBook ProのHDMI出力に繋げば正常に動作するのでは?と思い試してみることにしました。*1


実際に試してみると、USB Type-C 接続の時と違って、途切れたりすることなく映像が出力できることが確認できました。EDIDもきちんと伝送され機種名や対応解像度もきちんと認識されます。
さらに意外なことに、給電用と書かれたUSBは実は出力先のデバイスのUSBの信号をパススルーしているようで、スマートグラスに搭載されたセンサーやUSBサウンドデバイスまで認識されました!
ただし、画面の最上部の1ピクセルに白い線が表示されたり消えたりを繰り返すという現象が起きるようです。 Windows PCに接続した場合も発生するので、アダプタとの相性でしょうか。。まあこれは白いメニューバーが表示されている状態ではほとんど気になりませんので、再び使えるようになったと言って良いのではないかな?と思います。


しかしMacとディスプレイの相性問題を気にしなければならないとは、ちょっと20年くらい前の話みたいですね。。

*1:M1 MacBook ProのUSB Type-CからHDMI変換器を通すと映らないが、HDMIポート直接接続なら映るという似たような現象を古い別のモニタでも経験したこともあります。この時もIntel Macでは変換器経由で動作していたので、おそらくM1 MacのUSB Type-Cからの映像出力には何らか対応範囲が狭いという問題があるのでしょう。。