Taula de continguts:

Plataforma Arduino Robotics simple: 5 passos
Plataforma Arduino Robotics simple: 5 passos

Vídeo: Plataforma Arduino Robotics simple: 5 passos

Vídeo: Plataforma Arduino Robotics simple: 5 passos
Vídeo: 8 Cool Arduino Science Projects 2024, Juliol
Anonim
Plataforma de robòtica simple Arduino
Plataforma de robòtica simple Arduino
Plataforma de robòtica simple Arduino
Plataforma de robòtica simple Arduino

Acabo d’aconseguir un Arduino després de jugar amb alguns microcontroladors AVR durant les reunions de l’equip de Robòtica. Em va agradar la idea d'un xip programable realment barat que pogués funcionar gairebé qualsevol cosa des d'una interfície d'ordinador senzilla, així que vaig obtenir un Arduino perquè ja té una bona placa i una interfície USB. Per al meu primer projecte Arduino, vaig desenterrar un kit de Vex Robotics que tenia preparat per algunes competicions que vaig fer a l'institut. Sempre havia volgut fer una plataforma de robòtica impulsada per ordinador, però el microcontrolador Vex requereix un cable de programació que no tenia. Vaig decidir utilitzar el meu nou Arduino (i potser més endavant un xip AVR nu si ho faig funcionar) per conduir la plataforma. Finalment vull aconseguir un netbook i després puc conduir el robot mitjançant WiFi i veure la seva càmera web de forma remota.

Vaig aconseguir un protocol de sèrie decent i un exemple senzill que condueix el robot mitjançant un controlador Xbox 360 connectat a un ordinador Linux.

Pas 1: què pot fer …

Què pot fer …
Què pot fer …
Què pot fer …
Què pot fer …

L'Arduino és una plataforma molt versàtil. El meu objectiu bàsic era aconseguir que l’Arduino connectés dos motors Vex a l’ordinador, però tenia molts pins d’entrada / sortida sobrants i vaig decidir afegir-hi coses addicionals. Ara mateix tinc un LED RGB per a l'estat del port sèrie (verd si els paquets són bons, vermell si són dolents) i un ventilador de PC impulsat per un transistor. També puc afegir interruptors i sensors, però encara no hi he posat cap. El millor és que podeu afegir el que vulgueu a un robot Arduino. Només cal una mica de codi d'interfície per controlar coses addicionals i obtenir entrada a l'ordinador.

Pas 2: parts

Parts
Parts
Parts
Parts
Parts
Parts

Per al meu robot, he utilitzat algunes parts diferents. La majoria de les peces eren de coses antigues que tenia al soterrani. Tanmateix, el codi és prou petit com per adaptar-se fàcilment a qualsevol Arduino. Probablement fins i tot podria cabre en un ATTiny (si construeixo un controlador de robot a part de l’Arduino, l’ATTiny 2313 sembla una bona opció, és més petit i més barat, però encara té moltes sortides i una interfície UART en sèrie) 2) Vex Robotics PlatformI Va aconseguir un kit Vex fa uns anys per construir un robot radiocontrolat per recollir coses per a una competició de secundària. Vaig construir la base bàsica "quadrada" que té 4 rodes accionades per dos motors. Podeu substituir altres bases de robots si teniu alguna altra plataforma que vulgueu conduir. L’important a tenir en compte és que els motors Vex són essencialment servos de rotació contínua, que fan servir la modulació d’amplada de pols per indicar la velocitat i la direcció en què giren. Els motors Vex són agradables perquè tenen un alt rang de tensions de funcionament, entre 5 i 15 volts. Estic fent servir 12V perquè tenia una bateria de 12V. Per a la majoria dels servos estàndard d’afició, necessitareu un voltatge més baix (sovint de 6 volts). 3) Bateria Un robot no serveix de res sense una font d’alimentació. Per fer proves, utilitzo un adaptador de berruga de paret de 9V estàndard de RadioShack, però per al funcionament sense fil he trobat una bateria de 12V NiMH en un portàtil antic. Tot i que no té prou càrrega per fer funcionar el portàtil, el meu robot Vex funciona molt bé. També pot alimentar l’Arduino mitjançant el pin d’entrada Vin del connector d’alimentació, l’Arduino regularà els 12V fins a 5 i fins i tot el sortida del pin de sortida de 5V al connector d’alimentació. connectar-ho tot. Finalment, aconseguiré una placa de prototipat i una soldadura més bonica en algunes connexions més permanents, però ara per ara la taula facilita el canvi de coses. La meva taula de treball és la "taula de treball bàsica" de SparkFun, només una placa de taula en una placa metàl·lica amb 3 terminals. en USB) podeu utilitzar un convertidor RS232-TTL. Estic fent servir un MAX232 perquè en tenia uns quants estirats i el vaig soldar en un petit tros de placa de prototipatge amb els condensadors necessaris. Necessito RS-232 perquè el meu ordinador portàtil antic només té un port USB i ho faig servir per a un controlador de jocs que condueixi el robot. en tinc un amb la meva comanda Arduino perquè sonava genial). El llum parpelleja en vermell, verd i blau en seqüència quan l’Arduino arrenca per mostrar que el robot s’ha reiniciat i, després, s’encén de color verd quan s’ha rebut un paquet de motor, de color blau quan s’ha rebut un paquet de ventilador i de color vermell quan és incorrecte o desconegut. s'ha rebut el paquet. Per conduir el ventilador he utilitzat un transistor NPN estàndard (els mateixos que he demostrat en el meu darrer Instructable) i una resistència entre el transistor i l’Arduino (el transistor treia massa corrent i escalfava l’Arduino, així que vaig posar un límit resistència per aturar-lo).

Pas 3: Programació Arduino i PC

Programació Arduino i PC
Programació Arduino i PC

Per programar l'Arduino, òbviament necessitareu el programari Arduino i un cable USB. També podeu programar l’Arduino mitjançant un port sèrie i un convertidor de nivell TTL si el vostre PC té un port sèrie. Tingueu en compte que la interfície sèrie USB no es comunicarà amb el processador ATMega d’Arduino si hi ha un convertidor de nivell connectat als pins sèrie d’Arduino (pins 0 i 1), així que desconnecteu-lo abans d’utilitzar USB. A l’Arduino necessitarem una interfície sèrie que permeti PC per controlar els motors. També necessitarem un sistema de servoaccionament PWM per enviar els senyals correctes als motors Vex i assegurar-nos que van en les direccions correctes quan es donen els valors adequats. També he afegit alguns parpelleigs LED senzills, principalment per indicar l’estat, però també perquè sembla genial. Al PC haurem d’obrir el port sèrie i enviar fotogrames de dades que el programa Arduino entengui. El PC també ha d’aconseguir valors motors. Una manera fàcil de fer-ho és fer servir un joystick o un joystick USB, ja que estic fent servir un controlador Xbox 360. Una altra opció és utilitzar un ordinador en xarxa (ja sigui un netbook o una petita mini placa ITX) al propi robot per conduir sense fils. Amb un netbook, fins i tot podeu utilitzar la càmera web integrada per reproduir un canal de vídeo i conduir el robot de forma remota. He utilitzat el sistema de preses de Linux per fer la programació de xarxa per a la meva configuració. Un programa (el "joystick server") s'executa en un PC separat que té un controlador connectat i un altre programa (el "client") s'executa al netbook connectat a l'Arduino. Això enllaça els dos equips i envia informació del joystick al netbook, que envia paquets de sèrie a l’Arduino que condueix el robot. Per connectar-vos a l’Arduino mitjançant un ordinador Linux (en C ++), primer heu d’obrir el port sèrie al lloc correcte. baud rate i, a continuació, envieu els valors mitjançant un protocol que també heu utilitzat al codi d'Arduino. El meu format de sèrie és senzill i eficaç. Utilitzo 4 bytes per "trama" per enviar les dues velocitats del motor (cadascun és un sol byte). El primer i l’últim bytes són valors de codificació dura que s’utilitzen per evitar que l’Arduino enviï el byte equivocat al codi PWM i faci que els motors es tornin bojos. Aquest és el propòsit principal del LED RGB, parpelleja en vermell quan el marc sèrie no estava complet. Els 4 bytes són els següents: 255 (byte "inici" codificat de forma dura),,, 200 (byte "final" de codi dur) Per garantir una recepció fiable de les dades, assegureu-vos que poseu prou retard entre els bucles del programa. Si executeu el codi del PC massa ràpid, inundarà el port i és possible que l’Arduino comenci a caure o fins i tot a llegir malament els bytes. Fins i tot si no deixa caure informació, també pot desbordar la memòria intermèdia del port sèrie d’Arduino. Per als motors Vex, he utilitzat la biblioteca Arduino Servo. Com que els motors Vex són només motors de rotació contínua, fan servir exactament la mateixa senyalització que fan servir els servos. No obstant això, en lloc de ser el punt central de 90 graus, és el punt d’aturada on el motor no gira. Baixar l '"angle" fa que el motor comenci a girar en una direcció, mentre que augmentar l'angle fa que giri en l'altra direcció. Com més lluny estigui del punt central, més ràpid girarà el motor. Tot i que no trencarà res si envieu valors superiors a 180 graus als motors, us aconsellaria limitar els valors de 0 a 180 graus (que en aquest cas són increments de velocitat). Com que volia més control i menys descontrol de la conducció del robot, he afegit un "límit de velocitat" al programa que no permet que la velocitat augmenti per sobre dels 30 "graus" en cap direcció (el rang és de 90 +/- 30). Tinc previst afegir una ordre de port sèrie que canviï el límit de velocitat, de manera que l’ordinador pugui eliminar el límit sobre la marxa si voleu anar ràpid (he estat provant en habitacions petites, així que no vull que s’acceleri i xoca contra la paret, especialment amb un netbook). Per obtenir més informació, descarregueu el codi adjunt al final d’aquest instructable.

Pas 4: afegiu un Netbook per explorar mons desconeguts des de la distància

Afegiu un Netbook per explorar mons desconeguts des de la distància
Afegiu un Netbook per explorar mons desconeguts des de la distància
Afegiu un Netbook per explorar mons desconeguts des de la distància
Afegiu un Netbook per explorar mons desconeguts des de la distància

Amb un PC complet incorporat al vostre robot Arduino, podeu conduir el robot des del punt de connexió WiFi sense que hi hagi cap cordó per limitar el robot a una sola àrea. Un bon candidat per a aquesta feina és un netbook, perquè les netbooks són petites, lleugeres, tenen una bateria incorporada, tenen WiFi i, fins i tot, la majoria tenen càmeres web integrades que es poden utilitzar per transmetre la vista del robot a un lloc segur on pot controlar-ho. A més, si el vostre netbook està equipat amb servei de banda ampla mòbil, el vostre abast és pràcticament il·limitat. Amb les piles suficients, podeu conduir el robot fins a la pizzeria local i fer una comanda per la càmera web (no es recomana, els robots no solen estar permesos a les pizzeries, fins i tot si es tracta de persones, probablement intentaran robar el robot i potser fins i tot la pizza). També pot ser una bona manera d’explorar les profunditats fosques del soterrani des de la comoditat de la cadira d’oficina, tot i que en aquest cas pot ser molt útil afegir alguns fars.

Hi ha moltes maneres de fer que funcioni, moltes probablement siguin molt més fàcils que les meves, tot i que no estic familiaritzat amb els llenguatges basats en scripts o processament, així que vaig optar per utilitzar Linux i C ++ per crear un enllaç de control sense fils entre la meva estació base (també coneguda com vell ThinkPad) i el meu nou netbook Lenovo IdeaPad que està connectat a la base de la unitat Arduino. Tots dos ordinadors executen Ubuntu. El meu ThinkPad està connectat a la xarxa LAN de la meva escola i el meu IdeaPad està connectat al meu punt d’accés WiFi que també està connectat a la LAN de l’escola (no he pogut obtenir una transmissió de vídeo fiable del WiFi de l’escola, ja que la resta la fa servir). el meu propi enrutador per proporcionar una bona connexió). Una bona connexió és especialment important en el meu cas, ja que no he implementat cap verificació d'errors ni temps d'espera. Si la connexió de xarxa cau sobtadament, el robot continua endavant fins que xoca amb alguna cosa o jo l’executo i l’aturo. Aquest és el principal factor que va motivar la meva decisió de desaccelerar la transmissió, engranant els motors i implementant un límit de velocitat de programari.

Pas 5: obteniu un feed de vídeo

Després que el vostre explorador robotitzat pugui conduir sense fils, és probable que vulgueu tenir un canal de vídeo del netbook perquè pugueu saber on és el vostre robot. Si utilitzeu Ubuntu (o fins i tot si no ho feu), us recomano utilitzar VLC Media Player per transmetre contingut. Si no l’heu instal·lat, realment esteu perdent, així que instal·leu-lo amb l’ordre "sudo apt-get install vlc", cerqueu VLC al Ubuntu Software Center (només 9.10) o descarregueu l’instal·lador a videolan. org si sou a Windows. Necessitareu VLC que s’executi en ambdós ordinadors. VLC és capaç de transmetre i reproduir reproduccions en xarxa. Al netbook (robot PC), primer assegureu-vos que la vostra càmera web (ja sigui integrada o connectada per USB) funcioni fent clic a Obre el dispositiu de captura i provant Video for Linux 2 (alguns dispositius antics poden necessitar Video for Linux en lloc de la nova versió 2). Hauríeu de veure la vista de la càmera a la pantalla del netbook. Per transmetre'l, seleccioneu Transmissió al menú Fitxer i, a continuació, seleccioneu la pestanya Dispositiu de captura a la part superior de la finestra que apareix. Recordeu que Ubuntu (i moltes altres distribucions de Linux) us permeten mantenir premut Alt per fer clic i arrossegar finestres massa grans per a la vostra pantalla (especialment útil en netbooks més antics, tot i que fins i tot el meu IdeaPad té una resolució imparella de 1024x576 sense cap motiu aparent). Per reduir el retard, feu clic a "Mostra més opcions" i reduïu el valor de la memòria cau. La quantitat que es pot reduir de vegades depèn del dispositiu, i es torna inestable si es baixa massa. A 300 ms pot ser que tingueu un petit retard, però no està gens malament.

A continuació, feu clic a Reprodueix per anar al menú següent. Feu clic a Següent i, a continuació, seleccioneu i afegiu HTTP com a nova destinació. Ara configureu la transcodificació per reduir el flux. He creat un perfil personalitzat que utilitza M-JPEG a 60kb / si 8 fps. Això es deu al fet que l’ús d’un còdec avançat com MPEG o Theora consumirà un temps de CPU massiu al processador Atom d’un netbook i això pot provocar que el feed de vídeo s’aturi sense cap motiu aparent. MJPEG és un còdec senzill que és fàcil d’utilitzar a taxes de bits baixes. Després d'iniciar el flux, obriu VLC a l'altre PC, obriu un flux de xarxa, seleccioneu HTTP i, a continuació, escriviu l'adreça IP del vostre netbook (local o d'Internet segons com us connecteu) seguit de ": 8080". Heu d’especificar el port per algun motiu estrany, en cas contrari us produirà errors. Si teniu una connexió decent, hauríeu de veure el feed de la vostra càmera web a l’altre PC, però tindrà un petit retard (aproximadament d’un segon). No sé exactament per què es produeix aquest retard, però no puc esbrinar com desfer-me’n. Ara obriu l'aplicació de control i comenceu a conduir el vostre robot de netbook. Feu-vos una idea de com funciona el retard quan conduïu perquè no xoqueu amb res. Si funciona, el robot del netbook està acabat.

Recomanat: