スマートArduino自販機の自作:完全DIYメカトロニクスガイド
概要
ArduinoベースのDIY自販機をゼロから製作します。MDF板の切断・組み立てから電子部品配線、Arduinoプログラミングまで全工程を解説。4つの排出ユニット(連続回転サーボ)、ステッピングモーター駆動のキャリアシステム、LCD、選択ボタン4つ、コイン検出器を搭載。

キャリアシステムは必須ではありませんが、プロジェクトをより興味深く、複雑にすることで学習効果を高めています。電子工学・メカトロニクス専攻学生の卒業制作や、Arduino愛好家のチャレンジに最適です。
筐体製作
8mm厚MDF板を円鋸でカット(寸法は自作3Dモデルから取得)。Thangsで3Dモデル公開中。


開口部はジグソーで切り出し(円鋸がない場合はジグソーで全工程可能)。小型パーツもジグソーで加工。危険を伴う工具なので十分注意してください。

木工用ボンドとネジで組み立て(下穴→皿取り→3mmネジ)。90°アングルクランプとFクランプで固定しながら作業。

レールシステム(キャリア機構)
アルミパイプでX-Y 2軸レールを構築。水平レール:外径16mm×27cm×2本。垂直レール:外径20mm×45cm×3本。木板にフォースナービットで溝を切り、パイプを固定。

スライダーは21×21cm木板に8mm穴を開け、M8ネジロッドと22mmベアリング(水平用は16mmベアリング)で構成。組み付け後ガタつきがあったため、レール溝を拡張し垂直方向にスロットを追加、ネジロッドでレール間距離を詰めて解消。


左側に水平タイミングベルト用プーリー取り付けボルトと、垂直レール用ベアリング2個を追加。右側に水平移動用ステッピングモーター(NEMA 17)をブラケット込みで垂直スライダーに固定。


水平スライダーに商品コンテナを木片で自作取り付け。エポキシでレール溝補強、側面板追加で剛性アップ。垂直レール間に組み込み、垂直移動用ステッピングモーターを天板に、下部にプーリーを取り付けタイミングベルト張架。



排出ユニット
φ7cmスプレー缶に3mm金属線を巻いてヘリカルコイルを作成、グルーガンで連続回転サーボ(DS04-NFC)に固定。4ユニット分製作。


フロントパネル
蝶番でドア取り付け、マグネットキャッチャーで施錠。大開口は5mmアクリル、右側小開口は薄アルミ板(ボタン4穴、コイン投入口、LCD窓をドリルと糸ノコで加工)。電子部品をアルミ板に実装後、5mmボルトでドアに固定。

キャリア原点復帰用マイクロスイッチ2個、コインガイド(滑り降り誘導)を接着。コイン検出は赤外線近接センサー(コイン通過でLOW出力)。

回路図

12V/2A以上電源(ステッピング2台とLEDストリップ用)。バックコンバーター(LM2596)で12V→5V降圧し、サーボ4台、LCD、センサー、ボタン、スイッチに供給。ステッピングはA4988ドライバー制御。ボタンとマイクロスイッチはArduino内部プルアップ使用(押下でLOW)。ジャンパーワイヤーで配線(少々煩雑だが動作良好)。ドアにLEDストリップ2本追加で内部照明。

必要な部品
- DC-DC LM2596バックコンバーター
- 16×2 LCD
- 360°連続回転サーボモーター ×4
- ステッピングモーター NEMA 17 ×2
- A4988ステッピングドライバー ×2
- 赤外線近接センサー
- タクトスイッチ ×4
- マイクロリミットスイッチ ×2
- Arduinoボード(Uno等)
Arduinoコード
LiquidCrystalとServoライブラリをインクルード。LCDピン、サーボ4台、ステッピングピン、コイン検出器、ボタン4つ、マイクロスイッチ2つを定義。
#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(27, 26, 25, 24, 23, 22);
Servo servo1, servo2, servo3, servo4;
#define dirPinVertical 0
#define stepPinVertical 1
#define dirPinHorizontal 2
#define stepPinHorizontal 3
#define coinDetector 9
#define button1 13
#define button2 12
#define button3 11
#define button4 10
#define microSwitchV 15
#define microSwitchH 14
int buttonPressed;
setup()でLCD初期化、サーボアタッチ、ピンモード設定(ボタン/スイッチはINPUT_PULLUP)。起動時にマイクロスイッチでキャリアを原点復帰(垂直・水平それぞれwhile文でスイッチ押下まで移動、その後微調整)。
// 垂直原点復帰
digitalWrite(dirPinVertical, HIGH);
while (true) {
if (digitalRead(microSwitchV) == LOW) { moveUp(70); break; }
digitalWrite(stepPinVertical, HIGH); delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW); delayMicroseconds(300);
}
// 水平原点復帰
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) { moveLeft(350); break; }
digitalWrite(stepPinHorizontal, HIGH); delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW); delayMicroseconds(300);
}
loop()メインフロー:
- LCDに「Insert a coin!」表示
- コイン検出(近接センサーLOW)まで待機
- 「Select your item / 1, 2, 3 or 4?」表示
- ボタン押下待機(内部プルアップなのでLOW検出でbreak)
- 「Delivering...」表示
- switch文で押下ボタンに応じた位置へキャリア移動→該当サーボ回転(950ms)→原点復帰
- 「Item delivered!」表示→2秒待機→ループ先頭へ
switch (buttonPressed) {
case 1: // 位置1(最上段・左)
moveUp(4900); delay(200); moveLeft(1700); delay(300);
servo1.writeMicroseconds(2000); delay(950); servo1.writeMicroseconds(1500); delay(500);
moveRight(1700); delay(200); moveDown(4900); break;
case 2: // 位置2(最上段・右)
moveUp(4900); delay(200);
servo2.writeMicroseconds(2000); delay(950); servo2.writeMicroseconds(1500); delay(500);
moveDown(4900); break;
case 3: // 位置3(中段・左)
moveUp(2200); delay(200); moveLeft(1700); delay(300);
servo3.writeMicroseconds(2000); delay(950); servo3.writeMicroseconds(1500); delay(500);
moveRight(1700); delay(200); moveDown(2200); break;
case 4: // 位置4(中段・右)
moveUp(2200); delay(200);
servo4.writeMicroseconds(2000); delay(950); servo4.writeMicroseconds(1500); delay(500);
moveDown(2200); break;
}
移動カスタム関数(moveUp/Down/Left/Right)は、方向ピン設定後、指定ステップ数分パルス出力(300μs HIGH/LOW)するシンプルな実装。A4988を1/4ステップ設定にしており、実測で垂直4900ステップ、水平1700ステップ等を決定。
void moveUp(int steps) {
digitalWrite(dirPinVertical, LOW);
for (int x=0; x
コードはシンプルですが、メカトロニクスの要素(機械設計、モーション制御、センサー入力、ユーザーインターフェース)が凝縮された優れた学習教材になります。質問はコメント欄へ。Arduinoプロジェクトコレクションもぜひ。
製造プロセス
- 自動販売機:366億ドル規模の米国産業パワーハウス
- 自宅で作るDIY宿題自動筆記マシン:AxiDraw風ペンプロッターの自作ガイド
- Arduino Nano RP2040で作るDIY Photoshopコントロールコンソール
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Arduinoで作る赤外線心拍センサー:低コスト・リアルタイム波形表示のステップバイステップガイド
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
- Arduinoで作るデジタル腕時計 - 有限状態マシンによる実装
- Arduino Nano R3で本格的なCNCマシンを自作する