<?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/"
	>

<channel>
	<title>laciudadela.net</title>
	<atom:link href="http://www.laciudadela.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.laciudadela.net</link>
	<description>shades of cyborg</description>
	<lastBuildDate>Thu, 19 Jan 2012 17:48:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Sensor de humedad y temperatura con Arduino. Cuarta parte: Gadget para Windows 7</title>
		<link>http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-cuarta-parte-gadget-para-windows-7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sensor-de-humedad-y-temperatura-con-arduino-cuarta-parte-gadget-para-windows-7</link>
		<comments>http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-cuarta-parte-gadget-para-windows-7/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 14:29:26 +0000</pubDate>
		<dc:creator>peancor</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sensores]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Este artículo es una continuación de los siguientes:</p>
<ul>
<li><a href="http://www.laciudadela.net/content/2010-03-19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware">Sensor de humedad y temperatura con Arduino. Primera parte: El hardware.</a> </li>
<li><a href="http://www.laciudadela.net/content/2010-04-03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware">Sensor de humedad y temperatura con Arduino. Segunda parte: firmware.</a> </li>
<li><a href="http://www.laciudadela.net/content/2010-04-04/sensor-de-humedad-y-temperatura-con-arduino-tercera-parte-httprelay">Sensor de humedad y temperatura con Arduino. Tercera parte: HttpRelay.</a></li>
</ul>
<p>Utilizando la base desarrollada en artículos anteriores, se construyó un gadget para el escritorio de Windows 7 que nos muestra información sobre la temperatura y la humedad y cuyo aspecto se puede ver en la figura siguiente.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Gadget para Windows 7 para medición de Humedad y Temperatura con Arduino y sensor SHT15" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/sht-desktop-detail_3.png" border="0" alt="Gadget para Windows 7 para medición de Humedad y Temperatura con Arduino y sensor SHT15" width="509" height="434" /></p>
<p>Además del manifiesto que le define, el gadget está compuesto de Html/CSS, JavaScript e imágenes que definen su <em>background</em>. El siguiente <a href="http://msdn.microsoft.com/en-us/magazine/cc163370.aspx" target="_blank">artículo que explica como desarrollar un gadget para Windows</a> resultó muy útil.</p>
<p>Toda la lógica ha sido implementada en JavaScript utilizando <a href="http://jquery.com/" target="_blank">Jquery</a> y las <a href="http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery.html" target="_blank">APIs de visualización de Google</a>.</p>
<p>El gadget establece un timer que ejecutará una medición de forma periódica cada minuto utilizando ajax. Si la petición tiene éxito se ejecutará la función <em>measureReceived</em>.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="petición de medicion de temperatura y humedad ajax" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_3_1.png" border="0" alt="petición de medicion de temperatura y humedad ajax" width="281" height="118" /></p>
<p>En la función <em>measureReceived</em>, ejecutada después de cada medición, se actualizarán los valores de las medidas, así como del gráfico que representa su historia. También se calcularán y actualizarán los estadísticos valor medio, mínimo y máximo de la humedad y temperatura.</p>
<p>El código fuente se adjunta al artículo.</p> <a href="http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-cuarta-parte-gadget-para-windows-7/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Este artículo es una continuación de los siguientes:</p>
<ul>
<li><a href="http://www.laciudadela.net/content/2010-03-19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware">Sensor de humedad y temperatura con Arduino. Primera parte: El hardware.</a></li>
<li><a href="http://www.laciudadela.net/content/2010-04-03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware">Sensor de humedad y temperatura con Arduino. Segunda parte: firmware.</a></li>
<li><a href="http://www.laciudadela.net/content/2010-04-04/sensor-de-humedad-y-temperatura-con-arduino-tercera-parte-httprelay">Sensor de humedad y temperatura con Arduino. Tercera parte: HttpRelay.</a></li>
</ul>
<p>Utilizando la base desarrollada en artículos anteriores, se construyó un gadget para el escritorio de Windows 7 que nos muestra información sobre la temperatura y la humedad y cuyo aspecto se puede ver en la figura siguiente.</p>
<p><img style="display: inline; border: 0px;" title="Gadget para Windows 7 para medición de Humedad y Temperatura con Arduino y sensor SHT15" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/sht-desktop-detail_3.png" alt="Gadget para Windows 7 para medición de Humedad y Temperatura con Arduino y sensor SHT15" width="509" height="434" border="0" /></p>
<p>Además del manifiesto que le define, el gadget está compuesto de Html/CSS, JavaScript e imágenes que definen su <em>background</em>. El siguiente <a href="http://msdn.microsoft.com/en-us/magazine/cc163370.aspx" target="_blank">artículo que explica como desarrollar un gadget para Windows</a> resultó muy útil.</p>
<p>Toda la lógica ha sido implementada en JavaScript utilizando <a href="http://jquery.com/" target="_blank">Jquery</a> y las <a href="http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery.html" target="_blank">APIs de visualización de Google</a>.</p>
<p>El gadget establece un timer que ejecutará una medición de forma periódica cada minuto utilizando ajax. Si la petición tiene éxito se ejecutará la función <em>measureReceived</em>.</p>
<p><img style="display: inline; border: 0px;" title="petición de medicion de temperatura y humedad ajax" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_3_1.png" alt="petición de medicion de temperatura y humedad ajax" width="281" height="118" border="0" /></p>
<p>En la función <em>measureReceived</em>, ejecutada después de cada medición, se actualizarán los valores de las medidas, así como del gráfico que representa su historia. También se calcularán y actualizarán los estadísticos valor medio, mínimo y máximo de la humedad y temperatura.</p>
<p>El código fuente se adjunta al artículo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-cuarta-parte-gadget-para-windows-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sensor de humedad y temperatura con Arduino. Tercera parte: HttpRelay.</title>
		<link>http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-tercera-parte-httprelay/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sensor-de-humedad-y-temperatura-con-arduino-tercera-parte-httprelay</link>
		<comments>http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-tercera-parte-httprelay/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 14:02:14 +0000</pubDate>
		<dc:creator>peancor</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Este artículo es una continuación de los siguientes:</p>
<ul>
<li><a href="http://www.laciudadela.net/content/2010-03-19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware">Sensor de humedad y temperatura con Arduino. Primera parte: El hardware.</a></li>
<li><a href="http://www.laciudadela.net/content/2010-04-03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware">Sensor de humedad y temperatura con Arduino. Segunda parte: firmware.</a></li>
</ul>
<p>El acceso a través del puerto serie resulta inconveniente para el propósito de crear un gadget para el escritorio de Windows 7, por lo que se hace necesario escribir un pequeño programa que nos permita trasladar peticiones HTTP convencionales a peticiones a través del puerto serie. Se ha escrito dicho programa y se ha denominado <em>HttpRelay</em>.</p>
<p>&#160;<img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Diagrama de bloques de HttpRelay" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/HttpRelay-block-diagram_6.png" border="0" alt="Diagrama de bloques de HttpRelay" width="270" height="175" /></p>
<p>Dicho programa se queda residente como un icono en la barra de notificaciones encargándose de trasladar las peticiones HTTP GET a comandos a través del puerto serie que se haya configurado. De esta forma, podemos comunicarnos con el Arduino a través de HTTP.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="pantalla principal del programa HttpRelay" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/http-relay_3.png" border="0" alt="pantalla principal del programa HttpRelay" width="331" height="328" /></p>
<p>El programa se configura a través de un archivo <em>xml</em> que indica la URI en la que se debe escuchar y el puerto serie COM al que se delegará la respuesta, así como, la velocidad en bits por segundo a la que se debe utilizar el puerto.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="configuración xml del programa HttpRelay" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_3_0.png" border="0" alt="configuración xml del programa HttpRelay" width="298" height="111" /></p>
<p>El programa traslada al puerto serie el parámetro de query llamado ‘q’ por lo que si deseamos obtener mediciones de temperatura y humedad con la configuración anterior, utilizando el comando ‘g’ definido en el firmware, deberemos utilizar la URL: ‘http://localhost:8080/?q=g’</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_5.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1_2.png" border="0" alt="image" width="554" height="264" /></a></p>
<p>El programa <em>HttpRelay</em>, escrito en c#, utiliza la clase <a href="http://msdn.microsoft.com/es-es/library/system.net.httplistener(VS.80).aspx" target="_blank">HttpListener</a> para realizar la escucha en una URL determinada. Su código fuente se adjunta en este artículo.</p>
<ul>
</ul> <a href="http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-tercera-parte-httprelay/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Este artículo es una continuación de los siguientes:</p>
<ul>
<li><a href="http://www.laciudadela.net/content/2010-03-19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware">Sensor de humedad y temperatura con Arduino. Primera parte: El hardware.</a></li>
<li><a href="http://www.laciudadela.net/content/2010-04-03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware">Sensor de humedad y temperatura con Arduino. Segunda parte: firmware.</a></li>
</ul>
<p>El acceso a través del puerto serie resulta inconveniente para el propósito de crear un gadget para el escritorio de Windows 7, por lo que se hace necesario escribir un pequeño programa que nos permita trasladar peticiones HTTP convencionales a peticiones a través del puerto serie. Se ha escrito dicho programa y se ha denominado <em>HttpRelay</em>.</p>
<p><img style="display: inline; border: 0px;" title="Diagrama de bloques de HttpRelay" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/HttpRelay-block-diagram_6.png" alt="Diagrama de bloques de HttpRelay" width="270" height="175" border="0" /></p>
<p>Dicho programa se queda residente como un icono en la barra de notificaciones encargándose de trasladar las peticiones HTTP GET a comandos a través del puerto serie que se haya configurado. De esta forma, podemos comunicarnos con el Arduino a través de HTTP.</p>
<p><img style="display: inline; border: 0px;" title="pantalla principal del programa HttpRelay" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/http-relay_3.png" alt="pantalla principal del programa HttpRelay" width="331" height="328" border="0" /></p>
<p>El programa se configura a través de un archivo <em>xml</em> que indica la URI en la que se debe escuchar y el puerto serie COM al que se delegará la respuesta, así como, la velocidad en bits por segundo a la que se debe utilizar el puerto.</p>
<p><img style="display: inline; border: 0px;" title="configuración xml del programa HttpRelay" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_3_0.png" alt="configuración xml del programa HttpRelay" width="298" height="111" border="0" /></p>
<p>El programa traslada al puerto serie el parámetro de query llamado ‘q’ por lo que si deseamos obtener mediciones de temperatura y humedad con la configuración anterior, utilizando el comando ‘g’ definido en el firmware, deberemos utilizar la URL: ‘http://localhost:8080/?q=g’</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_5.png"><img style="display: inline; border: 0px;" title="image" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1_2.png" alt="image" width="554" height="264" border="0" /></a></p>
<p>El programa <em>HttpRelay</em>, escrito en c#, utiliza la clase <a href="http://msdn.microsoft.com/es-es/library/system.net.httplistener(VS.80).aspx" target="_blank">HttpListener</a> para realizar la escucha en una URL determinada. Su código fuente se adjunta en este artículo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2010/04/04/sensor-de-humedad-y-temperatura-con-arduino-tercera-parte-httprelay/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sensor de humedad y temperatura con Arduino. Segunda parte: firmware.</title>
		<link>http://www.laciudadela.net/2010/04/03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware</link>
		<comments>http://www.laciudadela.net/2010/04/03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 17:18:18 +0000</pubDate>
		<dc:creator>peancor</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>En un <a href="http://www.laciudadela.net/content/2010-03-19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware" target="_blank">artículo anterior se describió el hardware</a>. En este artículo nos centraremos en el programa que se ejecutará en el Arduino, también llamado <em>firmware</em>.</p>
<p>El programa de Arduino que utilizaremos para obtener la medición de temperatura y humedad del sensor SHT15 proporcionará un sencillo interface a través del puerto serie. Dicho programa está basado en el código de <a href="http://www.glacialwanderer.com/hobbyrobotics/?p=5" target="_blank">Hobby robotics</a>, aunque ha sido fuertemente modificado para adaptarse a nuestras necesidades.</p>
<p>En el principio del programa se definen las constantes que representan a cada uno de los comandos que utilizaremos del sensor, así como a los pines a los que están conectadas las líneas DATA y SCK del sensor. La función <em>shiftIn</em> nos permite leer un numero arbitrario de bits del sensor.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - constantes y helpers" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_3.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - constantes y helpers" width="437" height="348" /></p>
<p>La función <em>sendCommand</em> contiene toda la lógica que envía un comando al sensor SHT15 siguiendo el protocolo descrito en el artículo anterior.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - envío de comandos" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_8_0.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - envío de comandos" width="588" height="482" /></p>
<p>Después de enviar un comando es necesario esperar unas cuantas decenas de milisegundos a que se realice la medida. Una vez que la medida se ha completado, el sensor avisará poniendo la línea DATA a 0. El esperar el resultado de la medida, es el objetivo de la siguiente función.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - espera de resultados" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_9.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - espera de resultados" width="404" height="399" /></p>
<p>Por último, la función <em>getResult</em> obtiene el resultado de la medida del sensor siguiendo el protocolo descrito en el artículo anterior. Dicha medida se obtiene como un entero de 16 bits que será necesario procesar para obtener la medida en las unidades de humedad y temperatura.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - lectura de resultados" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_12.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - lectura de resultados" width="563" height="488" /></p>
<p>Ese es el objetivo de las siguientes funciones <em>printTemperature</em> y <em>printHumidity;</em> envían el comando correspondiente al sensor obteniendo el resultado como un entero de 16 bits, convierten dicho entero a un valor de temperatura en grados centígrados y a un valor de humedad relativa, imprimiendo dichos valores a través del puerto serie.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - impresión de resultados" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_15.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - impresión de resultados" width="462" height="450" /></p>
<p>La última parte del sketch de arduino es la configuración que simplemente establecerá el pin SCK como de salida y configurará el puerto serie a 9600 bps.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_17.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - configuración" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_5.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - configuración" width="278" height="106" /></a></p>
<p>y el bucle principal que define una serie de comandos para obtener la medición de la temperatura y la humedad. El comando que utilizaremos en artículos posteriores es el comando ‘g’. Al recibir una ‘g’ en ASCII por el puerto serie, el programa realizara mediciones de la temperatura y de la humedad y las imprimirá por el puerto serie separadas por el carácter ‘&#124;’ y finalizadas por ‘\r\n’.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_19.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - bucle principal" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_6.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - bucle principal" width="489" height="654" /></a></p>
<p>La implementación de dicho programa en el Arduino ya nos permite obtener los valores de temperatura y humedad utilizando un programa de terminal tal y como se muestra en la figura siguiente.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sensor de humedad y temperatura con arduino y SHT15 - resultados por consola serie" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_22.png" border="0" alt="Sensor de humedad y temperatura con arduino y SHT15 - resultados por consola serie" width="545" height="485" /></p>
<p>En un artículo posterior utilizaremos esta base para construir un gadget para el escritorio de Windows 7.</p> <a href="http://www.laciudadela.net/2010/04/03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En un <a href="http://www.laciudadela.net/content/2010-03-19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware" target="_blank">artículo anterior se describió el hardware</a>. En este artículo nos centraremos en el programa que se ejecutará en el Arduino, también llamado <em>firmware</em>.</p>
<p>El programa de Arduino que utilizaremos para obtener la medición de temperatura y humedad del sensor SHT15 proporcionará un sencillo interface a través del puerto serie. Dicho programa está basado en el código de <a href="http://www.glacialwanderer.com/hobbyrobotics/?p=5" target="_blank">Hobby robotics</a>, aunque ha sido fuertemente modificado para adaptarse a nuestras necesidades.</p>
<p>En el principio del programa se definen las constantes que representan a cada uno de los comandos que utilizaremos del sensor, así como a los pines a los que están conectadas las líneas DATA y SCK del sensor. La función <em>shiftIn</em> nos permite leer un numero arbitrario de bits del sensor.</p>
<p><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - constantes y helpers" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_3.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - constantes y helpers" width="437" height="348" border="0" /></p>
<p>La función <em>sendCommand</em> contiene toda la lógica que envía un comando al sensor SHT15 siguiendo el protocolo descrito en el artículo anterior.</p>
<p><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - envío de comandos" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_8_0.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - envío de comandos" width="588" height="482" border="0" /></p>
<p>Después de enviar un comando es necesario esperar unas cuantas decenas de milisegundos a que se realice la medida. Una vez que la medida se ha completado, el sensor avisará poniendo la línea DATA a 0. El esperar el resultado de la medida, es el objetivo de la siguiente función.</p>
<p><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - espera de resultados" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_9.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - espera de resultados" width="404" height="399" border="0" /></p>
<p>Por último, la función <em>getResult</em> obtiene el resultado de la medida del sensor siguiendo el protocolo descrito en el artículo anterior. Dicha medida se obtiene como un entero de 16 bits que será necesario procesar para obtener la medida en las unidades de humedad y temperatura.</p>
<p><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - lectura de resultados" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_12.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - lectura de resultados" width="563" height="488" border="0" /></p>
<p>Ese es el objetivo de las siguientes funciones <em>printTemperature</em> y <em>printHumidity;</em> envían el comando correspondiente al sensor obteniendo el resultado como un entero de 16 bits, convierten dicho entero a un valor de temperatura en grados centígrados y a un valor de humedad relativa, imprimiendo dichos valores a través del puerto serie.</p>
<p><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - impresión de resultados" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_15.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - impresión de resultados" width="462" height="450" border="0" /></p>
<p>La última parte del sketch de arduino es la configuración que simplemente establecerá el pin SCK como de salida y configurará el puerto serie a 9600 bps.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_17.png"><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - configuración" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_5.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - configuración" width="278" height="106" border="0" /></a></p>
<p>y el bucle principal que define una serie de comandos para obtener la medición de la temperatura y la humedad. El comando que utilizaremos en artículos posteriores es el comando ‘g’. Al recibir una ‘g’ en ASCII por el puerto serie, el programa realizara mediciones de la temperatura y de la humedad y las imprimirá por el puerto serie separadas por el carácter ‘|’ y finalizadas por ‘\r\n’.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_19.png"><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - bucle principal" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_6.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - bucle principal" width="489" height="654" border="0" /></a></p>
<p>La implementación de dicho programa en el Arduino ya nos permite obtener los valores de temperatura y humedad utilizando un programa de terminal tal y como se muestra en la figura siguiente.</p>
<p><img style="display: inline; border: 0px;" title="Sensor de humedad y temperatura con arduino y SHT15 - resultados por consola serie" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_22.png" alt="Sensor de humedad y temperatura con arduino y SHT15 - resultados por consola serie" width="545" height="485" border="0" /></p>
<p>En un artículo posterior utilizaremos esta base para construir un gadget para el escritorio de Windows 7.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2010/04/03/sensor-de-humedad-y-temperatura-con-arduino-segunda-parte-firmware/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sensor de humedad y temperatura con Arduino. Primera parte: El hardware.</title>
		<link>http://www.laciudadela.net/2010/03/19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware</link>
		<comments>http://www.laciudadela.net/2010/03/19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 15:07:25 +0000</pubDate>
		<dc:creator>peancor</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Electrónica]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Utilizamos un sensor de temperatura y humedad <a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/datasheets/SHT1x_datasheet.pdf" target="_blank">SHT15</a> y un Arduino. El interface de datos con el sensor requiere únicamente de 2 pines, un pin de reloj (SCK) y un pin de datos (DATA).</p>  <p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="esquemático arduino con SHT15" border="0" alt="esquemático arduino con SHT15" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_27.png" width="358" height="374" /> </p>  <p>El interface con el sensor consiste de lógica estática y por lo tanto no existe una frecuencia de reloj mínima. El pin de datos triestado es utilizado para escribir y leer datos del sensor. Los datos se validan en el pulso de subida del reloj y deben permanecer estables mientras el reloj esté en estado alto. </p>  <p>En el datasheet del sensor se muestran las frecuencias máximas de operación que soporta el sensor, sin embargo, los comandos para modificar los pins del arduino imponen la suficiente sobrecarga para que en este caso no nos tengamos que preocupar de sobrepasarlas, y por lo tanto, no es necesario introducir ningún retraso a la hora de modificar los pins del interface para operar con el sensor.</p>  <p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="foto de la conexión sensor SHT15 a Arduino" border="0" alt="foto de la conexión sensor SHT15 a Arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_30.png" width="507" height="382" /> </p>  <p>En las siguientes figuras se muestra una traza del comando para medir la temperatura. El trazo superior de la figura representa el reloj (SCK) y el inferior los datos (DATA). El comando para medir la humedad es muy parecido por lo que solo se ilustrará el de temperatura.</p>  <p>La secuencia para enviar un comando consiste en poner DATA a 0 mientras SCK es 1, seguido por un pulso de reloj de 1 a 0 y de 0 a 1 para a continuación poner de nuevo DATA a 1 con SCK aún a 1.</p>  <p>Posteriormente a la secuencia de inicio de comando se envían 3 bits de dirección (que deben ser 000) y 5 bits de comando, que en el caso del comando para medir la temperatura son 00011.</p>  <p>El sensor indica la correcta recepción del comando estableciendo DATA a 0 durante la parte activa del siguiente pulso del reloj y liberando la línea en la caída de dicho pulso lo cual hace que DATA quede a 1 después del noveno pulso de reloj. A partir de ese momento el sensor realiza la medida, que tardara unas decenas de milisegundos. El sensor avisará de que ha completado la medida estableciendo DATA a 0.</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Traza lógica del envio de un comando al sensor de temperatura y humedad SHT15" border="0" alt="Traza lógica del envio de un comando al sensor de temperatura y humedad SHT15" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_13.png" width="452" height="109" /> </p>  <p>En el momento que DATA vale 0 podemos proceder a leer los datos de la medida realizada por el sensor.</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="traza lógica de la lectura de datos de temperatura sensor SHT15 con arduino" border="0" alt="traza lógica de la lectura de datos de temperatura sensor SHT15 con arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_6_0.png" width="488" height="109" /> </p>  <p>Se lee el primer byte, que en el caso anterior corresponde a 00011000 = 0x18 y se envía un ACK poniendo la línea de datos a cero durante el siguiente pulso de reloj. A continuación se lee el segundo byte correspondiente a 00011010 = 0x1A y en este caso no enviamos un ACK debido a que no vamos a utilizar el CRC que nos podría enviar el sensor como un tercer byte si le diéramos un ACK. El mantener DATA activo después de leer el segundo byte indica al sensor que hemos terminado y le permite pasar a modo SLEEP.</p>  <p>Después de leer el valor hexadecimal 0x181A que equivale a 6170 obtenemos la temperatura mediante la siguiente fórmula: T= –40.1 + 6170 * 0.01 = 21.6ºC</p> <a href="http://www.laciudadela.net/2010/03/19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Utilizamos un sensor de temperatura y humedad <a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/datasheets/SHT1x_datasheet.pdf" target="_blank">SHT15</a> y un Arduino. El interface de datos con el sensor requiere únicamente de 2 pines, un pin de reloj (SCK) y un pin de datos (DATA).</p>
<p><img style="display: inline; border-width: 0px;" title="esquemático arduino con SHT15" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_27.png" alt="esquemático arduino con SHT15" width="358" height="374" border="0" /></p>
<p>El interface con el sensor consiste de lógica estática y por lo tanto no existe una frecuencia de reloj mínima. El pin de datos triestado es utilizado para escribir y leer datos del sensor. Los datos se validan en el pulso de subida del reloj y deben permanecer estables mientras el reloj esté en estado alto.</p>
<p>En el datasheet del sensor se muestran las frecuencias máximas de operación que soporta el sensor, sin embargo, los comandos para modificar los pins del arduino imponen la suficiente sobrecarga para que en este caso no nos tengamos que preocupar de sobrepasarlas, y por lo tanto, no es necesario introducir ningún retraso a la hora de modificar los pins del interface para operar con el sensor.</p>
<p><img style="display: inline; border-width: 0px;" title="foto de la conexión sensor SHT15 a Arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_30.png" alt="foto de la conexión sensor SHT15 a Arduino" width="507" height="382" border="0" /></p>
<p>En las siguientes figuras se muestra una traza del comando para medir la temperatura. El trazo superior de la figura representa el reloj (SCK) y el inferior los datos (DATA). El comando para medir la humedad es muy parecido por lo que solo se ilustrará el de temperatura.</p>
<p>La secuencia para enviar un comando consiste en poner DATA a 0 mientras SCK es 1, seguido por un pulso de reloj de 1 a 0 y de 0 a 1 para a continuación poner de nuevo DATA a 1 con SCK aún a 1.</p>
<p>Posteriormente a la secuencia de inicio de comando se envían 3 bits de dirección (que deben ser 000) y 5 bits de comando, que en el caso del comando para medir la temperatura son 00011.</p>
<p>El sensor indica la correcta recepción del comando estableciendo DATA a 0 durante la parte activa del siguiente pulso del reloj y liberando la línea en la caída de dicho pulso lo cual hace que DATA quede a 1 después del noveno pulso de reloj. A partir de ese momento el sensor realiza la medida, que tardara unas decenas de milisegundos. El sensor avisará de que ha completado la medida estableciendo DATA a 0.</p>
<p><img style="display: inline; border: 0px;" title="Traza lógica del envio de un comando al sensor de temperatura y humedad SHT15" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_13.png" alt="Traza lógica del envio de un comando al sensor de temperatura y humedad SHT15" width="452" height="109" border="0" /></p>
<p>En el momento que DATA vale 0 podemos proceder a leer los datos de la medida realizada por el sensor.</p>
<p><img style="display: inline; border: 0px;" title="traza lógica de la lectura de datos de temperatura sensor SHT15 con arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_6_0.png" alt="traza lógica de la lectura de datos de temperatura sensor SHT15 con arduino" width="488" height="109" border="0" /></p>
<p>Se lee el primer byte, que en el caso anterior corresponde a 00011000 = 0&#215;18 y se envía un ACK poniendo la línea de datos a cero durante el siguiente pulso de reloj. A continuación se lee el segundo byte correspondiente a 00011010 = 0x1A y en este caso no enviamos un ACK debido a que no vamos a utilizar el CRC que nos podría enviar el sensor como un tercer byte si le diéramos un ACK. El mantener DATA activo después de leer el segundo byte indica al sensor que hemos terminado y le permite pasar a modo SLEEP.</p>
<p>Después de leer el valor hexadecimal 0x181A que equivale a 6170 obtenemos la temperatura mediante la siguiente fórmula: T= –40.1 + 6170 * 0.01 = 21.6ºC</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2010/03/19/sensor-de-humedad-y-temperatura-con-arduino-primera-parte-el-hardware/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Control de led RGB con arduino</title>
		<link>http://www.laciudadela.net/2010/01/16/control-de-led-rgb-con-arduino/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=control-de-led-rgb-con-arduino</link>
		<comments>http://www.laciudadela.net/2010/01/16/control-de-led-rgb-con-arduino/#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>El modelo de <a href="http://www.dealextreme.com/details.dx/sku.20999" target="_blank">led RGB utilizado</a> teóricamente soporta hasta 5W y proporciona 70 lúmenes, sin embargo, en el circuito implementado, se controlará a una potencia mucho menor con una corriente máxima aproximada por color de 60ma. Aún así, esa corriente es demasiada para los puertos del arduino, por lo que se hace necesario intercalar un circuito controlador que soporte corrientes de esa magnitud.</p>
<p>El circuito controlador elegido es el chip <a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/ULN2003AN.pdf" target="_blank">ULN2003AN</a> que utilizamos a modo de relé para encender y apagar cada led.</p>
<p>El led tiene cuatro puertos, un ánodo común y un cátodo para cada uno de los colores: rojo, verde y azul. Al combinarse estos colores en distintas proporciones podemos crear la sensación de estar viendo casi cualquier color.</p>
<p>El esquema de circuito se muestra en la siguiente figura:</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/esquema_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="esquema para el control de led rgb utilizando arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/esquema_thumb.png" border="0" alt="esquema para el control de led rgb utilizando arduino" width="417" height="484" /></a></p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/foto%20control%20led%20rgb%20con%20arduino_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="foto control led rgb con arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/foto%20control%20led%20rgb%20con%20arduino_thumb.jpg" border="0" alt="foto control led rgb con arduino" width="429" height="323" /></a></p>
<p>El sketch Arduino le programa para recibir mensajes de cambio de color del led vía el puerto serie en un formato ‘COLOR R G B’. Una vez recibido el mensaje utiliza la función analogWrite para controlar la corriente que circulara cada led <a href="http://es.wikipedia.org/wiki/Modulaci%C3%B3n_por_ancho_de_pulsos" target="_blank">vía modulación de anchura de pulso (PWM)</a>.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_4_1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sketch en arduino para el control de leds rgb" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1_1.png" border="0" alt="sketch en arduino para el control de leds rgb" width="470" height="712" /></a></p>
<p>Posteriormente se realizo un programa en .NET que permite especificar el color del led de una forma amigable. El siguiente video muestra el resultado:</p>
<p>
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/DIfRKhk26TY&#38;hl=es_ES&#38;fs=1&#38;" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/DIfRKhk26TY&#38;hl=es_ES&#38;fs=1&#38;" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>
</p>
<p>Se adjunta un archivo con el código del sketch arduino y el programa de .NET.</p> <a href="http://www.laciudadela.net/2010/01/16/control-de-led-rgb-con-arduino/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>El modelo de <a href="http://www.dealextreme.com/details.dx/sku.20999" target="_blank">led RGB utilizado</a> teóricamente soporta hasta 5W y proporciona 70 lúmenes, sin embargo, en el circuito implementado, se controlará a una potencia mucho menor con una corriente máxima aproximada por color de 60ma. Aún así, esa corriente es demasiada para los puertos del arduino, por lo que se hace necesario intercalar un circuito controlador que soporte corrientes de esa magnitud.</p>
<p>El circuito controlador elegido es el chip <a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/ULN2003AN.pdf" target="_blank">ULN2003AN</a> que utilizamos a modo de relé para encender y apagar cada led.</p>
<p>El led tiene cuatro puertos, un ánodo común y un cátodo para cada uno de los colores: rojo, verde y azul. Al combinarse estos colores en distintas proporciones podemos crear la sensación de estar viendo casi cualquier color.</p>
<p>El esquema de circuito se muestra en la siguiente figura:</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/esquema_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="esquema para el control de led rgb utilizando arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/esquema_thumb.png" border="0" alt="esquema para el control de led rgb utilizando arduino" width="417" height="484" /></a></p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/foto%20control%20led%20rgb%20con%20arduino_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="foto control led rgb con arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/foto%20control%20led%20rgb%20con%20arduino_thumb.jpg" border="0" alt="foto control led rgb con arduino" width="429" height="323" /></a></p>
<p>El sketch Arduino le programa para recibir mensajes de cambio de color del led vía el puerto serie en un formato ‘COLOR R G B’. Una vez recibido el mensaje utiliza la función analogWrite para controlar la corriente que circulara cada led <a href="http://es.wikipedia.org/wiki/Modulaci%C3%B3n_por_ancho_de_pulsos" target="_blank">vía modulación de anchura de pulso (PWM)</a>.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_4_1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sketch en arduino para el control de leds rgb" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1_1.png" border="0" alt="sketch en arduino para el control de leds rgb" width="470" height="712" /></a></p>
<p>Posteriormente se realizo un programa en .NET que permite especificar el color del led de una forma amigable. El siguiente video muestra el resultado:</p>
<p>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/DIfRKhk26TY&amp;hl=es_ES&amp;fs=1&amp;" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/DIfRKhk26TY&amp;hl=es_ES&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</p>
<p>Se adjunta un archivo con el código del sketch arduino y el programa de .NET.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2010/01/16/control-de-led-rgb-con-arduino/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Control de servomotores con Arduino y WPF</title>
		<link>http://www.laciudadela.net/2009/12/20/control-de-servomotores-con-arduino-y-wpf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=control-de-servomotores-con-arduino-y-wpf</link>
		<comments>http://www.laciudadela.net/2009/12/20/control-de-servomotores-con-arduino-y-wpf/#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Actuadores]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Cibernética]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Ingeniería]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Los <a href="http://es.wikipedia.org/wiki/Servomotor_de_modelismo" target="_blank">servomotores</a> son motores que integran una circuitería de control que permiten posicionar su eje dentro de un rango. Típicamente los servomotores permiten posicionar el eje con precisión dentro de un rango angular de 0 a 180 grados aproximadamente.</p>
<p>Constan de tres señales de entrada: alimentación, referencia, y señal de control. Utilizando la señal de control se puede posicionar el motor dentro del rango. El control se realiza a través de pulsos de duración determinada de la señal de control. Por ejemplo, para posicionar un servomotor controlado con pulsos de 1msg a 2msg de rango 0-180 grados a 90 grados necesitaríamos suministrar a la señal de control un pulso de 1.5msg de duración.</p>
<p>Se conecta el control del servomotor a la salida digital número 9 del Arduino que programaremos para recibir mensajes de posicionamiento a través del puerto serie, interpretarles y posicionar el servomotor. Para ello utilizaremos las librerías de control de servos (Servo) y de delimitación de mensajes del puerto serie (Messenger).</p>
<p>La inicialización del programa del Arduino se muestra en la siguiente figura donde simplemente indicamos a la librería de control de servos que se utilizará el pin 9 para el control, inicializamos el puerto serie a 115200 baudios e inicializamos la librería de procesado de mensajes.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="inicialización control servomotor arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_2.png" border="0" alt="inicialización control servomotor arduino" width="255" height="230" /></a></p>
<p>Dentro del bucle principal simplemente se leerá el puerto serie esperando mensajes de la forma ‘SERVO n’ donde n es un número de 0 a 178 que indica el ángulo en grados donde se desea posicionar el motor. Una vez interpretado el mensaje satisfactoriamente se posicionara el servomotor y se añadirá un pequeño retraso de 15msg que permita al servomotor posicionarse antes de recibir otra orden.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_4_0.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bucle principal control servomotor arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1_0.png" border="0" alt="bucle principal control servomotor arduino" width="489" height="401" /></a>&#160;</p>
<p>Para la aplicación WPF diseñaremos una clase con una única propiedad que permita establecer la posición del servo. Haremos que dicha propiedad sea ‘Bindable’ para poderla enlazar de forma natural con los controles de interface gráfico.</p>
<p>La parte principal de dicha clase se muestra en la figura siguiente:</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clase controladora de servomotor en .net" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_2_0.png" border="0" alt="clase controladora de servomotor en .net" width="543" height="346" /></a></p>
<p>y se creará un interface gráfico para el control en XAML enlazando a dicha propiedad de la siguiente manera:</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xaml para el interface gráfico del control de servomotores con arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_3.png" border="0" alt="xaml para el interface gráfico del control de servomotores con arduino" width="518" height="226" /></a></p>
<p>El resultado se puede ver en el siguiente video. El código fuente de ambos programas se adjunta en el artículo:</p>
<p>
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/2b9s11eihog&#38;hl=es_ES&#38;fs=1&#38;" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/2b9s11eihog&#38;hl=es_ES&#38;fs=1&#38;" allowfullscreen="true" allowscriptaccess="always"></embed>
</object>
</p> <a href="http://www.laciudadela.net/2009/12/20/control-de-servomotores-con-arduino-y-wpf/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Los <a href="http://es.wikipedia.org/wiki/Servomotor_de_modelismo" target="_blank">servomotores</a> son motores que integran una circuitería de control que permiten posicionar su eje dentro de un rango. Típicamente los servomotores permiten posicionar el eje con precisión dentro de un rango angular de 0 a 180 grados aproximadamente.</p>
<p>Constan de tres señales de entrada: alimentación, referencia, y señal de control. Utilizando la señal de control se puede posicionar el motor dentro del rango. El control se realiza a través de pulsos de duración determinada de la señal de control. Por ejemplo, para posicionar un servomotor controlado con pulsos de 1msg a 2msg de rango 0-180 grados a 90 grados necesitaríamos suministrar a la señal de control un pulso de 1.5msg de duración.</p>
<p>Se conecta el control del servomotor a la salida digital número 9 del Arduino que programaremos para recibir mensajes de posicionamiento a través del puerto serie, interpretarles y posicionar el servomotor. Para ello utilizaremos las librerías de control de servos (Servo) y de delimitación de mensajes del puerto serie (Messenger).</p>
<p>La inicialización del programa del Arduino se muestra en la siguiente figura donde simplemente indicamos a la librería de control de servos que se utilizará el pin 9 para el control, inicializamos el puerto serie a 115200 baudios e inicializamos la librería de procesado de mensajes.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="inicialización control servomotor arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_2.png" border="0" alt="inicialización control servomotor arduino" width="255" height="230" /></a></p>
<p>Dentro del bucle principal simplemente se leerá el puerto serie esperando mensajes de la forma ‘SERVO n’ donde n es un número de 0 a 178 que indica el ángulo en grados donde se desea posicionar el motor. Una vez interpretado el mensaje satisfactoriamente se posicionara el servomotor y se añadirá un pequeño retraso de 15msg que permita al servomotor posicionarse antes de recibir otra orden.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_4_0.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bucle principal control servomotor arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1_0.png" border="0" alt="bucle principal control servomotor arduino" width="489" height="401" /></a>&nbsp;</p>
<p>Para la aplicación WPF diseñaremos una clase con una única propiedad que permita establecer la posición del servo. Haremos que dicha propiedad sea ‘Bindable’ para poderla enlazar de forma natural con los controles de interface gráfico.</p>
<p>La parte principal de dicha clase se muestra en la figura siguiente:</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clase controladora de servomotor en .net" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_2_0.png" border="0" alt="clase controladora de servomotor en .net" width="543" height="346" /></a></p>
<p>y se creará un interface gráfico para el control en XAML enlazando a dicha propiedad de la siguiente manera:</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xaml para el interface gráfico del control de servomotores con arduino" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_3.png" border="0" alt="xaml para el interface gráfico del control de servomotores con arduino" width="518" height="226" /></a></p>
<p>El resultado se puede ver en el siguiente video. El código fuente de ambos programas se adjunta en el artículo:</p>
<p>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/2b9s11eihog&amp;hl=es_ES&amp;fs=1&amp;" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/2b9s11eihog&amp;hl=es_ES&amp;fs=1&amp;" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2009/12/20/control-de-servomotores-con-arduino-y-wpf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Termómetro con Arduino</title>
		<link>http://www.laciudadela.net/2009/12/16/termómetro-con-arduino/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=term%C3%B3metro-con-arduino</link>
		<comments>http://www.laciudadela.net/2009/12/16/termómetro-con-arduino/#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sensores]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Utilizando un Arduino y el chip sensor de temperatura <a href="http://oomlout.com/ARDX/ZZ-DATA/TMP36.pdf" target="_blank">TMP36</a> se construye un sencillo termómetro tal y como se propone en el circuito diez de la <a href="http://www.adafruit.com/index.php?main_page=product_info&#38;cPath=17&#38;products_id=170&#38;zenid=bb5442d0730420f91821f153c5b3babf" target="_blank">guía de experimentación de adafruit</a>. </p>  <p>El circuito es extremadamente sencillo, basta conectar los pins de alimentación y referencia del sensor para alimentarle, y que de esta forma nos proporcione en su otro pin un voltaje proporcional a la temperatura, el cual leeremos a través de la entrada analógica número 0 del Arduino, cuyo ADC nos proporciona una resolución de 10 bits.</p>  <p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-arduino-montaje_6.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="termometro-arduino-montaje" border="0" alt="termometro-arduino-montaje" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-arduino-montaje_thumb_2.jpg" width="504" height="396" /></a></p>  <p>El <a href="http://www.oomlout.com/ARDX/CIRC10/CIRC10-code.txt" target="_blank">programa cargado en el Arduino</a> es simplemente un bucle que cada segundo lee el voltaje de la entrada analógica y le convierte en un valor de temperatura utilizando las indicaciones de la <a href="http://oomlout.com/ARDX/ZZ-DATA/TMP36.pdf" target="_blank">hoja de características del sensor</a>, enviando posteriormente este valor por el puerto serie.</p>  <p>El programa de PC leerá de forma continua los valores de temperatura que le vayan llegando por el puerto serie virtual (USB) y representándoles en pantalla. Su código principal es el siguiente (<em>Aplicacion WPF en C#</em>):</p>  <p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1.png" width="509" height="409" /></a> </p>  <p>Con lo cual podremos leer en la pantalla del PC el valor de temperatura procedente del sensor, el cual se actualizará cada segundo.</p>  <p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-pc_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="termometro-pc" border="0" alt="termometro-pc" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-pc_thumb.png" width="244" height="133" /></a></p> <a href="http://www.laciudadela.net/2009/12/16/termómetro-con-arduino/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Utilizando un Arduino y el chip sensor de temperatura <a href="http://oomlout.com/ARDX/ZZ-DATA/TMP36.pdf" target="_blank">TMP36</a> se construye un sencillo termómetro tal y como se propone en el circuito diez de la <a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=17&amp;products_id=170&amp;zenid=bb5442d0730420f91821f153c5b3babf" target="_blank">guía de experimentación de adafruit</a>. </p>
<p>El circuito es extremadamente sencillo, basta conectar los pins de alimentación y referencia del sensor para alimentarle, y que de esta forma nos proporcione en su otro pin un voltaje proporcional a la temperatura, el cual leeremos a través de la entrada analógica número 0 del Arduino, cuyo ADC nos proporciona una resolución de 10 bits.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-arduino-montaje_6.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="termometro-arduino-montaje" border="0" alt="termometro-arduino-montaje" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-arduino-montaje_thumb_2.jpg" width="504" height="396" /></a></p>
<p>El <a href="http://www.oomlout.com/ARDX/CIRC10/CIRC10-code.txt" target="_blank">programa cargado en el Arduino</a> es simplemente un bucle que cada segundo lee el voltaje de la entrada analógica y le convierte en un valor de temperatura utilizando las indicaciones de la <a href="http://oomlout.com/ARDX/ZZ-DATA/TMP36.pdf" target="_blank">hoja de características del sensor</a>, enviando posteriormente este valor por el puerto serie.</p>
<p>El programa de PC leerá de forma continua los valores de temperatura que le vayan llegando por el puerto serie virtual (USB) y representándoles en pantalla. Su código principal es el siguiente (<em>Aplicacion WPF en C#</em>):</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/image_thumb_1.png" width="509" height="409" /></a> </p>
<p>Con lo cual podremos leer en la pantalla del PC el valor de temperatura procedente del sensor, el cual se actualizará cada segundo.</p>
<p><a href="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-pc_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="termometro-pc" border="0" alt="termometro-pc" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/termometro-pc_thumb.png" width="244" height="133" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2009/12/16/termómetro-con-arduino/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sincronización en la escala pentatónica</title>
		<link>http://www.laciudadela.net/2009/10/03/sincronización-en-la-escala-pentatónica/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sincronizaci%C3%B3n-en-la-escala-pentat%C3%B3nica</link>
		<comments>http://www.laciudadela.net/2009/10/03/sincronización-en-la-escala-pentatónica/#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Psicología]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>En el siguiente extracto de la conferencia <strong>‘Notes &#38; Neurons: a la busqueda de un coro común’</strong> Bobby McFerring demuestra la capacidad de la gente del auditorio de sincronizarse en la escala pentatónica a través de una metáfora espacial.</p> <object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5732745&#38;server=vimeo.com&#38;show_title=1&#38;show_byline=1&#38;show_portrait=1&#38;color=&#38;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5732745&#38;server=vimeo.com&#38;show_title=1&#38;show_byline=1&#38;show_portrait=1&#38;color=&#38;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>  <p><a href="http://vimeo.com/5732745">World Science Festival 2009: Bobby McFerrin Demonstrates the Power of the Pentatonic Scale</a> from <a href="http://vimeo.com/user1103909">World Science Festival</a> on <a href="http://vimeo.com">Vimeo</a>.</p> <a href="http://www.laciudadela.net/2009/10/03/sincronización-en-la-escala-pentatónica/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En el siguiente extracto de la conferencia <strong>‘Notes &amp; Neurons: a la busqueda de un coro común’</strong> Bobby McFerring demuestra la capacidad de la gente del auditorio de sincronizarse en la escala pentatónica a través de una metáfora espacial.</p>
<p> <object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5732745&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5732745&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5732745">World Science Festival 2009: Bobby McFerrin Demonstrates the Power of the Pentatonic Scale</a> from <a href="http://vimeo.com/user1103909">World Science Festival</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2009/10/03/sincronización-en-la-escala-pentatónica/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Transiciones con efecto disolver en Silverlight 3</title>
		<link>http://www.laciudadela.net/2009/07/18/transiciones-con-efecto-disolver-en-silverlight-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=transiciones-con-efecto-disolver-en-silverlight-3</link>
		<comments>http://www.laciudadela.net/2009/07/18/transiciones-con-efecto-disolver-en-silverlight-3/#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>El efecto de transición entre imágenes disolver o ‘dissolve’ consiste en una interpolación desde la imagen inicial hasta la imagen final en un periodo de tiempo determinado.</p>
<p>Para ello se definirá un parámetro t, que representa el progreso de la transición y cuyo rango es de 0 a 1. Un valor de cero significa que la transición aún no ha comenzado, es decir, aún se muestra completamente la imagen de origen, mientras que un valor de 1 significa que se ha completado el 100% de la transición, es decir, se mostrará la imagen de destino. Un valor de 0.5 significaría que la transición está al 50% por lo que se mostraría una mezcla a partes iguales de la imagen de origen y la imagen de destino.</p>
<p>Para su implementación se utilizará un WriteableBitmap. Los pixeles de un WriteableBitmap en Silverlight se representan como valores pargb lo que implica que el canal alpha, encargado de representar el nivel de opacidad, debe ir premultiplicado por lo que para representar un color rojo 50% transparente el pixel debería contener los valores [0.5,0.5,0,0]. De todas formas, para el caso que nos ocupa simplemente realizaremos la interpolación entre cada uno de los componentes de cada pixel de la imagen.</p>
<p>Si representamos cada pixel como un vector de cuatro componentes, siendo <strong>tr</strong> el vector que representa a un pixel de la transición, <strong>o</strong> a uno de la imagen de origen y <strong>d</strong> a uno de la imagen de destino el calculo de cada uno de los pixeles de la transición para un <em>t</em> dado se realiza mediante la siguiente expresión:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/clip_image002_e09df384-f699-4013-a508-1a7469c7aa58.gif" border="0" alt="clip_image002" width="172" height="25" /></p>
<p>siendo x,y las coordenadas del pixel.</p>
<p>El siguiente programa en Silverlight muestra el efecto de transición con dos imagenes predefinidas.</p>
<p>
<object id="SilverlightPlugin1" width="600" height="500" type="application/x-silverlight-2" data="data:application/x-silverlight-2,">
<param name="source" value="http://www.laciudadela.net/wp-content/uploads/2007-2011/2009-07-dissolve-effect.xap" />
<param name="minRuntimeVersion" value="3.0.40818.0" />
<param name="autoUpgrade" value="true" /> <a style="text-decoration: none;" href="http://go.microsoft.com/fwlink/?LinkID=149156"> <img style="border-style: none" src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" /> </a>
</object>
</p>
<p>El código fuente del programa se encuentra adjunto al artículo.</p> <a href="http://www.laciudadela.net/2009/07/18/transiciones-con-efecto-disolver-en-silverlight-3/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>El efecto de transición entre imágenes disolver o ‘dissolve’ consiste en una interpolación desde la imagen inicial hasta la imagen final en un periodo de tiempo determinado.</p>
<p>Para ello se definirá un parámetro t, que representa el progreso de la transición y cuyo rango es de 0 a 1. Un valor de cero significa que la transición aún no ha comenzado, es decir, aún se muestra completamente la imagen de origen, mientras que un valor de 1 significa que se ha completado el 100% de la transición, es decir, se mostrará la imagen de destino. Un valor de 0.5 significaría que la transición está al 50% por lo que se mostraría una mezcla a partes iguales de la imagen de origen y la imagen de destino.</p>
<p>Para su implementación se utilizará un WriteableBitmap. Los pixeles de un WriteableBitmap en Silverlight se representan como valores pargb lo que implica que el canal alpha, encargado de representar el nivel de opacidad, debe ir premultiplicado por lo que para representar un color rojo 50% transparente el pixel debería contener los valores [0.5,0.5,0,0]. De todas formas, para el caso que nos ocupa simplemente realizaremos la interpolación entre cada uno de los componentes de cada pixel de la imagen.</p>
<p>Si representamos cada pixel como un vector de cuatro componentes, siendo <strong>tr</strong> el vector que representa a un pixel de la transición, <strong>o</strong> a uno de la imagen de origen y <strong>d</strong> a uno de la imagen de destino el calculo de cada uno de los pixeles de la transición para un <em>t</em> dado se realiza mediante la siguiente expresión:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" src="http://www.laciudadela.net/wp-content/uploads/2007-2011/clip_image002_e09df384-f699-4013-a508-1a7469c7aa58.gif" border="0" alt="clip_image002" width="172" height="25" /></p>
<p>siendo x,y las coordenadas del pixel.</p>
<p>El siguiente programa en Silverlight muestra el efecto de transición con dos imagenes predefinidas.</p>
<p>
<object id="SilverlightPlugin1" width="600" height="500" type="application/x-silverlight-2" data="data:application/x-silverlight-2,"><param name="source" value="http://www.laciudadela.net/wp-content/uploads/2007-2011/2009-07-dissolve-effect.xap" /><param name="minRuntimeVersion" value="3.0.40818.0" /><param name="autoUpgrade" value="true" /><a style="text-decoration: none;" href="http://go.microsoft.com/fwlink/?LinkID=149156"> <img style="border-style: none" src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" /> </a><br />
</object>
</p>
<p>El código fuente del programa se encuentra adjunto al artículo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2009/07/18/transiciones-con-efecto-disolver-en-silverlight-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mapas de bits dinámicos en Silverlight</title>
		<link>http://www.laciudadela.net/2009/07/16/mapas-de-bits-dinámicos-en-silverlight/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mapas-de-bits-din%C3%A1micos-en-silverlight</link>
		<comments>http://www.laciudadela.net/2009/07/16/mapas-de-bits-dinámicos-en-silverlight/#comments</comments>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[<p>Una de las novedades introducidas en la versión 3 de Silverlight es la clase <em>WriteableBitmap</em> que nos permite la generación dinámica de mapas de bits o bitmaps.</p>
<p>Su funcionamiento es muy sencillo, basta con pasar en el constructor el número de pixels de ancho y de alto que queremos que tenga la imagen para generarla y una vez generada podemos acceder a su contenido a través de la propiedad <em>Pixels</em>.</p>
<p>En el siguiente fragmento de código se construye un bitmap de 320x200 pixels y se establece el pixel en la posición (x, y) al color (r,g,b). Una vez modificado el bitmap se debe llamar a la función <em>Invalidate</em> para actualizar su contenido.</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum1" style="color: #606060">   1:</span> var bitmap = <span style="color: #0000ff">new</span> WriteableBitmap(320,200);</pre>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum2" style="color: #606060">   2:</span> var pixelColor = BitConverter.ToInt32(<span style="color: #0000ff">new</span> <span style="color: #0000ff">byte</span>[] { (<span style="color: #0000ff">byte</span>)b, (<span style="color: #0000ff">byte</span>)g, (<span style="color: #0000ff">byte</span>)r, 255 }, 0)</pre>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum3" style="color: #606060">   3:</span> bitmap.Pixels[x + y * bitmap.PixelWidth] = pixelColor;</pre>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum4" style="color: #606060">   4:</span> bitmap.Invalidate();</pre>
</div>
</div>
<p>Por supuesto es necesario asignar el bitmap a la propiedad <em>Source</em> de un control <em>Image</em> para representarle en pantalla.</p>
<p>Una funcionalidad interesante añadida es el método <em>Render</em> que permite representar en el bitmap un control gráfico descendiente de <em>UIElement</em> después de aplicarle una transformación (rotación,escala,posición) lo que abre la puerta a la generación de interesantes efectos.</p>
<p>La siguiente ilustración muestra la generación dinámica de <em>bitmaps. Si posa el cursor sobre la imagen podrá ver una representación de </em><a href="http://es.wikipedia.org/wiki/Metaball" target="_blank"><em>metaballs</em></a><em> construida sobre un WriteableBitmap.</em></p>
<p>
<object id="SilverlightPlugin1" width="480" height="270" type="application/x-silverlight-2" data="data:application/x-silverlight-2,">
<param name="source" value="http://www.laciudadela.net/wp-content/uploads/2007-2011/2009-07-metaballs.xap" />
<param name="minRuntimeVersion" value="3.0.40818.0" />
<param name="autoUpgrade" value="true" /> <a style="text-decoration: none;" href="http://go.microsoft.com/fwlink/?LinkID=149156"> <img style="border-style: none" src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Instalar Microsoft Silverlight" /> </a>
</object>
</p> <a href="http://www.laciudadela.net/2009/07/16/mapas-de-bits-dinámicos-en-silverlight/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Una de las novedades introducidas en la versión 3 de Silverlight es la clase <em>WriteableBitmap</em> que nos permite la generación dinámica de mapas de bits o bitmaps.</p>
<p>Su funcionamiento es muy sencillo, basta con pasar en el constructor el número de pixels de ancho y de alto que queremos que tenga la imagen para generarla y una vez generada podemos acceder a su contenido a través de la propiedad <em>Pixels</em>.</p>
<p>En el siguiente fragmento de código se construye un bitmap de 320&#215;200 pixels y se establece el pixel en la posición (x, y) al color (r,g,b). Una vez modificado el bitmap se debe llamar a la función <em>Invalidate</em> para actualizar su contenido.</p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum1" style="color: #606060">   1:</span> var bitmap = <span style="color: #0000ff">new</span> WriteableBitmap(320,200);</pre>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum2" style="color: #606060">   2:</span> var pixelColor = BitConverter.ToInt32(<span style="color: #0000ff">new</span> <span style="color: #0000ff">byte</span>[] { (<span style="color: #0000ff">byte</span>)b, (<span style="color: #0000ff">byte</span>)g, (<span style="color: #0000ff">byte</span>)r, 255 }, 0)</pre>
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum3" style="color: #606060">   3:</span> bitmap.Pixels[x + y * bitmap.PixelWidth] = pixelColor;</pre>
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span id="lnum4" style="color: #606060">   4:</span> bitmap.Invalidate();</pre>
</div>
</div>
<p>Por supuesto es necesario asignar el bitmap a la propiedad <em>Source</em> de un control <em>Image</em> para representarle en pantalla.</p>
<p>Una funcionalidad interesante añadida es el método <em>Render</em> que permite representar en el bitmap un control gráfico descendiente de <em>UIElement</em> después de aplicarle una transformación (rotación,escala,posición) lo que abre la puerta a la generación de interesantes efectos.</p>
<p>La siguiente ilustración muestra la generación dinámica de <em>bitmaps. Si posa el cursor sobre la imagen podrá ver una representación de </em><a href="http://es.wikipedia.org/wiki/Metaball" target="_blank"><em>metaballs</em></a><em> construida sobre un WriteableBitmap.</em></p>
<p>
<object id="SilverlightPlugin1" width="480" height="270" type="application/x-silverlight-2" data="data:application/x-silverlight-2,"><param name="source" value="http://www.laciudadela.net/wp-content/uploads/2007-2011/2009-07-metaballs.xap" /><param name="minRuntimeVersion" value="3.0.40818.0" /><param name="autoUpgrade" value="true" /><a style="text-decoration: none;" href="http://go.microsoft.com/fwlink/?LinkID=149156"> <img style="border-style: none" src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Instalar Microsoft Silverlight" /> </a><br />
</object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.laciudadela.net/2009/07/16/mapas-de-bits-dinámicos-en-silverlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc
Page Caching using apc
Database Caching using apc
Object Caching 628/718 objects using apc

Served from: www.laciudadela.net @ 2012-02-23 07:23:39 -->
