Indholdsfortegnelse:

Enkel Arduino Robotics Platform !: 5 trin
Enkel Arduino Robotics Platform !: 5 trin

Video: Enkel Arduino Robotics Platform !: 5 trin

Video: Enkel Arduino Robotics Platform !: 5 trin
Video: Arduino Unboxing: Original Arduino Starter Kit vs Elegoo Uno R3 Starter Kit 2024, Juli
Anonim
Enkel Arduino Robotics Platform!
Enkel Arduino Robotics Platform!
Enkel Arduino Robotics Platform!
Enkel Arduino Robotics Platform!

Jeg fik lige en Arduino efter at have leget med nogle AVR -mikrokontrollere under Robotics -teammøder. Jeg kunne godt lide tanken om en virkelig billig programmerbar chip, der kunne køre næsten alt fra en simpel computergrænseflade, så jeg fik en Arduino, fordi den allerede har et flot bord og USB -interface. Til mit første Arduino -projekt gravede jeg et Vex Robotics -kit op, jeg havde liggende fra nogle konkurrencer, jeg lavede i gymnasiet. Jeg havde altid ønsket at lave en computerdrevet robotplatform, men Vex -mikrokontrolleren kræver et programmeringskabel, som jeg ikke havde. Jeg besluttede at bruge min nye Arduino (og måske senere en nøgen AVR -chip, hvis jeg får den til at fungere) til at køre platformen. Til sidst vil jeg få en netbook, og så kan jeg køre robotten ved hjælp af WiFi og se sit webcam eksternt.

Det lykkedes mig at få en anstændig seriel protokol og et simpelt eksempel, der driver robotten ved hjælp af en Xbox 360 -controller forbundet til en Linux -pc.

Trin 1: Hvad det kan gøre …

Hvad det kan gøre…
Hvad det kan gøre…
Hvad det kan gøre…
Hvad det kan gøre…

Arduino er en meget alsidig platform. Mit grundlæggende mål var bare at få Arduino til at interface to Vex -motorer til pc'en, men jeg havde en masse resterende input/output -pins og besluttede at tilføje nogle ekstra ting. Lige nu har jeg en RGB LED for seriel portstatus (grøn, hvis pakkerne er gode, røde hvis de er dårlige) og en pc -ventilator drevet af en transistor. Jeg kan også tilføje kontakter og sensorer, men jeg har ikke lagt nogen af dem på det endnu. Det bedste ved det er, at du kan tilføje, hvad du vil til en Arduino -robot. Det kræver kun en lille smule interfacekode at styre ekstra ting og få input til computeren.

Trin 2: Dele

Dele
Dele
Dele
Dele
Dele
Dele

Til min robot brugte jeg et par forskellige dele. De fleste dele var fra gamle ting, jeg havde lagt rundt i min kælder. 1) Arduino Duemilanove w/ ATMega328Dette er den nyeste Arduino, og siden jeg lige fik den for et par dage siden, har jeg den nyeste. Koden er dog lille nok til, at den let kan passe på enhver Arduino. Det kunne sandsynligvis endda passe på en ATTiny (hvis jeg bygger en robotcontroller bortset fra Arduino, ligner ATTiny 2313 et godt valg, den er mindre og billigere, men har stadig masser af output og et serielt UART -interface) 2) Vex Robotics PlatformI fik et Vex kit for et par år siden til at bygge en radiostyret robot til at hente ting til en gymnasiekonkurrence. Jeg konstruerede den grundlæggende "square bot" base, der har 4 hjul drevet af to motorer. Du kan erstatte andre robotbaser, hvis du har en anden platform, du vil køre. Den vigtige ting at bemærke er, at Vex-motorer i det væsentlige er servoer med kontinuerlig rotation, de bruger pulsbreddemodulation til at signalere, hvor hurtigt og i hvilken retning de skal dreje. Vex -motorerne er pæne, fordi de har en høj række spændinger, et sted mellem 5 og 15 volt. Jeg bruger 12V, fordi jeg havde et 12V batteri. For de fleste standard hobbyservoer skal du bruge en lavere spænding (ofte 6 volt). 3) Batteri En robot er ubrugelig uden strømforsyning. Til test bruger jeg en standard 9V væg-vorte adapter fra RadioShack, men til trådløs drift fandt jeg en 12V NiMH batteripakke i en gammel bærbar computer. Selvom den ikke holder nok til at køre den bærbare computer, driver den min Vex -robot fint. Det kan også forsyne Arduino ved hjælp af Vin -indgangsstiften på strømstikket, Arduino vil regulere 12V ned til 5 og endda udsende den for 5V -udgangsstiften på strømstikket. 4) Grundlæggende brødbræt Jeg bruger i øjeblikket et brødbræt til tilslut alt. Til sidst får jeg et pænere prototypebræt og loddemetal på nogle mere permanente forbindelser, men i øjeblikket gør brødbrættet det let at ændre ting. Mit brødbræt er SparkFuns "basic breadboard", bare et brødbræt på en metalplade med 3 terminaler. 5) MAX232-baseret RS232-TTL-konverter Hvis du vil køre din robot ved hjælp af en RS-232 seriel portforbindelse (i modsætning til Arduino's bygget i USB) kan du bruge en RS232-TTL-konverter. Jeg bruger en MAX232, fordi jeg havde et par af dem liggende, og jeg loddet det på et lille stykke prototypebord med de nødvendige kondensatorer. Jeg har brug for RS-232, fordi min gamle bærbare computer kun har en USB-port, og jeg bruger den til en spilcontroller til at køre robotten. fik en med min Arduino -ordre, fordi de lød seje). Lyset blinker rødt, grønt, blåt i rækkefølge, når Arduino starter op for at vise, at robotten har genstartet og derefter lyser grønt, når en motorpakke er blevet modtaget, Blå, når en fanpakke er modtaget, og rød, når en dårlig eller ukendt pakke er modtaget. Til at drive blæseren brugte jeg en standard NPN -transistor (de samme som jeg demonstrerede i min sidste instruerbare) og en modstand mellem transistoren og Arduino (transistoren trak for meget strøm og opvarmede Arduino, så jeg satte en begrænsning modstand ind for at stoppe det).

Trin 3: Arduino og pc -programmering

Arduino og pc -programmering
Arduino og pc -programmering

For at programmere Arduino skal du naturligvis bruge Arduino -softwaren og et USB -kabel. Du kan også programmere Arduino ved hjælp af en seriel port og en TTL -niveauomformer, hvis din pc har en seriel port. Bemærk, at den serielle USB -grænseflade ikke kommunikerer med Arduino's ATMega -processor, hvis der er en niveauomformer tilsluttet Arduinos serielle ben (ben 0 og 1), så afbryd den, før du bruger USB. På Arduino skal vi bruge en seriel grænseflade, der tillader PC til at styre motorerne. Vi skal også bruge et PWM servodrevsystem til at sende de korrekte signaler til Vex -motorerne og sikre, at de går i de rigtige retninger, når de får de rigtige værdier. Jeg tilføjede også nogle enkle LED -blinkende, hovedsageligt for statusindikation, men også fordi det ser cool ud. På pc'en skal vi åbne den serielle port og sende datarammer, som Arduino -programmet vil forstå. PC'en skal også komme med motorværdier. En let måde at gøre dette på er at bruge en USB -spillepude eller joystick, jeg bruger en Xbox 360 -controller. En anden mulighed er at bruge en netværkscomputer (enten en netbook eller et lille mini ITX -kort) på selve robotten til at køre trådløst. Med en netbook kan du endda bruge det indbyggede webcam til at streame et videofeed tilbage og køre din robot eksternt. Jeg brugte Linux -sockets -systemet til at lave netværksprogrammering til min opsætning. Et program ("joystick -serveren") køres på en separat pc, der har en controller tilsluttet, og et andet program ("klienten") køres på netbook'en, der er forbundet til Arduino. Dette forbinder de to computere og sender joystick -oplysninger til netbook, som derefter sender serielle pakker til Arduino, der driver robotten. For at oprette forbindelse til Arduino ved hjælp af en Linux -pc (i C ++) skal du først åbne den serielle port på den korrekte baudrate og send derefter værdierne ved hjælp af en protokol, som du også har brugt på Arduino's kode. Mit serieformat er enkelt og effektivt. Jeg bruger 4 bytes pr. "Frame" til at sende de to motorhastigheder (hver er en enkelt byte). Den første og sidste byte er hårdkodede værdier, der bruges til at forhindre Arduino i at sende den forkerte byte til PWM-koden og få motorerne til at gå amok. Dette er det primære formål med RGB LED, den blinker rødt, når den serielle ramme var ufuldstændig. De 4 bytes er som følger: 255 (hårdt kodet "start" -byte),,, 200 (hårdt kodet "slut" -byte) For at sikre pålidelig modtagelse af dataene skal du sørge for at lægge tilstrækkelig forsinkelse mellem programsløjfer. Hvis du kører din pc-kode for hurtigt, vil den oversvømme porten, og Arduino kan begynde at tabe eller endda læse fejl forkert. Selvom den ikke taber oplysninger, kan den også flyde over Arduinos serielle portbuffer. Til Vex -motorerne brugte jeg Arduino Servo -biblioteket. Da Vex -motorer bare er kontinuerlige rotationsmotorer, bruger de nøjagtig samme signalering, som servoer bruger. Men i stedet for at 90 grader er midtpunktet, er det stoppunktet, hvor motoren ikke drejer. Sænkning af "vinklen" får motoren til at begynde at dreje i den ene retning, mens den øger vinklen får den til at dreje i den anden retning. Jo længere væk fra midten, du er, jo hurtigere vil motoren dreje. Selvom det ikke vil bryde noget, hvis du sender værdier større end 180 grader til motorerne, vil jeg råde dig til at begrænse værdierne fra 0 til 180 grader (som i dette tilfælde er hastighedsforøgelser). Fordi jeg ville have mere kontrol og mindre ude af kontrol robotkørsel, tilføjede jeg en software "hastighedsgrænse" til mit program, der ikke tillader hastigheden at stige over 30 "grader" i begge retninger (område er 90 +/- 30). Jeg planlægger at tilføje en seriel portkommando, der ændrer hastighedsgrænsen, så computeren kan fjerne grænsen i farten, hvis du vil gå hurtigt (jeg har testet i små rum, så jeg vil ikke have, at den skal fremskynde og styrter ind i væggen, især med en netbook på). For flere oplysninger, download den vedhæftede kode i slutningen af denne instruktionsbog.

Trin 4: Tilføj en netbook for at udforske ukendte verdener på afstand

Tilføj en netbook for at udforske ukendte verdener på afstand
Tilføj en netbook for at udforske ukendte verdener på afstand
Tilføj en netbook for at udforske ukendte verdener på afstand
Tilføj en netbook for at udforske ukendte verdener på afstand

Med en fuld pc ombord på din Arduino -robot kan du køre din robot så langt som din WiFi kan nå uden ledninger for at begrænse robotten til et område. En god kandidat til dette job er en netbook, fordi netbooks er små, lette, har et indbygget batteri, har WiFi og de fleste endda har indbygget webkameraer, der kan bruges til at streame robotens udsigt tilbage til et sikkert sted, hvor du kan styre det. Hvis din netbook også er udstyret med mobil bredbåndstjeneste, er dit område praktisk talt ubegrænset. Med nok batterier kan du køre din robot til det lokale pizza -sted og afgive en ordre over webkameraet (anbefales ikke, robotter er normalt ikke tilladt på pizza -steder, selvom det var mennesker, der sandsynligvis vil prøve at stjæle robotten og måske selv pizzaen). Det kan også være en god måde at udforske den mørke dybde i din kælder fra din kontorstol, selvom tilføjelse af nogle forlygter kan være meget nyttigt i dette tilfælde.

Der er mange måder at få dette til at fungere, mange er sandsynligvis meget lettere end mine, selvom jeg ikke er fortrolig med Processing eller scriptbaserede sprog, så jeg valgte at bruge Linux og C ++ til at oprette et trådløst kontrolforbindelse mellem min basestation (aka gamle ThinkPad) og min nye Lenovo IdeaPad -netbook, der er forbundet til Arduino -drevbasen. Begge pc'er kører Ubuntu. Min ThinkPad er tilsluttet min skoles LAN, og min IdeaPad er forbundet til mit WiFi -adgangspunkt, der også er forbundet til skolens LAN (jeg kunne ikke få en pålidelig videostream fra skolens WiFi, da alle andre bruger det, så jeg satte op min egen router for at give en god forbindelse). En god forbindelse er især vigtig i mit tilfælde, da jeg ikke har implementeret nogen fejlkontrol eller timeout. Hvis netværksforbindelsen pludselig falder, fortsætter robotten, indtil den styrter ind i noget, eller jeg kører og stopper den. Dette er hovedfaktoren bag min beslutning om at bremse drivlinjen både ved at geare motorerne ned og implementere en software hastighedsgrænse.

Trin 5: Få et videofeed

Når din robot explorer kan køre trådløst, vil du sandsynligvis have et videofeed fra netbook, så du kan se, hvor din robot er. Hvis du bruger Ubuntu (eller selvom du ikke gør det!) Anbefaler jeg at bruge VLC Media Player til at streame. Hvis du ikke har installeret det, går du virkelig glip af det, så installer det ved hjælp af kommandoen "sudo apt-get install vlc", søg efter VLC i Ubuntu Software Center (kun 9.10), eller download installationsprogrammet på videolan. org, hvis du er på Windows. Du skal bruge VLC, der kører på begge pc'er. VLC kan både streame og afspille streams på et netværk. På netbook (robot-pc) skal du først sikre dig, at dit webcam (enten indbygget eller USB-tilsluttet) fungerer ved at klikke på Åbn Capture Device og prøve Video til Linux 2 (nogle ældre enheder kan have brug for Video til Linux i stedet for den nye 2-version). Du bør se kameraets visning på netbook -skærmen. For at streame det skal du vælge Streaming i menuen Filer og derefter vælge fanen Capture Device øverst i vinduet, der vises. Husk, at Ubuntu (og mange andre Linux distros) lader dig holde Alt nede for at klikke og trække vinduer, der er for store til din skærm (især nyttig på ældre netbooks, selvom selv min IdeaPad har en ulige 1024x576 opløsning uden nogen åbenbar grund). For at reducere forsinkelsen skal du klikke på "Vis flere muligheder" og sænke cacheværdien. Det beløb, du kan sænke det, afhænger nogle gange af enheden, det bliver ustabilt, hvis du sænker det for meget. På 300 ms kan du få en lille forsinkelse, men det er ikke så dårligt.

Klik derefter på Stream for at gå til den næste menu. Klik på Næste, vælg derefter og tilføj HTTP som en ny destination. Konfigurer nu Transcoding for at gøre strømmen mindre. Jeg lavede en brugerdefineret profil, der bruger M-JPEG ved 60kb/s og 8fps. Dette skyldes, at brug af et avanceret codec som MPEG eller Theora vil spise op af massiv CPU -tid på en netbooks Atom -processor, og dette kan føre til, at dit videofeed stopper uden nogen åbenbar grund. MJPEG er en simpel codec, der er let at bruge ved lave bitrates. Når du har startet din stream, skal du åbne VLC på din anden pc, åbne en netværksstrøm, vælge HTTP, og derefter indtaste IP -adressen på din netbook (enten lokal eller Internet afhængigt af, hvordan du opretter forbindelse) efterfulgt af ": 8080". Du skal angive porten af en eller anden underlig årsag, ellers giver det dig fejl. Hvis du har en anstændig forbindelse, skal du se dit webcams feed på din anden pc, men det vil have en lille (ca. et sekund) forsinkelse. Jeg ved ikke præcis, hvorfor denne forsinkelse opstår, men jeg kan ikke finde ud af at slippe af med den. Åbn nu kontrolappen og begynd at køre din netbook -robot. Få en fornemmelse af, hvordan forsinkelsen fungerer, når du kører, så du ikke styrter ned i noget. Hvis det virker, er din netbook -robot færdig.

Anbefalede: