Androidのメモとか

ポキオの日記です。今日も遅延してない。

2021年版ベストガジェット3つ

2021年はあまり買ってない?

ポキオ 2021年 ベストガジェット

今更ですが

毎年恒例のベストガジェットを振り返ろうと思います。あくまでも個人的な観点でのベスト3なので、異論反論オブジェクションは認めません。

白光(HAKKO) 電池式はんだこて コードレスタイプ FX901-01

まずはこれ。

ポキオ 2021年 ベストガジェット

いままで、コンセントから電源を引っ張ってくるタイプのハンダゴテを使っていましたが、経年劣化のため買い替えを検討していた際に、思い切って電池式に。コードレスになったので取り回しが楽になったのが最高です。エネループ4本でも全然稼働するので、経済面も良し。立ち上がりは遅いかもしれませんが、ガンガンはんだ付けをする感じではないので、これで充分だったりします。

OPPO A73 ダイナミック オレンジ

まさかのOppo

ポキオ 2021年 ベストガジェット

何機種も連続してMotorolaを使っていましたが、数年ぶりにMotorola以外のスマホを使いました。素のAndroid OSではないので、ちょっと気持ち悪いですが、カメラもそこそこ、バッテリーもそこそこ、薄さもそこそこで重宝しています。一番の推しポイントは「廉価なくせして、物理SIMとeSIMに両対応している」という点です。メインはIIJ mioを使いつつ、バックアップ回線として楽天モバイルをeSIMで運用しています。最近、某回線が急に使えなくなる、みたいなことがあるのでバックアップ回線は本当に重要。

Sonos Roam

最後にこれ。

ポキオ 2021年 ベストガジェット

持ち運べる高音質、そして防水。使い方は無限大です。サイクルジャージのポケットに入れてライドに連れて行ったり、キッチンで料理をしながら音楽を聞いたり、お風呂でリラックスをしながら聞いたり…。そしてSonosならではの音質がどこでも楽しめるのが良いですね。Wi-FiとBTに両対応しているので、家の中でも出先でも使えるのもヨシ。

あけましておめでとうございます

あけちゃいましたね。

ポキオ 2022年

ことしもよろしくおねがいします

先日からNode-REDで毎週月曜日に「来週から本気出します。」とつぶやくようにしたところ、かなり気が楽になりました(笑)

こんな感じで今年はゆるーく頑張っていく所存です。

ポキオ 2022年

おみくじも凶でしたからね・・・(笑)

というわけで、本ブログをよろしくおねがいします。

relativelayout.hatenablog.com

姉妹ブログも何卒よろしくおねがいします。

pokio-ringyo.hatenablog.com

upgti.hatenablog.com

Node-REDと余ったWebカメラを使って監視カメラを作ってみてわかったこと

いつもうまく行かない。

(本記事はIoTLTアドベントカレンダー20日目のネタでもあります)

ポキオ Node-RED Webカメラ 監視カメラ

余ったWebカメラを活用(したかった)

以前予備で買っておいたWebカメラですが、いざWFHで実戦投入しようと思ったけど画質が悪くて、結局使っておらず。いわゆる積みハード的な存在になってしまっていたので、今回はそれを使って監視カメラを作ってみようと思いました。

環境・材料

LifeCam HD-3000

よくあるフツーのWebカメラです。

Raspberry Pi Zero W

よくあるフツーのPi Zero Wです。(Amazon、なんか高すぎ?)

Node-RED (v1.0.3)

よくあるフツーのNode-REDです。Raspberry Pi OSプリインのものをそのまま使っています。

成果物

はじめにお伝えしておくと、Node-REDフローはこんな感じ。

ポキオ Node-RED Webカメラ 監視カメラ

Webカメラは非常用の飲料水にくくりつけて、外を監視させます。

ポキオ Node-RED Webカメラ 監視カメラ

Node-REDのDashboard機能をつかって、Webページを作成。

ポキオ Node-RED Webカメラ 監視カメラ

こんな感じです。

わかったこと

1:Webカメラノードは存在するが凝った使い方ができない(かもしれないけどよくわからない)

あんまり調べたわけではないですが、ライブラリにWebカメラ用のノードはいくつかあります。

flows.nodered.org

機能としては非常にシンプルですが、

  • 指定できる解像度が限られている
  • fswebcamのオプション設定ができない

などのCons.があり、結局fswebcamコマンドを直接叩いています。

fswebcam -S 15 -r 1280x800 image.jpg

ここで、2つポイントが。

  • -Sオプションで数フレームスキップさせてからキャプチャさせる(使ってるWebカメラの挙動的に、最初に露光調整が走り、画が白飛びすることがあるため)
  • -rオプションで解像度を指定(使ってるWebカメラの最大値をひとまず設定)

こんな感じで生のコマンドだと(当たり前ですが)カスタムできます。

2:Webカメラの暗所性能が悪い(やつを使ってるだけかもしれない)

見ての通り、夜間は使い物になりません。

ポキオ Node-RED Webカメラ 監視カメラ

fswebcamの露光時間(フレーム数)を伸ばしても、あまり画が変わらなかったので、まぁこんなものなのでしょう。もちろんWebカメラを責めている気は毛頭なく、もともと明るい室内で近くの顔を撮すのが最大のユースケースなので、仕方がないのかなと思っています。

3:Webカメラがたまに認識されなくなる(やつを使っているだけかもしれない)

これが一番困っているんですが、たまにWebカメラが認識されなくなります。具体的にはlsusbを打っても検出できず、Raspberry Piの電源を抜いて刺さないと検出されない現象がたまに起こりました。

 sudo sh -c "echo -n \"1-1\" > /sys/bus/usb/drivers/usb/unbind"
 sudo sh -c "echo -n \"1-1\" > /sys/bus/usb/drivers/usb/bind"

こんな感じでUSBのunbind/bindを繰り返しても検出できず…。電力が足りてなくて不安定になっているのか、長時間等間隔で撮影をしてだめになっているのか、はたまた個体が良くないのか、謎は深まるばかりですが、調査するくらいだったらビールを飲んでたほうが幸せなので、特に深追いはしていません(笑)

というわけで

監視カメラがほしいならちゃんとしたものを買ったほうが良いということです。餅は餅屋。

テレワーク用の椅子(6脚目)

まさかの6脚目。

ポキオ HHGears SM-115 テレワーク

突然の腰痛と椅子

二足歩行を得た人類の宿命である腰痛。そしてその宿命は突然やってきました。

ぎっくり腰のような症状に見舞われ、整形外科に行ってきました。そしてなぜか翌日には治ってしまったわけですが、(中略)、やっぱりテレワーク用の椅子が良くないのではと思い、新しい椅子を買ってみました。

これで6脚目(笑)

いままで色々座ってきましたが…。

relativelayout.hatenablog.com

relativelayout.hatenablog.com

昨今のゲーミングチェアブームに私も乗っかりたいなぁと思ったわけです。種々のハイエンドモデルも気にはなりますが、個人的にはコスパの高い椅子が欲しく色々物色してたところ・・・

game.watch.impress.co.jp

ほうほう、なかなかコスパが良さそうなゲーミングチェアを発見。ポイントが割と溜まっていたので、全額ポイントで購入してみました。実質無料ですね!

HHGears SM-115

じゃーん。

ポキオ HHGears SM-115 テレワーク

大きい箱で発送され、脚・座面・背面・肘置きなどがバラバラになった状態で入っていて、それを自分で組み立てて行きます。後での述べますが、リクライニング機構や肘置きの調整機能がない分、部品点数も少なく15分程度で組み立てることができました。

ポキオ HHGears SM-115 テレワーク

なんとなくWFH環境がぱっとみそれっぽい感じになってきましたね。

実際にWFHしてみた

背もたれは思った以上にフラット。左右のホールド感は少なめですが、腰のサポートは意外とちゃんとしている印象。

ポキオ HHGears SM-115 テレワーク

先述の通り、リクライニング機構や肘置きの調整機能はないですが、ロッキング機能があるためそこまで苦にはなりません。本当にリラックスしたければ、床に寝っ転がればいいですしね、WFHですから(笑)

ポキオ HHGears SM-115 テレワーク

そしてなにより個人的に好きな部分は、ゲーミングチェアでありがちな赤とか青の差し色がないこと。真っ黒なカラーリングなので、リビングに置いておいても、そこまで浮いた存在にはならないのがいいですねぇ。ロゴは刺繍でデカデカと入っててアレですが・・・。

レビュー

というわけで、HHGearsのSM-115でしたが。

Pros.

  • 安い
  • かんたんに組み立て可能
  • ロッキング機能つき
  • 意外と腰のサポートがある
  • カラバリで黒一色がある
  • 耐久性が高いPUレザー

Cons.

  • リクライニング機構・肘置き調整機構がない
  • 左右方向のホールド感が弱い
  • 通気性が悪いため、お尻の下に汗をかきがち
  • ランバーサポートなどクッションは付属していない
  • 「HHGears」っていうブランド名がちょっと「えちえち」

なんだかロゴがハイアットっぽいなぁと思ったんですが、全然違いました。

椅子遍歴

椅子1:IKEA MARIUS

椅子2:バランスボール

椅子3:Colemanの小さい椅子

椅子4:ポンコタン ハイバックチェア

椅子5:CASCADE ハイバックチェア

椅子6:HHGears SM-115

MacBook Airの調子が悪いのでmacOS Big SurをクリーンインストールしてNode.jsとPythonの環境をanyenvで整える

タイトルがながい。

ポキオ MacBook Air Big Sur anyenv Node.js Python

突然の絶不調

突然MacBook Airの調子が悪くなってしまったので、この際Big Surをクリーンインストールして、開発環境を整えてみます。

Big Surのクリーンインストール

これを参考に起動可能なボリュームを作成し、クリーンインストール

relativelayout.hatenablog.com

無心でHomebrewをインストール

「とりあえず生」みたいなノリ。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Node.jsとPythonの環境をanyenvで整える

今回はめんどくさいのでanyenvで環境を整えます。まずはインストール。

brew install anyenv

そして初期化。

anyenv init

で、なぜか怒られる。

# Load anyenv automatically by adding
# the following to ~/.zshrc:

eval "$(anyenv init -)"

言われたとおりに.zshrceval "$(anyenv init -)"を追加して、反映。

source .zshrc

そして再度初期化。

anyenv init

また怒られた。DV彼氏みたい。

ANYENV_DEFINITION_ROOT(/Users/pokiiio/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
> anyenv install --init

言われたとおりに初期化。

anyenv install --init

これで良いはず。

anyenv + nodenvでNode.js環境を整える

nodenvのインストール。

anyenv install nodenv
zsh -l

で、nodenvでLTSなNode.jsをインストール。

nodenv install -l
nodenv install 14.18.0
nodenv global 14.18.0
zsh -l

バージョン確認。

node -v

14.18.0が入ってるっぽいのでヨシッ。

v14.18.0

Python

pyenvもインストール。

anyenv install pyenv
zsh -l

新しめのやつをインストール。

pyenv install -l
pyenv install 3.10.0
pyenv global 3.10.0
zsh -l

念の為バージョン確認。

python3 --version

うん、大丈夫そう。

Python 3.10.0

ちなみに、pythonpipPython 3.x系になっちゃうんですね。ちょっと事故りそうで心配ですが、まぁいいです。Python 2.x系を叩きたければpython2を使えということですね。

pokiiio@pokiiio-MacBook-Air ~ % which python
/Users/pokiiio/.anyenv/envs/pyenv/shims/python
pokiiio@pokiiio-MacBook-Air ~ % which python3
/Users/pokiiio/.anyenv/envs/pyenv/shims/python3
pokiiio@pokiiio-MacBook-Air ~ % python --version
Python 3.10.0
pokiiio@pokiiio-MacBook-Air ~ % python3 --version
Python 3.10.0
pokiiio@pokiiio-MacBook-Air ~ % which pip
/Users/pokiiio/.anyenv/envs/pyenv/shims/pip
pokiiio@pokiiio-MacBook-Air ~ % which pip3
/Users/pokiiio/.anyenv/envs/pyenv/shims/pip3
pokiiio@pokiiio-MacBook-Air ~ % pip --version
pip 21.2.3 from /Users/pokiiio/.anyenv/envs/pyenv/versions/3.10.0/lib/python3.10/site-packages/pip (python 3.10)
pokiiio@pokiiio-MacBook-Air ~ % pip3 --version
pip 21.2.3 from /Users/pokiiio/.anyenv/envs/pyenv/versions/3.10.0/lib/python3.10/site-packages/pip (python 3.10)

ふーん。

pokiiio@pokiiio-MacBook-Air ~ % python2 

WARNING: Python 2.7 is not recommended. 
This version is included in macOS for compatibility with legacy software. 
Future versions of macOS will not include Python 2.7. 
Instead, it is recommended that you transition to using 'python3' from within Terminal.

Arduion関係のセットアップ

こちらを参考に。

relativelayout.hatenablog.com

台風に備えて気圧計を作る

台風がちょっと楽しくなる?

ポキオ 台風 気圧計 M5StickC BMP280

そうだ、気圧計を作ろう。

今年も台風シーズンがやってきましたね。台風が好きな人はそう多くはないと思いますし、身の安全や食料の確保などいろいろやらなければならないことは多いですよね。でもエンジニアなら、気圧計も作って設置しておきましょう。

ポキオ 台風 気圧計 M5StickC BMP280

材料はこちら。まずM5StickC。

コンパクトでディスプレイがついているマイコンで、今回はディスプレイに気圧を表示させつつ、クラウドにデータを飛ばすような実装をしてみようと思います。

そして、気圧センサーはBMP280を使います。

気圧センサーといえばおなじみのモジュールになります。モジュールのVCC、GND、SCL、SDAをそれぞれM5StickCの3.3V、GND、26、0のピンに接続しておきます。

コーディングはArduino IDE

M5StickCなのでUI FLOWでもコーディングできると思いますが、既存の豊富なライブラリを使うためにArduino IDEでコーディングしていきます。また、今回はデータをAmbientに飛ばして可視化してみようと思います。(いつもお世話になってます!)

#include <Ambient.h>
#include <Adafruit_BMP280.h>
#include <Wire.h>
#include <M5StickC.h>

#define INTERVAL 5*60*1000
#define MY_SSID "xxxxx"
#define MY_PW "xxxxx"
#define ID xxxxx
#define KEY "xxxxx"

Adafruit_BMP280 bme;
WiFiClient client;
Ambient ambient;

void setup() {
  M5.begin();
  M5.Lcd.setRotation(3);

  WiFi.begin(MY_SSID, MY_PW);
  M5.Lcd.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    M5.Lcd.print(".");
  }

  Wire.begin(0, 26);
  while (!bme.begin(0x76)) {
    M5.Lcd.println("BMP280 init fail");
  }

  ambient.begin(ID, KEY, &client);
}

void loop() {
  M5.Lcd.fillScreen(BLACK);
  float pressure = bme.readPressure();

  M5.Lcd.setCursor(0, 0);
  M5.Lcd.setTextFont(4);
  M5.Lcd.setTextSize(1);
  M5.Lcd.print("pressure[hPa]");

  M5.Lcd.setCursor(0, 26);
  M5.Lcd.setTextFont(7);
  M5.Lcd.setTextSize(1);
  M5.Lcd.printf("%4.0fhPa", pressure / 100);

  ambient.set(1, pressure / 100);
  ambient.send();

  delay(INTERVAL);
}

M5StickCはArduino IDE向けにもライブラリがあり、面倒なWi−Fi接続やディスプレイ操作が簡単にできるのでサクッとコーディングできますね。

いざ起動

こんな感じで自宅の2階の壁に貼って観察を監視します。

ポキオ 台風 気圧計 M5StickC BMP280

台風が来る前に気圧計を設置しましたが、1012hPa前後からスタートし台風接近とともにみるみる気圧が低下。

ポキオ 台風 気圧計 M5StickC BMP280

ついに994hPA前後まで到達。

ポキオ 台風 気圧計 M5StickC BMP280

今回は台風がそこまで接近しなかったこともあり994hPa止まりでしたが、2年前の台風のときは968hPaまで低下しました。

relativelayout.hatenablog.com

relativelayout.hatenablog.com

台風は恐ろしいものではありますが、こんな感じで自然現象をデータで可視化できると、ちょっと台風が楽しくなる?…なりませんね(笑)

Arduinoと3Dプリンタで4灯式信号機を作る

父は減速現示が好き。

ポキオ Arduino NeoPixel 4灯式信号機

4歳息子「信号機がほしい」

息子が日本信号の鉄道用信号機のガチャガチャを見てから、信号機がほしいと言って聞かないわけです。

まぁ、無いなら作ればいい。ということで、今回は4灯式信号機を作ってみます。

www.tomytec.co.jp

イメージはこんな感じ。進行、減速、注意、停止の現示が可能な信号機を作ります。

3Dプリンタでそれっぽい信号をつくる

なにはともあれ、信号っぽいガワを作っていきます。

ポキオ Arduino NeoPixel 4灯式信号機

Fusion 360で、信号機本体にひさしをくっつけて、それっぽくしていきます。今回は、めんどくさいので信号機の裏側や支柱などは作らないでおきます。

光源はNeoPixel

今回使用する光源はNeoPixelのLEDテープを使います。

ポキオ Arduino NeoPixel 4灯式信号機

普通のLEDを使ってもいいんですが、抵抗を挟んだりするのが面倒なのと、配線も複雑になるので、今回はこのNeoPixel系のLEDテープを使います。これだと、GND、電源、信号線の3つだけ繋げば動作させる事ができます。

全部合体させるよー

こんな感じです。

ポキオ Arduino NeoPixel 4灯式信号機

LEDテープはLED4つ分のところでハサミで切って使用しています。GND・電源・信号の線をArduinoのピンに接続していきますが、信号の線は5Vピンに近いA0ピンにさしています。

NeoPixelの特徴でもあるんですが、色をRGBで指定するため、赤は良いとしても、黄色と青(緑)色は現物を見ながら調整しています。

// 黄色
255, 128, 0

// 青色
64, 255, 0

一旦は上記のようなRGB値にしています。

光らせた様子はこちら

光を拡散させたかったので、透明のフィラメントでレンズを作り、LED部分を覆っています。

ポキオ Arduino NeoPixel 4灯式信号機

いい感じいい感じ。

ポキオ Arduino NeoPixel 4灯式信号機

信号機を綿棒の箱に輪ゴムでくっつけて、早速息子氏に遊ばせてみました。2.5秒ごとに信号が節操なく変わるようにプログラミングしてしまったので、若干ビジーかなと思ったんですが、息子的には代わる代わる信号が変わって面白そうな様子でした。

4歳息子「中継信号機と踏切がほしい」

ひとしきり遊んだあとに、息子氏が「中継信号機と踏切も」と言い出したので、おいおいそちらも着手しようと思います(笑)

コードはこちら

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(4, A0, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();
}

void loop() {
  for(int i = 0; i < 4; i++){
    switchSignal(i);
    delay(2500);
  }
}

// 0:停止 1:注意 2:減速 3:進行
void switchSignal(int i){
  long light1[4] = {pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(255, 128, 0),pixels.Color(0, 0, 0)};
  long light2[4] = {pixels.Color(255, 0, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0)};
  long light3[4] = {pixels.Color(0, 0, 0),pixels.Color(255, 128, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0)};
  long light4[4] = {pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(64, 255, 0),pixels.Color(64, 255, 0)};

  pixels.setPixelColor(0, light4[i]);
  pixels.setPixelColor(1, light3[i]);
  pixels.setPixelColor(2, light2[i]);
  pixels.setPixelColor(3, light1[i]);
  pixels.show();
}

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。