ĐỒ ÁN THIẾT KẾ HỆ THỐNG QUẢN LÝ THƯ VIỆN TỰ ĐỘNG (CÓ PHẦN MỀM ĐI KÈM, VIDEO MÔ TẢ)

88 246 5
ĐỒ ÁN THIẾT KẾ HỆ THỐNG QUẢN LÝ THƯ VIỆN TỰ ĐỘNG (CÓ PHẦN MỀM ĐI KÈM, VIDEO MÔ TẢ)

Đang tải... (xem toàn văn)

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

Thông tin tài liệu

Đồ án thiết kế hệ thống quản lý thư viện tự độngVideo tham khảo: https://www.youtube.com/watch?v=4jnCLRxSjvo File tải về có đầy đủ dữ liệu để chế tạo mô hình gồm phần mềm, code, báo cáo...Nếu cần hỏi 1 vài vấn đề có thể liên hệ mail: tranhungtttbgmail.com Còn nếu hỏi nhiều, hướng dẫn chi tiết xin trả thêm chi phí hướng đẫn.

Mục Lục Lời cảm ơn i Lời cam đoan .ii Mục Lục iii Danh mục hình ảnh .vi MỞ ĐẦU 1 Tính cấp thiết đề tài Mục tiêu nghiên cứu đề tài .2 Đối tượng nghiên cứu Ý nghĩa Bố cục đề tài Chương I TỔNG QUAN TÀI LIỆU 1.1 Khái niệm quản lý thư viện .4 1.2 Giới thiệu thư viện tự động hóa Joe and Rika Mansueto 1.3 Công nghệ QR Code 1.4 Phần mền QT Creator 1.5 Phần mền Arduino IDE Chương II NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU 10 2.1 Bản vẽ mô hình 10 2.2 Các thiết bị, vật liệu sử dụng mơ hình 11 2.2.1 Raspberry pi 3B+ 11 i 2.2.2 Camera 13 2.2.3 Arduino nano 14 2.2.4 Module điều khiển động 18 2.2.5 Module điều khiển động DRV8833 .19 2.2.6 Động giảm tốc 20 2.2.7 Động servo 21 2.2.8 Cơng tắc hành trình 22 2.3 Lập trình ứng dụng cho raspberry pi QT Creator 23 2.3.1 Cài hệ điều hành cho raspberry pi .23 2.3.2 Viết ứng dụng cho raspberry pi 24 2.4 Phân tích hệ thống quản lý thư viện tự động 31 2.5 Sơ đồ nguyên lý .33 2.6 Sơ đồ điều khiển 34 2.7 Nguyên lý điều khiển .36 Chương III KẾT QUẢ VÀ THẢO LUẬN 41 3.1 Kết 41 3.1.1 Mơ hình thư viện 41 3.1.2 Phần mềm 42 3.1.3 Chạy thử mô hình .45 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 52 Kết luận 52 Kiến nghị 52 TÀI LIỆU THAM KHẢO 53 PHỤ LỤC 54 Danh mục hình ảnh Hình 1.1: Hệ thông lưu trữ truy xuất tự động lòng đất thư viện Joe and Rika Mansueto Hình 1.2: Mã QR code Hình 1.3: Giao diện phần mềm QT Creator Hình 1.4: Giao diện phần mềm arduino Hình 2.1: Bản vẽ mơ hình…………………………………………………………… 10 HÌnh 2.2: Máy tính nhúng Raspberry pi .13 Hình 2.3: Camera cho raspberry pi .14 Hình 2.4: Mạch arduino 15 Hình 2.5: Sơ đồ cổng IPSC 17 Hình 2.6: Mạch điều khiển động L298 19 Hình 2.7: Module điều khiển động DRV8833 .20 Hình 2.8: Động giảm tốc 20 Hình 2.9: Động servo .21 Hình 2.10: Cơng tắc hành trình 22 Hình 2.11: Cài hệ điều hành cho raspberry pi .23 Hình 2.12: Chọn project .24 Hình 2.13: Cài vị trí lưu project 24 Hình 2.14: Chọn trình biên dịch 25 Hình 2.15: Thiết kế giao diện .25 Hình 2.16: Viết code cho phần mềm 26 Hình 2.17: Cài đặt qt5 serial 26 Hình 2.18: Build project .27 Hình 2.19: Mở phần mềm 27 Hình 2.20: Bảng accounts 28 Hình 2.21: Bảng books .28 Hình 2.22: Bảng logs 29 Hình 2.23: Cấu trúc thư mục phần mềm .30 Hình 2.24: Sơ đồ nguyên lý 33 Hình 2.25: Sơ đồ mạch điều khiển 34 Hình 2.26: Thuật tốn điều khiển tổng .36 Hình 2.27: Thuật tốn điều khiển robot 38 Hình 3.1: Mơ hình hồn chỉnh……………………………………………………… 39 Hình 3.2: Màn hình đăng nhập 40 Hình 3.3: Thơng tin tài khoản .40 Hình 3.4: Quản lý thư viện 41 Hình 3.5: Quản lý tài khoản 41 Hình 3.6: Tủ sách người dùng 42 Hình 3.7: Thư viện sách 42 Hình 3.8: Đăng nhập vào phần mềm quản lý thư viện 43 Hình 3.9: Chọn sách cần mượn 43 Hình 3.10: Robot đến vị trí sách giá sách lấy sách 44 Hình 3.11: Đợi người dùng lấy sách 44 Hình 3.12: Hãy lấy sách khay 45 Hình 3.13: Thơng báo “bạn lấy sách” 45 Hình 3.14: Chọn sách cần trả nhấn “trả sách” 46 Hình 3.15: Đặt sách cần trả vào khay để sách 46 Hình 3.16: Camera chụp ảnh kiểm tra 47 Hình 3.17: Thơng báo sau trình kiểm tra sách 47 Hình 3.18: Robot cất sách 48 Hình 3.19: Robot lại vị trí ban đầu 48 Hình 3.20: Thông báo trả sách thành công 49 MỞ ĐẦU Tính cấp thiết đề tài Trong thời gian gần thuật ngữ “Cách mạng 4.0” dư luận xã hội quan tâm, nhắc đến nhiều Thuật ngữ xuất tin tức phóng sự, tạp chí chun ngành, chí nghiên cứu mang tính học thuật cao Trước tác động mạnh mẽ Cách mạng 4.0 có nhiều hội thảo nghiên cứu đánh giá, đặc biệt lĩnh vực thơng tin – thư viện có nhiều hội thảo gồm nhiều nghiên cứu chuyên sâu chủ đề này, kể đến như: Hội thảo Khoa học Thông tin – Thư viện: Tác động cách mạng công nghiệp 4.0 đến hoạt động thông tin – thư viện (2017), Hội thảo Tác động cách mạng công nghiệp lần thứ tới hoạt động thông tin khoa học công nghệ (2018), Hội thảo Tác động cách mạng công nghiệp lần thứ vào lĩnh vực thư viện (2019) Trong khuôn khổ đề tài muốn hướng tới giải pháp tối ưu tự động hóa lĩnh vực thơng tin - thư viện áp dụng công nghệ QR Code, hệ thống robot để đáp ứng phù hợp với cách mạng 4.0 dần rõ nét Xuất phát từ ý tưởng mang đến đại cho không gian văn hóa đọc, nơi bổ ích hấp dẫn với bạn trẻ động Thư viện Mượn Sách Tự động giúp người dùng không tốn nhiều thời gian mượn sách, xếp hàng đợi chờ đông đúc, giảm việc lệ thuộc vào người thủ thư, nên em thực đồ án “Thiết kế hệ thống quản lý thư viện tự động” hướng dẫn giảng viên xxxxxxxxxxxxx Mục tiêu nghiên cứu đề tài - Trong trình thực chuyên đề cần nắm vững kiến thức cần thiết để xây dựng mơ hình thư viện từ hệ thống điều khiển đến cấu xử lý - Phân tích làm rõ trang thư viện tự động, có phổ biến hay khơng - Mơ tả thực trạng: Tại thư viện cổ điển lại cần hệ thống tự động… - Hỗ trợ tốt cho công việc quản lý sách báo tài liệu thư viện, giúp người dùng tìm kiếm tiếp cận dễ dàng đến thư viện - Phân tích thiết kế hệ thống thư viện tự động với chức cần thiết để phục vụ cho việc mượn trả sách thư viện - Nâng cao kỹ phân tích khảo sát người dùng để đưa thay đổi để hệ thống tối ưu - Giúp cho việc quản lý thông tin tối ưu, thông báo dễ dàng thuận tiện, nhanh chóng phục vụ tốt cho thư viện Đối tượng nghiên cứu Đề tài thực Học viện Nông nghiệp Việt Nam với việc nghiên cứu chế tạo thực mơ hình quản lý thư viện tự động Ý nghĩa Theo đó, người dùng cần đăng ký tài khoản thư viện cấp nên không cần mang thẻ thư viện tiền cọc, thủ thư không cần phải luôn túc trực ghi phiếu mượn để phục vụ có người dùng Thủ thư trợ giúp người mượn sách có cố xảy Thư viện quản lý dễ dàng hơn, mở cửa 24/24 Tạo thuận tiện cho người dung, thu hút giới trẻ nhiều Từ thấy việc thiết kế “hệ thống quản lý thư viện tự động” cần thiết cho xã hội đại ngày Bố cục đề tài Gồm phần: - Phần mở đầu - Phần nội dung: + Chương I: Tổng quan tài liệu + Chương II: Phân tích thiết kế hệ thống + Chương III: Kết - Phần kết luận hướng phát triển - Phần tài liệu tham khảo - Phụ lục Chương I TỔNG QUAN TÀI LIỆU 1.1 Khái niệm quản lý thư viện Trong số tài liệu chun mơn thư viện có định nghĩa quản lý thư viện (QLTV) sau: Là tác động có chủ đích tới tập thể người lao động để tổ chức phối hợp hoạt động họ q trình thực mục đích nhiệm vụ đề QLTV dựa quyền hạn quy định với tác động tổ chức, điều hành Là hoạt động cán lãnh đạo tập thể viên chức thực cách tự giác có kế hoạch nhằm đảm bảo cho hoạt động phát triển bình thường thư viện, bao gồm: kế hoạch, tổ chức kích thích lao động, quản lý trình thư viện, thống kê kiểm tra cơng việc, công tác cán (tổ chức cán bộ) Quản lý thư viện đại Thư viện đại loại thư viện áp dụng thành tựu khoa học kỹ thuật mà cụ thể công nghệ thông tin (CNTT) Dưới tác động ứng dụng CNTT, thư viện đại có nhiều thay đổi: từ cấu tổ chức, nguồn nhân lực sở vật chất trang thiết bị Tuỳ thuộc vào mức độ ứng dụng CNTT vào hoạt động thư viện mà người ta xây dựng thư viện đại với cấp độ khác tương ứng với chúng tên gọi khác như: thư viện đa phương tiện, thư viện lai, thư viện điện tử , thư viện số, thư viện ảo… Nói cách khác, nhắc đến tên thư viện ta hiểu chúng thư viện đại Ví dụ, thư viện đa phương tiện hay thư viện lai thư viện đại mức độ sơ khai chuyển tiếp từ thư viện truyền thống sang thư viện có ứng dụng CNTT Trong thư viện vừa tồn tài liệu truyền thống vừa có dạng tài liệu đại Hay thư viện số thư viện đại cấp độ cao Trong thư viện khơng cịn tài liệu dạng truyền thống mà chúng số hoá sử dụng máy tính, phương tiện truyền thơng motor_y_Dung(); Serial.println("y xong "); delay(500); while(digitalRead(In10)==1){ motor_x_Lui(MAX_SPEED); } delay(350); motor_x_Dung(); Serial.println("x xong"); delay(500); while(digitalRead(In31)==1){ motor_z_Tien(MAX_SPEED); } motor_z_Dung(); Serial.println("Da dem sach khay"); delay(500); while(digitalRead(tiemcan)==1) delay(100); Serial.println("Nguoi dung da muon sach"); delay(500); Serial.println("180 độ"); set(1060); delay(1000); while(digitalRead(In30)==1){ motor_z_Lui(MAX_SPEED); } motor_z_Dung(); Serial.println("z xong x "); delay(100); Serial.println("180 độ"); set(2730); delay(1000); } void motor_x_Dung() { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } void motor_x_Tien(int speed) { //speed: từ - MAX_SPEED speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm khoảng từ - MAX_SPEED - http://arduino.vn/reference/constrain digitalWrite(IN1, HIGH);// chân khơng có PWM analogWrite(IN2, 255 - speed); } void motor_x_Lui(int speed) { speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm khoảng từ - MAX_SPEED - http://arduino.vn/reference/constrain digitalWrite(IN1, LOW);// chân khơng có PWM analogWrite(IN2,speed); } void motor_y_Dung() { digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); } void motor_y_Tien(int speed) { //speed: từ - MAX_SPEED speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm khoảng từ - MAX_SPEED - http://arduino.vn/reference/constrain digitalWrite(IN3, HIGH);// chân khơng có PWM analogWrite(IN4, 255 - speed); } void motor_y_Lui(int speed) { speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm khoảng từ - MAX_SPEED - http://arduino.vn/reference/constrain digitalWrite(IN3, LOW);// chân khơng có PWM analogWrite(IN4,speed); } void motor_z_Dung() { digitalWrite(IN6, LOW); digitalWrite(IN5, LOW); } void motor_z_Tien(int speed) { //speed: từ - MAX_SPEED speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm khoảng từ - MAX_SPEED - http://arduino.vn/reference/constrain digitalWrite(IN6, HIGH);// chân khơng có PWM digitalWrite(IN5, LOW); } void motor_z_Lui(int speed) { speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm khoảng từ - MAX_SPEED - http://arduino.vn/reference/constrain digitalWrite(IN6, LOW);// chân khơng có PWM digitalWrite(IN5,HIGH); } void SerialEvent() { while (Serial.available()) { // Doi den co du lieu nhan ve returned = Serial.readString(); } } // Chuong trinh ngat nhan du lieu kiện trả Code file mainwindow.ccp #include "mainwindow.h" #include "ui_mainwindow.h" QSerialPort *serial; bool connected = false; int _bookID = 0; QString _username = ""; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); OpenLoginDialog(); /** * @brief InitTabAccounts * * Thu tu la quan co the xoa bot tab thay doi chi so cua tab * Thu tu khoi tao tu tab ngoai vao tab */ InitTabAccounts(); InitTabLibrary(); InitTabDaMuon(); InitTabAccountInfo(); qDebug() open(QIODevice::ReadWrite)){ qDebug() setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); connect(serial, SIGNAL(readyRead()), SLOT(serialReceived())); serial->write("xin chao"); int countSecond = 0; while(!connected && countSecond < 3) { serial->write("xin chao"); countSecond ++; QTime dieTime= QTime::currentTime().addSecs(1); this, while (QTime::currentTime() < dieTime) QCoreApplication::processEvents(QEventLoop::AllEvent s, 100); } if (!connected) { serial->close(); } } else { qDebug() setEnabled(true); } } bufferSignal = listSignal.at(listSignal.length() - 1); } void MainWindow::on_btnBorrow_clicked() { int bookID = ui->txtBookID->text().toInt(); QString username = AppState::loginAccount->GetUsername(); _bookID = bookID; _username = username; QMessageBox msgBox; msgBox.setText("Vui lòng đợi hệ thống lấy sách cho bạn."); msgBox.exec(); std::string text = "muonsach: "; text += std::to_string(_bookID); } serial->write(text.c_str()); this->ui->centralwidget->setEnabled(false); void MainWindow::ListenReturnBook(int id) { qDebug() bookID = id; QMessageBox msgBox; msgBox.setText("Vui lòng đặt sách vào khay, đặt xong nhấn ok."); msgBox.exec(); this->ui->centralwidget->setEnabled(false); QString filename = QDir::currentPath() +"/aaa.jpg"; QProcess::execute("raspistill -o " + filename + " -w 320 -h 320 "); qDebug() setScene(scene); this->ui->bookImage->fitInView(scene->sceneRect(), Qt::KeepAspectRatio); this->ui->bookImage->show(); void MainWindow::InitTabAccounts() { if (AppState::loginAccount->GetType() != "ADMIN") { qDebug() tabWidget->removeTab(3); return; } else { qDebug() accountTableModel = new AccountTableModel(); ReloadAccountTable(); ui->tableViewAccounts->setModel(accountTableModel); } void MainWindow::InitTabAccountInfo() const { ui->lblMessage->hide(); } void MainWindow::ReloadSachDaMuonPanel() { QLayoutItem* item; while ( ( item = flowLayout->layout()->takeAt( ) ) != NULL ) { delete item->widget(); delete item; } this->ui->centralwidget->setEnabled(true); QVector books = >GetBooksByUser(AppState::loginAccount->GetUsername()); qDebug() setMinimumWidth(400); widget->setMinimumHeight(200); widget->setStyleSheet("#BookWidget { background-color: grey; }"); flowLayout->addWidget(widget); connect(widget, SIGNAL(returnBook(int)), SLOT(ListenReturnBook(int))); } } void MainWindow::InitTabDaMuon() { if (AppState::loginAccount->GetType() != "ADMIN") { qDebug() removeTab(1); return; } this->ReloadSachDaMuonPanel(); ui->scrollArea->widget()->setLayout(flowLayout); // ui->->setLayout(flowLayout); } void MainWindow::InitTabLibrary() { if (AppState::loginAccount->GetType() != "ADMIN") { qDebug() groupBoxBookManagement->hide(); this, ui->btnUploadImage->hide(); } else { ui->btnBorrow->setDisabled(true); qDebug() lblBookStatus->setText(""); ui->btnBorrow->hide(); this->bookTableModel = new BookTableModel(); ReloadBookTable(); ui->tableViewBooks->setModel(bookTableModel); } void MainWindow::OpenLoginDialog() { LoginDialog loginDialog; loginDialog.setModal(true); loginDialog.exec(); if (AppState::loginAccount ->GetUsername() != "") { Account *account = AppState::loginAccount; QString id = account ->GetID(); QString fullname = account -> GetFullname(); QString username = account -> GetUsername(); QString classname = account -> GetClassname(); } ui->lblID->setText(id); ui->lblUsername -> setText(username); ui->lblClassname -> setText(classname); qDebug() OpenLoginDialog(); } void MainWindow::on_btnChangePassword_clicked() { ui->lblMessage->show(); QString oldPassword = this->ui->txtOldPassword->text(); QString password = this->ui->txtPassword->text(); QString rePassword = this->ui->txtRePassword->text(); if (password != rePassword) { this->ui->lblMessage->setText("Mật không khớp"); return; } if (oldPassword != AppState::loginAccount->GetPassword()) { this->ui->lblMessage->setText("Mật cũ không đúng"); return; } Account *account = AppState::loginAccount; QString username = account -> GetUsername(); if (this->accountService->changePassword(username, password)) { this->ui->lblMessage->setText("Đổi mật thành cơng"); return; } else { this->ui->lblMessage->setText("Có lỗi xảy ra"); return; } } void MainWindow::on_btnOpenTabLibrary_clicked() { ui->tabWidget->setCurrentIndex(2); } void MainWindow::on_tableViewAccounts_clicked(const QModelIndex &index) { int selectedRowIndex = index.row(); Account account = accountTableModel->getAt(selectedRowIndex); ui->txtAccountID->setText(account.GetID()); ui->txtAccountPassword->setText(account.GetPassword()); ui->txtAccountType->setText(account.GetType()); ui->txtAccountUsername->setText(account.GetUsername()); ui->txtAccountClassname->setText(account.GetClassname()); ui->txtAccountFullname->setText(account.GetFullname()); } void MainWindow::on_btnAddAccount_clicked() { Account account; QString id = ui->txtAccountID->text(); QString password = ui->txtAccountPassword->text(); QString type = ui->txtAccountType->text(); QString username = ui->txtAccountUsername->text(); QString classname = ui->txtAccountClassname->text(); QString fullname = ui->txtAccountFullname->text(); account.SetID(id); account.SetPassword(password); account.SetType(type); account.SetUsername(username); account.SetClassname(classname); account.SetFullname(fullname); if (accountService->add(account) ) { qDebug() accountTableModel->append(account); } else { qDebug() txtAccountQueryString->setText(""); this->accountTableModel->clear(); QVector accounts = accountService->getAccounts(); } for (int i = 0; i < accounts.count(); i++) { accountTableModel->append(accounts[i]); } void MainWindow::ReloadBookTable() { ui->txtBookQueryString->setText(""); this->bookTableModel->clear(); QVector books = bookService->GetBooks(); for (int i = 0; i < books.count(); i++) { bookTableModel->append(books[i]); } } void MainWindow::on_btnUpdateAccount_clicked() { Account account; QString id = ui->txtAccountID->text(); QString password = ui->txtAccountPassword->text(); QString type = ui->txtAccountType->text(); QString username = ui->txtAccountUsername->text(); QString classname = ui->txtAccountClassname->text(); QString fullname = ui->txtAccountFullname->text(); account.SetID(id); account.SetPassword(password); account.SetType(type); account.SetUsername(username); account.SetClassname(classname); account.SetFullname(fullname); } if (accountService->update(account) ) { qDebug() text(); if (accountService->remove(username) ) { qDebug() accountTableModel->clear(); QVector accounts = accountService->search(queryString); for (int i = 0; i < accounts.count(); i++) { accountTableModel->append(accounts[i]); } } void MainWindow::on_btnSearchBook_clicked() { QString queryString = ui->txtBookQueryString->text(); this->bookTableModel->clear(); QVector books = bookService->SearchBooks(queryString); for (int i = 0; i < books.count(); i++) { bookTableModel->append(books[i]); } } void MainWindow::on_tableViewBooks_clicked(const QModelIndex &index) { int selectedRowIndex = index.row(); Book book = bookTableModel->getAt(selectedRowIndex); } QString bookID = QString::number(book.GetID()); ui->txtBookID->setText(bookID); ui->txtBookName->setText(book.GetName()); ui->txtBookDescription->setText(book.GetDescription()); updateImageView(book.GetImage()); if (book.GetAvailable()) { ui->lblBookStatus->setText("Có sẵn"); ui->btnBorrow->show(); } else { ui->lblBookStatus->setText("Khơng có sẵn"); ui->btnBorrow->hide(); } void MainWindow::on_btnAddBook_clicked() { Book book; int id = ui->txtBookID->text().toInt(); QString name = ui->txtBookName->text(); QString description = ui->txtBookDescription->toPlainText(); book.SetID(id); book.SetName(name); book.SetDescription(description); if (bookService->Add(book) ) { qDebug() bookTableModel->append(book); } else { qDebug() txtBookID->text().toInt(); QString name = ui->txtBookName->text(); QString description = ui->txtBookDescription->toPlainText(); book.SetID(id); book.SetName(name); book.SetDescription(description); if (bookService->Update(book)) { qDebug() text().toInt(); } if (bookService->Remove(bookID) ) { qDebug()

Ngày đăng: 20/10/2020, 15:15

Từ khóa liên quan

Mục lục

  • Mục Lục

  • Danh mục hình ảnh

  • MỞ ĐẦU

    • 1. Tính cấp thiết của đề tài

    • 2. Mục tiêu nghiên cứu của đề tài

    • 3. Đối tượng nghiên cứu

    • 4. Ý nghĩa

    • 5. Bố cục đề tài

    • Chương I. TỔNG QUAN TÀI LIỆU

      • 1.1. Khái niệm quản lý thư viện

      • 1.2. Giới thiệu thư viện tự động hóa Joe and Rika Mansueto

      • 1.3. Công nghệ QR Code

      • 1.4. Phần mền QT Creator

      • 1.5. Phần mền Arduino IDE

      • Chương II. NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

        • 2.1. Bản vẽ mô hình

        • 2.2. Các thiết bị, vật liệu sử dụng trong mô hình

          • 2.2.1. Raspberry pi 3B+

          • 2.2.2. Camera

          • 2.2.3. Arduino nano

          • 2.2.4. Module điều khiển động cơ

          • 2.2.5. Module điều khiển động cơ DRV8833

          • 2.2.6. Động cơ giảm tốc

          • 2.2.7. Động cơ servo

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan