<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Con G de GNU &#187; Hardware</title>
	<atom:link href="http://www.congdegnu.es/category/hardware/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.congdegnu.es</link>
	<description>aptitude install freedom</description>
	<lastBuildDate>Sat, 28 Jan 2012 19:22:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<copyright>2006-2007 </copyright>
	<managingEditor>congdegnu@gmail.com (Con G de GNU)</managingEditor>
	<webMaster>congdegnu@gmail.com (Con G de GNU)</webMaster>
	<image>
		<url>http://www.congdegnu.es/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Con G de GNU</title>
		<link>http://www.congdegnu.es</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>aptitude install freedom</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>Con G de GNU</itunes:author>
	<itunes:owner>
		<itunes:name>Con G de GNU</itunes:name>
		<itunes:email>congdegnu@gmail.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.congdegnu.es/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>BeagleBone: Primeros pasos</title>
		<link>http://www.congdegnu.es/2012/01/28/beaglebone-primeros-pasos/</link>
		<comments>http://www.congdegnu.es/2012/01/28/beaglebone-primeros-pasos/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 16:35:31 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Guias y manuales]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[beagle]]></category>
		<category><![CDATA[beaglebone]]></category>
		<category><![CDATA[cloud9]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1362</guid>
		<description><![CDATA[Hola! Os voy a presentar el beagle bone. Seguro que muchos ya lo conocéis así que tras una breve introducción mostraré cómo dar los primeros pasos, que aunque sencillos, a veces te pueden hacer perder mucho tiempo. En resumidas cuentas Beagle Bone es un ordenador en pequeño pero con el que también puedes controlar hardware [...]]]></description>
			<content:encoded><![CDATA[<p>Hola! Os voy a presentar el beagle bone. Seguro que muchos ya lo conocéis así que tras una breve introducción mostraré cómo dar los primeros pasos, que aunque sencillos, a veces te pueden hacer perder mucho tiempo. En resumidas cuentas Beagle Bone es un ordenador en pequeño pero con el que también puedes controlar hardware externo a través de sus pines (como con arduino). Para que te hagas una idea, su procesador es un ARM A8 cortex que funciona a unos 700mhz (este dato  es sólo algo orientativo, otro día veremos cómo &#8220;comparar&#8221; procesadores) y cuenta con 256MB de RAM. Exacto, con todo eso puedes ejecutar un sistema operativo como el que tienes en tu ordenador (siempre y cuando exista para ARM que en el caso de Linux así es <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><div class="wp-caption alignright" style="width: 410px"><img src="http://www.adafruit.com/images/medium/beaglesticker_MED.jpg" alt="" width="400" height="308" /><p class="wp-caption-text">El logo es un adorable perrito</p></div></p>
<p>Es realmente pequeño, unos 9cm de largo y 5,5 de ancho (un poco más grande que arduino) y cuenta con un lector de trajetas microsd (donde metes el SO y lo que tu quieras), un host USB (para enchufarle camáras, teclados, ratones&#8230;), un conector RJ45 y un micro USB para conetarlo al PC.</p>
<p>Bien, no me enrrollo más. Todo esto que cuento ya lo han contado cientos de veces en otras páginas así que vamos al tema. Qué hacer cuando sacas el beaglebone de su caja.</p>
<p>&nbsp;</p>
<p>Lo primero que se me ocurre es conectarlo al PC por el microUSB y ver que pasa. Tras unos segundos (recuerda que tiene que iniciar el sistema operativo y eso lleva tiempo) el ordenador detectará un dispositivo de almacenamiento masivo mediante el cual podrás acceder a las particiones que tengas excepto la usada por beaglebone. Recuerda que en esa tarjeta de memoria también están los archivos del sistema operativo. Por defecto la tarjeta trae dos particiones, la que he comentado (que es un Angstrom Linux) y una FAT donde trae unos archivos de manual y drivers para windows y mac. En linux no te hará falta instalar nada.</p>
<p>Bien, ya sabemos que el cacharrito funciona, ahora vamos a hacer algo más divertido. Vamos a conectarnos por consola a nuestro beaglebone y a hozar un poco. Por supuesto también podrías enchufarle un monitor y un teclado pero para conectarle un monitor necesitas una shield (que es carilla) o fabricarla tu mismo.</p>
<p><span id="more-1362"></span>Para nuestra siguiente labor, en Linux tenemos que cargar un módulo a mano ya que no reconoce las uuid (he leído que en futuras versiones esto lo cambiarán). No es grave, lo hacemos con este comando</p>
<pre>sudo modprobe ftdi_sio vendor=0x0403 product=0xa6d0</pre>
<p>Sería un rollo poner esto siempre así que creamos un fichero llamado /etc/udev/rules.d/73-beaglebone.rules con el siguiente contenido</p>
<pre>ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", 
        ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", 
        DRIVER=="", RUN+="/sbin/modprobe -b ftdi_sio"

ACTION=="add", SUBSYSTEM=="drivers", 
        ENV{DEVPATH}=="/bus/usb-serial/drivers/ftdi_sio", 
        ATTR{new_id}="0403 a6d0"

ACTION=="add", KERNEL=="ttyUSB*", 
	ATTRS{interface}=="BeagleBone", 
        ATTRS{bInterfaceNumber}=="00", 
	SYMLINK+="beaglebone-jtag"

ACTION=="add", KERNEL=="ttyUSB*", 
	ATTRS{interface}=="BeagleBone", 
        ATTRS{bInterfaceNumber}=="01", 
	SYMLINK+="beaglebone-serial"</pre>
<p>Ahora cada vez que enchufemos el beaglebone se detectara sin problema. Esto nos creara una interfaz en /dev/ttyUSBX donde X es un numero que depende de los cacharros que tengas conectados. Ahora ya sólo tenemos que conectarnos, para ello uso el comando screen de esta manera:</p>
<p>screen /dev/ttyUSB1 115200</p>
<p>El número 115200 es la velocidad de transmisión (simula un puerto serie). Si todo va bien, veremos algo como la siguiente imagen.</p>
<p><a href="http://www.congdegnu.es/wp-content/uploads/2012/01/consola1.png"><img class="aligncenter size-full wp-image-1365" src="http://www.congdegnu.es/wp-content/uploads/2012/01/consola1.png" alt="" width="565" height="186" /></a></p>
<p>El login por defecto es root y no tiene contraseña. Una vez dentro puedes manejarlo como un Linux cualquiera!</p>
<p>Ya tenemos control absoluto sobre nuestro aparatito. Sí, podríamos escribir programas en C, compilarlos y ejecutarlos (o pyhton o lo que te de la gana, incluso puedes tener tu servidor apache con php y conectarlo a tu LAN por el RJ45) pero vamos a utilizar una herramienta muy interesante que trae que se llama cloud9. Colud9 es un IDE que se ejecuta en un navegador. Está en el beagle bone y desde nuestro navegador accedemos, compilamos y ejecutamos programas. Todo ello sin instalar ningun software en nuestro ordenador y disponible en cualquier momento. Por defecto programaremos con este IDE como si lo haríamos con javascript (la sintaxis) que para quienes los conozcan se llama Node.js.</p>
<p>Como hemos conectado el beagle bone mediante USB, muchos servicios están desativados e incluso el procesador va a menos ciclos (a 500 en vez de 700). El motivo es que el USB no proporciona la energía necesaría. Para tener funcionando a pleno rendimiento tendríamos que usar la entrada de 5V. Pero queremos algo sencillo y que funcione ya así que crearemos una interfaz ethernet a través de USB. Calma, esto ya viene preparado de serie y es muy sencillo de hacer. Tan sólo tienes que desmontar la unidad de almacenamiento (que se llama BONE nosequé) y automáticamente se iniciará eso del ethernet por usb. Ojo, si te pasa como a mi y no se inicia nada después de desmontar la unidad de almacenamiento ejecuta el comando &#8220;eject&#8221; para forzarlo. En mi caso es &#8220;eject /dev/sdh&#8221;. En algunas distribuciones no hace falta, yo uso debian y me llevó un motón de tiempo averiguar por qué narices no funcionaba. Recuerda, si no va usas el comando eject y listo.</p>
<p>Ahora hacemos ifconfig y veremos una interfaz de red nueva. En mi caso se llama eth1 y tiene la IP 192.168.7.1. Esa es la IP que el beagle bone ve. Es una maravilla porque ello sólo se encarga de configurar todo. Si queremos conectarnos al beagle usaremos la dirección ip 192.168.7.2 desde nuestro PC. Si por lo que sea (nunca se sabe) ha cogido otra IP lo que tenemos que hacer es conectarnos por serie al beaglebone (como expliqué antes) y con ifconfig ver qué IP ha cogido. Con esta IP podemos hacer SSH al beagle o lo que queramos, la verdad es que es muy divertido. Ya sea por ssh o por serie nos conectamos al beaglebone y ejecutamos el comando &#8220;cloud9&#8243;. Tras unos segundos veremos el iconito de la nube con un 9 dentro y debajo pone:</p>
<p>&#8220;Project root is: /var/lib/cloud9<br />
Point your browser to http://localhost:3000&#8243;</p>
<p>Ya está listo. Vamos a nuestro navegador y accedemos a http://192.168.7.2:3000/ Cargará el IDE que además viene con unos ejemplos y en concreto uno llamado blink.js. Con este ejemplo haremos parpadear a un LED. Beagle bone cuenta con un chorro de pines de entrada/salida (Ojo que funcionan a 3.3V no a 5V así que ni se te ocurra conectarlo directamente a un arduino o aparatos que usen 5V. Si estás interesado busca sobre level shifter o pregúntame a mi <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p>Los bancos de pines se llaman P8 y P9 (está escrito en un lado). Ese ejemplo usa el pin 3 que está en el banco P8 (bone.P8_3). Si te fijas, en las cuatro esquinas de cada banco aparecen unos numeritos (en caso de P8 pone 2,1   46,45). Eso indica el número del pin. Hay un montón de pines diferentes y para usos diferentes y todo eso viene en la documentación oficial. Para encender un LED conectaremos el polo positivo (patita larga) al pin 3 y el negativo al pin 1 o 2 (son de masa, tierra o ground como quieras llamarlo). Ya sólo nos queda darle a &#8220;Run&#8221; y veremos como se enciende y apaga el LED. Si! Es la cosa más sencilla del mundo pero esto es sólo el principio! A partir de ahora puedes aplicar todos tus conocimientos para crear todo tipo de robots y autómatas!</p>
<p><a href="http://www.congdegnu.es/wp-content/uploads/2012/01/IMG_20120128_1713242.jpg"><img class="aligncenter size-full wp-image-1369" src="http://www.congdegnu.es/wp-content/uploads/2012/01/IMG_20120128_1713242.jpg" alt="" /></a></p>
<p>Por cierto, te recomendaría que apagues el beaglebone antes de desenchufarlo. Si estás habituado al arduino igual tienes la costumbre de desconectar directamente pero recuerda que esto es como tu ordenador., hay que es apagarlo correctamente (con el comando halt por ejemplo) antes de desenchufar. De la misma manera que con tu ordenador normal, si lo desconectas directamente podrías crear incogruencias en el sistema de ficheros o cortar un proceso importante del sistema operativo (de acuerdo, nunca pasa nada pero cuando pasa, pasa)</p>
<p>Por último, una foto con el arduino (si es necesario es hace una comparativa o algo entre ambas máquinas) o si necesitas más detalles o ayuda con el beagle bone tal vez pueda ayudarte.</p>
<p><a href="http://www.congdegnu.es/wp-content/uploads/2012/01/IMG_20120128_1715161.jpg"><img class="aligncenter size-full wp-image-1371" src="http://www.congdegnu.es/wp-content/uploads/2012/01/IMG_20120128_1715161.jpg" alt="" /></a></p>
<p>En mi caso ejecutaré OpenCV en mi robocoche y algun algoritmo más pesado de toma de decisiones (o una red neuronal). Ya os iré contando novedades <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Nos vemos!</p>
<p>Edito par añadir un par de enlaces (en inglés).<br />
Documentación oficial: <cite>beagleboard.org/static/BONESRM_latest.pdf</cite></p>
<p>Guía oficial: http://www.beagleboard.org/static/beaglebone/a3/README.htm</p>
<div class="shr-publisher-1362"></div>

<p>Entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2012/01/28/beaglebone-primeros-pasos/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Haz que tu sistema de ficheros &#8220;vuele&#8221; montándolo en la RAM</title>
		<link>http://www.congdegnu.es/2011/10/08/haz-que-tu-sistema-de-ficheros-vuele-montandolo-en-la-ram/</link>
		<comments>http://www.congdegnu.es/2011/10/08/haz-que-tu-sistema-de-ficheros-vuele-montandolo-en-la-ram/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 12:07:58 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[disco]]></category>
		<category><![CDATA[disco duro]]></category>
		<category><![CDATA[memoria]]></category>
		<category><![CDATA[ram]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1347</guid>
		<description><![CDATA[Hoy seré breve, o por lo menos lo intentaré. El caso es que necesitaba acceso masivo al disco duro para un procesamiento en lote de archivos de texto bastante grandes (quien me siga en twitter verá que el otro día lo mencioné ). El proble ma no eran los archivos en sí mismos ya que [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy seré breve, o por lo menos lo intentaré. El caso es que necesitaba acceso masivo al disco duro para un procesamiento en lote de archivos de texto bastante grandes (quien me siga en twitter verá que el otro día lo mencioné <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p><div class="wp-caption alignright" style="width: 168px"><img src="http://brico-garden.com/Hormigonera.jpg" alt="Hormigonera" width="158" height="161" /><p class="wp-caption-text">El ruido del disco duro era semejante al de esta maquina mezclando hormigón</p></div></p>
<p>El proble ma no eran los archivos en sí mismos ya que mediante buffers que gestiona el propios sistema operativo se consigue un rendimiento excelente, sino por la base de datos mysql. En mi caso, hacía currar a la base de datos de tal manera (con updates, inserts y selects constantes) que el disco duro parecía una hormigonera. Después de estimar el tiempo total de procesamiento en 6 horas pensé que eso le iba a hacer mucha pupa al disco duro duro (además del evidente cuello de botella) y que había que hacer algo. Entonces me dije: &#8220;Quiero almacenar los datos en algo que no haga ruido y si es posible que sea rápido&#8221; y eso amigos, es precisamente la memoria RAM. Así que vamos al tema.</p>
<p><span id="more-1347"></span>Lo bueno de usar este método es que no tienes que tocar nada ni de mysql ni de tu programa, ya que para ellos será un dispositivo de almacenamiento estándar. Ahora prepárate un café porque esto va a ser complicado.</p>
<pre>            mount -t tmpfs none /media/ramdisk</pre>
<p>Ya está, ahora tienes en el directorio /media/ramdisk montada tu memoria RAM. Por supuesto, se reserva sólo una parte ya que el sistema necesita disponer de memoria para funcionar.<br />
En mi caso, copié /var/lib/mysql a /media/ramdisk y luego un enlace simbólico para que mysql accediera a ello sin configurar nada.<br />
Si quieres saber exactamente cuanto espacio tienes puedes usar el comando:</p>
<pre>            df -h</pre>
<p>Te mostrará algo como esta línea (junto al resto de sistemas de ficheros montados)</p>
<pre>            none                  1,7G  384M  1,3G  24% /media/ramdisk</pre>
<p>Dispongo de 1,7GigaBytes de almacenamiento en memoria RAM (384 megas usados). Recueda que <strong>es muy importante</strong> guadar luego esos archivos en tu disco duro porque la memoria RAM no es  persistente y todo lo que haya se volatilizará cuando se demonte. En mi caso el tiempo de  ejecución del programa paso de unas 6 horas a poco más de 45 minutos, y  eso que mi memoria es lenta (667mhz) además de no hacer ningún ruido. Para casos o situaciones  concretas este método puede sernos muy útil, incluso he visto casos de  un servidor donde hasta los archivos estáticos (css, js, imagenes&#8230;)  estaban cargados en memoria. Si tenemos en cuenta que en un ordenador <strong>todo</strong> pasa por la memoria y que el disco duro es con diferencia el  dispositivo más lento (y delicado), se pueden obtener tiempos muy buenos  en sistemas críticos (ej. una web con millones de visitas). El problema  está cuando trabajamos con datos (que pueden cambiar, algo bastante común) y que nunca  estarán a salvo hasta que lo volquemos a un disco duro. Para esos casos ya existen las cachés que en el fondo es copiar en memoria aquellas cosas de sólo lectura mientras mientras que los cambios se guardan al momento y posteriormente se actualiza esa caché.</p>
<div class="shr-publisher-1347"></div>

<p>Entradas relacionadas:<ol><li><a href='http://www.congdegnu.es/2009/03/11/borra-tus-ficheros-de-manera-definitiva/' rel='bookmark' title='Permanent Link: Borra tus ficheros de manera definitiva'>Borra tus ficheros de manera definitiva</a> <small>Muchos somos conscientes de que borrar un archivo no implica...</small></li>
<li><a href='http://www.congdegnu.es/2009/02/08/eliminar-espacio-reservado-en-ext/' rel='bookmark' title='Permanent Link: Eliminar espacio reservado en ext'>Eliminar espacio reservado en ext</a> <small>Cuando formateamos una unidad en el sistema de ficheros ext,...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2011/10/08/haz-que-tu-sistema-de-ficheros-vuele-montandolo-en-la-ram/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Juega a tu Nintendo 64 con tu mando de la Wii y arduino</title>
		<link>http://www.congdegnu.es/2011/08/29/juega-a-tu-nintendo-64-wiimote-arduino/</link>
		<comments>http://www.congdegnu.es/2011/08/29/juega-a-tu-nintendo-64-wiimote-arduino/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 15:49:27 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[Guias y manuales]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[n64]]></category>
		<category><![CDATA[nintendo]]></category>
		<category><![CDATA[ocarina of time]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[zelda]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1312</guid>
		<description><![CDATA[¿Alguna vez has pensado cómo sería jugar a tu juego favorito de tu nintendo 64 con un wiimote? Yo sí, quería dar espadazos con Link en Ocarina of Time y con la ayuda de mi querido arduino he podido cumplirlo!. Se que podría haber usado un emulador pero&#8230; donde queda el romanticismo? Antes de nada, [...]]]></description>
			<content:encoded><![CDATA[<p>¿Alguna vez has pensado cómo sería jugar a tu juego favorito de tu nintendo 64 con un wiimote? Yo sí, quería dar espadazos con Link en Ocarina of Time y con la ayuda de mi querido arduino he podido cumplirlo!. Se que podría haber usado un emulador pero&#8230; donde queda el romanticismo? <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Antes de nada, os pongo un vídeo del resultado.</p>
<p><p><a href="http://www.youtube.com/watch?v=HBf7m3zylcA"><img src="http://img.youtube.com/vi/HBf7m3zylcA/2.jpg"></a></p>
<p><a href="http://www.youtube.com/watch?v=HBf7m3zylcA">Click here</a> to view the video on YouTube.</p>
</p>
<p>&nbsp;</p>
<p>Sí, ese es el menda jugando. ¿Te interesa saber cómo puedes hacerlo? Si es así sigue leyendo, de lo contrario sólo perderás tu tiempo.<span id="more-1312"></span></p>
<p>Lo primero y antes de nada tengo que decir que mi código del arduino es una vil copia del proyecto <a title="Gamecube to N64" href="https://github.com/brownan/Gamecube-N64-Controller">Gamecube-N64-Controller</a>. Ese proyecto permite jugar a la nintendo 64 con un mando de la gamecube. De ahí básicamente saqué el protocolo de comunicación y las funciones para &#8220;dialogar&#8221; con la n64 (que ya es bastante!!).</p>
<p>También tengo que aclarar que jugar con el wiimote es bastante más complicado. El stick del nunchuk es bastante mediocre comparado con el joystick de la nintendo 64 (para mi uno de los mejores que han existido), de ahí mi manqueo a la hora de apuntar a ganondorf con el arco. El segundo motivo es que el juego está preparado para responder a una única pulsación, entonces responderá sólo cuando hayamos terminado el movimiento lo cual implica movimientos &#8220;retardados&#8221;. Es mucho más rápido pulsar un botón que hacer el gesto del movimiento de la espada.</p>
<p>Ahora voy a explicar más o menos como funciona la cosa. Tenemos un mando de la wii con nunchuk y queremos jugar a la nintendo 64. El primer problema que se nos plantea es que el mando de la n64 va por cable mientras que el wiimote es inalámbrico. Mi solución ha sido usar el ordenador como pasarela: el wiimote se conecta al ordenador por bluetooth y luego el ordenador mediante usb al arduino, quien simula ser un mando de n64. Si quieres hacer algo más profesional siempre puedes usar el módulo bluetooth para arduino y desarrollar una biblioteca de comunicación. Llegados a este punto vemos que necesitamos dos programas, uno para el arduino y otro para el ordenador. Vamos a ello.</p>
<h2>Software para arduino</h2>
<p>Nuestro arduino va a ser simplemente un enlace sin ningún tipo de lógica. Nosotros le enviamos los datos y directamente se lo sirve a la consola sin nada de procesamiento (en el proyecto de gamecube que mencioné antes, el arduino realiza las operaciones necesarias para convertir los comandos). El motivo es para que sea más práctico, así sólo es necesario modificar le programa de ordenador si queremos hacer cualquier cambio. La función loop del programa arduino se ha reducido bastante, ya que al recibir los datos preparaditos para enviar no tiene que hacer más que eso (recibir datos del ordenador por el puerto serie y tal cual mandarlos a la consola).</p>
<p>&nbsp;</p>
<h2>Software para ordenador</h2>
<p>Utilizo la biblioteca cwiid desde python y en principio es multiplataforma (aunque sólo lo he probado en Linux). Doy por supuesto que tienes un dispositivo bluetooth funcionando y el software de arduino instalado. Este programa python también es sencillo. Lo que hace es conectarse al mando de la wii (usando cwiid), obtener las pulsaciones de botones y mandarlas al arduino. La verdad es que, sabiendo el protocolo del mando es muy sencillo pero llegar a manejar bien un protocolo cerrado de esos es un infierno. Voy a tratar de explicar (sin detalles técnicos) un poco como funciona.</p>
<h3>Funcionamiento del mando de nintendo 64</h3>
<p>La consola puede mandar 4 tipos de comandos diferentes al mando. Estos son de identificación, de estado, de lectura y de escritura. Los dos últimos, hasta lo que yo se (recordemos que es un protocolo cerrado y vete tu a saber que más cosas hace) es para gestionar el rumble pack (un aparato que hace al mando vibrar). Cuando encendemos la consola, ésta manda el comando de identificación al que los mandos conectados (en nuestro caso el arduino) y éstos deben responder. Si no, la consola nos mostrará un bonito &#8220;NO CONTROLLER&#8221;. Por último, la consola nos manda el comando de estado cuando necesita saber que botones estamos pulsando. Cuando la consola nos pregunte por el estado nosotros respondemos. Al contrario de lo que mucha gente pueda pensar, no es el mando quien manda información todo el rato a la consola, sino que es la consola quién pregunta al mando todo el rato que botones hay pulsados. Nuestra labor va a ser que cuando la consola pregunte por esa información el arduino se la entregue.</p>
<p>Ahora veamos qué información es la que mandamos. El paquete con toda la información sobre el estado del mando (los botones pulsados) son 4 Bytes. De estos 4 Bytes, los dos primeros expresan el estado de los botones y los dos últimos la posición del joystick. Para el caso de los botones es bien sencillo, bit a 1 boton pulstado y bit a 0 boton no pulsado. De esta manera con 2 Bytes podemos representar 16 botones y como la consola tiene 14 pues incluso son sobran 2 bits. El contenido exacto de los bytes es este:</p>
<p>Byte 1: A, B, Z, Start, PadArriba, PadAbajo, PadIzquierda, PadDerecha</p>
<p>Entonces si tenemos pulsado el botón A, el primer byte será: 1 0 0 0 0 0 0 0, si pulsamos A y Z será: 1 0 1 0 0 0 0 0. Sencillo de entender, verdad?<br />
El segundo byte contiene: 0, 0, BotonL, BotonR, C-Arriba, C-Debajo, C-Izquierda, C-derecha<br />
Como dije antes nos sobran dos bits, que son esos dos primero bits que siempre valen 0.</p>
<p>Por último nos quedan los bytes para el joystick, el byte 3 contiene la posición X y el byte 4 la posición Y. Para representarlo se utiliza un byte con signo más o menos desde -80 a 80. Esto es muy importante ya que cuando mandemos la información en binario hay que tener muy claro lo que mandamos para que todo funcione bien y de manera sencilla (por eso en el programa python, al empaquetar los bytes los primero con con <strong>B</strong>, unsigned char, y los dos último son <strong>b</strong>, signed char). Nosotros generaremos ese paquete de 4Bytes y por el puerto serie se lo mandaremos al arduino.</p>
<p>Ya conocemos la teoría así que a programar. Yo he elegido python pero puedes usar el que te de la gana siempre y cuando generes bien esos 4 Bytes. El programa de arduino te servirá igual.</p>
<h2>Obtener el código fuente</h2>
<p>El código fuente lo he subido a github y por supuesto con licencia GPL. Puedes clonarlo usando esta dirección <a title="Video" href="https://github.com/maxpowel/Wii-N64-Controller" target="_blank">https://github.com/maxpowel/Wii-N64-Controller</a><br />
Si ves algun fallo o quieres compartir una configuración de botones (sobretodo es interesante el tema del acelerómetro del wiiomte) te agradecería que me hicieras un pull request <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<h2>Montaje</h2>
<p>Material:</p>
<ul>
<li>Arduino (y su cable USB)</li>
<li>2 Cablecitos</li>
<li>Nintendo 64</li>
<li>Ordenador</li>
<li>Bluetooth</li>
</ul>
<p>Supongo que no tendrás problemas para conectar tu arduino y bluetooth a tu PC. El siguiente paso es conectar el cable de tierra de la conexión del mando a un pin de tierra del arduino usando uno de los cablecitos. El otro cable es para unir el pin 8 (puedes usar el pin que quieras, pero en el código uso el 8 ) con el de datos de la consola. El esquema de pines del mando es el siguiente:</p>
<ol>
<li>+3.3V &#8211; Alimentación. No lo usamos ya que el arduino tiene su propia alimentación.</li>
<li>Datos &#8211; Conectado con el pin digital 8</li>
<li>GND &#8211; Conectado a un pin de tierra de arduino</li>
</ol>
<p><strong>Nota:</strong> Recuerda que este es el esquema del <strong>mando</strong> y el de la consola quedará espejado (mirando de frente a la consola se usan los dos pines de la derecha). Espero no haberte líado con esto</p>
<p><img class="alignnone" src="https://github.com/maxpowel/Wii-N64-Controller/raw/master/connections.png" alt="" width="136" height="151" /></p>
<p>Como nota, decir que siempre hay que encender primero el arduino antes que la consola ya que de otra manera no detectará ningún mando. Recuerda lo que dije antes de que la consola cuando se enciende &#8220;pregunta&#8221; a los mandos para ver qué hay conectado.</p>
<p>Para terminar un pequeño vídeo de como tengo montado el tinglao.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><p><a href="http://www.youtube.com/watch?v=1a5wc_V0vO0"><img src="http://img.youtube.com/vi/1a5wc_V0vO0/2.jpg"></a></p>
<p><a href="http://www.youtube.com/watch?v=1a5wc_V0vO0">Click here</a> to view the video on YouTube.</p>
</p>
<div class="shr-publisher-1312"></div>

<p>Entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2011/08/29/juega-a-tu-nintendo-64-wiimote-arduino/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>ArchLinux pasa de ATI Catalyst</title>
		<link>http://www.congdegnu.es/2009/03/10/archlinux-pasa-de-ati-catalyst/</link>
		<comments>http://www.congdegnu.es/2009/03/10/archlinux-pasa-de-ati-catalyst/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 21:51:00 +0000</pubDate>
		<dc:creator>DiCrEn</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[amd]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[ati]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[radeonhd]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=792</guid>
		<description><![CDATA[Todos los que lo hemos sufrido a ATI en GNU/Linux sabemos que los drivers privativos de AMD dejan muchísimo que desear. Tanto es asi, que Andreas Radke, mantenedor de este driver en los repositorios extra de ArchLinux, ha decidido dejar el mantenimiento a manos de la comunidad, es decir, pasarlo a AUR. Por otro lado, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-793" title="archlinux" src="http://www.congdegnu.es/wp-content/uploads/2009/03/archlinux.png" alt="archlinux" width="132" height="110" /><img class="alignleft size-full wp-image-794" title="ati_logo" src="http://www.congdegnu.es/wp-content/uploads/2009/03/ati_logo.jpg" alt="ati_logo" width="104" height="104" /> Todos los que lo hemos sufrido a ATI en GNU/Linux sabemos que los drivers privativos de AMD dejan muchísimo que desear. Tanto es asi, que Andreas Radke, mantenedor de este driver en los repositorios extra de ArchLinux, ha decidido dejar el mantenimiento a manos de la comunidad, es decir, pasarlo a <a href="http://aur.archlinux.org/index.php?setlang=es">AUR</a>.</p>
<p>Por otro lado, la nueva versión de xorg-server, 1.6 ya esta disponible en los repositorios testing, y si, lo has descubierto, no es compatible aún con ATI, al menos, con los drivers privativos. Sin embargo de nvidia ya tiene soporte.</p>
<blockquote><p>“Los controladores Catalyst de ATI se encuentran en un estado lamentable y AMD no esta haciendo nada para mejorar la situación, que parece que se toman a linux como una broma. Al menos esta es la impresion que uno obtiene cuando se fija en el desarrollo de los drivers privados de Nvidia.”</p></blockquote>
<p>Parece que los drivers libres <a href="http://www.radeonhd.org/">radeonHD</a>, aun con la poca documentación que ha publicado AMD funcionan bastante bien, yo los tengo usando un un PC y no tengo ninguna queja, el rendimiento no es optimo, pero si que trabaja con soltura.</p>
<p>A si que, si usas ArchLinux, o cualquier distribución vaya a instalar el xorg-server 1.6 y usas ATI estate al tanto de las actualizaciones, a ver si te vas a quedar sin sistema gráfico.</p>
<p>Via | <a href="http://forhaud.wordpress.com/2009/03/04/arch-linux-dejara-de-dar-soporte-a-los-catalyst/">Forhaud</a></p>
<div class="shr-publisher-792"></div>

<p>Entradas relacionadas:<ol><li><a href='http://www.congdegnu.es/2009/03/30/ati-mejora-un-poquito-sus-drivers/' rel='bookmark' title='Permanent Link: ATI mejora un poquito sus drivers'>ATI mejora un poquito sus drivers</a> <small>Todos sabemos que los drivers para Linux de AMD/ATI apestan,...</small></li>
<li><a href='http://www.congdegnu.es/2009/02/18/nueva-imagen-de-archlinux-disponible/' rel='bookmark' title='Permanent Link: Nueva imagen de Archlinux disponible'>Nueva imagen de Archlinux disponible</a> <small>La versión de Arch 2009.02 ya se encuentra disponible para...</small></li>
<li><a href='http://www.congdegnu.es/2009/01/22/rankmirrors-optimizar-repositorios-en-archlinux/' rel='bookmark' title='Permanent Link: rankmirrors: Optimizar repositorios en ArchLinux'>rankmirrors: Optimizar repositorios en ArchLinux</a> <small>¿Cuantas veces has ido a instalar algún programa de los...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2009/03/10/archlinux-pasa-de-ati-catalyst/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Arte del siglo XXI</title>
		<link>http://www.congdegnu.es/2009/02/28/arte-del-siglo-xxi/</link>
		<comments>http://www.congdegnu.es/2009/02/28/arte-del-siglo-xxi/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 18:32:15 +0000</pubDate>
		<dc:creator>DiCrEn</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[modding]]></category>
		<category><![CDATA[pc]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=748</guid>
		<description><![CDATA[Según Wikipedia, el modding es el arte o técnica de modificar estética o funcionalmente partes de un ordenador. Hay algunos mas logrados que otros, con mayor o menor fortuna, pero en algunas ocasiones son un gran placer para la vista. En Million Dollar PC, se recopilan muchas de estas maravillas, ademas, con una muy buena [...]]]></description>
			<content:encoded><![CDATA[<p>Según Wikipedia, el <strong>modding </strong>es el arte o técnica de modificar estética o funcionalmente partes de un ordenador. Hay algunos mas logrados que otros, con mayor o menor fortuna, pero en algunas ocasiones son un gran placer para la vista.</p>
<p>En <a href="http://www.million-dollar-pc.com/" target="_blank"><strong>Million Dollar PC</strong></a>, se recopilan muchas de estas maravillas, ademas, con una muy buena calidad fotografica (puedes encontrar una pequeña guia de como hacer las fotos en la misma web)</p>
<p>Para los que nos dedicamos de vez en cuando a modificar nuestro PC (llevo tiempo sin hacer nada por falta de tiempo y dinero, pero algun dia volvere) estas imagenes son una muestra de lo que se puede llegar a hacer&#8230; pero que, al menos en mi caso, nunca llegare a hacer <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>A continuación pongo alguna de las fotos que mas me han gustado, podeis encontrar muchas mas en la web.</p>
<p>Via | <a href="http://www.soygik.com/million-dollar-pc-verdaderos-arquitectos-disenadores-de-pcs/">Soygik</a></p>
<p>&#8230;<a href="http://www.soygik.com/million-dollar-pc-verdaderos-arquitectos-disenadores-de-pcs/"><span id="more-748"></span></a></p>
<p><div id="attachment_749" class="wp-caption aligncenter" style="width: 552px"><a href="http://www.soygik.com/million-dollar-pc-verdaderos-arquitectos-disenadores-de-pcs/"><img class="size-full wp-image-749" title="bill-owen-01" src="http://www.congdegnu.es/wp-content/uploads/2009/02/bill-owen-01.jpg" alt="Transformers!" width="542" height="380" /></a><p class="wp-caption-text">Transformers!</p></div></p>
<p><div id="attachment_751" class="wp-caption aligncenter" style="width: 571px"><a href="http://www.soygik.com/million-dollar-pc-verdaderos-arquitectos-disenadores-de-pcs/"><img class="size-full wp-image-751" title="losmile05" src="http://www.congdegnu.es/wp-content/uploads/2009/02/losmile05.jpg" alt="Bonita foto" width="561" height="743" /></a><p class="wp-caption-text">Bonita foto</p></div></p>
<p><div id="attachment_750" class="wp-caption aligncenter" style="width: 573px"><img class="size-full wp-image-750" title="gianluca-33" src="http://www.congdegnu.es/wp-content/uploads/2009/02/gianluca-33.jpg" alt="No, no es una nave espacial" width="563" height="405" /><p class="wp-caption-text">No, no es una nave espacial</p></div></p>
<p style="text-align: center;">
<div class="shr-publisher-748"></div>

<p>Entradas relacionadas:<ol><li><a href='http://www.congdegnu.es/2009/03/18/ya-estan-aqui-las-pegatinas-de-gpodcast/' rel='bookmark' title='Permanent Link: Ya estan aquí! Las pegatinas de GPodcast!'>Ya estan aquí! Las pegatinas de GPodcast!</a> <small>EDIT: Entrada numero 100! Ante todo disculpad la tardanza en...</small></li>
<li><a href='http://www.congdegnu.es/2009/02/14/palabras-clave-en-firefox/' rel='bookmark' title='Permanent Link: Palabras clave en firefox'>Palabras clave en firefox</a> <small>Hablamos de esto en el podcast, y algún amigo me...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2009/02/28/arte-del-siglo-xxi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

