<?xml version="1.0" encoding="windows-1252"?>
	
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> 
        <channel> 
            <title><![CDATA[Diseño Industrial | Jesus de la Torre]]></title> 
            <link><![CDATA[http://www.jesusdelatorre.com]]></link> 
            <language>es-es</language> 
            <description><![CDATA[Diseño Industrial | Jesus de la Torre]]></description> 
            <generator>Autor del RSS</generator> 
            <copyright><![CDATA[Jesus de la Torre(C)2003-2012]]></copyright>
            <atom:link href="http://www.jesusdelatorre.com/rss.php" rel="self" type="application/rss+xml" />
            <ttl>15</ttl>
            <image>
                <url>http://www.jesusdelatorre.com/logo.png</url>
                <title>Diseño Industrial | Jesus de la Torre</title>
                <link>http://www.jesusdelatorre.com</link>
            </image><item><title><![CDATA[Cedido el Scanner 3D e inicio de su viaje a excavación en Egipto]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=39]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top><img src="multimedia/images/egipto.jpg"></td>
<td width="10px"></td>
<td>Desde el próximo día 9 de enero hasta el 3 de marzo, la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a> llevará a cabo su cuarta campaña de excavación en la necrópolis de los nobles de <b>Asuán</b> (<i>Egipto</i>), bajo la dirección del profesor del Área de Historia Antigua, <b>Alejandro Jiménez Serrano</b>. Este año la campaña se desarrollará durante siete semanas y en ella participarán diecisiete investigadores, la mayor parte de ellos de la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a>.
</td></tr></table>

Según explica el director de las excavaciones, las convulsiones políticas que ha sufrido Egipto durante el último año han hecho peligrar la presencia de los investigadores de la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a>, pero el nuevo clima democrático permite augurar una situación estable y supone un compromiso de la institución jiennense en la defensa y conservación del patrimonio egipcio. En este sentido, <b>Alejandro Jiménez</b> afirma que, de hecho, el proyecto de la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a> <u>es uno de los más importantes que desarrolla España en el país de los faraones, tal y como lo demuestra el hecho de tratarse de un proyecto de I+D+i Nacional</u>, contar con las subvenciones de la <b>Dirección General de Bellas Artes y Bienes Culturales</b> y la colaboración desinteresada de empresas e instituciones privadas, entre las que destaca la <b>Fundación Qubbet el-Hawa</b>.
<br><br>

Este año, aparte de continuar con los trabajos de excavación y conservación, el equipo de la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a> va a experimentar una nueva tecnología en 3D, gracias a la desinteresada colaboración del <b>Estudio de Ingeniería de Jesús de la Torre</b>, que ha provisto al proyecto con un escáner de última generación. Esta nueva tecnología se va a utilizar en la documentación de inscripciones jeroglíficas y de restos materiales hallados en la excavación, de tal forma que la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a> se situará en la vanguardia de la utilización de nuevas tecnologías aplicadas a las ciencias humanas.
<br><br>

Desde el año 2008, la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a> lleva a cabo un ambicioso proyecto de investigación en una de las necrópolis más importantes de Egipto. Allí, desde la <b>VI Dinastía (2250 a. C.)</b> se enterraron los más altos funcionarios de la provincia más meridional de Egipto. Dada la situación estratégica de la zona, sus responsabilidades en las relaciones con el Desierto Oriental, las rutas de comunicación con el Desierto Occidental y, sobre todo, los contactos con Nubia, permitieron a estos nobles jugar en muchos momentos papeles decisivos en las relaciones internacionales y comerciales de Egipto. Además, la zona era rica en afloramientos de diversas rocas de gran calidad que eran demandadas por la corte para la realización de estatuas y otras construcciones, por lo que también se encargaron de gestionar el avituallamiento de las expediciones y de los canteros.
<br><br>

Por lo que conoce el equipo de la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a> hasta el momento, según explica <b>Alejandro Jiménez</b>, la necrópolis fue utilizada ininterrumpidamente desde la VI Dinastía hasta finales de la XII Dinastía (1800 a. C.), si bien hay tumbas y enterramientos de periodos posteriores. <b>Qubbet el-Hawa</b> destaca sobre todo por la cantidad y calidad de las biografías de los personajes enterrados. Cualquier visitante puede encontrarse con los textos inscritos en las tumbas de <b>Herjuf, Pepi-Najt Heqa-ib I, Sabni I, Sabni II, Sarenput I y Sarenput II</b>, sólo por citar algunos de los más conocidos.
<br><br>

Los trabajos de investigación del proyecto <b>Qubbet el-Hawa</b> se han centrado por el momento en tres tumbas: nº 33, nº34 y nº 34h. En las dos primeras, se están llevando labores de excavación arqueológica, mientras que la última está siendo consolidada antes de ser restaurada. Las tumbas nº 33 y 34 datan de la segunda mitad de la XII Dinastía. En 2009 se pudo determinar que el hipogeo nº 33 en realidad estaba precedido por el mayor complejo funerario exterior por el momento localizado en la necrópolis. Dentro del recinto, fue construida la tumba 34, lo que quizá pueda interpretarse como una relación de parentesco entre aquellos enterrados en la misma zona. En este sentido, el director de las excavaciones espera que futuros hallazgos puedan confirmar esta hipótesis, porque "lamentablemente, por el momento no se ha podido determinar quiénes eran los ocupantes de algunas tumbas, en el caso de la 34, debido seguramente a la acción de los saqueadores en la antigüedad y a las posteriores excavaciones llevadas a cabo desde finales del siglo XIX”.
<br><br>

Sin embargo, la tumba 33 augura mejores resultados, ya que todavía no se ha llegado a los niveles del Reino Medio. Y es que después de tres campañas de excavación, dos de ellas en el interior del hipogeo, sólo se han retirado los niveles posteriores al Reino Medio. Por lo que se ha podido comprobar hasta el momento, poco después de que se enterrara el noble que mandó construir la tumba nº 33, el interior de la sepultura fue invadida por una lengua de tierra que cubrió todo el interior. Sobre esa superficie de arena, durante el reinado de Tutmosis III (1450 a. C.) fueron depositados un gran número de cadáveres, algunos de ellos guardados en ataúdes de madera. Unos quinientos años más tarde, fueron enterrados aún más individuos. Finalmente, en el siglo VI a. C., se introdujeron los últimos cuerpos, algunos de ellos en sarcófagos de arenisca. Es muy posible que poco después entrasen en la tumba saqueadores que destrozaron todos los enterramientos y terminaron quemando los restos orgánicos. El incendio tuvo que provocar tan altas temperaturas en el interior que el nicho que preside la cámara de culto y que, originalmente, tenía una decoración esbozada sobre el yeso, se destruyó casi en su totalidad.
<br><br>

<b>Alejandro Jiménez</b> comenta que los saqueadores pasaron por alto algunas cámaras del interior que proporcionarán una gran información al equipo investigador y que por el momento no se pueden detallar hasta que las autoridades egipcias lo permitan. “Sin embargo, continúa la incógnita de quién fue el personaje que construyó la tumba. Lo único que se tiene claro es que vivió en una época muy cercana al gobernador Sarenput II. Uno de los objetivos para la campaña de este año es solucionar esta incógnita”, declara el profesor del Área de Historia Antigua de la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a>.
<br><br>

Una de las herramientas básicas para conocer quiénes fueron las personas enterradas en el complejo funerario de las tumbas 33 y 34 será la excavación de una cámara intacta hallada en el exterior de la tumba 34 durante la campaña de 2009 y de la que por el momento sólo se sabe que estuvo ocupada por un tal Sarenput (diferente a los ya conocidos). El ataúd, originalmente una obra maestra, está en muy malas condiciones debido a la termita, por lo que la labor de las restauradoras será esencial para evitar mayores pérdidas que información. En la tumba 33 se espera llegar a los niveles más antiguos (Dinastía XII), y sobre todo, acceder al pozo de más de diez metros de profundidad que fue inspeccionado con video en 2008 y donde originalmente pudo estar enterrado el noble que ordenó construir la tumba. En la tumba QH34h, en la que fue enterrado Khunes (finales del reinado de Pepy II, 2150 a. C.), se continuarán los trabajos de consolidación en la parte superior de los pilares y en el techo.
<br><br>

Los trabajos arqueológicos del equipo de investigadores de la <a href="http://www.ujaen.es" target=new">Universidad de Jaén</a> en Egipto podrán consultarse diariamente en Internet en la dirección web del proyecto <a href="http://www.qubbetelhawa.es" target=new">www.qubbetelhawa.es</a>.]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=39]]></guid><pubDate><![CDATA[Thu, 05 Jan 2012 10:54:09 +0100]]></pubDate></item><item><title><![CDATA[Actualizando MaxFlight VR2002 a un Simulador de Vuelo]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=38]]></link><description><![CDATA[Hace algún tiempo adquirí un MaxFlight VR2002 a una cadena de centros de ocio española y, aunque mi idea inicial era instalarlo durante aquellas navidades en una gran superficie comercial o en un parque infantil, en el momento de asistir al desmontaje donde lo guardaban sus anteriores propietarios, observé que tenía graves deficiencias de instalación y montaje. Al principio, creía que eran producto de diferentes ventas y consiguientes transportes lo que habían deteriorado completamente todo el simulador, pero ahora que llevo unos días barajando la posibilidad de ponerlo en marcha y estudiando su estado, he observado que sus deficiencias  se deben, principalmente, a que se trata de un aparato diseñado y fabricado en el <i>año 2.000</i>, pero que además arrastra errores de diseño que hoy harían que este <a href="http://www.maxflight.com/" target=new>MaxFlight VR2002</a> no pudiera ser abierto al público bajo ningún concepto.
<br><br>

<center>
<iframe width="420" height="315" src="http://www.youtube.com/embed/McNyAStAbgw" frameborder="0" allowfullscreen></iframe>
</center>
<br>

Los anteriores dueños no me suministraron ningún tipo de información técnica, ni CDs con software ni nada semejante, y cuando me puse en contacto con el fabricante, tampoco me prestó mucha atención. Todo el simulador es controlado por un ordenador central que tiene instalado <i>Windows 2000</i> y que proyecta una única película con temática de montaña rusa futurista que está dividida, físicamente en el disco duro, en diferentes segmentos de video en formato <i>.MPG</i> y que el software une en el momento de la proyección para conformar una película completa... Demoledor. Mi objetivo, todo un reto, es permitir que este <a href="http://www.maxflight.com/" target=new>MaxFlight VR2002</a> pueda mostrar cualquier contenido de video que necesite de un movimiento de 360º en <i>ROLL</i> y <i>PITCH</i> y en una etapa posterior, convertirlo en un simulador de vuelo "serio".
<br><br>

<center>
<table border="0">
<tr>
<td><img src="http://www.jesusdelatorre.net/multimedia/images/mflight01.jpg" border="1" alt="" width="208" height="156" /></td>
<td><img src="http://www.jesusdelatorre.net/multimedia/images/mflight02.jpg" border="1" alt="" width="208" height="156" /></td>
</tr>
</table>
</center><br>

Como comentaba más arriba, no tengo absolutamente ninguna documentación, lo que complicará sin duda mi objetivo, pero allá vamos: 
<br><br>

Si nos centramos en el ordenador de control observamos que, además del sistema de video <i>VGA</i>, sonido y demás componentes típicos de un ordenador convencional, llaman la atención dos hechos: hay un convertidor <i>RS232-RS485</i> conectado al puerto <b>COM1:</b> y una tarjeta para <i>Bus ISA</i> del fabricante <a href="http://www.servomotive.com" target=new>Servomotive</a> (<b>Modelo MC-3628</b>) cuya hoja de características pude conseguir en su web y está para su descarga a la derecha de este post. Por otro lado, el convertidor <i>RS232-RS485</i> suministra una salida en conector <a hre="http://es.wikipedia.org/wiki/RJ-45" target=new>RJ45</a> que va hasta una caja de mecanismos metálica enorme en una de las columnas verticales del simulador. En su interior hay tres inversores <a href="http://www.mitsubishi.com/" target=new>Mitsubishi</a> <b>FR-A540</b> (al menos hay algo medianamente actual) controlados por RS485 y diferentes componentes eléctricos de protección y control que veremos después.
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><a href="javascript: zoom('multimedia/images/maxflight01.jpg')"><img src="multimedia/images/maxflight01.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
<td><a href="javascript: zoom('multimedia/images/maxflight02.jpg')"><img src="multimedia/images/maxflight02.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
</tr>
</tbody></table>
</center>
<br>

Intuyo que la tarjeta conectada al <i>Bus ISA</i>, y que <i>Windows 2000</i> detecta a la perfección, no hace ninguna comprobación de que posee conectados los diferentes componentes del simulador, que en este momento se encuentra en un almacén a unos 2 Kms de donde estoy realizando todas estas comprobaciones. Mi intuición se basa (puede que esté equivocado) en que no hay ningún enlace de datos desde la placa <i>ISA</i> hasta el simulador, sólo tiene conectados <i>encoders</i> que informan de la posición del simulador y pulsadores que hacen las veces de finales de carrera para detectar las distancias tope del movimiento del simulador.
<br><br>

En este momento sólo me interesa conocer qué datos transmite el ordenador de control al simulador (proceso de <i>Setup</i> del simulador) cuando arranca el software y no cuando está en movimiento. Esto me ayudará a estudiar esa configuración y usarla posteriormente en mi propio software. Me centraré en la información que sale por el <b>COM1:</b> y que transmite a los inversores de frecuencia en la caja de registro gigantesca los datos de movimiento...
<br><br>

En el próximo post escucharemos qué información transmite el software del ordenador de control hasta los inversores para poner en marcha el simulador <a href="http://www.maxflight.com/" target=new>MaxFlight VR2002</a>.
<br><br>
]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=38]]></guid><pubDate><![CDATA[Sun, 20 Nov 2011 17:20:59 +0100]]></pubDate></item><item><title><![CDATA[Construye tu propio MotoGP Simulator]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=37]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top>
<br><img src="multimedia/images/manxtt.png" alt="Manx TT Twin"></td>
<td width=3%></td>
<td>Existe un buen número de aficionados a los simuladores de motociclismo y alguno de ellos, en varias ocasiones, me ha preguntado si existe una manera sencilla y barata de tener un simulador de motocicletas más o menos real, que les permita tumbarse en las curvas, acelerar, frenar y vivir la experiencia de forma semejante a los simuladores en máquinas recreativas que pueden encontrar en un salón de juegos en una gran superficie.  Cuando diseñé <a href="http://www.jesusdelatorre.com/showpost.php?postID=26">Marlboro MotoGP Simulator</a>, tuve oportunidad de conocer a fondo cómo <a href="http://www.segaarcade.com/" target=new>SEGA</a>, en su recreativa <b>Manx TT</b>, había resuelto de forma sencilla y efectiva muchos de los posibles problemas de un simulador así.</td>
</tr></table>

De forma bastante lógica, habían pensado en el simulador como un joystick gigante (<i>la moto completa</i>) que era accionado por el usuario, de forma que tenía los siguientes controles:
<br><br>

<center>
<table>
<tr>
<td><b>Giro de la Moto</b></td>
<td width=25px></td>
<td>Potenciómetro (5 kOhm)</td>
</tr>

<tr>
<td><b>Acelerador</b></td>
<td></td>
<td>Potenciómetro (5 kOhm)</td>
</tr>

<tr>
<td><b>Freno</b></td>
<td></td>
<td>Potenciómetro (5 kOhm)</td>
</tr>

<tr>
<td><b>Marcha Arriba/Abajo</b></td>
<td width=25px></td>
<td>Dos pulsadores</td>
</tr>

<tr>
<td><b>Botón START</b></td>
<td></td>
<td>Pulsador</td>
</tr>
</table>
</center><br>

Hoy por hoy, adquirir una recreativa <b>ManX TT</b> usada es bastante más barato debido al declive de los salones recreativos, de forma que una recreativa que incluya dos motos (<b>Manx TT Twin</b>) puede rondar los 1.500 €. Por menos de 800 €, incluyendo los componentes para su modificación y un poco de tu tiempo, puedes tener un maravilloso simulador de motocicletas en casa. ¡Manos a la obra!
<br><br>

Para poder usar nuestro simulador con todos los videojuegos comerciales que más nos gustan vamos a conectar la moto, una vez modificada, al puerto del joystick. Este puerto, aunque algo antiguo, está presente en muchas tarjetas de sonido e incluso en la placa base de nuestro ordenador, también puede ser adquirido como puerto externo con facilidad. El conector del joystick recibe el nombre de <b>DA-15</b> y tiene 15 pines distribuidos de la siguiente forma:
<br><br>

<center>
<table>
<tr>
<td valign=center align=center>
<img src="multimedia/images/da15.png" width=150px>
</td>
<td width=15px></td>
<td align=left>
Pin_01: +5V DC<br>
Pin_02: Botón 1<br>
Pin_03: Eje X para joystick 1 (0-100 kOhm)<br>
Pin_04: Tierra para Botón_1<br>
Pin_05: Tierra para Botón_2<br> 
Pin_06: Eje Y para joystick 1 (0-100 kOhm)<br>
Pin_07: Botón 2<br>
Pin_08: NC / +5V DC<br>
Pin_09: NC / +5V DC<br>
Pin_10: Botón_4<br>
Pin_11: Eje X para joystick 2 (0-100 kOhm)<br>
Pin_12: Tierra para Botones 3 y 4 (o salida MIDI)<br>
Pin_13: Eje Y para joystick 2 (0-100 kOhm)<br>
Pin_14: Botón_3<br>
Pin_15: +5V DC (o MIDI en ocasiones desconectado)<br>
</td>
</tr>
</table></center>
<br>

Un joystick convencional tiene en su interior, como mínimo, dos <i>potenciómetros</i> o resistencias variables.  Si no estás muy familiarizado con el funcionamiento de un <i>potenciómetro</i> deberías saber que es  un componente electrónico que, haciendo girar su eje varía su resistencia, permitiéndonos obtener valores diferentes según la posición de este eje. Piensa en el acelerador de nuestra moto, gracias a un <i>potenciómetro</i> sabemos que tenemos el “gas a tope” o debemos aplicar una aceleración proporcional al giro de nuestro acelerador…
<br><br>

Según esto, el puerto del joystick nos permite conectar 4 <i>potenciómetros</i> y 4 pulsadores. Si miras al principio de este post verás que es más que suficiente para nuestro simulador, ya que necesita 3 <i>potenciómetros</i> y 3 pulsadores.
<br><br>

Los <i>potenciómetros</i> de 5 kOhm que incorpora la moto no son válidos para que puedan ser interpretados por el puerto del joystick, deberían tener una resistencia cercana a 100 kOhm. Para nuestro simulador usaremos <i>potenciómetros</i> de <b>220 kOhm</b>, ya que debemos tener en cuenta que, ni el <i>potenciómetro</i> de giro de la moto, ni el acelerador, completan los 270º de recorrido total de éste, así que al usar un <i>potenciómetro</i> de <b>220 kOhm</b> nos aseguramos de que tendremos más valores comprendidos entre 0 y 100 kOhm en un recorrido menor de esos 270º.
<br><br>

<h1>Giro de la Moto</h1>
<br>

El giro de nuestro simulador se produce cuando el jugador carga todo su peso a la derecha o a la izquierda sobre la moto y obliga a  ésta  a pivotar sobre un eje, donde se encuentra el <i>potenciómetro</i> de giro que transmite nuestra posición al puerto del joystick y éste a su vez al juego. Para acceder a este <i>potenciómetro</i> debes retirar el depósito: para ello, quita los dos tornillos que hay entre el manillar y el depósito y retira la tapa que simula el tapón de combustible sobre éste. De esta forma tendrás acceso al <i>potenciómetro</i> de giro.
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><a href="javascript: zoom('multimedia/images/manxtt_01.jpg')"><img src="multimedia/images/manxtt_01.jpg" alt="Ampliar imagen" width=150></a></td>

<td><a href="javascript: zoom('multimedia/images/manxtt_02.jpg')"><img src="multimedia/images/manxtt_02.jpg" alt="Ampliar imagen" width=150></a></td>

<td><a href="javascript: zoom('multimedia/images/manxtt_03.jpg')"><img src="multimedia/images/manxtt_03.jpg" alt="Ampliar imagen" width=150></a></td>
</tr>
</tbody></table>
</center>
<br>

<h1>Acelerador</h1>
<br>

Para acceder al <i>potenciómetro</i> del acelerador, retira la tapa de plástico que donde se encuentra el pulsador de Start, de la siguiente forma:
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><a href="javascript: zoom('multimedia/images/manxtt_04.jpg')"><img src="multimedia/images/manxtt_04.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
<td><a href="javascript: zoom('multimedia/images/manxtt_05.jpg')"><img src="multimedia/images/manxtt_05.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
</tr>
</tbody></table>
</center>
<br>

En este punto necesitamos conocer la instalación tal y como irá conectada al puerto del joystick, para ello he preparado un cable en cuyo extremo tiene un conector <b>DA-15 Macho</b> para el puerto del joystick y en el otro extremo 3 <b>RCA-Hembra</b> donde conectaremos los distintos componentes de nuestra moto: el pulsador de <i>Start</i>, el <i>potenciómetro</i> de giro y el de acelerador.
<br><br>

<center>
<a href="javascript: zoom('multimedia/images/manxtt_06.jpg')"><img src="multimedia/images/manxtt_06.jpg" alt="Ampliar imagen" width=208 height=156></a>
</center>
<br>

Este cable es realmente sencillo: he marcado los <b>RCA Hembras</b> como X, Y y F (<i>puedes verlo en la imagen</i>). Para el RCA marcado con X he soldado cables al <i>pin 1</i> (+5V) y al <i>pin 3</i> (Eje X) en el conector <b>DA-15</b> (<i>mira la distribución de pines al principio de este post</i>). Para el RCA marcado con Y, he soldado cables al <i>pin 1</i> (+5V) y al <i>pin 6</i> (Eje Y), finalmente, para el RCA Hembra marcado con F, he soldado cables al <i>pin 2</i> (Botón 1) y al <i>pin 4</i> (Tierra Botón 1). <u>Los +5V que hay en el pin 1 del <b>DA-15</b> y van hasta los RCAs marcados como 'X' e 'Y' llegan por la conexión circular interior del RCA</u>. He usado RCAs para la conexión con los elementos de la moto por su sencillez en caso de que debas sustituir alguno de ellos por rotura, en el futuro. 
<br><br>

Ahora que ya tenemos localizados los dos <i>potenciómetros</i> más importantes de nuestro simulador y conocemos dónde irán conectados, ha llegado el momento de sustituirlos por los de <b>220 kOhm</b>. Como comprobarás en la imagen siguiente, hay dos diferencias importantes entre nuestros dos <i>potenciómetros</i> y los extraídos de la moto: los originales son más cortos y además tienen una hendidura que recorre todo el eje y que permiten un asiento perfecto en el interior de los engranajes que transmiten el movimiento. Tendrás que hacer lo mismo en tus <i>potenciómetros</i>. Observa también que los <i>potenciómetros</i> originales usan los tres pines y nosotros usaremos sólo dos, que deben ser los mismos que ves en la imagen. <u>El pin central de los <i>potenciómetros</i> siempre debe recibir los +5V que vienen desde el conector <b>DA-15</b> y que en nuestro caso se encuentran en la conexión central de nuestros RCA Hembras y por conexión, en los Machos</u>.
<br><br>

<center>
<a href="javascript: zoom('multimedia/images/manxtt_07.jpg')"><img src="multimedia/images/manxtt_07.jpg" alt="Ampliar imagen" width=208 height=156></a>
</center>
<br>

Si ahora sustituyes los nuevos potenciómetros en sus posiciones finales, obtendrás algo semejante a lo siguiente:
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><a href="javascript: zoom('multimedia/images/manxtt_08.jpg')"><img src="multimedia/images/manxtt_08.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
<td><a href="javascript: zoom('multimedia/images/manxtt_09.jpg')"><img src="multimedia/images/manxtt_09.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
</tr>
</tbody></table>
</center>
<br>

<h1>Pulsador de START</h1>
<br>
Este pulsador tiene la dificultad añadida de que es un pulsador iluminado, por lo que verás que tiene bastantes cables en su parte trasera. Los únicos que nos interesan son dos, los que cierran el contacto cuando el jugador pulsa el <i>botón de start</i>. Puedes saber qué cables son los involucrados en el pulsador midiendo continuidad con un tester mientras pulsas el botón, o si tu pulsador es igual que el de este post, mirar dónde están los cables que buscas en esta imagen:
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><a href="javascript: zoom('multimedia/images/manxtt_10.jpg')"><img src="multimedia/images/manxtt_10.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
</tr>
</tbody></table>
</center>
<br>

Ya puedes conectar tus <i>RCAs</i> al cable con el conector del joystick y éste a tu PC, ahora sólo falta decirle a <i>Windows</i> que has conectado un joystick, por muy raro que te parezca mirar tu moto y pensar que es un joystick. Ve al <b>Panel de Control</b> y haz doble click en el icono <b><i>Dispositivos de Juego</i></b>. Pulsa el botón <i>Agregar</i> y busca en la lista: <i>Joystick de dos ejes y dos botones</i>. Si has optado por sustituir también el <i>potenciómetro</i> de freno y los dos pulsadores de <i>Subir Marcha/Bajar Marcha</i> debes buscar: <i>Joystick de tres ejes y cuatro botones</i>.
<br><br>

<center>
<img src="multimedia/images/joy.jpg">
</center>
<br>

Si todo ha ido bien deberías ver en <b>Estado</b> <i>ACEPTAR</i>, pero si <b>Estado</b> dice <i>SIN CONECTAR</i> deberías centrarte en los <i>potenciómetros</i>, comprobando que todo está como dice este post. 
<br><br>

Finalmente no olvides calibrar tu moto-joystick como si de un joystick convencional se tratara, pero moviéndote a derecha e izquierda sobre la moto y acelerando a tope para que el sistema de calibración determine cuáles son los valores máximos de tu dispositivo.
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=37]]></guid><pubDate><![CDATA[Mon, 17 Oct 2011 09:00:00 +0200]]></pubDate></item><item><title><![CDATA[El funcionamiento del Scanner 3D HD]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=36]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top>
<br><img src="http://www.jesusdelatorre.com/multimedia/images/scanner.png"></td>
<td width=3%></td>
<td>Esta es una de las herramientas más sorprendentes de cuantas integran el estudio de diseño, el <b>Scanner 3D</b>. Es ideal para "cerrar" el círculo que forman las dos impresoras 3D: <a href="showpost.php?postID=12">Dimension SST 1200</a> y <a href="showpost.php?postID=33">Alaris 30</a>, ya que permite digitalizar modelos y, tras modificaciones y algún post procesado, obtener una réplica exacta.
<br>

Este escaner 3D de <b>Next Engine</b> posee algunas características bastante llamativas, como por ejemplo que no es imprescindible usarlo sobre una mesa o escanear a corta distancia objetos de pequeño tamaño: puede ser usado sobre un trípode y escanear objetos de cualquier tamaño a una distancia prudencial y en distintas pasadas.
</td></tr></table>

Sin embargo, la mejor característica que posee es que usa un método de escaneado <b>no invasivo</b>, es decir, <i>no es necesario</i> colocar marcas delimitadoras o "pegatinas" que indiquen los puntos de escaneado. El operador del escaner no necesita tampoco manipular la pieza o tocarla...
<br><br>

<center>
<iframe width="420" height="315" src="http://www.youtube.com/embed/298aUVRcgKE" frameborder="0" allowfullscreen></iframe>
</center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=36]]></guid><pubDate><![CDATA[Mon, 10 Oct 2011 09:29:43 +0200]]></pubDate></item><item><title><![CDATA[Usar un selector de monedas]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=34]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top><img src="multimedia/images/selector.png" width=110px></td>
<td>Uno de los montajes mas sencillos que puedes hacer en casa es adaptar un <b>selector de monedas</b>, como el que incorporan las máquinas recreativas, para darle diferentes usos: <i>permitir el pago en un sistema de lavado de vehículos</i>, <i>realizar el cobro de una máquina automática de nuestra fabricación</i>, <i>dar acceso limitado a un ordenador accionándolo por monedas</i> y un largo etcétera.
</td>
</tr>
</table>

Los selectores de monedas son dispositivos que permiten aceptar/discriminar diferentes monedas, de distintas cuantías, por medios electrónicos. Estos dispositivos comprueban determinados parámetros de la moneda insertada por el usuario (tamaño, peso, grosor, etc.) y realizan una comparación con las monedas programadas como válidas, aceptándola o devolviéndola: ya sea porque la cuantía no es aceptada o porque la moneda no ha pasado las diferentes pruebas de autenticidad.
<br><br>

<table border=0 width=100%>
<tr>
<td valign=top>Para este proyecto usaré un <i>selector de monedas mediante impulsos</i> de <a href="http://www.azkoyen.com" target=new>Azkoyen</a>, uno de los fabricantes españoles líderes en este mercado. Los <i>selectores de monedas mediante impulsos</i> de este fabricante poseen un conector <i>IDC10</i> (para cable plano de 10 pines) en su parte trasera, mediante el cual podremos suministrar alimentación (hasta un máximo de 15 Vcc, generalmente) para el funcionamiento del selector y también podremos obtener los impulsos que indican que han sido insertadas monedas válidas y su cuantía. Para poder realizar pruebas he utilizado el <a href="showproduct.php?productID=2">conversor IDC10 a Clema</a>, de forma que podré conectar cables de forma aérea y tendré más fácil el acceso al selector de monedas.
</td>
<td width=1%></td>
<td valign=top><img src="multimedia/images/selector04.jpg"></td>
</tr>
</table>

Este fabricante tiene una gama muy amplia de <i>selectores de monedas por impulsos</i>, sin embargo, prácticamente todos comparten la parte más importante de los pines que puedes ver en la imagen de arriba. Debes asegurarte de que el <i>selector de monedas</i> que elijas tenga, al menos, los pines 1 y 2 (<i>+12Vcc</i> y <i>GND</i>), 6 (<i>Inhibición del crédito</i>) y 7 (<i>Salida del crédito</i>) en esta disposición.
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><a href="javascript: zoom('multimedia/images/selector01.jpg')"><img src="multimedia/images/selector01.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
<td><a href="javascript: zoom('multimedia/images/selector02.jpg')"><img src="multimedia/images/selector02.jpg" alt="Ampliar imagen" width=208 height=156></a></td>
</tr>
</tbody></table>
</center>
<br>

Para comenzar es necesario alimentar el selector de monedas (<i>pines 1 y 2</i>), pero también debemos realizar un puente en el <b>pin 6</b> (<i>Inhibición de Crédito</i>) y <b>GND</b>, si no lo haces, el selector interpretará que tu aplicación está en un proceso interno y que no debe aceptar créditos porque podrían perderse (no contabilizarse por tu aplicación). Este pin es útil precisamente para esto, si añades un sistema que pueda abrir/cerrar este puente, evitarás o permitirás que el selector acepte monedas… Así queda el cableado en el <a href="showproduct.php?productID=2">conversor IDC10 a Clema</a>:
<br><br>

<center>
<a href="javascript: zoom('multimedia/images/selector03.jpg')"><img src="multimedia/images/selector03.jpg" alt="Ampliar imagen" width=208 height=156></a>
</center>
<br>

Si en este momento suministras alimentación al cableado (<i>+12Vcc y GND</i>), pruebas a introducir monedas por la parte superior del selector y el valor de las monedas introducidas corresponde con el aceptado por éste, deberían salir por la parte inferior izquierda, si miras el selector de frente.
<br><br>
<b>** Atención **</b>: Si sostienes el selector de monedas suspendido en el aire con tu mano, procura que esté lo más vertical e inmóvil posible.
<br><br>

Nos queda registrar la actividad que suministra el selector de monedas cuando acepta la moneda introducida por el usuario. Para ello, el selector de monedas, mediante el <b>pin 7</b>, eleva la tensión de salida hasta 12 Vcc durante un tiempo aproximado de 50 ms. Hagamos algunas consideraciones al respecto: En multitud de páginas webs se pregunta la posibilidad de conectar el <i>selector de monedas</i> al puerto paralelo (<i>LPTx</i>) del PC, existiendo división de opiniones acerca de la idoneidad de hacerlo ante posibles roturas del propio puerto, ya que éste debe soportar 12 Vcc en el momento de la detección de la moneda aceptada. Teóricamente, los 50 ms de suministro de los 12 Vcc al mismo no parecen suficientes para “quemar” el puerto, sin embargo no es muy aconsejable hacerlo, ya que la posibilidad de producir una sobre tensión en el puerto es realmente alta y existen otros lugares más idóneos para la conexión del selector de monedas.
<br><br>

Un buen método para conectarlo al puerto paralelo o a otros dispositivos que no puedan recibir directamente 12 Vcc es usar un <a href="showproduct.php?productID=4">relé</a> intermedio que se excitará (cerrará el contacto mecánico) con ese voltaje, como el usado en las siguientes imágenes:
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><a href="javascript: zoom('multimedia/images/selector05.jpg')"><img src="multimedia/images/selector05.jpg" alt="Ampliar imagen" width=208 height=156></td>
<td><a href="javascript: zoom('multimedia/images/selector06.jpg')"><img src="multimedia/images/selector06.jpg" alt="Ampliar imagen" width=208 height=156></td>
</tr>
</tbody></table>
</center>
<br><br>

Ahora, cada vez que introduces una moneda, el <a href="showproduct.php?productID=4">relé</a> accionará su contacto mecánico y podrás oirlo/verlo con claridad. Sólo te queda conectar algo a las salidas de <a href="showproduct.php?productID=4">relé</a> para detectar/contabilizar la introducción de monedas.
<br><br>

En un post siguiente vamos a conectar nuestro <i>selector de monedas por impulsos</i> a un programa en Visual Basic y VC++ desarrollado por nosotros...
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=34]]></guid><pubDate><![CDATA[Thu, 29 Sep 2011 11:29:03 +0200]]></pubDate></item><item><title><![CDATA[La nueva impresora 3D: Alaris 30]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=33]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top><img src="http://www.jesusdelatorre.net/multimedia/images/alaris30.png"></td>
<td width=3%></td>
<td><p align="justify">Continuando con la apuesta por la tecnología de impresión 3D en este estudio de diseño, he adquirido la segunda impresora 3D que hará compañía a la anterior, la <a href="http://www.jesusdelatorre.com/showpost.php?postID=12">Dimension SST 1200</a>. En esta ocasión es una <b>Alaris 30</b> de <i>Objet</i> que utiliza resina curada por UV para realizar los prototipos. La impresora 3D <b>Alaris 30</b> tiene una resolución y capacidad de detalle muy superior a la <b>Dimension SST 1200</b>, sin embargo, en este estudio de diseño cada una cumple su cometido: con la primera se realizan todos los prototipos para ver su funcionalidad y características básicas, y con la <b>Alaris 30</b>, la impresión final, incluyendo la fabricación de moldes para pequeñas series.<br>
</td></tr></table>
<br>

<center>
<iframe width="420" height="315" src="http://www.youtube.com/embed/wCEDfGpzZw8" frameborder="0" allowfullscreen></iframe>
</center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=33]]></guid><pubDate><![CDATA[Tue, 27 Sep 2011 13:02:37 +0200]]></pubDate></item><item><title><![CDATA[Horno cerámico del Siglo IX]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=31]]></link><description><![CDATA[Esta maqueta ha sido desarrollada y creada íntegramente con la impresora 3D <a href="http://www.jesusdelatorre.com/showpost.php?postID=12">Dimension SST 1200 en este estudio de diseño</a> para mostrar el funcionamiento y aspecto de un horno para la producción cerámica entre las áreas islámica y cristiana, durante la <i>Baja Edad Media</i>. El visitante al museo donde estará expuesta esta maqueta podrá constatar que, tras la conquista musulmana de Al-Andalus, se instalaron talleres especializados de producción cerámica, que incorporaban elementos que presentan soluciones formales originadas en diferentes tradiciones culturales y en áreas geográficas incluso lejanas. Posee unas dimensiones finales de: <b>Ancho: 80cm, Fondo: 70cm x Alto: 70cm</b> y se han invertido <b>105 horas</b> de impresión 3D.
<br><br>

<center>
<div style="position: relative; width: 380px; height: 285px; overflow:hidden">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="2000" HEIGHT="2000" id="flashslide" ALIGN="">

<PARAM NAME=movie VALUE="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/horno.txt&img_path=horno&interval=3000&w=380&h=285"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=scale VALUE=noscale> 
<PARAM NAME=wmode VALUE=transparent> 
<PARAM NAME=bgcolor VALUE=#FFFFFF> 
<EMBED src="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/horno.txt&img_path=horno&interval=3000&w=380&h=285" quality=high 

scale=noscale wmode=transparent gcolor=#FFFFFF  WIDTH="2000" HEIGHT="2000" NAME="flashslide" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
</div>
</center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=31]]></guid><pubDate><![CDATA[Sat, 17 Sep 2011 17:24:27 +0200]]></pubDate></item><item><title><![CDATA[Otras funciones de wFrameWork]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=29]]></link><description><![CDATA[Existen algunas funciones en <b>wFrameWork</b> que nos permiten realizar algunas acciones básicas para el correcto funcionamiento de nuestra aplicación. Supón que deseas añadir un menú de opciones a tu aplicación desarrollada con <b>wFrameWork</b>, necesitarás invariablemente el manejador de la ventana principal para poder asociar los distintos menús y submenús y que aparezcan como tales en tu aplicación. Para ello tienes la función <i>wAppGetHWND()</i> que te devuelve el manejador (<i>Handle</i>) de dicha ventana. Estas son las funciones incorporadas hasta la versión 1.0:
<br><br>

<ol>
<li><code>void wAppNameSet (const char *);</code></li>
<li><code>const char *wAppNameGet (void);</code></li>
<li><code>HWND wAppGetHWND (void);</code></li>
<li><code>HINSTANCE wAppGetInstance (void);</code></li>
<li><code>bool wAppGetFocus (void);</code></li>
</ol>
<br>

Las dos primeras <i>wAppNameSet()</i> y <i>wAppNameGet()</i> te permiten recuperar el nombre de la aplicación (aparece en el título de de la ventana) y fijar un nombre nuevo. Si no has usado <i>wAppNameSet()</i> en tu aplicación, el título que aparecerá en la cabecera de la ventana será ‘<i>wFrameWork App</i>’.
<br><br>

La función <i>wAppGetInstance()</i> te retorna el manejador (<i>Handle</i>) de la instancia de la aplicación en ese momento, que puedes necesitarlo para diferentes acciones que veremos más adelante, en futuros posts.
<br><br>

Finalmente, la función <i>wAppGetFocus()</i> devuelve <b>TRUE</b> o <b>FALSE</b> dependiendo si la aplicación tiene el foco de ejecución en el momento que ejecutas dicha petición. Es útil para detener procesos que no deseas que se ejecuten mientras la ventana está fuera de foco, por ejemplo.
<br><br>

En el próximo post veremos las funciones de ventanas auxiliares, una serie de funciones añadidas desde la versión 1.0 y que son sumamente útiles para obtener información de lo que ocurre en el interior de nuestra aplicación, del estado y valores de algunas variables, para suministrar información de entrada desde el teclado y todo cuanto se pudiera necesitar en el momento de testear nuestra aplicación.
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=29]]></guid><pubDate><![CDATA[Sat, 10 Sep 2011 12:25:02 +0200]]></pubDate></item><item><title><![CDATA[Escuchando el protocolo Modbus RTU]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=28]]></link><description><![CDATA[En el anterior post acerca de <b>Modbus</b> comprobamos que nuestro ejemplo tenía algunas dificultades con la recepción de los mensajes enviados por el dispositivo <i>Slave</i> como respuesta a una petición, así que en este post modificaremos nuestro ejemplo para obtener todos los mensajes devueltos y así realizar una correcta comprobación de errores.
<br><br>

El mensaje de respuesta del dispositivo <i>Slave</i> tiene una longitud básica de siete bytes, aunque puede ser mayor como veremos más adelante, y su aspecto es el siguiente:
<br><br>

<center>
<img src="multimedia/images/modbusres.png">
</center>
<br>

Observa la siguiente captura de nuestra nueva aplicación de ejemplo <b>Control ModBus RTU v2</b> y que puedes descargar a la derecha de este post en ‘<i>Descargas relacionadas</i>’: 
<br><br>

<center>
<img src="multimedia/images/modbus_resp.png">
</center>
<br>

Rodeados por la elipse azul vemos los parámetros del mensaje que enviamos desde el <i>Master</i> al <i>Slave</i>, identificado este último como el dispositivo #1 (<i>Terminal ID</i>). El mensaje consiste en la petición de lectura (<i>comando 3</i>) del registro #15. Como respuesta del <i>Slave</i> obtenemos los siete bytes que esperábamos (dentro de la elipse roja en nuestra imagen) conteniendo en primer lugar el identificador del <i>Slave</i> que emite la contestación (ID: 1) y recordándonos el comando que habíamos enviado (petición de lectura, comando 3), a continuación se nos indica que la respuesta está formada por dos bytes ($00 y $67), hagamos un alto en este momento.
<br><br>

Este byte (<i>B_Read</i> en la tabla de más arriba) habría sido distinto si la petición de lectura (<i>dentro del elipse azul</i>) hubiera pedido leer más registros desde el #15  (en nuestra imagen <i>Quantity</i> sería mayor de 1). Por ejemplo, si <i>Quantity</i> hubiese sido 3, habríamos obtenido la lectura de los registros #15, #16 y #17, por lo que <i>B_Read</i> sería 6 (dos bytes por cada registro).
<br><br>

Finalmente, los dos últimos valores del mensaje de respuesta son <i>LO_CRC</i> y <i>HI_CRC</i> que ya conocemos del anterior post y permiten al dispositivo <i>Master</i> asegurarse de que la respuesta le ha llegado correctamente.
<br><br>

Para mejorar nuestro antiguo ejemplo de <b>Control de Modbus RTU</b>, hemos añadido las siguientes líneas al control de comunicaciones (COMM1).
<br><br>

<ol>
<li><code>Private Sub MSComm1_OnComm()</code></li>
<li><code><b>Dim dataReceived As String</b></code></li>
<li><code><b>Dim valor As Integer, cntBytes As Integer</b></code></li>>
<li><code></code></li>
<li><code><b>Select Case MSComm1.CommEvent</b></code></li>
<li><code><b><b>Case comEvReceive                               ' Recepcion de informacion.</b></b></code></li>
<li><code><b><b><b>If (MSComm1.InBufferCount > 0) Then</b></b></b></code></li>
<li><code><b><b><b><b>dataReceived = MSComm1.Input</b></b></b></b></code></li>
<li><code><b><b><b><b>For cntBytes = 0 To Len(dataReceived) - 1</b></b></b></b></code></li>
<li><code><b><b><b><b><b>valor = Asc(Mid(dataReceived, cntBytes + 1, 1))</b></b></b></b></b></code></li>
<li><code><b><b><b><b><b>List1.AddItem Hex(valor)</b></b></b></b></b></code></li>
<li><code><b><b><b><b>Next cntBytes</b></b></b></b></code></li>
<li><code><b><b><b>End If</b></b></b></code></li>
<li><code><b>End Select</b></code></li>
<li><code>End Sub</code></li>
</ol>
<br>

Este código se ejecuta cada momento que se produce la detección de comunicación desde el <i>Slave</i> al <i>Master</i> y básicamente lo único que hace es llevar hasta la <i>listbox</i> <b>List1</b> el contenido de la comunicación recibida. Este es el lugar idóneo para implementar un filtrado de errores, la interpretación de los datos recibidos o cualquier operación de gestión del mensaje de respuesta de los dispositivos conectados como <i>Slaves</i>.
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=28]]></guid><pubDate><![CDATA[Sat, 03 Sep 2011 12:20:39 +0200]]></pubDate></item><item><title><![CDATA[Control de dispositivos Modbus RTU]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=14]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top><img src="http://www.jesusdelatorre.com/multimedia/images/optidrivee2.png"></td>
<td width=3%></td>
<td><p align=justify>Estos días estoy unificando muchos diseños que, al no coincidir en el tiempo, usaban diferentes tecnologías de variación de frecuencia en sus motores de corriente alterna. Últimamente estoy usando <b>Optidrive</b> de <a href="http://www.invertek.co.uk/" target=_blank>Invertek</a>, por tratarse de unos equipos de gran calidad y precio razonable. Estos inversores tienen diferentes posibilidades de control externo (<b><i>Optibus, RS485 y Modbus</i></b>, entre otros) y me he decidido a implementar en mis sistemas de automatización el protocolo <b>Modbus RTU</b>.</p>
</td></tr></table>

<b>Modbus</b> es un protocolo de <i>comunicación serie</i> desarrollado por <a href="http://www.modicon.com/" target=_blank>Modicon</a> en 1979 y usado con <i>PLCs</i> (Controladores de Logica Programable). Es un método para la transmisión de información serializada entre dispositivos electrónicos. El dispositivo que controla la comunicación es llamado Master (Maestro) y los diferentes dispositivos que proporcionan datos al Master, son llamados Slaves (Esclavos). En una red <b>Modbus</b> hay un Master y hasta 247 esclavos numerados de forma individual y única.
<br><br>

La comunicación se basa en un sistema de mensajes que es enviado desde el sistema de control (<b>Master</b>) hasta el dispositivo/s que soporta el protocolo <b>Modbus</b> (<b>Slave</b>). Este último realiza una respuesta usando el mismo sistema de mensajes para informar de la correcta ejecución/recepción del mensaje o para la devolución de información requerida por el sistema de control. Los mensajes tienen una longitud de 8 bytes y la siguiente forma:
<br><br>

<center>
<img src="multimedia/images/modbuscmd.png">
</center>
<br>

El primer byte es el <i>identificador del dispositivo</i> <b>Modbus</b> que recibirá el <i>mensaje</i> (<i>desde 1 a 247</i>) y el siguiente byte es el <i>comando</i> que debe ejecutar dicho dispositivo. Llegado este punto debemos tener en cuenta que existen ocho tipos de comandos válidos (<i>cuatro de lectura y cuatro de escritura</i>):
<br><br>

<table>
<tr>
<td width=10%></td>
<td>
<b>01</b> (&H01) Read Discrete Output Coils<br>
<b>02</b> (&H02) Read Discrete Input Contacts<br>
<b>03</b> (&H03) Read Analog Output Holding Registers<br>
<b>04</b> (&H04) Read Analog Input Registers<br>
<b>05</b> (&H05) Write single Discrete Output Coil<br>
<b>06</b> (&H06) Write single Analog Output Holding Register<br>
<b>15</b> (&H0F) Write multiple Discrete Output Coils<br>
<b>16</b> (&H10) Write multiple Analog Output Holding Registers
</td>
</tr>
</table>
<br>

La mayor parte de dispositivos comerciales usan los comandos <b>03</b> (<i>&H03 - Read Analog Output Holding Registers</i>) para recuperar el valor actual de un registro en la memoria del dispositivo <b>ModBus</b> y <b>06</b> (<i>&H06 - Write single Analog Output Holding Register</i>) para la operación contraria: modificar el valor en un registro interno del dispositivo.
<br><br>

Los dos siguientes bytes (16 bits) pertenecen a la dirección de memoria del dispositivo sobre la queremos ejercer nuestra acción (de lectura o escritura), dictada por el comando anterior. El formato es <i>HI_Byte</i> – <i>LO_Byte</i>, por ejemplo, para el registro 412 (<i>$019C en hexadecimal</i>) sería <i>HI_Byte</i>: <b>$01</b> y <i>LO_Byte</i>: <b>9C</b>.
<br><br>

Los siguiente 2 bytes (16 bits) pueden variar su cometido si estamos intentando leer un registro (comandos: 01, 02, 03 y 04) o si deseamos modificar el valor de éste (comandos: 05, 06, 15 y 16). En el primer caso (Lectura) deben indicar la cantidad de bytes que deseamos leer desde la dirección (<i>HI_Addr</i> / <i>LO_Addr</i>), veamos un ejemplo de comando completo hasta donde conocemos:
<br><br>

<center>
<b>[$01] – [$03] – [$01] [$9C] – [$00] [$02]</b>
</center>
<br>

Este ejemplo envía al dispositivo 1 ($01) la lectura (Comando $03) del registro 412 ($019C - HI_Byte: $01 y LO_Byte: $9C) y el siguiente ($0002 – HI_Byte: $00 y LO_Byte: $02).
<br><br>

En el caso de desear modificar un registro, podría ser algo así:
<br><br>

<center>
<b>
[$01] – [$06] – [$01] [$9C] – [$00] [$02]</b>
</center>
<br>

Este ejemplo realiza en el dispositivo 1 ($01) la escritura (Comando $06) del registro 412 ($019C - HI_Byte: $01 y LO_Byte: $9C) del siguiente valor ($0002 – HI_Byte: $00 y LO_Byte: $02).
<br><br>

Finalmente, como suele ser habitual en la mayoría de los dispositivos industriales, existe un control de errores CRC que permite conocer si el mensaje llega correctamente hasta el dispositivo. Este control de errores supone los últimos 16 bits (Bytes LO_CRC y HI_CRC) del mensaje y es calculado en nuestro ejemplo por la función modBusCRC:
<br><br>

<ol>
<li><code>Function modbusCRC(Command As String) As Long</code></li>
<li><code></code></li>
<li><code><b>Dim Generator As Long, CRC As Long</b></code></li>
<li><code><b>Dim charCnt As Integer, j As Integer, Length As Integer</b></code></li>
<li><code><b>Dim Bit As Boolean</b></code></li>
<li><code><b>Dim Temp As Byte</b></code></li>
<li><code></code></li>
<li><code><b>Length = Len(Command)</b></code></li>
<li><code><b>CRC = 65535</b></code></li>
<li><code><b>Generator = 40961</b></code></li>
<li><code></code></li>
<li><code><b>For charCnt = 1 To Length</b></code></li>
<li><code><b><b>Temp = Asc(Mid(Command, charCnt, 1))</b></b></code></li>
<li><code><b><b>CRC = CRC Xor Temp</b></b></code></li>
<li><code><b><b>For j = 1 To 8</b></b></code></li>
<li><code><b><b><b>Bit = CRC And 1</b></b></b></code></li>
<li><code><b><b><b>CRC = CRC \ 2</b></b></b></code></li>
<li><code><b><b><b>If Bit = True Then</b></b></b></code></li>
<li><code><b><b><b><b>CRC = CRC Xor Generator</b></b></b></b></code></li>
<li><code><b><b><b>End If</b></b></b></code></li>
<li><code><b><b>Next j</b></b></code></li>
<li><code><b>Next charCnt</b></code></li>
<li><code></code></li>
<li><code><b>modbusCRC = CRC</b></code></li>
<li><code></code></li>
<li><code>End Function</code></li>
</ol>
<br>

El programa de demostración que he preparado tiene serias dificultades para interpretar los mensajes que devuelven los dispositivos que soportan <b>Modbus</b>, por lo que en un post posterior veremos con detalle cómo funcionan estos y mejoraremos nuestro programa de ejemplo….
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=14]]></guid><pubDate><![CDATA[Fri, 26 Aug 2011 19:33:00 +0200]]></pubDate></item><item><title><![CDATA[Argumentos con wFrameWork]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=25]]></link><description><![CDATA[<b><u>NOTA</u></b>: Los archivos <i>wFrameWork.lib</i> y <i>wFrameWork.h</i> han sido actualizados a la versión <b>1.0</b>. Actualiza tus archivos descargando la nueva versión desde <i>Descargas relacionadas</i>, a la derecha de este post.
<br><br>

En esta tercera entrega de ejemplo de las funciones de <b>wFrameWork</b> nos centraremos en tres funciones que nos permiten recuperar los argumentos que el usuario transmite a la aplicación mediante la línea de comandos o desde el acceso directo que apunta a ésta.
<br><br>

<ol>
<li><code>int wArgsGetCount (void);</code></li>
<li><code>const char *wArgsGetArg (int);</code></li>
<li><code>int wArgsFindArg (const char *);</code></li>
</ol>
<br>

La primera función <i>wArgsGetCount()</i> nos devuelve el número de parámetros que han sido transferidos a nuestra aplicación en el momento de su ejecución. Conocer este valor es interesante porque nos permitirá saber si todos los argumentos que estábamos esperando han sido suministrados. Para recuperar un determinado argumento usaremos <i>wArgsGetArg()</i>, que devolverá la cadena de texto que lo contiene, consignando tan sólo el número de orden que ocupa en la línea de comandos completa. Finalmente, la función <i>wArgsFindArg()</i> busca la existencia de un determinado argumento y en caso de que exista, retorna el número de orden que ocupa en la línea de comandos. Conviene recordar que todos los argumentos pasados a nuestra aplicación se encuentran en el interior de una matriz en <b>wFrameWork</b> por lo que el primer argumento ocupará la posición 0, el segundo en lugar 1 y así sucesivamente…	
<br><br>

Para seguir el ejemplo ‘<i>Args Sample.exe</i>' es necesario crear un acceso directo a este ejecutable. Una vez que lo hayas creado, ve a las propiedades de éste (botón derecho sobre el icono del acceso directo y opción <i>Propiedades</i> en el menú contextual). Añade tres argumentos ficticios a continuación del ejecutable, algo semejante a <i>ARG01, ARG02 y ARG03</i>, tal y como muestra la siguiente imagen:
<br><br>
<center><img src="multimedia/images/adprops.jpg"></center>
<br>

Hemos añadido a nuestro ejemplo el siguiente código, que demuestra el funcionamiento de las tres funciones, y que muestra diferentes resultados según el uso que se haga de ellas:
<br><br>

<ol>
<li><code>wDebugStr ("No. de Argumentos: %d\n\n", wArgsGetCount());</code></li>
<li><code></code></li>
<li><code>for (cntArgs = 0;cntArgs < wArgsGetCount();++cntArgs)</code></li>
<li><code><b>wDebugStr ("Argumento [%d]: %s\n", cntArgs, wArgsGetArg(cntArgs));</b></code></li>
<li><code></code></li>
<li><code>int argFound = wArgsFindArg("ARG02");</code></li>
<li><code>if (argFound != -1)</code></li>
<li><code><b>wDebugStr ("\nEncontrado ARG02 en [%dª] posicion.\n", argFound + 1);</b></code></li>
<li><code>else</code></li>
<li><code><b>wDebugStr ("\nNo se ha encontrado ARG02\n");</b></code></li>
</ol>
<br>

En el siguiente post conoceremos las funciones que nos permiten recuperar algunos manejadores importantes para el desarrollo de nuestras aplicaciones (<i>hInstance</i>, <i>hWnd</i>, etc.).
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=25]]></guid><pubDate><![CDATA[Sun, 21 Aug 2011 16:20:00 +0200]]></pubDate></item><item><title><![CDATA[wFrameWork: Display Settings]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=24]]></link><description><![CDATA[En <b>wFrameWork</b> existen dos funciones a las que invocar según el aspecto de nuestra aplicación y según deseemos trabajar en modo ventana o “a toda pantalla” (fullscreen):
<br><br>

<ol>
<li><code>void wDisplayWindowed (int width, int height);</code></li>
<li><code>bool wDisplayFullScreen (int width, int height, int bpp, int frequency);</code></li>
</ol>
<br>

La función <i>wDisplayWindowed()</i> crea nuestra ventana suministrando una proporción de ancho y alto, por ejemplo: 640x480. Por otro lado, la función <i>wDisplayFullScreen()</i> crea una aplicación a toda pantalla cuya resolución es <i>Width x Height</i>, de profundidad de color (<i>bpp - bits per pixel</i>) y de frecuencia de refresco (<i>frequency</i>). Si no indicas nada en este último parámetro, la frecuencia será 60 Hz por defecto. Finalmente, hay una posibilidad de invocar <i>wDisplayFullScreen()</i> sin parámetros que creará una ventana de aplicación a toda pantalla, de 640x480 pixels y 60 Hz de refresco.
<br><br>

Existen dos funciones más que podemos usar para conocer las características del escritorio de Windows, su resolución , profundidad de color y tasa de refresco y otra que nos ofrece esa misma información acerca de nuestra ventana y sus características:
<br><br>

<ol>
<li><code>void wDesktopSettingsGet (int* width, int* height, int* bpp, int* frequency);</code></li>
<li><code>void wDisplaySettingsGet  (int *width, int *height, bool *fullscreen, int *bpp, int *frequency);</code></li>
</ol>

<br>
En nuestro ejemplo (<i>Display sample.c</i>) hemos usado además una nueva función en <b>wFrameWork</b> (<i>wDebugStr</i>) que lleva hasta el archivo <i>wFrameWork.log</i> toda la información que deseemos trazar de nuestra aplicación. Aquí puedes ver el fragmento de código que extrae la información del escritorio de Windows y lo lleva hasta <i>wFrameWork.log</i>:
<br><br>

<ol>
<li><code>wDesktopSettingsGet (&desktopSizeX, &desktopSizeY, &screenColorDepth, &screenRefresh);</code><li>
<li><code>wDebugStr ("Desktop Settings: %dx%d [bpp: %d][Fq: %d]\n", desktopSizeX, desktopSizeY, screenColorDepth, screenRefresh);</code></li>
</ol>
<br>

Como puedes observar, <i>wDebugStr()</i> funciona exactamente igual que <i>printf()</i>, mediante una cadena de formato.
<br><br>

Finalmente, en el mismo ejemplo (<i>Display sample.c</i>) hemos realizado la comprobación de las características de nuestra ventana:
<br><br>

<ol>
<li><code>wDisplaySettingsGet (&screenSizeX, &screenSizeY, &screenfull, &screenColorDepth, &screenRefresh);</code></li>
<li><code>if (screenfull)</code></li>
<li><code><b>wDebugStr ("Display Settings: %dx%d [bpp: %d][Fq: %d]\n", screenSizeX, screenSizeY, screenColorDepth, screenRefresh);</b></code></li>
<li><code>else</code></li>
<li><code><b>wDebugStr ("Display Settings: %dx%d\n", screenSizeX, screenSizeY);</b></code></li>
</ol>
<br>

En el próximo post acerca de <b>wFrameWork</b> haremos un recorrido por las funciones de gestión de argumentos en la línea de comandos. No te lo pierdas!.
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=24]]></guid><pubDate><![CDATA[Sun, 14 Aug 2011 11:45:33 +0200]]></pubDate></item><item><title><![CDATA[wFrameWork para Windows]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=23]]></link><description><![CDATA[<b>wFrameWork</b> es una librería estática (<i>.lib</i>) que facilita la creación de aplicaciones para <i>Windows (XP/7/Vista)</i>. Todo el control continúa en manos del desarrollador ya que se usan funciones enlazadas con todo el proceso interno del funcionamiento de la aplicación a modo de eventos. Además, incluye funciones para el control de argumentos en la línea de comandos, modo ventana o fullscreen y algunas herramientas que veremos a lo largo de esta serie de artículos.

<br><br>
Para comprender el funcionamiento de <b>wFrameWork</b> he desarrollado una aplicación muy simple, sólo abre la ventana principal de la aplicación, pero servirá para ilustrar el funcionamiento mediante eventos y la creación de estos. Puedes descargar <b>wFrameWork</b> y la primera aplicación de ejemplo a la derecha de este post, en el apartado <i>Descargas relacionadas</i>. Presta atención en “<i>Simple window.cpp</i>” al fragmento de código donde definimos las funciones que despacharán todos los eventos que se produzcan durante la ejecución de nuestro ejemplo:
<br><br>

<ol>
<li><code>bool wAppMain (void)</code></li>
<li><code>{</code></li>
<li><code><b>wEventStartSet (sampleStartEvent);</b></code></li>
<li><code><b>wEventEndSet (sampleEndEvent);</b></code></li>
<li><code><b>wEventDeactivationSet(sampleDeactivationEvent);</b></code></li>
<li><code><b>wEventReactivationSet(sampleReactivationEvent);</b></code></li>
<li><code><b>wEventLoopSet(sampleLoopEvent);</code></b></li>
<li><code><b>wEventKeySet(sampleKeyEvent);</code></b></li>
<li><code><b>wEventCharSet(sampleCharEvent);</b></code></li>
<li><code><b>wEventMouseMoveSet(sampleMouseMoveEvent);</b></code></li>
</ol>
<br>
El punto de entrada para <b>wFrameWork</b> es <i>wAppMain()</i> y en su interior definimos las funciones de despacho de eventos cuya funcionalidad es la siguiente:
<br><br>

<span><span>
<b><u>wEventStartSet</u></b>: El contenido en el interior de la función a la que apunta (<i>sampleStartEvent</i> en este caso) será ejecutado justo después de la creación de la ventana de la aplicación.<br><br>

<b><u>wEventEndSet</u></b>: El código en el interior de esta función se ejecutará justo antes de finalizar la ejecución de la aplicación. Es especialmente útil para liberar memoria, punteros u otros recursos.<br><br>

<b><u>wEventDeactivationSet</u></b>: Se ejecuta en el momento en que la aplicación de la ventana es desactivada, como por ejemplo al ser minimizada.<br><br>

<b><u>wEventReactivationSet</u></b>: Entra en funcionamiento cuando la ventana vuelve a ser reactivada, como por ejemplo después de ser restaurada desde la barra de Windows.<br><br>

<b><u>wEventLoopSet</u></b>: Esta función es una de las más importantes: su contenido está continuamente en ejecución mientras la aplicación está activa.<br><br>

<b><u>wEventKeySet</u></b> y <b><u>wEventMouseMoveSet</u></b>: entran en funcionamiento en el momento en el que se produce un evento en el teclado (tecla pulsada y tecla liberada) o en el ratón, respectivamente.<br><br>

<b><u>wEventCharSet</u></b>: Contiene el código de carácter de la tecla pulsada.
<br><br></span></span>

En el ejemplo de “<i>Simple window.cpp</i>” todos los eventos están vacios, sin embargo si he desarrollado el evento <i>sampleKeyEvent()</i> que, al detectar la pulsación de la tecla ‘<i>ESCAPE</i>’, finaliza la aplicación. Aquí el código:
<br><br>

<ol>
<li><code>bool sampleKeyEvent (unsigned long time, unsigned char key, bool up)</code></li>
<li><code>{</code></li>
<li><code><b>bool ok = true;</b></code></li>
<li><code><b>if (key == VK_ESCAPE)</b></code></li>
<li><code><b><b>wAppEnd();</b></b></code></li>
<li><code><b>return ok;</b></code></li>
<li><code>}</code></li>
</ol>
<br>
En el siguiente post veremos a fondo las funciones que determinan las características de la ventana y el modo de visualización (ventana o fullscreen).
<br><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=23]]></guid><pubDate><![CDATA[Mon, 08 Aug 2011 09:35:55 +0200]]></pubDate></item><item><title><![CDATA[Trabajos de Impresión 3D (Julio 2011)]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=22]]></link><description><![CDATA[Estos son los trabajos de impresion 3D realizados con la <a href="http://www.jesusdelatorre.com/showpost.php?postID=12">impresora 3D Dimension SST 1200</a> durante el mes de Julio para diferentes clientes: un prototipo funcional en ABS de pistola para proyectado de aislante, una caja para un dispositivo electrónico y la divisa de una finca ganadera.
<br><br>

<center>
<div style="position: relative; width: 380px; height: 285px; overflow:hidden">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="2000" HEIGHT="2000" id="flashslide" ALIGN="">

<PARAM NAME=movie VALUE="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/protojulio11.txt&img_path=protojulio11&interval=3000&w=380&h=285"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=scale VALUE=noscale> 
<PARAM NAME=wmode VALUE=transparent> 
<PARAM NAME=bgcolor VALUE=#FFFFFF> 
<EMBED src="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/protojulio11.txt&img_path=noria&interval=3000&w=380&h=285" quality=high 

scale=noscale wmode=transparent gcolor=#FFFFFF  WIDTH="2000" HEIGHT="2000" NAME="flashslide" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
</div></center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=22]]></guid><pubDate><![CDATA[Tue, 02 Aug 2011 17:59:51 +0200]]></pubDate></item><item><title><![CDATA[Accediendo a SpacePilot sin usar DirectInput]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=21]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top><img src="http://www.jesusdelatorre.com/multimedia/images/spacepilot.png"></td>
<td width=3%></td>
<td><p align=justify><b>SpacePilot</b> (fabricado por <a href="http://www.3dconnexion.com" target=_new>3DConnexion</a>, subsidiaria de <a href="http://www.logitech.com" target=_new>Logitech</a>), es un dispositivo a mitad de camino entre un joystick y un ratón. Este modelo está actualmente descatalogado y ha sido sustituido por versiones más modernas, como por ejemplo <a href="http://www.3dconnexion.com/products/spacepilot-pro.html" target=_new>SpacePilot Pro</a> o <a href="http://www.3dconnexion.com/products/spaceexplorer.html" target=_new>SpaceExplorer</a>.  Posee una potencia sorprendente y está especialmente indicado para todas aquellas personas que se dedican al diseño 3D en cualquiera de sus variantes.</p>
</td></tr></table>

El modelo que tengo sobre mi mesa de trabajo es un <b>SpacePilot</b>  con 6DOF de movimiento y que suelo usar con bastante frecuencia, sin embargo, hace algún tiempo me planteé usarlo como dispositivo en aplicaciones software programadas personalmente, y ahí comenzó el problema: Toda la información que encontré en <i>Internet</i> hacía referencia al modo de programación mediante dispositivo HID en <b>DirectInput</b>, incluso el SDK facilitado por el fabricante (<i>la última versión que he revisado es la v2.0.1 r6379</i>) abunda en detalles acerca del uso del dispositivo en <b>RAW Input</b>. En mi caso necesitaba acceder directamente a la información interna de <b>SpacePilot</b>, así que para ello y, usando una versión muy antigua del SDK (que no tenía un solo ejemplo en <b>Visual Basic</b>) y con la referencia de todas las funciones de la DLL involucrada en la gestión de <b>SpacePilot</b> (<i>siappdll.dll</i>), desarrollé la aplicación de este post.
<br><br>

<b><u>Notas</u></b>
<br><br>

<span>1. Este software sólo ha sido probado con <b>SpacePilot</b>, si algún lector de este blog ha podido testearlo en otro dispositivo compatible, ruego deje un comentario acerca del funcionamiento y respuesta de este programa.<br><br>

2. Este software ha sido creado con <b>Microsoft Visual Studio 2010 Ultimate</b> y necesita <b>Microsoft Framework v4.0</b> o superior.<br><br>

<center><a href="download.php?downloadID=2">.: Descargar SpacePilot Sample.zip (125 Kb) :.</a>
<br><br>

<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/es/"><img alt="Licencia de Creative Commons" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/88x31.png" /></a>
</center></span>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=21]]></guid><pubDate><![CDATA[Thu, 21 Jul 2011 19:12:10 +0200]]></pubDate></item><item><title><![CDATA[Lego Car con impresora 3D]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=20]]></link><description><![CDATA[Esta es una de las primeras pruebas de impresión 3D que hice al adquirir <a href="http://www.jesusdelatorre.com/showpost.php?postID=12">la impresora 3D Dimension SST 1200</a>. Lo más llamativo de esta prueba, un juguete realizado con piezas de <a href="http://www.lego.com">Lego</a>, es que se trata de algo totalmente funcional: una vez montado, las ruedas giran a la perfección...
<br><br>

<center>
<iframe width="380" height="310" src="http://www.youtube.com/embed/3bwLfYKOOF0" frameborder="0" allowfullscreen></iframe>
</center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=20]]></guid><pubDate><![CDATA[Thu, 26 May 2011 07:43:41 +0200]]></pubDate></item><item><title><![CDATA[Noria de Sangre]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=19]]></link><description><![CDATA[Esta maqueta ha sido desarrollada y creada íntegramente con la impresora 3D <a href="http://www.jesusdelatorre.com/showpost.php?postID=12">Dimension SST 1200 en este estudio de diseño</a> para mostrar el funcionamiento y aspecto de una antigüa noria de sangre. El visitante al museo donde estará expuesta podrá accionar una manivela superior y ver su movimiento real. Posee unas dimensiones finales de: <b>Ancho: 50cm, Fondo: 40cm x Alto: 40cm</b> y se han invertido <b>55 horas</b> de impresión 3D.
<br><br>

<center>
<div style="position: relative; width: 380px; height: 285px; overflow:hidden">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="2000" HEIGHT="2000" id="flashslide" ALIGN="">

<PARAM NAME=movie VALUE="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/noria.txt&img_path=noria&interval=3000&w=380&h=285"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=scale VALUE=noscale> 
<PARAM NAME=wmode VALUE=transparent> 
<PARAM NAME=bgcolor VALUE=#FFFFFF> 
<EMBED src="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/noria.txt&img_path=noria&interval=3000&w=380&h=285" quality=high 

scale=noscale wmode=transparent gcolor=#FFFFFF  WIDTH="2000" HEIGHT="2000" NAME="flashslide" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
</div></center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=19]]></guid><pubDate><![CDATA[Wed, 11 May 2011 13:26:18 +0200]]></pubDate></item><item><title><![CDATA[Coaster Valley en 3D]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=17]]></link><description><![CDATA[<b>Coaster Valley en 3D</b> es una película en formato estereoscópico 3D (Side by Side) que durante muchos años ha acompañado, a modo de demostración, a todos los diseños que poseían una plataforma dinámica de movimiento, como por ejemplo <a href="http://www.jesusdelatorre.com/showpost.php?postID=15"><b>xTreme Motion Theatre</b></a>, <b>simPOD</b> (<i>pronto en este blog</i>) y algunos teatros 4D/cines 4D que incorporaban algún movimiento en los asientos...

<br><br>
<center>
<table border="0">
<tbody>
<tr>
<td><img src="http://www.jesusdelatorre.net/multimedia/images/cv01.jpg" border="1" alt="" /></td>
<td><img src="http://www.jesusdelatorre.net/multimedia/images/cv02.jpg" border="1" alt="" /></td>
<td><img src="http://www.jesusdelatorre.net/multimedia/images/cv03.jpg" border="1" alt="" /></td>
</tr>
</tbody></table>
</center>
<br>
Esta película se realizó en las oficinas de <a href="http://www.taospain.com" target=_new>TAOSpain</a> allá por el año 2.005 y, con el paso de los años, se le han ido haciendo algunos "liftings" para mejorar la sensación de movimiento, la aceleración de éste y en definitiva, adaptarla a las características y mejoras que se iban incorporando en la parte mecánica de las plataformas dinámicas de todos los diseños.<br><br>

<center>
<iframe width="380" height="310" src="http://www.youtube.com/embed/_VGmuI9mRRk" frameborder="0" allowfullscreen></iframe>
</center>
<br>

<font color=#0595AF>
<strong>Características</font></strong>

<br>
<table>
<tr>
<td width=5%></td>
<td width=15%><b>Formato</b></td>
<td width=2%></td>
<td>Video .AVI (<a href="http://www.xvid.org/" target=_new>Xvid Codec</a>)</td>
</tr>

<tr>
<td width=5%></td>
<td width=15%><b>Duración</b></td>
<td width=2%></td>
<td>04:48</td>
</tr>

<tr>
<td></td>
<td><b>Aspect Ratio</b></td>
<td width=2%></td>
<td>4:3</td>
</tr>

<tr>
<td></td>
<td><b>Resolución</b></td>
<td width=2%></td>
<td>1440x480 [Side by Side]</td>
</tr>

<tr>
<td></td>
<td><b>Frame rate</b></td>
<td width=2%></td>
<td>25 FPS</td>
</tr>

<tr>
<td></td>
<td><b>Audio</b></td>
<td width=2%></td>
<td>Stereo 16Bits - 44.1 Khz</td>
</tr>

<tr>
<td></td>
<td valign=top><b>Descarga</b></td>
<td width=2%></td>
<td><a href="download.php?downloadID=5">Coaster Valley (Part_1) - 95 Mb.</a><br><a href="download.php?downloadID=6">Coaster Valley (Part_2) - 95 Mb.</a><br>
<a href="download.php?downloadID=7">Coaster Valley (Part_3) - 11 Mb.</a></td>
</tr>
</table>

<br>
<center>
<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/es/"><img alt="Licencia de Creative Commons" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/88x31.png" /></a>
</center>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=17]]></guid><pubDate><![CDATA[Thu, 18 Nov 2010 10:49:49 +0100]]></pubDate></item><item><title><![CDATA[xTreme Motion Theatre]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=15]]></link><description><![CDATA[Cuando realicé el diseño de este cine dinámico lo hice pensando en las posibilidades que tendría en instalaciones portátiles o móviles como por ejemplo centros comerciales, pequeños centros de ocio familiar, exposiciones itinerantes, etc. ya que una característica importante de <b>xTreme Motion Theatre</b> es que está formado por asientos individuales e independientes, lo que permite una rápida modificación de las dimensiones de la sala eliminando o añadiendo nuevos asientos.<br><br>


<center>
<div style="position: relative; width: 380px; height: 285px; overflow:hidden">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="2000" HEIGHT="2000" id="flashslide" ALIGN="">

<PARAM NAME=movie VALUE="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/xtreme.txt&img_path=xtreme&interval=3000&w=380&h=285"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=scale VALUE=noscale> 
<PARAM NAME=wmode VALUE=transparent> 
<PARAM NAME=bgcolor VALUE=#FFFFFF> 
<EMBED src="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/xtreme.txt&img_path=xtreme&interval=3000&w=380&h=285" quality=high 

scale=noscale wmode=transparent gcolor=#FFFFFF  WIDTH="2000" HEIGHT="2000" NAME="flashslide" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
</div>
</center>
<br>

También es posible conectar <i>un mando de control o joystick, pistola láser u otro dispositivo interactivo</i> a cada uno de los asientos y ofrecer a los usuarios otras posibilidades: juegos online y competiciones, galería de tiro, etc. Cada asiento puede reaccionar y moverse de forma independiente para cada usuario.
<br><br>

<center>
<iframe width="380" height="310" src="http://www.youtube.com/embed/op2m6m10TJE" frameborder="0" allowfullscreen></iframe>
</center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=15]]></guid><pubDate><![CDATA[Sun, 24 Oct 2010 19:05:48 +0200]]></pubDate></item><item><title><![CDATA[Así funciona la impresora 3D: Dimension SST 1200]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=12]]></link><description><![CDATA[<table border=0>
<tr>
<td valign=top><img src="multimedia/images/sst1200.png"></td>
<td width=3%></td>
<td><p align="justify">Recientemente he añadido al estudio de diseño una impresora 3D modelo <a href="http://www.dimensionprinting.com/3d-printers/printing-productspecs1200series.aspx" target=new>Dimension SST 1200</a> para la realización de prototipos en material ABS.</p><br>

<p align="justify">Continuando con la mejora del área de diseño, y tras valorar diferentes tecnologías de impresión 3D, he adquirido esta sorprendente herramienta de realización de prototipos que además posee una de las áreas de impresion más grande del mercado: 254x254x305 mm (10x10x12 pulgadas). No obstante, su característica más importate es la realización de piezas "funcionales", esto es, elementos que una vez impresos, pueden ser usados como parte de un todo más grande, como por ejemplo una maqueta.</p>
</td></tr></table>
<br>

<center>
<iframe width="420" height="340" src="http://www.youtube.com/embed/55-orzbxF1g" frameborder="0" allowfullscreen></iframe>
</center>
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=12]]></guid><pubDate><![CDATA[Thu, 26 Aug 2010 11:42:40 +0200]]></pubDate></item><item><title><![CDATA[buildBitmap, pon tu nombre en una textura]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=11]]></link><description><![CDATA[Este pequeño programa, en Visual C, es una mini-herramienta que necesité cuando diseñé <a href="http://www.taospain.com/spanish/virtuazoo/virtuazoo.html" target=new>VituaZoo</a>, donde los visitantes de la atracción podían crear sus propios seres vivos y era necesario distinguirlos de los demás colocando una etiqueta con cada nombre sobre el ser virtual.<br><br>

Para ello hice <b>buildBitmap</b> que, intoduciendo un texto en una variable, genera un archivo .tga con canal alpha y que puede ser usado como textura de un polígono.<br><br>

Este mismo sistema de etiquetas es el que usan algunos juegos del tipo <a href="http://www.prisonserver.com" target=new><i>PrisonServer</i></a> y otros juegos online.
<br><br>

<center>
<table border="0">
<tbody>
<tr>
<td><img src="http://www.jesusdelatorre.com/multimedia/images/ps01.jpg" border="1" alt="" width="208" height="156" /></td>
<td><img src="http://www.jesusdelatorre.com/multimedia/images/ps02.jpg" border="1" alt="" width="208" height="156" /></td>
</tr>
</tbody></table>
</center><br>

<center><a href="download.php?downloadID=3">.: Descargar buildBitmap.zip (22 Kb) :.</a><br><br>

<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/es/"><img alt="Licencia de Creative Commons" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/88x31.png" /></a>

</center></p><br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=11]]></guid><pubDate><![CDATA[Tue, 10 Aug 2010 18:14:17 +0200]]></pubDate></item><item><title><![CDATA[Marlboro MotoGP Simulator]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=26]]></link><description><![CDATA[Este simulador de cuatro motocicletas de competición se diseñó y fabricó para la firma comercial <b>Marlboro</b> (<a href="http://www.philipmorrisinternational.com/" target="_blank">Philip & Morris</a>) y fue presentado durante las pruebas del <b>Campeonato Mundial de Motociclismo 2003</b>, celebrado en <i>Jerez de la Frontera</i> (Cádiz) el día 10 de Mayo de 2003. 
<br><br>

<center>
<div style="position: relative; width: 380px; height: 216px; overflow:hidden">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="2000" HEIGHT="2000" id="flashslide" ALIGN="">

<PARAM NAME=movie VALUE="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/moto.txt&img_path=moto&interval=3000&w=380&h=216"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=scale VALUE=noscale> 
<PARAM NAME=wmode VALUE=transparent> 
<PARAM NAME=bgcolor VALUE=#FFFFFF> 
<EMBED src="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/moto.txt&img_path=moto&interval=3000&w=380&h=216" quality=high 

scale=noscale wmode=transparent gcolor=#FFFFFF  WIDTH="2000" HEIGHT="2000" NAME="flashslide" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
</div></center>
<br>

Durante la gira, los patrocinadores organizaron multitud de competiciones con este <b>Marlboro MotoGP Simulator</b> como protagonista, premiando a los vencedores de cada ciudad con una <a href="http://www.ducati.com/" target="_blank">Ducati 749</a>, valorada en más de 18.000 €. Las principales competiciones se celebraron en:
<br><br>

<center>
<img src="multimedia/images/marlboro_spicy.jpg">
</center>
<br>

<span>
<font color=#0595AF><strong>Gira "Flavor of Racing" (Marlboro)</font></strong>
<br>
<span><u>España</u>: Barcelona, Jerez, Las Palmas de Gran Canaria y Valencia.<br><u>Portugal</u>: Lisboa, Tavira, Albufeira y Cascais.</span>
</span>

<span>
<br>
<font color=#0595AF><strong>Otros lugares</font></strong>
<br>
<span><u>Madrid</u>: Centro Comercial M40.<br>
<u>Bilbao</u>: BEC - P.I. de Navidad (Stand del Gob. Vasco).<br><br></span>
</span>
<br><br>

<center>
<iframe width="380" height="310" src="http://www.youtube.com/embed/u9zZFrmRtmY" frameborder="0" allowfullscreen></iframe>
</center>
<br>

Para el diseño inicial del simulador se utilizaron como base dos recreativas ManX-TT Twin de <a href="http://www.segaarcade.com/" target="_blank">SEGA</a> y se eliminaron las motocicletas originales para colocar cuatro réplicas de las <a href="http://www.ducati.com/" target="_blank">Ducati 749</a>. Además, se desarrolló por completo una simulación de los circuitos de Jerez, Mont Meló (Barcelona) y Cheste (Valencia) en 3D y creados de forma fiel al aspecto de los circuitos reales, para que los jugadores pudieran experimentar toda la emoción de correr virtualmente en ellos.
<br><br>

<center>
<table border="0">
<tr>
<td><img src="multimedia/images/marlboro_01.jpg" border="1" alt="" /></td>
<td><img src="multimedia/images/marlboro_02.jpg" border="1" alt="" /></td>
<td><img src="multimedia/images/marlboro_03.jpg" border="1" alt="" /></td>
</tr>
</table>
</center>
<br>

La simulación permitía unir a los cuatro jugadores para realizar una competición que era proyectada en una pantalla gigante, donde otro terminal hacía de realizador virtual de TV retransmitiendo los mejores momentos de la carrera.
<br>]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=26]]></guid><pubDate><![CDATA[Fri, 25 Feb 2005 13:11:44 +0100]]></pubDate></item><item><title><![CDATA[Clio V6 WRC Simulator]]></title><link><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=32]]></link><description><![CDATA[Este simulador de rallye fue diseñado bajo pedido para la firma comercial (<a href="http://www.amadeus.net/" target="_blank"><strong>Amadeus</strong></a>) y fue presentado durante la <strong>"<i>Convención de Agentes y Colaboradores de Amadeus</i>"</strong>, celebrada en <em>Palma de Mallorca</em> en el año 2.004.
<br><br>

<center>
<div style="position: relative; width: 380px; height: 285px; overflow:hidden">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="2000" HEIGHT="2000" id="flashslide" ALIGN="">

<PARAM NAME=movie VALUE="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/cliov6.txt&img_path=cliov6&interval=3000&w=380&h=285"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=scale VALUE=noscale> 
<PARAM NAME=wmode VALUE=transparent> 
<PARAM NAME=bgcolor VALUE=#FFFFFF> 
<EMBED src="multimedia/flashslide.swf?src=flash-here.com&imglist_fn=multimedia/cliov6.txt&img_path=cliov6&interval=3000&w=380&h=285" quality=high 

scale=noscale wmode=transparent gcolor=#FFFFFF  WIDTH="2000" HEIGHT="2000" NAME="flashslide" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
</div></center>
<br>

Este <b>Simulador Clio V6 WRC</b> es compatible con juegos comerciales, como <a href="http://www.codemasters.com/" target="_blank">Colin McRae</a>, ya que posee un sistema de control que emula los principales controles de juego: <i>pedales, volante, efecto de vibración, endurecimiento del volante, etc</i>. Su característica más espectacular es, sin duda, que la imagen del juego es proyectada <u>directamente sobre el cristal delantero</u> del vehículo, dando una espectacular sensación de inmersión y potenciando de esta forma la calidad de la simulación. Para conseguir esto último, el sistema de proyección posee una lente especialmente calculada y diseñada para corregir la forma del cristal y la perspectiva, adaptándola a una más real y creible.
<br><br>

<center>
<table border="0">
<tr>
<td><img src="multimedia/images/cliov6_01.jpg" border="1" alt="" /></td>
<td width=2%></td>
<td><img src="multimedia/images/cliov6_02.jpg" border="1" alt="" /></td>
<td width=2%></td>
<td><img src="multimedia/images/cliov6_03.jpg" border="1" alt="" /></td>
</tr>
</table>
</center>
<br>
]]></description><guid isPermaLink="true"><![CDATA[http://www.jesusdelatorre.com/showpost.php?&postID=32]]></guid><pubDate><![CDATA[Mon, 20 Sep 2004 19:22:15 +0200]]></pubDate></item></channel></rss>
