Mục lục:

☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh: 7 bước (có hình ảnh)
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh: 7 bước (có hình ảnh)

Video: ☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh: 7 bước (có hình ảnh)

Video: ☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh: 7 bước (có hình ảnh)
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Tháng mười một
Anonim
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh
☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh

Hệ thống định vị Weedinator ra đời!

Một robot nông nghiệp lưu động có thể được điều khiển bằng điện thoại thông minh.

… Và thay vì chỉ trải qua quá trình thông thường về cách nó được kết hợp với nhau, tôi nghĩ tôi sẽ thử và giải thích cách nó thực sự hoạt động - rõ ràng không phải MỌI THỨ mà là những điều quan trọng và thú vị nhất. Xin thứ lỗi về cách chơi chữ, nhưng đó là cách dữ liệu chảy giữa các mô-đun riêng lẻ mà tôi thấy thú vị và được chia nhỏ thành mẫu số thấp nhất mà chúng tôi kết thúc bằng "bit" thực tế - số không và số một. Nếu bạn đã từng nhầm lẫn về bit, byte, ký tự và chuỗi thì bây giờ có thể là lúc bạn trở nên không phân vân? Tôi cũng sẽ thử và bỏ sử dụng một khái niệm hơi trừu tượng gọi là 'Hủy lỗi'.

Bản thân hệ thống có các tính năng:

  • GPS / GNSS: Ublox C94 M8M (Rover và cơ sở)
  • La bàn kỹ thuật số 9DOF Razor IMU MO
  • Fona 800H 2G GPRS di động
  • Màn hình TFT 2,2"
  • Arduino Due 'Master'
  • Các 'nô lệ' Arduino khác nhau.

Thật kỳ lạ, rất nhiều Sat Navs không có la bàn kỹ thuật số, có nghĩa là nếu bạn đứng yên và bị lạc, bạn phải đi bộ hoặc lái xe theo bất kỳ hướng ngẫu nhiên nào trước khi thiết bị có thể chỉ cho bạn hướng chính xác từ vệ tinh. Nếu bạn bị lạc trong một khu rừng rậm hoặc bãi đậu xe ngầm, bạn sẽ bị nhồi nhét!

Bước 1: Cách thức hoạt động

Làm thế nào nó hoạt động
Làm thế nào nó hoạt động

Hiện tại, một cặp tọa độ đơn giản được tải lên từ điện thoại thông minh hoặc máy tính, sau đó được Weedinator tải xuống. Sau đó, chúng được giải thích thành một tiêu đề theo độ và khoảng cách di chuyển bằng mm.

GPRS fona được sử dụng để truy cập cơ sở dữ liệu trực tuyến thông qua mạng di động 2G và nhận và truyền các tọa độ tới Arduino Due thông qua Arduino Nano. Due là Master và điều khiển một loạt các Arduinos khác dưới dạng các Slave thông qua I2C và các bus nối tiếp. Due có thể tương tác với dữ liệu trực tiếp từ Ublox và Razor và hiển thị tiêu đề được tính toán bởi một trong những nô lệ Arduino của nó.

Công cụ theo dõi vệ tinh Ublox đặc biệt thông minh vì nó sử dụng tính năng hủy lỗi để có được các bản sửa lỗi rất chính xác - tổng độ lệch danh nghĩa cuối cùng là khoảng 40mm. Mô-đun bao gồm một cặp giống hệt nhau, một trong số đó, 'máy quay', di chuyển với Weedinator, và mô-đun còn lại, 'đế' được cố định vào một cực ở đâu đó ngoài trời. Việc loại bỏ lỗi được thực hiện bởi cơ sở có thể đạt được một bản sửa lỗi thực sự chính xác bằng cách sử dụng một lượng lớn mẫu theo thời gian. Các mẫu này sau đó được tính trung bình để bù đắp cho các điều kiện khí quyển thay đổi. Nếu thiết bị đang di chuyển, nó rõ ràng sẽ không thể nhận được bất kỳ loại giá trị trung bình nào và sẽ hoàn toàn phụ thuộc vào môi trường thay đổi. Tuy nhiên, nếu một thiết bị tĩnh và thiết bị chuyển động hoạt động cùng nhau, miễn là chúng có thể giao tiếp với nhau, chúng có thể nhận được lợi ích của cả hai. Tại bất kỳ thời điểm nào, đơn vị cơ sở vẫn có lỗi nhưng nó cũng có một bản sửa lỗi siêu chính xác đã được tính toán trước đó để nó có thể tính toán sai số thực tế bằng cách trừ một bộ tọa độ cho một bộ tọa độ khác. Sau đó, nó sẽ gửi lỗi đã tính toán đến máy dò thông qua một liên kết vô tuyến, sau đó sẽ thêm lỗi vào tọa độ của chính nó và này trước tiên, chúng tôi có lỗi khi hủy! Trong điều kiện thực tế, loại bỏ lỗi tạo ra sự khác biệt giữa độ lệch tổng 3 mét và 40mm.

Hệ thống hoàn chỉnh trông có vẻ phức tạp, nhưng thực sự khá dễ xây dựng, có thể lỏng lẻo trên bề mặt không dẫn điện hoặc sử dụng PCB mà tôi đã thiết kế, cho phép tất cả các mô-đun được bắt vít an toàn. Sự phát triển trong tương lai được xây dựng dựa trên PCB, cho phép một loạt các Arduinos được kết hợp để điều khiển động cơ lái, chuyển động tịnh tiến và một máy CNC trên bo mạch. Điều hướng cũng sẽ được hỗ trợ bởi ít nhất một hệ thống nhận dạng đối tượng bằng cách sử dụng máy ảnh để cảm nhận các đối tượng có màu, ví dụ như quả bóng gôn huỳnh quang, được định vị cẩn thận trong một số loại lưới - Hãy xem không gian này!

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

Các thành phần
Các thành phần
Các thành phần
Các thành phần
Các thành phần
Các thành phần
  • Ublox C94 M8M (Rover và cơ sở) x 2 trong tổng số
  • La bàn kỹ thuật số 9DOF Razor IMU MO
  • Fona 800H 2G GPRS di động 1946
  • Arduino Đến hạn
  • Arduino Nano x 2 trong tổng số
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (xem các tệp Gerber đính kèm) x 2 trong tổng số
  • Điện trở không ohm 1206 SMD x 12 của
  • 1206 đèn LED x 24 trong số

Tệp PCB mở bằng phần mềm 'Design Spark'.

Bước 3: Kết nối các mô-đun

Nối dây các mô-đun
Nối dây các mô-đun

Đây là phần dễ dàng - đặc biệt dễ dàng với PCB mà tôi đã làm - chỉ cần làm theo sơ đồ trên. Cần cẩn thận để tránh đấu dây mô-đun 3v sang 5v, ngay cả trên đường nối tiếp và I2C.

Bước 4: Mã

Mã số
Mã số

Hầu hết các đoạn mã đều liên quan đến việc dữ liệu di chuyển xung quanh hệ thống một cách có trật tự và khá thường xuyên có nhu cầu chuyển đổi định dạng dữ liệu từ số nguyên sang số nổi sang chuỗi và thành ký tự, điều này có thể rất khó hiểu! Giao thức 'Serial' sẽ chỉ xử lý các ký tự và trong khi I2Giao thức C sẽ xử lý các số nguyên rất nhỏ, tôi thấy tốt hơn là chuyển chúng thành các ký tự và sau đó chuyển đổi lại thành các số nguyên ở đầu kia của đường truyền.

Bộ điều khiển Weedinator về cơ bản là một hệ thống 8 bit với rất nhiều Arduinos riêng lẻ, hoặc 'MCU's. Khi 8 bit được mô tả là các số không nhị phân thực và những bit đó có thể trông như thế này: B01100101 sẽ bằng:

(1x2) + (0x2)2+ (1x2)3+ (0x2)4+ (0x2)5+ (1x2)6+ (1x2)7+ (0x2)8 =

Giá trị chữ số thập phân 128 64 32 16 8 4 2 1
Giá trị chữ số nhị phân 0 1 1 0 0 1 0 1

= 101

Và giá trị lớn nhất có thể là 255…. Vì vậy, số nguyên tối đa 'byte' chúng ta có thể truyền qua I2C là 255, rất hạn chế!

Trên Arduino, chúng tôi có thể truyền tối đa 32 ký tự ASCII hoặc byte cùng một lúc bằng cách sử dụng I2C, hữu ích hơn nhiều và bộ ký tự bao gồm số, chữ cái và ký tự điều khiển ở định dạng 7 bit như bên dưới:

Hình ảnh
Hình ảnh

May mắn thay, trình biên dịch Arduino thực hiện tất cả công việc chuyển đổi từ ký tự sang nhị phân trong nền, nhưng nó vẫn mong đợi loại ký tự chính xác để truyền dữ liệu và nó sẽ không chấp nhận 'Chuỗi'.

Bây giờ là khi mọi thứ có thể trở nên khó hiểu. Các ký tự có thể được thể hiện dưới dạng các ký tự đơn bằng cách sử dụng định nghĩa char hoặc dưới dạng một mảng một chiều gồm 20 ký tự bằng cách sử dụng char [20]. Chuỗi Arduino rất giống với một mảng ký tự và theo nghĩa đen là một chuỗi ký tự thường được não người hiểu là 'từ'.

// Tạo ký tự 'distanceCharacter':

Chuỗi khởi tạo = ""; khoảng cáchString = bộ khởi tạo + khoảng cáchString; int n = distanceString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Đoạn mã trên có thể chuyển đổi một chuỗi ký tự dài thành một mảng ký tự mà sau đó có thể được truyền qua I2C hoặc nối tiếp.

Ở đầu kia của đường truyền, dữ liệu có thể được chuyển đổi trở lại thành một chuỗi bằng cách sử dụng mã sau:

distanceString = distanceString + c; // string = string + ký tự

Một mảng ký tự không thể được chuyển đổi trực tiếp thành một số nguyên và phải chuyển sang định dạng chuỗi trước, nhưng đoạn mã sau sẽ chuyển đổi từ một chuỗi thành một số nguyên:

int result = (distanceString).toInt ();

int distanceMetres = kết quả;

Bây giờ chúng ta có một số nguyên mà chúng ta có thể sử dụng để tính toán. Dấu phẩy (số có dấu thập phân) cần được chuyển đổi thành số nguyên ở giai đoạn truyền và sau đó chia cho 100 cho hai chữ số thập phân, ví dụ:

float distanceMetres = distanceMm / 1000;

Cuối cùng, một chuỗi có thể được tạo từ hỗn hợp các ký tự và số nguyên, ví dụ:

// Đây là nơi dữ liệu được biên dịch thành một ký tự:

dataString = khởi tạo + "GẤU" + zbiding + "DIST" + zdistance; // Giới hạn trong 32 ký tự // String = string + ký tự + intereger + ký tự + số nguyên.

Phần còn lại của mã là những thứ Arduino tiêu chuẩn có thể được tìm thấy trong các ví dụ khác nhau trong các thư viện Arduino. Xem ví dụ về 'ví dụ >>>> Chuỗi' và ví dụ về thư viện 'dây'.

Đây là toàn bộ quá trình truyền và nhận một float:

Chuyển đổi Float ➜ Integer ➜ String ➜ Character mảng….. sau đó CHUYỂN mảng ký tự từ Master ➜➜

➜➜ ĐẠT các ký tự riêng lẻ trên Slave…. sau đó chuyển đổi Ký tự ➜ Chuỗi ➜ Số nguyên ➜ Phao

Bước 5: Cơ sở dữ liệu và trang web

Cơ sở dữ liệu và trang web
Cơ sở dữ liệu và trang web
Cơ sở dữ liệu và trang web
Cơ sở dữ liệu và trang web

Trên đây là cấu trúc cơ sở dữ liệu và các tệp mã php và html được đính kèm. Tên người dùng, tên cơ sở dữ liệu, tên bảng và mật khẩu được bỏ trống để bảo mật.

Bước 6: Kiểm tra điều hướng

Kiểm tra điều hướng
Kiểm tra điều hướng
Kiểm tra điều hướng
Kiểm tra điều hướng
Kiểm tra điều hướng
Kiểm tra điều hướng

Tôi đã cố gắng kết nối một bộ ghi dữ liệu với bảng điều khiển Weedinator thông qua I2C và có được một số ý tưởng về hiệu suất định vị vệ tinh Ublox M8M:

Trên 'Cold Start', được hiển thị bằng biểu đồ màu xanh lục, mô-đun bắt đầu với rất nhiều lỗi, khá giống với GPS 'bình thường' và dần dần lỗi này giảm dần cho đến khi, sau khoảng 2 giờ, nó nhận được bản sửa lỗi RTK giữa rover và cơ sở (được hiển thị dưới dạng chữ thập đỏ). Trong khoảng thời gian 2 giờ đó, mô-đun cơ sở liên tục xây dựng và cập nhật giá trị trung bình cho vĩ độ và kinh độ và sau khoảng thời gian được lập trình trước, quyết định rằng nó đã được khắc phục tốt. 2 biểu đồ tiếp theo hiển thị hành vi sau 'Khởi động nóng 'trong đó mô-đun cơ sở đã tính toán mức trung bình tốt. Biểu đồ trên cùng trong khoảng thời gian hơn 200 phút và đôi khi bản sửa lỗi bị mất và người dẫn đường gửi thông báo NMEA đến Weedinator rằng bản sửa lỗi tạm thời không đáng tin cậy.

Biểu đồ màu xanh lam phía dưới là 'phóng to' trên hộp màu đỏ trong biểu đồ trên cùng và hiển thị ảnh chụp nhanh đại diện tốt về hiệu suất Ublox, với tổng độ lệch là 40 mm, đủ tốt để hướng dẫn Weedinator đến vị trí của nó, nhưng có thể không đủ tốt để trồng đất xung quanh từng cây?

Biểu đồ thứ ba cho thấy dữ liệu được thu thập với Rover và Base cách nhau 100 mét - Không phát hiện thêm lỗi nào - khoảng cách tách biệt không có sự khác biệt về độ chính xác.

Bước 7: Cuối cùng

Đề xuất: