アクリルプレート用の光るスタンド作り

動機は?

たまによくある記念品のアクリル彫刻されたプレートを立てるためのスタンドが欲しくなった。1000円ぐらいで市販されてるけどせっかくなので自作にトライ。(過去に2~3回作ってるけど記録してなかった……)

ケースは試行錯誤

ケース形状はいつもどおりFusion360で試行錯誤。今回の目指す形は、単4駆動、どうせ裏向きなので電池蓋なし。PUSHのトグルスイッチで電源ON、昇圧モジュールで5Vを生成してる。

テープLEDは白色の通電するだけで光るものを使用。(最初はNeoPixel+ATTiny85のつもりでケースの幅も考えてたけど光の色変えなくてよいというリクエストだったのと、マイコン入る隙間がなくなりそうだったので、単色にした。)

NeoPixelに比べると単色テープは幅も厚みも小さいのでアダプタを作ってケースにマッチさせた。

ケース上部のスイッチ穴とケース下部に絶妙な大きさで突起を作ることで、接着剤なしでPUSHスイッチを固定できている。

電池ケースのケーブルと、テープLEDの配線を通すために、ケース下部は左右に溝がある形にしている。サポートなしで印刷できるように”<”の形。

素材

フィラメントはPolyMaxのPLA灰色
昇圧コンバータ―
PS-85S(秋月在庫切れ?)
単4電池ボックス
白色テープLED

最後に

いつものことながら、Fusion360をいじっていると、ついついギリギリサイズを狙うせいで、かなり窮屈になってしまう。なんとかケースに収まってよかった……

レーザーカッターで定規を作った

2年前にもやったけど、そのときは記録を残してなくて、やり方を思い出すのに苦労したので、今回はちゃんと記録する!

2023/05/06追記

赤線0.001mmでカットなのになぜかまったく認識されない。
→赤(255,0,0)の濃度が95%になっていた。100%にしたらいけた?

イラストの画像ファイルとカットのラインが重なっているとカットされてない気がする。

作るもの

厚さ2mmのアクリル板を使った定規。横幅102mmほどで縦が26mmぐらい。

適当なフォントでデータを準備した状態。普通にレーザーカッターを使う場合、文字や絵の部分はレーザーカッターの彫刻モードで、ラスタースキャン的に彫刻することになるけど、細いレーザーで何本も線を引いて面を塗りつぶすような動きなので、かなり時間がかかる。レーザーカッターの利用時間をなるべく短くしたいので、だいたいいつも彫刻モードを使わない方法で、文字や絵入れするようにしている。

やりかた

絵や文字の部分を線画として考えて、出力を落としたカットモードでなぞる。こうすると、本当に線のある部分だけをなぞるので、彫刻モードよりもだいぶはやい。ただし、線画として扱うためには、データが線で表現されている必要がある。

フォントを単線にする

ふつうにやると、フォントの一画一画は面積のある状態。これを単線にするにはいろいろ方法があると思うけど、アルファベットの場合は、Inkscapeのエクステンション-テキスト-Hersheyテキストを使うとよい。

文字列の部分を単線化した
tutuurara.comのところはオブジェクトをパスに変換して、輪郭線だけにする

気を付けること

線の太さは0.001mmにするけど、アウトライン表示だと見え方がだいぶ違うので、なるべく直前で0.001mmに設定するようにしている。

Inkscapeでグループやクリップグループとしてまとめられていると、Illustratorで開いたときにうまく選択できないことがあったので、カット用のデータを準備するときにはなるべくグループ化は解除しておいた方がいいかも。(アウトライン表示にするとクリップグループが緑の線で可視化されてた気がする。)

Speedy100の設定

以前、黒にカットを割り当てたけどうまくいかなかったことがあったので、赤を浅めのカット線、青を切断用のカット線に設定した。印刷操作するたびにマテリアル設定がもとに戻ることがあったので気を付ける。

・黒:スキップにする
・赤:カット、パワー 31.0、スピード 2.50、PPI/Hz 5000Hz
・青:カット、パワー100.0、スピード0.60、PPI/Hz 5000Hz

仕上げ

アクリルの保護紙をはがすのはしばらくお湯につけるのが一番楽。

紙をはがしたら、浅くカットした部分にポスカでインクを流し込む。細かい文字が連続している部分は、流し込むというよりインクを過剰に出しつつ、ベタ塗りするようなイメージ。

ポスカは細字よりも中ぐらいのほうが塗りやすかった。もっと太いのでもよかったかも。

最後に

諸事情で年に1度ぐらいノベルティグッズ的なものを作ってるけど、ちゃんとノウハウをメモしておかないと、びっくりするぐらい忘れてしまう。

今回はSpeedy100でカットしたけど、前回定規を作ったときは家の非力なレーザーカッターで浅めのカットだけ実施して、定規の外形はテーブルソーで切った。これは本当に本当に大変だった。。。

時間のことを考えると、外形だけSpeedy100で切らせてもらって、文字とかイラスト部分は家でゆっくりやる方式でもいいかもしれない。

家のレーザーカッターを使うときは、InkscapeのGcodetoolsでデータを生成して、LaserGRBLでカットした、、はず。

どん太君のシール(小さめ)を注文した

5年前に一度、どん太君シールを作ったことがある。

当時の印刷確認データ

このシールを作ったときは、どん太君の頭部が細長いものだと信じていたけど、実はこの部分はストラップを意識した紐だった。

ちょっと作りすぎた

たくさん注文したほうが単価が安くなるので、上の画像にもある通り1000枚作ったのだけど、全然消費できず。まだ500枚以上残っている。

配布以外の用途もあった

主な使い道はMaker Faireに出展したときと、名刺を配るときにおまけで配る用と思ってたのだけど、それ以外に、自分の持ち物を主張するのにもちょうどいいということに気が付いて、身の回りの品に気軽にぺたぺた張り付けている。

Mocopiにシールぺたぺた

先日、Mocopiを手に入れたので、さっそくケースにシールを張り付けた。

上のツイートで書いている通り、センサー本体のスイッチ部分がちょうどいい感じのマルなので、そこにもシールを貼りたくなった。

ということで、直径15mmの小さい丸シールを注文してみた。

素材を変えてみた

前回はユポ紙だったけど今回はPVCにしてみた(前回と同じステッカージャパンさん)。発注した後で無料の素材サンプルを注文して、触り心地を試してみた感じでは、屋外用塩ビマットが一番上質な感じで気に入った。

今回はちゃんとストラップ部分なしにしたバージョン

印刷可能範囲の都合で、ものすごく小さくなってしまったけど、予定通りマイモコピにはピッタリサイズで貼り付けできた。

終わりに

マスコットキャラクターを決めて、気軽にシール作ってみると、いろいろなものに貼り付けられて楽しいので、おすすめです。

次回は塩ビマットで注文する。

クリスタル彫刻の置物をモデリングした

クリスタルペーパーウェイトをつくってみる

なにかの記念品として、クリスタルのペーパーウェイトが配られたりする。内部にレーザーで立体的な文字や像が彫刻されてるもの。

それっぽいものをBlenderでモデリングしてみる。できればUnityにも持って行って、VRゴーグルやスマホARで表示もしてみたい。

モデリングする

サイズを6cmx4cmx4cmに設定する
EditモードでCtrl+Bして適当な幅だけベベルする
マテリアルをNewして、GlassBSDFにする。Roughnessを0にしてツヤツヤにする。ガラスのIORは1.5ぐらいらしいので変えたほうがいいかも。
Render EngineがEeveeだと透明なものが透明にならないので、(重くなるけど)Cyclesにする。
透明に見えるようにViewportをシェーディング表示に切り替える
ガラス単品だと見えづらいのでMeshのPlaneを追加して床にする。
床の位置を-2cmにする(なぜかRoughnessが0になってなかった。ここまでのガラスはちょっと濁ってる。)
埋め込むものを用意する(文字とかロゴとかならSVGをimportしてmesh化して厚み付けする)
スザンヌのマテリアルを設定する。Glass BSDFで、ちょっとRoughnessあり。

とりあえずこれで終わり。あとは背景に適当なHDRI画像とかを置いてレンダリングする。

レンダー中……

さいごに

今回のやりかたでは、ちょっと濁ったガラスで彫刻部分を表現しているけど、本物のクリスタル彫刻だと、レーザー照射で作られた細かな点の寄せ集めで文字や像を表現しているので、スザンヌ部分をパーティクルとかで表現すればもっと本物ぽくできるだろうか。

AndroidAutomotiveをビルドしてみる

追記(20時頃に無事Pixel4到着)

ブラックフライデー影響で今日はヤマトの配達が遅延してるみたい。

とりあえず、ビルドしたAndroid Automotiveはうまく動いた。非Automotive版もビルドしてみたけどこっちも動いた。PlayStoreとかのGoogle製アプリが入ってないとランチャーがかなりシンプル。

メルカリでPixel4入手

個人的にビルドするのは4年ぶり2回目。Pixel4で動かしてみる。

4年前にhakata.apkという集まりでLTした。

参考にしたのは以下のページ。Pixel3a,4,4a,5,(Experimentalで6, 6Pro)が対象で、ちゃんと検証されてるのは4a(5G)と5らしい。ただ、どの機種でもBluetoothは動かないらしいので、機種ごとでの違いが、どの程度あるのかはよくわからず。

https://source.android.com/docs/devices/automotive/start/pixelxl

ビルド対象のバージョンが微妙にちがう

Pixel 3a〜5は、SP1A.210812.016.A1 (android-12.0.0_r3) が指定されていて、Pixel6と6Proは、SD1A.210817.015.A4 (android-12.0.0_r4)が指定されている。

今回はPixel4向けなので、とりあえずは指定通りr3でビルドする。あとで12.1系のも試してみよう。

手順

公式サイトの手順通りでいいけど、proprietary binariesとlunchのターゲットは使いたい機種に応じて選ばないといけない。

ここから機種名とAndroidのバージョンにピッタリ合うのを探して使う。Pixel4でSP1A.210812.016.A1向けだと、「Pixel 4 binaries for Android 12.0.0 (SP1A.210812.016.A1)」のところにある2つ。

https://developers.google.com/android/drivers

proprietary binariesをダウンロードをするついでに、ターゲット端末の名称(コードネーム?)を把握しておく。「Pixel 4 (“flame”)」のように書いてある。

lunchでビルドターゲットを選ぶときに、この名前を使って指定する。Pixel4向けの場合だと、lunch aosp_flame_car-userdebug になる。

あとは公式サイト手順通りでよいはず。

今ビルド中

ソースコードのダウンロードが1時間ぐらい。ビルドが2時間かからないぐらいで終わりそう。

さいごに

メルカリで買ったPixel4さん。今日の午前中指定にしてたんだけど、まだ届かない(今、19時12分)。と書いてる間にビルド終わっちゃった。

パソコン不調なので部品交換する!(2022/12/3)

追記(12/3 18:40)

パソコン工房でCPU(5700X)とRAM(CFD)とついでにHDD(Seagate 8TB)を買ってきた。

お店に行くまで気づかなかったんだけど、ネクスペイが使えたので20%引きでCPUとRAMが手に入った計算。

Ryzen7はCPUクーラーついてないのを忘れててまったくチェックしてなかったので、お店の人に適当なのを見繕ってもらった。それとRAMは32GBx2にしたかったけど在庫がなかったので16GBx4にした。どっちみちB450だと最大64GBらしいし、次の買い替えのときにはDDR5が標準になってるだろう。きっと。

HDDは安売りしてたので買ってみた。緑電子とかQuantumとか東芝とかWDは使ったことあるけど、SeagateのHDDは初めてかも。(覚えてないだけでさすがに使ったことあるかな……)

12月入ったあたりから毎日ブルースクリーン

ちゃんと記事にしてなかったので記憶があいまいだけど、たしか、今使ってるRyzen5 1600は、B350チップセットのマザーボードで使ってたはず。

マザーボードのBIOS更新失敗かなにかで、使えなくなってしまったから、マザーボードだけB450に買い替えた記憶がある。(ダメになったほうのマザーボードはその後、ラズパイをマザーボードに直結してあげることでBIOS更新できた)

マザーボード交換したときにRAMを買い足したはずなんだけど、交換直後からちょっと不調だった。

最初8GBx2だったのに、そこに追加で8GBx2を買い足したんだけど、メーカーが違ったせいか、最大帯域が違ったせいか。RAM混在はよくなかったんだろうな。

今の構成

マザーボード
ASUS TUF B450-PRO GAMING

CPU
Ryzen5 1600

RAM
CFD DDR4 8GB (D4U2666PS-8GC19) x 2
Corsair DDR4 8GB (CMK16GX4M2A2666C16) x 2

GPU
Palit NVIDIA GeForce GTX1070 8GB DUAL

交換候補

とりあえずRAM不調を疑ってるのでRAMは変える。ついでにCPUもそろそろ変えたい。消費電力高すぎないほうがいいので、候補としてはRyzen5 5600か5700xを考えてる。とりあえずGPUは今のままでいいかな。

CPU変えるならマザーボードも変えた方が良いかなぁ。B450でも使えなくはないみたいだけど。あれ??B650っていうのもでてる??
微妙に350から450に交換してしまってるのが悩ましいところ。B450のままでいいかなー。

CPUどっちにするか

マザーボードそのままでCPUをいいほうにしようかな。
RAMを32GBx2にして、CPUは5700xでどうだろか。

これでいく

マザーボード
変えない

CPU
Ryzen7 5700x

RAM
どこかのDDR4 32GB x2

GPU
変えない

さいごに

これで、RAM変えてもブルースクリーン改善しなくて、不調の原因が実はマザーボードだったとかいうのがあるあるな感じだけど。どうなるかな。

名前PICKERをアップデートした

2023/12/06追記

電池切れ。

2022/10/19追記

今日電池切れ。2022年6月に作ったので思った以上に長持ちした。電池一本でもよかったのかもしれないけど、電池本数減らしても厚みは減らせないから、逆に3本に増やしてもいいのかも。

用途も使い方も前回と同じ

あらかじめ登録された複数人の中からランダムに一名を指定するための装置。授業中に回答者を指定するために使うことを想定してます。

今回注力したところ

簡単に電池交換できることと、文字を大きく表示できるようにOLED2枚使いにしたところ。

前回のNamePickerはCR2032を使っていたのだけれど、ケースを開けて配線丸出しにしないと電池交換できなかった(LEDをもいだ効果か、3週間ぐらいは電池が持った様子)。

今回はできるだけ手軽に電池交換できるように、部品の入っている空間と電池の入る空間を分けて、スライド式で開けられる電池蓋をつけた。

また、前回は128×32のOLED1枚を使っていたけど、文字が小さすぎて名前がよく読めないという問題があったので、今回は128×64のOLEDを2枚組み合わせて使って、文字を大きく表示できるようにした。

LovyanGFXでつまづいた

実は前回も128×32のOLEDを使おうとしたときに、偶数行奇数行の描画順序の問題でつまづいて、らびやんさん(@lovyan03)にアドバイスいただいていたんだけど、今回は1つのマイコンで2枚のOLEDを扱おうとしたら最後にinitを読んだ方しか使えない問題でつまづいて、またまたアドバイス頂いた。

LovyanGFXでは、I2Cに使うピンを自由に選べるので、てっきりソフトウェア的なI2Cだと思い込んでいたんだけど、実はESP32のコードではハードウェアI2C(ESP32には2個あるらしい)を使っているとのこと。ただ、ESP8266向けのほうはソフトウェアでやってるので、そちらのコードを移植してくれば3つ以上のディスプレイも使えるかもとのこと。

前回も今回も、つぶやいた直後にアドバイス送ってくださってるんだけど、いったいどういう仕組みで監視しているのか……
ありがたや。

Fusion360もがんばった

今回はちょっと頑張ってモデリングした。趣味のロボット製作という本を参考にさせてもらって、ケースそのものだけではなくて、OLEDやボタン、電池など、内蔵される部品もモデリングしたり既存データを取り込んだりして、中身が見える状態でケースをモデリングした。

いつもはケースに組み込む部品のサイズだけをノギスで計って、その部品が配置できるだけの空間を空想しながらモデリングしてたけど、ちゃんと部品もモデリングすると、干渉するかどうかが正確にわかるので、格段にケースが作りやすかった。

最後に

今回、初めてFusion360で各パーツをコンポーネントとして定義した。(今まで全部1コンポーネント内に複数ボディとして作っていた……)

コンポーネントに分離すると、移動もできるし、色分けも簡単にできるし、アニメーションも作れる。ということで組み立てアニメーションも作ってみた。

今回は、Fusion360を活用できたので満足。

名前Pickerをつくった

OLEDとプッシュスイッチ2つ

用途

あらかじめ登録された複数人の中からランダムに一名を指定するための装置。授業中に回答者を指定するために使うことを想定してます。

使い方

右側の横長の枠部分が名前が表示される部分。左端の灰色のボタンがクラス切り替えスイッチ。水色ボタンはPickボタンで、Pushするたびに、現在選択中のクラスからランダムに一名の名前とふりがなと通し番号が表示される。

一度表示された名前は、クラス全員が表示されるまでは再表示されない。この仕様を実現するためには、クラスの全員に対して、ランダムに順番を割り当てておいて、それを順に表示していけばよいので、クラス切り替え時とクラス全員の名前表示が一巡したときに、現在選択されているクラス全員分の順番決め抽選を実施している。

今回注力したところ

今回は、「DeepSleep機能活用でハード的な電源スイッチをなくすこと」を目標にした。いちいち使い終わるたびに電源オフするのは面倒なので、電源スイッチなしで長時間駆動を実現しようとして頑張ってみた。

回路図をきれいに書く術を知りたい……

M5Stamp(ほかのM5シリーズも同じぽい)は、DeepSleep中はRTC部分だけ?が動いているらしい。変数を宣言するときにRTC用のRAMとして属性を宣言してあげると復帰後も変数の中身が保持されている。

Lang-shipさんのサイトがとても参考になった。

https://lang-ship.com/blog/work/esp32-deep-sleep/

ケースづくりノウハウ

こういう小物のケースを作るときには、いつも適当にFusion360をいじってるのだけど、毎回行き当たりばったりなのと、ボタンやマイコン、ケースのフタをうまく固定するような形状にできなくて、ホットボンドや接着剤だよりになってしまってるのが困りどころ。

先日、@ina_ani さんが投稿されていたLibreCADとOpenSCADを組み合わせるという方法が気になってる。

Fusion360も捨てがたい

今朝、Prusa用のエンクロージャーが発表されたというツイートから、いろいろ3Dプリンタ系のブログを見ていて、偶然見つけたのだけれど、電子辞書Hackで有名な@puhitakuさんの記事で紹介されていた「Fusion360でCAD設計を覚えよう」シリーズも気になる。

最後に

いつも通りとりとめのない記事になってしまったけど、とりあえず、今回のCR2032x2でどれぐらい電池が持つかが気になるところ。DeepSleep中の電流は当初0.35mAだったけど、M5StampのLEDを除去したら0.15mAになったので、(計算よく分からんけど)1週間以上は持つ、かな……

LEDパネルでドット絵表示

ツイッターで見かけたLEDパネルを作ってみる!

zerotaro さんの作品と、PikaPikaらいとさんの作品をみて、類似品を作ってみることにした!

https://twitter.com/KPmilk3/status/1469949365339176960

LEDパネルをどうするか

手元にNeoPixelのテープLEDがあるので、zerotaroさん方式でやってみようと思って検討してみたのだけれど、手持ちのテープLEDは1mに144LEDのものと1mに60LEDのものだった。

なるべく密度高めで作りたかったので1mに144LEDのほうを使おうとしたところ、LEDの間隔(約7mm)に対してテープの幅(12mm)が太すぎて、テープをぴっちり並べても正方形ドットを表現できないことに気が付いた。

もともとテープ折り返しの部分のはんだ付け面倒そうだなぁと思っていたのも相まって、ありものの16x16LEDパネルを使うPikaPikaらいとさん方式に切り替えた。

LEDパネルが売ってない?!

PikaPikaらいとさんの購入先を見に行くと、8×8と8×32のパネルはあるけれど、16×16は売っていない様子。

AliExpressを見に行くと、16×16が3枚セットで3400円ぐらいだったので、とりえあず注文。到着が3/30予定になっていたけど、3/16までに完成させたかったので、国内で売ってないか探してみたところ、秋月通商で1枚3800円で売ってるのを発見😢。送料+500円で合計4300円で1枚購入。AliExpress分と合わせて計算すると1枚1900円ぐらいに薄まるはず。

マイコンはSeeeduino XIAOに決めた

以前調べた小さいマイコンたちのうち、Seeed XIAO BLEがバッテリーチャージャー付なので魅力的なんだけど、まだ日本で販売されていないぽい。(IMUなしのほうを1つだけ買ったけど、技適あり版が欲しい!)

ということで、Seeeduino XIAOを使うことにした。(あらためて表を見返してみたらSeeed XIAO RP2040を試してみてもよかった。せっかく買ったのにこちらも使ってない……)

ソフトは適当に作った

画像をコードに置き換えるのが面倒だったので、こちらのサイトを使わせてもらった。Web系?を想定されているのか、頭に0xではなくて#がつくので、#を0xに置換。int型配列にRGBの3バイト分をいれてるのでちょっと無駄があるけど、気にしない!実行時に1バイトずつシフトしてRGB取り出している。あと、電流たくさんになるのが怖いので明るさ4分の1にしている。コードぐちゃぐちゃだけど、あとでgithubに追加するつもり。

2022/3/19追記
登録した!
https://github.com/yusukeyusuke/pixelart-led-panel

画像の色とLEDの色は全然違う

いつも思うけど、画面上で見てる色と、LEDで表現した色は全然違うように見える。画面上ではかなり暗めに調節したほうがよい気がする。

枠を印刷

LEDパネルをドット絵らしくみせるための秘訣は四角い枠と拡散用の半透明の板。以前、3Dプリントのデータに一時停止の命令を入れておいて、その間にフィラメントの色を変えるという技を覚えたんだけど、今回は白と黒の同素材のフィラメントがないのでこの技は使えず。(もしかすると、途中で温度も変えるように設定しておけばいけなくはないのかも)

枠のSTLデータも後ほどgithubに登録するつもり。

2022/3/19追記
登録した!
https://github.com/yusukeyusuke/pixelart-led-panel

黒い枠はPCで、白い薄い拡散板はPLAで印刷した。

枠に拡散版を重ねる(この枠はお試し印刷の白枠)
上半分が黒枠、下半分が白枠。黒のほうがドットの輪郭がはっきりする

XIAOをケースにいれて完成!

最後に

今回はLEDパネルを使ったけど、zerotaroさん方式で任意の形状を表現できるのもやってみたい!!

レーザーカッターでカット&溝彫りした

久しぶりに触ると大体なにかミスする

次回のミスを少しでも減らすためにここにメモしておく。

大前提

「ファイル→プリント→プリンター→詳細設定」のところから「印刷」を押す。この行為で印刷範囲がイラストレーター側に反映されているような気がする。これをやらずにそのまま「ファイル→プリント→プリント」にいくと、(おそらく印刷範囲の関係で) JobControl側に空っぽのJobが登録されてしまう。

切り分けがちゃんとできるように

大前提の設定をミスっていると、それ以降の切り分けがうまくいかないので、大前提+シンプルな赤線(0.001mm)だけのデータで、JobControlに認識してもらえるか試した方がいい。

今回トラブったのは、InkScapeでデータを作ったときに、レイヤーを分けてトレース元のビットマップ画像を張り付けていたこと、そしてそのレイヤーを非表示にしていたこと。

色にも秘密がありそう

印刷時間を短縮するために、基本的に彫刻は使わず、カットのみで済むようにしている。アクリル2㎜に対して、パワー31、スピード2.00、PPI/Hz 5000で、切り落とさずに溝を彫りこむようにした。

デフォルト設定だと、黒が彫刻で赤がカットになっているので、黒の設定を上記の値に変えればちょうどよいかと思いきや、どうも黒だけ特別設定?になっているようでうまくカットして認識してくれない。

色の優先度順を変える方法が分からなかったんので、赤を溝彫りの強さに変えて、青をカットにすることでなんとか思い通りにカット&溝彫りできるようになった。

最後に

データを作るのはInkScapeだけど、現地ではイラストレーターで印刷するので、違いに戸惑うところもあるし、時間貸しなので気持ちも焦るしで、レーザーカットしに行くと毎回かなり疲れてしまう。

次回はスムーズにいけるといいな。

2022/2/23追記

今回もミスった!!!

両面に加工してるのだけど、表裏の位置合わせがいまいちだったのと、加工中の本体の揺れで材料が移動してしまったので、いろいろずれた。

表裏の位置合わせは、1か所でやるんじゃなくて、2か所でやらないと、回転方向のずれを検知できない。材料の移動は何かしらのテープで材料を貼り付けておけば解決できるはず。

つつうらら