God dag! Før dere, kjære dere, er en kunstrobot som kan male forskjellige sfæriske eller eggformede gjenstander i størrelse fra 4 til 9 cm.
For å lage det trenger du en 3D-printer, et sett med standardverktøy + Arduino.
Merk: Ikke gi opp prosjekter som bruker en 3D-printer. Om ønskelig kan du alltid finne et sted eller en metode hvor du kan bestille utskrift av detaljene som er nødvendige for prosjektet.
Kunstrobot - to-akset hjemmelaget, som kan skrive ut på de fleste sfæriske overflater. Roboten er konfigurert for en bestemt type gjenstand (pingpongballer, julepynt, lyspærer og egg (and, gås, kylling ...).
Høypresisjonstrinnmotorer med høyt dreiemoment brukes til å rotere det sfæriske objektet og flytte manipulatoren, og en stillegående og pålitelig SG90 servodrift brukes til å løfte håndtaksmekanismen.
Å lage gjør-det-selv håndverk Vi trenger:
Som et "jukseark" kan du bruke denne ordningen.
Roboten beveger en manipulator med en markør festet til den, som drives av en trinnmotor. En annen trinnmotor er ansvarlig for å snu objektet som tegningen er brukt på (egg, ball ...). To sugekopper brukes til å holde gjenstanden på plass, en festet til trinnmotoren og den andre på motsatt side av gjenstanden. En liten fjær vil trykke på sugekoppen for å hjelpe den med å holde gjenstanden. SG90-servoen brukes til å heve/senke markøren.
Installer mutteren i hullet som er forberedt for den, og stram til 16 mm skruen. La oss gjøre det samme for vareholderen (til høyre i bildet ovenfor). Ved å lage hengslet for manipulatoren ble det brukt 2 stk 16 mm skruer. Dette hengslet må rotere fritt etter at skruene er trukket til.
Installer en av sugekoppene inne i hullet i gjenstandsholderen.
Fest begge trinnmotorene til hovedrammen med 8 skruer.
La oss plassere alle elementene som vist på bildet ovenfor.
Sett den sammensatte manipulatoren inn på aksen til trinnmotoren.
Installer venstre støtte på trinnmotorens akse.
Markøren og egget er satt som eksempel (du trenger ikke å plassere dem nå).
MERK: Servoen vil kreve justeringer. Du må stille inn vinkelen på nytt under kalibreringsprosessen.
Fest elektronikken på baksiden av hovedrammen med skruer (2 er tilstrekkelig).
La oss koble til kablene.
Hvis du snur polariteten når du kobler til trinnmotorer, vil de rett og slett rotere i motsatt retning, men med en servo er ikke situasjonen så ufarlig! Så dobbeltsjekk polariteten før du kobler til!
La oss programmere Arduino Leonardo ved å bruke Arduino IDE-programvaremiljøet (v 1.8.1).
Programvare blekklandskap. Last ned og installer Inkscape-programvaren (jeg anbefaler stabil versjon 0.91).
Last ned og installer EggBot Control-utvidelsen (versjon 2.4.0 er fullstendig testet).
EggBot Control-utvidelsen for Inkscape er et verktøy som skal brukes ved testing og kalibrering av EggBot og overføring av tegninger til egget. Først må du starte Inkscape. Etter å ha startet Inkscape, vises "Extensions"-menyen, og i den må du allerede velge "Eggbot"-undermenyen. Hvis du ikke ser Eggbot-undermenyen, har du ikke installert utvidelsene riktig. Sikkerhetskopier og følg nøye instruksjonene for installasjon av utvidelser.
Det er alt, takk for oppmerksomheten!)
Resultatet er en ganske morsom robot, som kan se hindringer foran seg, analysere situasjonen og deretter, bare velge den beste ruten, gå videre. Roboten viste seg å være svært manøvrerbar. Den er i stand til å snu 180 grader, og rotasjonsvinkelen er 45 og 90 grader. Som hovedkontroller brukte forfatteren Iteaduino, som er en analog av Arduino.
Materialer og verktøy for å lage en robot:
- mikrokontroller (Arduino eller lignende Iteaduino);
- ultralydsensor;
- holder for batterier;
- Kinesiske leker for å lage en akselavstand (du kan kjøpe ferdige);
- avbitertang;
- lim;
- ledninger;
- motorer;
- fiberplate;
- stikksag;
- transistorer (D882P).
Produksjonsprosess for roboter:
Steg en. Å skape en akselavstand
For å skape en akselavstand kjøpte forfatteren to kinesiske lekebiler. Du trenger imidlertid ikke å bekymre deg for dette hvis du har ekstra penger, siden du kan kjøpe en ferdig base. Ved hjelp av wirekuttere ble bilene kuttet i to deler for å danne to drivaksler. Disse delene ble deretter limt sammen. Men i dette tilfellet kan du jobbe med et loddejern, plasten er perfekt loddet.
Når du velger biler, er det best å ta leker med vanlige hjul, siden, ifølge forfatteren, med pigger som hans, hopper roboten mye.
Det er et annet slikt øyeblikk når ledninger kommer ut fra motorene, på en av dem må du huske å endre polariteten.
Etter fastvaren til roboten vil den være klar for testing. For at roboten skal ha tid til å snu seg i en viss vinkel, må du velge riktig tidspunkt for driften av motorene.
Når det gjelder sensorene, må ultralyden kobles til den 7. digitale utgangen på mikrokontrolleren. Servomotoren er koblet til den tredje digitale inngangen, basen til transistoren til venstre motor er koblet til den 11. pinne, og basen til høyre motor er koblet til den tiende.
Hvis Krona brukes som strøm, er minus koblet til GND, og pluss til VIN. Du må også koble transistorens emitter og den negative kontakten fra strømforsyningen til robotchassiset til GND.
La oss snakke om hvordan du kan bruke Arduino til å lage en robot som balanserer som en Segway.
Segway fra engelsk. Segway er et tohjuls stående kjøretøy utstyrt med elektrisk drift. De kalles også gyroscootere eller elektriske scootere.
Har du noen gang lurt på hvordan en Segway fungerer? I denne opplæringen vil vi prøve å vise deg hvordan du lager en Arduino-robot som balanserer seg akkurat som en Segway.
For å balansere roboten må motorene motvirke robotens fall. Denne handlingen krever tilbakemelding og korrigerende elementer. Tilbakemeldingselement - , som gir både akselerasjon og rotasjon i alle tre aksene (). Arduinoen bruker dette for å kjenne robotens nåværende orientering. Det korrigerende elementet er kombinasjonen av motor og hjul.
Sluttresultatet bør være noe slikt:
L298N motordrivermodul:
DC girmotor med hjul:
En selvbalanserende robot er i hovedsak en invertert pendel. Den kan balanseres bedre hvis massesenteret er høyere i forhold til hjulakslene. Et høyere massesenter betyr et høyere massetreghetsmoment, som tilsvarer en lavere vinkelakselerasjon (saktere fall). Derfor legger vi batteripakken på toppen. Høyden på roboten ble imidlertid valgt basert på tilgjengeligheten av materialer 🙂
Den ferdige versjonen av den selvbalanserende roboten kan sees i figuren over. Øverst er det seks Ni-Cd-batterier for å drive PCB-en. Mellom motorer brukes et 9-volts batteri for motorføreren.
I kontrollteori krever det å holde en variabel (i dette tilfellet posisjonen til roboten) en spesiell kontroller kalt en PID (Proportional Integral Derivative). Hver av disse parameterne har en "gevinst", vanligvis referert til som Kp, Ki og Kd. PID gir en korreksjon mellom ønsket verdi (eller input) og den faktiske verdien (eller output). Forskjellen mellom input og output kalles "feil".
PID-regulatoren reduserer feilen til lavest mulig verdi ved å hele tiden justere utgangen. I vår selvbalanserende Arduino-robot settes inngangen (som er ønsket helning i grader) av programvaren. MPU6050 leser robotens nåværende tilt og mater den inn i en PID-algoritme som utfører beregninger for å kontrollere motoren og holde roboten oppreist.
PID krever at Kp-, Ki- og Kd-verdiene settes til optimale verdier. Ingeniører bruker programvare som MATLAB for automatisk å beregne disse verdiene. Dessverre kan vi ikke bruke MATLAB i vårt tilfelle fordi det vil komplisere prosjektet enda mer. I stedet vil vi justere PID-verdiene. Slik gjør du det:
Robotens oppførsel kan sees nedenfor i videoen:
Vi trengte fire eksterne biblioteker for å lage roboten vår. PID-biblioteket gjør det enkelt å beregne P-, I- og D-verdier. LMotorController-biblioteket brukes til å styre to motorer med L298N-modulen. I2Cdev-biblioteket og MPU6050_6_Axis_MotionApps20-biblioteket er designet for å lese data fra MPU6050. Du kan laste ned koden inkludert biblioteker i dette depotet.
#inkludere
Kp, Ki, Kd-verdier fungerer kanskje ikke. Hvis de ikke gjør det, følg trinnene ovenfor. Merk at helningen i koden er satt til 173 grader. Du kan endre denne verdien hvis du vil, men merk at dette er vinkelen roboten må støtte. Hvis motorene dine er for raske, kan du justere verdiene for motorSpeedFactorLeft og motorSpeedFactorRight.
Det er alt for nå. Ser deg.
Det er veldig enkelt å lage forskjellige biler med fjernkontroll, enkle sensorer og logikk på Arduino. Derfor er denne linjen utrolig populær. Mange kompatible sensorer og utvidelseskort selges. Internett er fylt med ferdige programvarebiblioteker og åpen kildekode-prosjekter for alle anledninger. Nesten alle spørsmålene du vil ha i prosessen med å mestre Arduino har allerede blitt stilt av noen, og du vil alltid finne svaret.
La oss begynne med noe, skal vi? Hovedspørsmålet er valg av kontroller. Det er mange revisjoner av Arduino, så vel som tredjepartskloner bygget fra disse revisjonene. Her er kanskje de to mest interessante timene for oss:
Selvfølgelig er det også Arduino Pro, Arduino LilyPad og mange andre. Men la oss nå fokusere på de to første modellene. I vårt tilfelle er alt ganske enkelt: Mega er nødvendig for en robot med mange ben.
La oss først installere Arduino IDE (arduino.cc) - dette er et gratis utviklingsmiljø på tvers av plattformer. Nå, hvis vi kobler til Arduinoen vår, kan vi prøve å skrive den første koden på det enkleste eksemplet: det blinkende LED-programmet. De fleste Arduino-kontrollere har det og er koblet til pin 13. Forresten, i Arduino-verdenen kalles programmer ofte skisser. Her er teksten til skissen med kommentarer:
// Gi denne pinnen navnet LED: const int LED = 13; void oppsett() ( // Initialiser digital pin // for utgang: pinMode(LED, OUTPUT); ) void loop() ( // Sett logic-one nivå // til pinne 13 (lys LED): digitalWrite(LED, HIGH ) ; // Pause skissen // i et sekund: delay(1000); // Bruk et logisk nullnivå // på pinne 13 (slå av LED): digitalWrite(LED, LOW); // Pause skissen igjen et sekund: delay(1000); )
Legg merke til oppsettet og loop-funksjonene. De må være til stede i enhver Arduino-skisse. Oppsettet kalles én gang når kontrolleren slås på eller etter at kontrolleren er startet på nytt. Hvis du vil at koden kun skal kjøres én gang, bør den plasseres her. Oftest er dette alle slags initialiseringsprosedyrer for noe. Skissen vår er intet unntak: Arduino digitale pinner kan fungere som både innganger og utganger. I oppsettfunksjonen sier vi at pin 13 vil fungere som en digital utgang på kontrolleren.
Etter at oppsettsfunksjonen har fullført arbeidet, startes automatisk en lukket sløyfe, der sløyfefunksjonen kalles opp. Vi er pålagt å skrive hva vi vil gjøre der. Og vi vil bruke et logisk ett-nivå (5 V) til pinne 13, det vil si tenne LED-en, deretter vente ett sekund (1000 i millisekunder), deretter bruke et logisk null-nivå (0 V) og vent igjen ett sekund. Neste call to loop vil gjenta alt.
Nå "laster" vi opp skissen vår til kontrolleren. Nei, vi trenger ingen programmerer. Arduino-kontrollere, i tillegg til skissene våre, inneholder et spesielt program - bootloader, som spesielt kontrollerer lasting av kode fra en datamaskin. Så for å laste opp skissen trenger vi bare en USB-kabel og menypunktet Fil → Last opp (Ctrl + U) i Arduino IDE.
Hvor mange ben trenger vi egentlig? La oss definere i en rekke konfigurasjoner av gåroboter. Etter antall ben:
I tillegg til antall ben er konfigurasjonen av hver også viktig. Hovedkarakteristikken til beinet er antall frihetsgrader, eller frihetsdimensjoner (DOF). Frihetsgraden er evnen til å rotere eller bøye seg rundt en akse (sjeldnere, for å bevege seg fremover langs den). Det er klart, hvis det bare er én grad av frihet, så kommer du ikke langt på et slikt ben. Ben med to frihetsgrader (2DOF) lar allerede flerbeinte roboter bevege seg, selv om 2DOF tillater fri bevegelse av tuppen av beinet i bare ett plan. Og 3DOF-benet beveger "foten" i 3D-rom (med mindre, selvfølgelig, alle tre aksene er parallelle). Det finnes også 4DOF-ben som ganske enkelt øker fleksibiliteten og bevegelsesområdet til benet. Insekter har oftest 4DOF-ben.
Hva betyr dette for oss? I billige amatørroboter implementeres hver frihetsgrad av én motor, mer presist, en servodrift eller serv. Konfigurasjonen av bena bestemmer unikt hvor mange av disse servoene som trengs. Så en 3DOF hexapod ville kreve 18 servoer, og en 4DOF edderkopp ville kreve 32. Ikke la deg skremme av tallene, de små servoene som brukes i amatør RC-modeller er veldig billige. I nettbutikker kan de bli funnet på forespørsel mikroservo.
For å programmere servoer er det nok å vite at de allerede har en kontroller som gjør hovedarbeidet. Og alt som trengs er å levere strøm og et digitalt signal som forteller kontrolleren i hvilken posisjon vi vil dreie drivakselen. Det er lett å finne informasjon om designet deres. Protokollen deres er den enkleste av alle digitale kommunikasjonsprotokoller: pulsbreddemodulasjon - PWM (PWM på engelsk). Alle enkle servoer har en tre-pinners kontakt: jord, +5V (spenning kan variere avhengig av størrelse og effekt) og en signalinngang. Arduino-kontrollere kan generere dette signalet på to forskjellige måter. Den første er hardware PWM, som brikken selv kan sende ut på flere av sine digitale I/O-pinner. Den andre er programvare. Programvare lar deg motta flere forskjellige PWM-signaler samtidig enn maskinvare. En praktisk innpakning er gitt for den under Arduino - Servo-biblioteket. Den lar deg bruke 12 servoer samtidig på de fleste små kontroller (Uno, Due, Nano) og 48 servoer på Arduino Mega og lignende. Signalpinnen til servoen er koblet til den digitale pinnen til Arduino. Jord og kraft - åpenbart, til jord og kraft, de kan deles av alle servoer. I tretråds servoløkker er svart eller brunt jordet, vanligvis rød +5 V i midten, og til slutt hvit eller gul er signal. Fra et programvaresynspunkt er kontrollen ekstremt enkel:
Servo myservo; // Servo på Arduino pin 9 myservo.attach(9); // Roter til posisjon 90º myservo.write(90);
De fleste servoer kan rotere akselen 180°, og for dem er 90° midtposisjon. For å forenkle tilkoblingen av servoer til Arduino-kortet finnes det en rekke løsninger. Den mest kanoniske er Sensors Shield. Ved å installere den på Uno og levere strøm til terminalene for servoene, kan du koble kontaktene direkte til den.
En annen viktig sak er ernæring. Hvis du har et avansert brett som lar deg forsyne hele systemet gjennom én kraftlinje (og servomotorene vil ikke forstyrre driften av kontrolleren), så kan du klare deg med én kilde. Utvalget er stort, best av alt, selvfølgelig, Li-Ion / Li-Po-briketter for radiomodeller. Men de trenger også passende ladere. Hvis du har en enklere kontroller (Uno / Due / Nano), så kan du strømme den separat, for eksempel med en 9-volts Krona, og koble servoene til det kraftige hovedbatteriet. Så servoene vil definitivt ha nok kraft. Når det gjelder litiumbatterier, må du overvåke spenningen enda mer nøye enn vanlig, slik at det ikke er overutladning (tillatte spenninger bør avklares for en bestemt type batteri). For å gjøre dette skrus også et lite digitalt voltmeter på Sleipnir-roboten, som vil bli diskutert videre.
Totalt: 2035 s.
DmitryDzz: Jeg vil invitere deg til å lage en liten fjernstyrt seksbeint robotbille basert på Arduino Uno-kontrolleren. Potene vil ha én frihetsgrad, kontrollen vil foregå ved hjelp av en konvensjonell TV-fjernkontroll.
Jeg må si at dette er prisene på dyre Moskva-butikker. I kinesiske nettbutikker vil alt dette koste to ganger billigere. Vurderer frakt. Det er sant at du må vente, etter min erfaring, fra to uker til tre måneder.
En enklere måte er å ta et konstruktørsett, fordi i de første trinnene vil ikke én kontroller være nok. Nå tilbyr mange butikker slike sett. For eksempel er det en fantastisk nettbutikk "Amperka". Her vil du bli tilbudt flere lignende designere, forskjellige i fylde og selvfølgelig i pris. Det enkleste var nok for meg - "Matryoshka X". Den inkluderer en Arduino Uno-kontroller, en USB-kabel for tilkobling til en datamaskin, et prototyping-kort (en uunnværlig ting!), et sett med jumpere, lysdioder, motstander og andre småtterier.
I samme butikk er det en "Wiki"-seksjon, hvor du til og med finner fantastiske korte videoopplæringer oversatt til russisk. Sørg for å sjekke dem ut. Og selvfølgelig er det et forum hvor de sannsynligvis vil prøve å hjelpe deg.
Dette trenger du av verktøyene:
Hvis du har alt, la oss komme i gang!
La oss gå videre til det første trinnet: vi må lære å samhandle med fjernkontrollen og finne ut kodene for å trykke på noen av knappene. Disse kodene vil da være nyttige for robotkontrollskissen.
På dette stadiet vil du også trenge en IR-mottaker, og det ville være fint å ha et prototypingbrett. De aller fleste IR-fjernkontroller opererer ved bærefrekvenser på 36 kHz, 38 kHz eller 40 kHz (Panasonic, Sony). Unntakene er Sharp (56 kHz), Bang & Olufsen (455 kHz), og kanskje noen andre mer eksotiske. Derfor passer enhver IR-mottaker på 36, 38 eller 40 kHz ganske godt for oss. Frekvensen samsvarer kanskje ikke nøyaktig med bærefrekvensen til signalet. I dette tilfellet vil følsomheten til mottakeren avta, men i praksis merket jeg ikke noe ubehag ved å bruke TSOP2136 IR-mottakeren (36 kHz - de to siste sifrene - frekvens) og Sony-fjernkontrollen (40 kHz).
Så IR-mottakere TSOP21xx, TSOP22xx, TSOP312xx passer for de fleste fjernkontroller. De to siste sifrene kan være 36, 37, 38 eller 40. Før du slår på IR-mottakeren, sjekk pinouten til pinnene - det er bare tre av dem: + 5V (strøm), GND (jord), Vs (utgang) . La oss sette sammen kretsen, som i illustrasjonen (kabling for TSOP2136).
Som du kan se, koblet vi utgangen til IR-mottakeren til den analoge inngangen til A0-kontrolleren.
Slik ser skissekoden ut:
#include "IRremote.h" // Analog inngang til kontrolleren // som IR-mottakeren er koblet til: const int IR_PIN = A0; // Lag et IR-mottakerobjekt: IRrecv irrecv(IR_PIN); void setup() ( Serial.begin(9600); Serial.println("klar"); // Begynn å lytte til IR-signaler: irrecv.enableIRIn(); ) void loop() ( // Beskriv strukturresultatene, / / hvor // mottatt og dekodet // IR-kommandoer vil bli plassert: decode_results results; // Hvis IR-kommandoen er akseptert og // vellykket dekodet, må du sende // den mottatte koden til // serieporten til kontrolleren: if ( irrecv.decode (&results)) ( Serial.println(results.value); irrecv.resume(); ) )
Skissen bruker et spesielt bibliotek IRremote.h, som dekoder signalene til ulike IR-fjernkontroller. Dette biblioteket er et åpent prosjekt, du kan laste det ned fra https://github.com/shirriff/Arduino-IRremote. Og for å koble den til prosjektet vårt, må du utføre tre trinn:
Nå vil IR-dekodingsfunksjonene være tilgjengelige i skissen. Men for å se de resulterende kodene, vil vi fortsatt bruke serieobjektet. Med dens hjelp, via den serielle porten (samme USB-kabel), vil vi overføre kodene til datamaskinen. I oppsettfunksjonen initialiserer vi serieobjektet. "9600" er 9600 baud - hastigheten som vil bli brukt for dataoverføring. Etter initialisering kan vi skrive til serieporten ved å bruke println-funksjonen. For å se resultatet av denne utgangen på datamaskinen i Arduino IDE, velg menyelementet Verktøy → Serial Monitor (Ctrl + Shift + M). Bare sørg for at den er satt til 9600 baud.
Så kontrolleren mottar strøm via en USB-kabel, og overfører data via den. Vi laster inn skissen, starter seriemonitoren og begynner å trykke på knappene på fjernkontrollen. Koder skal vises i vinduet Serial Monitor. Fjernkontrollprotokoller er forskjellige, noen ganger kan det være én kode, noen ganger flere. Uansett kan du alltid tildele koder som er unike for hver knapp på fjernkontrollen.
Vi trenger 13 fjernkontrollknapper. Jeg brukte følgende:
Skriv ned kodene for disse knappene, du trenger dem senere for robotkontrollskissen.
Robotkontrollskissen er tilgjengelig på vår prosjektside (bit.ly/1dEwNDC). Ikke glem å endre verdiene til konstantene til kodene til de trykket fjernkontrollknappene til kodene til fjernkontrollen (IR_COMMAND_XXX_CODES-konstantene i filen ir_command_codes.h).
Vi vil ikke analysere skissen i detalj, jeg tror kommentarer i koden er nok, men ett spørsmål er likevel verdt å vurdere.
Insekts bevegelser er veldig interessante. Og selv om alle disse billene faller veldig nær bakken, er de av en eller annen grunn alltid stabile: til enhver tid står minst tre ben (to på den ene siden og en på den andre) på overflaten. Og mens disse bena trekker billen mot et av dens drevne mål, trekkes de tre andre opp for å gjenta denne bevegelsen. Målet vårt er å gjøre noe lignende.
Vår robotbug har tre servomotorer arrangert på rad vinkelrett på bevegelsen. For venstre og høyre servomotor er akselaksen rettet oppover, og for den sentrale er den fremover. Oppgaven til venstre servo er for eksempel å pumpe to ben på en gang: venstre foran og venstre bak. Forresten, de er stivt sammenkoblet og limt til vippen til denne servoen. Oppgaven til den sentrale servoen er å løfte venstre side av billen, deretter høyre. Derfor er de sentrale venstre og høyre bena festet til vippen til denne motoren, som er en enkelt U-formet del.
Skissen skal sikre at roboten beveger seg fremover, bakover, jevne svinger i bevegelse og svinger på plass. Og jeg vil også gjerne kontrollere hastigheten til billen. For å beskrive disse bevegelsene programmatisk trenger vi matematikk. Se på diagrammet.
De blå sirklene indikerer bena til robotbillen som står på overflaten, og de hvite sirklene er de i luften. Vær oppmerksom på at når du beveger deg fremover eller bakover, må venstre og høyre servomotor bevege seg nøyaktig samme vei. Og når de snur på plass, skal motorene snurre i forskjellige retninger (symmetrisk). Det er også interessant at forover- og bakoverbevegelsen bare skiller seg i fasen av den sentrale servomotoren.
Så hvordan implementeres det? Vi husker at kontrolleren hele tiden kaller loop-funksjonen. Så, i denne funksjonen må vi sette koden som bestemmer den nåværende posisjonen til servoene og setter dem til denne posisjonen. Hver servomotor må oscillere. Vi kan beregne posisjonen til servomotoren på tidspunktet t ved å bruke følgende formel:
X = A sin(2πt/T),
hvor X er den ønskede posisjonen til servomotoren, A er oscillasjonsamplituden, T er oscillasjonsperioden.
Så, avhengig av tidspunktet t, vil vi få en endring i verdien av X i området fra -A til +A. Servomotorene kan ta stilling i området fra 0 til 180°. Derfor er det bedre for oss å svinge rundt "null" -posisjonen ved 90 °. Og hvis vi ønsker å gi oscillasjoner med en periode på 1 s rundt posisjonen 90 ° med en amplitude på 30 °, blir formelen konvertert til følgende form:
X = 90 + 30 sin(2πt/1000),
der t er tiden i millisekunder siden starten av svingningen. For å kontrollere hastigheten på robocall, kan vi endre oscillasjonsperioden. Jo større den er, jo lavere hastighet.
Og la oss nå gå tilbake til ordningen vår igjen, fordi formelen skrevet ovenfor er ennå ikke fullført. Hvordan sikre at den synkrone, så motsatt bevegelse av venstre og høyre servomotor? Hvordan endre fasen til den sentrale servomotoren? Vi må legge til oscillasjonsfasen til formelen vår. Forskyvning av sinusargumentet med π for for eksempel høyre motor vil få den til å fungere i motfase til den venstre, det vil si måten vi må svinge på plass. Slik ser formelen vår ut nå:
X = 90 + 30 sin(2πt/1000 + Φ),
hvor Φ er fasen til svingningene, er verdien fra 0 til 2π.
Se på tabellen for å forstå hva oscillasjonsfasene til servomotorene skal være for hver type bevegelse.
La oss nå sette sammen roboten på prototypebrettet og fylle ut kontrollskissen.
Dette er et veldig viktig trinn før montering. Prøv å koble fra USB-kabelen og få strøm til oppsettet fra Krona-batteriet. Sjekk alle faser av bevegelsen og sørg for at alt fungerer. Etter å ha satt sammen roboten, vil det være vanskeligere å endre noe (for eksempel å erstatte en ødelagt servomotor).
La oss nå gå videre til selve forsamlingen. Hovedlagerelementet er batterirommet. Jeg anbefaler deg å bruke et lukket rom og alltid med en bryter.
Den enkleste måten å fikse detaljene til billen på er med varmt lim. Start med servomotorer. Fjern unødvendige festeører og koble bilene sammen. Lim deretter denne sammenstillingen av tre "servoer" til batteridekselet. Ikke glem at batterirommet må åpnes fritt for å skifte batteri.
Den enkleste måten er å lime kontrolleren til bukten, men jeg liker egentlig ikke dette alternativet, siden jeg må gi Arduino Uno til feilen for alltid. Derfor kan du komplisere livet ditt og bruke Arduino-kontaktene til å feste batterirommet. Lim en pinnekobling på bunnen av rommet med en stigning på 2,54 mm mellom pinnene. Den skal plasseres slik at den går inn i kontrollerkontakten i området for digitale utganger 8-11. Vi trenger dem fortsatt ikke uansett. Hvis kontakten ikke er for hånden, vil en U-formet buet binders gjøre det.
Ledningene som kommer fra batterirommet må kobles til Vin-terminalene og GND ved siden av. Ikke snu polariteten! Pluss «Krona» på Vin, minus på GND. For å sikre pålitelig kontakt av ledningene med Arduino-kontaktene, kan du ganske enkelt tinne tuppen av ledningen tykkere, men jeg brukte en kort binders som en plugg. Og stedet for lodding ble lukket med varmekrympeslange.
Kontaktene fra servokablene skal kuttes, strømledningene (+5 V - vanligvis rød og GND - svart eller brun) skal kombineres og kobles til 5V-kontaktene og den tilstøtende GND på kontrolleren. Vi kobler til litt senere. Styresignalledningene (vanligvis gule) sendes ut til de digitale utgangene til kontrolleren: venstre servomotor er på pinne 2, den midtre er på pinne 4, den høyre er på pinne 7.
"+" og "-" til IR-mottakeren kan ganske enkelt kobles til Arduino-kontakten (5V og tilstøtende GND). Det er sant at de bøyer seg i to og dobler tykkelsen. Vi lodder de tidligere tilkoblede strømledningene til servomotorene til de samme kraftbenene til IR-mottakeren. Det er usannsynlig at signalutgangen til IR-mottakeren når den analoge inngangen til A0-kontrolleren, og du må øke den med en ledning.
Noen tips for å lage ben. Forbered først venstre og høyre "front-back" ben. Pass på at de er symmetriske (vær oppmerksom på både lengdene og vinklene på bøyene). Start liming av bena først etter å ha kontrollert at servomotorene er satt til "null"-posisjon (90°).
Plasser det midterste benparet sist. Jeg anbefaler deg å først gjøre de midterste bena lengre, og deretter etter installasjonen, kutte dem til ønsket lengde. I "null"-posisjon skal alle seks føttene være på overflaten. Rullingen av de midtre bena med en amplitude på 15° skal ikke forstyrre svingene foran og bak.
Robobug er en ferdig mobilplattform basert på en av de mest populære og rimelige kontrollerene. Prosjektet er åpent: https://github.com/beetle-ringo/arduino . Lag en gaffel (gren) i GitHub og legg til funksjonaliteten din. La fantasien løpe løpsk - legg til en IR-LED og roboten er klar for robotkamp. Koble til avstandsmålere, taktile sensorer, et gyroskop... Lær roboten å omgå hindringer eller gå langs en linje, prøv å installere et webkamera på den. Det kan være en million ideer, og du kan alltid velge den mest interessante.
Totalt: 4710 r.
*Komponenter ble kjøpt på forskjellige tidspunkter og mange posisjoner kan optimaliseres
poconoco: La oss prøve å sette sammen en ikke-standard konfigurasjon - en åttebent 2DOF-robot. 2DOF-ben er mye lettere å programmere, pluss at jeg har en haug med ubrukte servoer på lager. Og viktigst av alt, det vil være mulig å navngi den til ære for den åttebeinte hesten til guden Odin Sleipnir (alltid drømt om!).
Vår Sleipnir vil ha fire ben med to hengsler på hver side. Hvert ledd er en servo, så åtte servoer per side. For enkelhets skyld vil alle åtte hengslene på den ene siden av hesten rotere i samme plan. Selv om dette slett ikke er nødvendig. Dessuten, hvis bena på den ene siden legges i litt "sjakk" slik at to tilstøtende ben ikke kan berøre hverandre, vil det bli enda bedre, det vil tillate deg å ta et bredere skritt og galoppere.
En ryddig og funksjonell, men langt fra den billigste løsningen er å bruke et ikke-standard kontrollerkort, optimalisert for tilkobling av servoer i stort antall. Jeg kom over en Dagu Spider Robot Controller - dette er den samme Arduino Mega, men på et brett med forhåndsloddede 3-pinners pin-kontakter, hvor du umiddelbart kan koble til de samme 48 servoene uten noen skjold. Ideell for flerbeinte Arduino-roboter.
Vi vil bli kontrollert via Bluetooth. Det finnes ulike maskinvareløsninger for dette. Dette er skjold og separate skjerf med et UART-seriegrensesnitt (som en vanlig com-port, bare med 5 V-signalnivåer). Det virket som det mest praktiske for meg var et lite skjerf med et UART-grensesnitt. Kobles til de tilsvarende UART/Serielle pinnene på Arduino-porten. Vi legger merke til to nyanser: det er bare én slik port på Uno / Due / Nano og lignende, og den brukes også til å blinke via USB. Derfor kan det hende du må slå av Bluetooth-modulen under fastvaren. Og den andre nyansen - ikke glem at RX-pinnen til modulen er koblet til TX-pinnen til Arduino, og TX - til RX. Slike ting er i UART.
Bluetooth-programmering er ikke vanskeligere enn servoer, data kan leses byte for byte, som vi vil bruke:
Charcmd; Serial.begin(9600); if (Serial.available()) cmd = Serial.read();
Hvis Arduino Mega brukes og Bluetooth er koblet til den andre porten, skrives Serial1 i stedet for Serial. Det er bemerkelsesverdig at du ikke kan bruke Bluetooth, men styre roboten direkte via USB. Og ingenting vil endre seg i koden ovenfor! Det er bare å jobbe med en seriell port, og om en BT-sender eller en USB-serieomformer henger der – det spiller ingen rolle for oss.
Den mest praktiske måten å koble til er gjennom standard Linux-verktøy. For å fungere trenger vi sdptool, rfcomm-verktøyene (inkludert i bluez-pakken i Ubuntu-lagrene), samt minicom (pakken heter det). Instruksjoner for bruk av disse verktøyene finnes på nettet.
For en hexapod vil den enkleste gangarten være dette: bena er delt inn i to grupper på tre ben, og en av gruppene er helt på bakken, den andre er i luften, omorganisert fremover. Dette er langt fra den eneste mulige gangarten. Du kan bare holde to poter i luften, eller til og med én, og de resterende fire eller fem på bakken. For en oktapod er det også mange gangarter. Vi tar det enkleste, også med to grupper på fire ben.
Så hva må vi gjøre for å jobbe med 16 servoer og en valgt gangart? Riktig svar er å lese om invers kinematikk (IK). Volumet av artikkelen tillater ikke å utvide emnet bredt, men det er rikelig med materiale på Internett. Kort fortalt løser IR problemet med å finne de nødvendige styresignalene for at systemet skal ta ønsket posisjon i rommet. For beinet betyr dette at i henhold til koordinatene til punktet der foten skal treffe, er det nødvendig å bestemme vinklene til servoene som må stilles inn for dette. Og ved å kontrollere koordinatene til føttene kan du kontrollere kroppens posisjon. Vi har 2DOF ben, aksene er parallelle, så foten beveger seg alltid i samme plan. IR-problemet i dette tilfellet er redusert til et 2D-rom, noe som i stor grad forenkler det.
La for hvert ben den lokale opprinnelsen O være skaftet til den øvre servoen, det vil si låret. Og vi har koordinatene til punkt A, der foten må treffe. Da er det lett å se at det er nødvendig å løse problemet med å finne skjæringspunktene til to sirkler (se diagrammet over bena på den ene siden, dette er illustrert der på det høyre benet). Etter å ha funnet punktet B for skjæringspunktet mellom sirklene (velge noen av dem), er det enkelt å beregne de ønskede vinklene ved å bruke konverteringen fra kartesiske koordinater til polare. I kode ser løsningen på dette problemet slik ut:
Float A = -2*x; flyte B = -2 * y; float C = sqr(x) + sqr(y) + sqr(hipLength) - sqr(shinLength); float X0 = -A * C / (sqr(A) + sqr(B)); flyte Y0 = -B * C / (sqr(A) + sqr(B)); float D = sqrt(sqr(hipLength) - (sqr(C) / (sqr(A) + sqr(B)))); float mult = sqrt(sqr(D) / (sqr(A) + sqr(B))); flytøks, ay, bx, by; ax = X0 + B*mult; bx = X0 - B*mult; ay = Y0 - A*mult; ved = Y0 + A*mult; // eller bx for et annet skjæringspunkt float jointLocalX = ax; // eller ved for et annet skjæringspunkt float jointLocalY = ay; float hipPrimaryAngle = polarAngle(jointLocalX, jointLocalY); float hipAngle = hipPrimaryAngle - hipStartAngle; float shinPrimaryAngle = polarAngle(x - jointLocalX, y - jointLocalY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;
hvor x og y er koordinatene til punktet der du må nå med foten; hipStartAngle - vinkelen som "hoften" først dreies med (med servoen i midtposisjon), på samme måte - shinStartAngle. Forresten, i disse beregningene er vinklene åpenbart i radianer, og de må overføres til Servo-objekter allerede i grader. Den fullstendige fastvarekoden, inkludert denne delen, er lagt ut på GitHub, se lenken på slutten av artikkelen. Dette er en del av IC, men i tillegg trenger du en ganske enkel kode for å bruke denne IC på alle ben (se legsReachTo(), legWrite()-funksjoner). Du vil også trenge kode som faktisk implementerer gangarten - bevegelsen av en gruppe ben "tilbake" (slik at roboten beveger seg fremover), mens den andre gruppen med ben stiger og beveger seg fremover for neste trinn, se trinnet Fremover () funksjon. Hun tar ett steg med de gitte parameterne. Disse parameterne kan forresten ta et skritt tilbake, til tross for navnet på funksjonen. Hvis denne funksjonen kalles i en loop, vil roboten gå frem.
Mottar nå kommandoer og deres tolkning. La oss legge til en tilstand i programmet:
Enum State (STOPP, FORWARD, BACKWARD, FORWARD_RIGHT, FORWARD_LEFT );
Og i hovedloopen()-utførelsesløkken vil vi se på gjeldende tilstand (tilstandsvariabel) og trekke stepForward() hvis vi beveger oss fremover (med eller uten rotasjon), og igjen stepForward(), men med et negativt xamp-argument , hvis vi trenger å gå bakover . Svinger vil da bli håndtert i legWrite(), og for en høyresving vil bena på høyre side stå stille (mens venstre rader). Her er en slik hestetank. Brutalt, men veldig enkelt og fungerer. Jevn vending kan bare gjøres med 3DOF-ben, et eksempel på dette kan sees i buggybug-repoen.
Switch (state) ( case FORWARD: case FORWARD_RIGHT: case FORWARD_LEFT: stepForward(h, dh, xamp, xshift); break; case BACKWARD: stepForward(h, dh, - xamp, xshift); break; )
Char kommando; while (Serial1.available()) kommando = Serial1.read(); bryter (kommando) ( case "w": state = FORWARD; break; case "s": state = BACKWARD; break; case "d": state = FORWARD_RIGHT; break; case "a": state = FORWARD_LEFT; break; default : tilstand = STOPP; )
På dette er hovedpunktene til fastvaren over, resten er små ting. Selv om det er enda et, kanskje viktig poeng - muligheten til å finjustere servoene. Selv med den mest forsiktige monteringen, hvis alle servoene blir kommandert til å dreie 90°, vil noen av dem fortsatt vise seg å være litt forskjøvet. Det er derfor du må kunne tilpasse den. Du kan se hvordan jeg gjorde det i hipsWrite()- og shinsWrite()-metodene og i hipsTune og shinsTune finjusteringsmatrisene.
For slike strukturer er det ikke nødvendig med noe spesielt: et ark med plexiglass av passende tykkelse (fra nærmeste husholdningsloppemarked) og en stikksag eller baufil vil gjøre for å kutte ut detaljene. Og selvfølgelig en drill for å bore hull. I stedet for pleksiglass kan du bruke kryssfiner (da kan du fortsatt lage en minneinnskrift på det endelige designet med en brenner). Aluminiumsplater eller hjørner kan også brukes. Med Sleipnir gikk jeg akkurat veien til å bruke et aluminiumshjørne med 1 cm ribber (jeg kjøpte det et sted i et jernvaresupermarked).
Basen vil være en rektangulær ramme. Lemmer - 4-centimeter striper. Det er også verdt å fylle opp med mange små bolter, muttere. Vi kutter hjørnet i de nødvendige stykkene, kutter ut spor for servoer, borer hull for montering av bolter og skruer. Designet er bedre å vise enn å beskrive. Størrelsene kan være alle, roboter bør være forskjellige. Men husk: jo lengre bena er, jo mer kraft må servoen presse og jo større belastning på den. Opp til umuligheten å snu og til og med brekke. Men 4–5 cm er ikke noe problem.
For budsjett-lette roboter plager de ofte ikke med en separat svinging av lemmene, og hele lasten faller helt på servoakselen. Med en liten vekt er dette slett ikke kritisk. Og med mer vekt bør du tenke på servoer med metallgir og kulelageraksel.
Hver servo kommer vanligvis med et par skruer og et sett med bits som kan skrus på akselen for en rekke bruksområder. Et enkelt "horn" (eller horn) passer best for oss, som lar deg feste en stang til servoen. Så aksene til to servoer er festet til en stang, og stangen blir et "lår". I dette tilfellet er en server festet til kroppen, og den andre blir en del av underbenet. Det er verdt å skru en annen stang til den, bare for å forlenge eller gjøre lemmen mer interessant. Litt hardt arbeid - og plattformen er klar (hendige sett med skrutrekkere, skiftenøkler, pinsett, wirekuttere osv. fremskynder prosessen betraktelig).
Hele prosjektet er tilgjengelig på https://github.com/poconoco/sleipnir. Jeg beskrev en av de mest upraktiske konfigurasjonene - mange 2DOF-ben, høye, smale, faller lett på siden. Prøv å lage en bedre robot med 3DOF-ben. Med 4DOF ben. Med klør eller kjever. Som et eksempel på 3DOF invers kinematikk, kan du referere til buggybug-depotet - det er en hexapod-fastvare. Du kan også lage ikke kontrollerte, men intelligente roboter, sette avstandssensorer i stedet for Bluetooth, og lære roboten å omgå vegger og hindringer. Hvis du setter en slik sensor på en servodrive og roterer den, så kan du skanne området, nesten som et ekkolodd.
Hallo. Denne artikkelen er en kort historie om hvordan gjøre robot deres hender. Hvorfor en historie, spør du? Alt på grunn av det faktum at for fremstilling av slike håndverk det er nødvendig å bruke en betydelig mengde kunnskap, som er svært vanskelig å presentere i en artikkel. Vi vil gå gjennom byggeprosessen, ta en titt på koden, og til slutt bringe skapelsen av Silicon Valley til live. Jeg anbefaler deg å se videoen for å få en ide om hva som skal skje til slutt.
Før du går videre, vær oppmerksom på følgende, at i produksjonen håndverk brukte en laserskjærer. Du kan nekte en laserskjærer hvis du har tilstrekkelig erfaring med å arbeide med hendene. Nøyaktighet er nøkkelen til å fullføre et prosjekt vellykket!
Roboten har 4 ben, med 3 servoer på hver av dem, som lar den bevege lemmene sine i 3 frihetsgrader. Han beveger seg med en "krypende gangart". La det være sakte, men en av de jevneste.
Først må du lære roboten å bevege seg fremover, bakover, til venstre og høyre, deretter legge til en ultralydsensor, som vil hjelpe med å oppdage hindringer / hindringer, og deretter en Bluetooth-modul, takket være hvilken robotkontrollen vil nå et nytt nivå.
Skjelett laget av plexiglass 2 mm tykt.
Den elektroniske delen av det hjemmelagde produktet vil bestå av:
For å lage et skjold trenger du:
Instrumenter:
La oss bruke et grafikkprogram til å tegne komponentdelene av skjelettet.
Etter det, på hvilken som helst tilgjengelig måte, kuttet vi ut 30 deler av den fremtidige roboten.
Etter kutting, fjern det beskyttende papirbelegget fra plexiglasset.
Fortsett deretter til monteringen av bena. Festemidler innebygd i deler av skjelettet. Alt som gjenstår å gjøre er å sette sammen bitene. Forbindelsen er ganske tett, men for større pålitelighet kan du påføre en dråpe superlim på festene.
Deretter må du modifisere servoene (lim en skrue på motsatt side av servoakslene).
Med denne foredlingen vil vi gjøre roboten mer stabil. Forfiningen må bare gjøres for 8 servoer, de resterende 4 vil festes direkte til kroppen.
Vi fester bena til koblingselementet (buet del), og det på sin side til servoen på kroppen.
Å lage brettet er ganske enkelt hvis du følger bildene som presenteres i trinnet.
Fest servopinnene på arduino-kortet. Pinnene må kobles i riktig rekkefølge, ellers vil ingenting fungere!
Det er på tide å bringe Frankenstein til live. Først laster du inn legs_init-programmet og kontrollerer at roboten er i posisjonen vist på bildet. Deretter laster du inn quattro_test for å se om roboten reagerer på grunnleggende bevegelser som forover, bakover, venstre og høyre.
VIKTIG: Du må legge til et ekstra bibliotek til arduino IDE. Lenken til biblioteket er gitt nedenfor:
Roboten må ta 5 skritt fremover, 5 skritt tilbake, svinge til venstre 90 grader, svinge til høyre 90 grader. Hvis Frankenstein gjør alt riktig, beveger vi oss i riktig retning.
P. S: installer roboten på koppen som et stativ, slik at den hver gang ikke setter den til det opprinnelige punktet. Når testene har vist normal drift av roboten, kan vi fortsette å teste ved å plassere den på bakken/etasjen.
Invers kinematikk er det som faktisk styrer roboten (hvis du ikke er interessert i den matematiske siden av dette prosjektet og du har det travelt med å fullføre prosjektet, kan du hoppe over dette trinnet, men å vite hva som driver roboten vil alltid være nyttig).
Med enkle ord, invers kinematikk eller IK for kort er "delen" av de trigonometriske ligningene som bestemmer posisjonen til den skarpe enden av beinet, vinkelen til hver servo osv., som til slutt bestemmer et par foreløpige innstillinger. For eksempel lengden på hvert trinn av roboten eller høyden som kroppen vil være plassert under bevegelse/hvile. Ved å bruke disse forhåndsdefinerte parameterne vil systemet trekke ut mengden som hver servo må flyttes med for å kontrollere roboten med gitte kommandoer.
kayabaparts.ru - Entré, kjøkken, stue. Hage. Stoler. Soverom