สารบัญ:

☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม: 7 ขั้นตอน (พร้อมรูปภาพ)
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Convenience items needed in the family 2024, กรกฎาคม
Anonim
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม
☠WEEDINATOR☠ ตอนที่ 2: การนำทางด้วยดาวเทียม

ระบบนำทาง Weedinator ถือกำเนิดขึ้นแล้ว!

หุ่นยนต์เกษตรเร่ร่อนที่สามารถควบคุมได้ด้วยสมาร์ทโฟน

… และแทนที่จะทำตามขั้นตอนปกติของการรวมกัน ฉันคิดว่าฉันจะพยายามอธิบายว่ามันทำงานอย่างไร - แน่นอนว่าไม่ใช่ทุกอย่างแต่เป็นส่วนที่สำคัญและน่าสนใจที่สุด โปรดให้อภัยการเล่นสำนวน แต่เป็นวิธีที่ข้อมูลไหลระหว่างแต่ละโมดูลที่ฉันพบว่าน่าสนใจและแบ่งออกเป็นส่วนต่ำสุดที่เราลงเอยด้วย "บิต" จริง - ศูนย์และคน หากคุณเคยสับสนเกี่ยวกับบิต ไบต์ อักขระ และสตริง ตอนนี้อาจถึงเวลาที่จะไม่สับสนแล้วใช่ไหม ฉันจะพยายามแก้ความสับสนให้กับแนวคิดที่เป็นนามธรรมเล็กน้อยที่เรียกว่า 'การยกเลิกข้อผิดพลาด'

ตัวระบบเองมีคุณสมบัติ:

  • GPS/GNSS: Ublox C94 M8M (โรเวอร์และฐาน)
  • 9DOF Razor IMU MO เข็มทิศดิจิตอล
  • Fona 800H 2G GPRS เซลลูลาร์
  • หน้าจอ TFT 2.2"
  • Arduino ครบกำหนด 'ปรมาจารย์'
  • Arduino 'ทาส' ต่างๆ

น่าแปลกที่ Sat Navs จำนวนมากไม่มีเข็มทิศดิจิตอล ซึ่งหมายความว่าหากคุณอยู่นิ่งและหลงทาง คุณต้องเดินหรือขับรถไปในทิศทางใด ๆ แบบสุ่มก่อนที่อุปกรณ์จะแสดงทิศทางที่ถูกต้องจากดาวเทียม หากคุณหลงทางอยู่ในป่าทึบหรือที่จอดรถใต้ดิน แสดงว่าคุณเต็มแล้ว!

ขั้นตอนที่ 1: มันทำงานอย่างไร

มันทำงานอย่างไร
มันทำงานอย่างไร

ปัจจุบันมีการอัปโหลดพิกัดคู่ง่ายๆ จากสมาร์ทโฟนหรือคอมพิวเตอร์ ซึ่ง Weedinator ดาวน์โหลดแล้ว สิ่งเหล่านี้จะถูกตีความว่าเป็นหัวเรื่องเป็นองศาและระยะทางที่จะเดินทางเป็นมม.

GPRS fona ใช้เพื่อเข้าถึงฐานข้อมูลออนไลน์ผ่านเครือข่ายเซลลูลาร์ 2G และรับและส่งพิกัดไปยัง Arduino Due ผ่าน Arduino Nano Due เป็น Master และควบคุมอาร์เรย์ของ Arduinos อื่น ๆ เป็น Slaves ผ่าน I2C และบัสอนุกรม Due สามารถโต้ตอบกับข้อมูลสดจาก Ublox และ Razor และแสดงหัวข้อที่คำนวณโดยทาส Arduino ตัวใดตัวหนึ่ง

ตัวติดตามดาวเทียม Ublox นั้นฉลาดเป็นพิเศษ เนื่องจากใช้การยกเลิกข้อผิดพลาดเพื่อรับการแก้ไขที่แม่นยำมาก ซึ่งเป็นค่าเบี่ยงเบนรวมเล็กน้อยสุดท้ายประมาณ 40 มม. โมดูลนี้ประกอบด้วยคู่ที่เหมือนกัน ซึ่งหนึ่งในนั้นคือ 'รถแลนด์โรเวอร์' ที่เคลื่อนที่ไปกับ Weedinator และอีกอันหนึ่ง 'ฐาน' ถูกตรึงไว้บนเสาที่ใดที่หนึ่งในที่โล่งแจ้ง การยกเลิกข้อผิดพลาดทำได้โดยฐานที่สามารถแก้ไขได้อย่างแม่นยำโดยใช้ตัวอย่างจำนวนมากเมื่อเวลาผ่านไป ตัวอย่างเหล่านี้จะถูกนำมาเฉลี่ยเพื่อชดเชยการเปลี่ยนแปลงของสภาพอากาศ หากอุปกรณ์เคลื่อนที่ เห็นได้ชัดว่าไม่สามารถหาค่าเฉลี่ยใดๆ ได้และจะอยู่ในความเมตตาอย่างสมบูรณ์ของสภาพแวดล้อมที่เปลี่ยนแปลงไป อย่างไรก็ตาม หากอุปกรณ์แบบคงที่และแบบเคลื่อนที่ทำงานร่วมกันได้ ตราบใดที่สามารถสื่อสารกันได้ ก็สามารถใช้ประโยชน์จากทั้งสองอย่างได้ ในช่วงเวลาใดก็ตาม หน่วยฐานยังคงมีข้อผิดพลาด แต่ก็มีการแก้ไขข้อผิดพลาดที่คำนวณไว้ก่อนหน้านี้ด้วย เพื่อให้สามารถคำนวณข้อผิดพลาดที่แท้จริงได้โดยการลบพิกัดชุดหนึ่งออกจากชุดอื่น จากนั้นจะส่งข้อผิดพลาดที่คำนวณได้ไปยังรถแลนด์โรเวอร์ผ่านลิงก์วิทยุ ซึ่งจะเพิ่มข้อผิดพลาดลงในพิกัดของตัวเอง และเดี๋ยวก่อน เรามีข้อผิดพลาดในการยกเลิก! ในทางปฏิบัติ การยกเลิกข้อผิดพลาดทำให้เกิดความแตกต่างระหว่างค่าเบี่ยงเบนทั้งหมด 3 เมตรและ 40 มม.

ระบบที่สมบูรณ์นั้นดูซับซ้อน แต่จริงๆ แล้วสร้างได้ค่อนข้างง่าย ไม่ว่าจะหลวมบนพื้นผิวที่ไม่นำไฟฟ้าหรือใช้ PCB ที่ฉันออกแบบ ซึ่งช่วยให้โมดูลทั้งหมดติดตั้งอย่างแน่นหนาได้ การพัฒนาในอนาคตถูกสร้างขึ้นบน PCB ทำให้สามารถรวม Arduinos จำนวนมากเพื่อควบคุมมอเตอร์สำหรับการบังคับเลี้ยว การเคลื่อนที่ไปข้างหน้า และเครื่อง CNC ออนบอร์ด การนำทางจะได้รับความช่วยเหลือจากระบบรู้จำวัตถุอย่างน้อยหนึ่งระบบโดยใช้กล้องเพื่อตรวจจับวัตถุที่มีสี เช่น ลูกกอล์ฟเรืองแสง ซึ่งอยู่ในตำแหน่งอย่างระมัดระวังในตารางบางประเภท - ดูพื้นที่นี้!

ขั้นตอนที่ 2: ส่วนประกอบ

ส่วนประกอบ
ส่วนประกอบ
ส่วนประกอบ
ส่วนประกอบ
ส่วนประกอบ
ส่วนประกอบ
  • Ublox C94 M8M (โรเวอร์และฐาน) x 2 จาก
  • 9DOF Razor IMU MO เข็มทิศดิจิตอล
  • Fona 800H 2G GPRS เซลลูลาร์ 1946
  • Arduino Due
  • Arduino Nano x 2 จาก
  • SparkFun Pro Micro
  • Adafruit 2.2" TFT IL1940C 1480
  • PCB (ดูไฟล์ Gerber ที่แนบมา) x 2 จาก
  • 1206 ตัวต้านทาน SMD ศูนย์โอห์ม x 12 จาก
  • ไฟ LED 1206 ดวง x 24 จาก

ไฟล์ PCB เปิดขึ้นด้วยซอฟต์แวร์ 'Design Spark'

ขั้นตอนที่ 3: การเดินสายไฟโมดูล

การเดินสายไฟโมดูล
การเดินสายไฟโมดูล

นี่เป็นส่วนที่ง่าย - ง่ายโดยเฉพาะอย่างยิ่งกับ PCB ที่ฉันทำ - เพียงทำตามแผนภาพด้านบน จำเป็นต้องระมัดระวังเพื่อหลีกเลี่ยงการเดินสายไฟโมดูล 3v ถึง 5v แม้แต่ในสายซีเรียลและ I2C

ขั้นตอนที่ 4: รหัส

รหัส
รหัส

โค้ดส่วนใหญ่เกี่ยวข้องกับการเคลื่อนย้ายข้อมูลไปรอบๆ ระบบอย่างมีระเบียบ และบ่อยครั้งที่จำเป็นต้องแปลงรูปแบบข้อมูลจากจำนวนเต็มเป็นจำนวนลอยเป็นสตริงและอักขระ ซึ่งอาจทำให้สับสนได้! โปรโตคอล 'ซีเรียล' จะจัดการเฉพาะอักขระและในขณะที่ I2โปรโตคอล C จะจัดการกับจำนวนเต็มขนาดเล็กมาก ฉันพบว่าควรแปลงเป็นอักขระแล้วแปลงกลับเป็นจำนวนเต็มที่ปลายอีกด้านของสายส่ง

คอนโทรลเลอร์ Weedinator นั้นโดยทั่วไปแล้วจะเป็นระบบ 8 บิตที่มี Arduinos แต่ละตัวหรือ 'MCU's จำนวนมาก เมื่อ 8 บิตถูกอธิบายว่าเป็นเลขศูนย์ไบนารีจริงและเลขศูนย์จะมีลักษณะดังนี้: B01100101 ซึ่งจะเท่ากับ:

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

ค่าตัวเลขทศนิยม 128 64 32 16 8 4 2 1
ค่าเลขฐานสอง 0 1 1 0 0 1 0 1

= 101

และค่าสูงสุดที่เป็นไปได้คือ 255 …. ดังนั้นจำนวนเต็มสูงสุด 'ไบต์' ที่เราสามารถส่งผ่าน I2C คือ 255 ซึ่งจำกัดมาก!

บน Arduino เราสามารถส่งอักขระ ASCII หรือไบต์ได้สูงสุด 32 ตัวต่อครั้งโดยใช้I2C ซึ่งมีประโยชน์มากกว่ามาก และชุดอักขระประกอบด้วยตัวเลข ตัวอักษร และอักขระควบคุมในรูปแบบ 7 บิต ดังนี้

ภาพ
ภาพ

โชคดีที่คอมไพเลอร์ Arduino ทำงานทั้งหมดในการแปลงจากอักขระเป็นไบนารีในพื้นหลัง แต่ก็ยังคาดหวังประเภทอักขระที่ถูกต้องสำหรับการส่งข้อมูลและจะไม่ยอมรับ 'สตริง'

ตอนนี้คือเมื่อสิ่งต่าง ๆ อาจทำให้สับสนได้ อักขระสามารถแสดงเป็นอักขระตัวเดียวโดยใช้คำจำกัดความของถ่านหรือเป็นอาร์เรย์หนึ่งมิติที่มีอักขระ 20 ตัวโดยใช้อักขระ[20] Arduino String นั้นคล้ายกับอาร์เรย์ของอักขระมาก และเป็นสตริงของอักขระที่สมองของมนุษย์มักตีความว่าเป็น 'คำ'

// สร้างตัวละคร 'distanceCharacter':

ตัวเริ่มต้นสตริง = ""; DistanceString = ตัวเริ่มต้น + DistanceString; int n = distanceString.length(); สำหรับ (int aa=0;aa<=n;aa++) { distanceCharacter[aa] = distanceString[aa]; }

โค้ดด้านบนสามารถแปลงสตริงอักขระยาวๆ ให้เป็นอาร์เรย์อักขระของอักขระ ซึ่งสามารถส่งต่อผ่าน I. ได้2C หรือซีเรียล

ที่ปลายอีกด้านหนึ่งของสายส่ง ข้อมูลสามารถแปลงกลับเป็นสตริงได้โดยใช้รหัสต่อไปนี้:

DistanceString = distanceString + c; // string = string + character

อาร์เรย์อักขระไม่สามารถแปลงเป็นจำนวนเต็มได้โดยตรงและต้องเข้าสู่รูปแบบสตริงก่อน แต่โค้ดต่อไปนี้จะแปลงจากสตริงเป็นจำนวนเต็ม:

int ผลลัพธ์ = (distanceString).toInt();

int distanceMetres = ผลลัพธ์;

ตอนนี้เรามีจำนวนเต็มที่เราสามารถใช้คำนวณได้ ทศนิยม (ตัวเลขที่มีจุดทศนิยม) ต้องแปลงเป็นจำนวนเต็มที่ในขั้นตอนการส่ง แล้วหารด้วย 100 สำหรับทศนิยมสองตำแหน่ง เช่น:

float distanceMetres = ระยะทางMm / 1000;

สุดท้ายนี้ สามารถสร้างสตริงจากการผสมผสานระหว่างอักขระและจำนวนเต็ม เช่น:

// นี่คือที่ที่ข้อมูลถูกคอมไพล์เป็นอักขระ:

dataString = ผู้ริเริ่ม + "BEAR" + zbearing + "DIST" + zdistance; // จำกัดอักขระได้ไม่เกิน 32 ตัว // สตริง = สตริง + อักขระ + จำนวนเต็ม + อักขระ + จำนวนเต็ม

โค้ดที่เหลือเป็นโค้ด Arduino มาตรฐานที่สามารถพบได้ในตัวอย่างต่างๆ ในไลบรารี Arduino ลองดูตัวอย่าง 'ตัวอย่าง >>>> สตริง' และตัวอย่างไลบรารี 'wire'

นี่คือกระบวนการทั้งหมดสำหรับการส่งและรับทุ่น:

แปลง Float ➜ Integer ➜ String ➜ Character array ….. จากนั้น TRANSMIT character array จาก Master ➜➜

➜➜ รับตัวละครแต่ละตัวใน Slave …. แล้วแปลง Character ➜ String ➜ Integer ➜ Float

ขั้นตอนที่ 5: ฐานข้อมูลและหน้าเว็บ

ฐานข้อมูลและหน้าเว็บ
ฐานข้อมูลและหน้าเว็บ
ฐานข้อมูลและหน้าเว็บ
ฐานข้อมูลและหน้าเว็บ

ด้านบนจะแสดงโครงสร้างฐานข้อมูลและแนบไฟล์โค้ด php และ html ชื่อผู้ใช้ ชื่อฐานข้อมูล ชื่อตารางและรหัสผ่านจะเว้นว่างไว้เพื่อความปลอดภัย

ขั้นตอนที่ 6: การทดสอบการนำทาง

การทดสอบการนำทาง
การทดสอบการนำทาง
การทดสอบการนำทาง
การทดสอบการนำทาง
การทดสอบการนำทาง
การทดสอบการนำทาง

ฉันสามารถเชื่อมต่อ datalogger เข้ากับแผงควบคุม Weedinator ผ่าน I2C และรับแนวคิดเกี่ยวกับประสิทธิภาพการวางตำแหน่งดาวเทียม Ublox M8M:

ใน 'Cold Start' แสดงโดยกราฟสีเขียว โมดูลเริ่มต้นด้วยข้อผิดพลาดจำนวนมาก ค่อนข้างคล้ายกับ GPS แบบ 'ปกติ' และข้อผิดพลาดค่อยๆ ลดลงจนกระทั่งหลังจากนั้นประมาณ 2 ชั่วโมง จะมีการแก้ไขข้อผิดพลาด RTK ระหว่างรถแลนด์โรเวอร์ และฐาน (แสดงเป็นกาชาด) ในช่วงเวลา 2 ชั่วโมงนั้น โมดูลฐานจะถูกสร้างขึ้นอย่างต่อเนื่องและอัปเดตค่าเฉลี่ยสำหรับละติจูดและลองจิจูด และหลังจากช่วงเวลาที่ตั้งโปรแกรมไว้ล่วงหน้าแล้วจะตัดสินใจว่ามีการแก้ไขที่ดี กราฟ 2 ถัดไปจะแสดงพฤติกรรมหลังจาก 'การเริ่มต้นอย่างรวดเร็ว ' ซึ่งโมดูลฐานได้คำนวณค่าเฉลี่ยที่ดีแล้ว กราฟบนสุดมีความยาวเกิน 200 นาที และบางครั้งการแก้ไขก็หายไป และรถแลนด์โรเวอร์ส่งข้อความ NMEA ไปยัง Weedinator ว่าการแก้ไขนั้นไม่น่าเชื่อถือชั่วคราว

กราฟสีน้ำเงินด้านล่างคือการ 'ซูมเข้า' บนกล่องสีแดงในกราฟบนสุด และแสดงภาพสแน็ปช็อตตัวแทนที่ดีของประสิทธิภาพของ Ublox โดยมีค่าเบี่ยงเบนรวม 40 มม. ซึ่งมากเกินพอที่จะแนะนำ Weedinator ให้ไปที่ตำแหน่ง แต่อาจไม่ดีพอที่จะปลูกดินรอบ ๆ พืชแต่ละชนิด?

กราฟที่สามแสดงข้อมูลที่รวบรวมโดย Rover และ Base ห่างกัน 100 เมตร - ไม่พบข้อผิดพลาดเพิ่มเติม - ระยะห่างของการแยกไม่ส่งผลต่อความแม่นยำ

ขั้นตอนที่ 7: รอบชิงชนะเลิศ

แนะนำ: