Vending Machine পার্টস — সম্পূর্ণ তালিকা






Vending Machine পার্টস – সম্পূর্ণ তালিকা

VM

Vending Machine পার্টস — সম্পূর্ণ তালিকা

এই ল্যান্ডিং পেজে ভেন্ডিং মেশিনে যেসব অংশ থাকে — তাদের সহজ বর্ণনা ও ব্যবহার দেওয়া আছে।

মূল অংশ

Coin Acceptor / Coin Validator

কয়েন শনাক্ত ও গ্রহণ করে।

Bill Acceptor

নোট স্ক্যান করে গ্রহণ করে।

Card / NFC Reader

কার্ড বা মোবাইল পেমেন্ট গ্রহণের জন্য।

Control Board / Main PCB

পুরো মেশিন নিয়ন্ত্রণ করে।

Keypad / Touch Panel

পণ্য বাছাই করতে ব্যবহৃত হয়।

Display Screen / LED Screen

স্ট্যাটাস বা দাম দেখায়।

Product Shelves / Trays

যেখানে পণ্য সাজানো থাকে।

Spiral Coil / Helix Coil

পণ্য বের করার জন্য কয়েল ঘোরে।

Motor (DC / Stepper)

কয়েল/ট্রে ঘোরানোর মোটর।

অন্যান্য গুরুত্বপূর্ণ উপকরণ

Compressor

ঠান্ডা পণ্যের জন্য।

Cooling Unit / Condenser Fan

কুলিং সাপোর্ট।

Drop Sensor

পণ্য পড়ে গেছে কিনা বুঝে।

Door Switch

দরজা ওপেন/ক্লোজ শনাক্ত করে।

Power Supply (SMPS)

সব অংশে পাওয়ার দেয়।

Wiring Harness / Cables

ক্যাবল কানেকশন।

Lock & Key / Electronic Lock

সিকিউরিটি লক।

Delivery Door / Pickup Box

যেখান থেকে পণ্য বের হয়।

Smart ও কোল্ড মডিউল

IoT Controller / Cloud Module

রিমোট মনিটরিং।

QR/Barcode Scanner

কোড স্ক্যান করে।

Inventory Sensors (Weight / RFID)

স্টক মনিটর।

Thermostat & Temperature Sensor

তাপমাত্রা নিয়ন্ত্রণ।

মূল অংশগুলো

  • Coin Acceptor / Coin Validator – কয়েন চিনে নেয়
  • Bill Acceptor – নোট চিনে নেয়
  • Card / NFC Reader – কার্ড বা মোবাইল পেমেন্ট নেয়
  • Control Board / Main PCB – পুরো মেশিন নিয়ন্ত্রণ করে
  • Keypad / Touch Panel – পণ্যের কোড ইনপুট করার জন্য
  • Display Screen / LED Screen – স্ট্যাটাস বা দাম দেখায়
  • Product Shelves / Trays – যেখানে পণ্য সাজানো থাকে
  • Spiral Coil / Helix Coil – পণ্য ঠেলে বের করার জন্য ঘোরে
  • Motor (DC Motor / Stepper Motor) – ট্রে বা কয়েল ঘোরায়
  • Compressor – কোল্ড ড্রিঙ্ক বা ঠান্ডা জিনিসের জন্য
  • Cooling Unit / Condenser Fan – কুলিং সিস্টেম
  • Heater (কিছু মডেলে) – গরম খাবারের মেশিনে থাকে
  • Drop Sensor – পণ্য পড়ে গেছে কিনা বুঝতে
  • Door Switch – দরজা খোলা–বন্ধ শনাক্ত
  • Power Supply Unit (SMPS) – সবাইকে পাওয়ার দেয়
  • Wiring Harness / Cables – সব অংশ সংযুক্ত করে
  • Lighting (LED Light Strip) – ভিতরের লাইট
  • Lock & Key / Electronic Lock – সার্ভিসিংয়ের জন্য লক
  • Delivery Door / Pickup Box – যেখান থেকে পণ্য বের হয়
  • Shutter / Drop Door Motor – নিরাপদে পণ্য ডেলিভারি

Buy Parts ( CLICK HERE )

1) প্রধান ধারণা (overview)

Arduino মূলত Sensor/Input পড়বে (কয়েন পালস, ড্রপ সেন্সর, কিপ্যাড, টেম্প সেন্সর) এবং Actuator/output চালাবে (মোটর ড্রাইভার, রিলে/SSR—কমপ্রেসার/হিটার, ডিসপ্লে)। তুমি একটি অর্থপ্রদানের লজিক (payment tally), আইটেম সিলেকশন, ডিসপেন্স রুটিন ও নিরাপত্তা চেক (ডোর কাটা, ড্রপ সেন্সর)ই অটোমেট করবে।

2) প্রয়োজনীয় হার্ডওয়্যার (recommended)

  • Arduino UNO বা Mega (Mega দিলে I/O বেশি পাবে)
  • Power supply: 12V/24V (মোটর/কমপ্রেসার অনুযায়ী) + 5V Arduino (buck converter / SMPS)
  • Coin acceptor (pulse output)
  • Bill acceptor (সাধারণত MDB বা সিরিয়াল — MDB স্ট্যান্ডার্ড হলে আলাদা ইন্টারফেস দরকার) — নোট: MDB ইন্টারফেস জটিল → উপযুক্ত MDB-to-serial বা dedicated controller ব্যবহার করো
  • Card/NFC: PN532 বা RC522 (SPI/I2C)
  • Keypad (4×4) বা touch panel
  • LCD 16×2 (I2C) বা OLED
  • Stepper motor + driver (A4988/DRV8825) অথবা geared DC motor + H-bridge (L298N) — স্পাইরাল/ট্রে ঘোরানোর জন্য
  • IR/optical drop sensor বা reed switch (পণ্যের পড়া নিশ্চিতকরণ)
  • Door switch (micro switch)
  • Relay module (5V রিলেতে SSR for heater) — কম্প্রেসার/ফ্যানের জন্য high-current relay/contactor
  • Temp sensor: DS18B20 বা DHT22 (কুলিং কন্ট্রোলের জন্য)
  • Wiring, fuse, connectors, enclosure, safety earth

3) নিরাপত্তা (চিন্তা রাখবে)

  • Mains লেভেলে রিলে/কমপ্রেসার/হিটার সংযোগে সতর্কতা — সার্কিট আর ডিসকানেক্ট পার্টশপে নিলে ভালো
  • ফিউজ, সার্কিট ব্রেকার ও proper grounding রাখো
  • SSR/heavy contactor ব্যবহার করো কম্প্রেসার/হাইকারেন্ট লোডে

4) পিন ম্যাপ (উদাহরণ — Arduino UNO)

D2  - coin pulse input
D3  - drop sensor (digital)
D4  - door switch (digital)
D5  - stepper STEP
D6  - stepper DIR
D7  - motor enable / relay control (dispense)
D8  - relay compressor (compressor on/off)
D9  - relay heater
A0  - temp sensor (one-wire or analog depending)
SDA/SCL - I2C LCD (A4/A5 on UNO)
SPI pins - NFC (if using SPI)
Keypad pins - D10..D13 (example)

5) লজিক (flow)

  1. পাওমেন্ট ইন: কয়েন/নোট/কার্ড থেকে ভ্যালিড পেমেন্ট আসলে balance += value
  2. ইউজার কিপ্যাডে পণ্য কোড প্রবেশ করে → প্রাইস চেক করা হয়
  3. যদি balance >= pricedispense(item) কল করে
  4. dispense() রুটিন: stepper/ DC motor চালানো → drop sensor দিয়ে যাচাই → সফল হলে balance থেকে কমানো → রিসেট/রিপোর্ট
  5. যদি drop sensor fail/timeout → রিভার্স/রিপ্লেনিশ রোটিন + error মেসেজ
  6. কুলিং কনট্রোল: temp sensor দিয়ে thermostat logic — compressor relay on/off
  7. ডোর/লক ইন্টারলক: সার্ভিস মোড ছাড়া দরজা খোলা থাকলে অপারেশন বন্ধ

6) নমুনা Arduino কোড (সহজ, কাজের প্রমাণস্বরূপ)

নিচের কোডটা একটি সাধারণ উদাহরণ — বাস্তবে হার্ডওয়্যার অনুযায়ী পিন ও ড্রাইভার কনফিগার করো। Bill acceptor (MDB) বা কার্ড পেমেন্ট এখানে সিমুলেটেড।

// Simple Vending Machine Controller (Arduino UNO) - Example
// Components: coin pulse, keypad (simulated), stepper driver (STEP/DIR), drop sensor, LCD (I2C), compressor relay, temp sensor (DS18B20 assumed)

// Libraries
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <AccelStepper.h> // for stepper

// ----- Hardware pins -----
const int coinPin = 2;        // coin pulse input (interrupt)
const int dropSensorPin = 3;  // product drop sensor (digital)
const int doorSwitchPin = 4;  // door switch
const int stepPin = 5;        // stepper STEP
const int dirPin = 6;         // stepper DIR
const int motorEnablePin = 7; // optional enable
const int relayCompressor = 8;
const int relayHeater = 9;

// Temp (DS18B20)
const int ONE_WIRE_BUS = A0;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// LCD
LiquidCrystal_I2C lcd(0x27,16,2);

// Stepper (using AccelStepper library, driver mode 1)
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);

// ----- Variables -----
volatile unsigned long coinCount = 0;
unsigned long lastCoinTime = 0;
float balance = 0.0; // in BDT or unit currency
unsigned long lastDispenseTime = 0;

// Price table (example)
struct Item { int code; float price; int stepsToDispense; };
Item items[] = {
  {101, 30.0, 200},
  {102, 45.0, 350},
  {103, 20.0, 150}
};
const int itemCount = sizeof(items)/sizeof(items[0]);

// ----- Interrupt for coin pulse -----
void IRAM_ATTR coinISR() {
  coinCount++;
  lastCoinTime = millis();
  // For example, each pulse = 5 BDT (depends on coin acceptor)
  balance += 5.0;
}

// ----- Setup -----
void setup() {
  Serial.begin(115200);
  pinMode(coinPin, INPUT_PULLUP);
  pinMode(dropSensorPin, INPUT_PULLUP);
  pinMode(doorSwitchPin, INPUT_PULLUP);
  pinMode(motorEnablePin, OUTPUT);
  pinMode(relayCompressor, OUTPUT);
  pinMode(relayHeater, OUTPUT);

  digitalWrite(motorEnablePin, LOW); // enable if active LOW
  digitalWrite(relayCompressor, LOW);
  digitalWrite(relayHeater, LOW);

  attachInterrupt(digitalPinToInterrupt(coinPin), coinISR, FALLING);

  stepper.setMaxSpeed(2000);
  stepper.setAcceleration(1000);

  lcd.init();
  lcd.backlight();

  sensors.begin();

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Vending Ready");
  delay(800);
}

// ----- Helpers -----
void showStatus() {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Bal:");
  lcd.print(balance,1);
  lcd.setCursor(0,1);
  lcd.print("Coins:");
  lcd.print(coinCount);
}

int findItemIndex(int code) {
  for (int i=0;i<itemCount;i++){
    if (items[i].code == code) return i;
  }
  return -1;
}

bool checkDropSensor() {
  // drop sensor is active LOW (example)
  return (digitalRead(dropSensorPin) == LOW);
}

// Simple dispense (stepper rotates certain steps)
bool dispenseItem(int index) {
  int steps = items[index].stepsToDispense;
  // rotate forward
  stepper.move(steps);
  unsigned long start = millis();
  while (stepper.distanceToGo() != 0) {
    stepper.run();
    // timeout safeguard
    if (millis() - start > 5000) {
      Serial.println("Dispense timeout");
      return false;
    }
  }
  delay(300); // wait
  // check drop sensor
  if (checkDropSensor()) {
    Serial.println("Drop confirmed");
    return true;
  } else {
    Serial.println("Drop not detected");
    return false;
  }
}

// ----- Main loop -----
void loop() {
  // Update display frequently
  showStatus();

  // Example: read temp and control compressor (thermostat)
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  if (tempC > 6.0) { // if temp > 6C -> turn on compressor
    digitalWrite(relayCompressor, HIGH);
  } else if (tempC < 4.0) {
    digitalWrite(relayCompressor, LOW);
  }

  // Here: simulated keypad selection (for demo via Serial)
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    if (cmd.length() == 0) return;
    // If text like "buy101"
    if (cmd.startsWith("buy")) {
      int code = cmd.substring(3).toInt();
      int idx = findItemIndex(code);
      if (idx < 0) {
        lcd.clear(); lcd.print("Item N/A");
        Serial.println("Item not found");
      } else {
        float price = items[idx].price;
        if (balance >= price) {
          lcd.clear(); lcd.print("Dispensing...");
          bool ok = dispenseItem(idx);
          if (ok) {
            balance -= price;
            lcd.clear(); lcd.print("Take item");
            Serial.println("Dispense success");
            delay(1500);
            // reset drop sensor state if needed
          } else {
            lcd.clear(); lcd.print("Error:Retry");
            Serial.println("Dispense failed - refund or retry");
            // Optionally reverse motor or try again
          }
        } else {
          lcd.clear(); lcd.print("Need:");
          lcd.print(price - balance,1);
          Serial.println("Not enough balance");
        }
      }
    }
    // Additional commands: refund, service, addcoin simulate etc.
    if (cmd == "add5") { balance += 5.0; coinCount++; }
    if (cmd == "refund") { Serial.print("Refunding "); Serial.println(balance); balance = 0; }
  }

  delay(300);
}

7) বাস্তবে বিবেচ্য বিষয় (practical tips)

ওয়্যারিং: Motors & compressors separate power line; ground common but care with noise (flyback diodes, snubbers)।

Coin acceptor: সাধারণত pulse output দেয় (pulse per coin). সেটার মান বলে দেয় কয় টাকার কয়েন। কোডে ISR দিয়ে pulse গোনা ঠিক।

Bill acceptor: অনেকটাই MDB; সরাসরি Arduino-তে চালাতে হলে MDB interface বা dedicated controller লাগবে—অথবা বাইরের acceptor কে একটি serial-approved interface দাও।

Card/NFC: PN532/RC522 দিয়ে uid পড়ে, তারপর backend বা tokenization করে পেমেন্ট কনফার্ম করো (বহির্ভূত পেমেন্ট গেটওয়ে লাগবে)।

Stepper vs DC: স্পাইরাল/হেলিক্স ডিসপেন্সে stepper ভাল (পজিশনিং কন্ট্রোল)। A4988/DRV8825 ড্রাইভার দিয়ে STEP/DIR কমান্ড পাঠাও।

Drop sensor: ভালোভাবে ক্যালিব্রেট করো — false negative/positive এ error handling রাখো (retry, return, alert)।

Thermostat: কুলিং-এর জন্য hysteresis রাখো (উদাহরণ: on if >6°C, off if <4°C) — too frequent switching এ ক্ষতি হতে পারে।