モルモットにエサをあげたか?光で知らせる Ver.2

モルモットのエサを管理する仕組みを作っています。エサをあげたら容器を光らせる電子工作です。一度Helocodeで作ったのですが、消費電力の問題があり、micro:bitで作り直しました。

容器のふたにmicro:bit

モルモットにエサをあげるのは朝夕2回。

しかし、家族で誰がエサをあげるか決まってなく、誤って何回もエサをあげてしまうことがあります。

そこでエサの1つ、乳酸菌タブレットの容器にmicro:bitを取り付けます。

ふたを開けるとき、ふたを逆さまに置くので、その方向を感知してエサをあげたか判断できるようにします。

micro:bitでプログラミング

プログラミングは一瞬です。

micro:bitが下になったとき、LEDを光らせます。

その後、1時間(3600000ミリ秒)待って、LEDを消します。

エサをあげてから1時間、光で知らせる仕組みです。

ふたに取り付け

前回のHelocodeを取り付けたネジ穴を、都合よく流用できました。

micro:bitと単4電池2本を取り付けます。

エサをあげたら光る

完成です。

エサをあげたら、ふたが赤く光ります。

micro:bitは消費電力が低いので、長く運用できるでしょう。

これで、モルモットにエサをあげすぎることを防げます。

Helocodeは電池駆動に向かない

モルモットのエサ管理にHelocodeを利用しました。しかし、半日持たずに電池切れになってしまいます。Helocodeは消費電力が大きすぎて、電池駆動には向かないようです。

常時0.12A消費?

Helocodeを単4電池3本で稼働させてみましたが、半日持ちませんでした。

フル充電したエネループ(ちょっと古いのでパフォーマンスは落ちているかも)でも試しましたが、やはり半日持たずに電池切れです。

あまりに電池消耗が激しいので、消費電流を確認します。

Helocodeはセンサー起動状態の時、0.12A。さらにLEDが光らせて0.12~0.13A程度の消費でした。

WiFiを使っていなくても、結構消費電流が大きいです。

micro:bitの省電力性は優れている

micro:bitと比較します。

消費電流を測ると0.00A・・・。計測できていませんが、LEDを点灯させても0.01Aも消費しないようです。

実際に電池の持ちの良さは、数年使っていると体感できます。micro:bitの消費電流は徹底的に抑えられています。

Helocodeの仕様を見ると、WiFi搭載や、micro:bitより高いスペックが魅力的に見えます。

しかし、こうして実際使って比較してみると、micro:bitの設計のすばらしさを再認識する結果となりました。

モルモットにエサをあげたか?光で知らせる

モルモットに間違って何度もエサをあげてしまうことがあります。改善のため、誰かがエサをあげたら、エサの容器を光らせることにしました。

乳酸菌大好きモルモット

モルモットに毎日、アリメペットという乳酸菌タブレットを与えています。モルモットはこのタブレットが大好きなようで、他のエサを無視して真っ先に食べます。

主食のモルモットフード(チモシー主原料)は、気が向いたら食べる感じです。

あわよくば2個食べてやる

うちの家族で、モルモットにエサをあげるの担当は決まっていません。(それが問題かも)

たまに2回エサをあげてしまうこともあり、朝食夕食多いと4回、誰かがタブレットをあげてしまいます。

タブレットは1日2~3錠と書いてあるため、あげすぎ注意です。

しかし、モルモットはポーカーフェイスで、タブレットをもらっていないような顔をいつもしているので、ついつい食事がまだと勘違いしてしまいます。

食事済みを知らせる電子工作

この問題は比較的簡単に、電子工作で解決できるでしょう。

シングルコンピューター「Helocode」を使って、タブレットをあげたか判断する仕組みを作ります。(後に消費電力の面でHelocodeより、micro:bitを選んだ方がよかったと思うことに。)

タブレット容器のふたに、Helocodeを取り付ける想定で、プログラミングをします。

ふたが下を向いたらLEDが光る

タブレット容器のふたを開けるとき、必ずふたをひっくり返して置くので、Helocodeの向きを取得すれば、容器の開閉を判断できます。

「HelocodeのLEDを下向きにしているなら」という条件で、LEDを光らせることにしました。

そして1時間後(3600秒後)、LEDを消灯します。

1時間光っていれば、モルモットが食事済みであることを、家族全員に周知できると思われます。

ふたへのHelocode取り付け

Helocodeにプログラミングコードを書き込んだら、ふたへの取り付けを行います。

M3ネジとナットで取り付け可能です。たまたま家にありました。

ふたに穴を空け、ネジを差し込み、Helocodeの穴を通して裏側からナットで止めます。

電池ケースも一緒に止めましょう。

安定しない場合は、マスキングテープで補強が必要かもしれません。

タブレットをあげてみよう

Helocodeのスイッチを入れると、電源の青いLEDがタブレット内で光り、怪しいクスリのような雰囲気になります。

まだ、ふたは光っていない状態です。

モルモットにタブレットをあげるため、フタを開け、戻してみると・・・

タブレットをのふたが、赤く円形に光ります。

1時間は、モルモットにタブレットをあげたこと(食事済みであること)が、分かるようになります。

薄暗いところで試したので、怪しさが増しています。

明るいところでは

日常使いを想定し、明るい場所でも確認します。

タブレット容器のふたに、うっすら赤い丸が浮かび上がる感じになりました。

視認性は悪くないです。

これで、モルモットに何度もタブレットを与えることはなくなるでしょう。

教育向けコンピューター「Helocode」という選択肢

中国製の教育向けのシングルボードコンピューター「Halocode」が販売されています。今のところ、イギリス製のmicro:bitに変わる選択肢にはならないかと思います。

存在感の薄いHalocode

AmazonでHalocodeの取り扱いが始まったのは2019年5月。しかし、2年経ってもネット上でHalocodeの情報は少ないです。Googleトレンドで調べても、データ不足になるくらい、存在感がありません。

WiFi搭載シングルコンピューター

Halocodeは、性能が低いわけではありません。

基本処理性能はmicro:bit以上で、しかもWiFiを搭載しています。

IoTのハードルを下げる、手軽なシングルコンピューターです。

値段もmicro:bitより少し高い程度。

問題はエディターのUI

性能・機能が問題ないのに、なぜmicro:bitほどの人気がないのでしょう。

原因はプログラミングエディターのUIだと思われます。

左がmicro:bitのエディタ。右がHalocodeのエディタです。

HalocodeのUIは、背景と文字のコントラストが足らず読みにくい・・・。

色の配慮が足りないだけでなく、UIの様々なところで配慮が足らず、迷いが生じます。

日本語翻訳品質が低い

さらにHalocodeは、日本語の翻訳も分かりにくいところがあります。

「Halocodeが矢印を上向きに挿しているとき」
「Halocodeが矢印が上をむいているいるとき」

日本語がおかしいし、この2つの差を理解することが難しいです。

プログラミングの教育向けコンピューターとして、日本の子供が使うには難しいでしょう。

micro:bitの方は、日本語に違和感はありません。

教育に使うならmicro:bit

Halocodeのエディタは、2年経っても日本語の改善がみられないので、少なくとも教育に使うならmicro:bitを選んだ方がよいでしょう。

WiFiが必要になったら、Halocodeよりラズパイかobnizを選択したほうが勉強になると思います。

Pythonでメモリーエラー

Pythonで重い画像解析や自然言語処理などを行っていると、メモリー不足でエラーが出ることがあります。Pythonコードを見直すか、メモリを増設するかで対処します。

メモリーは有限だった

100万件の文書比較をPython3+BERTで処理していました。1週間くらい動かしていたら、8割くらい完了したところで、コマンドプロントに「Buy new RAM!」というエラーが表示されています。

「新しいメモリを買え!」

分かりやすいエラーで、助かります。メモリ不足ですね。

私はメモリー16GBのノートパソコンを使っています。

16Gを使いきることはないだろうと、限度を気にせずコードを書いていました。

メモリーを増やせるなら増やす

デスクトップ型パソコンや、カスタマイズ可能なノートパソコンであれば、32GBに増設してしまうのが簡単な対処法です。

私のノートパソコンは、メモリー増設で保証外になってしまうので、Pythonコードを見直します。

内部ストレージを使う

Pythonの配列に大量のデータを記録したりすると、メモリー不足が起こります。

その場合は、配列をJSONで書き出し、内部ストレージ(ローカル)に保存して、メモリーの使用量を減らす方法が考えられます。

ストレージに保存していれば、途中で処理が止まってもデータは消えません。途中再開もできるので安心です。

根本的にはスキルアップで対処

メモリー不足が起こる原因は、自分のスキル不足だと思います。とても無駄なメモリーの使い方をしている気がして・・・。

Pythonなどのプログラミングスキルを上げることが、メモリー不足の根本的な解決になると思われます。

さようならrbタグ

ふりがなで使うruby要素。その中に、rt、rp、rb要素を内包することがあります。標準仕様となったWHATWGのHTMLでは、rbは存在しないので忘れてOKです。

rubyコーディングは視認性が悪い

IE7とかがあった時代のコーディングでは、例えば「漢字」にルビを振る時、下記のような書き方をしていたと思います。

もう、編集困難なコード量ですね。

WHATWGのHTMLではrb要素が存在しません。

少しは、見やすくなった・・・かもしれません。

rpを使うことは少ない

企業サイトなどのブラウザサポート範囲だと、ruby非対応環境が対象になることは少ないでしょう。

ruby非対応の時、かっこを表示させることができるrp要素も、書かないことが多いです。

また、複数の文字にまとめてルビを振るほうが楽なので、実際のコーディングで多く用いられるのは、下記の書き方でしょう。

これで十分かと思います。

HTMLのhgroupタグが利用可能に

W3CのHTMLが廃止になり、WHATWGのHTMLが標準仕様となりました。それに伴いhgroup要素を使えるようになります。見出しをグループ化するときに利用します。

hgroupとは?

WHATWGに書かれているhgroup要素の説明は下記です。

hgroup要素は、hgroup要素のすべてのh1–h6の子要素で構成する、セクションの見出しを表す。小見出し、代替タイトル、またはキャッチフレーズのような、要素が複数のレベルを持つ場合、見出しは、h1–h6要素の集合をグループ化するために使用する

例えば、映画のタイトル、サブタイトルをコーディングするとします。

これにhgroup要素を使うことで、タイトル、サブタイトルをひとまとめの見出しグループにできます。

何の意味がある?

hgroup要素はアクセシビリティに関係します。

hgroupを用いることでHTMLのアウトライン(文書の構造)が正しくなり、スクリーンリーダーの読み上げを正確にできます。※スクリーンリーダーが対応したら

また、文書構造に関係するので、SEO影響もあると思われます。

例えば、hgroupなしでコーディングした場合、下記のようなコードになることがあります。

このコードのアウトラインをchromeの拡張機能、headingsMapで見てみましょう。

構造を見ると、「呪われた海賊たち」と「キャスト」「スタッフ」が並列になってしまいます。

文書構造としては、へんですね。

「呪われた海賊たち」のh2をやめ、p要素に変えてみます。

アウトラインとしては問題ないようにも見えます。

しかし、下記のようなサブタイトルが情報の重要な手掛かりになる場合、アクセシビリティで問題が起こります。

『パイレーツ・オブ・カリビアン / 呪われた海賊たち』
『パイレーツ・オブ・カリビアン / デッドマンズ・チェスト』
『パイレーツ・オブ・カリビアン / ワールド・エンド』

スクリーンリーダーで見出しを拾って聞くとき、サブタイトルが読み上げられないと判断できません。すべて「パイレーツ・オブ・カリビアン 」となります。

hgroupで見出しをまとめる

タイトルとサブタイトルをhgroup要素で囲むことで『パイレーツ・オブ・カリビアン / 呪われた海賊たち』という扱いになり、アウトラインが正しくなります。

headingsMap(v 3.10.0)ではまだ、hgroupを使ったアウトラインを確認することはできません。

スクリーンリーダーNVDA(v2020.3jp)でも、hgroupを使って読み上げが変わることはありません。

2か月前、WHATWGがHTMLの標準仕様になったばかりなので、今後hgroupに対応していくと思われます。

WHATWGが標準化(W3CのHTML廃止)

W3CのHTMLが2021年1月28日で廃止となりました。現在、WHATWGのHTMLに一本化されています。HTML仕様が2つあって混乱する時代が終わりました。

W3CのHTMLは廃止

https://www.w3.org/html/にアクセスすると下記のような内容が掲載されています。

https://html.spec.whatwg.org/multipage/ は現在のHTML標準です。以前に公開された他のすべてのHTML仕様は廃止されます。

W3CのHTML5(5.2)が廃止のようです。

WHATWGとは

WHATWGはWebを進化させるため、2004年にApple、Mozilla、およびOperaの個人によって設立されたコミュニティです。2017年、Apple、Google、Microsoft、Mozillaの開発支援を受けています。(WHATWG FAQ参考)

ブラウザ開発側の企業が、W3Cの仕様に不満があり、自分たちでHTMLの仕様を標準化したようです。

標準化されたWHATWGのHTMLには数字のバージョンはなく、最終更新日で管理されています。

頻繁に更新されるので、学習量は増えるかもしれません。

睡眠への挑戦・ディスプレイの明るさを一括制御

睡眠の質を向上させるため、室内の照明を調整しています。夜は部屋を薄暗くして眠りに備えます。しかし、ディスプレイが明るすぎて眩しい。複数のディスプレイの明るさを調整できるツールをインストールしましょう。

ブルーライトより明るさが問題

Windows10の夜間モードをオンすると、日の入りと共にディスプレイのブルーライトをカットできます。

しかしトリプルディスプレイ環境では、明るさの方が問題に感じます。

自分の視界が明るく、脳が夜だと感じず、睡眠を促すメラトニンを抑制しているような気がします。

複数のディスプレイの明るさを調整できない

Windows10デフォルトでは、複数のディスプレイの明るさを調整する機能が備わっていません。

ディスプレイ本体のボタンで、個別に明るさを調整することはできますが、できればもっと簡単に変えたいです。

Win10_BrightnessSliderをインストール

Win10_BrightnessSliderを使えば、トリプルディスプレイすべての明るさを、OS側で調整できるようになります。

リンク先の「Win10_BrightnessSlider.exe」をダウンロードして実行するだけでインストールできます。

原理的にこのソフトがあるということは、毎日自動で日の出と日の入りにあわせてディスプレイの明るさを変更するプログラムも作れそうです。

・・・睡眠に影響ない範囲で、無理せず作ろうと思います。

睡眠への挑戦・シーリングライトを変えよう

睡眠の質を改善するため、自然光に近い部屋の環境を整えています。人間は明るくなると目が覚め、暗くなると眠くなる生き物です。照明でホルモンを調整してみましょう。

使い古したシーリングライト

私のオフィス(仕事部屋)は北側で、ほとんど光が入りません。シーリングライトをつけてもあまり明るくなく、1日中暗い感じがします。

シーリングライトをよく見るとカバーが変色しています。さすがにこれはひどい状態。替え時でしょう。

今まで光が全然足りなかったので、体内時計が狂い、睡眠の質が落ちていたのかもしれません。

調光できるLEDシーリングに買い替え

「popIn Aladdin 2」というシーリングライトに買い換えました。

調光・調色は 1 万通り。青空のような色から、夕焼けのような色まで調光できます。

4つまでライトモードを登録できるので、下記のようにしました。

(1)デフォルトの昼光色
(2)快晴の眩しい光
(3)夕焼けのオレンジ
(4)就寝前の薄明り

なお、色の設定画面はシーリングに取り付けられたプロジェクターから、壁に投影されます。

眩しい!太陽の光の代わりに

初期設定では8畳までに適した3800ルーメンの明るさ。さらに最大4300ルーメンまで上げることもできます。

いっきに部屋が明るくなりました。

書籍『眠る投資 ハーバードが教える世界最高の睡眠法』では、朝に人工光でも1000ルクス以上の光を浴びれば、体内時計がリセットされるようです。

おそらく4800ルーメンだと、80cmまで近づけば1000ルクスを越えるでしょう。

朝、照明の下に立てば、天気が悪くても体内時計をリセットできます。

眠りを妨げない優しい光

ライトモードを切り替えれば、就寝前の薄暗い明りにも、簡単に変更できます。

ブルーライトがカットされた、優しい暖色の光で、睡眠を妨げません。

ただ、パソコンディスプレイが眩しい状態なので、次回調整します。