hirotakaster のすべての投稿

TensorFlow Lite 2.1 on STM32F

TensorFlow 2.1.0がリリースされていた。最近はなぜか組込み向けでDeep Learningをする話がやってくる事があって、TensorFlow Liteを使ったりしている。

TF Liteを使ってみたことがある人は分かるだろうけど、TensorFlowのHP・ドキュメントにある通りにやっても基本的にビルドできない、サンプルが動かない、ドキュメントのリンク先は404 not foundという「一体これは何だ?動くのか?」という思いが最初に来ると思う。さらにはLayerの制限で、このモデルを作ったはいいけど、TF Lite上で動かしたらエラーで動かん…とか罠が満載で快感すら覚えてしまう。
自分もバージョンが変わる事に起きるドラスティックな変更で、これはどうすれば動くんだ?というので頭を抱えてしまう。

サクサク動いてめちゃ便利なんだけど、動かすまでが大変な沼にハマる…ということで、自分用としてもTensorflow 2.1.0で動かす手順を残しておく。ターゲットとしては次のとおり。hello_worldのサンプルを動かす。
ちなみに、本家のドキュメントのとおりArduino MKRZERO向けのサンプルのビルドをやろうとしても現時点でビルドできないからねwww ちょっと色々と修正するとArduino IDEでもビルドできるけど、デフォのサンプルだと動かないw (Arduino IDE向けのサンプルコードはこちら、もしくはAdafruitのdiffを当てる)

■ 環境
Tensorflow 2.1.0
Nucleo STM32F446RE(手元にあったもの)
VScode (PlatformIO)

ソースコード一式はこちら。PlatformIO向けに持ってきてビルドすれば動く。学習モデルはGoogle Colabで公開されている物を使うとTensorFlow Lite向けの軽量・量子化されたデータをそのまま持ってきて使える。ソースコードはNucleo向けだけど、ソースコードはそのままでarm向けなら何でもOK。
この一式を使えば、TensorFlowで学習したモデルを持ってきて、arm向けにビルドしてすぐ組込める。もちろんarm Arduinoとかでもね。一旦作っちゃえばオールOKすね。

以下は、自分で頑張ってゼロから環境を作りたい人へのメモ。

■ TensorFlow 2.1.0 Liteのプロジェクトを作る

Tensorflow Liteでは組込で必要なプロジェクトを自動で生成してくれるmakeが用意されている。一旦、Ubuntu 18.04上で作る。

pip install six==1.12.0
wget https://github.com/tensorflow/tensorflow/archive/v2.1.0.tar.gz
tar -zxvf  v2.1.0.tar.gz
cd tensorflow-2.1.0
make -f tensorflow/lite/experimental/micro/tools/make/Makefile TARGET=arduino TAGS="" generate_hello_world_arduino_library_zip
# じっと待っているとtensorflow_lite.zipが出来る。これを持ってきて利用する。
cp tensorflow/lite/experimental/micro/tools/make/gen/arduino_x86_64/prj/hello_world/tensorflow_lite.zip  $HOME

tensorflow_lite.zipを展開するとArduino向けのプロジェクトとして使える一式が出来る。他にも画像・音声認識とかのプロジェクトを生成できたりもする。
このまま使えばOKじゃん!!と思うかも知れないけど、もちろん、このままArduion IDEで取り込んでもビルドできない(TF Liteマジでふざけんなよw)。ちょっと工夫するとArduino IDEでも動かすことが出来る。実際にトラ技で書いた内容では、TensorFlow & ARDUINO MKRZERO arm-cortex M0で自作モデルを動作させて性能も出せている。
ということで、tensorflow_lite.zipをWindows/Macどちらでも持ってきて、PlatformIO向けに展開していく。

■ PIOのプロジェクトを作る

FrameworkはArduinoで適当に作っておく。mbed向けになると、前述のTF Liteのスケルトンプロジェクトをmbedとして作り直し(がんば)。

■ TF LiteをPIOにぶち込む

tensorflow_lite.zipを展開すると次のような感じになる。

これをPlatformIOのフォルダに次のような感じで展開する。

■ 推論の性能どんなもん?

推論を実行しているのはmain.cppの次の部分。
TfLiteStatus invoke_status = interpreter->Invoke();
この単体性能を測定してみると、170回/sec でまぁ使える感じの速度ですな。モデルや設定次第で数千回/secは超える。sin波を推定しているだけだから軽めというのもあるけどね。動かしてみるとこんな感じ。

■ 自前のセンサー対応モデルを組込むには?

一旦動いてしまえばカンタンな訳だけど。Google Colab上で最後に量子化して生成されたコードをsine_model_data.cppの中の配列・配列長にコピペして終わり。推論の方はinputに値を渡してInvoke、結果はoutputのTfLiteTensorから取得できる。
問題は…DropoutとかFlattenとかー…使えないのよね。対応しているオペレータはこちら。これが地味にハマるというか辛いポイントだったりする。対応してあると書いてあるオペレーターが別の資料はで未実装と書いてあったり、動くと期待してモデルに組み込んだら見事にエラーとか、ビルドもだけどトラップがねw

Ardiuno Library Manager

Arduinoで自分用のlibraryやセンサーを扱うものを使った人はとても多いと思う。というか使ったことが無い人は居ないと思うほど。
既存のlibraryを使うのもだけど、自分で作ったライブラリを公開して広く多くの人に使って、フィードバックを貰うことが出来る。ZIPファイルとして用意して個別にダウンロードしてもらうというのもアリだけど、Arduinoのlibrary群に追加することも出来る。

メニューの[スケッチ]->[ライブラリをインクルード]->[ライブラリを管理]で自分で作ったライブラリを公開することが出来る。その方法を適当に書いておく。

これは自分が公開しているCoAPライブラリ

■ ライブラリを作る

公開するまでの大まかな流れは…

1. github上でライブラリを作る。
2. Arduinoのissueにあげる。

という非常に簡単な流れになる。ライブラリは開発してrelease tagを付けておくと自動で更新されて、Arduino IDE上でも更新された物をインストール出来るようになるという便利な感じ。

まず最初にライブラリを作る。自分のgithubのであれだけど、サンプルはこんな感じで。CoAP-simple-library このlibraryはCoAPというプロトコルの基本的なPUT/GET(その他)をコールバック形式のコード表現で使える。
内容はともかく、何かライブラリを作ったら次のファイルを含めておく。

library.properties
keybords.txt
license.txt

まぁ、ぶっちゃけ仕様はここに書いてあるArduino-IDE 1.5: Library specificationとおりに、自分のライブラリに合わせて記載しておく。あとreleaseも忘れずに適当にバージョンを付けてtagを付けておく。license.txt は必要じゃないけど、MIT/Apache/BSD…etc とかライセンスを記載しておいた方が良いっすね。

■ issueを送る

ライブラリを作ったらArduinoに対してissueを送る。自分の場合はこんな感じ。わりとすぐ返事が来る。指摘された所を修正&updateすると、Arduino libraryに登録されてIDEからも検索して見つけられる。
おまけでArduino IDE以外にも、なぜかPlatformIOでもlibraryが検出できるようになっていた。

運用は全然難しくなくて、コードを修正して新バージョンにしたくなったら、github上でreleaseをするとArduino/PIOともに反映される。リードタイム的には半日以下でIDEでも新しいバージョンを見ることが出来るようになる。

■ おまけ

内容は全部英語で書くこと(当然だけど)。あと、リリースするとissueやPull Requestがあったりする。自分の場合は他のMQTT libraryもだけど、多くは「つかえねぇ」「うごかねぇ」というのが大半で、MITなOSSだからコード見れば&しらねーよ的な感じではあるけど、この辺のやりとりで英語力が鍛えられた気がする。たまに、英語のタイポ・表現ミスのPRもあったりして、何気に嬉しかったりも。あと論文とかでも使われたりとかもね、上のCoAPのやつだとちょっとググったら出てくるこの辺とか。

IoT Latency and Power consumption: Measuring the performance impact of MQTT and CoAP
Comparative Analysis of IoT Communication Protocols
MQTT i CoAP integracija Arduino uređaja sa thethigs.io cloud platformom

まぁ…折角作ったライブラリがあれば、多くの人に使ってもらってフィードバックを貰った方が間違いなく良いから、Arduino IDE library(あとPIO)に登録してみるのも良いと思われ。


Maker Faire Bay Area 2019

そういや行ってきたの書いてなかったな…と思って残しておくことに。
写真類は Maker Faire Bay Area 2019 に残して公開してあるからご自由にどうぞです。

まず…SSSSをゲットした。初めてのSSSS、大量に積み込んだハンドスピナーが影響したのだろうかw
とは言っても登場する前にダブルチェックがある位で、まぁ大したことは無かったし、国内でのフライトでも特に何を言われることも無かった。まぁ…キャリーケースの中を開けても、大量のハンドスピナーと分解されたギターが入っている位で、開けたら別の意味でビックリだっただろう。

持っていった物は大量のハンドスピナーとギター。去年のMaker Faire Tokyo、Kyotoと同じ構成で。反応はどこの国でも一緒っすね。辛かったのが、去年全部配って無くなってしまったから、今回も100個全部揃えることになった。協力してくれた皆さんあざーっした!!

整理して置いても…
乱れまくるからそのまま放置で…
フレットレスギターは初めてとの事だったけど、普通に上手かった

会場はやたら広く感じた。出展者が少なくなったのか何なのか、通路が広い(気がする)。今年で最後というのが、ジワジワと感じるものがあった。そして出展者の多くを困らせたと思うのが、凄まじいほどの雨だった。まさに土砂降りで、雰囲気的にもつらみ。屋外の人たちは残念としか言いようがない。屋外の人たちが室内に来た分、屋内展示の方は凄まじいほどの人だったと思う。

毎年沢山の人で溢れているはずが、大雨でガラガラ。
Maker向けの朝食提供 by Amazon

超巨大な物はお約束的に沢山あった。光る・デカイ・火を吹く、というのは定番みたいな感じかな。

巨大なクマの中は幻想的な雰囲気

ひたすらデカくて動いて光る
実際に潜航もしたサブマリン

紹介しきれないほど、沢山の作品があった。写真類は Maker Faire Bay Area 2019 に残して公開してあるからご自由にどうぞです。なんじゃこりゃ?みたいなのが沢山あった面白い。そして、今年もパエリアパーティでビールを大量に飲んできた。

ギャル電さんを想起した
芝生でビールを飲みながらまったりBig Face!!
なんかディジャブ感があるなー…と思ったら
去年のExploratoriumの展示でBig Faceをしていた写真が残っていた(w

晴れた時に練り歩いていた。ドコドコ良い感じね。

SONY SPRESENSEさんのブース、大手が出展しなくなった中で継続していて偉いと思った
そしてGoogleもいつもの所で。

今年でBay Areaは終わりなのかどうか、2020年もあるのかしら…雰囲気は今年で終わりか…って感じはモリモリだった。
難しいと思うのが定性的な「感動や面白い!!」ことの数値化・定量化〜お金に還元することなのかなと。個人的には文化と社会の成熟は未発達な所から、商業主義に向かって(作る・売る・仕事をするだけ儲かる)、次は精神的な部分(感動や体験、一見するとお金にならない物に価値が付く)で回って発展していくと思っている。それだけに、本当に終わってしまうなら少し残念でもある。

偶然に撮った一枚。雨上がりの芝生で、紙飛行機(世界チャンプのだと思われ)を飛ばしていたチビッコがなんか印象的になった。将来なんか面白いのでも作ってくれたらなーって思ったりもするし、出展者の一人として楽しんで貰えたらなによりかなと。
“雨降って地固まる”って言葉もあるからね。

NICT Space Hack 2019参加してきた

最近めっきりblogを書くことが無くなって、ログ的にも残してなかったから、残しておくことにする。

NICT Space HACK 2019というハッカソンが2/23-24で行われて参加してきた。
詳しくはこちら…
NICT SpaceHack 2019 ツイートまとめ #nict #spacehack
宇宙データを使ったオープンイノベーション!NICT SpaceHack2019に潜入!

大抵ハッカソンだと自分はボッチソンになる事が多いものの、今回はチームでNNNS!に入った。

大賞とオーロラ賞を頂きました。あざす。
何気にNICTに行くのは初めて…

触れるオーロラ、触ったら音と光のインタラクション。投影&音・コンセプト・プレゼン内容はおまかせして、自分はオーロラデバイスの方を作ることに。役割分担してサクッと出来るのは確かにチームだと良いっすね。

1日目の夜に実験した時のもの。何か触れるインタラクションに質問やら後で聞かれたりしたけど、原理はめちゃ簡単、導電糸を縫い込んで静電容量でタッチを検知すればOK。手持ちのグレー色の導電糸を使ったけど、白色の物を使えば”仕込んでいる感”も分からない自然な仕上がりになる。
んで、触るとLEDが反応するようにしたもの。最終的にはタッチするとOSCで投影側のoFの方に飛ばして投影&音に反映して貰ったです。

喋りながら&遊びながらやっていたら楽しくて、最終形の動画を撮るのを完全に忘れていた(w
唯一残っていた、実際にオーロラのデータを投影していた時のは良い感じ。大型なレース状のもの&プロジェクタで多層にすると更に幻想的な雰囲気になるのと、オーロラの中に人が入って動いて反応させたり、触って遊べる感が出来ると思われ。

Macbook Pro 2011の再生

メインの開発で使っているWindows10が修理に行くことになって、その間に開発が出来なくなるのはつらすぎる….ということで、Macbook Pro 2011を再生させることにした。

Macbook Airは自分ので貰ったMacbook Proを再生させて開発用でも使える化

でかいのがMacbook Pro 2011モデル。3台貰ったんだけど、どれも訳アリな感じで。
1. そもそも起動しない…
2. バッテリーが膨張してヤバい…当然起動しない。
という、そもそも動かないMacbookを再生させることにした。

というのも、一応、Corei7でメモリも8Gbyte(増強して16Gbyte)もあれば十分開発用途としても使える。とりあえずSSDに換装して、バッテリーを入れ替えれば動くんじゃ?という安直な感じだけど、やってみることにした。
ただ問題点としては、High Sierraまでしか対応していない。無理やりMojaveにも出来るといえば出来るけど、一応はHigh Sierraまではアップデートした。

結果的には3台全部復活!!サクサク動いてめちゃ良い感じになった。捨てるMacbook Pro・ゴミと思われる物でも復活できる。

このバッテリー(謹製)の盛り上がりっぷりはヤバい。中のLiPo見えているし完全にヤバい。

1.SSDに換装

何はともあれSSDに換装しよう。チョイスしたのはこの2つ。

視点は非常にイージーで安いSSD。どうせ元々死んでいたMacbookだし、256Gbyte前後もあれば十分だろうということで。OSとアプリ周辺、諸々整備して200Gbyte以上は使える領域で残るはずだし、3〜4000円のSSDを使うことにした。

2個ともHDに換装させてあげる。ちなみに、このバージョンのMacbook ProはSATA2までだから、SSDのSATA3の爆速パワーは体感出来ない。まあ、それでもHDより数倍早いから、起動も一瞬・アプリの動作・開発も普通にできている。

どちらもSATA2で使うことになっているから、Macbookから使っている時の性能は変わらない。もともと、どっちのSSDもSATA3だからね。

2. バッテリー交換

次にパンパンに膨らんだバッテリーを交換することに。ゲットしたバッテリーはこちら。

本当にこれで大丈夫か?と思ってゲットしてみたんだけど、いまの所は発熱も何もなくて普通に使えている。自分は専用のドライバは持っているから別に要らなかったけど、ドライバも2本付属してきて、特殊ネジ用のドライバを持っていない人でもこれは良いんじゃないかと思われ。

3.OS再インストール

ここまでやって気づいたことが。MacOSの再インストールどうしよう?ということだった。まずは[option] + [command] + P + RでNVRAMをリセットして再起動、WiFiに接続して最初からインストールで見事に復帰。High Sierraまでしか進化出来なかったけど、十分使えるマシンになったから大満足

drill LED Fretless guitar

I made the LED Fretless guitar for just my fun, but I want to MAKE something custom reconstruction . Now, here is my fretless guitar spec
– stratocaster type led guitar
– MCU : Particle Argon/XENON
– LED : WS2812Bx10
– Sensor : MPU-6050

I thought automatic picking guitar application is funny idea, so I tried to make the picking machine with my solenoid. Then I removed the ham pickup and manufactured the aluminum plate into an L shape, fixed it with solenoid, and embedded it in the guitar body.

Hm…subtle…verrrry subtle. And it’s need to think about the solenoid power supply, I thought that adding battery into guitar is ugly. And I remembered Paul Gilbert’s guitar playing.

Yes!! Drill!! Play the guitar using the drill(pick attached to the tip of the drill) is great idea. Paul Gilbert, you are so great!! He made the how to use the drill with guitar!!

And I decided to include the motor with pick to the guitar. Then I removed the front ham pickup and I manufactured the aluminum plate into an L shape, fixed it both sides of the motor. Guitar pick fixed to the motor axis.

Here is new guitar spec,
– stratocaster type led guitar
– MCU : Particle XENON
– LED : WS2812Bx10
– Sensor : MPU-6050
– Motor : FA-130R
– Motor Driver : TB6612FNG Dual Motor Driver

2 motors connect to motor driver through backside of pickup, motor driver include to space of the volume toggle. Motor pick machine attack to 1, 2, 5, 6 strings. The bass sound and treble is easy to play fast with motor power.
Drill motor start up with button on the pick guard it have a two mode. Picking while the pressing the button mode and picking for fixed time mode.
First of all, let’s play.

And when the button is pressed and drill is working, the LED will set to rainbow color. I think this guitar have a two playing pattern.
1. Pressed the button with one hand(right-side), other hand(left-side) play the strings.
2. Press the button just a one time motor work fixed time, while that time play the guitar normally(very fast picking with drill).
Adjust the strings height, it play with the drill working where you pressed the strings.

This guitar could play everybody!!

Maker Faire Bay Area 2019.
Maker Faire Bay Area 2019.
My playing at NT Kanazawa

This guitar can use Bluetooth/6LoWPAN with XEON, LED and Drill can work from internet or other PC, cell phone. Yes, this guitar have a remote play mode.

Fret-less guitar original sound, fast playing the guitar with drill are this guitar special set. I will use this guitar for one fo the sound make.

RISC-V QEMUで色々と動かす

RISC-V用のQEMUが公開されていて使ってみることにする。QEMU/LLVMともに開発速度が猛烈に早いから、このビルド方法は”現時点”でのビルド方法になる。 またビルドにはEC2 t3.2xlarge(8vCPU/32Gmem/30GSSD/Ubuntu 18.04)を使ってみた。1時間使っても40円弱、めちゃくちゃ安い。 自分のPC(VirtualBox: 2vCPU/4Gmem)でビルドをすると、この辺のはいつになっても終わらないから、クラウド上でビルドしてローカルに持ってくればそれでOK。サクサク時間の節約にもなる。以下、手順を踏んでトータルで1時間もあればビルドが終わって確認できるはず(多分)。

# 必要な物をざっくりインストール
sudo apt-get install gcc libc6-dev pkg-config bridge-utils uml-utilities zlib1g-dev libglib2.0-dev autoconf automake libtool libsdl1.2-dev libpixman-1-dev cmake

# qemu build
# 4.1系を使う必要あり、4.0系だとこれにハマる。
# https://github.com/sifive/freedom-e-sdk/issues/260
# 4.1.0-rc0だとパッチがかかっている。
wget https://download.qemu.org/qemu-4.1.0-rc0.tar.xz
tar xvJf qemu-4.1.0-rc0.tar.xz
cd qemu-4.1.0-rc0
./configure --target-list=riscv64-softmmu,riscv32-softmmu,riscv64-linux-user,riscv32-linux-user
make -j$(nproc)
sudo make install


次にPlatformIOを使ってqemu向けベアメタル用のelfを作る。hifive1ボードをターゲットにしてサクッとビルドするだけ。それにしてもpioはこの手の組込み向けだと最強というか、VScodeは何でも出来てしまうヤバさがステキすぎる。ちなみに、みんな大好きSiPEED向けのボードも既にpioに入っていて、kendryte210 SDKでのビルドも作れる。


これで出来たfirmware.elfをEC2側に送ってqemuですぐ動かすことが出来る。
次に折角なのでLLVMのビルドも作っておく。これは以下の手順通りsifive(hifive1)の手順があって、toolchain/llvmの手順通り流すとビルドが終わる。
https://github.com/sifive/riscv-llvm

以上で物が揃って、全部qemu risc-vエミュ上でサクッと動かせる。あとはこんな感じで。
 

qemu-system-riscv32 -nographic -machine sifive_e -kernel firmware.elf 
qemu-riscv32 hello

これで一通り、gnu-toolchain/llvm/qemu上での動作が確認できる。よくあるFedora RISC-Vも普通に動く感じ。次はQEMUのRISC-V命令セット部分をいじっていこう。

PCAで動画圧縮

最近、機械学習でsciket-learnを色々と使っていたりで、なんとなく動画をPCA次元削減して遊んでみた。元々はPCAを行ったあとにk-meansでカテゴライズをしたりする時に使ったりする訳だけど、画像を次元削減して見てみると面白いフィルターとして使えそうな。
動画は元々はMaker Faire Bay Areaで撮った1920×1080のmp4ファイルをJPEGで取り出して、ちょっと大きいから半分にサイズを減らした後、10(右下), 60(左下), 120(右上), 240(左上)次元削減している。次元が少ない方が面白い感じに。動画から切り出した写真で10・240次元削減した物はこんな感じになる。

ソースコードはこんな感じ。とっても簡単。PCAのモデルは処理が終わったら保存しておいて、別途回せるように保存している。

import cv2
from PIL import Image
import numpy as np
import pickle
from sklearn.decomposition import PCA

# 動画の読み込み
cap = cv2.VideoCapture("movie.mp4")
dataset = []

while(cap.isOpened()):
    ret, img = cap.read()
    
    if ret == True:
        # CV2ImageをPILImageに変換
        img = img[:, :, ::-1].copy()
        img = Image.fromarray(img).resize((int(960), int(540)), Image.BICUBIC)
        
        # (540, 960, 3)配列にして1次元にする
        img = np.asarray(img)
        img = img.reshape(1, img.shape[0] * img.shape[1] * img.shape[2])
        dataset.append(img[0])
    else:
        break

# PCA実行
pca = PCA(n_components=10)
pca.fit(np.array(dataset).astype(np.float64))

# モデルを保存しとく(後で使うとき用)
with open('pca.pickle', mode='wb') as fp:
    pickle.dump(pca, fp)

# 動画を作成
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
video = cv2.VideoWriter('result.mp4', fourcc, 30.0, (960, 540))

for img in dataset:
    # PCAして動画に突っ込む
    transformed = pca.transform([img])
    pilImg = Image.fromarray(255 - (transformed.dot(pca.components_).reshape([540, 960, 3])).astype(np.uint8))
    cv2Img = np.asarray(pilImg)
    video.write(cv2Img)

video.release()

画像を色々と集めてきてPCAをかけたモデルを保存して、思わずJamiroquaiのVirtual Insanityの動画をmp4で取得してきてPCAをかけた。なんとなく最初に浮かんだのがJamiroquaiだったからで、特に深い意味は無いけど。

面白いフィルターとして使えそうな気がちょっぴりしていたり。RGB成分をそれぞれ分離して、それぞれの成分毎に圧縮して掛け合わせてみても面白いかも。

LED フレットレスギター

ポジションマーカーにneopixel(ws2812b)フルカラーLEDを搭載して、MPU6050(加速度・ジャイロ)をギターのボディに搭載、Particle Argon(ESP32/nRF52)でThread Mesh(IPv6/Bluetooth) Gatewayになるギターを作成した。

もちろんシールドからアンプを通すと音は鳴る。ネタ的にやってみたかったHD、アンプ&オーバードライブ回路付きのスピーカーに接続して音を出してみた。

フレットレスギターを作って弾いてみて分かった事は、自分がどれだけフレットに依存してギターを弾いてきたのか(というか、そういう楽器なのだけど)ということだった。押さえる所が少し変わるだけで、音が凄まじく変わる。すぐ弾けるか?というと、練習が必要になってきた。良い点としては、中間の音を出せるようになった。例えば、C, C#の間の音も簡単に出せる。スライドさせると面白い音が出るから、ワウと組合わせて使うと楽しくなりそう。スライドを多用して弾くことになりそうな気がしている。

という事で、このギターの作りかたを残しておく。ちなみに、ギターを分解してここまで改造するのは自分は初めてだ。

1.ギターを分解する

まずはギターを分解する。自分は何本かギターを持っている。それらの1本を使って…というのはあまりにもチャレンジングすぎるから、ヤフオクで2,500円のギターを1本入手した。昔は持っていたストラトの形状のギターだ。ストラトタイプというのが後々に電池(LiPo)を格納する場所で利点を発揮する、というのはこの時はまだ気づいていなかった。まずはネジ類を取ってギターを分解する。

2.フレットレス化

最初の目標通りフレットレスギター化をする。フレットをペンチを使って指板から全部抜いてしまう。

次に抜いたフレットの溝をエキポシ樹脂で埋めていく。エキポシはキャンドゥーで何個かゲットしてきた。マスキングテープでネック部分に付かないように保護してから行った。塗りたくったら24時間放置して固まるのを待つ。

エキポシが固まったら、ひたすらヤスリをかけてエキポシの凹凸が無くなるように磨く。ヤスリも100均でゲットした紙やすり(60, 120, 240)を使った。仕上げにスポンジヤスリ(240番)を使って、良い感じに滑らかにする。

これでフレットレス化は完了で、さらにエキポシを指板に塗って、弦高調整でヤスリを再度かけるとフレットレスギターとして使えるようになる。ここで、指板にLEDを仕込んでは?という甘い誘惑に乗って、ここから指板分離という作業にとりかかることにした。未知の作業ほど楽しいものは無い。

3.指板分離とネックのLED化

まず最初に沸いた疑問は、指板ってそもそもネックから取れるの?という事だった。シリコンラバーヒーターを使って指板とネックの接着剤に熱を与えて、上手い具合に少しづつ分離できるような事は書いてあったりした。ただ、シリコンヒーターを持っていないため、スチームアイロンを使うことにした。布をネックの上において、その上から蒸気と熱をバンバン与えていく。本当は金属ヘラを使ってネックと指板を少しづつ分離していくようだけど、この時は金属ヘラが無かったから包丁を指板とネックの間に差し込んでみたら、少しづつ分離することができた。


ネックに包丁が突き刺さっているのは、あまりにも作業としても危険でシュールすぎるから、指板の分離が出来ることをここでは確認して、金属ヘラをダイソーで入手して作業を続けることに。指板が割れてしまわないよう、慎重に少しづつ分離した。

幅広と細い物の2本の金属ヘラとスチームアイロンを使って、少しづつ接着材を溶かして指板とネックの分離をすることが出来た。当然だけど包丁を使うより、金属ヘラを使う方が遥かに効率が良かった。

次にポジションマーカーの部分をLEDで光らせるため、ドリルでポジションマーカーに穴を開けていく。指板にドリルを当てるというのは、なかなか緊張する。ドリルは細いのから太いのまで順番に交換しながら、指板に穴を開けていく。

ポジションマーカーに穴が開いたら、動作確認としてLEDをポジションマーカーの裏から光らせてみて、期待通りに光るかどうかを確認した。良い感じに光りそうでちょっとここで一安心。

次はLEDを仕込んで固定・導線の経路の確保をする。neopixelことws2812bは指板のポジションマーカーの部分に仕込むことにした。そして導線はトラスロッドの部分を利用することが出来る。テープLEDの幅とトラスロッドの溝が良い感じに合致するという幸運を利用するとにした。

そして、LEDは多少高さがあるから、ポジションマーカーの部分(指板の後ろ側)をLEDのサイズに合わせて彫刻刀とヤスリを使って調整する。この時、指板とネックをクランプする次の作業を考えていて、LEDがクランプの圧力や弾いている時にダメージを受けないよう、良い感じにポジションマーカーに収まるよう意識して調整していった。

導線の確保は12フレット以外はそのままトラスロッドが使えるものの、12フレット部分はポジションマーカーが上下にあるため、ネックの12フレットの部分にLEDと導線を確保するための溝を入れてあげた。

いよいよLEDを装着する。テープLEDを1個づつ切り取って、ポジションマーカーの部分に合わせて導線をつないでいく。あと、トラスロッドには絶縁テープを貼っておく。LEDと導線は指板に超強力両面テープ(3Mとかの)で固定してあげた。指板とネックを合わせた時に圧力や弾いている時の衝撃でLEDが壊れてしまわないよう、この辺は地味に注意をしつつ行った。というのも、ネックと指板を接着してしまうと、LEDや導線はもう二度と手を入れられない部分になるから、自分が弾いたりギターを扱う時の衝撃を想定して作業をした。

指板とネックを接着するまえに、ポジションマーカーを作成していく。元々あったポジションマーカーはドリルで見事に貫通させちゃったから、東急ハンズで5mm アクリル棒をゲットしてきてポジションマーカーとして利用することにした。良い感じの長さで切り取ったらポジションマーカーに入れて、指板を傷めないようにヤスリで綺麗に高さを調整した。

この時、弦を指で押さえた時の衝撃で、アクリルからLEDに衝撃が加わってLEDが破損される事が考えられた。エキポシで指板を再度コーティングして保護するとしても、押弦した時の繰り返し衝撃にLEDは間違いなく耐えることが出来ないと思っていて、これを解決しないといけない課題の一つだと考えていた。

最初はポジションマーカーの中をグルーで埋めて緩衝にさせて、その上からアクリルをはめ込もうか…と考えた。ただ、幸運なことにアクリルを差し込んでみて分かったのが、ドリルで開けた指板表面ポジションマーカーの径が広く、指板裏のLED側の径が狭くなっていた。つまり、どんなにポジションマーカーを押し込んでもLEDまでアクリルが到達しない、ろうと状の構造に全ポジションマーカーがなっていた。という事で、安心して全ポジションマーカーにアクリル棒を切ってバンバン埋めていく。(ろうと状の構造になっていなかったら、グルーでLED保護の緩衝を流し込んで、その上からアクリル棒の外面に接着剤を塗ってポジションマーカーとしてはめ込んだと思う。なるべくLEDに衝撃が伝わらないように。)

ここまで出来たら、LEDの点灯確認をする。次はいよいよ、指板とネックの接着になる。接着したら、もう二度とLEDや導線に手を出すことが出来なくなる。失敗したら、また指板分離すれば良いのかもだけど、もう分離しないぜ!!といった気持ちで接着をすることにする。

教えてもらった、楽器とかで利用される木工用で強力なタイトボンドを指板・ネックに塗りたくって、あて木をしてからクランプする。この時が最高にドキドキする時だった。LED・導線が圧力で壊れてしまったら、ここまでの努力が水の泡に。色々と気を使った事を信じて、思いっきりクランプして1日放置した。

1日クランプしたまま放置して、ドキドキのLED点灯の瞬間…見事に全部OKだった。ほんと、心からほっと一安心した瞬間だった。ネックのLED部分が出来ればもう安心だ。

そして、次はまた指板の保護としてマスキングテープでネック部分を保護して、全体にエキポシを塗りたくって1日放置する。フレットレスだから弦で指板にダメージが発生するのと、弦高調整、弾くときにスライドが滑らかになる効果、押弦した時に弦の振動を木よりも固いエキポシの方が良いだろう、という色々な効果を期待して塗りたくった。1日放置して紙やすりでエキポシをひたすら磨いていく。

次にボディ側に導線を確保するためにドリルで穴をあけた。ギターのボディに直接ドリルを入れるのは何気にドキドキする。LEDの導線をネックのジョイント部にドリルで開けた穴を通じて、ボディの中に引き込んでいく。LEDの制御はボディのどこかの空間でやればOKだろう、くらいの感じで考えていた。

ちなみに、このネックのジョイント部にあるドリルの”ためらい傷”のような大量の穴の痕跡は自分がやった物ではない。最初からついていたもので、この大量のためらい傷は一体何なんだろう…?

何はともあれ、まずはネックから出ている導線部分を樹脂で保護することに。この部分は弾いている時に圧力がメチャクチャかかる部分で、何か不測の圧がかかって断線しないように、とりあえず導線部分をかるくグルーで保護してあげた。そして、ネックとボディをジョイントするときに導線がダメージをうけないよう、ボディにドリルで開ける穴と導線の位置をよく確かめてから、ドリルで導線用の穴を確保した。

ネックとジョイントさせてLEDの動作確認をして問題が無いことを確認。あと使い捨ての弦(1セット270円をゲットしていた)を張って、実際にテンションをかけても問題なく動作する事の確認をした。ネックにテンションがかかった時に何かあるかもしれない…というドキドキ感があった。

あと、ここで指板に塗りたくったエキポシをヤスリで磨いて、弦高調整をした。 ちゃんと各ポジションで音が響くように ナットを少し溝切をして、サドルを調整しつつ、指板(エキポシ)を磨いていくことに。何気にこの弦高調整がメチャクチャきつかった。テンションをかけて確認しながら、緩めてエキポシを磨いて実際に音を出して…の繰り返し。

4.ボディの配線と端末格納

一通りネック側が出来たら、今度はボディの加工に移っていく。

ボディに空間を躊躇なくあけた。どこに端末を格納するための空間を用意するか考えた結果、ピックガード裏に空間を作ることにした。理由としてはピックガードで空間を隠すことが出来るから。あとネックからのLED導線をなるべく近くで終端させてあげたかったから。ちなみにボディの鳴りという部分はとっくに諦めている。

マーカーでサイズを決めたら彫刻刀でひたすら掘っていく。何気に大変だったのが、ボディの塗装が思ったより厚くて、最初は彫刻刀の刃が入らなかった。そこで、ドリルを何か所かあてて塗装と表面の樹脂を取ってから、ボディの木材を彫刻刀で穴をあけていった。ボディの鳴りという部分は、この塗装・樹脂・木材が一体となって効いてくるというのを実感した瞬間だった。

一通り空間が出来たら、空間にエキポシを塗りたくって、木材の表面をコーティングした。

最後に端末を格納していく。ここで利用したのは端末にはParticle Argon(ESP 32/nRF52)とMPU 6050(加速度・ジャイロ)センサーになる。格納する空間がわりと広いから、他の端末やセンサーを入れてこれからも遊ぶことが出来るようになっている。他にもギターがThread(6LoWPAN, IPv6/Bluetooth)のGatewayとしても利用できるネットワーク端末にもなる。

端末自体はWeb上でプログラミングをしてWiFi経由でアプリを流し込めるから、ピックガードを閉じた後でもLEDの光り方やセンサーの扱い方をリモートで変更することも出来るようになっている。加速度・ジャイロでギターの動きや弦の振動からLEDの点灯制御をしてみたけど、プログラミングがリモートで色々と変えられるという便利さもあって、他にも色々と遊んでいけそうだ。

電源はトレモロユニットの部分に格納することにした。当初はボディに開けた空間に端末と一緒に格納しようと思ったものの、電池交換するため「弦を外してピックガードを外す」のはさすがにムリがある。

そこで、ボリュームからボディ裏のトレモロユニットに抜けているアース線の穴を利用することにした。端末を格納している空間からボリュームやトーンのある空間にドリルで穴をあけて、そこからアース線と同様にトレモロユニット側に電源を通していく。LiPoはマジックテープでボディと合わせて固定する。これで、LiPoの交換は裏カバーを外していつでも出来るようになった。耐衝撃性もそれほど悪くないだろう…

とりあえず完成。ちゃんとアンプを通して音を出して爆音で弾くことも出来る。 まとめ的に、やってみて分かった事とかは…

・ギターのクラフトマン凄い。自分は”とりあえずやってみた”だけど、こんな自分の作業の比較じゃないほど凄い質と量をこなしているクラフトマン、マジで凄いというのを実感した。
・フレットを外す時にナットも一緒に外して作業すれば良かった。何で外さなかったのか…
・ヘッドのロゴの所に思わずMaker Faire Bay Areaで貰ったステッカーを張ってみた。
・弦高調整で指板をヤスリかけて、エポキシを磨いて調整したけど、ハンドサンダーを最初に使って荒く磨いた方が楽だった。手でやるのマジで辛かった。ただ感覚的な所で、最後は手で磨くことになると思われ。
・ギターのネックにLEDの他にも静電容量センサでも仕込んで、弦無しで指板上を触れると音が鳴る、とかも面白いと思ったり。
・他にもセンサーを付けたり、内部にエフェクタ機能を入れても面白そう。ネックのLED化と外部電源無しに単体で遊べるから、音をいじったりもしたい感じ。

ギターの改造は一度はやってみたかったから、未知の作業や”多分、こうじゃないかなぁ…”みたいな感じでメチャクチャ面白かった。

地下から見た光〜土合駅

何となくふと思い立って、土合駅に行きたくなった。急に雪を見たくなったのと、昔電車で通り過ぎたことがあって、今度は駅に降りてみたくなったからだ。 始発で向かって、電車の中ではLed Zeppelin、OASISを聞きながら寝て、スキーやスノボを持ってゲレンデに向かう人達に囲まれながら約3時間、ようやく土合駅に到着した。
ホームから地上の出口まで延々と続く階段を見上げる。
降りるときに、スキーに向かう大学生たちが、「こんな駅で降りるなんて、よっぽどの物好きか何かじゃね」と言っているのが聞こえた。そんな自分は物好きなのかも知れない。ちなみに自分は鉄っちゃんでは無い。雪と非現実な駅を体験しに、まるで遊園地のアトラクションでも楽しみに行くような感覚で土合駅に降りた。
電車を見送って、一人ポツンと地下のホームに取り残される感覚が心地よい。
階段には段数らしき数字が書かれていた。
ここからひたすら460段、70m超の高低差のある階段を登っていく。400段の階段というとピンとこない。何となくサクッと登れそうな気もする。1000段とか桁が変わると、さすがに大丈夫かな?と思ったりするけど、460段だったら簡単に登れそうな気がしてくる。 そんな思いは途中で打ち砕かれて、自分の体力の無さを思い知ることになった。
ケーブルが収納されいているブロック。高電圧危険の文字がカッコいい。
階段の途中にベンチが置いてあって、長い階段に疲れた足を休めることが出来る。
延々と伸びる階段を登っていく間、聞こえてくるのは渾々と湧き出る地下水の流れる音だけ。
ひたすら階段を登っていく。土合駅は氷点下近くですごく寒いと思って、コートにマフラーで寒さ対策をして行ったのに、登っていく間に体は温まっていく。寒さは何も感じない、むしろコートやマフラーが邪魔になるほどだ。ふと登ってきた階段を見下ろしてみた。
見下ろすと、そこに居たはずのホームが点ほどにも見えない。地下に向かって、無限ループのように続く階段と手すり、照明とトンネルがあるだけだ。何か幻覚かVRのような物でも見ているような感覚になってくる。つい数分前、この無限ループの先に自分が居たという現実が実は作られた物だったという気すらしてくる。 階段を登っていくと、ようやくゴールが見えてくる。薄暗いトンネルの中に、唯一地上から差し込んでくる光だ。
ようやく地上の光が見えてくる。

続きはまた。