2026年9月16日水曜日

アドレサブルLEDテープの制御

 全く知らないデバイスでした。でも、めっちゃ面白い!

1cm幅程度のテープ状に大量のLEDを等間隔で並べたもので、「Addessable LED」という名前から想像する通り、並んだLED1個1個にアドレスを持っていて、制御信号を流すことによって、アドレスに対応したLEDを自在に光らせることができます。

今回はWS2812Bを選択しました。
5V駆動です。
LEDのピッチは、0.7cm間隔で並んでいます。
それを3mの長さで購入。
1m当たり144個のLEDで、3mなので、432個並んでいます。

アリエクで1,700円ほどでした。

他にも12V駆動や、LEDのピッチが30個/m、60個/mなど、色々存在します。

これが世界中で爆発的にヒットしたということで、アリエクで検索すると、無数にヒットします。アマゾンでもまあ近い価格で大量に販売されています。

今回のは3mのテープですが、好きなところで鋏で切って、分割することができます。
賢いのは、切り離しても最初の1個目が1番のアドレスを持つことです。
例えば、長いテープの10個目と11個目の間で切り離すと、11個目が1番のアドレスになります。

テープには、はんだ付け用のランドがあるので、逆に、離れた位置にあるテープを電線3本で繋ぐことで、一連のアドレスで制御できます。

上記の例で言うと、切り離した10個目と11個目の間を電線で繋げば、10番の次が11番からのアドレスになります。

制御には、Raspberry pi Pico W を使いました。別の予定で買っておいた手持ちでしたが、新しく買っても2,000円弱で入手できるはずです。
これ1個で好きな位置のLEDを好きな色に光らせる(もちろん消灯も)ことができます。

他に必要な機材として、ほんとに400個ほどを一度に光らす可能性があるなら、別途5Vを供給する高出力の電源が必要です。
1個当たり60mA程度なので、400個同時に点灯すると、24A必要です。

今回は、210個ほどを光らせるつもり(テープを並べてマトリックス状に配置し、デジタル時計にしたかったので、絶対光らない箇所もあるので、同時点灯は150個ほどかな。)なので、昔のデスクトップパソコンから取り外して保管しておいたATX電源を使うことにしました。

とりあえず、WindowsパソコンとPicoをUSBで接続して、VSCodeでPico にPython をセットして、数行のコマンドを書くと、10個ほどのLEDを光らせることができました。
(LEDは10個なので、PicoもLEDもUSBからの電源供給だけで動作してます。)

2026年8月15日土曜日

MarkText の日本語化

 MarkDown形式のエディターでWinodws上でインストール(管理者権限)無しで動くものとして、MarkText があります。

これをGitHubからダウンロードして、解凍して、MarkDown.exeをダブルクリックすると、めちゃめちゃあっさりしたウインドが開きます。

左上にメニューを表示するボタンがあるので、押したら、全部英語。そりゃまあそうです。
このままではなかなか使いこなすのはつらいので、日本語化します。

メニューボタンから File → Preferences で別ウインドが開くので、General の中の一番下の方に Language: があるから、日本語を選択。で日本語化完了。

特に追加ファイルなどは不要。

File → Preferences はショートカットが用意されていて、「CTRL」+「,(コンマ)」で開けます。

2025年8月14日木曜日

SONY Xperia 10Ⅳ の電源スイッチが陥没(?)して電源を入れれなくなったので、分解(破壊?)修理

 Xperiaにはよくある症状のようですが、電源ボタンが陥没(?)してしまって、押せなくなりました。

電源が入った状態でこの症状になっても、シャットダウンしなければ、なんとか使用できます。

スリープ状態(画面が黒い状態)になっても、充電ケーブルを挿せば、画面が点灯し、ロック画面になって、パスワードを入れることができるので、通常通りうごきます。逆に通常使用状態からスリープ画面にするのが、電源ボタンが効かないとちょっと難しいけど、まあ、スリープ時間を短めにすれば、勝手にスリープするので、なんとかなる。

ところが、完全にシャットダウンしてしまうと、電源ボタン無しではどうやっても電源を入れることができなくなります。

意識的にシャットダウンしたり、気づいたらバッテリー切れでシャットダウンしていたり。

こうなるとお手上げ。途方にくれます。

修理に出すか、新しいのを買うか。

新しいのを買っても、電源を入れないことにはデータ移行ができないので、非常に困ります。

なんとか、1回だけでも電源が入ってくれれば、新規購入した機種にデータ移行できるのに~。

とりあえず、スマホ無しでは生きていけないので、新機種を買って、電源ボタンが壊れた方は廃棄処分するしかどうしようもない。

どうせ廃棄処分するなら、死亡覚悟で、分解修理してみる。
分解というと、元に戻せるという意味になるかと思うので、実際には「破壊」かも。

まずは、ヒートガンを使って、裏蓋を外す。まあ、なんとか外せる。でも、バッテリーが非常に固く接着されているので、これを無理やり取り外そうとすると、他の部分を破壊してしまいそう。

なので、ちょっと作戦変更で、本体外側から電源ボタン部分だけを破壊してみる。
これだと、裏蓋を外した意味はなくなる。
逆にヒートガンなどを持っていなくても修理可能。

本体右側面にある電源ボタンの上側に、わずかな隙間があるので、そこにできるだけ細いマイナスドライバーなどを突っ込んで、外に向けてグニッとねじると、かなり勇気が要りますが、失敗しても失うものは無い(すでに失っている)ので、思い切ってグニッ!

電源ボタンは上側には配線は無く、下側に配線があるので、上側は本体から外れます。
下側は本体に接続されたままなので、電源ボタンはプラプラした状態となります。

これで、取り外しに使ったマイナスドライバーなどで、電源ボタン付近をチコチコいじれば、何かの拍子に電源が入ります。

電源さえ入ってしまえばこっちのもん!

新機種にデータ移行して、完了。

破壊した方はもう元に戻せないし、形だけ元に戻せたとしても、そうしたら電源を押せないし、防水なども全く効かないので、普通に使うことはできない。

でもまあ、性能的にはまだ使える範囲なので、とりあえずコレクションとして保存しておきます。


2025年3月24日月曜日

Windows10のプリンター名が変更できない。

 Windows10にプリンタードライバーを入れた。

ところが、プリンター本体が来るまでに、先にドライバーだけ入れておこうと思ったのが間違いで、プリンターを繋いでも認識しない。

そこで、メーカー指定の手順通り、一度プリンターの電源を切り、再度投入してからドライバーを入れると、きちんと接続できて、印刷もできるようになった。

でも、プリンター名が、「〇〇(コピー2)」みたいな名前になってしまった。
こちらがちゃんとつながる方なので、先にいれて繋がらない方の「〇〇」というプリンターを削除した。

それから、「〇〇(コピー2)」の名前を変更して、「〇〇」にしようとしたら、「その名前は既に使われてるので変更できません。」みたいなメッセージが出て、名前が変更できない。

以下の処理で対応

1,ファイル名を指定して実行(Windows+R)で services.msc を入力して「サービス」を起動。(コントロールパネル→管理ツール→サービスでも可)

2,Print Spooler を探して、サービスを停止

3,%WINDIR%\ystem32\spool\PRINTERS 配下のファイルを全部削除。(「Print Spooler」サービスを停止しているので、必要なファイルは無いはず。)

4,「サービス」に戻って、先ほど停止した「Print Spooler」 サービスを開始

これで、プリンター名の変更ができるはず。

2024年9月10日火曜日

Access のRunTime版でアクションクエリのメッセージを消す

 Public Function Mess_OFF()

'レコード更新確認
    Application.SetOption "Confirm Record Changes", False


'オブジェクトの削除
    Application.SetOption "Confirm Document Deletions", False
'でも、そもそもRunTime版ではオブジェクトの削除ができない?
'いや、VBAで削除することも考えられるか。


'アクションクエリ実行
    Application.SetOption "Confirm Action Queries", False

End Function

2024年3月18日月曜日

VBAからPDFファイルの特定のページを印刷する PDF-Xchange Viewer を使用

 ExcelやAccessのVBAからPDFファイルの特定のページを印刷するためには、一般的には「Acrobat」が必要で、「Acrobat Reader」ではなかなか上手くいかない。

「Acrobat」があっても、結構複雑な処理を書かないとだめ。

そこで、「PDF-Xchange Viewer」に行き着いた。
これは結構前に開発が終了していて、「PDF-Xchange Editer」になっているが、今でも窓の杜からダウンロードすることができた。

EditerではなくてViewerがいい点は、インストールが必要なく、「PDFXCview.exe」だけで動くこと。
EditerはEXE単体では動かない。

Shell "c:\pro****\PDFXCview.exe /print:pages='3-5' 'c:\target.pdf'"

これだけで標準プリンターから指定ページ(例なら3,4,5ページ)を出力して、自動的にViewerを終了する。そもそもバックグラウンドで動くので、終了したかどうかは画面上は不明です。

「pages='1-5'」とすれば1から5ページまでを印刷する。
「pages='3,5,7'」とすれば、3と5と7ページを印刷する。
「pages='1-3,5'」とすれば1から3ページまでと、5ページを印刷する。

まあ想像通りの動作です。

これを一つのプリントキューとして流すので、両面印刷設定済みのプリンターに対して、「pages='1-3,5'」と指定すれば、1枚目の紙の表に1ページ、裏に2ページ、2枚目の紙の表に3ページ、2枚目の紙の裏に5ページを印刷します。

これも想像通りの動作です。

もし、上記の例で、5ページを3枚目の表に印刷したければ、処理を分けて、1-3で1回流して、5ページだけを2回目として流すことになります。

追記
PDF-Xchange Viewer はダウンロードのあと、一度インストール作業が必要で、インストール後は、 「PDFXCview.exe」だけをどこか他のフォルダや、他のパソコンに移動させても使えます。
その際にPDFXCview.exeを置いているフォルダの下に、「language」フォルダと、その中の「pdfxvw_jpn.xml」ファイルを持ってきておくと、日本語メニューが使えるので助かります。

さらに追記
表題のとおり、VBAを使って、PDF-Xchange Viewerで連続印刷をすると、VBAからはじゃんじゃんプリント命令が送られて、スプーラーに溜まっていく。
スプーラーは、送られてきた順番に印刷するんだと思っていたら、そうではなくて、大量のスプールがされていると、スプーラーが気に入った(?)データからプリンターに送られるようです。
したがって、予期しない順番で紙が出てきます。
(もちろん、1個のスプールデータの中はきちんと指示通りに出ます。)
例えば、
1個のPDFファイルの、1-3ページ、5-7ページ、10ページ、15-20ページ、25ページを印刷みたいな処理を流すと、プリンターから1-3ページの次に10ページの紙が出てきたりします。
これを完全に回避する方法は無いような感じです。
仕方ないので、VBA側で処理にウエイトを入れて、スプーラーにデータが溜まらないようにするぐらいで逃げています。ウエイトを入れすぎると全ての印刷が完了するまでの時間が伸びるので、ちょうどいいウエイトをどう考えるか?
プリンターの印刷速度(30枚/分とか)と、プリンター本体のバッファー(メモリー)を勘案しながら、試行錯誤ですね。

2024年2月1日木曜日

VBA の Keybd_Event のパラメタの件

画面のハードコピー(スクリーンキャプチャ)を撮って、自動で印刷したくて、(画面ハードコピーツール)エクセルのマクロを作ったときにちょっとはまった。

多くの参考Web上では、第2パラメタを「使用しないので、常に0を指定。」としていることが多いのですが、私が参考にしたのはちょっと違いました。

多い解説

Sub 全画面()
    keybd_event &H2C, 0, 0, 0        'Print screen押す
    keybd_event &H2C, 0, 2, 0        'Print screen上げる
End Sub 

Sub アクティブウインドウのみ()
    keybd_event &H12, 0, 0, 0        'ALT押す
    keybd_event &H2C, 0, 0, 0        'Print screen押す
    keybd_event &H2C, 0, 2, 0        'Print screen上げる
    keybd_event &H12C, 0, 2, 0        'Print screen上げる
End Sub 

この第2パラメタを「1」にすれば、「ALT」を押しながら「PrintScreen」=アクティブウインドウのみになります。

Sub アクティブウインドウのみ()
    keybd_event &H2C, 1, 0, 0        'Print screen押す
    keybd_event &H2C, 1, 2, 0        'Print screen上げる
End Sub 

'MSの解説の意訳
keybd_event  bVk, bScan, dwFlags, dwExtraInfo
bVk=仮想キーコード(16進のキーコード)
bScan=キーのハードウェア スキャン コード(意味は不明だが、PrintScreenの時はとりあえず使える。)
dwFlags=関数操作のさまざまな側面を制御します。 このパラメーターには、次の 1 つ以上の値を指定できます(意味は不明だが、「0」を指定すれば、キーを押し下げ、「1」を指定すれば、押している(指定した)キーを放します。)
dwExtraInfo=意味不明かつ使い道不明