THIẾT KẾ, CHẾ TẠO MÔ HÌNH MÁY BÁN BIA TỰ ĐỘNG DÙNG THẺ RFID

120 105 0
  • Loading ...
    Loading ...
    Loading ...

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Tài liệu liên quan

Thông tin tài liệu

Ngày đăng: 26/09/2019, 20:51

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP THIẾT KẾ, CHẾ TẠO MƠ HÌNH MÁY BÁN BIA TỰ ĐỘNG DÙNG THẺ RFID Họ Và Tên Sinh Viên: PHẠM HOÀNG THÂN BÙI ĐỨC PHƯƠNG Ngành: CƠ ĐIỆN TỬ Niên khóa: 2014-2018 Tháng 06/2018 THIẾT KẾ, CHẾ TẠO MƠ HÌNH MÁY BÁN BIA TỰ ĐỘNG DÙNG THẺ RFID Tác giả PHẠM HỒNG THÂN BÙI ĐỨC PHƯƠNG i Khóa luận đệ trình để đáp ứng yêu cầu cấp Kỹ sư ngành Cơ điện tử Giảng viên hướng dẫn Th.s NGUYỄN ĐĂNG KHOA Tháng 06 năm 2018 CẢM TẠ Để hồn thành Khóa Luận Tốt Nghiệp nhóm nhận nhiều hỗ trợ, động viên giúp đỡ từ quý thầy cô bạn bè Nhóm xin gửi lời cảm ơn chân thành đến với: Quý Thầy cô trường Đại Học Nông Lâm Thành ph ố Hồ Chí Minh, đ ặc bi ệt thầy cô Bộ môn điện tử truyền đạt cho nhi ều ki ến th ức kinh nghiệm quý báu suốt trình học tập trường Thầy Nguyễn Đăng Khoa hướng dẫn, động viên dẫn tận tình suốt trình thực đề tài Tập thể l ớp DH1 4CD giúp đỡ, hỗ trợ chia sẻ suốt thời gian học tập thực đề tài Xin chân thành cảm ơn! ii Thành phố Hồ Chí Minh, Tháng 06 năm 2018 Sinh viên thực PHẠM HỒNG THÂN BÙI ĐỨC PHƯƠNG ii TĨM TẮT Việt Nam nước tiêu thụ bia đứng thứ Châu Á, hi ện h ầu h ết nhà hàng, nhà ăn hay hội chợ thương mại b ố trí máy bán bia đ ể phục vụ nhu cầu khách hàng.Tuy nhiên máy bán bia có đ ặc ểm chung kích thước lớn cồng kềnh chiếm nhi ều di ện tích, vi ệc mua bán ph ải có nhân viên túc trực, việc tốn nhiều thời gian Do m ột v ấn đ ề đặt chế tạo máy bán bia hoạt động tự đ ộng đ ể ti ết ki ệm chi phí thời gian, đạt hiệu kinh doanh tốt Đề tài: “ Thiết kế, chế tạo mơ hình máy bán bia tự động dung thẻ RFID ” Khoa Cơ Khí – Cơng Nghệ Trường Đại Học Nông Lâm TP.HCM đề xuất thực để khắc phục nhược điểm mà máy bán bia có thị trường Đề tài: “ Thiết kế, chế tạo mơ hình máy bán bia tự động dùng th ẻ RFID ” thực với nội dụng sau: - Thiết kế mơ hình máy chiết rót bia gồm: khung máy, van xả - Thiết kế mạch chương trình điều khiển + Chương trình đọc ghi thơng tin thẻ RFID + Chương trình đọc xử lý thông tin máy + Thiết kế mạch chương trình tốn tiền hàng thẻ RFID chạy máy tính Kết thu được: Mơ hình máy bán bia mạch điều khiển chương trình đọc ghi thông tin tài khoản thẻ RFID kết hợp v ới ch ương trình đ ọc x lý thông tin máy Điều khiển máy chạy mức bia 200ml, 300ml 400ml Giao diện Microsoft visual studio C# để toán tiền hàng thẻ RFID chạy máy tính iii iii iv MỤC LỤC CẢM TẠii TÓM TẮTiii MỤC LỤCiv DANH SÁC CÁC HÌNHvi Chương MỞ ĐẦU 1.1 Đặt vấn đề 1.2 Ý nghĩa khoa học thực tiễn đề tài 1.3 Mục đích đề tài Chương TỔNG QUAN 2.1 Khảo sát số máy bán bia thủ cơng nước ngồi nước 2.1.1 Một số máy bán bia thủ cơng ngồi nước: 2.1.2 Một số máy bán bia thủ công nước: 2.2 Khảo sát máy bán bia tự động nước 2.3 Tổng quan phương pháp điều khiển tự động sử dụng 2.3.1 Phương pháp điều khiển tự động dùng xử lý ảnh số 2.3.2 Phương pháp điều khiển tự động dùng mã quét QR 2.3.1 Phương pháp điều khiển tự động dùng thẻ RFID 2.4 Lý áp dụng phương pháp điều khiển tự động dùng RFID 2.5 Một số linh kiện sử dụng đề tài 2.5.1 Tổng quan vi điều khiển Arduino 2.5.2 Màn hình text LCD 20x4 2.5.3Module RFID RC522 2.5.4 Cảm biến lưu lượng nước 2.5.5 Van điện từ 24V 2.5.6 Nguồn Adapter 5V-2A 2.5.7 Nguồn Adapter 12V-2A 2.5.8 Nguồn Adapter 24V-3A 2.5.9 Module Relay 2.6 Một số máy sử dụng đề tài v 2.6.1 Bơm tăng áp mini 12V 2.7 Xây dựng mơ hình máy bán bia tự động dùng thẻ RFID v if (!_add && result > cash) result = cash; value == "0" ? result = : result = cash + ((_add - 1) * + 1) * result; String buf = ""; buf += result; if (buf.length() > 16) return false; if (buf.length() < 16) { for (byte i = buf.length(); i < 16; i++) { buf += " "; } } byte buffer[16]; buf.getBytes(buffer, 16); status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 7, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { return false; } status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(5, buffer, 16); if (status != MFRC522::STATUS_OK) { status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) return false; status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(5, buffer, 16); if (status != MFRC522::STATUS_OK) return false; } 80 7, byte _buffer[18]; byte size = sizeof(_buffer); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(5, _buffer, &size); for (byte i = 0; i < 16; i++) { if (_buffer[i] != buffer[i]) return false; } return writeKey(En_key + id_account[0] + id_account[1] + id_account[2] + id_account[3] + result + account); } void LCD_Intro() { lcd.setCursor(3, 0); lcd.print("- WELCOME TO -"); lcd.setCursor(0, 1); lcd.print("BEER VENDING MACHINE"); lcd.setCursor(0, 3); lcd.print(" By Mech-NLU 2018"); } // Hàm hiển thị thông tin máy bán String ScrollTxt(String txt) { return txt.substring(1, txt.length()) + txt.substring(0, 1); } void ScrollHelp() { static unsigned long timer_cpr = millis(); if (millis() - timer_cpr < 300) return; lcd.setCursor(0, 2); help = ScrollTxt(help); lcd.print(help.substring(0, 20)); 81 timer_cpr = millis(); } bool checkCard() { if ( !mfrc522.PICC_IsNewCardPresent()) { return false; } if ( !mfrc522.PICC_ReadCardSerial()) { return false; } MFRC522::PICC_Type piccType mfrc522.PICC_GetType(mfrc522.uid.sak); if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("This sample only works with MIFARE Classic cards.")); return false; } return true; } // Hàm kiểm tra xem thẻ có qt khơng void SerialOut(byte *buffer, byte sizebuffer) { for (byte i = 0; i < sizebuffer; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } Serial.println(); } void pulseCounter() { 82 = // Đếm xung cảm biến lưu lượng pulseCount++; }  Code điểu khiển Arduino đọc ghi liệu vào thẻ RFID /* Danh sách thư viện sử dụng chương trình */ #include #include #include #include /* Khởi tạo RFID RC522 */ constexpr uint8_t RST_PIN = D3; // Chân reset RC522 constexpr uint8_t SS_PIN = D8; // Chân SDA RC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Khởi tạo biến điều khiển RC522 MFRC522::MIFARE_Key key; MFRC522::StatusCode status; /* Khởi tạo bộ tạo mã bảo mật */ MD5Builder md5; /* Danh sách biến toàn cục */ // Key bảo mật String En_key = "KeyBaoMatChiNguoiLapTrinhBiet"; // Biến mảng lưu ID thẻ byte id_account[4]; // Biến lưu tên khách hàng thẻ quét String account; 83 // Biến lưu giá trị số tiền có thẻ (số tiền lớn 0) unsigned long cash; // Biến kiểm tra thẻ có đặt khay khơng bool Error = true, CARD = false; String s = ""; void setup() { // Thiết đặt ban đầu chương trình Serial.begin(115200); // Dùng giao tiếp Serial để gửi nhận thông tin PC SPI.begin(); // Khởi tạo gia tiếp SPI mfrc522.PCD_Init(); // Init MFRC522 for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } } bool checkCard() { if ( !mfrc522.PICC_IsNewCardPresent()) { return false; } if ( !mfrc522.PICC_ReadCardSerial()) { return false; } MFRC522::PICC_Type piccType mfrc522.PICC_GetType(mfrc522.uid.sak); if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { 84 = Serial.println(F("This sample only works with MIFARE Classic cards.")); return false; } return true; } void OldCard() { Serial.print("ID:"); SerialOut(id_account, 4); Serial.print("AC:"); Serial.println(account); Serial.print("CA:"); Serial.println(cash); } void NewCard() { Serial.println("NODEFINE"); } void loop() { if (Error) { Error = !checkCard(); if (!Error) { if (!CARD) { CARD = true; Serial.println("DETECTED"); if (ReadCard()) { OldCard(); } else { NewCard(); } } 85 } } status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Error = true; } if (Error) { if (CARD) { Serial.println("REMOVED"); CARD = false; } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } else { if (Serial.available()) { char c = Serial.read(); if (c != '\n') { s.concat(c); } else { if (!ParseLine(s)) { Serial.println("ERROR"); } else { Serial.println("OK"); } s = ""; } } 86 7, } } bool ParseLine(String s) { Serial.println(s); String key = s.substring(0, 5); String value = s.substring(6); key.toUpperCase(); bool result = false; key == "MKUID" ? result = addnew(value) : 0; // Thêm thẻ key == "RNUID" ? result = rename(value) : 0; // Đổi tên th ẻ key == "ADDMN" ? result = pmoney(value) : 0; // C ộng tr s ố ti ền vào tài khoản key == "RMUID" ? result = deluid() : 0; // Bỏ kích ho ạt th ẻ (th ẻ sử dụng máy bán hàng) key == "NWUID" ? result = pmoney("0") : 0; // Reset ti ền v ề (lúc hoàn tiền khách hàng mà khách muốn giữ thẻ) ReadCard(); OldCard(); return result; } // Hàm thêm thông tin vào thẻ trắng để thẻ sử dụng bool addnew(String name) { if (!rename(name)) return false; return pmoney("0"); } // Hàm sửa thông tin (tên) thẻ bool rename(String name) { 87 if (name.length() > 16) return false; if (name.length() < 16) { for (byte i = name.length(); i < 16; i++) { name += " "; } } byte buffer[16]; name.getBytes(buffer, 16); status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 7, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { return false; } status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(4, buffer, 16); if (status != MFRC522::STATUS_OK) { status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, 7, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) return false; status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(4, buffer, 16); if (status != MFRC522::STATUS_OK) return false; } byte _buffer[18]; byte size = sizeof(_buffer); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(4, _buffer, &size); for (byte i = 0; i < 16; i++) { 88 if (_buffer[i] != buffer[i]) return false; } account = name; return writeKey(En_key + id_account[0] + id_account[1] + id_account[2] + id_account[3] + cash + account); } // Hàm cộng (trừ) tiền thẻ bool pmoney(String value) { bool _add = value.substring(0, 1) != "-"; value.replace("-", ""); unsigned long result = 0; for (int i = 0; value[i] != '\0'; ++i) result = result * 10 + value[i] - '0'; if (!_add && result > cash) result = cash; value == "0" ? result = : result = cash + ((_add - 1) * + 1) * result; String buf = ""; buf += result; if (buf.length() > 16) return false; if (buf.length() < 16) { for (byte i = buf.length(); i < 16; i++) { buf += " "; } } byte buffer[16]; buf.getBytes(buffer, 16); 89 status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 7, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { return false; } status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(5, buffer, 16); if (status != MFRC522::STATUS_OK) { status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, 7, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) return false; status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(5, buffer, 16); if (status != MFRC522::STATUS_OK) return false; } byte _buffer[18]; byte size = sizeof(_buffer); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(5, _buffer, &size); for (byte i = 0; i < 16; i++) { if (_buffer[i] != buffer[i]) return false; } return writeKey(En_key + id_account[0] + id_account[1] + id_account[2] + id_account[3] + result + account); } // Hàm bỏ kích hoạt thẻ nhằm thu hồi tái sử dụng thẻ với thông tin bool deluid() { 90 if (!rename("")) return false; if (!pmoney("0")) return false; return writeKey("Block"); } void SerialOut(byte * buffer, byte sizebuffer) { for (byte i = 0; i < sizebuffer; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } Serial.println(); } bool writeKey(String code) { md5.begin(); md5.add(code); md5.calculate(); uint8_t buffer[16]; md5.getBytes(buffer); status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { return false; } status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(6, buffer, 16); 91 7, if (status != MFRC522::STATUS_OK) { status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, 7, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) return false; status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(6, buffer, 16); if (status != MFRC522::STATUS_OK) return false; } byte _buffer[18]; byte size = sizeof(_buffer); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(6, _buffer, &size); for (byte i = 0; i < 16; i++) { if (_buffer[i] != buffer[i]) return false; } return true; } bool ReadCard() { MFRC522::PICC_Type piccType mfrc522.PICC_GetType(mfrc522.uid.sak); if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println("The Khong Hop Le"); return false; } byte *uid = mfrc522.uid.uidByte; id_account[0] = uid[0]; 92 = id_account[1] = uid[1]; id_account[2] = uid[2]; id_account[3] = uid[3]; byte buffer[18]; byte size = sizeof(buffer); mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 7, &key, &(mfrc522.uid)); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(4, buffer, &size); if (status != MFRC522::STATUS_OK) return false; account = ""; for (byte i = 0; i < 16; i++) { if (buffer[i] == 0) account += char(32); else account += char(buffer[i]); } byte buffer2[18]; byte size2 = sizeof(buffer2); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(5, buffer2, &size2); if (status != MFRC522::STATUS_OK) return false; String buf = ""; for (byte i = 0; i < 16; i++) { buf += char(buffer2[i]); } buf.replace(" ", ""); long result = 0; for (int i = 0; buf[i] != '\0'; ++i) result = result * 10 + buf[i] - '0'; cash = result; if (PassCard()) { 93 return true; } else { return false; } } bool PassCard() { String temp = En_key + id_account[0] + id_account[1] + id_account[2] + id_account[3] + cash + account; md5.begin(); md5.add(temp); md5.calculate(); uint8_t buffer[16]; md5.getBytes(buffer); byte _buffer[18]; byte size = sizeof(_buffer); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(6, _buffer, &size); for (byte i = 0; i < 16; i++) { if (_buffer[i] != buffer[i]) return false; } return true; } 94 ... Mơ hình 3D máy bán bia tự động dùng RFID .24 Hình 2.24: Hình ảnh thực tế máy bán bia tự động dùng RFID 24 Hình 2.25: Cấu tạo máy bán bia tự động 24 Hình 2.26: Kích thước thân máy. .. Hình 2.5 : Máy bán bia tươi tự động Shinbashi Hình 2.6: Máy bán bia dùng thẻ RFID .7 Hình 2.7: Máy bán hàng tự động V720.10 .8 Hình 2.8: Máy bán hàng tự động dùng. .. 2.6 Một số máy sử dụng đề tài v 2.6.1 Bơm tăng áp mini 12V 2.7 Xây dựng mô hình máy bán bia tự động dùng thẻ RFID v 2.8 Cấu tạo máy bán bia tự động 2.9 Nguyên lý hoạt động 2.10 Thiết kế, thi công
- Xem thêm -

Xem thêm: THIẾT KẾ, CHẾ TẠO MÔ HÌNH MÁY BÁN BIA TỰ ĐỘNG DÙNG THẺ RFID, THIẾT KẾ, CHẾ TẠO MÔ HÌNH MÁY BÁN BIA TỰ ĐỘNG DÙNG THẺ RFID, 1 Khảo sát một số máy bán bia thủ công trong nước và ngoài nước, 2 Khảo sát máy bán bia tự động trong và ngoài nước, Hình 2.13: Sơ đồ nối chân để điều khiển LCD, 10 Thiết kế, thi công chi tiết các bộ phận máy bán bia tự động, Thiết kế giao diện bán hàng trên máy tính, 2 Phương pháp nghiên cứu, KẾT QUẢ VÀ THẢO LUẬN, 2 Thiết kế bộ điều khiển RFID cho máy bán bia, 4 Tính toán, thiết kế và chế tạo hộp điều khiển trên máy bán bia, 7 Quy trình mua bia trên máy bán bia tự động, 8 Kết quả thực nghiệm, TÀI LIỆU THAM KHẢO

Từ khóa liên quan

Mục lục

Xem thêm