<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7337166374138141472</id><updated>2011-12-05T09:20:28.473+01:00</updated><category term='matlab'/><category term='arduino'/><category term='bluetooth'/><category term='acelerometro'/><category term='seguidor líneas'/><category term='i2c'/><category term='información general'/><category term='WiiChuck'/><category term='rf'/><title type='text'>Mi Lego(C) Mindstorms.</title><subtitle type='html'>Resumen de mis experiencias con mi Lego(C) Mindstorms. Y ahora también con Arduino.

Espero que algún día haya aquí publicadas entradas que la gente encuentre interesantes.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2129335818436789696</id><published>2011-09-28T22:24:00.009+02:00</published><updated>2011-09-30T21:28:52.474+02:00</updated><title type='text'>Robot SigueLíneas (IV): Resultados</title><content type='html'>Y aquí os dejo un vídeo de este robot moviéndose a lo largo de la línea del panel que venía con el Lego(C) Mindstorms.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;iframe width="425" height="349" src="http://www.youtube.com/embed/j47GQ65Iifo?hl=es&amp;fs=1" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Va bastante lento. El que se mueva más rápido iba a necesitar de más labores de programación y tampoco estaba por la labor. Con hacer un seguidor de líneas utilizando dos sensores ya me daba por satisfecho.&lt;br /&gt;&lt;br /&gt;En el vídeo se puede ver como comienza a girar el robot. Cuando uno de los sensores se acerca a la línea negra. Cuando la línea está entre los dos sensores el robot sigue recto.&lt;br /&gt;&lt;br /&gt;El cable conectado al arduino,se utiliza para darle energía y para enviar la información al Matlab, que la lee a través del puerto serie. Matlab envía las órdenes utilizando el bluetooth, que milagrosamente ahora funciona.&lt;br /&gt;&lt;br /&gt;Me gustaría como mejora, ponerle un portapilas al arduino para no tener cables. Enviar la información a través de un emisor rf a otro arduino, este sí, conectado por usb a un Matlab y que este envíe las órdenes por bluetooth al bloque.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2129335818436789696?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2129335818436789696/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2129335818436789696&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2129335818436789696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2129335818436789696'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/09/robot-siguelineas-iv-resultados.html' title='Robot SigueLíneas (IV): Resultados'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/j47GQ65Iifo/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-3267033956194685909</id><published>2011-09-28T22:14:00.009+02:00</published><updated>2011-09-30T20:58:50.459+02:00</updated><title type='text'>Robot SigueLíneas (III): Matlab</title><content type='html'>Aquí adjunto el código para mover todo con matlab.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;umbral = 150;&lt;br /&gt;potenciaAdelante = 5;&lt;br /&gt;potenciaGiro = 3 * potenciaAdelante;&lt;br /&gt;&lt;br /&gt;COM_CloseNXT all&lt;br /&gt;hNXT = COM_OpenNXT('bluetooth.ini');&lt;br /&gt;COM_SetDefaultNXT(hNXT);&lt;br /&gt;&lt;br /&gt;placa = serial( 'COM4' , 'BaudRate', 9600 );&lt;br /&gt;fopen( placa );&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;    i = 1;&lt;br /&gt;    &lt;br /&gt;    mi = NXTMotor('A');&lt;br /&gt;    md = NXTMotor('B');&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    while (i &lt; 10000)&lt;br /&gt;        loQueRecibo = fscanf( placa );&lt;br /&gt;        loQueRecibo = sscanf(loQueRecibo,'%d');&lt;br /&gt;        &lt;br /&gt;        a = size(loQueRecibo);&lt;br /&gt;        &lt;br /&gt;        if(a(1) == 2)&lt;br /&gt;            &lt;br /&gt;            loQueRecibo;&lt;br /&gt;            &lt;br /&gt;            valorIzquierda = loQueRecibo(1);&lt;br /&gt;            valorDerecha = loQueRecibo(2);&lt;br /&gt;            &lt;br /&gt;            if( (valorIzquierda &lt; umbral) &amp;&amp; (valorDerecha &gt; umbral) )&lt;br /&gt;                display('Me muevo hacia la izquierda.');&lt;br /&gt;                mi.Stop('off');&lt;br /&gt;                mi.SendToNXT();&lt;br /&gt;                &lt;br /&gt;                md.Power = potenciaGiro;&lt;br /&gt;                md.SendToNXT();&lt;br /&gt;            elseif( (valorDerecha &lt; umbral) &amp;&amp; (valorIzquierda &gt; umbral) )&lt;br /&gt;                display('Me muevo hacia la derecha.');&lt;br /&gt;                &lt;br /&gt;                md.Stop('off');&lt;br /&gt;                md.SendToNXT();&lt;br /&gt;                &lt;br /&gt;                mi.Power = potenciaGiro;&lt;br /&gt;                mi.SendToNXT();&lt;br /&gt;            elseif( (valorDerecha &gt; umbral) &amp;&amp; (valorIzquierda &gt; umbral) )&lt;br /&gt;                display('Me muevo hacia adelante como los de alicante.');&lt;br /&gt;                &lt;br /&gt;                mi.Power = potenciaAdelante;&lt;br /&gt;                mi.SendToNXT();&lt;br /&gt;                &lt;br /&gt;                md.Power = potenciaAdelante;&lt;br /&gt;                md.SendToNXT();&lt;br /&gt;            else&lt;br /&gt;                md.Stop('off');&lt;br /&gt;                mi.Stop('off');&lt;br /&gt;                &lt;br /&gt;                loQueRecibo&lt;br /&gt;                &lt;br /&gt;                %pause;&lt;br /&gt;            end&lt;br /&gt;            &lt;br /&gt;            i = i + 1;&lt;br /&gt;        end % compruebo que he recibido dos&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;catch err&lt;br /&gt;    loQueRecibo&lt;br /&gt;    display('LEÑO GORDO')&lt;br /&gt;    &lt;br /&gt;    err&lt;br /&gt;    &lt;br /&gt;    try&lt;br /&gt;        mi.Stop('off');&lt;br /&gt;        md.Stop('off');&lt;br /&gt;    catch err1&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    fclose( placa );&lt;br /&gt;    COM_CloseNXT(hNXT);&lt;br /&gt;end % try-catch&lt;br /&gt;&lt;br /&gt;mi.Stop('off');&lt;br /&gt;md.Stop('off');&lt;br /&gt;&lt;br /&gt;fclose( placa );&lt;br /&gt;COM_CloseNXT(hNXT);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;He utilizado la la última versión estable de laRWHT toolbox. Ahora está orientada a objetos y utiliza una aplicación en nxc para un, según ellos, mejor control de los motores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-3267033956194685909?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/3267033956194685909/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=3267033956194685909&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3267033956194685909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3267033956194685909'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/09/robot-siguelineas-iv-matlab.html' title='Robot SigueLíneas (III): Matlab'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-116865602756423347</id><published>2011-09-28T21:50:00.011+02:00</published><updated>2011-09-30T20:57:30.964+02:00</updated><title type='text'>Robot SigueLíneas (II): Parte Arduino leyendo un sensor óptico QRD1114</title><content type='html'>El montaje es bastante sencillo. Habría que repetirlo dos veces, para tener un sensor a cada lado de la línea.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-urQ05kMhpPw/ToYOz1W6uMI/AAAAAAAAAZU/nVT-74NLnZ4/s1600/arduinoSeguidorLinea.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 184px;" src="http://2.bp.blogspot.com/-urQ05kMhpPw/ToYOz1W6uMI/AAAAAAAAAZU/nVT-74NLnZ4/s200/arduinoSeguidorLinea.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5658226265496926402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-dQWQ6R2_Ch8/ToYOzz2cbTI/AAAAAAAAAZM/hVfeaKjvZWU/s1600/arduinoSeguidorLineasCircuito.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/-dQWQ6R2_Ch8/ToYOzz2cbTI/AAAAAAAAAZM/hVfeaKjvZWU/s200/arduinoSeguidorLineasCircuito.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5658226265092287794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En las entradas analógicas 0 y 5 del arduino recogemos la información del sensor.&lt;br /&gt;&lt;br /&gt;El código del arduino es el siguiente&lt;br /&gt;&lt;br /&gt;&lt;code&gt;int pinIzquierdo = 0;&lt;br /&gt;int pinDerecho = 5;&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;  Serial.begin(9600);&lt;br /&gt;&lt;br /&gt;  pinMode( pinIzquierdo , INPUT );&lt;br /&gt;  pinMode( pinDerecho , INPUT );&lt;br /&gt;}//setup&lt;br /&gt;&lt;br /&gt;void loop(){  &lt;br /&gt;  delay(500);&lt;br /&gt;  &lt;br /&gt;  Serial.print( analogRead ( pinIzquierdo )  );&lt;br /&gt;  Serial.print( " " );&lt;br /&gt;  Serial.print( analogRead ( pinDerecho )  );&lt;br /&gt;  Serial.println();  &lt;br /&gt;  Serial.flush();  &lt;br /&gt;}//loop&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y aquí está la salida que se muestra por el monitor serie.&lt;br /&gt;&lt;br /&gt;A la izquierda de cuando detecta blanco por ambos lados. En el centro cuando detecta blanco a un lado y negro al otro. Y a la izquierda viceversa.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-ehwW1AK27tM/ToYQjeZYraI/AAAAAAAAAZc/s_TQGy0aqZo/s1600/SerialArduinoSeguidordeLineas.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 86px;" src="http://2.bp.blogspot.com/-ehwW1AK27tM/ToYQjeZYraI/AAAAAAAAAZc/s_TQGy0aqZo/s200/SerialArduinoSeguidordeLineas.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5658228183478611362" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-116865602756423347?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/116865602756423347/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=116865602756423347&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/116865602756423347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/116865602756423347'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/09/robot-siguelineas-ii-parte-arduino.html' title='Robot SigueLíneas (II): Parte Arduino leyendo un sensor óptico QRD1114'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-urQ05kMhpPw/ToYOz1W6uMI/AAAAAAAAAZU/nVT-74NLnZ4/s72-c/arduinoSeguidorLinea.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-628306995667211219</id><published>2011-09-28T21:25:00.010+02:00</published><updated>2011-09-30T20:30:14.565+02:00</updated><title type='text'>Robot Sigue Líneas (I): Introducción</title><content type='html'>Hoy voy exponer un pequeño proyecto que es bastante típico dentro del mundo de la construcción de robots: &lt;a href="http://en.wikipedia.org/wiki/Mobile_robot#Line-following_robot"&gt;un seguidor de líneas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cierto es que ya había construido un robot de características similares en un par de ocasiones. Pero en ambos casos sólo tenía un sensor para leer la línea. Ahora, voy a tener dos. Además de que no puse ningún vídeo.&lt;br /&gt;&lt;br /&gt;No me he comprado ningún sensor de lego nuevo. Vamos a hacerlo con estos dos pequeños sensores (QRD1114), un arduino y un lego.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bricogeek.com/shop/217-624-large/sensor-optico-qrd1114.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://www.bricogeek.com/shop/217-624-large/sensor-optico-qrd1114.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Estos sensores tienen aquí una &lt;a href="http://www.sparkfun.com/datasheets/BOT/QRD1114.pdf"&gt;hoja de especificaciones&lt;/a&gt; muy bien explicada para gente experta. Como soy un poco más mundano, lo voy a explicar para zotes como yo. Es un sensor análogico que mide la cantidad de luz reflejada por una superficie. De este modo, una superficie negra no refleja la misma luz que una blanca, permitiendo diferenciar el color de la superficie. &lt;br /&gt;&lt;br /&gt;Lo que pretendo construir es un vehículo que tenga incrustado el arduino conectado a los dos sensores. Este arduino enviará la lectura de los sensores a Matlab a través de un cable usb. Matlab la interpretará y moverá los motores del vehículo acorde a través de la conexión bluetooth.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-EgoPNpxmUQc/ToYKO6opMxI/AAAAAAAAAZE/ZHdLKjU3tEI/s1600/seguidorLineasArriba.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/-EgoPNpxmUQc/ToYKO6opMxI/AAAAAAAAAZE/ZHdLKjU3tEI/s200/seguidorLineasArriba.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5658221233211781906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-nbTUrD_YFU0/ToYKOQv2hXI/AAAAAAAAAY8/wbQBHuCGLNM/s1600/seguidorLineasAbajo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/-nbTUrD_YFU0/ToYKOQv2hXI/AAAAAAAAAY8/wbQBHuCGLNM/s200/seguidorLineasAbajo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5658221221967725938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo ideal sería prescindir del cable usb y enviar la información a Matlab a través de un emisor rf, como ya hice con anterioridad. Pero es que de momento, tampoco sé alimentar al arduino con otra cosa que no sea un cable usb.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-628306995667211219?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/628306995667211219/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=628306995667211219&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/628306995667211219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/628306995667211219'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/09/robot-sigue-lineas-i-introduccion.html' title='Robot Sigue Líneas (I): Introducción'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-EgoPNpxmUQc/ToYKO6opMxI/AAAAAAAAAZE/ZHdLKjU3tEI/s72-c/seguidorLineasArriba.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-8918427156446596348</id><published>2011-04-09T10:51:00.012+02:00</published><updated>2011-06-07T22:05:38.828+02:00</updated><title type='text'>Comunicación i2c con Arduino</title><content type='html'>El i2c es un bus serie para la transmisión de datos. &lt;a href="http://es.wikipedia.org/wiki/I%C2%B2C"&gt;Aquí&lt;/a&gt; seguro que lo explican mucho mejor que yo. Pero como pequeño resumen, el bus i2c tiene dos líneas importantes SDA para datos y SCL para la señal del reloj.&lt;br /&gt;&lt;br /&gt;Las placas Arduino tienen &lt;a href="http://arduino.cc/en/Main/ArduinoBoardUno"&gt;soporte&lt;/a&gt; para este protocolo en los pines analógicos 4 y 5 y se proporciona una librería, &lt;a href="http://arduino.cc/en/Reference/Wire"&gt;Wire&lt;/a&gt;, para trabajar.&lt;br /&gt;&lt;br /&gt;Así que lo que voy a explicar a continuación es un pequeño ejemplo de como dos placas Arduino se pueden comunicar a través de i2c.&lt;br /&gt;&lt;br /&gt;El escenario será el habitual. Un Arduino hará de maestro y enviará al Arduino esclavo si se ha pulsado un botón para que ilumine un led y otro.&lt;br /&gt;&lt;br /&gt;Aquí va el código para el maestro&lt;br /&gt;&lt;code&gt;&lt;pre&gt;#include &lt;Wire.h&gt;&lt;br /&gt;&lt;br /&gt;int pinBotonRojo = 2;&lt;br /&gt;int pinBotonVerde = 3;&lt;br /&gt;&lt;br /&gt;int rojo = 1;&lt;br /&gt;int verde = 2;&lt;br /&gt;int azul = 3;&lt;br /&gt;int nada = 4;&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;  Wire.begin();&lt;br /&gt;  Serial.begin(9600);&lt;br /&gt;&lt;br /&gt;  pinMode( pinBotonRojo , INPUT );&lt;br /&gt;  pinMode( pinBotonVerde , INPUT );&lt;br /&gt;}//setup&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;&lt;br /&gt;  Wire.beginTransmission(4);&lt;br /&gt;&lt;br /&gt;  int valorBotonRojo = digitalRead ( pinBotonRojo );&lt;br /&gt;  int valorBotonVerde = digitalRead ( pinBotonVerde );&lt;br /&gt;&lt;br /&gt;  if ( (valorBotonRojo == HIGH) &amp;&amp; (valorBotonVerde == HIGH) ){&lt;br /&gt;    Wire.send(nada);&lt;br /&gt;    Serial.println("Envío -&gt; nada");&lt;br /&gt;  }else if ( (valorBotonRojo == HIGH) &amp;&amp; (valorBotonVerde == LOW) ){&lt;br /&gt;    Wire.send(rojo);&lt;br /&gt;    Serial.println("Envío -&gt; rojo");&lt;br /&gt;  }else if ( (valorBotonRojo == LOW) &amp;&amp; (valorBotonVerde == HIGH) ){&lt;br /&gt;    Wire.send(verde);&lt;br /&gt;    Serial.println("Envío -&gt; verde");&lt;br /&gt;  }else if ( (valorBotonRojo == LOW) &amp;&amp; (valorBotonVerde == LOW) ){&lt;br /&gt;    Wire.send(azul);&lt;br /&gt;    Serial.println("Envío -&gt; azul");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  Wire.endTransmission();&lt;br /&gt;&lt;br /&gt;  delay(500);&lt;br /&gt;}//loop&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y aquí va el código para el esclavo&lt;br /&gt;&lt;code&gt;&lt;pre&gt;#include &lt;Wire.h&gt;&lt;br /&gt;&lt;br /&gt;int pinLedRojo = 2;&lt;br /&gt;int pinLedVerde = 3;&lt;br /&gt;&lt;br /&gt;int rojo = 1;&lt;br /&gt;int verde = 2;&lt;br /&gt;int azul = 3;&lt;br /&gt;int nada = 4;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt;  Wire.begin(4);&lt;br /&gt;  Wire.onReceive(receiveEvent);&lt;br /&gt;  Serial.begin(9600);&lt;br /&gt;  pinMode( pinLedRojo , OUTPUT );&lt;br /&gt;  pinMode( pinLedVerde , OUTPUT );  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop(){}&lt;br /&gt;&lt;br /&gt;void receiveEvent(int howMany) {&lt;br /&gt;  int recibo = Wire.receive();&lt;br /&gt;  Serial.print("Recibo : ");&lt;br /&gt;  Serial.println(recibo);&lt;br /&gt;  Serial.print("howMany : ");&lt;br /&gt;  Serial.println(howMany);&lt;br /&gt;&lt;br /&gt;  if( recibo == nada ){&lt;br /&gt;    digitalWrite( pinLedRojo , HIGH );&lt;br /&gt;    digitalWrite( pinLedVerde , HIGH );    &lt;br /&gt;  }else if ( recibo == rojo ){  &lt;br /&gt;    digitalWrite( pinLedRojo , HIGH );&lt;br /&gt;    digitalWrite( pinLedVerde , LOW );        &lt;br /&gt;  }else if ( recibo == verde ){  &lt;br /&gt;    digitalWrite( pinLedRojo , LOW );&lt;br /&gt;    digitalWrite( pinLedVerde , HIGH );        &lt;br /&gt;  }else if ( recibo == azul ){  &lt;br /&gt;    digitalWrite( pinLedRojo , LOW );&lt;br /&gt;    digitalWrite( pinLedVerde , LOW );        &lt;br /&gt;  }&lt;br /&gt;}//receiveEvent&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Aquí hay una foto del montaje final.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-sLhks-m6xpM/Te6DITmh3rI/AAAAAAAAAW4/_obeQ1nHfbk/s1600/CIMG0391.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/-sLhks-m6xpM/Te6DITmh3rI/AAAAAAAAAW4/_obeQ1nHfbk/s200/CIMG0391.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5615569964101656242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y aquí un pequeño video para los incrédulos.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/g5Fto0PjIJ4?hl=es&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/g5Fto0PjIJ4?hl=es&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Como se puede ver es bastante sencillo utilizar el i2c del Arduino. Por lo menos para comunicar dos Arduinos.&lt;br /&gt;&lt;br /&gt;El paso siguiente será conectar un Lego(c) NXT con un Arduino usando i2c. De este modo podré usar un Arduino como sensor para el NXT.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-8918427156446596348?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/8918427156446596348/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=8918427156446596348&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/8918427156446596348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/8918427156446596348'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/04/comunicacion-i2c-con-arduino.html' title='Comunicación i2c con Arduino'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-sLhks-m6xpM/Te6DITmh3rI/AAAAAAAAAW4/_obeQ1nHfbk/s72-c/CIMG0391.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2765080635689066288</id><published>2011-03-24T20:08:00.001+01:00</published><updated>2011-03-24T20:08:55.247+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rf'/><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Emisor Receptor RF con Arduino (III): Conclusiones</title><content type='html'>Los tutoriales que encontré por internet trataban el tema a tan bajo nivel que se me hacía imposible seguirlos. Esta librería te abstrae completamente de todo y sólo te tienes que preocupar practicamente de la función enviar mensaje y recibir mensaje. Te lo dan todo hecho. Aunque esto, para gente que le guste trastear más, pueda ser un inconveniente. Yo, sólo puedo decir cosas buenas de VirtualDrive para Arduino.&lt;br /&gt;&lt;br /&gt;He probado el alcance, y a unos tres metros, que es lo máximo que me dan los cables usb, funciona igual de bien. No estoy usando antenas de ningún tipo. Debería buscar como alimentar al Arduino con una base de pilas. De este modo no estaría limitado al cable conectado al ordenador.&lt;br /&gt;&lt;br /&gt;Lo siguiente que voy a intentar hacer en esta línea, es conectar el Arduino emisor al ordenador que leerá órdenes de un joystick, y un Arduino receptor al Lego(C) Mindstorms y tratar de manejarlo remotamente, al más puro estilo coche teledirigido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2765080635689066288?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2765080635689066288/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2765080635689066288&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2765080635689066288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2765080635689066288'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/03/emisor-receptor-rf-con-arduino-iii.html' title='Emisor Receptor RF con Arduino (III): Conclusiones'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-6761895279125257308</id><published>2011-03-24T19:45:00.008+01:00</published><updated>2011-03-25T22:37:47.756+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rf'/><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Emisor Receptor RF con Arduino (II): Primer intento</title><content type='html'>He estado buscando por internet tutoriales sobre el tema y de todo lo que he encontrado, lo que más esperanzas me ha generado, ha sido &lt;a href="http://www.open.com.au/mikem/arduino/VirtualWire.pdf"&gt;VirtualWire&lt;/a&gt; para Arduino.&lt;br /&gt;&lt;br /&gt;Como dicen los creadores, y yo traduzco, "VirtualWire es una librería para Arduino que permite enviar mensajes cortos, sin direccionamiento, retransmisión o confirmación, como un UDP inalámbrico, utilizando ASK"&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;VirtualWire is an Arduino library that provides features to send short messages, without&lt;br /&gt;addressing, retransmit or acknowledgment, a bit like UDP over wireless, using ASK&lt;br /&gt;(amplitude shift keying).&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;El enlace anterior apunta a un documento donde está explicada perfectamente toda la librería. Lo cierto es que la API que proporcionan es bastante limpia y parece sencilla. Así que manos a la obra.&lt;br /&gt;&lt;br /&gt;Lo primero que vamos a programar es la parte emisora y el código que he escrito es el siguiente. Es realmente sencillo. Lee cada medio segundo el estado de los botones y lo envía.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;#include &lt;VirtualWire.h&gt;&lt;br /&gt;&lt;br /&gt;int pinRojo = 2;&lt;br /&gt;int pinVerde = 3;&lt;br /&gt;// me he dado cuenta de que no hace falta&lt;br /&gt;// configurarlo para salida o entrada&lt;br /&gt;int pinTx = 4;&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;  pinMode(pinRojo,INPUT);&lt;br /&gt;  pinMode(pinVerde,INPUT);&lt;br /&gt;&lt;br /&gt;  vw_set_tx_pin(pinTx);&lt;br /&gt;  vw_setup(2000);&lt;br /&gt;&lt;br /&gt;  Serial.begin(9600);&lt;br /&gt;}//setup&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;  delay(500);&lt;br /&gt;&lt;br /&gt;  int estadoRojo = digitalRead(pinRojo);&lt;br /&gt;  int estadoVerde = digitalRead(pinVerde);&lt;br /&gt;&lt;br /&gt;  char *mensaje = "VACIO";&lt;br /&gt;&lt;br /&gt;  if ( (estadoRojo ==  HIGH ) &amp;&amp; (estadoVerde == HIGH) ){&lt;br /&gt;    mensaje = "A"; // rojo + verde = azul&lt;br /&gt;  }else if ( (estadoRojo == LOW) &amp;&amp; (estadoVerde == LOW) ){&lt;br /&gt;    mensaje = "N"; // nada&lt;br /&gt;  }else if ( (estadoRojo == HIGH) &amp;&amp; (estadoVerde == LOW) ){&lt;br /&gt;    mensaje = "R"; // rojo&lt;br /&gt;  }else if ( (estadoRojo == LOW) &amp;&amp; (estadoVerde == HIGH) ){&lt;br /&gt;    mensaje = "V";      //verde&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  Serial.print("Enviado -&gt; ");&lt;br /&gt;  Serial.println( mensaje );&lt;br /&gt;&lt;br /&gt;  vw_send( (uint8_t *) mensaje , strlen(mensaje) );   &lt;br /&gt;}//loop&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y aquí se puede ver el circuito que he montado para el emisor. Está hecho con &lt;a href="http://fritzing.org/"&gt;Fritzing&lt;/a&gt;. Como no tenía un componente para el emisor, he dejado el cableado suelto y he añadido las patillas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-j6ixlQpidEo/TYuWG7035NI/AAAAAAAAAWM/nbuCTQt8XP0/s1600/esquema%2Bemisor.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 145px;" src="http://4.bp.blogspot.com/-j6ixlQpidEo/TYuWG7035NI/AAAAAAAAAWM/nbuCTQt8XP0/s200/esquema%2Bemisor.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5587724808566072530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y ahora, vamos a por la parte receptora. También sencilla, cada vez que recibe un mensaje, lo compara y enciende el LED correspondiente.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;#include &lt;VirtualWire.h&gt;&lt;br /&gt;&lt;br /&gt;int pinRojo = 2;&lt;br /&gt;int pinVerde = 3;&lt;br /&gt;int pinRx = 4;&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;  pinMode(pinRojo,OUTPUT);&lt;br /&gt;  pinMode(pinVerde,OUTPUT);&lt;br /&gt;&lt;br /&gt;  Serial.begin(9600);&lt;br /&gt;&lt;br /&gt;  vw_set_rx_pin(pinRx);&lt;br /&gt;  vw_setup(2000);&lt;br /&gt;  vw_rx_start();&lt;br /&gt;}//setup&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;  // esto es un poco engañoso porque sólo voy&lt;br /&gt;  // a recibir cosas de tamaño 0&lt;br /&gt;  uint8_t mensaje[VW_MAX_MESSAGE_LEN];&lt;br /&gt;  uint8_t longitud = VW_MAX_MESSAGE_LEN;&lt;br /&gt;&lt;br /&gt;  if (vw_get_message( mensaje , &amp;longitud ) ){    &lt;br /&gt;    Serial.print("Recibido -&gt; ");&lt;br /&gt;    Serial.println( mensaje[0] ); &lt;br /&gt;    &lt;br /&gt;    if( mensaje[0] == 'A' ){&lt;br /&gt;       digitalWrite( pinRojo , HIGH );&lt;br /&gt;       digitalWrite( pinVerde , HIGH );       &lt;br /&gt;    }else if( mensaje[0] == 'R' ){&lt;br /&gt;       digitalWrite( pinRojo , HIGH );&lt;br /&gt;       digitalWrite( pinVerde , LOW );             &lt;br /&gt;    }else if( mensaje[0] == 'V' ){&lt;br /&gt;       digitalWrite( pinRojo , LOW );&lt;br /&gt;       digitalWrite( pinVerde , HIGH );             &lt;br /&gt;    }else if( mensaje[0] == 'N' ){&lt;br /&gt;       digitalWrite( pinRojo , LOW );&lt;br /&gt;       digitalWrite( pinVerde , LOW );             &lt;br /&gt;    }// if de caso de mensaje&lt;br /&gt;  }//if de he recibido un mensaje &lt;br /&gt;}//loop&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y aquí se puede ver el circuito que he montado para el receptor. Está hecho con &lt;a href="http://fritzing.org/"&gt;Fritzing&lt;/a&gt;. Como no tenía un componente para el receptor, he dejado el cableado suelto y he añadido las patillas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-SyLLbICYYyk/TYuUFOqVoCI/AAAAAAAAAWE/gdpl2CM-K0c/s1600/esquema%2Breceptor.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 138px;" src="http://3.bp.blogspot.com/-SyLLbICYYyk/TYuUFOqVoCI/AAAAAAAAAWE/gdpl2CM-K0c/s200/esquema%2Breceptor.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5587722580239163426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y me ha funcionado todo, más o menos a la primera, y no me lo creo todavía. He conseguido exactamente lo que pretendía en un principio. Aquí os dejo un video de esta maravilla funcionando.&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;object style="height: 390px; width: 640px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/G-RCO6ByDiM?version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/G-RCO6ByDiM?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-6761895279125257308?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/6761895279125257308/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=6761895279125257308&amp;isPopup=true' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6761895279125257308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6761895279125257308'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/03/emisor-receptor-rf-con-arduino-ii.html' title='Emisor Receptor RF con Arduino (II): Primer intento'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-j6ixlQpidEo/TYuWG7035NI/AAAAAAAAAWM/nbuCTQt8XP0/s72-c/esquema%2Bemisor.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-1980513133084364361</id><published>2011-03-24T19:35:00.003+01:00</published><updated>2011-03-24T19:45:23.482+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rf'/><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Emisor Receptor RF con Arduino (I): Introducción</title><content type='html'>Durante un arrebato consumista estas navidades, hice un pedido a una tienda de electrónica de un montón de cachirulos. Una de las cosas que pedí, fueron un par de módulos &lt;a href="http://www.bricogeek.com/shop/modulos-radiofrecuencia/47-emisor-rf-434mhz.html"&gt;emisor&lt;/a&gt; y &lt;a href="http://www.bricogeek.com/shop/modulos-radiofrecuencia/46-receptor-rf-434mhz-4800bps.html"&gt;receptor&lt;/a&gt; de radiofrecuencia.&lt;br /&gt;&lt;br /&gt;Y como el pedido me vino muy bien, rápido y no tengo ninguna queja, os he enlazado los productos a la tienda.&lt;br /&gt;&lt;br /&gt;Lo que pretendo conseguir es conectar un Arduino a un emisor, y otro Arduino al receptor, y tratar que se comuniquen entre si utilizando la magia de las ondas.&lt;br /&gt;&lt;br /&gt;Aprovecho para contar, que en mi arrebato consumista navideño, cayó un Arduino Uno. Para que juege con el Arduino Duemilanove que ya tenía, que estaba muy sólo ultimamente.&lt;br /&gt;&lt;br /&gt;¿Cómo voy a probar que mis dos Arduinos se llevan bien, y hablan entre si? El Arduino emisor leerá los valores de dos botones, y el Arduino receptor encenderá un par de leds según el botón pulsado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-1980513133084364361?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/1980513133084364361/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=1980513133084364361&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/1980513133084364361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/1980513133084364361'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/03/emisor-receptor-rf-con-arduino-i.html' title='Emisor Receptor RF con Arduino (I): Introducción'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-332771679919126826</id><published>2011-02-21T18:40:00.000+01:00</published><updated>2011-03-24T19:59:04.686+01:00</updated><title type='text'>Vehículos dirigidos (III): Resultados</title><content type='html'>Una vez que tenemos los valores de los sensores del mando en matlab lo único que queda es programación.&lt;br /&gt;&lt;br /&gt;Aquí mi mayor problema ha sido que no he sido capaz de encontrar una explicación lógica a los valores que leía del mando, por lo que mi calibrado y mi código es un tanto artesanal.&lt;br /&gt;&lt;br /&gt;Yo esperaba que dejando el mando en reposo, y moviendo sólo un eje, sólo obtendría valores distintos para ese valor. Nada más lejos de la realidad. Los valores que recibía del mando variaban todos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-y4qKGqS39UY/TYeOWoIZggI/AAAAAAAAAV4/zhDQiaO0HkE/s1600/pry-wiimote.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 192px;" src="http://1.bp.blogspot.com/-y4qKGqS39UY/TYeOWoIZggI/AAAAAAAAAV4/zhDQiaO0HkE/s200/pry-wiimote.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5586590382157300226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Así que como ya he comentado el convertir los valores que leía en movimientos se ha hecho de manera artesanal.&lt;br /&gt;&lt;br /&gt;Aquí os dejo dos vídeos, en el primero se maneja el vehículo con el joystick y en el segundo con el acelerómetro.&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;object style="height: 390px; width: 640px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/INRVx5Z3Ppo?version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/INRVx5Z3Ppo?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;object style="height: 390px; width: 640px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/K8SUxXniPV4?version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/K8SUxXniPV4?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-332771679919126826?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/332771679919126826/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=332771679919126826&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/332771679919126826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/332771679919126826'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/03/vehiculos-dirigidos-iii-resultados.html' title='Vehículos dirigidos (III): Resultados'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-y4qKGqS39UY/TYeOWoIZggI/AAAAAAAAAV4/zhDQiaO0HkE/s72-c/pry-wiimote.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-1793120750907314505</id><published>2011-02-01T21:00:00.000+01:00</published><updated>2011-03-24T19:59:35.710+01:00</updated><title type='text'>Vehículos dirigidos (II): Conectando nunchuck + wiichuck + arduino + matlab</title><content type='html'>El objetivo es enviar los valores de los sensores del mando nunchuck al arduino.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-JKsb9wP0EKw/TW1ZxOdBpqI/AAAAAAAAAVo/WqGF5C7Koyc/s1600/CIMG0234.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/-JKsb9wP0EKw/TW1ZxOdBpqI/AAAAAAAAAVo/WqGF5C7Koyc/s200/CIMG0234.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5579214215610214050" /&gt;&lt;/a&gt;&lt;br /&gt;Lo que aparentemente parecía muy fácil ya que hay cienes y cienes de tutoriales y librerías, no resultó tan fácil. Aquí os resumiré los pasos que he ido siguiendo y como conseguí que todo funcionara.&lt;br /&gt;&lt;br /&gt;En primer lugar nos descargamos de &lt;a href="http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/"&gt;aquí&lt;/a&gt; la librería nunchuck_funcs.h. Esta librería nos ofrece una interfaz muy sencilla para obtener los valores del mando.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;// returns zbutton state: 1=pressed, 0=notpressed&lt;br /&gt;static int nunchuck_zbutton()&lt;br /&gt;&lt;br /&gt;// returns zbutton state: 1=pressed, 0=notpressed&lt;br /&gt;static int nunchuck_cbutton()&lt;br /&gt;&lt;br /&gt;// returns value of x-axis joystick&lt;br /&gt;static int nunchuck_joyx()&lt;br /&gt;&lt;br /&gt;// returns value of y-axis joystick&lt;br /&gt;static int nunchuck_joyy()&lt;br /&gt;&lt;br /&gt;// returns value of x-axis accelerometer&lt;br /&gt;static int nunchuck_accelx()&lt;br /&gt;&lt;br /&gt;// returns value of y-axis accelerometer&lt;br /&gt;static int nunchuck_accely()&lt;br /&gt;&lt;br /&gt;// returns value of z-axis accelerometer&lt;br /&gt;static int nunchuck_accelz()&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Quizás otro día explique como está construida esta librería por dentro e incluso que haga yo una, pero de momento me supera por todos lados.&lt;br /&gt;&lt;br /&gt;Con esta interfaz tan sencilla, sólo nos queda escribir un pequeño código para arduino que recupere los valores.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#include &lt;Wire.h&gt;&lt;br /&gt;#include "nunchuck_funcs.h"&lt;br /&gt;&lt;br /&gt;int loop_cnt=0;&lt;br /&gt;&lt;br /&gt;int accx,accy,accz,zbut,cbut,jx,jy;&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;  pinMode(10, OUTPUT); // LEYENDO INFORMACIÓN DEL MANDO&lt;br /&gt;  pinMode(11, OUTPUT); // ENVIANDO AL PUERTO SERIE&lt;br /&gt;  pinMode(12, OUTPUT); // ESPERANDO&lt;br /&gt;  &lt;br /&gt;  digitalWrite(10,LOW);&lt;br /&gt;  digitalWrite(11,LOW);&lt;br /&gt;  digitalWrite(12,LOW);&lt;br /&gt;  &lt;br /&gt;  Serial.begin(9600);&lt;br /&gt;  nunchuck_setpowerpins();&lt;br /&gt;  nunchuck_init();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;se queda iluminado durante x tiempo y sólo está a bajo nivel&lt;br /&gt;cuando está recibiendo información&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;  digitalWrite(10,HIGH);  &lt;br /&gt;&lt;br /&gt;  nunchuck_get_data();&lt;br /&gt;&lt;br /&gt;  accx  = nunchuck_accelx();&lt;br /&gt;  accy  = nunchuck_accely();&lt;br /&gt;  accz  = nunchuck_accelz();&lt;br /&gt;&lt;br /&gt;  zbut = nunchuck_zbutton();&lt;br /&gt;  cbut = nunchuck_cbutton(); &lt;br /&gt;  &lt;br /&gt;  jx = nunchuck_joyx();&lt;br /&gt;  jy = nunchuck_joyy();&lt;br /&gt;&lt;br /&gt;  digitalWrite(10,LOW);  &lt;br /&gt;&lt;br /&gt;  digitalWrite(11,HIGH);  &lt;br /&gt;  Serial.print( accx );&lt;br /&gt;  Serial.print(" ");&lt;br /&gt;  Serial.print( accy );&lt;br /&gt;  Serial.print(" ");&lt;br /&gt;  Serial.print( accz );&lt;br /&gt;  Serial.print(" ");&lt;br /&gt;  Serial.print( zbut );&lt;br /&gt;  Serial.print(" ");&lt;br /&gt;  Serial.print( cbut );&lt;br /&gt;  Serial.print(" ");&lt;br /&gt;  Serial.print( jx );  &lt;br /&gt;  Serial.print(" ");&lt;br /&gt;  Serial.println( jy );  &lt;br /&gt;  Serial.flush();&lt;br /&gt;  digitalWrite(11,LOW);  &lt;br /&gt;&lt;br /&gt;  digitalWrite(12,HIGH);&lt;br /&gt;  delay(250);  &lt;br /&gt;  digitalWrite(12,LOW);&lt;br /&gt;&lt;br /&gt;}//loop&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;El utilizar los pines con los leds, sólo tiene la función de depurar la aplicación. Como se puede ver lo único que se hace es leer los valores y escribirles separados al puerto serie. Para probarlo, podemos arrancar el monitor serie del entorno Arduino.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-yy53uyCA8FA/TW1akaKpDhI/AAAAAAAAAVw/8sgxDqNfJZw/s1600/serial%2Bmonitor.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 174px;" src="http://2.bp.blogspot.com/-yy53uyCA8FA/TW1akaKpDhI/AAAAAAAAAVw/8sgxDqNfJZw/s200/serial%2Bmonitor.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5579215094927658514" /&gt;&lt;/a&gt;&lt;br /&gt;Se ve como si movemos el mando, pues los valores se van cambiando y así se recogen, separados por espacios.&lt;br /&gt;&lt;br /&gt;Si queremos leer con matlab el valor de un puerto serie, hay que utilizar el siguiente código. Que nos deja los valores en un array llamado loQueRecibo. Habrá mejores y peores maneras, pero mis conocimientos de matlab, no dan para más&lt;br /&gt;&lt;br /&gt;Cosas importantes, el nombre del puerto USB al que está conectado el arduino y la velocidad de conexión.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;placa = serial( 'COM16' , 'BaudRate', 9600 );&lt;br /&gt;fopen( placa );&lt;br /&gt;loQueRecibo = fscanf( placa );&lt;br /&gt;loQueRecibo = sscanf(loQueRecibo,'%d');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;De este modo tenemos en el array loQueRecibo, los valores que se recogen del nunchuck y que se pueden ver en el pantallazo del monitor serie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-1793120750907314505?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/1793120750907314505/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=1793120750907314505&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/1793120750907314505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/1793120750907314505'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/03/vehiculos-dirigidos-ii-conectando.html' title='Vehículos dirigidos (II): Conectando nunchuck + wiichuck + arduino + matlab'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-JKsb9wP0EKw/TW1ZxOdBpqI/AAAAAAAAAVo/WqGF5C7Koyc/s72-c/CIMG0234.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-3730383433534308633</id><published>2011-02-01T20:51:00.000+01:00</published><updated>2011-03-24T19:59:30.310+01:00</updated><title type='text'>Vehículos dirigidos (I): Introducción</title><content type='html'>Hace mucho, mucho tiempo en una galaxia muy, muy ... ¡no!, espera, no era así. Pues eso, que hace mucho tiempo que no escribo nada en mi blog. Esto no quiere decir que haya estado sin hacer nada. He trasteado y mucho, pero no he obtenido los resultados que yo esperaba.&lt;br /&gt;&lt;br /&gt;Para empezar jugué mucho con mi off-roader, le monté y desmonté e hice cajas y cajas de cambios, pero eso es otra historia. Y luego también hice muchas cosas con el arduino, y me compré un montón e componentes, pero eso es otra historia. La historia que os contaré hoy, trata sobre un nunchuck, un wiichuck, un arduino y un lego. Que si bien eran cada uno hijos de su padre y de su madre, hablaban usando un usb, bluetooth y un matlab.&lt;br /&gt;&lt;br /&gt;Hay infinidad de videos en youtube que muestran coches manejados con mandos de la wii, o aparatos más extraños. En esta serie de entradas os voy a contar mis experiencias construyendo alguno de estos vehículos.&lt;br /&gt;&lt;br /&gt;Espero que a alguien le sirva de ayuda. Empecemos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-3730383433534308633?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/3730383433534308633/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=3730383433534308633&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3730383433534308633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3730383433534308633'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2011/03/vehiculos-dirigidos-i-introduccion.html' title='Vehículos dirigidos (I): Introducción'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2113405356293915423</id><published>2010-06-19T13:15:00.009+02:00</published><updated>2010-06-19T14:30:45.859+02:00</updated><title type='text'>Lego 8297 Off Roader (I): Contenido</title><content type='html'>Pues de tanto mirar y mirar videos de youtube, al final pasa lo que pasa, que se te ponen los dientes largos, se te calienta la cabeza, y te compras cosas.&lt;br /&gt;&lt;br /&gt;Mi último juguetito es, ni más ni menos, que el Lego 8297: Off Roader.&lt;br /&gt;&lt;br /&gt;Aquí os dejo unas fotos de la caja, y del contenido.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/TBypAANOqII/AAAAAAAAAUc/UnMbw1FLUQw/s1600/1+caja+exterior.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 552px; height: 414px;" src="http://1.bp.blogspot.com/_NvbicCRbTw0/TBypAANOqII/AAAAAAAAAUc/UnMbw1FLUQw/s320/1+caja+exterior.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5484444263751002242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/TBypA9pAQvI/AAAAAAAAAUk/_sbOmxuft_A/s1600/2+caja+abierta.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 552px; height: 414px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/TBypA9pAQvI/AAAAAAAAAUk/_sbOmxuft_A/s320/2+caja+abierta.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5484444280242062066" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/TBypBBfdOlI/AAAAAAAAAUs/IFiZmYJFnCA/s1600/3+detalle+caja+abajo.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 552px; height: 414px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/TBypBBfdOlI/AAAAAAAAAUs/IFiZmYJFnCA/s320/3+detalle+caja+abajo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5484444281275759186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/TBypBQCQllI/AAAAAAAAAU0/7iRSw92hZt0/s1600/4+detalle+caja+arriba.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 552px; height: 414px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/TBypBQCQllI/AAAAAAAAAU0/7iRSw92hZt0/s320/4+detalle+caja+arriba.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5484444285179827794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/TBypB-J1RzI/AAAAAAAAAU8/fWbfg-a1elQ/s1600/5+contenido.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 552px; height: 414px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/TBypB-J1RzI/AAAAAAAAAU8/fWbfg-a1elQ/s320/5+contenido.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5484444297559623474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;He de decir que he estado alucinando sólo con la caja. Así que no sé qué pasará cuando la abra.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2113405356293915423?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2113405356293915423/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2113405356293915423&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2113405356293915423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2113405356293915423'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/06/lego-8297-off-roader-i-contenido.html' title='Lego 8297 Off Roader (I): Contenido'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NvbicCRbTw0/TBypAANOqII/AAAAAAAAAUc/UnMbw1FLUQw/s72-c/1+caja+exterior.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2054015422853391809</id><published>2010-05-10T20:46:00.003+02:00</published><updated>2010-05-10T21:00:11.179+02:00</updated><title type='text'>Semáforo con Arduino</title><content type='html'>Hoy os voy a contar un muy, pero que muy simple proyecto que he realizado con Arduino.&lt;br /&gt;&lt;br /&gt;Ya he utilizado resistencias, la placa de prototipado, algún cable y, aprovechando que tengo un emisor rojo, otro amarillo y otro verde ... pues he hecho un pequeño semáforo.&lt;br /&gt;&lt;br /&gt;Aquí os dejo un vídeo, digno de varios Óscar, donde se ve el semáforo en funcionamiento.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/OUUJ4iZBznI&amp;hl=es&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/OUUJ4iZBznI&amp;hl=es&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;El código fuente del programa, está también aquí, como se puede ver es muy sencillo y creo que tampoco necesita mucha explicación.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;int pinRojo =  4;&lt;br /&gt;int pinAmarillo = 3;&lt;br /&gt;int pinVerde = 2;&lt;br /&gt;&lt;br /&gt;void setup(){                &lt;br /&gt;  pinMode(pinRojo, OUTPUT);     &lt;br /&gt;  pinMode(pinAmarillo, OUTPUT);     &lt;br /&gt;  pinMode(pinVerde, OUTPUT);     &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;  digitalWrite(pinRojo, HIGH);&lt;br /&gt;  delay(1000);&lt;br /&gt;  digitalWrite(pinRojo, LOW);&lt;br /&gt;  delay(1000);&lt;br /&gt;&lt;br /&gt;  digitalWrite(pinAmarillo, HIGH);&lt;br /&gt;  delay(1000);&lt;br /&gt;  digitalWrite(pinAmarillo, LOW);&lt;br /&gt;  delay(1000);&lt;br /&gt;&lt;br /&gt;  digitalWrite(pinVerde, HIGH);&lt;br /&gt;  delay(1000);&lt;br /&gt;  digitalWrite(pinVerde, LOW);&lt;br /&gt;  delay(1000);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para el próximo día, un semáforo con interruptores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2054015422853391809?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2054015422853391809/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2054015422853391809&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2054015422853391809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2054015422853391809'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/05/semaforo-con-arduino.html' title='Semáforo con Arduino'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-6113500689775769763</id><published>2010-05-03T15:45:00.006+02:00</published><updated>2010-05-08T00:22:52.470+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Hola Mundo u Hola LED</title><content type='html'>Hoy voy a dar mi primer paso con Arduino. Al parecer para iniciarse en este mundo, tenemos un Hola mundo!, pero a lo Arduino, y con un diodo emisor de luz. Voy a seguir los pasos de este &lt;a href="http://arduino.cc/en/Guide/Windows"&gt;tutorial&lt;/a&gt;, que iré comentado con las cosas que me encuentre.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A mano todo lo importante&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lo primero que necesitamos es obviamente un Arduino, yo tengo un Duemilanove, así que a partir de ahora, mis referencias a Arduino, son en realidad a Arduino Duemilanove. &lt;br /&gt;&lt;br /&gt;También hace falta un cable USB, de conector A a B. El que viene con nuestro Lego(c) MindStorms, sirve perfectamente. Esto es para conectar el Arduino con el ordenador.&lt;br /&gt;&lt;br /&gt;Y por último hace falta el entorno de desarrollo de Arduino, que se puede descargar desde &lt;a href="http://arduino.cc/en/Main/Software"&gt;aquí&lt;/a&gt;. Sigo pendiente de volver a instalar mi distribución GNU/Linux favorita, Gentoo, así que voy a comentar todo sobre un Microsoft Windows XP SP3. Es un fichero zip, que descomprimimos donde queramos y hay que ejecugtar arduino.exe. Es una aplicación java, así que hay que darle tiempo. Ahora podemos ver una pantalla que tengo la impresión que se me va a hacer muy familiar dentro de poco.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conectado Arduino a un ordenador por primera vez&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Conectamos el Arduino con el cable USB y a Windows le da un jamacuco intentando reconocer el hardware, pero no hay problema. Le damos a buscar los controladores por nuestra cuenta y seleccionamos el directorio drivers del zip que hemos descomprimido en el paso anterior.&lt;br /&gt;&lt;br /&gt;Ahora muy importante, que a mi no me funcionó nada la primera vez por esto, es configurar el puerto donde está escuchando el Arduino y que tipo es la placa.&lt;br /&gt;&lt;br /&gt;Para ello nos vamos al menú TOOLS -&gt; BOARD y seleccionamos la que tengamos. &lt;br /&gt;&lt;br /&gt;Y ahora en el menú TOOLS -&gt; SERIAL PORT. Ahora viene la gran pregunta ... ¿en qué puerto tengo conectado el Arduino?, truquele fácil, enchufamos el Arduino y vemos la lista de puertos disponibles, desenchufamos el Arduino y vemos cuál ha desaparecido ... ese será nuestro puerto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Darle al play&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora viene la parte más fácil. En el menú seleccionamos FILE -&gt; OPEN y buscamos en examples/digital/blink el fichero blink.pde. Vemos que un código se ha cargado en la pantalla principal del editor.&lt;br /&gt;&lt;br /&gt;Ahora, con el Arduino conectado pinchamos en el botón de upload, que es como el de play y si todo ha ido bien ... veremos a nuestro Arduino haciendo lo siguiente.&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/l3t15V4tnA0&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/l3t15V4tnA0&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Si algo ha fallado, nos toca buscar en este &lt;a href="http://arduino.cc/en/Guide/Troubleshooting"&gt;enlace&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Por hoy ya he tenido suficiente. Al próximo día más y mejor. Hay muchos tutoriales y vídeos por internet donde se pueden encontrar ideas interesantes. De momento no tengo nada definido de cual será mi siguiente paso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-6113500689775769763?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/6113500689775769763/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=6113500689775769763&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6113500689775769763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6113500689775769763'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/05/hola-mundo-u-hola-led.html' title='Hola Mundo u Hola LED'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2034170230718435070</id><published>2010-05-03T15:36:00.007+02:00</published><updated>2010-05-08T00:28:22.224+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Arduino: entre mis manos</title><content type='html'>Hoy por fin he podido recoger mi Arduino Duemilanove. Una vez más el servicio de FunGizmos ha sido muy bueno, correcto embalaje y protección de todo lo pedido y en un tiempo más que razonable.&lt;br /&gt;&lt;br /&gt;Aquí os dejo algunas fotos de mi nuevo juguetito y de cómo ha venido. Una vez más, un diez para &lt;a href="http://store.fungizmos.com/"&gt;FunGizmos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Podeis ver que a parte he pedido también algunas resistencias, unos interruptores y unos diodos emisores.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/S-SPwksLqfI/AAAAAAAAAUM/6yJi0niL3tY/s1600/cosas.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/S-SPwksLqfI/AAAAAAAAAUM/6yJi0niL3tY/s320/cosas.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5468653912180107762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/S-SPwARlWhI/AAAAAAAAAUE/4whpWUVNFaw/s1600/arduino.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/S-SPwARlWhI/AAAAAAAAAUE/4whpWUVNFaw/s320/arduino.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5468653902404868626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S-STWy_46CI/AAAAAAAAAUU/0_-nlMXv-6k/s1600/CIMG0051.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 552px; height: 414px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S-STWy_46CI/AAAAAAAAAUU/0_-nlMXv-6k/s320/CIMG0051.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5468657867390773282" /&gt;&lt;/a&gt;&lt;br /&gt;Tampoco tiene mucho sentido contar cosas de un Arduino en un blog sobre Lego(c) MindStorms, pero como el objetivo es que en un futuro, todo esté dentro del mismo saco ... Además así tiene más actividad el blog.&lt;br /&gt;&lt;br /&gt;¡ El arduino ! ¡Qué viene!. Tenía que hacer la gracia, lo siento. En breve mi primera aventura y espero que no desventuras.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2034170230718435070?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2034170230718435070/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2034170230718435070&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2034170230718435070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2034170230718435070'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/05/arduino-entre-mis-manos.html' title='Arduino: entre mis manos'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NvbicCRbTw0/S-SPwksLqfI/AAAAAAAAAUM/6yJi0niL3tY/s72-c/cosas.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-8867846044661652465</id><published>2010-04-05T15:24:00.005+02:00</published><updated>2010-04-10T12:58:21.087+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='i2c'/><category scheme='http://www.blogger.com/atom/ns#' term='WiiChuck'/><category scheme='http://www.blogger.com/atom/ns#' term='acelerometro'/><title type='text'>WiiChuck</title><content type='html'>Navegando por internet, que es una fuente inagotable de ideas trastear con nuestro Lego(R), me he encontrado con los siguientes enlaces, que vienen a tratar todos más o menos de lo mismo.&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/HFQtyna58Kg&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/HFQtyna58Kg&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Resumen: se puede conectar el Nunchuck de Nintendo a NXT para controlarlo con el joystick y también servir de sensor de aceleración.&lt;br /&gt;&lt;br /&gt;* &lt;a href="http://www.youtube.com/v/HFQtyna58Kg&amp;hl"&gt;Enlace al vídeo anterior en youtube&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://forums.nxtasy.org/index.php?showtopic=3075"&gt;http://forums.nxtasy.org/index.php?showtopic=3075&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://www.hispalug.com/foro/index.php?topic=9882.0"&gt;http://www.hispalug.com/foro/index.php?topic=9882.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En el segundo y tercer enlace, que la verdad, pongo como obligada lectura, se explica como conectar el nunchuk al nxt. Un foro en inglés, y otro en castellano. De todo un poco.&lt;br /&gt;&lt;br /&gt;Aquí me pongo como objetivos:&lt;br /&gt;&lt;br /&gt;* Aprender a utilizar el i2c (algo bastante general)&lt;br /&gt;* Hacer con un Nunchuck un sensor para nuestro Lego (ejemplo concreto de lo mencionado anteriormente)&lt;br /&gt;&lt;br /&gt;Ni corto ni perezoso he pedido un WiiChuck Adapter por internet. No tengo acciones de ninguna tienda ni me llevo beneficios, pero como la experiencia con &lt;a href="http://store.fungizmos.com/"&gt;Fungizmos&lt;/a&gt; ha sido muy buena, os la voy a comentar.&lt;br /&gt;&lt;br /&gt;El WiiChick Adapter es, hablando un poco en plata, una pequeña placa que permite conectar un NunChuck a un cabezal de cuatro. Y luego ya se puede conectar este cabezal a cualquier invento electrónico que se nos venga a la cabeza, como por ejemplo, un &lt;a href="http://www.arduino.cc/es/"&gt;Arduino&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La pieza que pedí fue la &lt;a href="http://store.fungizmos.com/index.php?main_page=product_info&amp;cPath=69&amp;products_id=212"&gt;siguiente&lt;/a&gt;. Se pudo pagar con PayPal, tuve tan sólo un dolar de gastos de envío y llegó en tres días, desde Estados Unidos a España. Experiencia 100% recomendable y asequible para bolsillos en crisis, 3,75 euros en total.&lt;br /&gt;&lt;br /&gt;Aquí os dejo unas fotos de cómo vino embalado y del adaptador en cuestión.&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/vXxMTODlt_N37_ErvGa5IQ?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_NvbicCRbTw0/S8BYK3a_m_I/AAAAAAAAASs/ta1YqhxBywg/s144/wiiChuckSobreCerrado.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/DuRHKWhFqDijkNTvC9hHcA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_NvbicCRbTw0/S8BWZw1D0iI/AAAAAAAAAR8/arkFZNdIlfo/s144/wiiChuckContenidoSobre1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/ISqajCd6VZEqJGdH2mwK8w?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_NvbicCRbTw0/S8BWajq9lcI/AAAAAAAAASA/HAp70tervIY/s144/wiiChuckContenidoSobre2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Como se puede ver, no se han gastado mucho en embalaje, pero es que el producto, tampoco lo requería. Ha sido enviado por correo ordinario.&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/ioex1Hbo3J4f3btUykHFAQ?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_NvbicCRbTw0/S8BYLPHX5GI/AAAAAAAAASw/6hZAaOWEEyg/s144/wiiChuckVista1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/bHH97Hf2pm6QYeJOE-dfxA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_NvbicCRbTw0/S8BYL3mWQRI/AAAAAAAAAS0/l049ZsEwq4M/s144/wiiChuckVista2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/BcaIMa3TqmS_egSIF41P1A?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_NvbicCRbTw0/S8BYMptNHZI/AAAAAAAAAS4/3ibJMygJjfE/s144/wiiChuckVista3.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El adaptador es bastante pequeño, parece muy poca cosa, aunque espero que dé mucho juego a la hora de la verdad&lt;br /&gt;&lt;br /&gt;&lt;p align=center&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/8A10-k0TtWcCSfKNE6c1_A?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_NvbicCRbTw0/S8BWbVn_46I/AAAAAAAAASE/zHw-M8Z1nlk/s144/wiiChuckNunChuck1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.es/lh/photo/5IX74QEjS7rxjCbya9YHOA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_NvbicCRbTw0/S8BWcO0_ksI/AAAAAAAAASI/CThWTMSotNA/s144/wiiChuckNunChuck2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Y poco más puedo contar de este nuevo juguetito de momento. Dentro de poco espero poder trastear un poco más con él y escribir la crónica de algún experimento interesante. Además en este afán consumista que me rodea ultimamente, he pedido hoy un &lt;a href="http://www.arduino.cc/es/"&gt;Arduino&lt;/a&gt; y unos componentes básicos (leds, resistencias, y botones) para trastear un poco más con este tema.&lt;br /&gt;&lt;br /&gt;En breve ... mis aventuras y desventuras con el Lego(R) y el Arduino.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-8867846044661652465?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/8867846044661652465/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=8867846044661652465&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/8867846044661652465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/8867846044661652465'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/04/wiichuck.html' title='WiiChuck'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_NvbicCRbTw0/S8BYK3a_m_I/AAAAAAAAASs/ta1YqhxBywg/s72-c/wiiChuckSobreCerrado.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-928211952666130166</id><published>2010-03-19T18:46:00.008+01:00</published><updated>2010-03-19T20:06:19.665+01:00</updated><title type='text'>Máquinas de Turing (II): Leyendo una cinta</title><content type='html'>Voy a empezar a construir un robot que sea capaz de leer una cinta.&lt;br /&gt;&lt;br /&gt;La cinta, serán tiras de papel de distinta longitud, puestas en línea recta por el suelo. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PAFX3QOeI/AAAAAAAAAOc/RObsPMkNpZA/s1600-h/tiras+en+el+suelo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PAFX3QOeI/AAAAAAAAAOc/RObsPMkNpZA/s320/tiras+en+el+suelo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450411172586076642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y el robot encargado de leerlas, será este. Es un poco cutrecillo, porque está hecho a lo deprisa y corriendo, pero cumple su función con creces.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PKhk8LW3I/AAAAAAAAAPM/BzkBcsTEPYI/s1600-h/turing1perfil.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PKhk8LW3I/AAAAAAAAAPM/BzkBcsTEPYI/s320/turing1perfil.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450422652249004914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S6PKhC8wqpI/AAAAAAAAAPE/LqMhIY8VfBk/s1600-h/turing1frente.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S6PKhC8wqpI/AAAAAAAAAPE/LqMhIY8VfBk/s320/turing1frente.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450422643124644498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S6PKg4iB3xI/AAAAAAAAAO8/MeuiCywI9QM/s1600-h/turing1bajos.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S6PKg4iB3xI/AAAAAAAAAO8/MeuiCywI9QM/s320/turing1bajos.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450422640328171282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PKgXJAdUI/AAAAAAAAAO0/DvhBjijdysQ/s1600-h/turing1atras.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PKgXJAdUI/AAAAAAAAAO0/DvhBjijdysQ/s320/turing1atras.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450422631364851010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S6PKf_OVrZI/AAAAAAAAAOs/GRd-jnRaFhc/s1600-h/turing1arriba.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S6PKf_OVrZI/AAAAAAAAAOs/GRd-jnRaFhc/s320/turing1arriba.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450422624944762258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No voy a añadir un LDD en este momento, pero si un par de fotos para que veaís como se ha construido.&lt;br /&gt;&lt;br /&gt;Y ahora vamos a ponerlo en marcha. Aquí tenéis el video, el cable que cuelga es el del usb, porque hoy no funcionaba la conexión bluetooth, yo creo que es porque llueve.&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oX-MTmGtafc&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/oX-MTmGtafc&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;He registrado con matlab los valores que lee el sensor de luz y este es el resultado&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S6O7UJyIpeI/AAAAAAAAAOU/ebC9Meiv1sg/s1600-h/lineas+del+suelo.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 279px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S6O7UJyIpeI/AAAAAAAAAOU/ebC9Meiv1sg/s320/lineas+del+suelo.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5450405928946410978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se pueden ver claramente que hay cuatro tramos de color blanco detectado, uno mediano, dos pequeños consecutivos y por último uno largo final. Que se corresponden con las tiras que había en el suelo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PCJDW58YI/AAAAAAAAAOk/2WMaru7NA6g/s1600-h/tiras+en+el+suelo+2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S6PCJDW58YI/AAAAAAAAAOk/2WMaru7NA6g/s320/tiras+en+el+suelo+2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450413434824421762" /&gt;&lt;/a&gt;&lt;br /&gt;Y con esto y un bizcocho, he hecho una primera aproximación a leer una cinta de una máquina de turing, no sé si el modelo final será así, pero para empezar me vale.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-928211952666130166?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/928211952666130166/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=928211952666130166&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/928211952666130166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/928211952666130166'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/03/maquinas-de-turing-ii-leyendo-una-cinta.html' title='Máquinas de Turing (II): Leyendo una cinta'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NvbicCRbTw0/S6PAFX3QOeI/AAAAAAAAAOc/RObsPMkNpZA/s72-c/tiras+en+el+suelo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-3279073922915729650</id><published>2010-03-19T18:36:00.003+01:00</published><updated>2010-03-19T18:46:40.627+01:00</updated><title type='text'>Máquinas de Turing (I): Primera toma de contacto</title><content type='html'>Navegando por internet me encontré con algo que resultó muy interesante: máquinas de turing construidas con legos. &lt;br /&gt;&lt;br /&gt;Este es el primer &lt;a href="http://legoofdoom.blogspot.com"&gt;blog&lt;/a&gt; de máquinas de turing hechas con el nxt que encontré. El &lt;a href="http://www.youtube.com/watch?v=cYw2ewoO6c4"&gt;video&lt;/a&gt;, aparte de divertido, es bastante espectacular.&lt;br /&gt;&lt;br /&gt;Utilizan el sensor de contacto para leer los valores de la cinta, montada sobre unos railes de lego. Y para escribir utilizan un motor que hace girar los cuadrados de lego.&lt;br /&gt;&lt;br /&gt;La segunda referencia sobre legos y máquinas de turing la encuentro en el capítulo 3 del libro &lt;a href="http://www.amazon.com/LEGO-Mindstorms-Masterpieces-Building-Advanced/dp/1931836752"&gt;Lego Mindstorms Masterpieces&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En la previsualización del libro, en el índice, se puede ver una foto del resultado. No la pongo porque vete tú a saber que pasaría ... igual es ilegal y todo.&lt;br /&gt;&lt;br /&gt;Aquí la cinta es una serie de "interruptores" fabricados con vigas de tres y un dispositivo motor que las gira de un lado al otro, posición borrar y escribir. Es un resultado un poco menos vistoso que el anterior.&lt;br /&gt;&lt;br /&gt;Em ambos casos la cinta está limitada, podría ser interesante construir una máquina que tuviera cinta ilimitada.&lt;br /&gt;&lt;br /&gt;Una vez que he visto todo esto y se me han puesto los dientes largos ... voy a ver como construyo mi propia máquina de turing.&lt;br /&gt;&lt;br /&gt;Para empezar me hace falta un poco más de teoría sobre las máquinas de turing, para ver exactamente qué puedo construir.&lt;br /&gt;&lt;br /&gt;Creo recordar así del tirón que había casos en los que no hacía falta escribir, sólo leer. En este caso por ejemplo con el sensor de luz podría leer líneas dibujadas en el suelo de algún color para distinguir&lt;br /&gt;&lt;br /&gt;#ROJA# #VERDE## #VERDE# #ROJA# #VERDE#&lt;br /&gt;&lt;br /&gt;Luego en matlab ver una gráfica del tipo ___---____----___ e interpretarla como 0 ó 1.&lt;br /&gt;&lt;br /&gt;Mientras refresco todos mis conocimientos de máquinas de turing, voy a intentar construir un primer prototipo de este modelo.&lt;br /&gt;&lt;br /&gt;Bueno, ya hemos empezado otra aventurita con el lego :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-3279073922915729650?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/3279073922915729650/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=3279073922915729650&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3279073922915729650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3279073922915729650'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/03/maquinas-de-turing-i-primera-toma-de.html' title='Máquinas de Turing (I): Primera toma de contacto'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-3180165988475324616</id><published>2010-02-27T00:09:00.003+01:00</published><updated>2010-03-06T01:15:51.658+01:00</updated><title type='text'>laberintos (IX): resultado</title><content type='html'>Mucha letra ... pero lo que más interesa es ver un video de todo esto que os he contado en funcionamiento.&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yR2e9OD2WBM&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/yR2e9OD2WBM&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_JI7v2IMxXw&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_JI7v2IMxXw&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Qué los disfruteis&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-3180165988475324616?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/3180165988475324616/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=3180165988475324616&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3180165988475324616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3180165988475324616'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/02/laberintos-ix-resultado.html' title='laberintos (IX): resultado'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-1234036874499273159</id><published>2010-02-27T00:08:00.000+01:00</published><updated>2010-02-27T21:30:02.707+01:00</updated><title type='text'>Laberintos (VIII): Conclusiones y líneas de trabajo futuras</title><content type='html'>Ya habéis visto que el que no tiene un lego que escapa de laberintos es porque no quiere. Voy a intentar resumir aquí las conclusiones que he obtenido de este experimento.&lt;br /&gt;&lt;br /&gt;- El lego sigue sin parecerme una herramienta de precisión. Obviamente es un juguete. &lt;br /&gt;&lt;br /&gt;Esto lo he visto muy patente a la hora de realizar los giros, que prácticamente nunca eran de 90 grados justos. A veces te giraba más y a veces menos. A veces avanzaba hasta la mitad del cuadrado y otras veces hasta el final&lt;br /&gt;&lt;br /&gt;Esos pequeños fallos se iban acumulando y no se obtenían resultados buenos. El robot se iba de la habitación,  se quedaba dando vueltas sobre sí mismo.&lt;br /&gt;&lt;br /&gt;- Roborealm es la repanocha !!! le veo muchas posibilidades y todas muy interesantes. Creo que no va ser el último proyecto en que lo utilice.&lt;br /&gt;&lt;br /&gt;- He utilizado un montón de herramientas y he visto como colaboran todas en paz y armonía para obtener el resultado final. Cámara web -&gt; Roborealm -&gt; Telnet -&gt; Java -&gt; Matlab -&gt; Lego. &lt;br /&gt;&lt;br /&gt;Que buen integrador soy :D.&lt;br /&gt;&lt;br /&gt;Como futuros trabajos quiero proponerme que sea el propio lego el que sin ayuda de ningún sistema externo salga del laberinto. Ya tengo algo en mente, pero utilizando NXC, así que dentro de poco ... mis aventuras y desventuras con NXC.&lt;br /&gt;&lt;br /&gt;Espero que os haya gustado esta entrada. Ale, todos a hacer el Prison Break&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-1234036874499273159?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/1234036874499273159/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=1234036874499273159&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/1234036874499273159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/1234036874499273159'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/02/laberintos-conclusiones-y-lineas-de.html' title='Laberintos (VIII): Conclusiones y líneas de trabajo futuras'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-3017269193704606107</id><published>2010-02-27T00:06:00.003+01:00</published><updated>2010-02-27T21:35:35.991+01:00</updated><title type='text'>laberintos (VI) : algoritmo de búsqueda A*</title><content type='html'>Esto si que es superior a mis fuerzas explicarlo ... así que &lt;a href="http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda_A*"&gt;aquí&lt;/a&gt; tenéis un enlace a la wikipedia, que seguro que lo explica mucho mejor que yo.&lt;br /&gt;&lt;br /&gt;Lo que intento obtener del algoritmo, son las posiciones por las que tiene que pasar el robot para salir del laberinto. Y con qué acción se ha llegado a ellas. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4mBiro5ezI/AAAAAAAAANk/FgYFXCGkVnc/s1600-h/salida.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 294px; height: 261px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4mBiro5ezI/AAAAAAAAANk/FgYFXCGkVnc/s320/salida.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443024057483754290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Asi tenemos una lista de movimientos por ejemplo&lt;br /&gt;&lt;br /&gt;AV, avanza&lt;br /&gt;GT, gira 180 grados&lt;br /&gt;GD, gira 90 grados a la derecha&lt;br /&gt;GI, gira 90 grados a la izquierda&lt;br /&gt;&lt;br /&gt;Para salir del laberinto hay que pasar por las siguientes posiciones&lt;br /&gt;&lt;br /&gt;00,10,20,30,31,32,33,34,24,14,04,03,02,21&lt;br /&gt;&lt;br /&gt;que son los siguientes movimientos del robot&lt;br /&gt;&lt;br /&gt;GT,AV,AV,AV,GD,AV,AV,AV,AV,AV,GD,AV,AV,AV,GD,AV,AV,GD,AV&lt;br /&gt;&lt;br /&gt;Estas son las instrucciones que le enviamos a Matlab. Las escribimos en un fichero de texto plano en un directorio en el que Matlab está escuchando constantemente en busca de instrucciones para enviar al robot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-3017269193704606107?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/3017269193704606107/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=3017269193704606107&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3017269193704606107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3017269193704606107'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/02/laberintos-vi-algoritmo-de-busqueda.html' title='laberintos (VI) : algoritmo de búsqueda A*'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NvbicCRbTw0/S4mBiro5ezI/AAAAAAAAANk/FgYFXCGkVnc/s72-c/salida.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-3034772651266212793</id><published>2010-02-27T00:05:00.000+01:00</published><updated>2010-02-27T21:29:44.515+01:00</updated><title type='text'>Laberintos (V): ROBOREALM</title><content type='html'>&lt;a href="http://www.roborealm.com/"&gt;Roborealm&lt;/a&gt; es, hablando muy por encima, una aplicación de visión artificial y procesamiento de imagenes. Roborealm podría llenar por sí sólo blogs y blogs, así que lo que voy a contar aquí, no hace más que arañar la superficie de la cantidad de cosas que se pueden hacer con él.&lt;br /&gt;&lt;br /&gt;En este ejemplo vamos a proporcionar sentido de la vista a nuestro robot. Y hablando más técnicamente, vamos a transformar una imagen de un laberinto, en información que pueda entender el robot. En este caso, una matriz de dos dimensiones, que indique si hay pared o hay camino libre para moverse.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4l4PoYJV8I/AAAAAAAAANE/FjkAjR2ONtY/s1600-h/matriz+inicial.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 120px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4l4PoYJV8I/AAAAAAAAANE/FjkAjR2ONtY/s320/matriz+inicial.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5443013834586019778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como se puede ver, lo que voy a intentar conseguir en que posiciones de la matriz habrá pared o no. Que podría ser perfectamente una matriz de booleanos.&lt;br /&gt;&lt;br /&gt;Empecemos a trabajar con RoboRealm. Recordar que tenéis que jugar con ello para obtener buenos resultados y que yo disto mucho de ser un experto en su uso. seguro que se os ocurren muchas y mejores maneras de hacer lo mismo que yo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Información en bruto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El punto de partida en RoboRealm es un dispositivo capturador de imagenes, como puede ser una cámara web, o una imagen, como es el caso que nos ocupa.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxZqsoyQI/AAAAAAAAAM0/ZA_gxdLhegk/s1600-h/roboRealmInicio.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 298px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxZqsoyQI/AAAAAAAAAM0/ZA_gxdLhegk/s320/roboRealmInicio.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006310426134786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sobre estas imágenes se aplican una serie de &lt;a href="http://www.roborealm.com/help/index.php"&gt;filtros&lt;/a&gt; de manera consecutiva que van filtrando, extrayendo, modificando ... de modo que podamos extraer información útil de la misma.&lt;br /&gt;&lt;br /&gt;Lo primero que vamos a realizar sobre la imagen es aplicar el filtro &lt;a href="http://www.roborealm.com/help/Affine.php"&gt;Affine&lt;/a&gt;. Este filtro modifica los límites de la imagen para cuadrarla. Y fingir que estamos mirando el laberinto desde arriba. De este modo queda mucho mejor delimitado el laberinto.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/S4lxYwU-EVI/AAAAAAAAAMc/Dbnw_XUptn8/s1600-h/filtroAffine.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 271px; height: 320px;" src="http://1.bp.blogspot.com/_NvbicCRbTw0/S4lxYwU-EVI/AAAAAAAAAMc/Dbnw_XUptn8/s320/filtroAffine.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006294757609810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;De todo lo que aparece en la foto, sólo nos interesa los papeles verdes. Vamos a filtrar utilizando el &lt;a href="http://www.roborealm.com/help/RGB%20Filter.php"&gt;RGB Filter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxZSS9wtI/AAAAAAAAAMs/j0uC-gN-WSk/s1600-h/resultadoFiltroRGB.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 298px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxZSS9wtI/AAAAAAAAAMs/j0uC-gN-WSk/s320/resultadoFiltroRGB.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006303876006610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxZBvmq3I/AAAAAAAAAMk/xNSj4Pp1GXM/s1600-h/filtroRGB.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 270px; height: 320px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxZBvmq3I/AAAAAAAAAMk/xNSj4Pp1GXM/s320/filtroRGB.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006299432725362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya sólo tenemos en la imagen información interesante. Vamos a centrarnos en obtener tres cosas: dónde está la meta, dónde está la salida y dónde están las paredes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Obtener la meta&lt;/span&gt;&lt;br /&gt;Como se puede ver en la imagen inicial, la meta está representada con un triángulo. Luego deberemos buscar en la imagen objetos con forma de triángulo. Yo lo he resuelto de la siguiente manera.&lt;br /&gt;&lt;br /&gt;Utilizando el &lt;a href="http://www.roborealm.com/help/Blob_Filter.php"&gt;Blob Filter&lt;/a&gt;, podemos buscar formar en la imagen. En este caso queremos sólo buscar formas que tengan un área triangular y pulsamos CREATE BLOBS VARIABLE. Esta variable almacena el centro de gravedad de todos los objetos devueltos por el filtro. De este modo tenemos el punto donde está la salida dentro de la imágen.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxIf3hFJI/AAAAAAAAAMU/qNCMFQelBeo/s1600-h/blobFilterSalida.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 265px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxIf3hFJI/AAAAAAAAAMU/qNCMFQelBeo/s320/blobFilterSalida.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006015461201042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y ahora con el lenguaje de script que tiene roborealm, introducimos la variable BLOBS en la variable TRIANGULO.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/S4lxZ8flanI/AAAAAAAAAM8/5SeTxhh5e0o/s1600-h/scriptTriangulo.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 284px; height: 320px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/S4lxZ8flanI/AAAAAAAAAM8/5SeTxhh5e0o/s320/scriptTriangulo.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006315203226226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tras esta serie de pasos, tenemos en la variable TRIANGULO de RoboRealm la posición de la salida.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Obtener la salida&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El procedimiento es similar. Volvemos a la posición de partida, con el marcador de inicio. Aplicamos un nuevo Blob Filter, pero esta vez buscamos objetos que tengan forma circular. Marcamos "CREATE BLOBS ARRAY VARIABLE"&lt;br /&gt;&lt;br /&gt;De forma similar a antes introducimos la variable BLOBS en una nueva variable CIRCULO. Tenemos que hacer esto, porque si no, la llegada, habría sobrescrito el valor de la llegada.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxH6_Tv2I/AAAAAAAAAL8/WXQ0gMtwycE/s1600-h/blobFilterLlegada.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 265px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S4lxH6_Tv2I/AAAAAAAAAL8/WXQ0gMtwycE/s320/blobFilterLlegada.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006005561769826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tras esta serie de pasos, tenemos en la variable CIRCULO de RoboRealm la posición de la meta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Obtener las paredes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Las paredes se obtienen de manera similar. La única salvedad es que ahora tendremos no sólo un punto, sino un array de los mismos. Esto es importante de cara a recuperar los valores desde aplicaciones fuera de roborealm.&lt;br /&gt;&lt;br /&gt;Aquí podemos ver los pesos que tienen las figuras, el triángulo y el círculo han desaparecido porque hemos ajustado un valor muy alto. De este modo podemos ajustar los objetos "más cuadrados", "más redondos" ... Este filtro es muy interesante y creo que es el que más juego puede ofrecer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4lxIATnbKI/AAAAAAAAAME/mI5unTDRzFI/s1600-h/blobFilterParedes.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 265px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4lxIATnbKI/AAAAAAAAAME/mI5unTDRzFI/s320/blobFilterParedes.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006006989122722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4lxICzPOBI/AAAAAAAAAMM/YBQMhgRuhzQ/s1600-h/BlobFilterParedesConPesos.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 298px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4lxICzPOBI/AAAAAAAAAMM/YBQMhgRuhzQ/s320/BlobFilterParedesConPesos.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443006007658625042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tras esta serie de pasos, tenemos en la variable PAREDES de RoboRealm la posición de las paredes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Comunicación con otros sistemas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora voy a mostraros otra característica bastante interesante de RoboRealm, que es la comunicación con otros sistemas a partir de su &lt;a href="http://www.roborealm.com/help/API.php"&gt;API&lt;/a&gt;. Vamos a facilitar toda la información que ha extraído RoboRealm a la imagen, a un pequeño programa escrito en java. Este programa será el encargado de encontrar una salida al laberinto. Pero eso será en otra entrada.&lt;br /&gt;&lt;br /&gt;De este modo estoy separando el procesado de la imagen, con el procesado de la información extraida de la imagen. Así, detrás de RoboRealm, podemos tener cualquier otro sistema de resolución de problemas, más apropiado al caso que nos concierna.&lt;br /&gt;&lt;br /&gt;El uso de la API es bastante sencillo. Roborealm disponibiliza un servidor de telnet al que podemos atacar, por ejemplo, solicitando variables con &lt;br /&gt;&lt;br /&gt;&lt;pre class=code&gt; &lt;br /&gt;&amp;lt;request&amp;gt;&lt;br /&gt;  &amp;lt;get_variables&amp;gt;VAR_1_NAME, VAR_2_NAME, etc.&amp;lt;/get_variables&amp;gt;&lt;br /&gt;&amp;lt;/request&amp;gt;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4lxHdTyDmI/AAAAAAAAAL0/LjsNWMP4ZYA/s1600-h/API.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 158px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4lxHdTyDmI/AAAAAAAAAL0/LjsNWMP4ZYA/s320/API.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443005997594578530" /&gt;&lt;/a&gt;&lt;br /&gt;y aquí podemos ver como Roborealm nos ha devuelto los puntos donde estaban las paredes.&lt;br /&gt;&lt;br /&gt;Y con esto he dado una pequeña introducción a RoboRealm. Espero que haya quedado relativamente claro, y animaros una vez más a trastear por vuestra cuenta, porque con la visión artificial se amplían bastante los límites de los proyectos que podemos emprender con nuestro robot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-3034772651266212793?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/3034772651266212793/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=3034772651266212793&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3034772651266212793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3034772651266212793'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2009/12/laberintos-iv-roborealm.html' title='Laberintos (V): ROBOREALM'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NvbicCRbTw0/S4l4PoYJV8I/AAAAAAAAANE/FjkAjR2ONtY/s72-c/matriz+inicial.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-6587874950041317149</id><published>2010-02-27T00:04:00.001+01:00</published><updated>2010-02-27T21:36:23.877+01:00</updated><title type='text'>laberintos (IV): ¿Qué vamos a utilizar?</title><content type='html'>Todo esto está muy bien: tenemos un lego, un laberinto en el suelo ... pero nos falta algo. ¿Cómo vamos a hacer a lego inteligente para encontrar la salida? ¿Cómo va a ver el lego el laberinto? ... hay muchas preguntas, así que vamos a contestarlas por partes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;¿Cómo va el lego a interpretar el laberinto?&lt;/span&gt;&lt;br /&gt;Vamos a utilizar &lt;a href="http://www.roborealm.com/"&gt;Roborealm&lt;/a&gt;. Es un software de visión artificial. De este modo, podemos hacer que el lego "vea" a través de roborealm (mediante una foto del laberinto o una cámara web enfocada al laberinto), dónde está metido.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Una vez que ya sabe dónde está metido ¿Cómo va a saber salir?&lt;/span&gt;&lt;br /&gt;Para esto vamos a usar inteligencia artificial. Vamos a aplicar algoritmos de búsqueda de soluciones sobre lo que ve Roborealm y dar una solución al problema.&lt;br /&gt;&lt;br /&gt;Chuck Norris una vez tuvo un Lego Mindstorms. La televisión hizo documental sobre él, le llamó The Terminator. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Uff, muchas cosas ¿Cómo lo vamos a unir todo?&lt;/span&gt;&lt;br /&gt;Es un poco lio la verdad, pero lo voy a intentar explicar lo mejor que pueda.&lt;br /&gt;&lt;br /&gt;Roborealm va a reconocer la información del laberinto. &lt;br /&gt;&lt;br /&gt;Esa información va a ser procesada por un algoritmo de búsqueda de soluciones implementado en java. De este algoritmo se obtienen una serie de movimientos que son los que tiene que hacer el robot para salir del laberinto.&lt;br /&gt;&lt;br /&gt;Mediante matlab vamos a enviar esa serie de movimientos al robot para que salga del laberinto.&lt;br /&gt;&lt;br /&gt;Es importante resaltar que no es el bloque el que sabe salir del laberinto, si no que se limita a escuchar los movimientos que le llegan.&lt;br /&gt;&lt;br /&gt;Hay una entrada para cada una de estas partes, así que allí intentaré explicarlo un poco mejor&lt;br /&gt;&lt;br /&gt;Vamos al lío !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-6587874950041317149?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/6587874950041317149/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=6587874950041317149&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6587874950041317149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6587874950041317149'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/02/laberintos-iv-que-vamos-utilizar.html' title='laberintos (IV): ¿Qué vamos a utilizar?'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-6149674831997291211</id><published>2010-02-27T00:02:00.000+01:00</published><updated>2010-02-27T21:29:48.099+01:00</updated><title type='text'>Laberintos (II): el laberinto</title><content type='html'>Vamos a hablar de las partes de las que va a constar este experimento: un lego saliendo de un laberinto. Creo que a estas alturas todos sabemos lo que es un lego, así que no queda otra que hablar del laberinto.&lt;br /&gt;&lt;br /&gt;Recortando trozos de papel cuadrados he dibujado en el suelo de mi habitación un laberinto cuadrado 5x5 como puede ver en la siguiente imagen. Los bordes no están limitados por otros cuadrados, si no por las dimensiones.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/S4Fr6sAzm9I/AAAAAAAAALE/H4gWDu0DUdo/s1600-h/laberintoRelleno.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_NvbicCRbTw0/S4Fr6sAzm9I/AAAAAAAAALE/H4gWDu0DUdo/s320/laberintoRelleno.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440748480831396818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4l-_RhqGQI/AAAAAAAAANc/Uuv7LUYhjqs/s1600-h/paredes+laberinto.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4l-_RhqGQI/AAAAAAAAANc/Uuv7LUYhjqs/s320/paredes+laberinto.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443021250155387138" /&gt;&lt;/a&gt;&lt;br /&gt;El robot se puede mover por el suelo que no está ocupado por cuadrados verdes.&lt;br /&gt;&lt;br /&gt;La salida estará representada por un triángulo y el punto de llegada con un círculo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4FuDHiPN8I/AAAAAAAAALM/YckqdO_nhn4/s1600-h/SalidaYEntrada.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4FuDHiPN8I/AAAAAAAAALM/YckqdO_nhn4/s320/SalidaYEntrada.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440750824681584578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y aquí diferentes laberintos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/S4FuFPSf7iI/AAAAAAAAALs/17RxdFbAkyI/s1600-h/laberinto4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_NvbicCRbTw0/S4FuFPSf7iI/AAAAAAAAALs/17RxdFbAkyI/s320/laberinto4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440750861122792994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/S4FuErN4UKI/AAAAAAAAALk/qmtlbGKUyq0/s1600-h/laberinto3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/S4FuErN4UKI/AAAAAAAAALk/qmtlbGKUyq0/s320/laberinto3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440750851439743138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/S4FuEapL_ZI/AAAAAAAAALc/_jkO0QHxIbU/s1600-h/laberinto2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/S4FuEapL_ZI/AAAAAAAAALc/_jkO0QHxIbU/s320/laberinto2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440750846990876050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/S4FuDuqv1eI/AAAAAAAAALU/tSoJuGbZXYE/s1600-h/laberinto1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_NvbicCRbTw0/S4FuDuqv1eI/AAAAAAAAALU/tSoJuGbZXYE/s320/laberinto1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440750835186259426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si mi habitación fuera más grande ... pues podría hacer un laberinto enorme.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lo que pretendo es que el robot situado en la entrada, vaya hacía la salida.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/S4l6BEVEjRI/AAAAAAAAANM/upA4-owBgYc/s1600-h/ruta.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/S4l6BEVEjRI/AAAAAAAAANM/upA4-owBgYc/s320/ruta.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5443015783414533394" /&gt;&lt;/a&gt;&lt;br /&gt;Con esto creo que ya está explicado el dominio del problema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-6149674831997291211?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/6149674831997291211/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=6149674831997291211&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6149674831997291211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6149674831997291211'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2010/02/laberintos-ii-el-laberinto.html' title='Laberintos (II): el laberinto'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NvbicCRbTw0/S4Fr6sAzm9I/AAAAAAAAALE/H4gWDu0DUdo/s72-c/laberintoRelleno.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-5235138526714678916</id><published>2010-02-27T00:00:00.000+01:00</published><updated>2010-02-27T21:29:40.542+01:00</updated><title type='text'>Laberintos (I)</title><content type='html'>Hola a todos,&lt;br /&gt;&lt;br /&gt;Hace bastante bastante tiempo que no publico nada. No es que haya estado sin tocar estos temas, pero nada de lo que he intentado me ha salido bien.&lt;br /&gt;&lt;br /&gt;Aunque hoy escribo porque tengo un nuevo tema, y he obtenido un bonito resultado. A lo largo de las siguientes entradas podréis ver como mi lego escapa de un laberinto dibujado en el suelo.&lt;br /&gt;&lt;br /&gt;Un saludo y espero que la espera haya merecido la pena.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-5235138526714678916?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/5235138526714678916/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=5235138526714678916&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/5235138526714678916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/5235138526714678916'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2009/12/laberintos-i.html' title='Laberintos (I)'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2548305123800770993</id><published>2009-06-27T21:37:00.007+02:00</published><updated>2009-06-28T18:33:14.305+02:00</updated><title type='text'>Vehiculo que aparca sólo (SPC, Self Parking Car)</title><content type='html'>Uno de los robotos hechos con el nxt más recurrentes que podemos encontrar por youtube (fuente inagotable de inspiración), son los llamados SPC.&lt;br /&gt;&lt;br /&gt;He modificado un poco el siguiente diseño de &lt;a href="http://www.nxtprograms.com/steering_rover/index.html"&gt;nxtPrograms&lt;/a&gt;, y he obtenido lo siguiente, un pequeño coche con dirección.&lt;br /&gt;&lt;br /&gt;Lo importante de este diseño es la dirección, que nos permitirá girar para aparcar el coche. Además de ya por fin ver cumplido mi sueño de construir un vehículo con dirección)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/SkeVOdEagDI/AAAAAAAAAKE/LKS_rlWOBSg/s1600-h/Tempshot0011.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_NvbicCRbTw0/SkeVOdEagDI/AAAAAAAAAKE/LKS_rlWOBSg/s320/Tempshot0011.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5352410757706973234" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Y el sensor de ultrasonidos, que nos permitirá encontrar huecos en la carretera o sobre una mesa con libros, donde podamos aparcar el lego.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/SkeVOK4JFhI/AAAAAAAAAJ8/TnCMjx2uvw0/s1600-h/Serial0002.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_NvbicCRbTw0/SkeVOK4JFhI/AAAAAAAAAJ8/TnCMjx2uvw0/s320/Serial0002.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5352410752823662098" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;El resultado que he obtenido es el siguiente.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/A3TdDfEkRy8&amp;hl=es&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/A3TdDfEkRy8&amp;hl=es&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;El resultado es medianamente aceptable. He tenido que recordarme a mi mismo que tengo que hacer prácticas de aparcar con el coche de nuevo, y comprarme coche ya de una vez también.&lt;br /&gt;&lt;br /&gt;El sensor de ultrasonidos, tan sólo se usa para encontrar un hueco para aparcar, los demás giros que hace el lego, están metidos a capón en el código del programa. Ha sido un caso de programación por prueba y error. Como veis no entra mucho en el hueco, se queda más bien fuera, sospecho que es probelma de que la dirección no gira tanto como debería.&lt;br /&gt;&lt;br /&gt;Esto es un modelo muy sencillo, pero ya que estamos, voy a ver si lo mejoro un poco. He visto en youtube dos videos realmente interesantes.&lt;br /&gt;&lt;br /&gt;Este &lt;a href="http://www.youtube.com/watch?v=vhs1hQHgrwQ"&gt;lego &lt;/a&gt;me ha gustado mucho porque creo que se asemeja mucho a lo que hace un conductor real cuando aparca, una vez que el coche está medio metido, avanza hacia delanta y atrás mirando hasta que el coche esté bien encajado.&lt;br /&gt;&lt;br /&gt;No parece muy complicado añadir esta modificación al lego que tenemos entre manos, aunque eso será otro día.&lt;br /&gt;&lt;br /&gt;Este &lt;a href="http://www.youtube.com/watch?v=IdqZhIH9DHg"&gt;video &lt;/a&gt;se lleva la palma, especialmente los últimos segundos, cuando se vé quien hace realmente toda la chicha. El autor no da ninguna información sobre el proceso o que usa para hacer ese gráfico tan bonito que da la ruta que debe tomar el robot. Sólo que está hecho con .net.&lt;br /&gt;&lt;br /&gt;Parece un caso para matlab y alguna de sus toolbox. Investigaré un poco y veré que puedo encontrar.&lt;br /&gt;&lt;br /&gt;Me he puesto dos objetivos de tarea, a ver si cumplo alguno.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2548305123800770993?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2548305123800770993/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2548305123800770993&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2548305123800770993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2548305123800770993'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2009/06/vehiculo-que-aparca-solo-spc-self.html' title='Vehiculo que aparca sólo (SPC, Self Parking Car)'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NvbicCRbTw0/SkeVOdEagDI/AAAAAAAAAKE/LKS_rlWOBSg/s72-c/Tempshot0011.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-5742132920085590302</id><published>2009-03-09T12:04:00.009+01:00</published><updated>2009-06-27T21:36:51.309+02:00</updated><title type='text'>Rotar 360 grados sobre si mismo</title><content type='html'>Hoy voy a dar una solución a un problema que creo que todos los que jugamos con nuestro lego nos hemos encontrado alguna vez. Hacer una rotación completa en el sitio.&lt;br /&gt;&lt;br /&gt;Es una situación bastante común&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Un robot que analice el entorno para detectar algo. Como el ball hunter de nxtprograms, o mi fallido intento de hacer un mapa del entorno.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un robot que vea algo que no le guste y de media vuelta. Como por ejemplo la demo del nxt.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Para hacer que el tribot gire sobre si mismo, lo que todos hemos hecho alguna vez ha sido poner que los motores giren 360º cada uno, pero en sentido contrario. Pero ... ¡¡¡ se queda corto, no gira más !!! ... ¿Nos suena esto verdad? algo no cuadra.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/SbT52npT-RI/AAAAAAAAAJc/G_ox4UXT9KQ/s1600-h/circunferencia.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 132px; height: 88px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/SbT52npT-RI/AAAAAAAAAJc/G_ox4UXT9KQ/s320/circunferencia.JPG" alt="" id="BLOGGER_PHOTO_ID_5311144577327167762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Un poco de geometría, nos dará no sólo la solución sino que nos ayudará a comprender el problema. Lo principal es recordar que el perímetro de una circunferencia es pi * diámetro ó pi * 2 * diámetro.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pongamos de ejemplo la vuelta de una rueda de bicicleta (el reflectante empiece en el punto más bajo y vuelva a estarlo). La distancia que ha recorrido la bicicleta es pi*diámetro. También, la rueda de la bicicleta, ha girado 360 grados. Es decir, para girar 360º hace falta recorrer el perímetro completo.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/SkZ0oDsJOwI/AAAAAAAAAJ0/ZwGVS_IWXyE/s1600-h/bicilcletA.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 100px;" src="http://2.bp.blogspot.com/_NvbicCRbTw0/SkZ0oDsJOwI/AAAAAAAAAJ0/ZwGVS_IWXyE/s320/bicilcletA.JPG" alt="" id="BLOGGER_PHOTO_ID_5352093438710463234" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ahora mirad el siguiente dibujo. Es nuestro tribot visto desde arriba y dibujado por un pintor abstracto. Los rectángulos de los lados son las dos ruedas del tribot y la circunferencia sobre las que están, es lo que tienen que girar para hacer un giro completo. Para que el tribot gire completamente sobre sí mismo, cada rueda tiene que girar volviendo a su posición original.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/SbT8MDk16SI/AAAAAAAAAJk/agYFlDR0xik/s1600-h/todo.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 112px;" src="http://4.bp.blogspot.com/_NvbicCRbTw0/SbT8MDk16SI/AAAAAAAAAJk/agYFlDR0xik/s320/todo.jpg" alt="" id="BLOGGER_PHOTO_ID_5311147144625121570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nuestro fallo, es que hacemos que cada rueda gire 360º, es decir, pi*diámetro, cuando en realidad lo que tienen que recorrer es pi*distancia entre las dos ruedas,que es el diámetro de la circuferencia grande.&lt;br /&gt;&lt;br /&gt;Ahora unas fórmulas que nos harán la vida más fácil y también la correspondencia entre grados, radianes y coordenadas polares.&lt;br /&gt;&lt;br /&gt;Las veces que tiene que girar la rueda para volver al origen, o para recorrer 360º pi*distancia entre ruedas / pi * diametro rueda = distancia entre ruedas / diametro rueda.&lt;br /&gt;&lt;br /&gt;Si queremos que el giro no sea de 360º sino de un número de grados en concreto, pues una regla de tres. Dividimos entre 360º para sacar lo que recorre en un grado y multiplicamos por n, número de grados. (distancia entre ruedas * número de grados) / (diámetro ruedas * 360º)&lt;br /&gt;&lt;br /&gt;Sobre radianes y grados. En &lt;a href="http://es.wikipedia.org/wiki/Radi%C3%A1n"&gt;este enlace&lt;/a&gt; de la wikipedia, os lo contarán mucho mejor que yo. Pero recordad que pi radianes son 180º.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-5742132920085590302?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/5742132920085590302/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=5742132920085590302&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/5742132920085590302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/5742132920085590302'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2009/03/rotar-360-grados-sobre-si-mismo.html' title='Rotar 360 grados sobre si mismo'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NvbicCRbTw0/SbT52npT-RI/AAAAAAAAAJc/G_ox4UXT9KQ/s72-c/circunferencia.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2815989674656350862</id><published>2009-01-30T20:40:00.004+01:00</published><updated>2009-06-28T18:15:48.225+02:00</updated><title type='text'>derrotado otra vez</title><content type='html'>Retomando mi última creación.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Estaba totalmente seguro de que el problema era que las paredes estaban muy lejos, por lo que situaba al nxt en un entorno mucho más reducido (un "corral" hecho con libros), obtendría mejores resultados. También incluí algunas mejoras en el programa, como por ejemplo la normalización de datos&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nada más lejos de la realidad.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Esto es lo que detectaba si el robot estaba totalmente encerrado dentro de un cuadrado hecho de libros. Hay puntos repartidos por todo el contorno. &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;¡¡¡ Pero no equidistantes del centro !!!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/SYNYucV4VoI/AAAAAAAAAJE/fy5ax_vg2p8/s1600-h/tres.GIF"&gt;&lt;img src="http://3.bp.blogspot.com/_NvbicCRbTw0/SYNYucV4VoI/AAAAAAAAAJE/fy5ax_vg2p8/s320/tres.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5297175141623027330" style="cursor: pointer; width: 320px; height: 252px; " /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NvbicCRbTw0/SYNYufVto9I/AAAAAAAAAJM/_BQh2wstiZM/s1600-h/cuatro.GIF"&gt;&lt;img src="http://4.bp.blogspot.com/_NvbicCRbTw0/SYNYufVto9I/AAAAAAAAAJM/_BQh2wstiZM/s320/cuatro.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5297175142427632594" style="cursor: pointer; width: 320px; height: 253px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Y esto lo que detectaba si quitaba una pared del cuadrado. En la parte de abajo de la gráfica no hay ningún punto detectado.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/SYNYuDOwouI/AAAAAAAAAI8/tycJvAUA_14/s1600-h/dos.GIF"&gt;&lt;img src="http://2.bp.blogspot.com/_NvbicCRbTw0/SYNYuDOwouI/AAAAAAAAAI8/tycJvAUA_14/s320/dos.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5297175134882276066" style="cursor: pointer; width: 320px; height: 252px; " /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/SYNYuPY0oSI/AAAAAAAAAI0/W4AMhuaoxrE/s1600-h/uno.GIF"&gt;&lt;img src="http://2.bp.blogspot.com/_NvbicCRbTw0/SYNYuPY0oSI/AAAAAAAAAI0/W4AMhuaoxrE/s320/uno.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5297175138145706274" style="cursor: pointer; width: 320px; height: 253px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Como veis con mucha mucha imaginación ... algo se puede sacar. Pero visto que rodeando al robot con libros tampoco obtengo buenos resultados, voy a desistir de este modelo y cambiar la construcción del robot.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lo único que girará será el sensor de rotación y extremadamente lento.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No obstante, esto me ha servido para probar la facilidad con que en matlab puedo representar gráficas, eliminar ruido, calcular medias ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;A ver si tengo tiempo y pongo un pequeño video del robot dando vueltas ... no hace nada, casi me da verguenza enseñarlo.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cSzsM1dndQk&amp;amp;hl=es&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/cSzsM1dndQk&amp;amp;hl=es&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2815989674656350862?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2815989674656350862/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2815989674656350862&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2815989674656350862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2815989674656350862'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2009/01/derrotado-otra-vez.html' title='derrotado otra vez'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NvbicCRbTw0/SYNYucV4VoI/AAAAAAAAAJE/fy5ax_vg2p8/s72-c/tres.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-7615075336981614116</id><published>2009-01-18T18:50:00.012+01:00</published><updated>2009-01-18T19:38:30.700+01:00</updated><title type='text'>primera aproximación a un robot que detecta su entorno</title><content type='html'>&lt;div style="text-align: left;"&gt;En este nuevo proyecto, quiero abordar la construcción de un robot que "vea" el entorno en el que se encuentra, e intente alejarse lo más posible de su punto de partida. Para ello aprovecharé el modelo de robot que presenté en este mismo blog y sustituiré el sensor de intensidad de luz por el sensor de ultrasonidos. El &lt;a href="http://perso.wanadoo.es/radar/lxf/radar.lxf"&gt;modelo&lt;/a&gt; resultante lo podeis ver aquí mismo.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/SXNu2keO9ZI/AAAAAAAAAHs/Ok6-I_2ltN8/s1600-h/radar.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_NvbicCRbTw0/SXNu2keO9ZI/AAAAAAAAAHs/Ok6-I_2ltN8/s200/radar.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5292695870872941970" style="cursor: pointer; width: 177px; height: 200px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El funcionamiento que tengo en mente es el siguiente: que el robot gire 360º sobre sí mismo a la vez que recopila información sobre su entorno mediante el sensor. Esta información es la distancia a los objetos que existen a su alrededor. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lo que pretendo es averiguar el punto que más alejado esté del origen y desplazar el robot hacía allí, y repetir el proceso otra vez. Teniendo en cuenta de que no vuelva por donde haya venido.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este proyecto en &lt;a href="http://www.nxtprograms.com/ball_hunter/"&gt;nxtprograms&lt;/a&gt; hace algo muy similar a lo que yo quiero, por lo que bajaré el programa para el nxt-g y estudiaré las partes que me puedan venir bien.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lo más interesante del programa es lo siguiente. Se puede ver que si se encuentra un objeto, a una distancia menor que un objeto que ya tuvieramos localizado, guardamos este nuevo objeto como el más cercano, a la vez que también guardamos la nueva posición.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Es interesante ver como la posición se guarda reseteando la cuenta de grados recorridos por el motor, de este modo al rotar el motor a su posición inicial tendremos el objeto más cercano delante.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;También se puede ver como no hay ninguna medida estándar para que el robot gire 360º sobre si mismo. Haciendo pruebas he calculado que unos 600º de giro de una rueda equivalen a 360º del robot.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/SXN29YNHMNI/AAAAAAAAAIs/9AhSpdQUR5M/s1600-h/false.GIF"&gt;&lt;img src="http://2.bp.blogspot.com/_NvbicCRbTw0/SXN29YNHMNI/AAAAAAAAAIs/9AhSpdQUR5M/s320/false.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5292704783932010706" style="cursor: pointer; width: 320px; height: 110px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/SXN29dmz49I/AAAAAAAAAIk/Auqisx-DAe8/s1600-h/true.GIF"&gt;&lt;img src="http://2.bp.blogspot.com/_NvbicCRbTw0/SXN29dmz49I/AAAAAAAAAIk/Auqisx-DAe8/s320/true.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5292704785381974994" style="cursor: pointer; width: 320px; height: 111px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A continuación esbozo un pseudocódigo de lo que hace el robot mientras gira&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;variable distanciaMasLejana &lt;- 0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;variable gradosDistanciaMasLejana &lt;- 0 &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;mientras el robot gira&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;variable valorRecogido &lt;- recojo medición del sensor de ultrasonidos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;si valorRecogido &gt; distanciaMasLejana // es decir, hay un punto más lejano al que puedo ir que el que tenía almacenado&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;distanciaMasLejana &lt;- valorRecogido&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;reseteamos motor&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;fin si&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;fin mientras el robot gira&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Una vez que haya finalizado el giro del robot, en la posición inicial de giro tendremos el camino más largo para andar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Teniendo en cuenta todo lo anterior ... vamos a entrar en harina. Un poco de matlab por aquí y por allá, un par de maldiciones ... y más o menos ya lo &lt;a href="http://perso.wanadoo.es/sl539/radar/puntom/prisonBreak.m"&gt;tengo&lt;/a&gt;. Antes de todo unas consideraciones&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Como he hecho en robots anteriores, tomar varias medidas y luego hacer la media, no funciona aquí. Se podría pensar que si el robot en vez de dar una vuelta, diera cinco se tendría mucha más precisión. Se obtiene todo lo contrario. Como los grados que se recorren no son exactamente múltiplos de 360º, y el sensor está moviéndose contínuamente mientrasa hace mediciones ... a más vueltas, lo que se obtiene el que es robot está rodeado de todos los obstáculos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/SXNx2dYEYFI/AAAAAAAAAH8/JB6UHAfVah8/s1600-h/pasillo5.GIF"&gt;&lt;img src="http://3.bp.blogspot.com/_NvbicCRbTw0/SXNx2dYEYFI/AAAAAAAAAH8/JB6UHAfVah8/s320/pasillo5.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5292699167502917714" style="cursor: pointer; width: 320px; height: 254px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Es bastante complicado interpretar el dibujo resultante. El que se ve a continuación es el del robot situado en medio de un pasillo. Con paredes cerca a los lados y paredes al principio y al final del pasillo que no se ven. Se puede ver que con cada ejecución del programa, obtenemos un resultado bastante diferente.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NvbicCRbTw0/SXNyBrt-nkI/AAAAAAAAAIE/_UiIbndOhO8/s1600-h/pasillo.GIF"&gt;&lt;img src="http://2.bp.blogspot.com/_NvbicCRbTw0/SXNyBrt-nkI/AAAAAAAAAIE/_UiIbndOhO8/s320/pasillo.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5292699360331472450" style="cursor: pointer; width: 320px; height: 254px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/SXNyTmjhELI/AAAAAAAAAIM/fPczkHBOv8U/s1600-h/pasillo2.gif"&gt;&lt;img src="http://1.bp.blogspot.com/_NvbicCRbTw0/SXNyTmjhELI/AAAAAAAAAIM/fPczkHBOv8U/s320/pasillo2.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5292699668183060658" style="cursor: pointer; width: 320px; height: 253px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Voy a filtrar en el resultado los valores muy altos, para ello no voy a mostrar en el resultado aquellos valores que estén muy por encima de la media. Se puede ver como ahora el resultado es un poco más intuitivo.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/SXN1bvw9lcI/AAAAAAAAAIc/XBNcbWof9AM/s1600-h/filtro.GIF"&gt;&lt;img src="http://1.bp.blogspot.com/_NvbicCRbTw0/SXN1bvw9lcI/AAAAAAAAAIc/XBNcbWof9AM/s320/filtro.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5292703106629211586" style="cursor: pointer; width: 320px; height: 253px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Aqui vemos el resultado con una botella. La verdad es que no se ve nada ... por lo que deduzco que sólo podrá detectar objetos pequeños.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/SXN0UIelJzI/AAAAAAAAAIU/sIH6W2EJhjI/s1600-h/botella.GIF"&gt;&lt;img src="http://3.bp.blogspot.com/_NvbicCRbTw0/SXN0UIelJzI/AAAAAAAAAIU/sIH6W2EJhjI/s320/botella.GIF" border="0" alt="" id="BLOGGER_PHOTO_ID_5292701876312418098" style="cursor: pointer; width: 320px; height: 253px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Más que suficiente para una entrada en el blog. Voy a titularla primera aproximación a un robot que detecta su entorno. Es una primera aproximación por que intuyo que esto no va a funcionar realmente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Es incapaz de localizar objetos pequeños en distancias medias.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Los gráficos resultantes son extremadamente dificiles de interpretar.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A parte que hay como dos tipos de gráficos: unos con los puntos bien delineados y otros con grupitos curvados. Ignoro a qué se debe eso todavía.&lt;/li&gt;&lt;li&gt;El robot no puede girar excesivamente lento, ya que necesita algo de potencia para mover todo su peso. Esa es la razón de los gráficos tan extraños.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La solución podría ser cambiar totalmente el diseño del robot. Montando el sensor sobre un servo, que gire extremadamente lento y consiga unos resultados más precisos con muchas más mediciones por giro. Pero eso ya será en otra ocasión.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;También este robot podría tener otro ámbito de actuación, como por ejemplo un laberinto de paredes estrechas. Sería interesante probar su desarrollo en un campo de esas características.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En la próxima entrada acabaré el programa, probaré el robot en varios entornos y subiré algún video.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Un saludo a todos.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-7615075336981614116?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/7615075336981614116/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=7615075336981614116&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7615075336981614116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7615075336981614116'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2009/01/primera-aproximacin-un-robot-que.html' title='primera aproximación a un robot que detecta su entorno'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NvbicCRbTw0/SXNu2keO9ZI/AAAAAAAAAHs/Ok6-I_2ltN8/s72-c/radar.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-2019954316217488656</id><published>2008-12-14T19:19:00.006+01:00</published><updated>2008-12-15T12:39:10.536+01:00</updated><title type='text'>Clasificación First Lego League Madrid 2008</title><content type='html'>&lt;div style="text-align: left;"&gt;Hoy he tenido la oportunidad de trabajar como voluntario en la ronda clasificatoria de la &lt;a href="http://www.firstlegoleague.org/"&gt;First Lego League&lt;/a&gt; 2008 &lt;a href="http://www.roboteca.org/"&gt;española &lt;/a&gt;que ha tenido lugar en Madrid. Mi colaboración ha sido más bien escasa al ser mi primer año y se ha reducido a vigilar a los chavales en el PIT o área de entrenamiento, en la lengua del Cantar del Mio Cid.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En el área de entrenamiento los chavales disponen de una réplica del tapete de juego donde se hacen las eliminatorias oficiales, y les sirve para hacer los últimos retoques a los robots.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NvbicCRbTw0/SUVVDg2dtrI/AAAAAAAAAE8/s6PNk4KQGK0/s1600-h/Setup_Game_Table_Web.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_NvbicCRbTw0/SUVVDg2dtrI/AAAAAAAAAE8/s6PNk4KQGK0/s200/Setup_Game_Table_Web.jpg" alt="" id="BLOGGER_PHOTO_ID_5279719657008117426" style="cursor: pointer; width: 200px; height: 138px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Los chavales parecen ser igual que los mayores, porque salvo un grupo al que no le he visto entrenar casi nada (los ganadores finales he de añadir), los demás han dado buena cuenta de su tiempo de práctica.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Esto me ha dado la oportunidad de ver un montón de robots interesantes. La verdad es que me han sorprendido varios de los robots, para estar hechos por chavales. Había mecanismos muy ingeniosos. Muchos de ellos programaban con labview dejando de lado al nxt-g.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A título personal diré que me hubiera gustado poder echar un ojo a los proyectos más en profundidad, puede que al próximo año si sigo de voluntario, intente hacer de juez de proyecto técnico. O tal vez se podría sugerir que los proyectos ganadores se alojen en una especie de repositorio al más puro estilo nxtLog (un modelo lxf y un documento con su documento técnico )&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La final española será en el Cosmo Caixa de Barcelona el día uno de febrero de 2009. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enhorabuena a los ganadores, y mucha suerte en la ronda final española.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ya por último, otro pequeño evento de robótica usando lego. El viernes se celebró el V Certamen de Robótica Educativa, la &lt;a href="http://complubot.educa.madrid.or/"&gt;complubot&lt;/a&gt;. Podeis ver el evento, que fué retransmitido en directo &lt;a href="http://www.educa.madrid.org/portal/web/educamadrid/retransmisiones"&gt;aquí&lt;/a&gt;. Unos combates de sumo, laberitnos, y seguidores de líneas, y se presentó lo que puede ser un nuevo sensor de movimiento: &lt;a href="http://www.ni.com/academic/wedo/"&gt;wedo&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-2019954316217488656?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/2019954316217488656/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=2019954316217488656&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2019954316217488656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/2019954316217488656'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/12/clasificacin-first-lego-league-madrid.html' title='Clasificación First Lego League Madrid 2008'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NvbicCRbTw0/SUVVDg2dtrI/AAAAAAAAAE8/s6PNk4KQGK0/s72-c/Setup_Game_Table_Web.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-8877538537068499474</id><published>2008-12-13T20:43:00.006+01:00</published><updated>2008-12-15T12:39:10.537+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seguidor líneas'/><title type='text'>vehículo para muchos propósitos</title><content type='html'>&lt;div style="text-align: left;"&gt;Hola a todos, hoy me gustaría presentaros un modelo de vehículo que pretendo usar para varios modelos como base. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://4.bp.blogspot.com/_NvbicCRbTw0/SURH4CFhM7I/AAAAAAAAAE0/Yjjpv42RCrY/s200/coche.JPG" style="cursor:pointer; cursor:hand;width: 184px; height: 200px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5279423691143328690" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Es un pequeño vehículo capaz de ir en cuatro direcciones a ras de suelo, pero con la peculiaridad que se deja poner en la parte adelantada cualquier sensor, apuntando al frente o al suelo. Esto nos permite hacer con él, dependiendo del sensor que coloquemos, robots con propósito totalmente diferente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Con este diseño consigo que robot y sensor giren a la vez, haciendo posible recopilar datos de los 360 grados. Si sólo girara el sensor, quedando el resto del robot fijo. El cable que une sensor-bloque, se enrollaría sobre si mismo quitando maniobrabilidad al conjunto.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El procedimiento para colocar los sensores, va a la imaginación de cada uno, pero viendo el &lt;a href="http://perso.wanadoo.es/sl539/modeloCoche/coche.lxf"&gt;modelo&lt;/a&gt;, creo que lo tendreís bastante fácil.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este modelo en concreto con el sensor de luz apuntando hacia el suelo, lo he utilizado para programar el típico robot que sigue la línea del tapete. Lo he programado en matlab, para variar y la verdad es que he tenido buenos resultados. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No he conseguido que sea tan rápido como mi anterior intento usando el nxt-g. Creo que al tema motores, sensores ... no le acabo de coger bien el truco con la toolbox. También cabe la posibilidad, de que todo sea debido a que he usado bluetooth, y tiene un retardo mayor que el usb, o el programa embebido. No he hecho ningún video porque no he aportado nada distinto al que ya tenía hecho.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ahora quiero usar este modelo de coche con el sensor de ultrasonidos para hacer un robot que salga de laberintos o alguna cosa similar. Ese es mi próximo proyecto.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aunque siguiendo con el tema de seguir líneas ... tengo otro proyecto en la trastienda. Mirad que video más espectacular.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xNi-66lh-uQ&amp;amp;hl=es&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/xNi-66lh-uQ&amp;amp;hl=es&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He hablado con el autor y muy amablemente me cedió el lxf y el rbt asociado, así que creo que intentaré repetir su proyecto y programarlo con matlab. Ya os contaré. Muchas gracias &lt;a href="http://www.youtube.com/user/cesky79"&gt;cesky79&lt;/a&gt;. Youtube es sinduda una fuente inagotable de sabiduría&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Voy a volver a casa por navidad, como el turrón, así que estaré un poco aislado de mi lego. Tendreís noticias mías a la vuelta de vacaciones.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;¡ Felíz navidad a todos !&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-8877538537068499474?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/8877538537068499474/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=8877538537068499474&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/8877538537068499474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/8877538537068499474'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/12/vehculo-para-muchos-propsitos.html' title='vehículo para muchos propósitos'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NvbicCRbTw0/SURH4CFhM7I/AAAAAAAAAE0/Yjjpv42RCrY/s72-c/coche.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-6092042608276655518</id><published>2008-11-28T09:31:00.008+01:00</published><updated>2008-12-15T12:39:10.537+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='información general'/><category scheme='http://www.blogger.com/atom/ns#' term='matlab'/><title type='text'>Adaptador Bluetooth</title><content type='html'>Me ha dado por utilizar la &lt;a href="http://www.mindstorms.rwth-aachen.de/"&gt;rwth toolbox&lt;/a&gt; para programar el nxt, y como ya he comentado tiene dos modos de funcionamiento: con un cable usb conectado siempre al equipo donde corra matlab o mediante bluetooth. Como tener el cable usb quita mucha libertdad de movimiento, me he decidio a comprar un adaptador bluetooth.&lt;br /&gt;&lt;br /&gt;La cosa parece bastante sencilla; vamos a la tienda, cogemos el más bonito, enchufamos y listo. Pero en la realidad esto es un poco distinto. Empecemos con un poquito de documentación.&lt;br /&gt;&lt;br /&gt;Bluetooth es un especificación de comunicación en redes inalámbricas de área personal. Estas con redes muy pequeñas, y para un uso específico: pasar una canción entre móviles o conectar el gps en el coche. Al ser una especificación, los fabricantes lo implementan luego como quieren apareciendo sutiles diferencias entre las distintas implementaciones. Cuando los dispositivos se construyen para una máxima conectividad o son dispositivos de uso general: móviles, pdas, equipos con windows, gps ... no se aprecian problemas en el uso de las distintas implementaciones. Pero cuando el dispositivo a conectar es algo especial, en mi caso nxt sobre matlab, la cosa cambia, ya que el protocolo debe tener en cuenta más cosas. La conclusión es, que no todos los dispositivos bluetooth nos servirán para controlar remotamente el nxt.&lt;br /&gt;&lt;br /&gt;Un buen punto de partida es la &lt;a href="http://mindstorms.lego.com/overview/Bluetooth.aspx"&gt;documentación oficial&lt;/a&gt; de lego al respecto. Allí podemos ver una matriz de compatibilidad con cabezas lego que no todos los pares dispositivos/adaptador son soportados.  No están todos los modelos del mercado ni mucho menos.&lt;br /&gt;&lt;br /&gt;Como punto de partida está bien, pero necesito algo más, experiencia real, así que habrá que investigar por los foros. Desde aquí recomiendo los foros de &lt;a href="http://www.nxtasy.org/"&gt;nxtasy&lt;/a&gt;, que tienen un montón de cosas interesantes, además de experiencias de otros usuarios de nxt.&lt;br /&gt;&lt;br /&gt;Tras mucha búsqueda y mucho leer, en este &lt;a href="http://forums.nxtasy.org/lofiversion/index.php?t480.html"&gt;hilo &lt;/a&gt;se resumen mucho el tema del adaptador. A modo de resumen diré que los modelos recomendados son aquellos adaptadores cuyos drivers bluetooth sean de &lt;a href="http://www.widcomm.com/"&gt;Widdcom,&lt;/a&gt; o que usen la implementación de Microsoft Windows XP SP2.&lt;br /&gt;&lt;br /&gt;Ahora viene cuando la matan, porque a parte de querer un adaptador compatible con el nxt, necesito uno compatible con la toolbox. Asi que, mirando su &lt;a href="http://www.mindstorms.rwth-aachen.de/trac/wiki/BluetoothAdapter"&gt;matriz de compatibilidad&lt;/a&gt; y algún comentario que deja &lt;a href="http://www.mindstorms.rwth-aachen.de/trac/wiki/Home#Authors"&gt;Linus&lt;/a&gt;, uno de los programadores de la toolbox en los foros de nxtasy, lo que funciona con uno ... no tiene que poder funcionar con el otro.&lt;br /&gt;&lt;br /&gt;Desesperado porque era practicamente imposible concicilar un dispositivo que apareciera en las dos listas, que usara controladores Widdcom y que se vendiera en tiendas ... al final me decidí por el &lt;a href="http://www.conceptronic.net/site/desktopdefault.aspx?tabindex=0&amp;amp;tabid=200&amp;amp;Cat=10&amp;amp;grp=1020&amp;amp;ar=351&amp;amp;Prod_ID=2180&amp;amp;Prod=CBT200U2A&amp;amp;subid=554"&gt;conceptronic cbt200u2a&lt;/a&gt;, animado por comentarios en un hilo del foro.&lt;br /&gt;&lt;br /&gt;Que funcionara con el nxt-g fue muy sencillo, enchufar y listo (bendito plug &amp;amp; play), independientemente de los controladores que instalara. Otra cosa fue la toolbox.&lt;br /&gt;&lt;br /&gt;Con los controladores de Microsoft y Widdcom, me fue imposible hacerlo funcionar. Creo que es porque estos dos controladores crean dos puertos serie para la comunicación, uno de entrada y otro de salida, y la toolbox requiere uno bidireccional. En uno de estos intentos desesperados actualicé el firmware del bloque a la última versión, la 1.05. Fué rápido e indoloro. Seguramente haga una entrada para contar como fué.&lt;br /&gt;&lt;br /&gt;Al final ya un poco asqueado probé a instalar los controladores toshiba que venían con el adaptador. Según los foros ... esto no iba a funcionar ni de coña, pero ver que sólo creaba un puerto COM ... la esperanza volvió. Hice una prueba rápida y fuí capaz de mover un motor a distancia.&lt;br /&gt;&lt;br /&gt;Me gustaría probarlo sobre gnu/linux, pero ahora mismo no tengo ninguna distribución instalada.  Me imagino que no haya ningún problema porque la pila bluetooth la proporciona el propio kernel y si alguien ha conseguido hacerlo funcionar en una distribución, funcionará en todas al compartir el núcleo. Pero es sólo una suposición.&lt;br /&gt;&lt;br /&gt;Conclusión: lo de los bluetooth es una lotería, hay que recorrerse muchos foros y ver opiniones de usuarios con el mismo dispositivo que quieras adquirir, y recorrer muchas tiendas hasta encontrar en la que vendan tu modelo. Y luego para ver como funcionan exactamente con lo que dice la gente que no va a funcionar. Lo bueno, que son baratos, me costó once euros y un céntimo.&lt;br /&gt;&lt;br /&gt;Como era muy tarde, no hice más pruebas, aunque espero este fin de semana probarlo bien, ya que tengo en mente volver a hacer un seguidor de líneas. Ya sé que tengo uno hecho, pero ahora le intentaré hacer desde cero y con matlab, y por bluetooh !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-6092042608276655518?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/6092042608276655518/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=6092042608276655518&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6092042608276655518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6092042608276655518'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/11/adaptador-bluetooth.html' title='Adaptador Bluetooth'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-7703110951432906410</id><published>2008-11-24T10:10:00.007+01:00</published><updated>2008-12-15T12:39:10.537+01:00</updated><title type='text'>Lego Digital Designer (LDD)</title><content type='html'>&lt;a href="http://ldd.lego.com/"&gt;Lego Digital Desisgner&lt;/a&gt; es una herramienta de diseño gráfico para inmortalizar nuestras creaciones lego.&lt;br /&gt;&lt;br /&gt;Existen muchas otros programas. Leyendo un poco las dos opciones más importantes que he encontrado por internet son &lt;a href="http://www.ldraw.org/"&gt;LDraw&lt;/a&gt; y la que os presento hoy, LDD. Me he decantado por esta última porque he encontrado pequeñas dificultades a la hora de hacer funcionar LDraw. Espero que este pequeño problema mio, no os desanime a probarlo.&lt;br /&gt;&lt;br /&gt;Tras modelar la pieza del separador de bolas, puedo decir que su instalación y uso es bastante sencillo.&lt;br /&gt;&lt;br /&gt;Podemos descargar el instalador de la &lt;a href="http://ldd.lego.com/download/default.aspx"&gt;página de descargas&lt;/a&gt;. El programa está mantenido por el propio Lego y a día de hoy la versión es la 2.0. No he encontrado ningún histórico de instalaciones, aunque no descarto que exista. La aplicación se conecta a internet al arrancar para descargarse nuevos modelos de piezas.&lt;br /&gt;&lt;br /&gt;Una vez abierto, recomiendo el visionado del &lt;a href="http://ldd.lego.com/getstarted/default.aspx"&gt;get Started&lt;/a&gt;. El programa es muy sencillo y fácil de manejar. Se coge el ritmo bastante rápido.&lt;br /&gt;&lt;br /&gt;He de decir que sin tener una máquina especialmente potente (Intel Pentium IV a 2Ghz y 1 GB de memoria), el programa va bastante fluido. Esto para mi es un punto muy a tener en cuenta. Yo he usado la versión que funciona sobre windows.&lt;br /&gt;&lt;br /&gt;Una cosa que me ha llamado bastante la atención es que una vez hecha la pieza, el programa genera secuencias de instrucciones para la construcción de la misma, lo cual está bastante bien. Eso sí, las instrucciones que genera por lo menos para mi. no tienen mucho sentido.&lt;br /&gt;&lt;br /&gt;Enumero a continuación, a modo de resumen los pros y los contras que más me han llamado la atención.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ventajas&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Es freeware, su uso no conlleva gasto alguno.&lt;/li&gt;&lt;li&gt;No consume muchos recursos.&lt;/li&gt;&lt;li&gt;Curva rápida de aprendizaje.&lt;/li&gt;&lt;li&gt;Genera automáticamente instrucciones de montaje.&lt;/li&gt;&lt;li&gt;Es un producto oficial de Lego, por lo que se nos da acceso a otros servicios de Lego, como puede ser la Lego Factory, o saber que siempre tendremos soporte para todas nuestras piezas.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Desventajas&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No se puede ejecutar sobre plataformas Linux.&lt;/li&gt;&lt;li&gt;Lego Factory no da soporte para modelos que utilicen piezas technics. No es una desventaja del programa, pero es un efecto colateral.&lt;/li&gt;&lt;li&gt;La gente "experta" en el modelado considera que es un buen punto para empezar pero que no es muy potente.&lt;/li&gt;&lt;/ul&gt;Yo de momento voy a usarlo algún tiempo, luego ... ya veremos. Con este artículo sólo pretendo dar una pequeña introducción al mundo del modelado a través del LDD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-7703110951432906410?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/7703110951432906410/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=7703110951432906410&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7703110951432906410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7703110951432906410'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/11/lego-digital-designer-ldd.html' title='Lego Digital Designer (LDD)'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-4970389494377929608</id><published>2008-11-21T19:44:00.007+01:00</published><updated>2008-12-15T12:39:10.538+01:00</updated><title type='text'>Separador de Bolas</title><content type='html'>&lt;div&gt;Hola,&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Este blog seguramente no tiene ningún seguidor, pero aún así pediré perdón por llevar tanto tiempo sin escribir. Después de vacaciones, mudanzas y un sin fin de historias raras ... al fin he vuelto a cacharrear.&lt;br /&gt;&lt;br /&gt;Quiero presentar en esta entrada varios temas que yo considero muy interesantes. mi tiempo de inactividad en el blog no ha sido un tiempo de inactividad con mindstorms.&lt;br /&gt;&lt;br /&gt;Lo primero de todo ... &lt;a href="http://www.mindstorms.rwth-aachen.de/"&gt;http://www.mindstorms.rwth-aachen.de/&lt;/a&gt; como podreis ver es una toolbox de matlab para programar el nxt. Hay muchas formas diferentes de programarlo, pero os voy a explicar las razones que me han llevado a elegir esta.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;no es necesario cambiar el firmware del bloque, lo cual para los temerosos de los briqueos (jugador de psp y wii) como yo, es un riesgo eliminado.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;control mediante bluetooth o usb. con esto podemos hacer que nuestro robot se vaya de paseo por el pasillo mientras lo controlamos a distancia. y el usb, pues para gente que todavía no tiene bluetooth, como soy yo&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;es matlab. así que tengo toda la potencia y versatibilidad de un lenguaje de programación de alto nivel (para mi es más fácil hacer un bucle for que un dibujito con el nxg) con la potencia de matlab. puedo tomar 200 mediciones del sensor de luz y luego hacer una media con una simple llamada a la función mean, o representar gráficamente un barrido circular del sensor de ultrasonidos para ver un mapa de la habitación a la altura del lego.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;se aprenden bastantes cosas de como funciona el bloque por dentro, los mensajes que se mandan de control, funcionamiento intero del motor ...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;como desventajas&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;no se pueden "bajar" programas al lego por bluetooth ni por el usb, los comandos se ejecutan desde la consola de matlab teniendo el bloque encendido. siempre se depende de un matlab corriendo.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;el matlab necesrio es la versión 7.4, que es bastante pesada&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;dicho todo esto, os animo a que lo probeis, la verdad es que a mi me ha sorprendido bastante y ha pasado a ser mi forma estándar de programar con el bloque. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ahora pasemos a harina. en este video podeis ver la vida que he creado.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/b3GfinEtB2M&amp;amp;hl=es&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/b3GfinEtB2M&amp;amp;hl=es&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;si no os habeis arrancado los ojos debido a la pésima calidad del mismo os doy mi más sincera enhorabuena. mi webcam no da para más, estoy pensándome mucho el comprar una cámara digital para inmortalizar estos momentos lego y también, claro está, del resto de mi vida. ( Se aceptan donativos :D)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;como podeis ver es un separador de piezas, en este caso bolas del sobrevive de mb, que tenía rondando por casa así que antes de donarlo a algún primo pequeño, pues a jugar con las bolas.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NvbicCRbTw0/SScLENE38uI/AAAAAAAAAEk/Nm8upUS9mfQ/s1600-h/sobrevive.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_NvbicCRbTw0/SScLENE38uI/AAAAAAAAAEk/Nm8upUS9mfQ/s200/sobrevive.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5271194055717941986" style="cursor: pointer; width: 200px; height: 168px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;para reconocer las bolas he utilizado el sensor de luz. he realizado 500 mediciones de la intensidad, y luego calculado la media. (bucle y mean, fácil en matlab). para cada color se tenían unos valores más o menos diferenciados, así que eso he usado para separarles. la medición dependía de la intenesidad de luz de la habitación así que con la lámpara pues he intentado que fuera constante. como podeis ver en el juego hay bolas de cuatro colores, pero el sensor de luz no me daba valores muy separados para cada uno de ellos, así que me era imposible separarlos. con el negro y el azul, obtenía medias muy distantes, así que esa es la razón de que les haya usado.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;una vez que se reconocía la bola, había que mover la pala hasta el recipiente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;para esto la verdad es que me he buscado bien las castañas, he construido una base, que soporta el motor y con la doble rueda he conseguido hacer una plataforma móvil. si veis los dibujos estará mejor explicado.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;para la pala me he inspirado en algunos modelos de brick sorteres que he visto por internet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;el principal problema que he encontrado aquí es la inercia que se gastan los motores. me explico, tu le dices que se mueva 90 grados y cuando el motor lleva 90 grados movido, deja de suministrar energía pero el motor sigue girando por que conserva su &lt;a href="http://es.wikipedia.org/wiki/Momento_angular"&gt;momento angular&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;esto tiene una solución y es la de regular la velocidad de moviemiento del motor. si el motor se pasa, el mismo se recupera marcha atrás. una vez concluido el moviemiento, el motor no se queda en el modo COAST (libertad de movimiento) sino que se queda en modo BRAKE. se le está suministrando energía para que no se mueva y es imposible de mover a dedo. hay que añadir que este modo requiere mucha energía. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;a este pequeño inconveniente hay que añadir que he leido que usando la regulación de velocidad y pequeños movimientos del motor, se acaba perdiendo precisión del mismo. sigo investigando esto, porque no me ha quedado muy claro.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;podeis ver como cuando vuelve a la posición inicial no queda en el mismo lugar. así que también hay que jugar un poco de por donde poner los recipientes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;creo que eso es todo. espero haberme explicado bien. y que me hayas entendido.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aquí podeis descargar el modelo usando el LDD, lo he divido en tres ficheros para que se vea mejor. de momento no hay nada incluido de instrucciones, vistas y demás, que aunque veaís que no se puede incluir desde la propia aplicación, &lt;a href="http://nxtasy.org/2008/11/02/hacking-ldd/"&gt;el formato si lo soporta&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://perso.wanadoo.es/sl539/separadorBolas/ldd/base.lxf"&gt;base&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://perso.wanadoo.es/sl539/separadorBolas/ldd/pala.lxf"&gt;pala&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://perso.wanadoo.es/sl539/separadorBolas/ldd/completo.lxf"&gt;completo&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;y el código fuente en matlab. es una guarrada de código ... os aviso, así que por esta vez ... haced con él lo que os dé la gana, más adelante lo publicaré bajo alguna licencia.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://perso.wanadoo.es/sl539/separadorBolas/ldd/base.lxf"&gt;código fuente&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;el proyecto que tengo ahora en mente es un robot que sea capaz de explorar su entorno y moverse lo más alejado de su punto de origen. para ello usaré las capacidades bluetooth, así que ahora mismo estoy mirando modelos de dispositivos bluetooth, habrá una entrada sobre ellos y características recomendables, no os preocupeis. es un tema un poco más peligudo de lo que parece.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;un saludo y no hagais nada de lo que os podais arrepentir&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-4970389494377929608?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/4970389494377929608/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=4970389494377929608&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/4970389494377929608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/4970389494377929608'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/11/separador-de-bolas.html' title='Separador de Bolas'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NvbicCRbTw0/SScLENE38uI/AAAAAAAAAEk/Nm8upUS9mfQ/s72-c/sobrevive.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-552684611825430</id><published>2008-06-26T16:43:00.003+02:00</published><updated>2008-12-15T12:39:10.538+01:00</updated><title type='text'>Cumpliendo objetivos</title><content type='html'>este pasado finde estuve programando el lego que seguía líneas el solito.&lt;br /&gt;&lt;br /&gt;tras empaparme de los programas de nxtPrograms. me puse a programar yo solito pero esta vez que siguiera la línea por dentro y no por fuera. como en el colegio, que te ponían un problema y luego te mandaban otro para casa con los datos cambiados. o como en la universidad que te ponían un problema y ... no espera, en la universidad no.&lt;br /&gt;&lt;br /&gt;lo hizo bastante bien, pero cuando llegaba al pico del start, se volvía un poco tonto y daba vueltas sin parar, como el objetivo de mi sesión no era hacer el programa perfecto sino, hacer yo algo por mi cuenta, me quedé por satisfecho.&lt;br /&gt;&lt;br /&gt;al día siguiente intenté hacer que siguiera la línea más rápidamente, introduciendo &lt;a href="http://lrobotikas.net/web/modeloak/mod11/mod11_c.htm"&gt;algo de lógica borrosa a la hora de tomar las decisiones. que guay queda decir eso ... en realidad lo que hice fue meter más condiciones en el if.&lt;br /&gt;&lt;br /&gt;lo que hacía era dado el nivel de negro/blanco que se estaba recibiendo, girar el motor en mayor o menor medida. como sigue a continuación&lt;br /&gt;&lt;br /&gt;si el nivel de blanco está entre 75% y 100%: giro el motor a todo trapo&lt;br /&gt;si el nivel de blanco está entre 50% y 75%: giro el motor un poco menos&lt;br /&gt;si el nivel d&lt;/a&gt;e blanco está entre 25% y 50%: giro el motor un poco menos&lt;br /&gt;...&lt;br /&gt;si el nivel de blanco es nulo, pues sigo recto.&lt;br /&gt;&lt;br /&gt;por alguna extraña razón, sólo funcionaba si empezaba sobre la línea negra, y la verdad, se notaba un poco más de velocidad, pero tampoco para tirar cohetes. y cuando llegaba al pico del start ... fuera también, a dar vueltas !!!. estoy pensando en hacerme un circuito redondo sin picos.&lt;br /&gt;&lt;br /&gt;ahora que he puesto esa tabla arriba se me ha ocurrido que en vez de usar un if ... podría hacer que la potencia del motor fuera directamente proporcional al nivel de blanco. sería encadenar la salida del sensor de luz a un operador aritmético, y este que fuera a la entrada del motor especificando el porcentaje de potencia. pero no sé si se podrá hacer esto último habrá que probarlo.&lt;br /&gt;&lt;br /&gt;y con esto daría por terminado mi primer objetivo, el de hacer cosas por mi mismo con el programita de marras.&lt;br /&gt;&lt;br /&gt;también he de decir que con el giga de ram mi equipo se mueve de maravilla. una buena compra de las mias :D&lt;br /&gt;&lt;br /&gt;otra cosa ... en un blog que he encontrado por ahí, creo haberlo mencionado antes. &lt;a href="http://robotikas.blogspot.com/"&gt;&lt;/a&gt;, siguiendo un par de enlaces he encontrado este montaje que parece entretenido, para calcular coeficientes de rozamiento&lt;br /&gt;&lt;br /&gt;me parece interesante hacerlo en los dos sentidos, es decir, que calcule lo que tardará en bajar, si le especificas el peso del objeto o que dado el tiempo y el peso, el sólo calcule la pendiente ... cosas de física, vamos como si fuera un científico intentando calcular el mejor momento para enviar un cohete a marte.&lt;br /&gt;&lt;br /&gt;y además el mecanismo de hacer que la pendiente suba o baje, y calcular los grados. esto me servirá seguramente a trabajar con los servos y a mirar un poco más el toronomaki, que seguramente tendrá mecanismos de esas trazas.&lt;br /&gt;&lt;br /&gt;bueno, eso es todo por hoy, así que como diría ed wood ¡a positivar!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-552684611825430?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/552684611825430/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=552684611825430&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/552684611825430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/552684611825430'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/06/cumpliendo-objetivos.html' title='Cumpliendo objetivos'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-4429438889118322480</id><published>2008-06-18T18:12:00.002+02:00</published><updated>2008-12-15T12:39:10.538+01:00</updated><title type='text'>compromisos</title><content type='html'>bueno voy a dejar por escrito mis dos compromisos para hacer con el lego a corto plazo, para que así me entre cargo de conciencia si no les cumplo&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hacer mi propia implementación del robot que sigue líneas. así ya por fin aprendo a usar bien el programa ese infernal, que espero que con el giga de ram que he metido a mi equipo ya pueda ir decente ...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hacer algo poco a poco, del brick sorter, o en la lengua del cantar del mio cid, un lego que separe piezas de colores. lo empezaré a hacer modular, poco a poco y sin juntar hasta que ya tenga color y forma. esa será mi primera obra de producción propia. es que he visto algunos modelos muy interesantes en youtube.&lt;/li&gt;&lt;/ul&gt;el que más me ha llamado la atención ha sido este&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uNoQ-VTdvm0&amp;hl=es"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/uNoQ-VTdvm0&amp;hl=es" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;ya que usa una rueda para convertir moviemiento circular en una sola dimensión (menuda manera de explicarlo ...), vamos cosas del toronomaki, y me ha gustado&lt;br /&gt;&lt;br /&gt;weno, este mismo finde me voy a poner con ellos !!! o ya empiezo poniendo excusas ... porque seguramente me toque viajar y no esté en mi casita dándole calor al lego (estaré con mi novia celebrando su matrícula de honor en termodinámica)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-4429438889118322480?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/4429438889118322480/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=4429438889118322480&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/4429438889118322480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/4429438889118322480'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/06/compromisos.html' title='compromisos'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-7727588048373716645</id><published>2008-06-17T15:58:00.003+02:00</published><updated>2008-12-15T12:39:10.539+01:00</updated><title type='text'>sin perdón del root</title><content type='html'>bueno, tengo este blog un poco muerto, hace mucho que no escribo nada, pero no quiere decir que no haya trasteado nada con mi lego ... he trasteado y mucho.&lt;br /&gt;&lt;br /&gt;me he dedicado a hacer cosas que he visto por diversas páginas. la más mejor para mi es &lt;a href="http://www.nxtprograms.com/"&gt;nxtPrograms&lt;/a&gt;. Tienen un montón de artilugios diversos con instrucciones de montaje y los programas hechos.&lt;br /&gt;&lt;br /&gt;aquí os dejo unos enlaces a las cosas que he estado haciendo&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Io6HP6Lo5KQ&amp;amp;hl=es"&gt;&lt;embed src="http://www.youtube.com/v/Io6HP6Lo5KQ&amp;amp;hl=es" type="application/x-shockwave-flash" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;aquí podeis ver una variante del brazo robótico que se mueve por la voz, o mejor dicho por los gritos que le pegaba.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ep4y0wCywOE&amp;amp;hl=es"&gt;&lt;embed src="http://www.youtube.com/v/ep4y0wCywOE&amp;amp;hl=es" type="application/x-shockwave-flash" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;este es el que sigue líneas&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vySMkrbVpBA&amp;amp;hl=es"&gt;&lt;embed src="http://www.youtube.com/v/vySMkrbVpBA&amp;amp;hl=es" type="application/x-shockwave-flash" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;y esta es la demo del nxt&lt;br /&gt;&lt;br /&gt;también hay un video de una metralleta sacaba de nxt programs, pero es tán súmamente rápida, que no se vé absolutamente nada en el vídeo. os aconsejo que lo hagais. también estuve a punto de hacer un vídeo de un robot que buscaba bolas y miraba a ver de que color eran, pero el vago de mi compañero de piso no me dejó la cámara y no pude hacer vídeo. como veis los vídeos que hago son bastante cutres, debido a mi cutre web cam ... y dado mi arrebato último arrebato (por fin tengo play) consumista pasará mucho tiempo hasta que adquiera un modo de hacer mejores vídeos&lt;br /&gt;&lt;br /&gt;ahora mismo me encuentro inmerso en el robot que sigue líneas (con un sólo sensor de luz :P, esto va por mi novia, que es la mejor de todas, pero ella lo hizo con dos sensores en la carrera). quiero hacer el programa por mi mismo o modificarlo de algún modo porque me he dado cuenta de que tengo que empezar a crear cosas por mi mismo, más que copiar cosas que veo por ahí sueltas.&lt;br /&gt;&lt;br /&gt;de todos modos copiar también es una buena forma de aprender. también he intentado volver a hacer, de forma fallida, la dirección del coche ... os podeis imaginar el resultado.&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_InsertUnorderedList" title="Lista con viñetas" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 16);ButtonMouseDown(this);"&gt;&lt;img src="img/gl.list.bullet.gif" alt="Lista con viñetas" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;en fin como veis, he hecho muchas cosas, tampoco para tirar cohetes, pero me comprometo a poner cosas interesantes de vez en cuando y a contar mis progresos ...&lt;br /&gt;&lt;br /&gt;algunas direcciones interesantes a parte de la anterior son&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://robotikas.blogspot.com/"&gt;http://robotikas.blogspot.com/&lt;/a&gt; que es un blog con cosas muy interesantes con foro y todo en castellano&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;super libro para aprender estructuras muy interesantes. merece la pena echarle un ojo. yo me lo estudio todos los días en el curro. &lt;a href="http://www.isogawastudio.co.jp/legostudio/toranomaki/jp/"&gt;http://www.isogawastudio.co.jp/legostudio/toranomaki/jp/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-7727588048373716645?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/7727588048373716645/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=7727588048373716645&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7727588048373716645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7727588048373716645'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/06/sin-perdn-del-root.html' title='sin perdón del root'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-3773474673626687436</id><published>2008-02-23T20:35:00.002+01:00</published><updated>2008-12-15T12:39:10.540+01:00</updated><title type='text'>el brazo del robot</title><content type='html'>tras un par de semanas olvidado de la mano de dios me puse a trastear un poco más: hoy toca hacer el brazo robot.&lt;br /&gt;&lt;br /&gt;en el montaje tardé igual unas tres horas, pero es que remolono mucho y voy lento, sólo tuve una pieza mal, era un poco más larga de lo normal, pero al final no pasó nada grave :D.&lt;br /&gt;&lt;br /&gt;primera decepción: es imposible accionar bien el sensor de tacto, me hace lo que le da la gana :S, el servo tiene que hacer mucha presión para pulsarlo bien y se atasca todo ...&lt;br /&gt;&lt;br /&gt;así que pensé en ponerle un sensor de voz, y gritarle para al brazo para que cambiara el orden de giro, bajara cogiera ... un poco de todo un poco.&lt;br /&gt;&lt;br /&gt;creo que el programa me estaba vacilando porque hacía lo que le daba la gana, se saltaba bucles, a veces le gritabas y no te hacía ni caso ...&lt;br /&gt;&lt;br /&gt;en fin hoy me lo he pasado bien con el lego, pero tampoco he sido capaz que hiciera todo lo que yo quería así en plan bien ...&lt;br /&gt;&lt;br /&gt;mañana intentaré acoplar en lugar de sensor de tacto el de ultrasonidos, para encontrar la bola y dejarla en su sitio, no sé si saldrá pero por lo menos me entretengo.&lt;br /&gt;&lt;br /&gt;a ver cuando cuelgo el video&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-3773474673626687436?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/3773474673626687436/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=3773474673626687436&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3773474673626687436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/3773474673626687436'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/02/el-brazo-del-robot.html' title='el brazo del robot'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-7529075391672622766</id><published>2008-02-10T02:25:00.000+01:00</published><updated>2008-12-15T12:39:10.540+01:00</updated><title type='text'>la primera desilusión</title><content type='html'>tras habermelo pasado pipa con mi lego que esperaba que le aplaudieran me puse ha hacer el que con unas pinzas cogía la bola ... ...&lt;br /&gt;&lt;br /&gt;bueno pues primero el robot arrastraba la bola para adelante y nunca se pulsaba el sensor de movimiento ... bueno pues tras hacer fuerza con el dedo para que no se la llevara por delante, nunca conseguí darle los grados suficientes ni la potencia suficiente para que las pinzas lo agarraran ...&lt;br /&gt;&lt;br /&gt;así que pensé, bueno pues voy a hacer un coche, que ya paso de estas cosas de principiantes ... bueno a hacer un coche así con mis engranajes de cremalleras.&lt;br /&gt;&lt;br /&gt;arrrr muerte súbita. problemas por todos lados: no sé como van las piezas, ni las conozco, doy mil vueltas para enganchar dos cosas, las ruedas dentadas para cambio de eje no tienen una medida exacta; son de algo y medio ... al final conseguí cambiar el eje de rotación del servo pero con mucho cariño y trabajo y de un modo super sencillo. a ver si pongo el vídeo o la foto o algo con ello.&lt;br /&gt;&lt;br /&gt;luego para enganchar el engranaje de cremallera ... ... bueno pues ahí literalmente morí. me he muerto señores ... mi lego mindstorms, ha podido conmigo, así que he decidido empezar a hacer modelos ya con planos ... snifff, pero volveré a por mi coche más tarde o más temprano !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-7529075391672622766?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/7529075391672622766/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=7529075391672622766&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7529075391672622766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/7529075391672622766'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/02/la-primera-desilusin.html' title='la primera desilusión'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-6446542997478030051</id><published>2008-02-09T10:12:00.000+01:00</published><updated>2008-12-15T12:39:10.541+01:00</updated><title type='text'>empecemos en 30 minutos</title><content type='html'>bueno ya he montado el cacharrómetro de los 30 minutos ...&lt;br /&gt;&lt;br /&gt;al final han sido más de 30 pero es que no me cosco muy bien buscando las piezas ... lo de un taper para tenerlas bien y a la vista va a ser importante, de momento estoy con la tapa de unas tarrinas de dvds.&lt;br /&gt;&lt;br /&gt;bueno no sé si ha alguno que lo haya comprado y lo ponga por primera vez le haya invadido la siguiente pregunta ... ¿esto que hace?&lt;br /&gt;&lt;br /&gt;tengo un aparato con ruedas quieto ... y cuando le dé al play ?? destruirá mi habitación ?? al final le llevé al salón que es más bien grande y la sorpresa de he tirado todas tus paredes o me choco con todas las patas de tus muebles podría ser menor&lt;br /&gt;&lt;br /&gt;tras ver que no hace nada destructivo le llevé a mi habitación y grabé este vídeo&lt;br /&gt;&lt;br /&gt;espero que os guste !!!&lt;br /&gt;&lt;br /&gt;después de esto le hice alguna modificación, y así de paso aprendí a usar el infernal programa ese que te viene con el cd.&lt;br /&gt;&lt;br /&gt;se queda quieto al final esperando que des un aplauso, para dar una vuelta sobre sí mismo. de esto no tengo vídeo, pero os lo podeis imaginar :P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-6446542997478030051?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/6446542997478030051/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=6446542997478030051&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6446542997478030051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/6446542997478030051'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/02/empecemos-en-30-minutos.html' title='empecemos en 30 minutos'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-4458518929010428238</id><published>2008-02-09T08:00:00.000+01:00</published><updated>2008-12-15T12:39:10.541+01:00</updated><title type='text'>a comprar</title><content type='html'>tras un viaje infernal en el metro en que las dos líneas que tenia que coger se estropearon justo una parada antes del trasbordo y calle respectivamente, y tras andar cuesta arriba un cuarto de hora hasta la tienda ... ahí estaba, &lt;a href="http://www.electricbricks.com/"&gt;electricBricks&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;el tío de la tienda es muy majo, me estuvo enseñando cosas y tal y videos de youtube (me los sé todos de mirarlos en el trabajo, pero no se lo digáis a mi jefe !!!). al final me llevé el básico y cuatro engranajes de cremallera porque tenía alguna cosa en mente.&lt;br /&gt;&lt;br /&gt;&lt;table style="text-align: left; margin-left: 0px; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NvbicCRbTw0/R7BAeKOiVQI/AAAAAAAAACY/XHMCCuDViqo/s1600-h/3743_white.gif"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_NvbicCRbTw0/R7BAeKOiVQI/AAAAAAAAACY/XHMCCuDViqo/s200/3743_white.gif" alt="" id="BLOGGER_PHOTO_ID_5165699659479536898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_NvbicCRbTw0/R7BAY6OiVPI/AAAAAAAAACQ/aB-_pk6jAIk/s1600-h/caja_lego.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_NvbicCRbTw0/R7BAY6OiVPI/AAAAAAAAACQ/aB-_pk6jAIk/s200/caja_lego.jpg" alt="" id="BLOGGER_PHOTO_ID_5165699569285223666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;la tienda es una pasada, yo no he visto tantos legos en mi vida, tenían todos de star wars ... pero tampoco era plan comprármelos todos. el x-wing de mis sueños costaba 150 €, y se me iba un poco del presupuesto de aquella tarde.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_NvbicCRbTw0/R7A_sqOiVOI/AAAAAAAAACI/i5iBDNNhp5I/s1600-h/xwing.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_NvbicCRbTw0/R7A_sqOiVOI/AAAAAAAAACI/i5iBDNNhp5I/s200/xwing.JPG" alt="" id="BLOGGER_PHOTO_ID_5165698809076012258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;otro viaje infernal a casa y a abrir impacientemente la caja y luego al día a por las pilas. con esto de alimentación tengo que mirar algo, pero ya veré. también alguna cosa tipo taper, o bolsa de plástico para guardar todas las piezas clasificadas de algún modo que ya estudiaré.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_NvbicCRbTw0/R7BCfaOiVRI/AAAAAAAAACg/k-yWgycqNjw/s1600-h/_Lego+Mindstorms+NXT.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_NvbicCRbTw0/R7BCfaOiVRI/AAAAAAAAACg/k-yWgycqNjw/s200/_Lego+Mindstorms+NXT.jpg" alt="" id="BLOGGER_PHOTO_ID_5165701879977628946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;perdón por las cutre fotos ... pero es que no tengo cámara digital y las tengo que hacer con la cutre-webcam, pero creo que se ven algo bien. las de aquí como podreis imaginar, son sacadas vilmente de internet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-4458518929010428238?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/4458518929010428238/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=4458518929010428238&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/4458518929010428238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/4458518929010428238'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/02/comprar.html' title='a comprar'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NvbicCRbTw0/R7BAeKOiVQI/AAAAAAAAACY/XHMCCuDViqo/s72-c/3743_white.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7337166374138141472.post-5953594650613872125</id><published>2008-02-08T08:00:00.000+01:00</published><updated>2008-12-15T12:39:10.542+01:00</updated><title type='text'>Presentación</title><content type='html'>hola,&lt;br /&gt;&lt;br /&gt;este va a ser mi blog en el que publicaré todas mis experiencias con el lego mindstorms. &lt;br /&gt;&lt;br /&gt;ahora mismo será un blog de principiante principiante, pero espero que se convierta en un buen blog.&lt;br /&gt;&lt;br /&gt;siempre me quedé en la carrera con la espinita clavada de no hacer las de informática industrial y microcontroladores ... ( en fin es que las optativas de economía tenían mucho más éxito ), así que ahora me hayo dispuesto a sacarme esa espina por mis propios medios y con las pinzas del tribot !!!&lt;br /&gt;&lt;br /&gt;sed bienvenidos todos, espero que os guste&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7337166374138141472-5953594650613872125?l=milegomindstorms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://milegomindstorms.blogspot.com/feeds/5953594650613872125/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7337166374138141472&amp;postID=5953594650613872125&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/5953594650613872125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7337166374138141472/posts/default/5953594650613872125'/><link rel='alternate' type='text/html' href='http://milegomindstorms.blogspot.com/2008/02/presentacin.html' title='Presentación'/><author><name>aquel que desafía al sol</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
