Arduinoで作るパンチングキーボードボタン:ストレス解消カスタムキー
必要な部品と材料
| Arduino Micro(ATmega32U4ベースならLeonardo等も可) | ×1 |
| ピエゾ素子(圧電ディスク) | ×1 |
| 抵抗 1MΩ | ×1 |
| ジャンパーワイヤー | ×1 |
必要な工具と機械
- スポンジ素材
- 布(任意の色):スポンジと電子部品を覆う用。針と糸で袋状に縫製。
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
仕事中やゲームに飽きたとき、キーボードを叩きたくなる衝動に駆られたことはありませんか?
このパンチング可能なカスタマイズキーで思いきり殴ってストレス発散しましょう!
本プロジェクトでは、ピエゾ素子、ATmega32U4ベースボード、高抵抗値抵抗(1MΩ)、スポンジを用いて、叩くとキーボード入力となるカスタムキーを製作します。ユーザーは 원하는キーを叩く(または蹴る)だけで入力できます。
必要なハードウェア
Arduino Pro Micro
ATmega32U4マイクロコントローラーを搭載し、内蔵USBによりマウスやキーボードとして認識されます。ATmega32U4チップ搭載のマイコンなら何でも使用可能です。

ピエゾ電気ディスク
ピエゾ素子は振動、音、機械的歪みによって物理的に変形すると電圧を生成する電子デバイスです。音楽付きグリーティングカードのスピーカーに使われている圧電ディスクを流用できます。ドライバーやナイフでスピーカーケースをこじ開け、金属プレートを外し、基板を持ち上げるとその下に圧電ディスクがあります。

1MΩ抵抗
ピエゾ素子が発生させる電圧と電流を制限し、アナログ入力を保護するための高抵抗値抵抗です。

スポンジ
力が加わると変形し、力が解放されると元の形状に戻る特性を利用します。ピエゾ素子をスポンジの間に挟み、誰かが叩くと発生電圧がArduino Microのアナログピンへ送られます。

回路図
動作原理
ピエゾ素子には極性があり、電圧は特定の方向に流れます。黒い線(低電位側)をGND、赤い線(高電位側)をアナログピン0に接続します。さらに、ピエゾ素子と並列に1MΩ抵抗を接続して電圧・電流を制限し、アナログ入力を保護します。
ピエゾ(ノックセンサーとして機能)の出力が一定の閾値を超えると、プログラムに基づいてキーボード操作を実行します。

スポンジを覆うエンクロージャの製作

布を用意し、針と糸でスポンジを包む袋を縫製します。私は母に頼んで作ってもらいました。
ピエゾ素子をスポンジに内蔵

コード
#include <Keyboard.h>
const int knockSensor = A0; // ピエゾはアナログピン0に接続
const int threshold = 100; // 閾値
int sensorReading = 0; // センサー読み取り値
void setup() {
Keyboard.begin();
}
void loop() {
sensorReading = analogRead(knockSensor);
if (sensorReading >= threshold) {
// キー機能をカスタマイズする場合は以下のASCII値を変更
// 参考: https://www.arduino.cc/en/Reference/ASCIIchart
Keyboard.write(32); // ASCII 32 = スペースバー
delay(150);
Keyboard.releaseAll();
}
}
- 回路図通りに接続してコードをアップロード
- PCのUSBポートに接続すれば、プログラムに基づいて様々なキーボード機能を実行可能
異なるキーボードアクションを実行したい場合はコードを修正してください。
変更が必要なのは以下の行のみです:
Keyboard.write("ASCII値");
活用アイデア
なぜこれが面白いのか? 可能性は無限大です:
- ゲームのショートカットや操作
- よく使うアプリケーションの起動
- よくアクセスするWebサイトを開く
- Windowsショートカット(ドキュメント保存、ウィンドウ最小化等)
- メールアドレスや定型文の入力
- 複雑なパスワードの入力
- 職場でのパニックボタン
ご質問があればコメントでお気軽にどうぞ。できる限りお答えします。
楽しい制作を!
コード
- customizable_punchable_keyboard_button.ino
customizable_punchable_keyboard_button.ino Arduino
#include <Keyboard.h>
const int knockSensor = A0;
const int threshold = 100;
int sensorReading = 0;
void setup() {
Keyboard.begin();
}
void loop() {
sensorReading = analogRead(knockSensor);
if (sensorReading >= threshold) {
Keyboard.write(32);
delay(150);
Keyboard.releaseAll();
}
}
回路図
circuit_diagram_dCHo19d2OK.fzz
製造プロセス
- OpenSensorsで空気質を測定: ArduinoとPythonによるガイド
- Raspberry Pi と Arduino を連携させてロボットを自作:ステップバイステップガイド
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- ArduinoでユニバーサルIRリモコンを自作:ステップバイステップガイド
- デジタル身長計の自作:Arduino Nanoとレーザー距離センサーで成長記録
- Arduino NanoでNeoPixel LEDマトリクスを自作:ステップバイステップガイド
- Arduino、高圧ブースト、20x4 LCDで自作ガイガー・ミュラー計数管を作る
- サーミスタを使った温度測定: Arduinoステップバイステップガイド
- Arduino 64キー プロトタイピング キーボードマトリックス: シフトレジスタで自作キーボード
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- ArduinoとProcessingで作るリアルタイムデジタルコンパス