Mục lục:
- Bước 1: Cách thức hoạt động
- Bước 2: Các thành phần
- Bước 3: Kết nối các mô-đun
- Bước 4: Mã
- Bước 5: Cơ sở dữ liệu và trang web
- Bước 6: Kiểm tra điều hướng
- Bước 7: Cuối cùng
Video: ☠WEEDINATOR☠ Phần 2: Điều hướng qua vệ tinh: 7 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
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
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
- 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
Đâ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ã
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:
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
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
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:
Ống LED bằng đá thủy tinh (WiFi được điều khiển thông qua ứng dụng điện thoại thông minh): 6 bước (có hình ảnh)
Ống LED bằng đá thủy tinh (Điều khiển WiFi thông qua ứng dụng điện thoại thông minh): Xin chào các nhà sản xuất! Trong phần hướng dẫn này, tôi sẽ chỉ cho bạn cách tạo một ống LED điều khiển bằng WiFi chứa đầy đá thủy tinh để có hiệu ứng khuếch tán đẹp mắt. Các đèn LED có thể định địa chỉ riêng và do đó có thể có một số hiệu ứng đẹp mắt trong
Điều hướng phần mềm của Raspberry Pi: Phần 1: 14 bước
Điều hướng phần mềm của Raspberry Pi: Phần 1: Trong bài học này, bạn sẽ học cách điều hướng Raspberry Pi của mình bằng giao diện dòng lệnh. Bạn sẽ tạo các thư mục, di chuyển từ thư mục này sang thư mục tiếp theo và học cách chụp ảnh màn hình để ghi lại tất cả công việc của bạn trong suốt lớp học! Tốt
Điều hướng phần mềm của Raspberry Pi: Phần 2: 10 bước
Điều hướng phần mềm của Raspberry Pi: Phần 2: Bài học này là phần tiếp theo của giáo dục dòng lệnh của bạn. Khi bạn làm việc với Raspberry Pi, chắc chắn bạn sẽ cài đặt phần mềm mới để tìm hiểu, dùng thử và sáng tạo. Trong bài học này, bạn sẽ học cách cài đặt các gói phần mềm và h
ESP8266 RGB LED STRIP Điều khiển WIFI - NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi - Điều khiển điện thoại thông minh RGB LED STRIP: 4 bước
ESP8266 RGB LED STRIP Điều khiển WIFI | NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi | Điều khiển bằng điện thoại thông minh RGB LED STRIP: Xin chào các bạn trong hướng dẫn này, chúng ta sẽ học cách sử dụng gật đầu hoặc esp8266 làm điều khiển từ xa IR để điều khiển dải LED RGB và Nodemcu sẽ được điều khiển bằng điện thoại thông minh qua wifi. Vì vậy, về cơ bản bạn có thể điều khiển DÂY CHUYỀN LED RGB bằng điện thoại thông minh của mình
Sử dụng PSP làm cần điều khiển máy tính và sau đó điều khiển máy tính của bạn bằng PSP: 5 bước (với Hình ảnh)
Sử dụng PSP làm cần điều khiển máy tính và sau đó điều khiển máy tính của bạn bằng PSP: Bạn có thể làm nhiều điều thú vị với PSP homebrew và trong bài viết có hướng dẫn này, tôi sẽ hướng dẫn bạn cách sử dụng PSP làm cần điều khiển để chơi trò chơi, nhưng cũng có một chương trình cho phép bạn sử dụng cần điều khiển làm chuột của mình. Đây là trường cũ