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)
- পাওমেন্ট ইন: কয়েন/নোট/কার্ড থেকে ভ্যালিড পেমেন্ট আসলে
balance += value - ইউজার কিপ্যাডে পণ্য কোড প্রবেশ করে → প্রাইস চেক করা হয়
- যদি
balance >= price→dispense(item)কল করে dispense()রুটিন: stepper/ DC motor চালানো → drop sensor দিয়ে যাচাই → সফল হলে balance থেকে কমানো → রিসেট/রিপোর্ট- যদি drop sensor fail/timeout → রিভার্স/রিপ্লেনিশ রোটিন + error মেসেজ
- কুলিং কনট্রোল: temp sensor দিয়ে thermostat logic — compressor relay on/off
- ডোর/লক ইন্টারলক: সার্ভিস মোড ছাড়া দরজা খোলা থাকলে অপারেশন বন্ধ
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 এ ক্ষতি হতে পারে।
