工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

必要な部品と材料

FriendlyARM 1/4合板 (図面指定寸法にカット) × 4
3/4インチ合板ブロッキング (幅3/4インチ、接続先パネルと同長にカット、図面参照) × 1
LAFVIN 5セット 28BYJ-48 ULN2003 5Vステッピングモーター + ULN2003ドライバーボード (Arduino用) (投入するお菓子を押し出せるトルク) × 1
PCアクセサリ - IDC 1.27mmピッチ レインボーフラットリボンケーブル (2.54mmコネクタ用、50P-10FT) (配線をきれいにプロフェッショナルに) × 1
Glarks 635個 Dupontコネクタハウジング オス/メスピン 40ピン (配線をきれいにプロフェッショナルに) × 1
Gamelec 照光式マイクロスイッチ交換用 (ボタン必須) × 1
コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド ブレッドボード (ユニバーサル基板でも可) × 1
30枚 両面PCB基板 プロトタイプキット (1-2枚で十分だが、将来のプロジェクト用に最適サイズ) × 1
コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド Arduino Mega 2560 (本プロジェクトのコントローラー) × 1
Tolako 5Vリレーモジュール (Arduino ARM用) (モーター過熱防止用) × 1
HiLetgo 2個 1602 シリアルLCDモジュールディスプレイ (これがないとどのボタンが押されたかわからない) × 1
LEDライトストリップ (オプション) × 2
50フィート 8ゲージ 単線裸銅接地線 (コイル巻き線用) × 1
フラット金属棚仕切り × 1

必要な工具と機器

テーブルソーまたは電動ノコギリ (木材カットできる場所がある場合不要)
コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド はんだごて
コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド ホットグルーガン (グルースティックも忘れずに)

使用するアプリとオンラインサービス

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド Arduino IDE

プロジェクトについて

パーソナル自動販売機

このプロジェクトは、パーソナル自動販売機をステップバイステップで構築するものです。お気に入りのお菓子を詰めたり、オフィスに置いてチームでシェアしたりできます。ご意見お待ちしています。

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

機械の組み立て

本文中で機械の図面を参照するので、理解のために図面もご覧ください。

機械寸法: 幅21インチ × 奥行18インチ × 高さ24 1/4インチ (箱寸法)

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド
コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

図示の通り、各接合点に3/4インチブロッキングを使って箱を組み立てます。側面パネルは底板の上に、天板の下に配置します。外周壁は幅21インチ × 高さ24 1/4インチになります。

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

仕切り壁は設置前にセットアップが必要です。上面から16 1/4インチ下がった位置に下段棚用ブロッキングを、上面から8 1/4インチ下がった位置に上段棚用ブロッキングを取り付けます。正面から見て左側壁にも同様に上下棚用ブロッキングを取り付けます。

※重要: 下段棚を先に取り付けてください。後からブロッキング固定が非常に困難になります。

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

棚用ブロッキング設置後、13×12インチパネルを各ブロッキングセットに取り付けます。これで仕切り壁が正しい位置に固定されます。その後、仕切り壁右側の上下にブロッキングを固定し、天板と底板に固定します。これで構造が完全に固まります。

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

背面パネルを取り付け、モーター設置の準備をします。3Dプリントしたコイルホイールを用意し、寸法を測ってドリル穴位置を決めます。ホイールの高さに1/4インチ足してコイル回転分の余裕を持たせます (材質により調整)。棚の中央(左壁から6 1/2インチ)に印をつけ、各棚区画の中心(3 1/4インチ)をマーク。先ほど測った高さでドリル穴位置を決定。ホイールシャフトが板に擦れないよう穴を開け、モーターを取り付けネジ止めします。

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

モーターリレーの設定

以下のようにピン接続します。L293Dチップ(ノッチ左側)を使用してリレーを制御 (回路図参照)。これでモーターに電力供給できます。

(左から右へ)

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

画面とボタンの設置

画面: 正面から見て機械右側の適切な場所を選び、ディスプレイ部分の穴 (2.53937" × 0.5708661") をマーキング。
ボタン: 同様に右側の適切な場所に4つのボタン用穴 (直径1.10236"、指定ボタン使用時) をマーキング。必要より小さいドリルビットで開け、サンドペーパーで調整するのがコツです。

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド
コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

図の接続位置と完全に一致させてください。図のLEDはプッシュボタン内蔵LEDです。図では分かりやすくするため別々に描いていますが、実際はボタンに内蔵されています。

各モーターを付属ドライバーに接続し、各ドライバーをコントローラーに接続:

モーター設定:

電源はブレッドボードの12V側に接続 (ATX電源から後で供給)。ドライバーの4つの「IN」ピンをコントローラーに接続:

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

※※※ このブロックの最初の2ピンは5Vピンです - 本プロジェクトでは使用しません ※※※

ボタン接続:

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

LCD画面:

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

ATX電源ユニット:

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

デバイス電源に必要な配線のみカット・ストリップ。他の配線はコネクタに残しておけば他プロジェクトで再利用可能。

ATXピン配置:

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

棚仕切りとコイル

棚と押し出しコイルのセットアップ方法:

棚仕切り: 正面から見て左側壁または仕切り壁から6 1/2インチの中央点 (上記手順でマーキング済み) に、平らな金属板を三角形「^」に曲げて中央仕切りとして設置。中央マークに合わせてセンタリング。上下両棚で繰り返し。ホットグルーで固定。側面スライドレールはオプション。

コイル作成: 直径1 1/2インチの管 (パイプ、コーキングチューブ、スプレー缶等) を用意。ゴムバンドを管の長さ方向に巻き、両側の直線をなぞる。両側に平行線が引けたら、片側を1インチから開始し、そこから2インチ間隔でマーク。反対側は最初から2インチ間隔でマーク。1インチ側からコイルを巻き始め、両側のマークに合わせて巻く。これで段差2インチのコイルが完成 (ほとんどの商品に対応)。キャンディバー用なら1インチ間隔に短縮 (上記を半分に)。

コイルと3Dプリントホイールの接続: 市販ホイールも利用可能 (Amazon等で検索)。コイルの1インチ側を潰して円形にし、直径をホイールよりわずかに小さくする。ホイール外周に嵌めるとコイルが圧縮されて滑り止めになる。フィットしたらホットグルーでコイル端をホイールに固定。

LEDストリップライト:

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

正極リードをブレッドボード12V側の+12Vピンへ。負極リードをブレッドボード12V側のGNDピンへ (図には未記載)。

質問があれば何でも聞いてください。このプロジェクトを史上最も簡単にするためアップデートします!

コード

自動販売機 - LEDライト変更なし版 Arduino

プロジェクト完成と理解に必要なすべて

// Display
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// Stepper Library
#include <Stepper.h>

// Relay Setup
#define ENABLE 10
#define DIRA 8
#define DIRB 9

// Define "i"
int i;

// Defining pins section
// Stepper Connect 1
int stepIN1Pin = 22;
int stepIN2Pin = 24;
int stepIN3Pin = 26;
int stepIN4Pin = 28;

// Stepper Connect 2
int stepIN1Pin1 = 23;
int stepIN2Pin1 = 25;
int stepIN3Pin1 = 27;
int stepIN4Pin1 = 29;

// Stepper Connect 3
int stepIN1Pin2 = 30;
int stepIN2Pin2 = 32;
int stepIN3Pin2 = 34;
int stepIN4Pin2 = 36;

// Stepper Connect 4
int stepIN1Pin3 = 31;
int stepIN2Pin3 = 33;
int stepIN3Pin3 = 35;
int stepIN4Pin3 = 37;

// Define steps
int stepsPerRevolution = 2048;

// Define buttons pin ports
const int button1Pin = A0;
const int button2Pin = A1;
const int button3Pin = A2;
const int button4Pin = A3;

// Define each stepper
Stepper myStepper0(stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin);
Stepper myStepper1(stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pin1, stepIN4Pin1);
Stepper myStepper2(stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2);
Stepper myStepper3(stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3);

void setup() {
  pinMode(button1Pin, INPUT);
  pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT);
  pinMode(button4Pin, INPUT);
  
  pinMode(ENABLE, OUTPUT);
  pinMode(DIRA, OUTPUT);
  pinMode(DIRB, OUTPUT);
  
  myStepper0.setSpeed(15);
  myStepper1.setSpeed(15);
  myStepper2.setSpeed(15);
  myStepper3.setSpeed(15);
  
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Select your item");
  lcd.setCursor(0, 1);
  lcd.print(" #1 #2 #3 #4");
}

void loop() {
  int button1State, button2State, button3State, button4State;
  button1State = digitalRead(button1Pin);
  button2State = digitalRead(button2Pin);
  button3State = digitalRead(button3Pin);
  button4State = digitalRead(button4Pin);
  
  digitalWrite(ENABLE, HIGH);
  for (i = 0; i < 5; i++);
  
  // Button 1 pressed
  if ((button1State == LOW) && !(button2State == LOW)) {
    digitalWrite(DIRA, HIGH);
    digitalWrite(DIRB, LOW);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper0.step(stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 1");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW);
    digitalWrite(DIRB, LOW);
  }
  
  // Button 2 pressed
  if ((button2State == LOW) && !(button1State == LOW)) {
    digitalWrite(DIRA, HIGH);
    digitalWrite(DIRB, LOW);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper1.step(stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 2");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW);
    digitalWrite(DIRB, LOW);
  }
  
  // Button 3 pressed
  if ((button3State == LOW) && !(button4State == LOW)) {
    digitalWrite(DIRA, HIGH);
    digitalWrite(DIRB, LOW);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper2.step(stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 3");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW);
    digitalWrite(DIRB, LOW);
  }
  
  // Button 4 pressed
  if ((button4State == LOW) && !(button3State == LOW)) {
    digitalWrite(DIRA, HIGH);
    digitalWrite(DIRB, LOW);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper3.step(-stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 4");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW);
    digitalWrite(DIRB, LOW);
  }
}
自動販売機 - LEDライト変更版 C++

動画をご覧ください!

// Display
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// Stepper Library
#include <Stepper.h>

// Relay Setup
#define ENABLE 10
#define PinA 8
#define PinB 9
#define REDPIN 38
#define GREENPIN 39
#define BLUEPIN 40

int i;
int r, g, b;

// Defining pins section (同上)
// ... ピン定義は前コードと同じ ...

void setup() {
  pinMode(button1Pin, INPUT);
  pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT);
  pinMode(button4Pin, INPUT);
  
  pinMode(ENABLE, OUTPUT);
  pinMode(PinA, OUTPUT);
  pinMode(PinB, OUTPUT);
  
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);
  
  myStepper0.setSpeed(15);
  myStepper1.setSpeed(15);
  myStepper2.setSpeed(15);
  myStepper3.setSpeed(15);
  
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Select your item");
  lcd.setCursor(0, 1);
  lcd.print(" #1 #2 #3 #4");
  
  analogWrite(REDPIN, 256);
  analogWrite(GREENPIN, 256);
  analogWrite(BLUEPIN, 256);
}

void loop() {
  int button1State, button2State, button3State, button4State;
  button1State = digitalRead(button1Pin);
  button2State = digitalRead(button2Pin);
  button3State = digitalRead(button3Pin);
  button4State = digitalRead(button4Pin);
  
  digitalWrite(ENABLE, HIGH);
  for (i = 0; i < 5; i++);
  
  // Button 1: 赤→青→緑 フェード
  if ((button1State == LOW) && !(button2State == LOW)) {
    digitalWrite(PinA, HIGH);
    digitalWrite(PinB, LOW);
    analogWrite(REDPIN, 256);
    for (b = 256; b > 0; b--) analogWrite(BLUEPIN, b);
    for (g = 256; g > 0; g--) analogWrite(GREENPIN, g);
    for (g = 256; g > 0; g--);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper0.step(stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 1");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    for (b = 0; b < 256; b++) analogWrite(BLUEPIN, b);
    for (g = 0; g < 256; g++) analogWrite(GREENPIN, g);
    digitalWrite(PinA, LOW);
    digitalWrite(PinB, LOW);
  }
  
  // Button 2: 緑→青→赤 フェード
  if ((button2State == LOW) && !(button1State == LOW)) {
    digitalWrite(PinA, HIGH);
    digitalWrite(PinB, LOW);
    analogWrite(GREENPIN, 256);
    for (b = 256; b > 0; b--) analogWrite(BLUEPIN, b);
    for (r = 256; r > 0; r--) analogWrite(REDPIN, r);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper1.step(stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 2");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    digitalWrite(PinA, LOW);
    digitalWrite(PinB, LOW);
    for (b = 0; b < 256; b++) analogWrite(BLUEPIN, b);
    for (r = 0; r < 256; r++) analogWrite(REDPIN, r);
  }
  
  // Button 3: 青→赤→緑 フェード
  if ((button3State == LOW) && !(button4State == LOW)) {
    digitalWrite(PinA, HIGH);
    digitalWrite(PinB, LOW);
    analogWrite(BLUEPIN, 256);
    for (r = 256; r > 0; r--) analogWrite(REDPIN, r);
    for (g = 256; g > 0; g--) analogWrite(GREENPIN, g);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper2.step(stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 3");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    digitalWrite(PinA, LOW);
    digitalWrite(PinB, LOW);
    for (g = 0; g < 256; g++) analogWrite(GREENPIN, g);
    for (r = 0; r < 256; r++) analogWrite(REDPIN, r);
  }
  
  // Button 4: 赤緑→青 フェード
  if ((button4State == LOW) && !(button3State == LOW)) {
    digitalWrite(PinA, HIGH);
    digitalWrite(PinB, LOW);
    analogWrite(REDPIN, 256);
    analogWrite(GREENPIN, 256);
    for (b = 256; b > 0; b--) analogWrite(BLUEPIN, b);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Dispensing");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    myStepper3.step(-stepsPerRevolution);
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Please take");
    lcd.setCursor(3, 1);
    lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0);
    lcd.print("Button State 4");
    lcd.setCursor(2, 1);
    lcd.print("1 2 3 or 4");
    digitalWrite(PinA, LOW);
    digitalWrite(PinB, LOW);
    for (b = 0; b < 256; b++) analogWrite(BLUEPIN, b);
  }
}
コインアクセプター対応完全版コード C++

完全版コード

// Display
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// Stepper Library
#include <Stepper.h>

// Relay Setup
#define ENABLE 10
//#define PinA 8
//#define PinB 9

// Transistor pins for LEDs
#define REDPIN 38
#define GREENPIN 39
#define BLUEPIN 40

// int i;
int r, g, b;

// Constants
const int coinpin = 21;
const int ledpin = 13;
const int targetcents = 100;

// Variables
volatile int cents = 0;
int credits = 0;

// Defining pins section (同上)
// ... ピン定義は前コードと同じ ...

void setup() {
  attachInterrupt(digitalPinToInterrupt(coinpin), coinInterrupt, RISING);
  
  pinMode(button1Pin, INPUT);
  pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT);
  pinMode(button4Pin, INPUT);
  
  pinMode(ENABLE, OUTPUT);
  // pinMode(PinA, OUTPUT);
  // pinMode(PinB, OUTPUT);
  
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);
  
  myStepper0.setSpeed(15);
  myStepper1.setSpeed(15);
  myStepper2.setSpeed(15);
  myStepper3.setSpeed(15);
  
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Select your item");
  lcd.setCursor(0, 1);
  lcd.print(" #1 #2 #3 #4");
  analogWrite(REDPIN, 256);
  analogWrite(GREENPIN, 256);
  analogWrite(BLUEPIN, 256);
}

void loop() {
  if (cents >= targetcents) {
    credits = credits + 1;
    cents = cents - targetcents;
  }
  
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(cents);
  lcd.setCursor(3, 0);
  lcd.print("Coin Count");
  lcd.setCursor(0, 1);
  lcd.print(credits);
  lcd.setCursor(3, 1);
  lcd.print("credit earned");
  delay(1000);
  
  if (credits > 0) {
    int button1State, button2State, button3State, button4State;
    button1State = digitalRead(button1Pin);
    button2State = digitalRead(button2Pin);
    button3State = digitalRead(button3Pin);
    button4State = digitalRead(button4Pin);
    
    // Button 1
    if ((button1State == LOW) && !(button2State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(REDPIN, 256);
      for (b = 256; b > 0; b--) analogWrite(BLUEPIN, b);
      for (g = 256; g > 0; g--) analogWrite(GREENPIN, g);
      for (g = 256; g > 0; g--);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Dispensing");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      myStepper0.step(stepsPerRevolution);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Please take");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      delay(2500);
      for (b = 0; b < 256; b++) analogWrite(BLUEPIN, b);
      for (g = 0; g < 256; g++) analogWrite(GREENPIN, g);
      digitalWrite(ENABLE, LOW);
      credits = credits - 1;
      cents = cents - cents;
    }
    
    // Button 2
    if ((button2State == LOW) && !(button1State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(GREENPIN, 256);
      for (b = 256; b > 0; b--) analogWrite(BLUEPIN, b);
      for (r = 256; r > 0; r--) analogWrite(REDPIN, r);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Dispensing");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      myStepper1.step(stepsPerRevolution);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Please take");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      delay(2500);
      digitalWrite(ENABLE, LOW);
      for (b = 0; b < 256; b++) analogWrite(BLUEPIN, b);
      for (r = 0; r < 256; r++) analogWrite(REDPIN, r);
      credits = credits - 1;
      cents = cents - cents;
    }
    
    // Button 3
    if ((button3State == LOW) && !(button4State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(BLUEPIN, 256);
      for (r = 256; r > 0; r--) analogWrite(REDPIN, r);
      for (g = 256; g > 0; g--) analogWrite(GREENPIN, g);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Dispensing");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      myStepper2.step(stepsPerRevolution);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Please take");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      delay(2500);
      digitalWrite(ENABLE, LOW);
      for (g = 0; g < 256; g++) analogWrite(GREENPIN, g);
      for (r = 0; r < 256; r++) analogWrite(REDPIN, r);
      credits = credits - 1;
      cents = cents - cents;
    }
    
    // Button 4
    if ((button4State == LOW) && !(button3State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(REDPIN, 256);
      analogWrite(GREENPIN, 256);
      for (b = 256; b > 0; b--) analogWrite(BLUEPIN, b);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Dispensing");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      myStepper3.step(-stepsPerRevolution);
      lcd.clear();
      lcd.setCursor(2, 0);
      lcd.print("Please take");
      lcd.setCursor(3, 1);
      lcd.print("Your Item");
      delay(2500);
      digitalWrite(ENABLE, LOW);
      for (b = 0; b < 256; b++) analogWrite(BLUEPIN, b);
      credits = credits - 1;
      cents = cents - cents;
    }
  }
}

void coinInterrupt() {
  cents = cents + 5;
  digitalWrite(ledpin, HIGH);
}

回路図

システム全体の完全な図面。ATX電源、モーター、LCD、LED、ライト、コントローラーを含む

コイン式パーソナル自動販売機を自作 - 部品リストと組み立てガイド

製造プロセス

  1. EEG装置:設計、製造、新たな応用展開
  2. 自動販売機:366億ドル規模の米国産業パワーハウス
  3. ミシン:19世紀革新から現代自動化までの進化と製造
  4. フライドポテト自動販売機の仕組みと導入メリット徹底解説
  5. 生乳自動販売機(ミルクATM)の仕組み・メリット・衛生管理の全知識
  6. チップ自動販売機:熱々フライドポテトをオンデマンドで提供する仕組み
  7. 麺類自動販売機を発見:仕組みと購入可能商品
  8. 革新的な茶・コーヒー・スープ自動販売機を探る
  9. ミールプレップ自販機:いつでも新鮮・ヘルシーな食事を提供
  10. CNC旋盤の基礎と応用:構造・制御・工具・自動化で実現する高精度旋削加工
  11. 利益を解き放つ:アイスキャンディー自販機のビジネスポテンシャル