スマート自動手指消毒ディスペンサー – Arduinoで非接触・全自動化
必要な部品と材料
- Arduino Nano R3 × 1
- DRV8825 ステッピングモータードライバー × 1
- ジャンパーワイヤー × 1式
- ブレッドボード (ミニ×2推奨) × 1
- 9V電池 × 1
- 9V電池スナップ × 1
- 抵抗 1kΩ × 1
- 電解コンデンサー 100µF × 1
- 28BYJ-48 ステッピングモーター (5V) × 1
- M3ネジ (8-20mm) × 19
- 赤外線障害物検知センサーモジュール × 1
- リミットスイッチ KW12-3 (ローラーレバー) × 1
- アルミ剛性カップリング 5mm-8mm × 1
- 台形ネジ T8-300mm (真鍮ナット付き, ピッチ2mm) × 1
- オンオフスイッチ × 1
- 手指消毒液ボトル × 1
- 688ZZ ベアリング (8×16×5mm) × 1
- LM8UU リニアベアリング (8×15×24mm) × 1
- ベルクロタイ × 1
必要な工具
- 3Dプリンター (Creality Ender 3 V2など)
- はんだごて (オプション)
- 金切り鋸 (ネジカット用)
使用するアプリとオンラインサービス
- Arduino IDE
- 3D設計ソフト (Onshapeなど、オプション)
- Ultimaker Cura (スライサー)
プロジェクト概要
COVID-19パンデミックで手指消毒の重要性が高まる中、ディスペンサーに触れること自体が感染リスクになっています。14歳の作者が、既存の消毒液/石鹸ディスペンサーに後付けして完全非接触・自動化できるアタッチメントを開発しました。安価で、様々なボトルに簡単装着可能です。
仕組みの理解
ステッピングモーターとカップリングで台形ネジを回転。3Dプリントしたプレス部がナットでネジと連結し、リニアベアリングで回転力を直線運動に変換します。これにより任意の距離・速度でプレスを上下動できます。
動作フロー
- 起動時: プレスが上昇し、リミットスイッチが押されるまで動作 (原点復帰/セルフキャリブレーション)
- 待機中: IRセンサーが手を検知 (数cm下方)
- 検知時: プレスが設定距離下降 (ディスペンサーを押す) → 2秒待機 → リミットスイッチが押されるまで上昇 (元の位置に戻る)
ベルクロタイでボトルに巻き付けて固定すれば、あらゆるディスペンサーに対応可能です。
ステッピングモーターのバイポーラ化 (トルク2.5倍!)
28BYJ-48はユニポーラ仕様 (トルク約300g·cm) ですが、基板の中央パターンをカットし赤線を除去する簡単な改造でバイポーラ化可能。トルクが 800g·cm以上 に向上します。DRV8825などのバイポーラドライバーが必要になりますが、5V定格モーターでも8.4V以上の駆動電圧で問題なく動作します。
ベルクロタイの自作
マジックテープテープを長短2本 (約30-40cm と 4-7cm) 用意し、同面同士 (両方ともフック面またはループ面) をホチキスで留めるだけ。2セット作ります。
回路図
9V電池 → スイッチ → 100µFコンデンサー → Arduino VIN/GND。IRセンサー: VCC→5V, GND→GND, OUT→D9。リミットスイッチ: COM→5V, NO→D8 & 1kΩ→GND。DRV8825: VMOT→VIN, GND→GND, DIR→D2, STEP→D3, EN→D4, RST-SLP短絡。モーター: 青→A2, 黄→A1, 橙→B1, 桃→B2。
プログラム概要
stepsPerRevolution = 6000(1回転2048ステップ、約3回転分)- 起動時: EN=LOWでドライバー有効、リミットスイッチが押されるまで反時計回りで原点復帰、その後EN=HIGHで省電力
- ループ: IRセンサー=LOW(手あり) で EN=LOW、時計回りに6000ステップ下降 → 2秒待機 → リミットスイッチが押されるまで反時計回りで上昇 → EN=HIGH
組み立て手順 (概要)
- カバー部: ベルクロタイ → ホルダー → ネジ止め ×2
- プレス部: リニアベアリング圧入、T8ナットを4本ネジで固定
- 電子ケース: 配線済み基板を収納、ケーブルを穴から出す
- IRセンサーホルダー: センサーをネジ固定、ナットで位置調整
- 最終組み立て: ベアリング挿入 → T8ネジ (70-82mm、長ければ金切り鋸でカット) とプレス部装着 → カップラーでモーターとネジ連結 → モーター固定 → リミットスイッチ取付 → カバーをベースに5本ネジ止め → IRホルダーをベース前面に2本ネジ止め → 電子ケースをカバーに3本ネジ止め
コード
Automatic_Hand_Sanitizer_Transformer.code
const int dirPin = 2;
const int stepPin = 3;
const int enablePin = 4;
const int stepsPerRevolution = 6000;
int endStop = 8;
int irSensor = 9;
void setup() {
pinMode(endStop, INPUT);
pinMode(irSensor, INPUT);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW);
while (digitalRead(endStop) == LOW) {
digitalWrite(dirPin, HIGH);
for (int x = 0; x < 1; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
}
digitalWrite(enablePin, HIGH);
}
void loop() {
if (digitalRead(irSensor) == 0) {
digitalWrite(enablePin, LOW);
digitalWrite(dirPin, LOW);
for (int x = 0; x < stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(2000);
while (digitalRead(endStop) == LOW) {
digitalWrite(dirPin, HIGH);
for (int x = 0; x < 1; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
}
digitalWrite(enablePin, HIGH);
}
}
3Dプリントパーツ
- メインベース (本体)
- プレス部 (ディスペンサーを押すパーツ)
- カバー (電子部品ケース兼用)
- ベルクロタイ機構 ×2
- プレス支持ロッド
- IRセンサーホルダー
- ベルクロ固定具 ×2 (カバー用)
回路図

製造プロセス
- Arduino UNOとMAX7219で作るUFOアタックゲーム – レトロなドットマトリクスシューティング
- DIY自動列車制御システム – Arduinoで実現するシンプル・信頼性・カスタマイズ自在なレイアウト運転
- 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- Arduinoとジョイスティックでインタラクティブゲーム – LEDフィードバック付き
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduinoで作る自律走行ミニローバー
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き