Tabla de contenido:

¡Plataforma robótica Arduino simple !: 5 pasos
¡Plataforma robótica Arduino simple !: 5 pasos

Video: ¡Plataforma robótica Arduino simple !: 5 pasos

Video: ¡Plataforma robótica Arduino simple !: 5 pasos
Video: 💡Cómo PROGRAMAR arduino UNO desde CERO【 2021 】 - Capítulo #02🔋 2024, Noviembre
Anonim
¡Plataforma robótica Arduino simple!
¡Plataforma robótica Arduino simple!
¡Plataforma robótica Arduino simple!
¡Plataforma robótica Arduino simple!

Acabo de recibir un Arduino después de jugar con algunos microcontroladores AVR durante las reuniones del equipo de robótica. Me gustó la idea de un chip programable realmente barato que pudiera ejecutar casi cualquier cosa desde una simple interfaz de computadora, así que obtuve un Arduino porque ya tiene una buena placa y una interfaz USB. Para mi primer proyecto de Arduino, desenterré un kit de Vex Robotics que tenía en algunas competencias que hice en la escuela secundaria. Siempre había querido hacer una plataforma robótica impulsada por computadora, pero el microcontrolador Vex requiere un cable de programación que yo no tenía. Decidí usar mi nuevo Arduino (y tal vez más tarde un chip AVR desnudo si lo hago funcionar) para manejar la plataforma. Eventualmente quiero conseguir una netbook y luego puedo manejar el robot usando WiFi y ver su cámara web de forma remota.

Me las arreglé para obtener un protocolo serial decente y un ejemplo simple que maneja el robot usando un controlador Xbox 360 conectado a una PC con Linux.

Paso 1: Qué puede hacer …

Que puede hacer…
Que puede hacer…
Que puede hacer…
Que puede hacer…

Arduino es una plataforma muy versátil. Mi objetivo básico era hacer que Arduino conectara dos motores Vex a la PC, pero tenía muchos pines de entrada / salida sobrantes y decidí agregar algunas cosas adicionales. Ahora mismo tengo un LED RGB para el estado del puerto serie (verde si los paquetes son buenos, rojo si son malos) y un ventilador de PC impulsado por un transistor. También puedo agregar interruptores y sensores, pero todavía no puse ninguno. Lo mejor es que puedes agregar lo que quieras a un robot Arduino. Solo se necesita un poco de código de interfaz para controlar cosas adicionales y obtener información en la computadora.

Paso 2: Partes

Partes
Partes
Partes
Partes
Partes
Partes

Para mi robot, utilicé algunas partes diferentes. La mayoría de las piezas eran de material antiguo que tenía en el sótano. 1) Arduino Duemilanove con ATMega328 Este es el Arduino más nuevo, y como lo recibí hace unos días, tengo el más nuevo. Sin embargo, el código es lo suficientemente pequeño como para caber fácilmente en cualquier Arduino. Probablemente incluso podría caber en un ATTiny (si construyo un controlador de robot aparte del Arduino, el ATTiny 2313 parece una buena opción, es más pequeño y más barato, pero aún tiene muchas salidas y una interfaz UART en serie) 2) Vex Robotics PlatformI Obtuve un kit Vex hace unos años para construir un robot controlado por radio para recoger cosas para una competencia de la escuela secundaria. Construí la base básica del "robot cuadrado" que tiene 4 ruedas impulsadas por dos motores. Puede sustituir otras bases de robot si tiene alguna otra plataforma que desee conducir. Lo importante a tener en cuenta es que los motores Vex son esencialmente servos de rotación continua, usan modulación de ancho de pulso para indicar qué tan rápido y en qué dirección girar. Los motores Vex son agradables porque tienen un alto rango de voltajes operativos, en algún lugar entre 5 y 15 voltios. Estoy usando 12V porque tenía una batería de 12V. Para la mayoría de los servos de hobby estándar, necesitará un voltaje más bajo (a menudo 6 voltios). 3) Batería Un robot es inútil sin una fuente de alimentación. Para las pruebas, utilizo un adaptador de pared-verruga estándar de 9V de RadioShack, pero para el funcionamiento inalámbrico encontré un paquete de baterías de 12V NiMH en una computadora portátil antigua. Aunque no tiene suficiente carga para ejecutar la computadora portátil, impulsa mi robot Vex sin problemas. También puede alimentar el Arduino usando el pin de entrada Vin en el conector de alimentación, el Arduino regulará los 12 V hasta 5 e incluso lo emitirá por el pin de salida de 5 V en el conector de alimentación. cablear todo. Eventualmente obtendré una placa de creación de prototipos más agradable y soldaré algunas conexiones más permanentes, pero por ahora la placa de pruebas facilita el cambio de cosas. Mi tablero es el "tablero básico" de SparkFun, solo un tablero en una placa de metal con 3 terminales. 5) Convertidor RS232-TTL basado en MAX232 Si desea conducir su robot utilizando una conexión de puerto serie RS-232 (a diferencia del Arduino incorporado en USB) puede utilizar un convertidor RS232-TTL. Estoy usando un MAX232 porque tenía algunos de ellos por ahí y los soldé en una pequeña pieza de placa de prototipos con los condensadores requeridos. Necesito RS-232 porque mi vieja computadora portátil solo tiene un puerto USB y lo estoy usando para que un controlador de juego maneje el robot. obtuve uno con mi pedido de Arduino porque sonaban bien). La luz parpadea en rojo, verde, azul en secuencia cuando el Arduino arranca para mostrar que el robot se ha reiniciado y luego se enciende en verde cuando se ha recibido un paquete de motor, azul cuando se ha recibido un paquete de ventilador y rojo cuando es incorrecto o desconocido. Se ha recibido el paquete. Para conducir el ventilador, utilicé un transistor NPN estándar (los mismos que demostré en mi último Instructable) y una resistencia entre el transistor y el Arduino (el transistor estaba consumiendo demasiada corriente y calentando el Arduino, así que puse un límite resistor para detenerlo).

Paso 3: programación de Arduino y PC

Programación Arduino y PC
Programación Arduino y PC

Para programar el Arduino, obviamente necesitará el software Arduino y un cable USB. También puede programar el Arduino usando un puerto serie y un convertidor de nivel TTL si su PC tiene un puerto serie. Tenga en cuenta que la interfaz serial USB no se comunicará con el procesador ATMega de Arduino si hay un convertidor de nivel conectado a los pines seriales de Arduino (pines 0 y 1) así que desconéctelo antes de usar USB. En el Arduino necesitaremos una interfaz serial que permita el PC para controlar los motores. También necesitaremos un sistema de servodrive PWM para enviar las señales correctas a los motores Vex y asegurarnos de que vayan en las direcciones correctas cuando se les dan los valores correctos. También agregué algunos parpadeos simples de LED, principalmente para indicar el estado, pero también porque se ve bien. En la PC, necesitaremos abrir el puerto serie y enviar cuadros de datos que el programa Arduino entenderá. La PC también necesita generar valores de motor. Una manera fácil de hacer esto es usar un controlador de juegos USB o un joystick, estoy usando un controlador Xbox 360. Otra opción es utilizar una computadora en red (ya sea una netbook o una pequeña placa mini ITX) en el propio robot para conducir de forma inalámbrica. Con una netbook, incluso puede usar la cámara web incorporada para transmitir una transmisión de video y conducir su robot de forma remota. Usé el sistema de sockets de Linux para programar la red para mi configuración. Un programa (el "servidor de joystick") se ejecuta en una PC separada que tiene un controlador conectado, y otro programa (el "cliente") se ejecuta en la netbook conectada al Arduino. Esto vincula las dos computadoras y envía información del joystick al netbook, que luego envía paquetes seriales al Arduino que maneja el robot. Para conectarse al Arduino usando una PC Linux (en C ++), primero debe abrir el puerto serial en la posición correcta. velocidad en baudios y luego envíe los valores usando un protocolo que también ha usado en el código de Arduino. Mi formato de serie es simple y efectivo. Utilizo 4 bytes por "cuadro" para enviar las dos velocidades del motor (cada una es un solo byte). Los primeros y últimos bytes son valores codificados que se utilizan para evitar que Arduino envíe el byte incorrecto al código PWM y haga que los motores se vuelvan locos. Este es el propósito principal del LED RGB, parpadea en rojo cuando el marco en serie estaba incompleto. Los 4 bytes son los siguientes: 255 (byte de "inicio" codificado de forma rígida),,, 200 (byte de "fin" codificado de forma rígida) Para asegurar una recepción confiable de los datos, asegúrese de poner suficiente retraso entre los bucles del programa. Si ejecuta el código de su PC demasiado rápido, inundará el puerto y Arduino puede comenzar a caer o incluso a leer mal los bytes. Incluso si no arroja información, también puede desbordar el búfer del puerto serie de Arduino. Para los motores Vex, utilicé la biblioteca Arduino Servo. Dado que los motores Vex son solo motores de rotación continua, usan exactamente la misma señalización que usan los servos. Sin embargo, en lugar de ser 90 grados el punto central, es el punto de parada donde el motor no gira. Bajar el "ángulo" hace que el motor comience a girar en una dirección, mientras que elevar el ángulo lo hace girar en la otra dirección. Cuanto más lejos esté del punto central, más rápido girará el motor. Si bien no romperá nada si envía valores superiores a 180 grados a los motores, le aconsejaría limitar los valores de 0 a 180 grados (que en este caso son incrementos de velocidad). Como quería más control y menos conducción de robots fuera de control, agregué un "límite de velocidad" de software a mi programa que no permite que la velocidad aumente por encima de 30 "grados" en ninguna dirección (el rango es 90 +/- 30). Planeo agregar un comando de puerto serie que cambie el límite de velocidad, para que la computadora pueda eliminar el límite sobre la marcha si quieres ir rápido (he estado probando en habitaciones pequeñas, así que no quiero que se acelere) y chocar contra la pared, especialmente con un netbook en él). Para obtener más información, descargue el código adjunto al final de este Instructable.

Paso 4: agregue una netbook para explorar mundos desconocidos desde la distancia

Agregue una netbook para explorar mundos desconocidos desde la distancia
Agregue una netbook para explorar mundos desconocidos desde la distancia
Agregue una netbook para explorar mundos desconocidos desde la distancia
Agregue una netbook para explorar mundos desconocidos desde la distancia

Con una PC completa a bordo de su robot Arduino, puede conducir su robot desde tan lejos como su WiFi pueda alcanzar sin cables para limitar el robot a un área. Un buen candidato para este trabajo es un netbook, porque los netbooks son pequeños, livianos, tienen una batería incorporada, tienen WiFi y la mayoría incluso tienen cámaras web integradas que se pueden usar para transmitir la vista del robot a un lugar seguro donde usted puede controlarlo. Además, si su netbook está equipado con un servicio de banda ancha móvil, su alcance es prácticamente ilimitado. Con suficientes baterías, podría conducir su robot a la pizzería local y hacer un pedido a través de la cámara web (no se recomienda, los robots generalmente no están permitidos en las pizzerías, incluso si las personas probablemente intentarán robar el robot y tal vez incluso la pizza). También puede ser una buena manera de explorar las profundidades oscuras de su sótano desde la comodidad de su silla de oficina, aunque agregar algunos faros delanteros puede ser muy útil en este caso.

Hay muchas formas de hacer que esto funcione, muchas son probablemente mucho más fáciles que las mías, aunque no estoy familiarizado con el procesamiento o los lenguajes basados en scripts, así que opté por usar Linux y C ++ para crear un enlace de control inalámbrico entre mi estación base (también conocida como antiguo ThinkPad) y mi nuevo netbook Lenovo IdeaPad que está conectado a la base de la unidad Arduino. Ambas PC ejecutan Ubuntu. Mi ThinkPad está conectado a la LAN de mi escuela y mi IdeaPad está conectada a mi punto de acceso WiFi que también está conectado a la LAN de la escuela (no pude obtener una transmisión de video confiable desde el WiFi de la escuela porque todos los demás lo están usando, así que configuré instalar mi propio enrutador para proporcionar una buena conexión). Una buena conexión es especialmente importante en mi caso, ya que no he implementado ninguna verificación de errores ni timeout. Si la conexión de red se cae repentinamente, el robot sigue funcionando hasta que choca contra algo o yo corro y lo detengo. Este es el factor principal detrás de mi decisión de ralentizar el tren motriz tanto reduciendo los motores como implementando un límite de velocidad por software.

Paso 5: obtenga una fuente de video

Después de que su explorador robótico pueda conducir de forma inalámbrica, probablemente querrá tener una transmisión de video desde la netbook para saber dónde está su robot. Si está usando Ubuntu (¡o incluso si no lo está!), Le recomiendo usar VLC Media Player para transmitir. Si no lo ha instalado, realmente se lo está perdiendo, así que instálelo usando el comando "sudo apt-get install vlc", busque VLC en el Centro de software de Ubuntu (solo 9.10) o descargue el instalador en videolan. org si está en Windows. Necesitará que VLC se ejecute en ambas PC. VLC es capaz de transmitir y reproducir transmisiones en una red. En la netbook (PC robot) primero asegúrese de que su cámara web (ya sea incorporada o conectada por USB) funcione haciendo clic en Abrir dispositivo de captura y probando Video para Linux 2 (algunos dispositivos más antiguos pueden necesitar Video para Linux en lugar de la nueva versión 2). Debería ver la vista de la cámara en la pantalla del netbook. Para transmitirlo, seleccione Transmitir en el menú Archivo y luego elija la pestaña Dispositivo de captura en la parte superior de la ventana que aparece. Recuerde que Ubuntu (y muchas otras distribuciones de Linux) le permiten mantener presionada la tecla Alt para hacer clic y arrastrar ventanas que son demasiado grandes para su pantalla (especialmente útil en netbooks más antiguas, aunque incluso mi IdeaPad tiene una resolución extraña de 1024x576 sin razón aparente). Para reducir la demora, haga clic en "Mostrar más opciones" y reduzca el valor de almacenamiento en caché. La cantidad que puede bajarlo a veces depende del dispositivo, se vuelve inestable si lo baja demasiado. A 300 ms, puede tener un ligero retraso, pero no es tan malo.

A continuación, haga clic en Transmitir para ir al menú siguiente. Haga clic en Siguiente, luego seleccione y agregue HTTP como un nuevo destino. Ahora configure la transcodificación para hacer que la transmisión sea más pequeña. Hice un perfil personalizado que usa M-JPEG a 60 kb / sy 8 fps. Esto se debe a que el uso de un códec avanzado como MPEG o Theora consumirá mucho tiempo de CPU en el procesador Atom de una netbook y esto puede hacer que la transmisión de video se detenga sin razón aparente. MJPEG es un códec simple que es fácil de usar a bajas tasas de bits. Después de iniciar su transmisión, abra VLC en su otra PC, abra una transmisión de red, seleccione HTTP y luego escriba la dirección IP de su netbook (ya sea local o de Internet, dependiendo de cómo se conecte) seguida de ": 8080". Necesita especificar el puerto por alguna extraña razón, de lo contrario le dará errores. Si tiene una conexión decente, debería ver la transmisión de su cámara web en su otra PC, pero tendrá un ligero retraso (alrededor de un segundo). No sé exactamente por qué ocurre este retraso, pero no puedo averiguar cómo deshacerme de él. Ahora abra la aplicación de control y comience a manejar su robot netbook. Tenga una idea de cómo funciona el retraso al conducir para no chocar contra nada. Si funciona, el robot de su netbook está terminado.

Recomendado: