Mục lục:

Xây dựng Robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi: 15 bước (có hình ảnh)
Xây dựng Robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi: 15 bước (có hình ảnh)

Video: Xây dựng Robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi: 15 bước (có hình ảnh)

Video: Xây dựng Robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi: 15 bước (có hình ảnh)
Video: Raspberry Pi: Mở hộp và tìm hiểu phần cứng 2024, Tháng bảy
Anonim
Xây dựng robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi
Xây dựng robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi
Xây dựng robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi
Xây dựng robot phát video được điều khiển trên Internet của bạn với Arduino và Raspberry Pi
Xây dựng robot phát video trực tuyến được điều khiển trên Internet của bạn với Arduino và Raspberry Pi
Xây dựng robot phát video trực tuyến được điều khiển trên Internet của bạn với Arduino và Raspberry Pi

Tôi là @RedPhantom (hay còn gọi là LiquidCrystalDisplay / Itay), một học sinh 14 tuổi đến từ Israel đang học tại Trường Trung học Cơ sở Max Shein về Khoa học Nâng cao và Toán học. Tôi đang làm dự án này để mọi người học hỏi và chia sẻ!

Có thể bạn đã tự nghĩ: hmm… Tôi là một người ham hiểu biết… Và các con tôi muốn tôi thực hiện một dự án với chúng… Nó muốn chế tạo một con rô bốt. Cô muốn mặc nó như một chú cún con. Đó là một dự án cuối tuần tốt!

Raspberry Pi hoàn hảo cho mọi mục đích sử dụng: hôm nay chúng ta sẽ trình bày rõ khả năng chế tạo robot của chiếc máy tính siêu nhỏ này. Robot này có thể:

  • Lái xe xung quanh và được điều khiển qua mạng LAN (WiFi) bằng bất kỳ máy tính nào được kết nối với cùng một mạng WiFi như Raspberry Pi.
  • Phát trực tiếp video bằng Mô-đun Máy ảnh Raspberry Pi
  • Gửi dữ liệu cảm biến bằng Arduino

Để xem những gì bạn cần cho dự án ánh sáng đẹp này, chỉ cần đọc bước tiếp theo (cảnh báo) và sau đó là bước Wanted: Components.

Đây là repo GitHub: GITHUB REPO BY ME

Đây là địa điểm dự án: TRANG WEB DỰ ÁN CỦA TÔI

Bước 1: Cảnh báo: Hãy cẩn thận thử cách này tại nhà

THẬN TRỌNG:

TÁC GIẢ CỦA TÀI SẢN HƯỚNG DẪN NÀY BẠN CÓ NHỮNG KIẾN THỨC HIỆU QUẢ VỀ ĐIỆN VÀ VẬN HÀNH CƠ BẢN CỦA THIẾT BỊ ĐIỆN. NẾU BẠN KHÔNG CẨN THẬN VÀ KHÔNG LÀM THEO CÁC HƯỚNG DẪN TRONG LỜI HƯỚNG DẪN NÀY, BẠN CÓ THỂ: HẠI THIẾT BỊ ĐIỆN TỬ, HÃY BỎ LỠ CHÍNH MÌNH HOẶC Gây ra LỬA. Nếu bạn không có kiến thức cần thiết cho hướng dẫn này (hàn, kiến thức cơ bản về điện tử), vui lòng thực hiện với một cá nhân có. Cảm ơn bạn.

TÁC GIẢ CỦA HƯỚNG DẪN NÀY LOẠI BỎ BẤT KỲ TRÁCH NHIỆM NÀO TỪ CHÍNH MÌNH ĐỐI VỚI THIỆT HẠI GÂY RA HOẶC MẤT TÀI SẢN HOẶC THIỆT HẠI VẬT LÝ. SỬ DỤNG SUY NGHĨ THÔNG THƯỜNG

Bước 2: Các thành phần

Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối

Trước khi chúng tôi làm nóng Sắt hàn, chúng tôi cần phải xem xét những gì nên được kết nối với những gì. Tôi đã tạo biểu đồ đơn giản này (MS Paint không bao giờ làm tôi thất vọng) mô tả vị trí của một số bộ phận nhất định trong rô bốt.

Hình ảnh được xây dựng để bạn có thể phóng to và xem ở độ phân giải đầy đủ và đọc văn bản.

Bước 6: Địa chỉ cho Pi

Arduino nói chuyện với Pi theo kế hoạch. Và Pi nói chuyện với máy tính, vậy tất cả điều này hoạt động như thế nào?

Hãy xem Trình tự Khởi tạo Kết nối của chúng tôi:

  1. Raspberry Pi khởi động
  2. Khởi động Arduino
  3. Raspberry Pi khởi động TCP Client. Nó bắn ra địa chỉ IP của nó thông qua một đèn LED.
  4. Raspberry Pi bắt đầu dịch vụ Serial Communications và kết nối với Arduino

Do đó, chúng tôi đã thiết lập một số loại giao tiếp:

Máy tính Raspberry Pi Arduino

Tôi đã sử dụng Visual Basic. NET (Cộng đồng Microsoft Visual Studio 2013) để viết chương trình nói chuyện với Raspberry Pi và Python để viết giao thức Arduino / Raspberry Pi.

Tất cả những gì bạn cần làm để biết địa chỉ IP Pi của mình là kết nối nó với màn hình HDMI, đăng nhập vào Shell và nhập lệnh:

tên máy tôi

Bước 7: Kế hoạch

Bây giờ chúng ta đã có địa chỉ IP của Pi, chúng ta sẽ SSH vào đó (SSH là Secure Shell - chúng tôi kết nối từ xa với Linux shell) và viết một tệp hiển thị địa chỉ IP của Máy chủ. Pi, khi khởi động cũng sẽ làm như vậy và ghi cổng mà nó đang lắng nghe. Ở đây tôi sẽ chỉ đưa ra một số ví dụ từ mã nhưng nó có sẵn để tải xuống từ bước này và từ nhánh GitHub mà tôi đã tạo. Chi tiết về điều đó sau.

Nó hoạt động như vậy:

  1. RPi khởi động.
  2. RPi khởi động chương trình Tcp trên IP cục bộ của nó và một cổng được chỉ định.
  3. RPI bắt đầu phát trực tuyến video
  4. RPI tắt.

Bước 8: Đi về thể chất

Bây giờ, chúng tôi đã sẵn sàng để bắt đầu xây dựng toàn bộ về mặt vật lý. Nếu bạn chưa đọc bước 1 (văn bản cảnh báo và cấp phép), hãy làm như vậy trước khi tiếp tục. Tôi không chịu trách nhiệm cho bất kỳ thiệt hại gây ra. Và trong trường hợp có nghi ngờ, robot này không được sử dụng cho mục đích quân sự trừ khi đó là ngày tận thế của thây ma. Và thậm chí sau đó sử dụng cảm giác thông thường.

Bạn nên đọc các bài nghe hướng dẫn trong Danh sách Đọc.

Tải xuống sơ đồ kết nối từ bước "Kết nối".

ĐỘNG CƠ

Động cơ bạn đã mua có thể trông giống như thế này, và không sao cả nếu chúng không có: nếu chúng chỉ có hai dây (hầu hết các trường hợp là màu đen và đỏ) thì nó sẽ hoạt động. Tra cứu bảng dữ liệu của họ trực tuyến để xem điện áp hoạt động và dòng điện của họ. Hãy đặt câu hỏi trong phần bình luận. Tôi luôn đọc chúng.

H-CẦU

Tôi chưa bao giờ làm việc với H-Bridge trước đây. Tôi đã truy cập một chút và tìm thấy một tài liệu hướng dẫn tốt giải thích các nguyên tắc của HB. Bạn cũng có thể xem ở đó (xem bước Danh sách đọc) và kết nối của bạn nữa. Tôi sẽ không giải thích nhiều. Bạn có thể đọc ở đó và biết tất cả những gì bạn nên làm về mạch này.

DẪN ĐẾN

Lightbolb nhỏ này có thể chạy từ điện áp hợp lý chỉ vì nó gần như không cần dòng điện và điện áp 3V-5V 4mA-18mA. Không bắt buộc.

ARDUINO

Arduino sẽ nhận tín hiệu và lệnh thông qua kết nối Serial từ Raspberry Pi. Chúng tôi sử dụng Arduino để điều khiển động cơ của mình vì Raspberry Pi không thể xuất giá trị tương tự qua GPIO.

Bước 9: Tự động khởi động lại Raspberry Pi

Mỗi khi khởi động Raspberry Pi, bạn sẽ phải nhập tên người dùng và mật khẩu. Chúng tôi không muốn làm điều đó bởi vì đôi khi chúng tôi không thể kết nối bàn phím với Pi, vì vậy chúng tôi sẽ làm theo các bước sau từ hướng dẫn này để tự động khởi động chương trình chuẩn bị cho Pi. Nếu nó bị dính trong một vòng lặp, chúng ta luôn có thể Ctrl + C để ngắt nó.

  • sudo crontab -e
  • Và sau đó chúng ta sẽ nhập lệnh thêm tệp đó vào tự động phân tầng trong trình quản lý cron.

Chúng tôi sẽ gọi tệp pibot.sh sẽ cung cấp các lệnh khởi động tất cả các loại tập lệnh python để vận hành rô bốt. Hãy xem xét nó: (Chúng tôi sử dụng các chương trình Python rèm để cho phép chương trình truy cập GPIO)

raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream: /// dev / stdin --sout '#rtp {sdp = rtsp: //: 8554}': demux = h264

Mã thực hiện tất cả công việc ở phía số pi sẽ được gọi là upon_startup.sh.

Nó là một tập lệnh shell đơn giản chạy mọi thứ.

Bước 10: Houeston, Chúng tôi đã gặp vấn đề… Động cơ DC không phải là cùng một mẫu

Tôi đã thử nghiệm H-Bridge và nó hoạt động tốt, nhưng khi tôi nối các động cơ tôi lấy từ nền tảng robot, tôi đã đặt hàng trực tuyến hai động cơ đó quay với tốc độ khác nhau và tạo ra tiếng ồn khác nhau. Tôi đã thay đổi ga thành 100% trên động cơ. Cả hai đều không thể chạy hết khả năng của mình.

Có vẻ như đây là hai động cơ khác nhau. Một cái có mô-men xoắn lớn hơn, điều này rất tốt cho loại rô-bốt này nhưng cái kia sẽ không di chuyển rô-bốt. Vì vậy, nó quay trong vòng tròn.

Tại thời điểm này, những gì tôi nhận được là chương trình nối tiếp trên Arduino hoạt động hoàn toàn tốt nhưng máy chủ Tcp trên PC và Tcp Client trên Pi chưa được mã hóa. Tại tôi cần phải hoàn thành mục này cho cuộc thi. Tôi làm gì?

  1. Đầu tiên, tôi tăng gấp ba điện áp cho động cơ. Bảng dữ liệu cho biết 3V, 6V không di chuyển chúng. Khi đó nó là 9V. Tôi mắc song song hai cục pin tèo để dòng điện tăng gấp đôi và hiệu điện thế không đổi.
  2. Tôi có động cơ khác phù hợp với giá đỡ trên nền tảng không? Có lẽ tôi có thể thấy Nếu chúng là những mô hình tương tự.
  3. Tôi có thể thay thế bằng Servos nếu sô cô la thực sự đập vào người hâm mộ.

Trường học bắt đầu. Tôi sẽ phải xem phải làm gì.

Lưu ý: Tại sao tôi lại viết những vấn đề tôi gặp phải ở đây? Vì vậy, nếu bạn là người ít kinh nghiệm hơn và cũng gặp phải những vấn đề tương tự, bạn sẽ biết phải làm gì.

Giải pháp:

Vì vậy, tôi đã thực hiện một thử nghiệm khác. Tôi đã điều chỉnh sự khác biệt về tốc độ trong mã Arduino.

LƯU Ý: động cơ có thể quay với các tốc độ khác nhau cho bạn! Thay đổi các giá trị trong bản phác thảo Arduino.

Bước 11: [TCP]: Tại sao Tcp và không phải là Secure Shell? TCP là gì?

Tôi có hai giải thích tại sao sử dụng Tcp chứ không phải SSH cho P. C. - Pi giao tiếp.

  1. Thứ nhất, SSH (Secure Shell, xem Giải thích) có nghĩa là khởi chạy các lệnh từ một máy tính từ xa. Làm cho Pi phản hồi với thông tin chúng tôi muốn khó khăn hơn vì lựa chọn duy nhất của chúng tôi để phân tích dữ liệu là thông qua xử lý chuỗi khó khăn và tẻ nhạt.
  2. Thứ hai, chúng tôi đã biết cách sử dụng SSH và chúng tôi muốn tìm hiểu thêm các cách giao tiếp giữa các thiết bị trong hướng dẫn này.

TCP, hoặc Giao thức điều khiển truyền, là một giao thức cốt lõi của Bộ Giao thức Internet. Nó bắt nguồn từ việc triển khai mạng ban đầu, trong đó nó bổ sung cho Giao thức Internet (IP). Do đó, toàn bộ bộ phần mềm này thường được gọi là TCP / IP. TCP cung cấp phân phối đáng tin cậy, có thứ tự và đã được kiểm tra lỗi của một luồng octet giữa các ứng dụng chạy trên các máy chủ giao tiếp qua mạng IP.

(Từ Wikipedia)

Vì vậy, Ưu điểm của TCP là:

  • Chắc chắn
  • Nhanh
  • Hoạt động ở mọi nơi trên mạng
  • Cung cấp các phương pháp để kiểm tra việc truyền dữ liệu chính xác
  • Flow Control: có tính năng bảo vệ trong trường hợp máy gửi dữ liệu gửi dữ liệu quá nhanh khiến máy khách không thể đăng ký và xử lý.

Và khuyết điểm là:

  • Trong TCP, bạn không thể quảng bá (Gửi dữ liệu đến tất cả các thiết bị trên mạng) và phát đa hướng (giống nhau nhưng khác một chút - mang lại khả năng phát sóng cho mỗi thiết bị như một máy chủ).
  • Lỗi trong thư viện chương trình và hệ điều hành của bạn (tự quản lý giao tiếp TCP, bộ định tuyến của bạn hầu như không làm gì ngoại trừ kết nối hai [hoặc nhiều] thiết bị)

Tại sao không sử dụng UDP, bạn có thể hỏi? Không giống như TCP, UDP không đảm bảo khách hàng của bạn nhận được dữ liệu trước khi gửi thêm. Như gửi Email mà không biết khách hàng có nhận được không. Bên cạnh đó, UDP kém an toàn hơn. Để biết thêm thông tin, hãy đọc bài đăng này từ Stack Exchange Super User

Bài viết này là tốt và được khuyến khích.

Bước 12: [TCP]: Hãy tạo khách hàng

Máy khách (Raspberry Pi trong trường hợp của chúng tôi), nhận dữ liệu từ máy chủ (PC của chúng tôi trong trường hợp của chúng tôi) sẽ lấy dữ liệu để gửi đến Pi (Các lệnh nối tiếp sẽ được thực hiện trên Arduino) và nhận lại dữ liệu (Đọc cảm biến và phản hồi trực tiếp từ Arduino. Sơ đồ đính kèm cho thấy mối quan hệ giữa ba yếu tố này.

Bài báo Python Wiki TcpCommunication cho thấy rằng thật đơn giản để thực hiện giao tiếp như vậy với một vài dòng mã bằng cách sử dụng mô-đun socket tích hợp. Chúng tôi sẽ có một chương trình trên PC và một chương trình khác trên Pi.

Chúng tôi sẽ làm việc với các ngắt. Tìm hiểu thêm trong bước Giải thích về chúng. Đọc ở đó về bộ đệm Bây giờ, chúng ta có thể đọc dữ liệu chúng ta có bằng cách sử dụng data = s.recv (BUFFER_SIZE) nhưng đó sẽ là số lượng ký tự mà chúng ta đã xác định với các vết trống. Chúng ta có thể sử dụng ngắt không? Một câu hỏi khác: bộ đệm sẽ trống hay nó sẽ đợi máy chủ gửi thêm dữ liệu trong trường hợp đó máy chủ / máy khách sẽ đưa ra ngoại lệ thời gian chờ?

Hãy giải quyết từng cái một. Trước khi chúng tôi làm như vậy, tôi đã tìm kiếm bài viết Wikipedia này liệt kê các cổng TCP và UDP đã sử dụng. Sau khi xem xét nhanh, tôi quyết định rằng dự án này sẽ giao tiếp trên cổng 12298 vì nó không được Hệ điều hành và các dịch vụ cục bộ sử dụng.

Bước 13: Dùng thử Tcp Comms của chúng tôi

Để xem liệu chúng ta có thể sử dụng ngắt hay không, hãy tạo một máy khách và máy chủ đơn giản bằng Dòng lệnh Python. Tôi sẽ làm như vậy theo các bước sau:

  1. Bắt đầu một chương trình gửi một văn bản qua Tcp trong một vòng lặp thông qua một cổng rèm
  2. Khởi động một chương trình khác (song song) đọc tất cả văn bản trong một vòng lặp và in ra màn hình.

Chỉ các phân đoạn của chương trình sẽ được hiển thị. Tất cả các chương trình chạy bằng Python 3. Tất cả các chương trình này làm là gửi lệnh nối tiếp từ bàn phím của người dùng PC tới Arduino thông qua Pi.

  • SBcontrolPC.py - Được chạy trên PC. Bắt đầu kết nối TCP trên địa chỉ cục bộ và trên cổng được chỉ định (Tôi sử dụng cổng 12298, hãy xem bước trước tại sao)
  • SBcontrolPi.py - Được chạy trên Pi. Đọc bộ đệm của nó cứ sau nửa giây (0,5 giây). Bắt đầu một tập lệnh shell quản lý những thứ như phát trực tuyến video, v.v.

Đề xuất: