Mục lục:

CleanBot của Guillaume Meurillon: 8 bước
CleanBot của Guillaume Meurillon: 8 bước

Video: CleanBot của Guillaume Meurillon: 8 bước

Video: CleanBot của Guillaume Meurillon: 8 bước
Video: Демо-день #osoc20 | Открытое лето кода 2020 2024, Tháng mười một
Anonim
CleanBot của Guillaume Meurillon
CleanBot của Guillaume Meurillon
CleanBot của Guillaume Meurillon
CleanBot của Guillaume Meurillon

Đây là hướng dẫn cho một dự án tôi đã thực hiện cho trường học. Mục đích là tạo ra một thiết bị Raspberry Pi được kết nối với internet, đồng thời thu thập dữ liệu từ các cảm biến. Dữ liệu này phải được lưu trữ trong cơ sở dữ liệu (MySQL). Dữ liệu phải được hiển thị bằng một trang web, được mã hóa bằng Python với gói ứng dụng web Flask và tạo khuôn mẫu Jinja2.

Ý tưởng của tôi là tạo ra một chân không rô bốt 'bị tấn công', sử dụng Raspberry Pi, Arduino, chân không rô bốt đã bị hỏng và một loạt các cảm biến.

Bước 1: Thu thập các bộ phận

Thu thập các bộ phận
Thu thập các bộ phận
Thu thập các bộ phận
Thu thập các bộ phận
Thu thập các bộ phận
Thu thập các bộ phận
Thu thập các bộ phận
Thu thập các bộ phận

Trước khi thực sự tạo ra bất cứ thứ gì, tôi đã nghiên cứu rất nhiều về những phần sẽ sử dụng, cách kết nối chúng, viết các lớp phần mềm bằng Python, v.v.

Danh sách các bộ phận sẽ được bao gồm dưới dạng tệp, do đó bạn có thể dễ dàng tìm kiếm các bộ phận bạn sẽ cần.

Tôi đã quyết định sử dụng Arduino Uno bên cạnh Raspberry Pi để tôi có thể đọc hiệu quả các cảm biến của mình mà không cần nhấn mạnh đến Raspberry Pi của mình. Tôi cũng chọn Uno vì nó có tốc độ đồng hồ đẹp, và vì các chân analog. Tôi có thể đã sử dụng ADC (ví dụ: MCP3008) cho Raspberry Pi của mình, nhưng tôi sẽ cần nhiều dây hơn, nó sẽ đắt hơn và Pi của tôi sẽ phải làm việc vất vả hơn rất nhiều.

Sau đó, tôi bắt đầu kiểm tra các bộ phận có thể sử dụng được từ chân không robot bị hỏng. Các thiết bị điện tử bên trong bị hư hỏng, nhưng điều đó không có vấn đề gì, bởi vì tôi sẽ thay thế hoàn toàn những thứ đó. May mắn thay, các động cơ một chiều vẫn hoạt động, vì vậy không có động cơ nào trong số đó phải được thay thế.

Danh sách các bộ phận:

  • Raspberry Pi 3 với ít nhất 8GB MicroSD lớp 10 và một hộp đựng;
  • Raspberry Pi T-cobbler và (các) breadboard;
  • Arduino Uno hoặc tương tự (tốt hơn là phiên bản không phải của Trung Quốc với ADC tốt, một số Trung Quốc có vấn đề về AREF) với một số loại trường hợp;
  • Một cáp ethernet;
  • Một (hỏng) robot chân không;
  • 3x mô-đun siêu âm HC-SR04;
  • 1x mô-đun cảm biến hội trường;
  • Một số điện trở ở các giá trị khác nhau;
  • Một LDR;
  • 6x 18650 pin Li-ion + giá đỡ 3-cell cho 12v (tốt hơn là bạn nên sử dụng pin mới hoặc thậm chí tốt hơn nên sử dụng pin LiPo, chúng sẽ tồn tại lâu hơn);
  • 18650 (hoặc bất kỳ loại pin nào bạn sẽ sử dụng) 12v 3-cell sạc pcb;
  • Một số bo mạch tự làm PCB để hàn các thành phần của bạn;
  • Một tấm nhựa polyurethane;
  • Một máy tính xách tay / máy tính để bàn.

Danh sách công cụ:

  • Một mũi khoan với nhiều mũi khoan;
  • Một máy mài góc (không sử dụng nó nếu bạn không có kinh nghiệm) hoặc một cái gì đó như Dremel;
  • Một mảnh giấy nhám;
  • Một số tua vít;
  • Superglue, keo gắn kết,…;
  • Mỏ hàn (sử dụng mỡ để hàn dây dễ dàng hơn);
  • Một cặp máy cắt dây và một công cụ tuốt.

Danh sách phần mềm (tùy chọn):

  • Adobe XD: tạo khung dây và tạo mẫu thử nghiệm;
  • Fritzing: tạo sơ đồ điện;
  • PyCharm Professional: Python IDE với khả năng sử dụng trình thông dịch từ xa & triển khai;
  • Putty: kết nối ssh nhanh chóng và dễ dàng với Pi;
  • Etcher.io: công cụ dễ dàng để flash hình ảnh Raspbian vào thẻ SD;
  • Win32DiskImager: công cụ dễ dàng để tạo hình ảnh từ thiết lập Raspbian hiện có;
  • Lập trình viên Notepad: công cụ đơn giản bạn có thể sử dụng để chỉnh sửa tệp /boot/cmdline.txt một cách an toàn.

Bước 2: Phun sơn & thiết kế giao diện

Phun sơn & thiết kế giao diện
Phun sơn & thiết kế giao diện
Phun sơn & thiết kế giao diện
Phun sơn & thiết kế giao diện
Phun sơn & thiết kế giao diện
Phun sơn & thiết kế giao diện
Phun sơn & thiết kế giao diện
Phun sơn & thiết kế giao diện

Trước khi bắt đầu tạo thiết kế, tôi đã phun sơn bên ngoài, bởi vì tôi không thích màu sắc nào cả. Tôi đến cửa hàng và chọn một lớp sơn lót bằng nhựa, một lon màu trắng và một lon màu xanh ngọc để sơn lại phần vỏ trên.

Sau khi để sơn phun khô, tôi tra cứu mã màu hex chính xác cho loại sơn mà tôi đã sử dụng, để có thể khớp giao diện web với thiết bị của mình một cách hoàn hảo. Tìm mã hex này khá dễ dàng, vì tôi đã sử dụng Montana 94 graffiti và mã hex & RGB có trên trang web của họ.

Tôi đã tạo khung dây có độ trung thực cao cho mọi trang trên trang web của mình, vì vậy tôi hoàn toàn biết rõ mình sẽ tạo giao diện này như thế nào. Sau khi cho giáo viên xem giao diện của mình, tôi đã nhận được lời khuyên là làm cho nền xám hơn một chút và các nút màu trắng, và kết quả là tốt theo ý kiến của tôi.

Bước 3: Tạo cơ sở dữ liệu

Tạo cơ sở dữ liệu
Tạo cơ sở dữ liệu

Bước hợp lý tiếp theo là bắt đầu suy nghĩ về dữ liệu tôi muốn lưu trữ trong cơ sở dữ liệu MySQL. Không có quá nhiều người muốn biết về chân không của họ, vì vậy tôi đã xem xét các bảng cho người dùng và dữ liệu đăng nhập của họ, cũng như các bảng cho cảm biến (pin, khoảng cách và hộp chứa bụi).

Hình ảnh cho bạn thấy bố cục các bảng của tôi, được vẽ trong MySQL Workbench, với tất cả các mối quan hệ giữa các bảng.

Đối với người dùng của tôi, tôi muốn theo dõi tên và họ của họ để cá nhân hóa giao diện và email. Tất nhiên để gửi e-mail, tôi cũng cần địa chỉ e-mail của họ. Tôi cũng thêm một bảng để theo dõi về sở thích e-mail của người dùng của tôi (cho dù họ có muốn nhận email hay không). Điều cuối cùng tôi muốn lưu trữ về người dùng, đó là vai trò của họ đối với thiết bị. Tôi phân chia người dùng là quản trị viên & người dùng bình thường. Quản trị viên có quyền thêm, bớt & quản lý người dùng trong hệ thống, trong khi người dùng bình thường không thể truy cập vào các công cụ này.

Bảng tiếp theo chứa "deviceruns", là những lần chạy thực tế mà thiết bị đã thực hiện. Các deviceruns được sở hữu bởi một người dùng nhất định (người bắt đầu chạy) và có thời gian bắt đầu và thời gian kết thúc, để tính toán thời gian chạy.

Một bảng khác được sử dụng để liên kết các sensordata với mỗi devicerun. Bản thân các cảm biến được lưu trữ trong một bảng khác, chứa id, tên và mô tả của chúng.

Bước 4: Kết nối các bộ phận với nhau

Kết nối các bộ phận với nhau
Kết nối các bộ phận với nhau
Kết nối các bộ phận với nhau
Kết nối các bộ phận với nhau

Sau khi tạo sơ đồ cơ sở dữ liệu, tôi bắt đầu sử dụng breadboards & wiring để kết nối tất cả các bộ phận với nhau trong một nguyên mẫu hoạt động.

Bước 5: Thiết lập Raspberry Pi

Thiết lập Raspberry Pi
Thiết lập Raspberry Pi

Để tải xuống hình ảnh mới nhất của Raspbian, hãy truy cập trang web Raspbian. Tại đây bạn có thể chọn bản phân phối mà bạn muốn tải xuống. Để hoạt động nhanh hơn, bạn có thể tải xuống bản phân phối không đầu, để sử dụng ít RAM hơn hoặc tải xuống máy tính để bàn với GUI nếu bạn thích giao diện người dùng đồ họa.

Để cài đặt hệ điều hành, chỉ cần tải xuống Etcher, đây là một công cụ GUI để ghi hình ảnh vào thẻ micro SD của bạn một cách nhanh chóng và dễ dàng.

Để bật chế độ không đầu, để bạn có thể truy cập số pi, bạn sẽ cần cài đặt Putty trên máy tính của mình. Bước tiếp theo là truy cập thư mục Boot được tạo bởi Etcher và mở tệp cmdline.txt bằng trình soạn thảo văn bản yêu thích của bạn, ví dụ như Programmers Notepad. Thêm văn bản này vào cuối tệp:

ip = 169,254.10,1

Chỉ cần đảm bảo rằng bạn không tạo một dòng mới, hãy thêm dòng này vào cuối dòng!

Tiếp theo, quay lại thư mục gốc của thư mục Boot và tạo một tệp có tên ssh. Không thêm bất kỳ phần mở rộng nào, điều này sẽ đảm bảo rằng máy chủ SSH khởi chạy mỗi khi Pi của bạn khởi chạy. Bây giờ chỉ cần đặt thẻ SD vào Pi của bạn, kết nối nguồn điện đủ với Pi của bạn và thêm cáp ethernet giữa Pi và máy tính của bạn.

Mở putty và nhập địa chỉ IP: 169.254.10.1. Bây giờ hãy nhấp vào CÓ và đăng nhập, tên người dùng mặc định là pi và mật khẩu là mâm xôi.

Tiếp theo, thực hiện lệnh sau để cập nhật:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

Bước cuối cùng là tạo một trình thông dịch Python ảo trên Raspberry Pi của bạn, điều này sẽ thực thi mã của bạn. Để làm điều này, chỉ cần mở putty và gõ như sau:

sudo mkdir project1

cd project1 python3 -m pip install - nâng cấp pip setuptools wheel virtualenv python3 -m venv --system-site-package venv

Bước 6: Viết ứng dụng Web

Viết ứng dụng web
Viết ứng dụng web

Sau khi kết nối mọi phần và thiết lập Raspberry Pi, tôi bắt đầu viết ứng dụng web chính của mình bằng Flask và Jinja2. Flask là một khung phụ trợ dễ sử dụng cho Python và Jinja2 là ngôn ngữ tạo mẫu mà tôi đã sử dụng. Với Jinja, bạn có thể tạo các tệp HTML bình thường với các cấu trúc vòng lặp for, if, v.v.

Trong khi viết mã chương trình phụ trợ, tôi cũng đã viết giao diện người dùng cho ứng dụng, bao gồm HTML, CSS và JavaScript cho một số phần tử. Tôi đã sử dụng phương pháp ITCSS và ký hiệu BEM cho các bảng định kiểu của mình.

Ngoài ứng dụng web chính, tôi còn tạo 2 chương trình chính khác. Một được viết để gửi địa chỉ IP của thiết bị cho những người dùng trong danh sách. Mọi người dùng đã đăng ký đã chấp nhận nhận email, sẽ nhận được một email có liên kết để bắt đầu giao diện web. Chương trình này chạy như một dịch vụ systemd.

Tệp chính khác dành cho thiết bị thực tế. Main này có thể gọi được thông qua ứng dụng Flask của tôi, để khởi động và dừng thiết bị cũng như thu thập dữ liệu. Dữ liệu thu thập được cũng được tải lên cơ sở dữ liệu của thiết bị thông qua main này. Dữ liệu này sau đó có thể được hiển thị trong ứng dụng web.

Ứng dụng web được kết nối với thiết bị chạy chính bằng Python Threading. Khi người dùng nhấp vào nút bắt đầu, một chuỗi sẽ được tạo để chạy thiết bị trong nền. Trong khi đó, người dùng hoàn toàn có thể duyệt qua ứng dụng. Khi nhấp vào dừng, luồng này bị dừng và do đó thiết bị dừng lại.

Bước 7: Tạo các mảnh để hoàn thiện vỏ bọc

Tạo các mảnh để hoàn thiện vỏ bọc
Tạo các mảnh để hoàn thiện vỏ bọc
Tạo các mảnh để hoàn thiện vỏ bọc
Tạo các mảnh để hoàn thiện vỏ bọc
Tạo các mảnh để hoàn thiện vỏ bọc
Tạo các mảnh để hoàn thiện vỏ bọc
Tạo các mảnh để hoàn thiện vỏ bọc
Tạo các mảnh để hoàn thiện vỏ bọc

Sau khi viết phần lớn nhất của ứng dụng, tôi bắt đầu sửa đổi vỏ thiết bị để các cảm biến và các bộ phận khác của tôi thực sự phù hợp. Để làm được điều này, tôi đã mua một tấm polyurethane ở một cửa hàng DIY ở địa phương và bắt đầu cắt 2 dấu ngoặc. Tôi đã sử dụng tấm polyurethane này vì nó không có khả năng bị vỡ thành nhiều mảnh trong khi cắt, và vì nó khá linh hoạt, điều này hoàn hảo vì robot của tôi có hình tròn.

Giá đỡ đầu tiên được làm để lấp đầy một lỗ trên đỉnh, nơi dùng để đặt màn hình. Tôi đã thay thế màn hình bằng công tắc bật / tắt để có thể thực sự tắt pin.

Giá đỡ còn lại là giá đỡ cho cảm biến siêu âm HC-SR04 của tôi được đặt ở phía trước của thiết bị.

Điều cuối cùng còn lại phải làm là khoét một lỗ trên phần gia cố của một trong các bánh xe và chèn một nam châm để tôi có thể theo dõi chuyển động quay của bánh xe.

Sau khi hoàn thành các giá đỡ này, tôi cũng phun sơn chúng bằng lớp sơn mà tôi đã để lại, để làm cho nó phù hợp với thiết kế.

Bước 8: Mã

Để cài đặt chương trình, hãy tải xuống tệp code.zip và giải nén nó trong thư mục project1.

Tiếp theo, thực hiện lệnh này trong một thiết bị đầu cuối trên Raspbian hoặc Putty:

sudo cp project1 / conf / project-1 * / etc / systemd / system /

sudo cp project1 / conf / project1- * / etc / systemd / system / sudo systemctl daemon-reload sudo systemctl enable project-1 * sudo systemctl enable project1 * sudo systemctl restart nginx

Tiếp theo, mở cơ sở dữ liệu bạn đã tạo và tạo người dùng mới với mật khẩu băm Argon2. Bây giờ bạn có thể sử dụng chương trình.

Thưởng thức!

Đề xuất: