Mục lục:

Máy bán hàng tự động dựa trên Arduino $ 1: 8 bước
Máy bán hàng tự động dựa trên Arduino $ 1: 8 bước

Video: Máy bán hàng tự động dựa trên Arduino $ 1: 8 bước

Video: Máy bán hàng tự động dựa trên Arduino $ 1: 8 bước
Video: RFID Vending machine using Arduino 2024, Tháng bảy
Anonim
Image
Image
Vỏ bọc
Vỏ bọc

Chúng tôi nhận được ý tưởng từ giáo viên kỹ thuật của mình - tất cả chúng tôi đều nghĩ rằng sẽ là một ý tưởng hay nếu có một máy bán hàng tự động cho lớp học của mình và ông ấy nói - "tuyệt vời, hãy làm một chiếc". Hóa ra máy bán hàng tự động sẽ là một dự án cấp cao tuyệt vời và khi hoàn thành sẽ hoạt động như một hoạt động gây quỹ cho chương trình kỹ thuật của chúng tôi.

Nó được gọi là Máy bán hàng tự động 1 đô la không phải vì nó tốn 1 đô la để tạo ra, mà đơn giản vì máy chấp nhận hóa đơn là một mô hình cũ hơn chỉ lấy hóa đơn 1 đô la:)

Bước 1: Tiêu chí

Chúng tôi muốn có một máy bán hàng tự động vừa vặn trên bàn làm việc và không quá cao. Chúng tôi đã lấy kích thước chiều rộng của chiếc bàn để đảm bảo rằng chúng tôi không có máy bán hàng tự động treo trên bàn.

Bước 2: Vỏ bọc

Vỏ bọc
Vỏ bọc
Vỏ bọc
Vỏ bọc
Vỏ bọc
Vỏ bọc

Chúng tôi làm cho chiếc hộp của mình rộng 19 inch, dài 17 inch x cao 25 inch. Chúng tôi sử dụng Máy CNC để cắt gỗ. Chúng tôi đã sử dụng solidworks để thiết kế các khuôn mặt và sau đó chuyển đổi chúng thành các loại tệp bản vẽ cho phần mềm CNC của chúng tôi. Chúng tôi chà nhám các cạnh và sau đó vặn chúng bằng 1 ¼”. Chúng tôi đã gắn bảng điều khiển phía trước bằng một bản lề và sử dụng vít ¼ “để các vít này không xuyên qua mặt khác. Chúng tôi cũng sử dụng kính Acrylic mà chúng tôi cắt cho các kệ và bảng điều khiển phía trước.

Bước 3: Điện tử

Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử

Arduino

Chúng tôi đã sử dụng một Bảng Arduino Mega 2560. Chúng tôi cũng sử dụng Bo mạch động cơ Adafruit để chúng có thể chạy động cơ bước. Chúng tôi đã thêm các ghim vào adafruit's để chúng kết nối với nhau. Chúng đã được chèn chúng trên đầu trang của nhau. Mỗi chiếc có thể chạy 2 động cơ. Ngoài ra, xin lưu ý rằng jumper cần được kết nối.

Nguồn cung cấp cho máy tính để bàn

Bestek ATX Nguồn điện sử dụng bộ chuyển đổi để giữ nguồn điện luôn bật. Bộ chuyển đổi từ sparkfun.com và cung cấp các điện áp khác nhau.

Cuộn vào động cơ

Chúng tôi đã làm các mô hình solidworks để giữ động cơ, lấy cuộn dây và dẫn hướng cuộn dây dọc theo giá. Chúng tôi đã đạt được các cuộn dây của chúng tôi từ ebay và cắt chúng thành kích thước. Chúng tôi cũng phải uốn cong 3 trong số chúng vì chúng tôi không có được 6 với các đầu thẳng để kết nối với giá treo cuộn dây. Sau đó, chúng tôi in 3D chúng và gắn chúng vào cuộn dây và động cơ. Các động cơ bước mà chúng tôi có, chúng tôi đã lắp vào một giá đỡ. Nó sẽ giữ động cơ và hướng cuộn dây theo một đường thẳng.

LCD và bàn phím

Chúng tôi đã sử dụng Bàn phím Arduino và màn hình LCD được kết nối vào dây dẫn 5V trên bộ chuyển đổi nguồn điện để cấp nguồn và sau đó vào cùng một Bảng Arduino

Đấu dây

Chúng tôi khuyên bạn nên sử dụng 18 dây đo. Trong trường hợp của chúng tôi, chúng tôi phải thỏa hiệp bằng cách sử dụng các đồng hồ đo khác nhau vì chúng tôi đã hết 18 đồng hồ đo

Dải đèn LED

Chúng tôi đã sử dụng một dải đèn LED để tăng sáng cho máy. Chúng tôi đã kết nối nó với một dây dẫn 12V trên bộ chuyển đổi nguồn điện. Rất may, dải đèn LED mà chúng tôi sử dụng đã có dấu + và - giúp quá trình kết nối dễ dàng hơn.

Bước 4: Người chấp nhận hóa đơn

Người chấp nhận hóa đơn
Người chấp nhận hóa đơn
Người chấp nhận hóa đơn
Người chấp nhận hóa đơn
Người chấp nhận hóa đơn
Người chấp nhận hóa đơn
Người chấp nhận hóa đơn
Người chấp nhận hóa đơn

Chúng tôi đã sử dụng Coinco BA30B làm người chấp nhận hóa đơn của mình. Nó phải được kết nối trực tiếp với tường như một nguồn điện. Chúng tôi đã kết hợp nó với bộ chuyển đổi 24 chân từ bộ cấp nguồn atx để cắm và cho phép đi dây dễ dàng hơn. Sơ đồ chân mà chúng tôi đã theo dõi được tìm thấy trong liên kết sau:

techvalleyprojects.blogspot.com/2011/07/ard…

Trong trường hợp của chúng tôi, chúng tôi phải tạo một giá đỡ để nâng cao bộ chấp nhận hóa đơn vì nếu không nó sẽ quá thấp so với cách viết của chúng tôi.

Bước 5: Kiểm tra

Kiểm tra thiết bị điện tử bên ngoài vỏ trước để đảm bảo rằng các thành phần hoạt động. Mọi vấn đề phát sinh cần được khắc phục trước khi đặt chúng vào bên trong vỏ.

Bước 6: Điện tử sang vỏ bọc

Khi bạn đã kiểm tra thiết bị điện tử và hài lòng với kết quả của chúng, hãy bắt đầu đặt chúng vào vỏ của bạn. Điều chỉnh độ dài dây sao cho vừa vặn với bên trong.

Bước 7: Thử nghiệm cuối cùng

Sau khi được đặt vào vỏ, hãy kiểm tra lại mọi thứ. Nếu mọi thứ hoạt động như bạn mong đợi, xin chúc mừng! Bạn đã tạo ra một máy bán hàng tự động.

Bước 8: Mã Arduino + Liên kết

Tải xuống:

Mã Arduino

drive.google.com/drive/folders/1oC4MhOcMFy…

Thư mục SolidWorks với các tệp bộ phận và lắp ráp

drive.google.com/drive/folders/1amZoypiWcZ…

Đề phòng có điều gì đó đã xảy ra với liên kết, đây là mã arduino được hiển thị đầy đủ. Mã Arduino <<

#include #include #include "Arduino.h" #include #include #include "tiện ích / Adafruit_MS_PWMServoDriver.h" #include

const int stepsPerRevolution = 200; const byte ROWS = 4; // bốn hàng const byte COLS = 3; // khóa ký tự ba cột [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [ROWS] = {5, 6, 7, 8}; // kết nối với sơ đồ hàng của byte bàn phím colPins [COLS] = {2, 3, 4}; // kết nối với sơ đồ cột của bàn phím Bàn phím bàn phím = Bàn phím (makeKeymap (các phím), rowPins, colPins, ROWS, COLS); Adafruit_MotorShield AFMS1 = Adafruit_MotorShield (); Adafruit_StepperMotor * myMotor1 = AFMS1.getStepper (-200, 1); Adafruit_StepperMotor * myMotor2 = AFMS1.getStepper (-200, 2); Adafruit_MotorShield AFMS2 = Adafruit_MotorShield (0x61); Adafruit_StepperMotor * myMotor3 = AFMS2.getStepper (-200, 1); Adafruit_StepperMotor * myMotor4 = AFMS2.getStepper (-200, 2); Adafruit_MotorShield AFMS3 = Adafruit_MotorShield (0x62); Adafruit_StepperMotor * myMotor5 = AFMS3.getStepper (-200, 1); Adafruit_StepperMotor * myMotor6 = AFMS3.getStepper (-200, 2); Adafruit_MotorShield AFMS4 = Adafruit_MotorShield (0x63); Adafruit_StepperMotor * myMotor7 = AFMS4.getStepper (-200, 1); Adafruit_StepperMotor * myMotor8 = AFMS4.getStepper (-200, 2); Màn hình LCD LiquidCrystal (1, 11, 9, 10, 12, 13); // Ghim kỹ thuật số màn hình LCD được kết nối với // Hằng số // // ghim cho dòng tín dụng (-) của người xác thực hóa đơn const int billValidator = 22;

// Biến /

/ ghi lại khoảng thời gian của xung (mili giây) thời lượng dài không được đánh dấu;

// nắm giữ tổng số đô la được ghi int dollarCounter = 0; void setup () {lcd.begin (16, 1); // đặt tọa độ văn bản lcd lcd.print ("Chèn chỉ $ 1"); // Đặt văn bản Serial.begin (9600); // Khởi tạo các cổng nối tiếp để giao tiếp. Serial.println ("Kiểm tra bước!"); // Gõ Out Stepper Test trong màn hình nối tiếp để chúng ta biết động cơ bước nào được nhấn. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Đặt Tốc độ động cơ tại đó chúng sẽ chạy myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Thiết lập mã pin cho trình xác thực hóa đơn và nút pinMode (billValidator, INPUT); // Đặt hóa đơn

// Khởi tạo các cổng nối tiếp để giao tiếp. Serial.begin (9600); Serial.println ("Đang đợi đô la…"); } void loop () {{time = pulseIn (billValidator, HIGH); // Bắt đầu tìm độ dài xung nhận được từ bộ chấp nhận hóa đơn if (thời lượng> 12000) // Giá trị mà nó phải vượt qua để xác thực là một đô la được xử lý và xác thực {// Đếm đô la dollarCounter ++; // Kiểm tra sự hiểu biết Serial.print ("Đã phát hiện thấy đô la. / N Total:"); // Hiển thị số đô la mới Serial.println (dollarCounter); // vòng lặp để đợi cho đến khi một nút được nhấn trong khi (thời lượng> 12000) {char key = keypad.getKey (); // kết nối keyoad và bắt đầu xem phím nào được nhấn if (key! = NO_KEY) {// sẽ tìm phím được nhấn Serial.println (key); // cho chúng tôi biết cái nào được nhấn trong màn hình nối tiếp} {if (key == '1') {// Nếu phím 1 được nhấn, thực hiện như sau: int keyPressed = key - '1'; myMotor8-> step (580, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor8-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp}

if (key == '2') {// Nếu Phím 2 được nhấn, thực hiện như sau: int keyPressed = key - '2'; myMotor7-> step (400, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor7-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp} if (key == '3') {// Nếu phím 3 được nhấn, thực hiện như sau: int keyPressed = key - '3'; myMotor6-> step (400, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor6-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp} if (key == '4') {// Nếu phím 4 được nhấn, thực hiện như sau: int keyPressed = key - '4'; myMotor5-> step (180, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor5-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp} if (key == '5') {// Nếu phím 5 được nhấn, thực hiện như sau: int keyPressed = key - '5'; myMotor4-> step (6900, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor4-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp} if (key == '6') {// Nếu phím 6 được nhấn, thực hiện như sau: int keyPressed = key - '6'; myMotor3-> step (400, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor3-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp} if (key == '7') {// Nếu phím 7 được nhấn, thực hiện như sau: int keyPressed = key - '7'; myMotor7-> step (400, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor7-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp} if (key == '8') {// Nếu phím 8 được nhấn, thực hiện như sau: int keyPressed = key - '8'; myMotor8-> step (400, FORWARD, DOUBLE); // Khởi động động cơ và quay 350 độ theo hướng về phía trước. myMotor8-> release (); // Giải phóng động cơ khỏi trạng thái tự giữ nguyên vị trí. trở lại; // Quay lại phần đầu của mã vòng lặp}}}}}} >>

Đề xuất: