viernes, 7 de junio de 2013

Esquemas de la robótica



.
.
.
.
.
.
.
.
.
.
Resulta por ello que a primera vista la cosa parece sencilla. lo que nosotros queramos programar o se corresponde al diagrama tipo A o al diagrama tipo B. Claro que, hay que añadir  un pequeño detalle

 Las cajas de los diagramas encierran a su vez acciones que se pueden en cuadrar en uno de estos dos esquemas y así sucesivamente por ejemplo en una d sola iteración la cosa puede pudiendo llegar alcanzar este aspecto.

Si las iteraciones se producen por ejemplo 50 veces la cosa adquirirá una complejidad bárbara,, lo cual es necesario pues estos dos esquemas son los trajes que valen para cualquier cosa que queramos programar,, desde algo tan sencillo como que cuando de una palmada se encienda una luz, a cosas tan terriblemente complejas como la travesía del atlántico desde Norteamérica a La Coruña efectuada por un pequeño robot submarino.
Sin embargo estos esquemas son fundamentales para enfrentarnos a la programación de cualquier acción por los que les dedicaré una especial atención. Decíamos en el post anterior, (y si lo ha olvidado vuelva a darse una vuelta por el post), que “Programar consiste pues, en descomponer una tarea compleja en otras más sencillas”, pues exactamente estas estructura son la forma adecuada de hacerlo. Sabemos que nuestro programa se puede encuadrar dentro de uno de estos dos esquemas.
Por ejemplo nuestro programa que v estudiamos en el artículo anterio para que el robot vaya de la cocina al salón llamado “Trasladarse_de_la_cocina_al_salon”, es un modelo claro de programa tipo B
Así pues, vamos a estudiar ambos esquemas con un poco en detalle:
El esquema de tipo A se le suele llamar  Programa de meni
Consta de tres módulos y una caja de decisiones  El módulo superior o de inicio hará alguna cosa antes de finalizar su funcionamiento, por ejemplo una cosa típica es solicitar por pantalla introducir una una opción de menú, Finalizada esta parte, se entra en la caja de decisiones que es el rombo que está debajo, en ella se compara un valor que se ha generado como consecuencia de la actividad en el módulo de inicio, con otro valor que puede también haber sido generado en el modulo inicial o ser un valor fijo.
Supongamos que en nuestro, caso el valor generado en el modulo inicial fuera el valor introducido por es usuario en una pantalla  y el valor con el que se compara es un “1”, las comparaciones son solo de tres tipos, igual (=),  menor (<)” o “mayor” (>). Supongamos que en nuestro caso la comparación que programamos es “igual”.
Si el valor introducido en el proceso de inicio fue “1” al comparar con el parámetro fijo “1”  da si y se ejecuta el Programa A, en el caso que se hubiera introducido otro valor se ejecutará el Programa B.
El esquema tipo B se suele llamar esquema repetitivo
Consta igual que el anterior, de tres módulos un “Módulo de inicio” donde se efectúan una serie de labores previas que solo se efectuarán una vez,  un Módulo Proceso en el que uno de las instrucciones consistira en modificar el valor de una variable que cuando acaba el “Módulo proceso” pasa a una caja de decisiones en la que cuando la comparación da como respuesta “no”, manda repetir nuevamente el Modulo proceso de cabo a rabo y volver a repetir la comparación, hasta que la respuesta es “si” que finaliza las repeticiones entrando en un “Módulo fin” donde se realizan una serie de labores que solo se efectúan una vez al finalizar el proceso.
En nuestro caso el Modulo de Inicio será “Salir de la cocina” algo que solo se hace una vez, el Módulo proceso será “Dar un paso en el pasillo” que se repetirá tantas veces hasta que el módulo detecte que ha entrado en el salón, donde dejara de dar pasos por el pasillo y por último  se ejecutará el Modulo fin que solo se repite una vez que en nuestro caso será “Entrar en el salón”
Cono dijimos y volvemos a repetir “Programar consiste pues, en descomponer una tarea compleja en otras más sencillas”, la tare inicial la hemos descompuesto en tres módulos que son independientes entre si, cada uno tiene un principio y un fin y suponiendo que el resto de los módulos funcionen correctamente, bastará que seamos capaces de resolver correctamente  el que estamos construyendo para que todo el sistema funcione.
Como el proceso de descomponer un programa es iterativo,  si el módulo que estamos construyendo no le sabemos resolver, lo descomponemos en un módulo del tipo A, o del tipo B, según convenga, con lo que el modulo irresoluble se ha transformado en tres submódulos que serán mucho más sencillos, por tanto mucho más fáciles de construir.
Hay otro concepto que conviene tener claro relacionado con los módulos, Observarán que hasta ahora hemos hablado solo de las cajas, o módulo pero no hemos hablado de las líneas que los unen. Hay en informática dos conceptos tan sencillos como estos que hasta ahora hemos hablado, que es el concepto de “Fase” e “Interfase”,  Fase es la parte del programa capaz de alterar el valor de los datos, en una palabra, las cajas que hemos llamado Módulos, en ellos, los datos se alteran mezclan, generan, suman etc., de acuerdo con unas reglas, o algoritmos que hemos programado, pero en el transcurso de esos procesos los datos han adquirido valores que son resultados intermedios, que otros módulos necesitarán para su buen funcionamiento. Hay por tacto que guardarlos para su uso posterior en algún lado, allí donde se guarden son las interfases es decir elementos que pasan de un programa al siguiente sin modificarse y que en el esquema hemos pintado como una línea que une la salida de un módulo con la entrada en otro.
Esas interfases pueden ser de diferentes tipos, una es la misma memoria del ordenador, que guarda valores intermedios que se van a utilizar posteriormente. Como esa memoria sólo se mantiene mientras el ordenador esté en marcha y mientras no se utilice para otra cosa, normalmente solo se utiliza para pasar valores de un módulo al módulo siguiente. Pero hay otros datos que conviene guardar incluso si el ordenador se apaga por ejemplo los datos contables, los nombres de los clientes o por ejemplo en robótica la ruta que va siguiendo el robot. Estos datos se conservan en memorias no volátiles, como puede ser el disco duro, en estructuras de datos que van desde los registros de un fichero a Bases de datos y sobre soportes que pueden ser el disco duro del Ordenador, que es el más habitual, pero tambien un CD o un PenDriver.
Así pues cuando estemos diseñando un programa habremos de tener en cuenta donde guardaremos todos los valores que por un motivo o por otro van a utilizarse en otros módulos y nos tendremos que preocupar en cada módulo de leerlos, utilizarlos y actualizarlos para que el siguiente módulo que los utilice se encuentre la última versión de los mismos.
Y ya esta con estas nociones básicas me siento capaz de hacerle comprender poco a poco las complejas instrucciones que hay que introducir para que un robot haga cosas como tocar el violín.

El siguiente robot es un rastreador de luz específicamente diseñado a tal efecto y su única tarea es encontrar un punto de luz dentro de su ángulo de detección de 180º frontales y dirigirse lo mas rápido posible hacia tal fuente de luz.
Dispone de 3 sensores de luz LDR dispuestos en ángulo de 60º los unos de los otros y metidos en  una bocina dividida en 3 partes y echa al efecto con cartulina negra para evitar que la luz ambiente afecte a la buena detección de la fuente de luz a encontrar, también dispone de 3 circuitos comparadores analógicos de tensión en torno a amplificadores operacionales en modo comparador  y lógica digital programable (a mano) en torno a circuitos integrados de la serie 74, el driver controlador de los motores es un ULN2003 con lo que se controla el encendido de los dos motores independientemente, al usar el ULN2003 no se dispone de control de dirección de giro y las ruedas en ningún caso correrán hacia atrás, por ultimo y terminar con la descripción, e usado una base móvil con dirección de giro diferencial (tipo tanque) construida a partir de 2 kits motorizados 4x4 a escala 1/32 de camiones de mina que comercializa TAMIYA, como los motores actúan sobre las dos ruedas de un costado e juntado dos camiones y ahora cada motor de cada camión actúa sobre un lado con lo que ya tenemos el sistema diferencial de dirección. La alimentación de la parte lógica de control es mediante una pila de 9V y la parte de potencia y motores es mediante las mismas pilas que trae cada camión compuesta por 2 pilas LR6 de 1,5 V, estos dos grupos de pilas los e conectado en paralelo para disponer de mas corriente y que se agoten por un igual los dos grupos de pilas, como puede deducirse los motores son de 3V cada uno y gastan una media de 400mA aunque el pico de arranque es bastante elevado y ronda 1 Amperio.
Funcionamiento: Paso ahora a describir el funcionamiento del circuito principal del robot que contiene la lógica digital compuesta por circuitos integrados de la serie 74xx, el diseño del circuito es tal que se puede programar de manera manual y sin tener grandes conocimientos de electrónica digital, mediante cableado entre los conectores J7 y J6. De esta manera seremos nosotros mismos los que programemos la actitud del robot según las condiciones o eventos externos captados por los sensores, como se verá mas adelante la configuración optima de la parte programable no la describo y no puede verse en ninguno de los esquemas, no obstante estará explicado de una forma muy sencilla y completa el modo de hacerlo y cada cual tendrá que programarse el robot a gusto ya que de esta manera será mas satisfactorio el montaje de este robot y de paso aprenderemos un poco sobre circuitos digitales simples.
Sensores: El siguiente esquema muestra el circuito utilizado para poder ajustar la sensibilidad o histerisis del nivel luz a detectar y de este modo poder dejar fuera de acción a la luz ambiente u otras posibles fuentes de luz.
El funcionamiento de este circuito es como sigue; como ya sabemos, la LDR varia su resistencia interna en función de la luz que incide sobre ella, a mas luz menos resistencia y viceversa, si nos fijamos en el circuito anterior veremos que lo que se a hecho es un divisor de tensión simple en base a dos resistencias, una de ellas es la LDR que variara su valor en función de la luz y la otra es una resistencia fija de 10K, al variar la LDR de valor lo que también hará es variar la tensión en el punto intermedio entre las dos resistencias, con lo que ya tenemos un nivel de tensión proporcional a la luz. Seguidamente lo que se hace es comparar el nivel de tensión proporcionado por el conjunto divisor de tensión LDR-Resistencia con otra tensión variable esta vez obtenida de un potenciometro, el amplificador operacional lo que hace es activar su salida o desactivarla en función de si los valores en su entrada positiva es igual o mayor al de su salida negativa, de este modo podemos ajustar el nivel de histeris del circuito es decir con que valor mínimo de luz se activara su salida.
Como también podemos observar, en la salida del amplificador operacional se a dispuesto un diodo LED para tener una indicación de visual del estado de salida del circuito y de este modo poder ajustar fácilmente sin instrumento externo alguno, también se a dispuesto un jumper en el caso que no queramos que los leds luzcan una vez ajustado el circuito.
El robot consta de dos circuitos idénticos como este, como cada uno maneja dos LDR en total serian 4 pero como en este caso tan solo necesitamos 3 sensores LDR podemos dejar sin montar media parte de uno de los circuitos si así lo creemos conveniente (aunque teniendo en cuenta el bajisimo precio de los componentes que lo forman no vale la pena).
Lógica de control 1/2: Aquí tenemos la mitad del corazón del sistema lógico de control que se describirá en dos partes como ya habréis intuido.
El problema principal que se me planteaba en el diseño de este robot era el uso de 3 sensores LDR ya que no podía hacerlo tan simple como si hubiese sido con 2 LDR, aunque ni que decir de las ventajas de usar 3 sensores en la practica. Pues bien al pensar un poco y hacer unos bocetos sobre papel se me ocurrió (lo que a todo el mundo con un mínimo de electrónica digital jeje) que 3 LDR equivalían a 8 posibles estados de salida en conjunto, bien esta parte ya la tenemos pensada, ahora queda el que hacer con estos 8 posibles estados, en forma binaria no nos son muy útiles a no ser que usemos un microcontrolador o sistema complejo con lo que la siguiente fase será convertir los 3 bits binarios en 8 salidas independientes y para tal efecto usaremos el circuito integrado 74LS138 que es un conversor BCD-Decimal de 3 bits y nos viene al dedillo para este caso, las salidas de este integrado son pull-up y se activan a nivel bajo (siempre están a 5V menos cuando se activa la salida que pasa a ser 0V o GND).
Pues bien esta parte del circuito ya la tenemos echa, o casi.. os habréis fijado en que e puesto unos disparadores trigger schmitt  tipo 74LS14 en las entradas, pues bien esto es debido a que los amplificadores operacionales LM358 no dan mas que 3,3 V a sus salidas y si los dirigiésemos directamente al 74LS138 este ni se enteraría de los niveles lógicos y tomaría todo como 0, hay otros operacionales que dan a su salida lo mismo que su alimentación pero bueno esto ya esta echo y funcionando :)
Lógica de control 2/2: Pues bien aquí tenemos la segunda parte del circuito de control y el problema ahora es que tenemos 8 salidas del 74LS138 y solo 2 motores que actuar, así que nos sobran unas cuantas salidas no?, y como vamos a poder hacer que en un determinado estado de entrada se active tal motor?.
Vamos a analizarlo ahora del revés, tenemos 2 motores, el control que vamos a tener sobre ellos va a ser tal que solo podamos activarlos o desactivarlos en una dirección con lo que para girar el robot mantendrá un lado frenado mientras las otras ruedas giraran (como un tanque) el radio de giro de este sistema es mas grande que haciendo girar un lado en un sentido y el otro lado en otro sentido, pero como es mas sencillo usaremos lo primero. Para controlar los motores usaremos un circuito integrado driver especifico para motores modelo ULN2003 que es suficiente para pequeños motores de juguetería. Bien ahora lo tenemos asi; el motor tiene 2 cables, uno de ellos lo llevamos a Vcc y el otro lo hacemos pasar por el driver que actuara como un interruptor y activara o no el motor, ahora tenemos 2 cables para el control de los 2 motores, 2 cables son 4 posibles estados; Adelante, Giro derecha, Giro izquierda, Parado, de esta manera tenemos un control simple de todas las posibles acciones del robot.
Para solucionar el problema planteado anteriormente sobre las 8 salidas y los 2 motores.. pues nada mas fácil que un codificador de prioridad o conversor Decimal-BCD, en este caso un 74LS147 que dispone de 9 entradas independientes y una salida binaria de 4 bits equivalente a la entrada activa, para activar los motores usaremos (tal como se ve en el esquema) solamente las salidas A y B, las entradas del codificador de prioridad se han puesto a pull-up mediante resistencias y se activaran a nivel bajo, recordemos que el 74138 activaba sus salidas a nivel bajo también, con lo que los 2 integrados se acoplan entre si a la perfección.
En el esquema también podemos ver el regulador de tensión en torno a un 7805 que regulara a +5V los +9V obtenidos de la pila que alimenta el circuito.
Montaje: El robot consta en total de 3 placas de circuito impreso, dos para los sensores y una con la lógica de control, conectadas entre si tal como puede verse en la siguiente figura:

La siguiente parte que tenemos que hacer es una especie de bocina plana de 180º en total dividida en 3 sectores a 60º en donde ubicaremos las LDR. tal como puede verse en la foto de la derecha. En mi caso el sector central lo e estrechado con tiras de cartulina negra para así tener una mejor detección de lo que realmente es el frente (en esta foto no están puestas tales tiras). Esto se debe de probar sobre la marcha una vez el robot ya funcione y hagamos diferentes pruebas.

Programación: Llegados a esta fase supongo que ya tendréis montado el robot por completo y solo os quedara la programación del circuito.
La tabla de la verdad del circuito integrado 74LS138 es la siguiente:
InputOutputEstado de los sensores
CBA/Q=L
0001Luz en todos
0012
0103
0114
1005
1016
1107
1118Oscuridad total


y como puede verse cada combinación de entrada de los sensores LDR equivale a que una de las salidas del integrado tome el valor lógico bajo. Tendremos en cuenta para la programación que las señales provenientes de las LDR son invertidas al pasar por el trigger schmitt con lo que en ausencia de luz captaremos todas las entradas a nivel lógico alto. Como puede verse hay dos campos rellenados correspondientes a oscuridad y luz en todos los sensores, los demás deberán de rellenarlos cada cual ya que de esta manera será mas divertido y satisfactorio el trabajo. Los números de salida equivalen a cada pin del conector J7 del circuito de control.
En la siguiente tabla de la verdad podemos ver la equivalente al circuito integrado 74LS147 codificador de prioridad, que como vemos saca un valor binario equivalente a la entrada que tiene puesta a nivel bajo.
/Entrada/Salida
123456789DCBADescripción.
1111111111111todas al aire
0111111111110
1011111111101
1101111111100Parado
1110111111011
1111011111010
1111101111001
1111110111000 Parado
1111111010111
1111111100110


Como podemos observar las salidas C y D están representadas en un color mas apagado ya que en no se usan en este montaje para nada y no se tienen en cuenta. También podemos observar que no está rellenada la descripción de lo que harán los motores en todos los casos posibles y como en el la tabla anterior será tarea de cada uno averiguarlo :) aunque en este caso es mas fácil ya que teniendo el circuito alimentado y probando con un cablecito conectado a masa podremos ver lo que hacen los motores cada vez que pinchamos el cable en una posición de conector J6 (cuidado de no poner mas de un cable a masa o hacer contactos entre pines adyacentes). La primera posición cuya descripción es "todas al aire" corresponde al caso en que no tengamos ningún calecido puesto y estén todos los pines de J6 al aire con lo que en realidad estarán a Vcc por las resistencias de polarización y por lo tanto los dos motores se moverán hacia delante.(si lo hiciesen hacia atrás seria un problema del cableado de los motores y habría que invertir los polos de estos para invertir el giro de estos)
Creo que es bastante fácil encontrar las combinaciones para programar el robot y que haga lo que queramos pero de todas formas si alguien encontrase demasiadas complicaciones se puede poner en contacto conmigo y le mandaría la forma mas correcta de funcionamiento. He aquí un diseño super simple para montar un rastreador de líneas básico con 2 sensores CNY70 y componentes discretos de fácil compra en cualquier comercio de electrónica.
En el esquema mostrado se puede apreciar como funciona el circuito, el led emisor del sensor CNY70 se alimenta a través de una resistencia R1 de 680 Ω, cuando una superficie reflectante como el color blanco de la superficie por donde se moverá el rastreador, refleja la luz del led emisor, el fototransistor contenido en el sensor CNY70 baja su resistencia interna entre Colector y Emisor con lo cual conduce la corriente que hace que también entre en conducción el transistor Q1 que estaba polarizado a masa por medio de la resistencia R2 de 10 KΩ. Q2 sirve para invertir la señal para que de este modo se desactive el motor cuando ve blanco y se ponga en marcha cuando ve negro el sensor, con lo que al activarse Q1 hace que se active Q2 cortando a Q3 con el, ya que este ultimo estaba activo porque esta polarizado por R3, con lo cual lo que a pasado es que la salida del motor se a desactivado cuando el sensor a detectado una superficie reflectante, en estado de reposo la salida estará siempre activa y Q3 conduciendo. Los 2 circuitos se pueden alimentar con 4 pilas normales de 1,5V puestas en serie con lo que se obtienen 6V, dependerá del consumo de los motores elegir pilas o baterías mas potentes.
Montaje: El robot se compondrá de un circuito que podremos hacer fácilmente con una placa de topos o de prototipos o usando los fotolitos expuestos y este tendrá dos circuitos exactamente iguales uno para cada sensor-motor e irán cruzados con lo que el sensor izquierdo actuara sobre el motor derecho y el sensor derecho sobre el motor izquierdo tal como se muestra en la ilustración.
Los motores tienen que ser de corriente continua y habrá que fabricarles una reductora si no disponen de ella para mover las ruedas, contra mas grandes sean las ruedas, mas velocidad alcanzara el robot, aunque no hay que pasarse con el diámetro de estas porque si no en las curvas se saldrá de trayectoria, unos 6 cm. es lo ideal.
Los sensores irán dispuestos mirando al suelo y a unos 2 o 3 mm de separación desde el suelo a la superficie del sensor y la separación entre ambos sensores será para que quede dentro de la línea negra que vayamos a usar como trayectoria. En mi montaje he utilizado dos servos trucados de manera que queden solo los motores CC con la reductora osea sin circuito de control pero se puede usar cualquier motor de CC de unos 5 o 6 voltios y que no consuma demasiado para no agotar las pilas o baterías demasiado deprisa. El trazado lo podremos hacer sobre una cartulina blanca y para trazar las líneas usar cinta aislante negra, tener cuidado en no hacer curvas demasiado cerradas ya que si el robot es muy veloz (ruedas grandes) se saldrá de la trayectoria por inercia y al sacar los 2 sensores fuera de la línea no volverá a entrar (recordemos que este sistema no es microcontrolado) por lo que haremos algunas pruebas antes de trazar el camino final.
Funcionamiento: Pondremos el robot en la superficie de fondo blanca y lo alimentaremos, como los dos sensores están activos los motores permanecerán parados, ahora empujaremos el robot hasta la línea de trayectoria negra, al entrar uno de los sensores con la línea negra este hará que el motor del lago contrario empiece a funcionar con lo que el robot entrara por si solo en la trayectoria, cuando tenga los dos sensores viendo negro los 2 motores estarán en marcha con lo que el robot avanzara en línea recta, ahora bien si el llega a una curva y supongamos que el sensor izquierdo sale de la línea negra entonces provocara que el motor del lado contrario (motor derecho) se desactiva con lo cual el robot girara a derecha (como un tanque) entrando de este modo en la línea negra otra vez... para el caso contrario pasa lo mismo pero con el otro motor y sensor.
Espero disfrutéis de este sencillo diseño.. creo que es uno de los mas sencillos que hay ahora mismo por internet por no decir el mas sencillo :)

Software y programación


Presentación
Como Hacer tu Robot pretende enseñar a casi cualquiera como crear un Robot paso a paso, utilizando sensores, actuadores, motores y programándolo tu mismo. En definitiva todo lo que necesitas saber para crear un Robot desde cero.

Después de muchos años buscando e interesándome por el tema de la Robótica, he tenido muchas dificultades para encontrar paginas donde se explicara bien y paso a paso como construir un Robot, ¿te a ocurrido lo mismo?, al final me he decidí en crear mi post y colgar mi propia experiencia y conocimientos, espero que sean útiles y disfrutés tanto como yo en crear este post.


Estudié Electrónica, y siempre me fascino la robótica, tuve la suerte de poder realizar algún curso sobre Robótica (básico), y también de trabajar en entornos industriales, donde habitualmente estoy en contacto con Robots, en este post voy a intentar exponer lo que sé sobre el tema de la robótica. Mi idea y objetivo es que con ayuda de esta página, casi todos podáis construir un Robot. Y..¿quien sabe? ¿Estaremos creando a un nuevo Jhonny nº5? también los animo a que me mandés sugerencias, dudas, y mejoras para que este post ayude a todo aquel que tenga el capricho (como lo tuve yo) de Hacer un Robot. No lo pensés dos veces en mandarme un MP, que da no molesta.

He dividido el post en cuatro secciones, lo que he intentado es, agrupar por un lado toda la parte electronica, la parte de sensores y motores, y finalmente la programacion, para que finalmente seamos capaces de crear nuestro Robot.




MiniCursoElectronica - Aqui trato de explicar a grandes rasgos cada uno de los componentes que vamos a utilizar para la construcción del Robot, no se si todos tenés conocimientos electrónicos, pero si no es así, tenés esta sección para que sepas que estamos utilizando y porque.



ELECTRONICA
En princio no se quien va a visitar mi post, pero esta claro que para construir un robot, se necesitan unos conocimientos mínimos en electrónica, no hace falta decir que por lo menos hay que conocer los componentes básicos que van a intervenir en nuestra placa controladora, soldar, conectar, polarizar y chequear. En esta sección, voy a tratar de transmitir esos conocimientos, explicando brevemente cuales son, para que sirven, y cuando se usan cada unos de los componentes que vamos a usar, por favor si alguien no entiende o cree necesaria una explicación mas detallada, avisarme para extenderme mas (es un justo precio a pagar ¿no les parece? el resto es gratis ;P)
Si no tienes conocimientos de electrónica, te aconsejo que ojees esta sección detalladamente antes de usar los componentes, esto te hará mejorar y comprender el rendimiento y funcionamiento de tu Robot. Quiero aclarar que esta sección no esta dedicada a convertiros en electrónicos, (Un buen electrónico necesita años de experiencia) ni nada de eso, tan solo se trata de que se sepan algunos conceptos básicos para que podáis construir y desarrollar su propio Robot, lo justo para que no se limiten a "copiar" si no que con ayuda del ingenio y conocimientos de cada uno puedan crear/modificar su propio proyecto.




La base en la que os aconsejo trabajar, para fabricar o hacer pruebas con la placa de control de vuestro Robot, es el típico entrenador que se usa en electrónica, se trata de una especie de pastilla o placa de plástico perforada, que esta dividida en 4 sectores (recuadros en verde) que NO están conectados entre si. Estos "sectores" se dividen en columnas, (la marco en rojo) que SI están conectadas entre sus agujeros, es difícil explicar esto con palabras, pero si os hacéis de uno, y después de hacer varias pruebas, seguro que entenderéis su funcionamiento. La ventaja de usar este entrenador son muchas, pero para mi la principal es que no se necesita experiencia con el soldador, además para hacer pruebas y prototipos, esta opción es la mejor, ya que puedes hacer todo tipo de cambios rápidamente, conectar, desconectar, cambiar componentes etc.. casi de inmediato y sin miedo de si romperás o desperdiciaras componentes si aplicas demasiado calor. una vez probado el circuito y si os interesa podréis construir una placa permanente para vuestro Robot. Por supuesto este material podéis encontrarlo en cualquier tienda especializada de electrónica.



Programación - Esta sección trata sobre el Lenguaje de Programación que vamos a usar, así como las instrucciones básicas del propio lenguaje.



Programación


Hola, quizás esta sección sea la mas importante de este post, ya que de la Programación dependerá directamente el comportamiento de nuestro Robot, una buena Lógica de Programación influirá directamente en la funcionalidad del 'bicho', aqui iré poniendo todo lo necesario para dar esa 'inteligencia' a nuestro Robot, desde un mini curso de ensamblador, como compilar nuestro programa (compilar es pasar de nuestro código 'entendible' por nosotros a código máquina que es el que entiende el microControlador, los famosos ceros y unos 000101100110000 ) y por ultimo como transferirlo al microcontrolador. Para realizar esto ultimo necesitaremos un programador de PIC.

El lenguaje de Programación que usaremos será Ensamblador. El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.

Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con los potentes lenguajes de alto nivel.

Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, se pretenden altos rendimientos o un uso de recursos controlado y reducido. Muchos dispositivos programables (como los micro controladores) aun cuentan con el ensamblador como la única manera de ser manipulados.


Caracteristicas del Ensamblador * El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido directamente por un ser humano ya que su estructura se acerca más bien al lenguaje máquina, es decir, lenguaje de bajo nivel.

* El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un microprocesador, suele necesitar ser modificado, muchas veces en su totalidad para poder ser usado en otra máquina distinta, aun con el mismo microprocesador.
Los programas hechos en lenguaje ensamblador son generalmente más rápidos y consumen menos recursos del sistema (memoria RAM y ROM). Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel.

* Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de código difíciles de programar en un lenguaje de alto nivel.

* También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se interrumpa durante su ejecución.


Sensores-Actuadores - Esta es la parte donde usaremos los alicates!!, aqui hago referencia a los sensores y Motores que se usan habitualmente en este tipo de Robot.


Sensores y Actuadores Este será nuestro Taller, y para mi, la parte mas divertida y emocionante, Aquí vamos a ver los diferentes tipos de sensores y actuadores que podemos usar para nuestro Robot, como y cuando usarlos, cual es el patillaje de los sensores / motores y como polarizarlos en nuestro Robot. Esta parte es en la que cada uno de nosotros marcara la diferencia con el resto, ya que aqui entra la creatividad de cada uno combinada con la combinación de cada sensor y actuador, seremos capaces de crear un Robot diferente al resto capaz de realizar lo que nosotros queramos y programemos.

Personalmente este truco me fue de gran utilidad, lo encontré por casualidad hace muchos años en una web que estaba en ingles, de hecho gracias a esto simplifique muchísimo la placa de control que tiene mi Robot, ya que no me hizo falta ningún circuito adicional de potencia para gobernar los motores, (normalmente es necesario un complejo circuito compuesto de transistores de potencia para gobernar los motores convencionales) a mi me bastó con generar 'pulsos' para mover el motor, y esto lo hago directamente desde el micro controlador (pero bueno no adelantemos acontecimientos, esto se ve en otras secciones de la web), como decía, estos servos son fáciles de encontrar, es muy posible que tengais un juguete viejo, tipo coche, avión o barco teledirigido, pues bien, si ese es tu caso ¡¡felicidades!! Como mínimo ya tienes 2 servos!! mas que suficiente para que puedas hacer tu Robot. También dejo un testeador de servos por si quieres ir mas allá y hacer experimentos y/o pruebas con el puerto paralelo de tu PC para controlar esos servos. (como
adelante antes, dependiendo de la frecuencia del 'pulso', lo que interpreta el servo es dirección, velocidad y hasta la posición!!, es una gozada.

Todos los sensores que he utilizado, se pueden encontrar en cualquier tienda de electrónica, estos sensores se pueden clasificar en: Sensores Ópticos, Sensores Mecánicos y Proximidad, estos últimos son un poco mas complejos y requieren unos circuitos adicionales .

Bueno, para empezar creo que esta bien, los dejo que navegen tranquilos y que analicen la circuiteria de cada uno de estos sensores y como ya he dicho antes, se aceptan sugerencias! a ver si entre todos hacemos un post en condiciones.


EXTRA

Modificar un Servo para convertirlo en un servomotor para nuestro Robot Hoy en día no es difícil encontrar motores para nuestro Robot, a un precio razonable, tenemos varias soluciones, pero a mi personalmente la mejor es esta. Los motivos son muchos, la principal, que controlando el pulso que le enviamos al servo, podemos hacer que varié la velocidad, sentido o incluso posicionarlo en una posición que nos interese (en grados).

Esta clase de servos podés comprarlos directamente en una tienda de aeromodelismo o simplemente podés destripar su viejo coche a control remoto. ustedes mismos!!

La idea inicial es modificar el servo para que pueda girar 360º , no se si sabés que esta clase de servos poseen un movimiento limitado de unos 180º. Después de este procedimiento vamos a conseguir girar 360º!! La idea parece buena ¿eh? bueno empezamos y pongamos la en practica.

No se preocupen si los suyos no son iguales, depende del fabricante, los soportes y algunas piezas interiores cambian, pero el proceso sigue siendo el mismo, con maña se hace.

Hay que quitar los 4 tornillos de la tapa superior, para poder quitar las dos tapas y tener acceso a la reductora y circuito del servo el servo mas o menos tendrá este aspecto (esta foto es de un servo Futaba)




Después hay que desmontar la reductora para poder sacar el circuito con el motor para ello solo basta con tirar hacia arriba de las ruedecillas hasta sacarlas como se ve en la figura.



Después se tiene que quitar la tuerquecilla que sujeta el potenciómetro con la caja y se "empuja" con mucho cuidado por la parte superior y se tira de la parte inferior hasta sacar todo el mecanismo de la caja.(yo empujaba el eje del motor hacia abajo)





El siguiente paso es el mas complicado porque hay que sustituir el potenciómetro por dos resistencias de 2K2 o 3K3 pero conservando el potenciómetro porque este es el eje de salida, ahora explicare lo que hice yo con el potenciómetro, un invento chiniwini casero.



Izquierda servo no modificado // derecha: servo modificado



También la rueda de salida se tine que modificar, hay que limar la leva para que no haga tope con los otros piñones y ruedas.



Izquierda: sin modificar // derecha: modificado



Después se monta todo otra vez con la peculiaridad de que...¿como se pone la rueda de salida si ya no esta el potenciómetro que hacia como eje?, pos muy fácil pensé yo, jajaja yo coji el potenciómetro y lo desmonte (quite las pestañas que sujetan la carcasa y abrí el potenciómetro en dos mitades) vi una pieza de plástico que impedía que girara el eje, la queme con el soldador un poco y lo justo para que pudiera girar, y la monté en la carcasa del servo (solo la mitad de arriba) teniendo cuidado en que no tocase con las resistencias que quedan justo abajo.


Listo!! ya tenemos un servomotor reciclado GRATIS!!

Ejemplos: Este se trata de un robot rastreador, este Robot es capaz de seguir una línea negra sobre una superficie reflectante, creo que para comenzar, si no tenés experiencia es un buen proyecto, fácil de construir, programar y no excesivamente caro.




link: http://www.youtube.com/watch?v=QS1EwQ6I-x0&feature=player_embedded

Este proyecto esta basado en la idea de que en ciertas fabricas, hay robots que siguen una línea negra, blanca o magnética a lo largo de la fabrica. Estos sistemas también los he visto en parques temáticos como en “Terra Mitica” en una atracción llamada “El Minotauro” que consiste en una atracción que transportaba personas siguiendo una línea magnética, como veis las aplicaciones de este principio son infinitas, realmente estamos lo que estamos construyendo es una maquina real aplicada a una miniatura ¿no es fantastico?.

Kikebot1 responde a ese principio, además y para complicarlo un poco, esta dotado de un sistema que detecta obstáculos y con un brazo los aparta de su camino.

Este sistema esta controlado por un uC PIC16F84, que controla 3 sensores Opticos y 3 motores tipo servos de modelismo modificados para que puedan moverse 360º.

Cuando el sensor esta sobre blanco este le manda un 0 lógico al PIC.
Cuando el sensor esta sobre Negro este le manda un 1 lógico al PIC.

Esto es así por el 40106 que es un inversor y que además adapta las señales de los sensores a nivel TTL para que el uC no tenga problemas. Sin el 40106 la señal seria justo al revés blanco=1 negro=0.

Con respecto al control de los motores he tenido que estudiar las señales de estos servos hasta ver que con un tren de pulsos de 1000 a 1500 uS el servo gira hacia delante y con un tren de pulsos desde los 1600 a 2000 uS gira hacia detrás. Con este margen se puede controlar también la velocidad de estos.



Esta es la placa de control, perdonar que no sea bonita, pero al tratarse de un prototipo no cuide el detalle del diseño de la placa.



Los sensores están montados uno al lado del otro según se ve en la imagen, dependerá del grueso de la línea k queramos seguir. (deben quedar dentro de la línea) Estos sensores son 2 CNY-70. tienen 4 patillas, 2 son alimentación +5V. y las otras dos son cátodo del diodo y emisor del foto transisto.



El chasis ha sido construido con un Mecano, es muy practico, ya que con pocos medios puedes fabricar casi cualquier forma.

Lenguajes de programación en Robótica.

Este documento pretende servir como una breve descripción de los distintos lenguajes que podemos encontrarnos en esta disciplina (la robótica) A continuación, mencionamos algunos de ellos:
  • Lenguaje de comportamientos: Es un lenguaje de control basado en reglas y en tiempo real que compila controladores AFSM.
  • Lenguaje robótico genérico o GRL: Se trata de un lenguaje de programación funcional para programar grandes sistemas de control modulares. Usa autómatas finitos como bloques básicos de construcción. Provee un rango de constructores más extenso para definir flujos de comunicación y restricciones de sincronización entre diferentes módulos que el lenguaje de comportamientos.
  • Sistema de planificación de acción reactiva o RAPS: Se trata de otro lenguaje de programación que permite a los programadores especificar objetivos, planes asociados a los objetivos y las condiciones para que dichos planes tengan éxito. Provee facilidades para manejar los fallos inevitables que se producen con los sistemas robóticas reales.
  • GOLOG: Se trata de un lenguaje que permite el razonamiento y el aprendizaje para un robot. Fue introducido por John McCarthy en 1963. Mezcla la resolución deliberativa de problemas (planificación) y la especificación directa de control reactivo. Los programas en este lenguaje están formulados en cálculo de situación, con la opción adicional de operadores de acción no deterministas.
  • CES: Corresponde a las siglas de C++ for embedded system. Se trata de un lenguaje de programación que extiende C++ e integra probabilidades y aprendizaje. Los tipos de datos son distribuciones de probabilidad. Pero lo más destacable de este lenguaje es que hace posible “entrenar” el software de un robot con ejemplos.
  • ALisp: Fue escrito por Bhaskara Marthi. Es una extensión del lenguaje LISP. Permite a los programadores especificar puntos de elección no deterministas de forma similar a los puntos de decisión de GOLOG. ALisp aprende inductivamente la acción correcta mediante aprendizaje por refuerzo.

Cerebro artificial

Cibernética

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
La cibernética es el estudio interdisciplinario de la estructura de los sistemas reguladores. La cibernética está estrechamente vinculada a la teoría de control y a la teoría de sistemas. Tanto en sus orígenes como en su evolución, en la segunda mitad del siglo XX, la cibernética es igualmente aplicable a los sistemas físicos y sociales. Los sistemas complejos afectan y luego se adaptan a su ambiente externo; en términos técnicos, se centra en funciones de control y comunicación: ambos fenómenos externos e internos del/al sistema. Esta capacidad es natural en los organismos vivos y se ha imitado en máquinas y organizaciones. Especial atención se presta a la retroalimentación y sus conceptos derivados.

Índice

 [ocultar

Historia

La cibernética es una ciencia, nacida hacia 1942 e impulsada inicialmente por Norbert Wiener y Arturo Rosenblueth Stearns que tiene como objeto “el control y comunicación en el animal y en la máquina” o “desarrollar un lenguaje y técnicas que nos permitirán abordar el problema del control y la comunicación en general”. En 1950, Ben Laposky, un matemático de Iowa, creó los oscilones o abstracciones electrónicas por medio de un ordenador analógico: se considera esta posibilidad de manipular ondas y de registrarlas electrónicamente como el despertar de lo que habría de ser denominado computer graphics y, luego, computer art e infoarte. También, durante la década del cincuenta, William Ross Ashby propone teorías relacionadas con la inteligencia artificial.
La cibernética dio gran impulso a la teoría de la información a mediados de los 60, la computadora digital sustituyó la analógica en la elaboración de imágenes electrónicas. En esos años aparecen la segunda generación de computadoras (con transistores en 1960) concretándose por entonces los 1° dibujos y gráficos de computadora, y la tercera (con circuitos integrados, en 1964) así como los lenguajes de programación. En 1965 tuvo lugar en Stuttgart la exposición”Computer-graphik” . Pero la muestra que consagró la tendencia fue la que tuvo lugar en 1968 bajo el título “Cybernetic Serendipity” en el Instituto de Arte Contemporáneo de Londres. También en ese año se destacó la exposición “Mindextenders” del Museum of Contemporary Crafs de Londres. En 1969 el Museo Brooklin organizó la muestra “Some more Beginnings”. En ese mismo año, en Buenos Aires y otras ciudades de Argentina, se presentaba Arte y cibernética, organizada por Jorge Glusberg con esta muestra se inauguraría los principios de la relación arte/ imagen digital en ese país. En España la primera manifestación fue la de “Formas computables”- 1969- “Generación automática de formas plásticas” -1970-ambas organizadas por el Centro de Cálculo de la Universidad de Madrid. En los primeros meses de 1972, el Instituto Alemán de Madrid y de Barcelona han presentado una de las muestras más completas que ha tenido lugar en España, titulada<Impulso arte computador>
Las primeras experiencias de lo que luego se llamaría net.art. se remontan al año 1994, es importante aclarar que ya por los 1960 existían algunas antecedentes. De todas formas se puede establecer, que las primeras experiencias donde la tecnología informática puesta al servicio de la comunidad funcionó como soporte estético trascurren por aquellos años y rompe con la idea de lectura lineal de la obra...

La raíz de la teoría cibernética

El término cibernética viene del griego Κυβερνήτης (kubernites, que se refiere al timonel, el cual gobierna la embarcación). La palabra "cybernétique" también fue utilizado en 1834 por el físico André-Marie Ampère (1775-1836) para referirse a las ciencias de gobierno en su sistema de clasificación de los conocimientos humanos.
Históricamente los primeros mecanismos en utilizar regulación automática (aunque no se usaba la palabra cibernética entonces para ellos) fueron los desarrollados para medir el tiempo, como los relojes de agua. En ellos, el agua fluía de una fuente, como un tanque en un depósito, luego desde el depósito a los mecanismos del reloj. Ctesibio usó un dispositivo flotador en forma de cono para controlar el nivel del agua en su embalse y ajustar la velocidad del flujo del agua en consecuencia para mantener un nivel constante de agua en el embalse, de modo que no desbordó ni se le permitió funcionar en seco . Esta fue la primera prótesis auto verdaderamente automático dispositivo normativo que no requiere la intervención externa entre la retroalimentación y el control del mecanismo. Aunque no se referían a este concepto con el nombre de Cibernética (lo consideraban como un campo de la ingeniería), Ktesibios y otros como Heron y Su Song se consideran algunos de los primeros en estudiar los principios cibernéticos.
El estudio de la cibernética en su sentido actual comienza con los mecanismos de teleológica (del griego τέλος o telos para el final, meta o propósito) en máquinas con fechas de retroalimentación correctiva de finales de 1700 cuando aparece el motor de vapor de James Watt. Este motor estaba equipado con un gobernador, una válvula de votos centrífugas para el control de la velocidad del motor. Alfred Russel Wallace lo identificó como el principio de la evolución en su famoso artículo de 1858. En 1868, James Clerk Maxwell publicó un artículo teórico sobre los gobernadores, uno de los primeros para discutir y perfeccionar los principios de la auto-regulación de los dispositivos.
Jakob von Uexküll aplica el mecanismo de retroalimentación a través de su modelo de ciclo de funcionamiento (Funktionskreis) con el fin de explicar el comportamiento de los animales y los orígenes del sentido en general, y utiliza por primera vez la palabra "cibernética" refiriendose a los sistemas autoregulados. En su libro Cybernetic, que lo dedica a su compañero de ciencia el Maestro Ilustre Don Arturo Rosenblueth, fisiólogo con enfoque al sistema nervioso central, reta a Wiener a utilizar sus modelos matemáticos para reproducir el sistema automático de las redes neuronales que gobiernan el automatismo respiratorio. De hecho el espacio virtual que existe en las terminaciones dendriticas le hicieron imaginar la navegación en un espacio virtual de ahí que la cibernáutica o los cibernautas traducen lo que él quería decir: navegar en algo que existe pero que nadie ve.
La rapidez extrema con la que acontecen los cambios en la sociedad está afectando a los estilos de vida, promoviendo en algunos casos el abandono de convicciones y tradiciones fuertemente enraizadas y sumiéndonos en una constante cultura de relatividad y caducidad de las cosas, de las relaciones personales y de los sucesos. Lo que hoy se considera una noticia impactante y propensa a despertar ciertos sentimientos de compasión, de rechazo, de malestar, los cuales focalizan una atención rápida y prioritaria, pero paradójicamente pronto cae en el olvido.

Definiciones

La cibernética, según el epistemólogo, antropólogo, cibernetista y padre de la terapia familiar, Gregory Bateson, es la rama de las matemáticas que se encarga de los problemas de control, recursividad e información. Bateson también afirma que la cibernética es "el más grande mordisco a la fruta del árbol del Conocimiento que la humanidad haya dado en los últimos 2000 años".
Stafford Beer, filósofo de la teoría organizacional y gerencial, de quien el propio Wiener dijo que debía ser considerado como el padre de la cibernética de gestión, define a la cibernética como “la ciencia de la organización efectiva”.
Según el Profesor Dr. Stafford Beer, la cibernética estudia los flujos de información que rodean un sistema, y la forma en que esta información es usada por el sistema como un valor que le permite controlarse a sí mismo: ocurre tanto para sistemas animados como inanimados indiferentemente. La cibernética es una ciencia interdisciplinar, estando tan ligada a la física como al estudio del cerebro como al estudio de los computadores, y teniendo también mucho que ver con los lenguajes formales de la ciencia, proporcionando herramientas con las que describir de manera objetiva el comportamiento de todos estos sistemas.
El propio Stafford Beer afirmó: "Probablemente la primera y más clara visión dentro de la naturaleza del control ([1])... fue que éste no trata de tirar de palancas para producir unos resultados deseados e inexorables. Esta noción del control se aplica sólo a máquinas triviales.
Nunca se aplica un sistema total que incluye cualquier clase de elemento probabilístico -- desde la meteorología, hasta las personas; desde los mercados, a la política económica. No: la característica de un sistema no-trivial que está bajo control es que a pesar de tratar con variables demasiado extensas para cuantificar, demasiado inciertas para ser expresadas, e incluso demasiado difíciles de comprender, algo puede ser hecho para generar un objetivo predecible. Wiener encontró justo la palabra que quería en la operación de los grandes barcos de la antigua Grecia. En el mar, los grandes barcos batallaban contra la lluvia, el viento y las mareas -- cuestiones de ninguna forma predecibles. Sin embargo, si el hombre, operando sobre el timón, podía mantener su mirada sobre un lejano faro, podría manipular la caña del timón, ajustándola constantemente en tiempo real, hasta alcanzar la luz. Esta es la función del timonel. En los tiempos rudos de Homero la palabra griega para designar al timonel era kybernetes, que Wiener tradujo al Inglés como cybernetics, en español cibernética."
En una reflexión muy poética dada por Gordon Pask la cibernética es “la ciencia de las metáforas a ser defendidas.”

Cibernética y robótica

Mucha gente asocia la cibernética con la robótica, los robots y el concepto de cyborg debido al uso que se le ha dado en algunas obras de ciencia ficción, pero desde un punto de vista estrictamente científico, la cibernética trata acerca de sistemas de control basados en la retroalimentación.
Ciertas aplicaciones de la cibernética pueden presentar algunas "desventajas" por ejemplo:
  • La creación de máquinas complejas que reemplacen a los trabajadores provocaría un recorte de personal.
  • En un futuro ya no se ocuparía personal "viejo" y contratarían técnicos jóvenes para el mantenimiento de las máquinas.
  • Es una tecnología muy potente pero su gran limitación es encontrar la relación máquina-sistema nervioso; ya que para esto se debería conocer el sistema nervioso perfectamente.
Algunas ventajas son:
  • La reducción de las jornadas laborales, los trabajos complejos o rutinarios pasarían a ser de las máquinas. Además, la cibernética brinda un gran aporte al campo medicinal.
  • Un conocimiento mayor de como funcionan los sistemas complejos pudiera llevar a la solución de problemas también complejos como la criminalidad en las grandes ciudades.
Algunas "desventajas" son:
  • Falta de empleo a la población, a causa de que las máquinas realizarían un mejor trabajo que un humano. Pobreza global.
  • Reemplazo de mano de obra humana por mano de obra robótica.
  • Eventualmente aumentaría la desigualdad social, favoreciendo a quienes tengan los recursos para adquirir y utilizar máquinas. Los ricos se harían más ricos y los pobres más pobres.
  • Los países más industrializados ejercerían un control aún mayor sobre los países menos tecnologizados, que se harían peligrosamente dependientes de los primeros.
Transformación de "desventajas" en ventajas:
  • La sustitución de la mano de obra "barata" por máquinas complejas emancipa al hombre del trabajo grosero.
  • Al masificarse cada vez más y más la cibernética y la automatización el llamado "desempleo" se convertiría en lo que los griegos llamaban "ocio" u artes liberales de hombres libres o no esclavos.
  • Al reemplazarse la mano de hombre humana por mano de obra robótica el hombre quedaría por fin emancipado de trabajos molestos, rutinarios, alienantes, peligrosos, nocivos, degradantes, sosos, etc.
  • No habría mayor razón para continuar con el sistema de explotación "del hombre por el hombre".

Cibernética y revolución tecnológica

La cibernética ha desempeñado un papel decisivo en el surgimiento de la actual revolución tecnológica. Alan Turing, alumno de John von Neumann (otro de los pioneros de la cibernética), ambos precursores de la computadora y Claude Shannon alumno de Norbert Wiener con su Teoría de la Información

Cibernética y educación

Los conceptos y princípios de la cibernética también se han aplicado en la pedagogía conocida como pedagogía cibernética.