Innehållsförteckning:
- Steg 1: Hur det fungerar
- Steg 2: Komponenter
- Steg 3: Koppla ihop modulerna
- Steg 4: Kod
- Steg 5: Databas och webbsida
- Steg 6: Navigeringstester
- Steg 7: Slutlig
Video: EWEEDINATOR☠ Del 2: Satellitnavigering: 7 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Weedinator -navigationssystemet är fött!
En svängande jordbruksrobot som kan styras av en smart telefon.
… Och i stället för att bara gå igenom den vanliga processen med hur det sätts ihop tänkte jag försöka förklara hur det faktiskt fungerar - uppenbarligen inte ALLT utan de viktigaste och mest intressanta bitarna. Ursäkta ordvitsen, men det är hur dataflödet mellan de enskilda modulerna som jag tycker är intressant och uppdelat i dess lägsta nämnare slutar med faktiska "bitar" - nollor och enor. Om du någonsin varit förvirrad om bitar, byte, tecken och strängar, kan det vara dags att bli okonstlad nu? Jag kommer också att försöka ta bort ett lite abstrakt begrepp som heter "Felavbrytande".
Själva systemet har:
- GPS/GNSS: Ublox C94 M8M (Rover och Base)
- 9DOF Razor IMU MO digital kompass
- Fona 800H 2G GPRS -mobil
- 2,2 "TFT -skärm
- Arduino Due 'Master'
- Olika Arduino 'Slaves'.
Konstigt nog har många Sat Navs ingen digital kompass, vilket innebär att om du är stillastående och förlorad måste du gå eller köra i någon slumpmässig riktning innan enheten kan visa dig rätt riktning från satelliter. Om du går vilse i en tjock djungel eller underjordisk parkeringsplats är du fylld!
Steg 1: Hur det fungerar
För närvarande laddas ett enkelt par koordinater upp från en smarttelefon eller dator, som sedan laddas ner av Weedinator. Dessa tolkas sedan till en rubrik i grader och ett avstånd att resa i mm.
GPRS -fona används för att komma åt en online -databas via 2G -mobilnätet och ta emot och överföra koordinaterna till Arduino Due via en Arduino Nano. The Due är mästaren och styr en rad andra Arduinos som slavar via I2C och seriebussar. Due kan interagera med levande data från Ublox och Razor och visa en rubrik beräknad av en av dess Arduino -slavar.
Ublox satellitspårare är särskilt smart eftersom den använder felavstängning för att få mycket exakta korrigeringar - en slutlig nominell totalavvikelse på cirka 40 mm. Modulen består av ett identiskt par, varav ett, "rovern", rör sig med Weedinator, och det andra, "basen" är fixerad på en stolpe någonstans ute i det fria. Felavbrott uppnås genom att basen kan uppnå en riktigt exakt fix genom att använda en stor mängd prover över tid. Dessa prover genomsnitts sedan för att kompensera för förändrade atmosfäriska förhållanden. Om enheten rörde sig skulle den uppenbarligen inte kunna få någon form av medelvärde och skulle vara fullt ut nådd av en föränderlig miljö. Men om en statisk och rörlig enhet fungerar tillsammans, så länge de kan kommunicera mellan varandra, kan de dra nytta av båda. Vid varje given tidpunkt har basenheten fortfarande ett fel men den har också en tidigare beräknad superexakt fix så att den kan beräkna det faktiska felet genom att subtrahera en uppsättning koordinater från en annan. Det skickar sedan det beräknade felet till rovern via en radiolänk, som sedan lägger till felet på sina egna koordinater och hej presto, vi har felaktivering! Rent praktiskt gör felavbrott skillnaden mellan 3 meter och 40 mm totalavvikelse.
Hela systemet ser komplicerat ut, men är faktiskt ganska enkelt att bygga, antingen löst på en icke -ledande yta eller med det kretskort som jag konstruerade, vilket gör att alla moduler kan skruvas fast på ett säkert sätt. Framtida utveckling är byggd på kretskortet, så att ett stort antal Arduinos kan integreras för att styra motorer för styrning, framåtgående rörelse och en inbyggd CNC-maskin. Navigering kommer också att assisteras av minst ett objektigenkänningssystem som använder kameror för att känna av färgade föremål, till exempel fluorescerande golfbollar, som är noggrant placerade i något slags rutnät - Titta på det här utrymmet!
Steg 2: Komponenter
- Ublox C94 M8M (Rover och Base) x 2 av
- 9DOF Razor IMU MO digital kompass
- Fona 800H 2G GPRS mobil 1946
- Arduino Due
- Arduino Nano x 2 av
- SparkFun Pro Micro
- Adafruit 2.2 "TFT IL1940C 1480
- PCB (se bifogade Gerber -filer) x 2 av
- 1206 SMD noll ohm motstånd x 12 av
- 1206 lysdioder x 24 tum
PCB -filen öppnas med "Design Spark" -programvara.
Steg 3: Koppla ihop modulerna
Detta är den enkla delen - särskilt lätt med kretskortet som jag fick - följ bara diagrammet ovan. Var försiktig för att undvika att 3v -moduler kopplas till 5v, även på serie- och I2C -linjerna.
Steg 4: Kod
Det mesta av koden handlar om att få data att flytta runt i systemet på ett ordnat sätt och ganska ofta finns det ett behov av att konvertera dataformat från heltal till floats till strängar och till tecken, vilket kan vara mycket förvirrande! "Serial" -protokollet hanterar endast tecken och medan jag2C -protokollet kommer att hantera mycket små heltal, jag tyckte att det var bättre att konvertera dem till tecken och sedan konvertera tillbaka till heltal i andra änden av överföringslinjen.
Weedinator -styrenheten är i grunden ett 8 -bitars system med massor av individuella Arduinos, eller 'MCU: er. När 8 bitar beskrivs som faktiska binära nollor och enor kan det se ut så här: B01100101 vilket skulle vara lika med:
(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =
Decimal siffervärde | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
Binärt siffervärde | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
= 101
Och det högsta möjliga värdet är 255…. Så det maximala heltalet 'byte' vi kan överföra över I2C är 255, vilket är mycket begränsande!
På en Arduino kan vi överföra upp till 32 ASCII -tecken eller byte åt gången med I2C, vilket är mycket mer användbart, och teckenuppsättningen innehåller siffror, bokstäver och kontrolltecken i 7 -bitarsformat enligt nedan:
Lyckligtvis gör Arduino -kompilatorn allt arbete med att konvertera från tecken till binärt i bakgrunden, men det förväntar sig fortfarande rätt typ av tecken för dataöverföring och det accepterar inte "Strings".
Nu är det när saker kan bli förvirrande. Tecken kan uttryckas som enstaka tecken med hjälp av karaktärsdefinitionen eller som en endimensionell uppsättning med 20 tecken med hjälp av tecken [20]. En Arduino -sträng är mycket lik en teckenmatris och är bokstavligen en rad karaktärer som ofta tolkas av den mänskliga hjärnan som 'ord'.
// Bygger tecknet 'distanceCharacter':
Stränginitiator = ""; distanceString = initiator + distanceString; int n = distanceString.length (); för (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }
Koden ovan kan konvertera en lång teckensträng till en teckenmatris med tecken som sedan kan överföras över I2C eller serie.
I andra änden av överföringslinjen kan data konverteras tillbaka till en sträng med följande kod:
distanceString = distanceString + c; // string = string + character
En teckenmatris kan inte konverteras direkt till ett heltal och måste först gå in i strängformatet, men följande kod kommer att konverteras från en sträng till ett heltal:
int resultat = (distanceString).toInt ();
int distanceMetres = resultat;
Nu har vi ett heltal som vi kan använda för att göra beräkningar. Flytare (siffror med en decimal) måste konverteras till heltal vid överföringssteget och sedan divideras med 100 för två decimaler, t.ex.:
float distanceMetres = distanceMm / 1000;
Slutligen kan en sträng skapas från en blandning av tecken och heltal, t.ex.
// Här sammanställs data till ett tecken:
dataString = initiator + "BEAR" + zbearing + "DIST" + zdistance; // Begränsat till 32 tecken // Sträng = sträng + tecken + intereger + tecken + heltal.
Resten av koden är standard Arduino -grejer som finns i de olika exemplen i Arduino -biblioteken. Kolla in exemplen "exempel >>>> strängar" och "tråd" -biblioteksexempel.
Här är hela processen för att sända och ta emot en flottör:
Konvertera Float ➜ Heltal ➜ Sträng ➜ Tecken array ….. sedan TRANSMIT teckenmatris från Master ➜➜
➜➜ RECIEVE individual characters on Slave…. konvertera sedan Character ➜ String ➜ Integer ➜ Float
Steg 5: Databas och webbsida
Ovan visas databasstrukturen och php- och html -kodfiler bifogas. Användarnamn, databasnamn, tabellnamn och lösenord täcks av säkerhetsskäl.
Steg 6: Navigeringstester
Jag lyckades ansluta en datalogger till Weedinator -styrkortet via I2C och få en uppfattning om Ublox M8M -satellitpositioneringsprestanda:
På "Cold Start", som visas med den gröna grafen, startade modulen med mycket fel, ganska likt en "vanlig" GPS, och gradvis minskade felet tills det efter cirka 2 timmar fick en RTK -fix mellan rover och bas (visas som röda korset). Under denna 2-timmarsperiod bygger basmodulen kontinuerligt upp och uppdaterar ett medelvärde för latitud och longitud och efter att det förprogrammerade tidsintervallet bestämmer att det har fått en bra fix. Nästa 2 grafer visar beteende efter en 'Hot start 'där basmodulen redan har beräknat ett bra genomsnitt. Den övre grafen är över en 200 minuters period och ibland försvinner korrigeringen och rovern skickar ett NMEA -meddelande till Weedinator att korrigeringen tillfälligt har blivit opålitlig.
Den nedre blå grafen är en "zoom in" på den röda rutan i det övre diagrammet och visar ett bra representativt ögonblicksbild av Ublox -prestanda, med en total avvikelse på 40 mm, vilket är mer än tillräckligt bra för att vägleda Weedinator till dess bristande, men kanske inte tillräckligt bra för att odla jorden runt enskilda växter?
Den tredje grafen visar data som samlats in med Rover och basen 100 meter från varandra - Inget ytterligare fel detekterades - avståndet mellan separationen gjorde ingen skillnad för noggrannheten.
Steg 7: Slutlig
Rekommenderad:
Rörelseaktiverade cosplayvingar med Circuit Playground Express - Del 1: 7 steg (med bilder)
Motion Activated Cosplay Wings Using Circuit Playground Express - Del 1: Detta är del ett av ett tvådelat projekt, där jag ska visa dig min process för att göra ett par automatiska älvvingar. Den första delen av projektet är vingarnas mekanik, och den andra delen gör den bärbar och lägger till vingarna
Automatisera ett växthus med LoRa! (Del 2) -- Motoriserad fönsteröppnare: 6 steg (med bilder)
Automatisera ett växthus med LoRa! (Del 2) || Motoriserad fönsteröppnare: I det här projektet kommer jag att visa dig hur jag skapade en motoriserad fönsteröppnare för mitt växthus. Det betyder att jag kommer att visa dig vilken motor jag använde, hur jag utformade det faktiska mekaniska systemet, hur jag körde motorn och slutligen hur jag använde en Arduino LoRa
Hur man tar isär en dator med enkla steg och bilder: 13 steg (med bilder)
Hur man tar isär en dator med enkla steg och bilder: Detta är en instruktion om hur man demonterar en dator. De flesta av de grundläggande komponenterna är modulära och lätt att ta bort. Det är dock viktigt att du är organiserad kring det. Detta hjälper dig att inte förlora delar, och även för att göra ommonteringen
EWEEDINATOR☠ Del 4: Differential Steering Geometry Code: 3 Steps
EWEEDINATOR☠ Del 4: Differential Steering Geometry Code: Om du har tid att titta på videon ovan kommer du att märka att det är några konstiga ljud som orsakas av motorerna på styrningen som stannar då och då WEEDINATOR navigerar en 3 punkt sväng. Motorerna fastnar i huvudsak mot
EWEEDINATOR☠ Del 3: Chassikonstruktion: 8 steg (med bilder)
EWEEDINATOR☠ Del 3: Chassikonstruktion: Vintern är den perfekta tiden att bygga maskiner, särskilt när det gäller svetsning och plasmaskärning eftersom båda ger en rejäl värme. Om du undrar vad en plasmaskärare är, läs vidare för djupgående procedurer