推しアイデア
スマホの振動でURLを開けます。QRコードに変わる新たな1次元コード、バイブコードの誕生です。
―
スマホの振動でURLを開けます。QRコードに変わる新たな1次元コード、バイブコードの誕生です。
バイブレーションでURLを開くのが面白そうだと思ったからです。
送信Flutter・受信Pythonで、振動を信号処理→復調→DB逆引きする自作プロトコルです。短/長で0/1、プリアンブルで同期をしてます。
スマホの「振動」でURLを開くプロダクトです。
ひとことで言うと、「QRコードを、カメラと光の代わりに"振動"でやる」ということです。
振動版のQRコード
光で読むQRコードを振動で再現しました。 QRコードが持つ二つの形式を実装しています。
QRコードを振動に翻訳 QRコードを読み取ってそれを上記の1の形式で振動に変換する機能です。一見QRコードを読み取っているので何の意味もない機能ですが、QRコードと「バイブコード」が同じデータを運ぶ証拠になってくれました。
[送信側] スマホ(Flutter) 楽譜表示・手動/自動演奏・振動制御 ↓ 振動(短/長) [物理] ピエゾ(接触振動センサー) ↓ 音声入力 [受信側] PC(Python) 録音 → 信号処理 → 復調 → DB逆引き → 演出 ↕ [データ] Supabase(番号↔URL の対応表)
フロントエンド:スマホアプリ(送信側)
バックエンド:受信プログラム(受信側)
データ管理
通信プロトコル(自作 v1.0)
開発インフラ

Flutter(送信側)
・ Flutterのvibrationパッケージは、パターン(短150ms/長450ms)を直接ミリ秒指定で出せる。ReactNativeでも振動はできるけど、ライブラリの成熟度や細かい制御という点では Flutterの方が扱いやすい。
・チームの習熟度が一番高かった。今回のチームの3人ともflutterでの開発を半年以上続けており比較的慣れているため、ハッカソンで一番絶望する、「慣れてない技術で詰まる」リスクを避けた。
Python(受信側)
・信号処理ライブラリが圧倒的に充実してるから。受信側がやるのは「音の波形 → バンドパスフィルタ → 包絡線 → ON/OFF検出」という信号処理(DSP)。pythonが圧倒的に向いているから。
・録音・DB・ブラウザ操作まで全部ライブラリで揃うから
短期間・3人開発でも破綻しないよう、最初に開発の仕組みそのものを整えました。

いつもよりも事前開発を早めに行い、タスクの管理や全員での開発のしやすい体制作りなどをいつもよりも重視したため、本番では切羽詰まりすぎづ、スムーズな開発ができたなと感じました。
今回苦労した点は
その中でも一番苦労したのは
です。 これに関してはそもそもの内臓マイクの問題だったりデバイスの問題だったりするので、めちゃくちゃ調べたりAIに聞いたりしても無理でした。 世にも珍しい「技術的に不可能です」という状態です。(もしかしたら調べ足りないだけかも)。
ということでこれに対応するために、ピエゾマイクというデバイスを買いました。 ↓購入したピエゾマイクのamazonURL https://x.gd/nfjFE
一言で言うと、空気の振動ではなく「物体そのものの振動」を拾って電気信号に変換するマイクです。 これを利用することでバイブをより感度高く感知することができるし、音ではなく振動を検知することになり、バイブのイメージに合わせることもできました。
しかし、ピエゾマイクがなぜか全然振動を読み取ってもらえないという問題が発覚し、ほかのものを買いに行く時間もなかったため、死ぬほど困りました。
↓下から二番目が振動の検知なのですが、死んでる様子です。
が、奇跡が起こりなぜか端子を半刺しすると音声が読み取られるということに気づき一命をとりとめました。これに気づいたときは叫びました。
↓完璧に読み取れてる様子

ただピエゾマイクを買うということや、半刺しならいけるという結論に達するまでにかなり時間がかかったし、ピエゾマイクの仕様を知ろうとして、多くの時間を費やしてしまいました。 ただ、試行錯誤ができたため、いい経験にはなったと思います。