Talaan ng mga Nilalaman:

☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite: 7 Mga Hakbang (na may Mga Larawan)
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite: 7 Mga Hakbang (na may Mga Larawan)

Video: ☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite: 7 Mga Hakbang (na may Mga Larawan)

Video: ☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite: 7 Mga Hakbang (na may Mga Larawan)
Video: Рай для кроликов в ЯПОНИИ ver.2 2024, Hulyo
Anonim
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite
☠WEEDINATOR☠ Bahagi 2: Pag-navigate sa satellite

Ipinanganak ang sistema ng nabigasyon ng Weedinator!

Isang roving na robot na pang-agrikultura na maaaring makontrol ng isang matalinong telepono.

… At sa halip na dumaan lamang sa regular na proseso kung paano ito magkakasama Akala ko subukan ko at ipaliwanag kung paano ito talaga gumagana - malinaw naman hindi LAHAT ngunit ang pinakamahalaga at kagiliw-giliw na mga piraso. Mangyaring patawarin ang pun, ngunit kung paano dumadaloy ang data sa pagitan ng mga indibidwal na module na nakikita kong kawili-wili at pinaghiwa-hiwalay sa pinakamababang denominator na napupunta sa aktwal na "mga bits" - mga zero at isa. Kung nalilito ka tungkol sa mga piraso, byte, character at string pagkatapos ngayon ay maaaring ang oras upang maging hindi naguluhan? Susubukan ko din at mai-confuse ang isang bahagyang abstract na konsepto na tinatawag na 'Error Cancelling'.

Nagtatampok ang system mismo:

  • GPS / GNSS: Ublox C94 M8M (Rover at Base)
  • 9DOF Razor IMU MO digital na kumpas
  • Fona 800H 2G GPRS cellular
  • 2.2 "TFT na screen
  • Arduino Dahil sa 'Master'
  • Iba't ibang Arduino 'Mga Alipin'.

Kakaibang, maraming mga Sat Nav ay walang isang digital na compass na nangangahulugang kung ikaw ay nakatigil, at nawala, kailangan mong maglakad o magmaneho sa anumang random na direksyon bago maipakita sa iyo ng aparato ang tamang direksyon mula sa mga satellite. Kung nawala ka sa isang makapal na jungle o underground car park napupuno ka!

Hakbang 1: Paano Ito Gumagana

Paano Ito Gumagana
Paano Ito Gumagana

Sa kasalukuyan, isang simpleng pares ng mga coordinate ang nai-upload mula sa isang smart phone o computer, na naida-download ng Weedinator. Pagkatapos ay naisasalin ito sa isang heading sa degree at isang distansya upang maglakbay sa mm.

Ginagamit ang fona ng GPRS upang ma-access ang isang online database sa pamamagitan ng 2G cellular network at matanggap at ilipat ang mga coordinate sa Arduino Dahil sa pamamagitan ng isang Arduino Nano. Ang Dahil ay ang Master at kinokontrol ang isang hanay ng iba pang mga Arduino bilang Mga Alipin sa pamamagitan ng I2C at mga serial bus. Ang Dahil ay maaaring makipag-ugnay sa live na data mula sa Ublox at Razor at ipakita ang isang heading na kinakalkula ng isa sa mga alipin ng Arduino.

Ang Ublox satellite tracker ay partikular na matalino dahil gumagamit ito ng pagkansela sa error upang makakuha ng tumpak na mga pag-aayos - isang panghuling nominal na kabuuang paglihis na halos 40mm. Ang module ay binubuo ng isang magkaparehong pares, isa na rito, ang 'rover', gumagalaw kasama ang Weedinator, at ang isa pa, ang 'base' ay naayos sa isang poste sa isang lugar sa bukas. Ang pagkansela ng error ay nakamit ng batayan na magagawang makamit ang isang talagang tumpak na pag-aayos sa pamamagitan ng paggamit ng isang malaking halaga ng mga sample sa paglipas ng panahon. Ang mga halimbawang ito ay na-average upang mabayaran ang pagbabago ng mga kondisyon sa atmospera. Kung ang aparato ay gumagalaw, malinaw na hindi ito makakakuha ng anumang uri ng pag-average at magiging ganap na awa ng isang nagbabagong kapaligiran. Gayunpaman, kung ang isang static at gumagalaw na aparato ay nagtutulungan, hangga't maaari silang makipag-usap sa isa't isa, maaari nilang makuha ang pakinabang ng pareho. Sa anumang naibigay na oras, ang yunit ng base ay mayroon pa ring error ngunit mayroon din itong dating na kinakalkula sobrang tumpak na pag-aayos upang makalkula nito ang aktwal na error sa pamamagitan ng pagbawas sa isang hanay ng mga coordinate mula sa isa pa. Pagkatapos ay ipinapadala ang kinakalkula na error sa rover sa pamamagitan ng isang link sa radyo, na pagkatapos ay nagdaragdag ng error sa sarili nitong mga coordinate at hey presto, mayroon kaming error na pagkansela! Sa mga praktikal na termino, ang pagkansela ng error ay gumagawa ng pagkakaiba sa pagitan ng 3 metro at 40mm kabuuang paglihis.

Ang kumpletong sistema ay mukhang kumplikado, ngunit talagang madali itong buuin, alinman sa maluwag sa isang hindi kondaktibong ibabaw o gamit ang PCB na aking dinisenyo, na nagpapahintulot sa lahat ng mga module na ligtas na ma-bolt. Ang pag-unlad sa hinaharap ay itinayo sa PCB, na pinapayagan ang isang malawak na hanay ng Arduinos na isama upang makontrol ang mga motor para sa pagpipiloto, paggalaw ng pasulong at isang on-board na makina ng CNC. Ang pag-navigate ay tutulungan din ng hindi bababa sa isang sistema ng pagkilala ng object gamit ang mga camera upang maunawaan ang mga may kulay na bagay, halimbawa ng mga fluorescent golf ball, na maingat na nakaposisyon sa ilang uri ng grid - Panoorin ang puwang na ito!

Hakbang 2: Mga Bahagi

Mga Bahagi
Mga Bahagi
Mga Bahagi
Mga Bahagi
Mga Bahagi
Mga Bahagi
  • Ublox C94 M8M (Rover at Base) x 2 ng
  • 9DOF Razor IMU MO digital na kumpas
  • Fona 800H 2G GPRS cellular 1946
  • Arduino Dahil
  • Arduino Nano x 2 ng
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (tingnan ang nakalakip na mga Gerber file) x 2 ng
  • 1206 SMD zero ohm resistors x 12 ng
  • 1206 LEDs x 24 ng

Ang PCB file ay bubukas sa software na 'Design Spark'.

Hakbang 3: Pag-kable sa Mga Modyul

Pag-kable sa Mga Modyul
Pag-kable sa Mga Modyul

Ito ang madaling bahagi - lalo na't madali sa PCB na nagawa ko - sundin lamang ang diagram sa itaas. Kailangan ng pangangalaga upang maiwasan ang mga kable ng 3v module sa 5v, kahit na sa mga serial at I2C na linya.

Hakbang 4: Code

Code
Code

Karamihan sa mga code ay nababahala sa pagkuha ng data upang ilipat sa paligid ng system sa isang maayos na paraan at madalas ay kailangan ng pag-convert ng mga format ng data mula sa mga integer hanggang sa mga float hanggang sa mga string at sa mga character, na maaaring maging lubhang nakalilito! Ang 'Serial' na protocol ay hahawakin lamang ang mga character at habang ang I2Hahawakan ng C protocol ang napakaliit na integer, nahanap kong mas mahusay na i-convert ang mga ito sa mga character at pagkatapos ay i-convert pabalik sa mga integer sa kabilang dulo ng linya ng paghahatid.

Ang Controller ng Weedinator ay karaniwang isang 8 bit na system na may maraming mga indibidwal na Arduinos, o 'MCU's. Kapag ang 8 bit ay inilarawan bilang aktwal na mga zero na zero at isa maaari itong magmukhang ganito: B01100101 na magiging katumbas:

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

Halaga ng decimal na Digit 128 64 32 16 8 4 2 1
Halaga ng Binary Digit 0 1 1 0 0 1 0 1

= 101

At ang maximum na posibleng posible ay 255…. Kaya't ang maximum na integer na 'byte' ay maaari nating mailipat sa I2Ang C ay 255, na labis na naglilimita!

Sa isang Arduino maaari kaming magpadala ng hanggang sa 32 mga character na ASCII, o byte, nang sabay-sabay gamit ang I2C, na higit na kapaki-pakinabang, at ang hanay ng character ay may kasamang mga numero, titik at control character sa 7 bit format tulad ng sa ibaba:

Larawan
Larawan

Sa kasamaang palad, ginagawa ng tagabuo ng Arduino ang lahat ng gawain ng conversion mula sa character hanggang sa binary sa likuran, ngunit inaasahan pa rin nito ang tamang uri ng character para sa paghahatid ng data at hindi nito tatanggapin ang 'Strings'.

Ngayon ay kung kailan maaaring maging nakalilito ang mga bagay. Ang mga character ay maaaring ipahayag bilang solong mga character na gumagamit ng char kahulugan o bilang isang isang dimensional na hanay ng 20 mga character na gumagamit ng char [20]. Ang isang Arduino String ay halos kapareho ng isang character array at literal na isang string ng mga character na madalas na binibigyang kahulugan ng utak ng tao bilang 'mga salita'.

// Binubuo ang character na 'distanceCharacter':

Strator initiator = ""; distanceString = initiator + distanceString; int n = distanceString.length (); para sa (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Ang code sa itaas ay maaaring mag-convert ng isang mahabang string ng mga character sa isang character array ng mga character na maaaring mailipat sa I2C o serial.

Sa kabilang dulo ng linya ng paghahatid, ang data ay maaaring mai-convert pabalik sa isang string gamit ang sumusunod na code:

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

Ang isang array ng character ay hindi maaaring direktang mai-convert sa isang integer at kailangang pumunta muna sa format ng string, ngunit ang sumusunod na code ay magko-convert mula sa isang string patungo sa isang integer:

int resulta = (distansyaString).toInt ();

int distanceMetres = resulta;

Ngayon ay mayroon kaming isang integer na maaari naming magamit upang gumawa ng mga kalkulasyon. Ang mga float (mga numero na may decimal point) ay kailangang mai-convert sa mga integer sa yugto ng paghahatid at pagkatapos ay hinati ng 100 para sa dalawang decimal na lugar hal:

float distanceMetres = distanceMm / 1000;

Panghuli, ang isang string ay maaaring malikha mula sa isang halo ng mga character at integer hal:

// Dito pinagsama-sama ang data sa isang character:

dataString = initiator + "BEAR" + zbearing + "DIST" + zdistance; // Limitado sa 32 character // String = string + character + intereger + character + integer.

Ang natitirang code ay karaniwang mga bagay na Arduino na matatagpuan sa iba't ibang mga halimbawa sa mga aklatan ng Arduino. Suriin ang halimbawa ng 'mga halimbawa >>>> Mga string' at ang mga halimbawa ng library na 'wire'.

Narito ang buong proseso para sa pagpapadala at makatanggap ng isang float:

I-convert ang Float ➜ Integer ➜ String ➜ Character array….. pagkatapos ay i-TRANSMIT ang character array mula sa Master ➜➜

➜➜ TANGGAPIN ang mga indibidwal na character sa Alipin …. pagkatapos ay i-convert ang Character ➜ String ➜ Integer ➜ Float

Hakbang 5: Database at Webpage

Database at Webpage
Database at Webpage
Database at Webpage
Database at Webpage

Sa itaas ay ipinapakita ang istraktura ng database at ang mga php at html code na mga file ay nakakabit. Ang mga username, pangalan ng database, pangalan ng talahanayan at password ay blangko para sa seguridad.

Hakbang 6: Mga Pagsubok sa Pag-navigate

Mga Pagsubok sa Pag-navigate
Mga Pagsubok sa Pag-navigate
Mga Pagsubok sa Pag-navigate
Mga Pagsubok sa Pag-navigate
Mga Pagsubok sa Pag-navigate
Mga Pagsubok sa Pag-navigate

Nagawa kong mag-hook up ng isang datalogger sa Weedinator control board sa pamamagitan ng I2C at makakuha ng ilang ideya ng pagganap sa pagpoposisyon ng satellite ng Ublox M8M:

Sa 'Cold Start', na ipinakita ng berdeng grap, nagsimula ang module na may maraming error, halos kapareho ng isang 'normal' na GPS, at unti-unting nabawasan ang error hanggang, pagkatapos ng halos 2 oras, nakakuha ito ng isang RTK na pag-aayos sa pagitan ng rover at base (ipinapakita bilang pulang krus). Sa panahon ng 2 oras na iyon, ang batayang module ay patuloy na nagtatayo at nag-a-update ng average na halaga para sa latitude at longitude at pagkatapos ng pre-programmed time interval ay nagpasiya na nakakuha ito ng mahusay na pag-aayos. Ang susunod na 2 graph ay nagpapakita ng pag-uugali pagkatapos ng isang 'Mainit na pagsisimula kung saan ang base module ay nakalkula na ang isang mahusay na average. Ang nangungunang grap ay higit sa isang 200 minutong panahon at paminsan-minsan ay nawala ang pag-aayos at ang rover ay nagpapadala ng isang mensahe na NMEA sa Weedinator na ang pag-aayos ay pansamantalang naging hindi maaasahan.

Ang mas mababang asul na grap ay isang 'mag-zoom in' sa pulang kahon sa tuktok na grap at nagpapakita ng isang mahusay na kinatawan ng snap shot ng pagganap ng Ublox, na may kabuuang paglihis na 40 mm, na higit pa sa sapat na mahusay upang gabayan ang Weedinator sa pag-loacation nito, ngunit posibleng hindi sapat na sapat upang malinang ang lupa sa paligid ng mga indibidwal na halaman?

Ipinapakita ng pangatlong grap ang data na natipon kasama ang Rover at Base na 100 metro ang layo - Walang nakitang karagdagang error - ang distansya ng paghihiwalay ay walang pagkakaiba sa kawastuhan.

Hakbang 7: Pangwakas

Inirerekumendang: