miércoles, 9 de diciembre de 2015

Modificando un servo para rotación contínua ( CR servo )

Un servomotor -conocido generalmente como servo - es un dispositivo actuador que tiene la capacidad de posicionar un eje en cualquier posición dentro de su rango de operación, normalmente 180 grados, y de mantenerse estable en dicha posición. Está formado por un pequeño motor de corriente contínua, una caja reductora con engranajes de plástico o metal, y un circuito de control. Los servos de modelismo se utilizan frecuentemente en sistemas de radiocontrol y en robótica. El ángulo de rotación de los servos suele ser de 180 grados o bien de 360 grados. En este caso hablamos de servos de rotación contínua o CR ( continuous rotation ) servos.

Servos con engranajes de metal (izquierda) y plástico (derecha)

Herramientas necesarias ( no se incluye soldador )


En la actualidad podemos encontrar servos a un precio muy competitivo en tiendas online. En nuestro caso trabajaremos con el servo TowerPro 9g, con un peso de 9g, y un ángulo de rotación de 180 grados

El interés de los servos CR estriba en que podemos utilizarlos como elemento motriz de un pequeño robot. Ya que el eje puede girar de forma contínua, si “engañamos” al servo fijando el eje del potenciómetro, al programarlo para que vaya para una dirección – adelante o atrás – permanecerá en movimiento, y podrá ser el elemento motriz acoplado a una rueda de un motor. 

Una alternativa es usar un motor con reductora standard, o bien convertir en servo en un simple motor con reductora, pero en este caso necesitará una placa controladora de motores, basada en el chip L293D o similar
Las modificaciones usuales con este tipo de servos son:
  •   I Convertirlo en un motor con su reductora
  •  II Convertirlo en servo de rotación contínua manteniendo el potenciómetro interno
  • III Convertirlo en servo de rotación contínua anulando el potenciómetro interno

En los tres casos hay varios pasos previos comunes, los cuales se detallan a continuación:
  • Quitar las pegatinas laterales del servo, con un cutter o cuchilla.
  • Destornillar los cuatro tornillos inferiores con un destornillador de precisión o relojero.
  • Extraer la tapa superior que contiene los engranajes reductores.
  • Sacar el último engranaje con cuidado. Dicho engranaje tiene en su parte inferior dos salientes, que impiden al servo girar más allá de 0º y 180º respectivamente.
  • Cortar con un cutter dichos salientes.
  • Montar de nuevo el engranaje con su tapa.


I Extraemos la pegatina
II Desmontamos la tapa inferior
III Extraemos la tapa superior...
IV ... y extraemos el engranaje
V Cortamos la pieza que impide el giro


Con esto podemos abrir la tapa inferior, en la cual encontraremos un motor, así como una placa electrónica con distintos cables. Debemos distinguir:
  • Tres cables que conectan el servo al exterior ( rojo, marrón, naranja ).
  • Dos cables que van al motor ( blancos ).
  • Tres cables que van a un potenciómetro interno ( rojos ).

Circuito electrónico del servo

Detalle del IC controlador AA51380


I Convertirlo en un motor con su reductora 

Con esto el servo quedará inutilizado para posicionarse en cualquier ángulo, y su funcionamiento será similar al de un motor con caja reductora. Para conseguirlo deberemos:
  • Eliminar completamente la placa electrónica, desoldando los tres cables rojos del potenciómetro.
  • Desoldar los cables blancos que van al motor.
  • Anular el cable externo naranja.
  • Soldar los cables externos rojo y negro directamente a los terminales del motor.
  • Atornillar con cuidado,sin apretar en exceso, los tornillos y poner las pegatinas.


II Convertirlo en un servo CR manteniendo el potenciómetro interno 

Curiosamente esta modificación no la he visto en ninguno de los libros sobre Arduino y robótica que tengo. Ni siquiera Tom Igoe la sugiere en su proverbial libro “Arduino Workshop” ( el cual recomiendo como manual de trabajo que debe estar a mano en el taller ) en su proyecto número 40, “Building and Controlling a tank robot”. En su lugar utilizan un “shield” controlador de 2 motores, lo cual es innecesario, además de incrementar el costo, así como el cableado. Sin embargo, en páginas especializadas en robótica como Let'sMakeRobots este método es muy común.
Los pasos a seguir para convertir un servo normal en servo CR son:
  • Posicionar el eje del servo en posición 90º con un sketch
  • Desoldar ( si no hay espacio para el paso siguiente ) los tres cables rojos del controlador del servo
  • Soldar el eje del potenciómetro con una gota de estaño
  • Resoldar los tres cables rojos del controlador del servo, sin cambiarlos de posición
  • Atornillar con cuidado los tornillos y poner las pegatinas



III Convertirlo en un servo CR anulando el potenciómetro interno 

En este caso, sustituiremos adicionalmente el potenciómetro, por dos resistencias de 2200 ohmios ( 2K2 ).Utilizaremos resistencias de película metálica de 1% de tolerancia, las cuales se encuentran en Internet, así como en tiendas de electrónica especializadas ( no todas ).

Adafruit, un fabricante americano que proporciona componentes, tiene un tutorial dentro de su excelente Adafruit Learning System, ( conjunto de tutoriales relacionados con Arduino ). El enlace donde detalla el procedimiento es el siguiente:



El autor, Rick Winscot, usa componentes SMD y se mete en líos con el eje del potenciómetro. Yo utilizaré un método más simple, pero igual de efectivo. Los pasos a seguir en este caso son:
  • Posicionar el eje del servo en posición 90º con un sketch
  • Desoldar  los tres cables rojos del controlador del servo
  • Soldar un terminal de una resistencia de 2K2 en la posición donde estaban soldados los cables externos rojos ( los que iban a los extremos del potenciómetro )
  • Soldar el otro terminal de cada resistencia de 2K2 en la posición donde estaba el cable rojo conectado al cursos del potenciómetro.
  • Atornillar con cuidad los tornillos y poner las pegatinas


Uso del servo CR

En construcción

Problemas asociados al servo CR 

En construcción

martes, 24 de noviembre de 2015

Arquitectura del ATMEGA328P

Arduino esta basado en el microprocesador RISC ( Reduced Instruction Set Computing ) ATMEGA328P, de la casa Atmel. Es el más popular, aunque este fabricante proporciona decenas de microprocesadores. Primos hermanos son el ATMEGA8, ATMEGA168, con características similares, aunque menores. La página de contacto del fabricante es 


Las características esenciales del ATMEGA328P son las siguientes:
  • Procesador de 8 bits.
  • Frecuencia de trabajo: 20 Mhz.
  • Encapsulado dual in line de 28 pines.
  • Memoria flash para almacenar programas ( In System Programmable , o ISP ): 32 Kb .
  • Memoria para variables, incluido stack ( SRAM ): 2 Kbytes.
  •  Memoria EEPROM ( Erasable Programmable Read Only Memory ): 1 Kb. Mantiene los datos una vez que el micro ha sido desconectado.
  • 23 líneas de entrada/salida ( General Purpose Input Outputs, o GPIO ).
  • 3 contadores/temporizadores.
  • 32 registros.
  • Interrupciones internas y externas.
  • Una USART ( Universal Synchronous/Asynchronous Receiver Transmitter ).
  • Interface Serie de 2 cables ( TWI ).
  • Interface SPI ( Serial Peripherial Interface ).
  • Un conversor Analógico Digital (ADC ) de 10 bits, con una resolución de 1024 bits.

Cada uno de estos dispositivos periféricos se controlan mediante registros específicos, conectados al bus de datos de 8 bits del microprocesador. Así pues, para acceder o iteractuar con estos periféricos debemos acceder a diferentes registros mapeados en memoria. Esto se puede hacer, por ejemplo, mediante punteros de C.

Por último, el microprocesador posee tres puertos, denominados B, C y D. con los cuales cada dispositivo periférico se comunica con el exterior. Cada puerto es configurable en lo que se conoce como multiplexado de pines ( pin-multiplexing ) para que los pines puedan tener diferentes funciones de entrada o salida.

El microprocesador puede ser programado modificando su memoria ISP flash mediante tres métodos diferentes:

  • Interface serie SPI.
  • Programador de memorias convencional tipo USBASP.
  • Boot loader instalado en el núcleo del micro. Este es el método empleado por el IDE de Arduino, el cual integra en su placa un chip conversor USB a serie FT232D.
Una vez cargado el software, el programa se ejecuta mientras que haya alimentación o se actualice el software.


Con un costo inferior a 2 euros, el ATMEGA328P es un potente y flexible microprocesador monolítico para infinidad de aplicaciones de control embedidas ( embedded system ).

Existe un libro interesentate, para programadores muy expertos en arquitectura de ordenadores

Introduction to Embedded Systems
Using ANSI C and 
the Arduino Development Environment 
David Russell
2010, Morgan y Claypod

La primera parte del libro está dedicada al estudio de ANSI C. En la segunda ( capítulos 3 en adelante ) detalla la arquitectura y programación en ANSI C ( es decir, evitando todo tipo funciones de biblioteca ) de Arduino. Como me aburre pasar mucho tiempo en la playa, y no puedo dormir como otros,me lo leí este verano entre baño y baño bajo la sombrilla en Conil de la Frontera ( CÁDIZ ), que a ver si subo alguna foto de sus puestas de sol. ¿ No están los alemanes cada uno con su libro ? Pues nada, hay que ser europeo.

En general posee material muy interesante en los capítulos 6 ( General Purpose Input/Output ), 8 ( Analog Input Ports ) y 9 ( Interrupt Processing ), aunque deja que desear bastante en cuanto a ejemplos. No es en absoluto un libro didáctico, ni siquiera un manual, aunque los apéndices pueden ser de uso para programadores que no usen el IDE de Arduino. En fin, es un libro de lectura difícil, con el que no aprende a programar ni Denis Ritchie. Algo del material lo utilizaré en algún otro post, cuando investigue algo que tengo en mente...







domingo, 22 de noviembre de 2015

Linux

Intro

Hacía tiempo que no trabajaba con Blogs, pero no sé por qué esta mañana me ha dado por crear uno. Supongo que para anotar todas las experiencias nuevas y pasadas tanto en electrónica como en robótica o Linux.

Creo que es más el avance de la electrónica embebida, y la robótica, junto a mi Prusa Hephestos las que me han motivado, pero tras estar administrando blogs hace tiempo que me llevaron cientos de horas, estaba un poco aburrido de iniciar uno nuevo, más uno en el que recopilar tanto conocimiento y experiencias, ya que el título del blog así lo sugiere...

 ¿ Experimentos electrónicos ? Si hace más de 30 años que cogí un soldador. Todavía recuerdo los Valkit ( Valkit 7, amplificador de 25 watios ), Sales Kit, o la revista REDE ( ¡ vaya tela ! ), el Junior Computer o el Formant de Elektor ( romántico total). Asimismo, recuerdo los gloriosos AC125 ó AC188K, y los archifamosos ( y miles de veces quemados o reventados ) BD137 ó el 2N3055, con el que me hice un llavero... Igual reviento un par de ellos y me hago otro. Eso sí, válvulas o pentodos ví pocas...

¿ Experimentos informáticos ? Aprendí a programar ( BASIC, me dejó un libro un amigo con el que jugaba al ajedrez ) a la edad de 14 años. Años del Spectrum ZX81, cargando el Donkey Kong con un cassete, el Commodore 64 ( este era más serio, con sus peek y poke, y su teclado más profesional ). Posteriormente vieneron Commodore Amiga ( con sus tres procesadores: Denise, Paula y Agnus. Expliqué toda la historia de estos procesadores en el tema de la oposición, pero el tribunal no me dió más de un 5,5. ), el Amstrad y el CP/M.

Capítulo aparte se merece el IBM PC XT original del padre de mi amigo y hermano José Alfonso Suárez, ( mi maestro en Informática ) con sus magníficos discos de 5 1/4, que cambió por un disco duro de 10 Mb. Con AutoCad, un plotter Calcomp A3 ( que programamos en BASICA, el BASIC de IBM, y la pasamos canutas para hacerlo ) y el programa de Mediciones y presupuestos, le costó 2 millones de la época, 12,000 euros actuales. Sin embargo, lo que más recuerdo, era su teclado y su monitor monocromo verde. ¡ Eso sí que era un teclado ! Notabas cada pulsación de tecla, no como la porquería de teclados actuales...

... Tiempos de DOS, y DR-DOS. Vinieron los INVES, el 286, la multitarea, y los PCs se popularizaron. Coprocesadores ( 80387 ), el modo turbo a 33 Mhz en los 486, y el aumento de la memoria RAM. Era un lujo tener.... 4 Megabytes ! ...

Probé mis primeras versiones de Linux ( Slackware ). Eran los 90, y ya dominaba Fortran, Clipper y dBaseIII. Tenía miedo a C, y no lo comprendía, pero lo aprendí, así como me empapé diversos libros de programación y técnicas avanzadas. Manejaba interrupciones, hacía esqueletos de virus, y enlazaba con ensamblador. Me hice programador profesional, y caí en manos del DOOM con mis amigos...

Actualmente, la electrónica embebida y Arduino ha representado un cambio radical, un bombazo. Los proyectos no se limitan a componentes electrónicos montados sobre placas de circuito impreso que no pueden ser reutilizados. El hardware es mínimo, y se diseñan subsistemas que son programados con un microcontrolador. Los avances han sido brutales, y la aparición de las impresoras 3D, el mercado asiático con sus precios y la popularización de la robótica en los centros educativos son el caballo de batalla actual. Ponga un robot en su vida se escucha aquí y allá...

En fin, aunque las canas hace tiempo ya que aparecieron, sigue quedando ese muchacho que se sentaba con su amigo con el soldador a hacer amplificadores de audio sin saber muy bien cómo funcionaban. Para mí es ideal trabajar con sistemas en los que hay que saber de electrónica, informática, y sensores. De hecho me encanta sentarme a diseñar piezas con OpenScad, imprimirlas en la 3D, y programar el robot diseñado. De hecho lo considero un hobbie, por el que me pagan...

En este blog iré añadiendo contenidos relacionados con estos campos de conocimiento. El blog irá creciendo poco a poco, y espero que los lectores se sientan tan a gusto como yo mientras lo escribo

Att,


Josele


Contenidos del blog



Robótica

Enlaces al blog y temas desarrollados


Modificar un servo para rotación contínua






Experimentos con Arduino

En principio no pienso hacer un tutorial de Arduino con el "Hola mundo" - Blinking - ni me planteo hacer un curso de programación en C. Eso se lo dejo a los que empiezan, que los hay y muchos por Internet. Acabaré, como no, poniendo código relativo a motores de paso, sensores y blablabla... quiero decir que no hay nuevo bajo el sol, pero espero dar un punto diferente al enfoque Arduino, que para eso soy zurdo.

Para empezar, un hueso duro de roer para muchos. Ya subiré alguna imagen, que esto está muy soso


Arquitectura del ATMEGA328P






Guadalinex V9 no inicia el sistema xwindow

Aparece ua versión nueva de Guadalinex, la versión V9, y decidimos probarla. Basada en Ubuntu 14.04 no parece nada mal tras su instalación. En particular, la versión LITE soporta bien el hardware de los Netbooks, con lo cual me parece una versión interesante.

Tras trastear aquí y allá, personalizando el sistema, me encuentro con que tras el arranque, desaparece la pantalla de login gráfico, y me encuentro con un login en modo terminal. ¡ Un fastidio ! Suponía que sería una tontería, pero tuve que bucear en Internet bastante antes de encontrar el fallo. 

Hay mucha documentación relativa a "pantalla en negro" sobre Ubuntu 14.04, en inglés y en español.. El fallo se debe principalmente a tres causas:

  • Controladoras NVIDIA o ATI Radeon
  • Problemas con fichero .Xauthority
  • Fallo del inicio gráfico ( mdm )

En mi caso, no eran los dos primeros. Tras un login en modo terminal, ejecutaba desde la línea de comandos 

  • startx
  • mdm
 y el sistema x window arrancaba perfectamente. Así pues, el problema era de configuración.

Probé varias soluciones:

a) dkpg-reconfigure mdm   , pero tras reiniciar el sistema el problema persistía
b) instalar gdm                   , sin arreglo

El problema consiste en que al instalar algunos programas, modifican el fichero /etc/profile, añadiendo órdenes que el sistema no reconoce. Hay pues que modificar el fichero

Una vez restituí dicho fichero, el sistema volvió a arrancar perfectamente.