Inhoudsopgave:

Eenvoudig Arduino Robotica Platform! - Ajarnpa
Eenvoudig Arduino Robotica Platform! - Ajarnpa

Video: Eenvoudig Arduino Robotica Platform! - Ajarnpa

Video: Eenvoudig Arduino Robotica Platform! - Ajarnpa
Video: Amazing arduino project 2024, Juli-
Anonim
Eenvoudig Arduino Robotica-platform!
Eenvoudig Arduino Robotica-platform!
Eenvoudig Arduino Robotica-platform!
Eenvoudig Arduino Robotica-platform!

Ik heb net een Arduino gekregen nadat ik tijdens Robotics-teamvergaderingen met wat AVR-microcontrollers had gespeeld. Ik vond het idee van een echt goedkope programmeerbare chip die zo ongeveer alles kon draaien, van een eenvoudige computerinterface leuk, dus ik kreeg een Arduino omdat deze al een mooi bord en een USB-interface heeft. Voor mijn eerste Arduino-project heb ik een Vex Robotics-kit opgegraven die ik had liggen van een aantal wedstrijden die ik op de middelbare school deed. Ik had altijd al een computergestuurd robotplatform willen maken, maar de Vex-microcontroller heeft een programmeerkabel nodig die ik niet had. Ik besloot om mijn nieuwe Arduino (en misschien later een kale AVR-chip als ik hem werkend kreeg) te gebruiken om het platform te besturen. Uiteindelijk wil ik een netbook en dan kan ik de robot besturen via wifi en de webcam op afstand bekijken.

Ik slaagde erin een fatsoenlijk serieel protocol te krijgen en een eenvoudig voorbeeld dat de robot aanstuurt met een Xbox 360-controller die is aangesloten op een Linux-pc.

Stap 1: Wat het kan doen…

Wat het kan doen…
Wat het kan doen…
Wat het kan doen…
Wat het kan doen…

De Arduino is een zeer veelzijdig platform. Mijn basisdoel was om de Arduino twee Vex-motoren op de pc te laten aansluiten, maar ik had veel overgebleven input/output-pinnen en besloot wat extra dingen toe te voegen. Op dit moment heb ik een RGB-LED voor de status van de seriële poort (groen als de pakketten goed zijn, rood als ze slecht zijn) en een pc-ventilator aangedreven door een transistor. Ik kan ook schakelaars en sensoren toevoegen, maar die heb ik er nog niet op gezet. Het beste eraan is dat je alles kunt toevoegen aan een Arduino-robot. Er is maar een klein beetje interfacecode nodig om extra dingen te regelen en invoer naar de computer te krijgen.

Stap 2: Onderdelen

Onderdelen
Onderdelen
Onderdelen
Onderdelen
Onderdelen
Onderdelen

Voor mijn robot heb ik een paar verschillende onderdelen gebruikt. De meeste onderdelen waren van oude spullen die ik in mijn kelder had liggen.1) Arduino Duemilanove met ATMega328 Dit is de nieuwste Arduino en sinds ik hem een paar dagen geleden heb gekregen, heb ik de nieuwste. De code is echter klein genoeg om gemakkelijk op elke Arduino te passen. Het zou waarschijnlijk zelfs op een ATTiny passen (als ik naast de Arduino een robotcontroller bouw, lijkt de ATTiny 2313 een goede keuze, hij is kleiner en goedkoper, maar heeft nog steeds voldoende uitgangen en een seriële UART-interface)2) Vex Robotics PlatformI kreeg een paar jaar geleden een Vex-kit om een radiogestuurde robot te bouwen om spullen op te halen voor een middelbare schoolcompetitie. Ik heb de basis "vierkante bot" -basis geconstrueerd die 4 wielen heeft die worden aangedreven door twee motoren. Je zou andere robotbases kunnen vervangen als je een ander platform hebt dat je wilt besturen. Het belangrijkste om op te merken is dat Vex-motoren in wezen continu-rotatieservo's zijn, ze gebruiken pulsbreedtemodulatie om aan te geven hoe snel en in welke richting ze moeten draaien. De Vex-motoren zijn leuk omdat ze een hoog bereik aan bedrijfsspanningen hebben, ergens tussen de 5 en 15 volt. Ik gebruik 12V omdat ik een 12V-batterij had. Voor de meeste standaard hobbyservo's heb je een lagere spanning nodig (vaak 6 volt).3) Batterij Een robot is nutteloos zonder voeding. Voor het testen gebruik ik een standaard 9V wall-wart-adapter van RadioShack, maar voor draadloze bediening vond ik een 12V NiMH-batterijpakket in een oude laptop. Hoewel hij niet voldoende opgeladen is om de laptop te laten werken, drijft hij mijn Vex-robot prima aan. Het kan ook de Arduino van stroom voorzien met behulp van de Vin-ingangspin op de voedingsconnector, de Arduino regelt de 12V tot 5 en voert deze zelfs uit via de 5V-uitgangspin op de voedingsconnector.4) Basis BreadboardIk gebruik momenteel een breadboard om sluit alles aan. Uiteindelijk zal ik een mooier prototypebord krijgen en wat meer permanente verbindingen solderen, maar voor nu maakt het breadboard het gemakkelijk om dingen te veranderen. Mijn breadboard is SparkFun's "basis breadboard", gewoon een breadboard op een metalen plaat met 3 terminals.5) MAX232-gebaseerde RS232-TTL-converter Als u uw robot wilt besturen met een RS-232 seriële poortverbinding (in tegenstelling tot de door Arduino ingebouwde in USB) kunt u een RS232-TTL-converter gebruiken. Ik gebruik een MAX232 omdat ik er een paar had liggen en ik heb het op een klein stukje prototypebord gesoldeerd met de vereiste condensatoren. Ik heb RS-232 nodig omdat mijn oude laptop maar één USB-poort heeft en die gebruik ik voor een gamecontroller om de robot aan te sturen.6) Extra onderdelen naar wens Voor eenvoudig debuggen van het seriële protocol heb ik er een RGB-led op gezet (kreeg er een met mijn Arduino-bestelling omdat ze cool klonken). Het lampje knippert achtereenvolgens rood, groen, blauw wanneer de Arduino opstart om aan te geven dat de robot opnieuw is opgestart en licht vervolgens groen op wanneer een motorpakket is ontvangen, blauw wanneer een ventilatorpakket is ontvangen en rood wanneer een slecht of onbekend pakket is pakket is ontvangen. Om de ventilator aan te drijven, gebruikte ik een standaard NPN-transistor (dezelfde die ik in mijn laatste Instructable heb gedemonstreerd) en een weerstand tussen de transistor en de Arduino (de transistor trok te veel stroom en verwarmt de Arduino, dus ik heb een beperkende weerstand in om het te stoppen).

Stap 3: Arduino en pc-programmering

Arduino en pc-programmering
Arduino en pc-programmering

Om de Arduino te programmeren, heb je uiteraard de Arduino-software en een USB-kabel nodig. Je kunt de Arduino ook programmeren met een seriële poort en een TTL-niveau-omzetter als je pc een seriële poort heeft. Merk op dat de USB-seriële interface niet zal communiceren met de Arduino's ATMega-processor als er een niveauconverter is aangesloten op de seriële pinnen van Arduino (pinnen 0 en 1), dus ontkoppel deze voordat u USB gebruikt. Op de Arduino hebben we een seriële interface nodig waarmee de PC om de motoren aan te sturen. We hebben ook een PWM-servoaandrijfsysteem nodig om de juiste signalen naar de Vex-motoren te sturen en ervoor te zorgen dat ze in de juiste richting gaan als ze de juiste waarden krijgen. Ik heb ook wat eenvoudige LED-flitsers toegevoegd, voornamelijk voor statusindicatie, maar ook omdat het er cool uitziet. Op de pc moeten we de seriële poort openen en gegevensframes verzenden die het Arduino-programma zal begrijpen. De pc moet ook motorwaarden bedenken. Een gemakkelijke manier om dit te doen is door een USB-gamepad of joystick te gebruiken, ik gebruik een Xbox 360-controller. Een andere optie is om een netwerkcomputer (een netbook of een klein mini-ITX-bord) op de robot zelf te gebruiken om draadloos te rijden. Met een netbook kunt u zelfs de ingebouwde webcam gebruiken om een videofeed terug te streamen en uw robot op afstand te besturen. Ik gebruikte het Linux-socketssysteem om netwerkprogrammering uit te voeren voor mijn setup. Eén programma (de "joystick-server") wordt uitgevoerd op een aparte pc waarop een controller is aangesloten, en een ander programma (de "client") wordt uitgevoerd op de netbook die is aangesloten op de Arduino. Dit verbindt de twee computers en stuurt joystickinformatie naar de netbook, die vervolgens seriële pakketten naar de Arduino stuurt die de robot aandrijft. Om verbinding te maken met de Arduino met behulp van een Linux-pc (in C++) moet je eerst de seriële poort op de juiste baudrate en verzend vervolgens de waarden met behulp van een protocol dat u ook op de Arduino-code hebt gebruikt. Mijn seriële formaat is eenvoudig en effectief. Ik gebruik 4 bytes per "frame" om de twee motorsnelheden te verzenden (elk is een enkele byte). De eerste en laatste bytes zijn hardgecodeerde waarden die worden gebruikt om te voorkomen dat de Arduino de verkeerde byte naar de PWM-code stuurt en ervoor zorgt dat de motoren gek worden. Dit is het primaire doel van de RGB-LED, deze knippert rood wanneer het seriële frame onvolledig was. De 4 bytes zijn als volgt: 255 (hard gecodeerde "start" byte),,, 200 (hard gecodeerde "end" byte) Om een betrouwbare ontvangst van de gegevens te garanderen, moet u ervoor zorgen dat er voldoende vertraging tussen de programmalussen zit. Als u uw pc-code te snel uitvoert, zal de poort overstromen en kan de Arduino bytes laten vallen of zelfs verkeerd lezen. Zelfs als het geen informatie laat vallen, kan het ook de seriële poortbuffer van de Arduino overlopen. Voor de Vex-motoren heb ik de Arduino Servo-bibliotheek gebruikt. Omdat Vex-motoren slechts motoren met continue rotatie zijn, gebruiken ze exact dezelfde signalering die servo's gebruiken. In plaats van dat 90 graden het middelpunt is, is dit het stoppunt waar de motor niet draait. Het verlagen van de "hoek" zorgt ervoor dat de motor in de ene richting begint te draaien, terwijl het verhogen van de hoek hem in de andere richting laat draaien. Hoe verder u van het middelpunt verwijderd bent, hoe sneller de motor zal draaien. Hoewel het niets zal breken als u waarden van meer dan 180 graden naar de motoren stuurt, zou ik adviseren de waarden te beperken van 0 tot 180 graden (in dit geval snelheidsverhogingen). Omdat ik meer controle wilde hebben en minder ongecontroleerd robotrijden, heb ik een softwarematige "snelheidslimiet" aan mijn programma toegevoegd waardoor de snelheid niet boven de 30 "graden" in beide richtingen mag komen (bereik is 90 +/- 30). Ik ben van plan een seriële poortopdracht toe te voegen die de snelheidslimiet wijzigt, zodat de computer de limiet on-the-fly kan verwijderen als je snel wilt gaan (ik heb in kleine kamers getest, dus ik wil niet dat het sneller wordt en crash in de muur, vooral met een netbook erop). Download voor meer informatie de bijgevoegde code aan het einde van deze Instructable.

Stap 4: voeg een netbook toe om onbekende werelden op afstand te verkennen

Voeg een netbook toe om onbekende werelden op afstand te verkennen
Voeg een netbook toe om onbekende werelden op afstand te verkennen
Voeg een netbook toe om onbekende werelden op afstand te verkennen
Voeg een netbook toe om onbekende werelden op afstand te verkennen

Met een volledige pc aan boord van uw Arduino-robot, kunt u uw robot besturen van zo ver als uw WiFi kan reiken zonder snoeren om de robot tot één gebied te beperken. Een goede kandidaat voor deze baan is een netbook, omdat netbooks klein en lichtgewicht zijn, een ingebouwde batterij hebben, wifi hebben en de meeste zelfs ingebouwde webcams hebben die kunnen worden gebruikt om het zicht van de robot terug te streamen naar een veilige plek waar je kan het beheersen. Als uw netbook is uitgerust met mobiele breedbandservice, is uw bereik bovendien vrijwel onbeperkt. Met voldoende batterijen zou je je robot naar de plaatselijke pizzeria kunnen rijden en via de webcam een bestelling kunnen plaatsen (niet aanbevolen, robots zijn meestal niet toegestaan in pizzeria's, zelfs als het zou kunnen dat mensen de robot gaan stelen en misschien zelfs de pizza). Het kan ook een goede manier zijn om de donkere diepten van je kelder te verkennen vanuit het comfort van je bureaustoel, hoewel het in dit geval erg handig kan zijn om wat koplampen toe te voegen.

Er zijn veel manieren om dit werkend te krijgen, veel zijn waarschijnlijk een stuk eenvoudiger dan de mijne, hoewel ik niet bekend ben met Processing of op script gebaseerde talen, dus koos ik ervoor om Linux en C++ te gebruiken om een draadloze besturingsverbinding te maken tussen mijn basisstation (ook bekend als oude ThinkPad) en mijn nieuwe Lenovo IdeaPad-netbook die is aangesloten op de Arduino-schijfbasis. Op beide pc's draait Ubuntu. Mijn ThinkPad is aangesloten op het LAN van mijn school en mijn IdeaPad is verbonden met mijn WiFi-toegangspunt dat ook is verbonden met het LAN van de school (ik kon geen betrouwbare videostream krijgen van de WiFi van de school omdat iedereen het gebruikt, dus ik heb mijn eigen router op te zetten om een goede verbinding te maken). Een goede verbinding is in mijn geval vooral belangrijk omdat ik geen foutcontrole of time-out heb geïmplementeerd. Als de netwerkverbinding plotseling wegvalt, gaat de robot door totdat hij ergens tegenaan botst of ik ren en hem stop. Dit is de belangrijkste factor achter mijn beslissing om de aandrijflijn te vertragen, zowel door de motoren terug te draaien als door een softwarematige snelheidslimiet te implementeren.

Stap 5: Krijg een videofeed

Nadat uw robotverkenner draadloos kan rijden, wilt u waarschijnlijk een videofeed van de netbook hebben, zodat u kunt zien waar uw robot is. Als je Ubuntu gebruikt (of zelfs als je dat niet bent!) raad ik aan om VLC Media Player te gebruiken om te streamen. Als je het niet hebt geïnstalleerd, mis je echt iets, dus installeer het met het commando "sudo apt-get install vlc", blader naar VLC in het Ubuntu Software Center (alleen 9.10), of download het installatieprogramma op videolan. org als u Windows gebruikt. Je hebt VLC nodig die op beide pc's draait. VLC kan zowel streamen als streams afspelen op een netwerk. Zorg er op de netbook (robot-pc) eerst voor dat uw webcam (ingebouwd of via USB aangesloten) werkt door op Open Capture Device te klikken en Video voor Linux 2 te proberen (sommige oudere apparaten hebben mogelijk Video voor Linux nodig in plaats van de nieuwe versie 2). U zou het beeld van de camera op het netbookscherm moeten zien. Om het te streamen, selecteert u Streaming in het menu Bestand en kiest u vervolgens het tabblad Opnameapparaat bovenaan het venster dat verschijnt. Onthoud dat je in Ubuntu (en veel andere Linux-distributies) Alt ingedrukt kunt houden om vensters te klikken en te slepen die te groot zijn voor je scherm (vooral handig op oudere netbooks, hoewel zelfs mijn IdeaPad een vreemde resolutie van 1024x576 heeft zonder duidelijke reden). Om vertraging te verminderen, klikt u op "Meer opties weergeven" en verlaagt u de cachewaarde. De hoeveelheid die je hem kan verlagen hangt soms af van het toestel, hij wordt onstabiel als je hem te veel laat zakken. Bij 300 ms krijg je misschien een kleine vertraging, maar dat is niet erg.

Klik vervolgens op Stream om naar het volgende menu te gaan. Klik op Volgende, selecteer en voeg HTTP toe als een nieuwe bestemming. Stel nu Transcodering in om de stream kleiner te maken. Ik heb een aangepast profiel gemaakt dat M-JPEG gebruikt met 60 kb/s en 8 fps. Dit komt omdat het gebruik van een geavanceerde codec zoals MPEG of Theora enorme CPU-tijd op de Atom-processor van een netbook zal opslokken en dit kan ertoe leiden dat uw videofeed zonder duidelijke reden stopt. MJPEG is een eenvoudige codec die gemakkelijk te gebruiken is bij lage bitrates. Nadat je je stream hebt gestart, open je VLC op je andere pc, open je een netwerkstream, selecteer je HTTP en typ je het IP-adres van je netbook (lokaal of internet, afhankelijk van hoe je verbinding maakt) gevolgd door ":8080". Je moet de poort om de een of andere vreemde reden specificeren, anders krijg je fouten. Als je een behoorlijke verbinding hebt, zou je de feed van je webcam op je andere pc moeten zien, maar deze zal een kleine (ongeveer een seconde) vertraging hebben. Ik weet niet precies waarom deze vertraging optreedt, maar ik kan niet achterhalen hoe ik er vanaf kan komen. Open nu de controle-app en begin met het besturen van uw netbook-robot. Krijg een idee van hoe de vertraging werkt tijdens het rijden, zodat u nergens tegenaan botst. Als het werkt, is je netbook-robot klaar.

Aanbevolen: