<?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>Obsoletos &#187; Open Source</title>
	<atom:link href="http://www.obsoletos.org/category/opensource/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.obsoletos.org</link>
	<description>640 KB de memoria deberían ser suficientes para cualquiera</description>
	<lastBuildDate>Thu, 02 Feb 2012 12:44:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<image>
  <link>http://www.obsoletos.org</link>
  <url>http://obsoletos.org/favicon.ico</url>
  <title>Obsoletos</title>
</image>
		<item>
		<title>Detector de movimiento sobre un ATMega88</title>
		<link>http://www.obsoletos.org/2010/03/detector-de-movimiento-sobre-un-atmega88/</link>
		<comments>http://www.obsoletos.org/2010/03/detector-de-movimiento-sobre-un-atmega88/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 16:31:46 +0000</pubDate>
		<dc:creator>cogollo</dc:creator>
				<category><![CDATA[Hackeos e ideas]]></category>
		<category><![CDATA[Nuestros hacks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ATMega88]]></category>
		<category><![CDATA[microcontroladores]]></category>
		<category><![CDATA[PIR]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2882</guid>
		<description><![CDATA[Como mi último post se alargó más de la cuenta, dejé pendiente la implementación del sensor de presencia mediante nuestra nueva plataforma de desarrollo. Bueno, pues ya va tocando. Por si ya lo has olvidado, vamos a montar un sistema que detecta la presencia de gente mediante un PIR. Si hay alguien presente enciende unas [...]]]></description>
			<content:encoded><![CDATA[<p>Como <a href="http://www.obsoletos.org/2010/01/plataforma-de-desarrollo-practica-y-barata-para-microcontroladores/">mi último post</a> se alargó más de la cuenta, dejé pendiente la implementación del sensor de presencia mediante nuestra nueva plataforma de desarrollo. Bueno, pues ya va tocando.</p>
<p>Por si ya lo has olvidado, vamos a montar un <strong>sistema que detecta la presencia de gente</strong> mediante un <a href="http://en.wikipedia.org/wiki/Passive_infrared_sensor">PIR</a>. Si hay alguien presente enciende unas luces paulatinamente hasta llegar a su máximo de intensidad y después, tras un cierto tiempo sin que se detecte a nadie, las apaga también paulatinamente. Aquí tienes el vídeo otra vez:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7417051&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=7417051&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Para completar este magnífico artefacto necesitarás montar unos pocos &#8220;periféricos&#8221; además de la placa con el micro. Veámoslos uno por uno después del salto.</p>
<p><span id="more-2882"></span></p>
<p><strong>Selector de tiempo</strong></p>
<ul>
<li>Un <a href="http://es.wikipedia.org/wiki/Potenci%C3%B3metro">potenciómetro</a> (entre 10KΩ y 1MΩ todo vale).</li>
<li>Cable plano de 3 conductores (de nuevo, los viejos cables IDE vienen muy bien para esto).</li>
<li>Una tira de pines macho.</li>
</ul>
<p>Lo que queremos hacer con esto es conectar las dos patas exteriores del potenciómetro a 0 y 5 V respectivamente. De esta manera el voltaje que obtengamos en la pata central (que está conectada electricamente al cursor del potenciómetro) será proporcional al ángulo que tenga e l cursor en es momento. Esto es, si giramos el cursor todo a la izquierda tendremos 0V en la pata central. Si lo giramos todo a la derecha tendremos 5V. Y en las posiciones intermedias tendremos un valor proporcional al de su posición.</p>
<p>Luego, conectaremos este selector al puerto de sensores y nuestro software se encargará de leer periódicamente el valor del voltaje para determinar cuanto tiempo tiene que esperar sin detectar a nadie antes de ponerse a apagar las luces. De este modo podremos ajustar dicho tiempo en directo como quien cambia el volumen de la tele.</p>
<p>El esquema del circuito es este:</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2010/02/potSensor.png"><img class="aligncenter size-medium wp-image-3035" title="Conexión potenciometro" src="http://www.obsoletos.org/wp-content/uploads/2010/02/potSensor-235x176.png" alt="" width="235" height="176" /></a></p>
<p>Y este es el aspecto del sensor una vez terminado. Nada espectacular.</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090335.JPG"><img class="aligncenter size-large wp-image-2692" title="Potenciometro con conector" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090335-500x375.jpg" alt="Potenciometro con conector" width="500" height="375" /></a></p>
<p>Fijate que he quitado el pin que va entre GND y 5V para que el hueco coincida con el agujero que hay &#8220;tupido&#8221; en el puerto de sensores. En este caso usé pines acodados, pero he descubierto que es más cómodo si usas pines rectos normales.</p>
<p><strong>Sensor de presencia</strong></p>
<ul>
<li>Un sensor PIR (Los hay de muchos tipos, nosotros estamos usando <a href="http://www.rapidonline.com/Electronic-Components/Sensors/PIR-Sensors/Passive-infrared-motion-sensors/32112/kw/sensor+PIr">éstos</a>).</li>
<li>Una resistencia de 100KΩ.</li>
<li>Cable plano de 3 conductores.</li>
<li>Tira de pines macho.</li>
</ul>
<p>Para que nos entendamos, los sensores PIR son una especie de cámara de muy baja resolución que sólo puede ver el infrarrojo. Como las personas (y los seres vivos en general) están más calientes que su entorno &#8220;brillan&#8221; (en el infrarrojo) más que el fondo. Cuando un PIR detecta ese cambio en el brillo en alguna zona de su campo de visión asume que tiene a alguien delante.</p>
<p>El alcance y el ángulo de visión de un PIR varían mucho según  el modelo. Lo normal es que el alcance esté entre los 2&#8217;5 y los 10 metros, y que el ángulo se encuentre entre los 30º y los 100º.</p>
<p>Los modelos que estoy usando tienen tres pines. Uno va a tierra (GND), otro a 5V para la alimentación (Vdd) y el tercero nos da la salida del sensor (OUT). El voltaje que midamos en este pin será 5 V cuando no hay nadie presente y 0V cuando se detecte a alguien (ojo, ya ves que la salida esta invertida).<a href="http://www.obsoletos.org/wp-content/uploads/2010/01/PIRPinout.jpg"><img class="aligncenter size-full wp-image-2884" title="PIRPinout" src="http://www.obsoletos.org/wp-content/uploads/2010/01/PIRPinout.jpg" alt="PIRPinout" width="400" height="300" /></a>Por último, aunque no lo pone en la hoja de datos de estos PIRs, parece que es necesario utilizar una resistencia pull-down de 100KΩ entre la salida y tierra para que la señal sea lo bastante limpia.</p>
<p>Dicho lo cual, aquí tienes el esquema del circuito y una fotico con el resultado:</p>
<p style="text-align: left;"><a href="http://www.obsoletos.org/wp-content/uploads/2010/02/PIRSensor.png"><img class="size-medium wp-image-3033 alignleft" title="Conexión sensor PIR" src="http://www.obsoletos.org/wp-content/uploads/2010/02/PIRSensor-235x176.png" alt="" width="235" height="176" /></a><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090334.JPG"><img class="aligncenter size-medium wp-image-2691" title="Sensor PIR con conector" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090334-235x176.jpg" alt="" width="235" height="176" /></a></p>
<p><strong>Cable de comunicaciones</strong></p>
<ul>
<li> Cable plano de 10 hilos.</li>
<li>Dos conectores hembra de cable plano de 10 hilos</li>
</ul>
<p>Este es el tipo de cable que necesitaremos, en general, para conectar nuestros periféricos a la &#8220;placa base&#8221;. Solo tienes que ponerle los conectores en los extremos. Normalmente la gente usa herramientas especiales para cerrar bien los conectores, pero yo lo he estado haciendo golpeándolos con un mazo de goma y sale bastante bien. Lo único es que tienes que ir poco a poco, por que si un lado del conector se encaja más rápidamente que el otro se pueden partir las pestañas que hacen que se mantenga todo unido. También he ocluido los agujeros que corresponderian a los pines que faltan en los puertos de entrada/salida para que no se pueda colocar el cable incorrectamente.</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090333.JPG"><img class="aligncenter size-medium wp-image-2690" title="Cable conexion plano 9 pines" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090333-235x176.jpg" alt="Cable conexion plano 9 pines" width="235" height="176" /></a></p>
<p><strong>Distribuidor</strong></p>
<ul>
<li>Pines machos dobles.</li>
<li>Pines hembra acodados.</li>
</ul>
<p>Pues sí, tener 4 pines de entrada/salida agrupados en un solo conector está muy bien cuando vas a necesitarlos todos a la vez, cuando quieres &#8220;hablar&#8221; <a href="http://www.iearobotics.com/proyectos/cuadernos/ct1/ct1.html">en serie</a> con un dispositivo o controlar un pequeño motor. Pero, ¿qué pasa si solo quieres encender una luz? O mejor: dos luces, separadas entre sí, y controladas cada una por un pin distito del microcontrolador. En estos casos, necesitamos una plaquita que nos permita separar las señales y dirigir cada una a su destino final.</p>
<p>Estas placas presenta en un lado un conector donde enchufaremos el extremo final del cable de comunicaciones y en los otros lados entre 1 y 4 conectores más pequeños hasta donde llevan las 4 señales de datos individuales y el voltaje de alimentación.</p>
<p>En este proyecto vamos a usar solamente una señal, pero aquí tienes tambien el esquema del distribuidor para dos señales que seguro que viene bien en el futuro.</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2010/02/distribuidor.png"><img class="aligncenter size-large wp-image-3036" title="Esquema distribuidor" src="http://www.obsoletos.org/wp-content/uploads/2010/02/distribuidor-500x375.png" alt="" width="500" height="375" /></a></p>
<p>Para que quede un poco más claro puedes ver las fotos de ambos circuitos completados. (Pero no hagas caso del jumper que se ve en el centro del distribuidor de dos señales, resultó que no era muy buena idea).</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090337.JPG"><img class="size-medium wp-image-2694 alignleft" title="Conectores intermedios 1 y 2 pines - frente" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090337-235x176.jpg" alt="Conectores intermedios 1 y 2 pines - frente" width="235" height="176" /></a><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090338.JPG"><img class="size-medium wp-image-2695 alignnone" title="Conectores intermedios 1 y 2 pines - traseras" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090338-235x176.jpg" alt="Conectores intermedios 1 y 2 pines - traseras" width="235" height="176" /></a></p>
<p><strong>Amplificador</strong></p>
<ul>
<li>Un transistor <a href="http://es.wikipedia.org/wiki/MOSFET">MOSFET tipo n</a>. (Te cuento los detalles más abajo).</li>
<li>Una resistencia de 200 Ω.</li>
<li>Pines acodados machos y hembras.</li>
<li>Dos <a href="http://catalog.weidmueller.com/procat/Group.jsp;jsessionid=9FF641E1F8AE02E301D0334158A28877?groupId=%28%22group21988543685230%22%29&amp;page=Group">bornes de conexión para circuito impreso</a>.</li>
</ul>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090339.JPG"><img class="aligncenter size-large wp-image-2696" title="Transistor - frente" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090339-500x375.jpg" alt="Transistor - frente" width="500" height="375" /></a></p>
<p>Queremos encender luces, y queremos que sean unas luces que marquen alguna diferencia entre &#8220;oscuro&#8221; y &#8220;luminoso&#8221;, pero los puertos de datos de nuestro controlador sólo pueden proporcionar unos 40 mA de corriente por cada pin. Está bien para encender un led, pero no te harán llegar muy lejos en la noche. Además, dan una tensión de salida de 5V y las bombillas que queremos usar son de 12V (como las de los coches).</p>
<p>Necesitamos una manera de amplificar las señales que manda el controlador hasta que sean lo bastante potentes como para encender esas bombillas. Para ello usamos un transistor MOSFET <a href="http://es.wikipedia.org/wiki/MOSFET">tipo n</a> a modo de interruptor. Los MOSFETs tienen tres patas, drenador (<em>drain</em>), fuente (<em>source</em>) y puerta (<em>gate</em>). La corriente principal (la que encenderá nuestra bombilla) entra por el drenador y sale por la fuente. Cuando la puerta se encuentra conectada a tierra (0V) se dice que el transistor está <em>en corte</em> y no permite pasar corriente entre drenador y fuente. Cuando el voltaje de la puerta supera cierto <em>voltaje umbral </em>(positivo para los tipo n y negativo para los tipo p) el transistor está <em>en saturación</em> y permite que pase gran cantidad de corriente entre drenador y fuente.</p>
<p>Las características más importantes para este tipo de transistores son 3: el voltaje fuente-drenador máximo (VDSs), que es la diferencia de potencial máxima que podemos poner entre fuente y drenador sin que pete todo; la intensidad de drenador máxima (ID), que es la intensidad máxima que puede aceptar el drenador sin quemarse; y el voltaje umbral ( VGS(th)) que, simplificando, sería el voltaje que hay que aplicarle a la puerta para que el transistor comience a conducir.</p>
<p>Queremos encender dos bombillas de 12V y 6 Watios cada una. Eso supone que van a consumir un Amperio entre las 2. Además, queremos controlar el encendido con un pulso de 5 V. Total, que necesitaremos un MOSFET con: VDSs&gt;12V, ID&gt;1A y VGS(th)&lt;5V.</p>
<p>En cualquier tienda de electrónica puedes encontrar cientos, si no miles, de transistores que cumplan estos requisitos por menos de un lerele, pero también puedes encontrarlos entre la chatarra electrónica que tengas por casa. Para esta placa yo he usado un <a href="http://www.datasheetcatalog.org/datasheet2/5/0w0q8j6f44wahlhq1g811lpkd5py.pdf">STW13NK80Z </a>que encontré en una fuente de alimentación rota. Con VDSs=800V y ID=12A es como matar moscas a cañonazos, sí, pero al menos el cañón nos salió gratis. Busca componentes que tengan <a href="http://www.directindustry.com/prod/fairchild-semiconductor/power-mosfet-33535-192568.html">este aspecto</a> y estén atornillados a un disipador. Casi seguro que serán algún tipo de transistor. Solo tienes que googlear el numero de serie que llevan impreso para saber de qué se trata exactamente.</p>
<p>Ahora que ya tienes transistor vamos a montar el circuito. Tanto la señal, como la alimentación llegan por el conector macho y se &#8220;reenvían&#8221; al conector hembra. De este modo se pueden encadenar varios de estos amplificadores si fuera necesario.</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2010/02/MosFet.png"></a><a href="http://www.obsoletos.org/wp-content/uploads/2010/02/MosFet1.png"><img class="aligncenter size-large wp-image-3038" title="Conexiones transistor" src="http://www.obsoletos.org/wp-content/uploads/2010/02/MosFet1-500x375.png" alt="" width="500" height="375" /></a></p>
<p>El módulo terminado, con la bombilla al lado tiene este aspecto:</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090340.JPG"><img class="size-medium wp-image-2697 alignleft" title="Amplificador- frente" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090340-235x176.jpg" alt="Amplificador- frente" width="235" height="176" /></a><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090341.JPG"></a><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090341.JPG"><img class="size-medium wp-image-2698 alignleft" title="transistor - trasera" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090341-235x176.jpg" alt="transistor - trasera" width="235" height="176" /></a></p>
<p style="clear: both;">
<p style="clear: both;">
<p><strong>Firmware</strong></p>
<p style="clear: both;">Contra todo pronóstico ésta era la última pieza que quedaba por montar. Lo siguiente es hacer un programa que se encargue de &#8220;leer&#8221; el PIR  y el potenciómetro y de controlar la luz. Puedes copiar el mío de aquí abajo Como ves es muy sencillito y está comentado hasta aburrir. Ya hablamos hace meses de cómo <a href="http://www.obsoletos.org/2009/06/lo-que-aprendimos-en-el-taller-de-microcontroladores/">compilarlo y grabarlo en el microcontrolador</a>.</p>
<pre class="c">/*
 * Firmware detector de presencia para ATMega88. Lee la salida de un sensor PIR y
 * de un potenciómetro en el puerto C (PC0 y PC3 respectivamente).
 * Enciende una luz conectada a PD5 cuando el PIR detecta movimiento (salida &gt; 128)
*/

// Frecuencia de funcionamiento (para las rutinas de delay).
#define F_CPU 1000000
#define TMULT

#include
#include 

//Funciones para inicializar y leer desde las unidades conversoras analógico-digitales
void initialiceADC(void);
unsigned char readADC(unsigned char channel);

//Funciones para inicializar y emplear PWM
void initialicePWM(void);
void analogOut(char port,unsigned char value);

int main(void)
{
	//Aquí se guarda el estado actual del programa
	unsigned char state=0;
	//El valor guardado en 'out' es el que se usará como salida mediante PWM
	unsigned char out = 0;
	unsigned char ant;
	//Aquí llevaremos una cuenta del tiempo transcurrido desde la última detección
	int timer = 0;

	//Configuramos los pines del puerto D como salida
	DDRD=0xff;

	//Inicializamos PWM y ADC
	initialicePWM();
	initialiceADC();

	//Bucle principal.
	while(1)
	{
		switch(state)
		{
			//Estado 0: Apagado, esperando a detectar algo
			case 0:
				//Cuando se detecta a alguien pasamos a estado 1.
				// La salida para a 10 (muy poco brillo)
				if(readADC(0)&gt;128)
				{
					out=10;
					state = 1;
				}
				else out=0;
				break;
			//Estado 1: Aumentando el brillo
			case 1:
				//Aumentamos el en cada iteración. Como la percepción del
				//brillo es logarítmica tenemos que aumentarlo exponencialmente
				//para que se perciba como un aumento lineal. En concreto
				//multiplicamos el brillo anterior por 1.125
				ant = out;
				out+= out&gt;&gt;3;
				//Si el brillo anterior es mayor que el actual -&gt; overflow
				//Fijamos el brillo en 255 y pasamos al estado 2
				if(ant&gt;out)
				{
					out = 255;
					state = 2;
				}
				break;
			//Estado 2: Brillo máximo hasta que pase un cierto tiempo desde la última detección
			case 2:
				//Si se detecta movimiento reseteamos el temporizador
				if(readADC(0)&gt;128)
					timer =0;
				//si no lo aumentamos
				else
					timer++;

				//El tiempo que debe pasar depende de la posición del cursor de potenciómetro
				//será un valor entre 0 y 255 multiplicado por TMULT (para TMULT = 4 abarca entre
				// 0 y 90 segundos aprox).
				//Cuando timer supera ese valor lo ponemos a 0 y pasamos al estado 3.
				if(timer&gt;(readADC(3)*TMULT))
				{
					timer = 0;
					state = 3;
				}
				break;
			//Estado 3: Disminuyendo el brillo
			case 3:
				//Reducimos el brillo igual que lo aumentamos antes. En lugar de
				//multiplicarlo por 1.125 ahora lo hacemos por 0.875
				if(readADC(0)&gt;128)
					state = 1;
				else
				{
					ant = out;
					out-= out&gt;&gt;3;
					//Si ant=out es que out ya era tan pequeño que al redondear tras la
					//división se queda igual. Fijamos out a 0 y volvemos a la espera
					//en el estado 0
					if(ant&lt;=out)
					{
						out = 0;
						state = 0;
					}
				}
				break;

		}
		//En cada iteración actualizamos el valor de la salida a 'out'
		analogOut(0,out);
		//y esperamos un poco antes del siguiente paso
		_delay_ms(100);
	}
}

void initialiceADC(void)
{
	DIDR0=0x3F; //Deshabilita la entrada digital a traves de los pines de ADC

	//REFS(0,1) pone Vcc como voltaje de referencia
	//y ADLAR(1) justifica el valor leido a la izquierda para que solo tengamos que leer ADCH
	ADMUX= _BV(REFS0)|_BV(ADLAR);
	//ADEN habilita el uso de ADC y ADPS(0,1,1) pone el preescale del temporizador ADC a 8
	ADCSRA = _BV(ADEN)|_BV(ADPS1)|_BV(ADPS0);

}

unsigned char readADC(unsigned char channel)
{
	ADMUX= (ADMUX &amp; 0xF0) | channel;
	//Poniendo ADSC a 1 comienza la conversión
	ADCSRA|=_BV(ADSC);
	//Sabemos que ha teminado cuando ADSC vuelve a valer 0
	while(ADCSRA &amp; _BV(ADSC));
	//El resultado está en ADCH
	return ADCH;
}

void initialicePWM()
{
	//Configuramos PD5 y PD6 como salidas
	DDRD |= _BV(PD5)| _BV(PD6);
  	//WGM0(0,1,1) selecciona el modo 'fast PWM'. COM0A(1,0) y COM2B(1,0)
  	//proporciona PWM no invertido para las salidas A y B
       TCCR0A = _BV(WGM01)|_BV(WGM00) | _BV(COM0A1)|_BV(COM0B1);
       //CS0(0,1,0)configura el preescaler de timer0 a 8
       TCCR0B = _BV(CS01);
}

void analogOut(char port, unsigned char value)
{
	//Si 'port' es 1 usamos la salida B. Si es 0 la A
	if(port &amp; 1)
		OCR0B = value;
	else
		OCR0A = value;
}</pre>
<p>Y dicho lo cual solo queda ensamblarlo todo. Si ha ido todo bien no deberías poder conectar nada incorrectamente, pero asegúrate antes de enchufarlo todo a la corriente por primera vez. Aquí tienes un par de fotos para que puedas fijarte en donde va conectada cada cosa.</p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090345.JPG"><img class="aligncenter size-large wp-image-2700" title="Luz regulable y detector de movimiento. Detalle conexiones." src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090345-500x375.jpg" alt="" width="500" height="375" /></a></p>
<p><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090342.JPG"><img class="aligncenter size-large wp-image-2699" title="Luz regulable y detector de movimiento. Visión global" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090342-500x375.jpg" alt="" width="500" height="375" /></a></p>
<p>Bueno, pues ya tienes tu propio detector de movimiento. Pero tendrás que quedarte muy muy quieto para ver cómo se apaga la luz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2010/03/detector-de-movimiento-sobre-un-atmega88/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lista de soportes de grabación</title>
		<link>http://www.obsoletos.org/2010/02/lista-desoportes-de-grabacion/</link>
		<comments>http://www.obsoletos.org/2010/02/lista-desoportes-de-grabacion/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 12:01:00 +0000</pubDate>
		<dc:creator>paaq</dc:creator>
				<category><![CDATA[Formatos]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[creative commons]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=3011</guid>
		<description><![CDATA[Pablo Iglesias Simón es profesor titular en la Real Escuela Superior de Arte Dramático (más conocida como RESAD, que es un acrónimo horroroso) y gracias a alguno de sus alumnos hemos descubierto que este tipo tan majo firma sus apuntes con un sello de Creative Commons, o sea, que son libres para que todo el [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://www.pabloiglesiassimon.com">Pablo Iglesias Simón</a></strong> es profesor titular en la <a href="http://www.resad.es/">Real Escuela Superior de Arte Dramático</a> (más conocida como RESAD, que es un acrónimo horroroso) y gracias a alguno de sus alumnos hemos descubierto que este tipo tan majo firma sus apuntes con un sello de <a href="http://es.creativecommons.org/proyecto/">Creative Commons</a>, o sea, que son libres para que todo el mundo pueda leerlos mientras quede clara su autoría. Esto, que en principio parece de Perogrullo, no es muy común en un espacio como la Universidad pública, donde todo el conocimiento generado con nuestros impuestos debería ser universalmente accesible. Por supuesto, un alumno siempre puede comprar los apuntes en las copisterías o bajarse material de la aplicación online que tenga la universidad. Pero Pablo sube sus apuntes a su propia página personal para que yo no tenga que acudir a las copisterías de la RESAD o pedirle a algún alumno su user y pass.</p>
<p>Entre todos los pdfs de su web, hay uno que nos ha llamado especialmente la atención: una <strong><a href="http://alumnos.pabloiglesiassimon.com/leccionessonido/Soportes_de_grabacion.pdf">lista de soportes analógicos y digitales de grabación y reproducción de audio (PDF, 123 KB)</a>.</strong> Como estos días andamos liadillos con esto de los formatos de conservación de información, esta lista nos ha ampliado notablemente los horizontes: desde el cassette al DVD-RAM BWF, con su precio, calidad, editabilidad, etc. Hay tanto formatos domésticos como profesionales, y todos ellos se usan hoy en día en mayor o menor medida (o sea, no hay ninguno totalmente obsoleto).</p>
<p>También nos vendrá al pelo una <a href="http://alumnos.pabloiglesiassimon.com/leccionessonido/ARCHIVOS_DE_SONIDO.pdf">lista de formatos digitales de sonido (PDF, 60KB)</a>, que tal vez tengamos más frescos, pero conviene ponerlos todos sobre el papel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2010/02/lista-desoportes-de-grabacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symbian abre su código</title>
		<link>http://www.obsoletos.org/2010/02/symbian-abre-su-codigo/</link>
		<comments>http://www.obsoletos.org/2010/02/symbian-abre-su-codigo/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 11:11:31 +0000</pubDate>
		<dc:creator>paaq</dc:creator>
				<category><![CDATA[Breves]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[móviles]]></category>
		<category><![CDATA[symbian]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2911</guid>
		<description><![CDATA[Qué bien, qué bien. El sistema operativo más usado en teléfonos móviles es desde ayer código abierto, lo que Nokia ya prometió cuando lo compró hace dos años.]]></description>
			<content:encoded><![CDATA[<p>Qué bien, qué bien. <a href="http://www.xatakamovil.com/sistemas-operativos/se-acabo-la-cuenta-atras-symbian-emigra-al-codigo-abierto">El sistema operativo más usado en teléfonos móviles es desde ayer código abiert</a><a href="http://www.xatakamovil.com/sistemas-operativos/se-acabo-la-cuenta-atras-symbian-emigra-al-codigo-abierto">o</a>, lo que Nokia ya prometió cuando lo compró hace dos años.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2010/02/symbian-abre-su-codigo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plataforma de desarrollo (práctica y barata) para microcontroladores</title>
		<link>http://www.obsoletos.org/2010/01/plataforma-de-desarrollo-practica-y-barata-para-microcontroladores/</link>
		<comments>http://www.obsoletos.org/2010/01/plataforma-de-desarrollo-practica-y-barata-para-microcontroladores/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 16:11:50 +0000</pubDate>
		<dc:creator>cogollo</dc:creator>
				<category><![CDATA[Hackeos e ideas]]></category>
		<category><![CDATA[Nuestros hacks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ATMega88]]></category>
		<category><![CDATA[microcontroladores]]></category>
		<category><![CDATA[prototipado]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2701</guid>
		<description><![CDATA[Lo bonito de hacer talleres y demás mandangas (bueno, una de las cosas bonitas) es que conoces gente. Una de las personas a las que hemos conocido últimamente es Ignacio, un joven escultor cuyas obras suelen incluir algún elemento móvil y/o luminoso. Como es un joven inquieto, Ignacio vino al taller de microcontroladores que montamos [...]]]></description>
			<content:encoded><![CDATA[

Lo bonito de hacer talleres y demás mandangas (bueno, una de las cosas bonitas) es que conoces gente. Una de las personas a las que hemos conocido últimamente es <a href="http://www.canalesaracil.com/Default.aspx">Ignacio</a>, un joven escultor cuyas obras suelen incluir algún elemento <a href="http://www.canalesaracil.com/Seccion-Obra.aspx?Seccion=Sculptures&amp;Obra=Hang-around">móvil</a> y/o <a href="http://www.canalesaracil.com/Seccion-Obra.aspx?Seccion=Sculptures&amp;Obra=The-Light-Pianola">luminoso</a>.

Como es un joven inquieto, Ignacio vino al <a href="http://www.obsoletos.org/2009/06/lo-que-aprendimos-en-el-taller-de-microcontroladores/">taller de microcontroladores</a> que montamos en <a href="http://medialab-prado.es/">Medialab</a> para averiguar como esos cacharritos podrían ayudarle a dotar sus esculturas de una cierta interactividad. Como es un escultor inquieto (léase ocupado), no tiene la base de conocimientos en electrónica necesarios para acometer ese tipo de proyectos, ni el tiempo necesario para adquirir ese conocimiento (tampoco es que haga falta tanto tiempo, pero ya sabes como son los artistas).

Total, que nos ha pedido que le echemos una mano (remunerada, que somos hippies pero no tanto). Como primer proyecto quiere utilizar un <a href="http://en.wikipedia.org/wiki/Passive_infrared_sensor">sensor de movimiento PIR</a> para detectar cuando llega alguien a ver la escultura y que las luces se enciendan gradualmente. Cuando la gente se va, las luces deben apagarse. Gradualmente también, claro.

Así pues necesitamos algún tipo de microcontrolador que lea periódicamente (varias veces por segundo) el estado del sensor, lleve la cuenta del tiempo que ha pasado desde la última detección y se encargue de controlar las luces, aumentando y disminuyendo su intensidad poco a poco, según corresponda.

Con esas consideraciones (y alguna otra más), y tras unas semanas de pruebas y más pruebas he llegado a esto:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="375" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7417051&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="500" height="375" src="http://vimeo.com/moogaloop.swf?clip_id=7417051&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"> </embed></object>

Como ves cumple perfectamente con las especificaciones, pero es capaz de mucho más. Te cuento qué, cómo y porqué  a continuación.
<span id="more-2701"></span>
<h4>¿Qué?</h4>
Bueno, ¿que tenemos aquí entonces? Como ya he dicho, nuestro aparato no solo sirve para encender y apagar luces. <a href="http://frikotaku.wordpress.com/2006/08/12/el-cerebro-de-la-bestia/">El cerebro de la bestia</a> es, en este caso, un microcontrolador <a href="http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf">ATMega88</a>, funcionando a 1 MHz, totalmente programable y con acceso a 12 pines de entrada/salida (4 de ellos con <a href="http://es.wikipedia.org/wiki/Conversor_anal%C3%B3gico-digital">conversores analógico/digital</a> para poder leer valores arbitrarios de voltaje). Todo ello por entre 7 y 10 euros en materiales.

<div id="attachment_2688" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090330.jpg"><img class="size-large wp-image-2688" title="Placa desarrollo AVR- frente" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090330-500x375.jpg" alt="Placa desarrollo AVR- frente" width="500" height="375" /></a><p class="wp-caption-text">No le he puesto nombre aún</p></div>
<p style="text-align: center;"></p>
El resultado final no es pues una solución para el problema especifico EncenderUnaLuzCuandoAlguienMira, sino una plataforma genérica de prototipado que, espero, permita el desarrollo de proyectos con microcontroladores de una manera rápida, sencilla y barata. Algo parecido a un <a href="http://es.wikipedia.org/wiki/Arduino">Arduino</a>, vaya.
<h4>¿Por qué esto?</h4>
Entonces, ¿por qué no usar un Arduino después de todo? O mejor, ¿por qué diseñar un sistema genérico para resolver un problema tan concreto? ¿No estoy complicando y encareciendo artificialmente el producto? ¿No es esto el equivalente electrónico al <em>tour</em> que les dan a los turistas cuando cogen un taxi en el aeropuerto?

Bueno, supongo que lo sería si uno cobrara dinero con ello. La cosa es que diseñar un circuito electrónico para una aplicación profesional lleva bastante tiempo. Terminas el primer prototipo sólo para descubrir que esta lleno de fallos, inconveniencias y complicaciones innecesarias, así que haces un segundo prototipo, que resuelve la mayoría de esos problemas, pero que plantea algunos nuevos y probablemente mucho más interesantes. Así que haces un tercer prototipo y&#8230; bueno, ya sabes por donde voy.

Luego está el software. Alguien tiene que programar ese micro (véase yo) y la depuración del programa no es precisamente trivial (no es fácil saber qué está pasando ahí dentro, después de todo uno no tiene una flamante pantalla que le muestre los mensajes de error que puedan ir apareciendo). Total que entras en un ciclo parecido al del diseño del circuito, sólo que haces muchos más cambios (aunque al menos no tienes que soldar en cada iteración).

O sea, que este tipo de cosas cuestan bastante trabajo. Más teniendo en cuenta que uno no es un profesional del ramo. Y claro, no es plan de currar gratis. Tampoco me parecía bien cobrarle a Ignacio por un trabajo que probablemente no tenga una <em>calidad profesional</em> de esas (que es la primera vez que hago esto), y que probablemente hubiera llevado mucho más tiempo del necesario por culpa de mi ineptitud.

¿Qué hacemos entonces? Bueno, lo primero es liberar el diseño del circuito y el código fuente, para que cualquiera pueda hacer uso (consideralo una pequeña retribución a la comunidad hacker y DIY que hace viable este blog). Lo segundo, publicarlo en Obsoletos. Así me saco un par de posts, que ya me va tocando.

Ignacio ya no tiene que pagarme el diseño, porque ya no es su único beneficiario, así que puedo hacerlo un poco más complejo sin que eso le perjudique. Tarde o temprano yo iba a tener que diseñar algo que me permitiera trabajar con los micros de una manera mínimamente cómoda. Y ya puestos, una plataforma genérica será mucho más útil para quien quiera que esté ahí fuera.

Total, que Ignacio y cualquiera que lea esto es libre de usar todo el material de este post como más le convenga, pero si te parece demasiado complicado y quieres que te lo suelde yo, te cobro la mano de obra. Fair enough <img src='http://www.obsoletos.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 

Pues muy bien, muy bonito todo, ¿pero que tiene de malo el Arduino? Es lo bastante genérico, ya viene montado y trae un entorno de desarrollo relativamente cómodo y sencillo. Bueno, no me malinterpretes, Arduino es una gran plataforma de iniciación, y simplifica mucho las primeras etapas de un proyecto, pero tiene sus pegas.

<div id="attachment_2786" class="wp-caption aligncenter" style="width: 409px"><a href="http://es.wikipedia.org/wiki/Arduino"><img class="size-full wp-image-2786" title="Arduinodiecimila400" src="http://www.obsoletos.org/wp-content/uploads/2010/01/Arduinodiecimila400.jpg" alt="Arduinodiecimila400" width="399" height="306" /></a><p class="wp-caption-text">Arduino Diecimila</p></div>

Para empezar está la programación, efectivamente el lenguaje que usa es sencillo y puedes encontrar montones de librerías de funciones ya hechas que te facilitan aún más la vida, pero esa sencillez precisamente hace que sea terriblemente ineficaz. <a href="http://hackaday.com/2010/01/06/arduino-io-speed-breakdown/">Cambiar el estado de un pin es 50 veces más lento si lo programas con el lenguaje de Arduino que si lo programas en C</a>. Además, quieras que no soy yo el que va a escribir el código y después de media vida usándolo me siento mucho más cómodo con C.

Por otro lado Arduino no funciona bien en un objeto acabado. Los conectores están bien para meterles un cablecico y llevarlo hasta una <a href="http://es.wikipedia.org/wiki/Placa_de_pruebas">protoboard</a> donde tienes montado el resto del circuito, pero los cables se salen con facilidad cuando los mueves, solo hay un par de puntos donde acceder a la alimentación o a la tierra del Arduino, y para colmo la separación entre el pin 7 y el 8 no es estándar así que no puedes simplemente hacer tu circuito en una placa perforada estándar y pincharlo encima. Tienes que comprar un <a href="http://www.arduino.cc/en/Main/ArduinoShields"><em>shield</em></a> especifico o <a href="http://es.wikipedia.org/wiki/Circuito_impreso#Manufactura">imprimir tus propias placas de circuitos</a>. Ambas cosas bastante caras.

Y luego está el precio, claro. La última vez que miré, un Arduino costaba 40 pavos. No está mal si vas a tener uno para practicar, pero si vas a meter uno en cada objeto que produzcas la cosa cambia. En mi diseño he tratado de emplear el mínimo número de partes posible (9 en total), que todas sean fáciles de conseguir y que el conjunto sea fácil de montar. El resultado es que cualquiera puede conseguir los materiales al por menor por unos de 8 leuros y que se puede montar en algo menos de hora y media con lo que puedo <em>vender</em> el chisme montado y preparado por 20 (incluyendo el coste del material).
<h4>¿Por qué así?</h4>
Así que basicamente tenemos un ATMega88 rodeado por un puñado de conectores. Veamos para que sirven:
<ol>
	<li>El puerto de programación: Nos permite conectar la placa al ordenador, a través del puerto paralelo, para programarlo e intercambiar datos.

<div id="attachment_2812" class="wp-caption aligncenter" style="width: 162px"><img class="size-full wp-image-2812" title="ATMega Puerto programacion" src="http://www.obsoletos.org/wp-content/uploads/2010/01/AtMega-Puerto-programacion.png" alt="Puerto de programación" width="152" height="213" /><p class="wp-caption-text">Puerto de programación</p></div></li>
	<li>El conector de alimentación: Se trata de <a href="http://es.rs-online.com/web/2868741.html">un conector hembra estándar de 2&#8217;5 mm</a>. Es un conector muy común entre los transformadores domésticos (nosotros hemos encontrado muchos en las fuentes de alimentación de los modems y routers) y como la placa lleva su propio <a href="http://www.datasheetcatalog.org/datasheets/228/390068_DS.pdf">7805</a> nos permite usar casi cualquier fuente de tensión de entre 7 y 18 V.

<div id="attachment_2811" class="wp-caption aligncenter" style="width: 240px"><img class="size-full wp-image-2811" title="ATMega Alimentacion" src="http://www.obsoletos.org/wp-content/uploads/2010/01/ATMega-Alimentacion.jpg" alt="Conector alimentación" width="230" height="200" /><p class="wp-caption-text">Conector de alimentación</p></div></li>
	<li>Puerto de sensores: Porque todo robot asesino que se precie necesita una buena batería de sensores para localizar a sus víctimas. Este puerto ofrece conexiones a los pines 0 a 3 del puerto C del microcontrolador (los que tienen el conversor analógico/digital) para poder medir el estado de sensores tanto analógicos como digitales. Como además los sensores suelen estar separados entre sí y suelen necesitar alimentación cada columna del puerto incluye, además del pin de entrada, un contacto a tierra y otro a 5 V. De este modo, con un único cable (con 3 conductores) entre la placa y el sensor podemos transmitir tanto la energía necesaria para que funcione el sensor como los datos proporcionados por éste.

<div id="attachment_2809" class="wp-caption aligncenter" style="width: 210px"><img class="size-full wp-image-2809" title="ATMega puerto de Sensores" src="http://www.obsoletos.org/wp-content/uploads/2010/01/ATMega-Sensores.jpg" alt="ATMega puerto de Sensores" width="200" height="180" /><p class="wp-caption-text">Puerto de sensores</p></div></li>
	<li>Puertos de entrada y salida digital: Así que necesitas comunicarte con algún periférico. Para que tu controlador pueda hablar con un chip de memoria o un display LCD necesitarás usar varios pines a la vez. Estos dos puertos están hechos con 2 filas de 5 pines colocados de tal manera que puedes enchufar un <a href="http://www.micropik.com/pag_conect_cableplano.htm">conector de cable plano de 10 hilos</a> en cada uno o un conector de 26 hilos en los dos a la vez. Entre los dos dan acceso a los pines del puerto D (uno a los pines 0 a 3, el otro a los pines 4 a 7). Así puedes acceder a todo el puerto D a la vez con un conector y un cable de 26 hilos (aunque se &#8220;desperdician&#8221; algunos cables) o conectar dos perifericos independientes que solo necesiten 4 pines. Cada uno de estos puertos ofrece además dos pines conectados a tierra, dos pines conectados directamente a la fuente de tensión (para poder alimentar directamente un motor o una luz, por ejemplo) y otro pin conectado a la tensión regulada de 5 V (que es el voltaje de alimentación típico de la mayoría de los componentes electrónicos).

<div id="attachment_2810" class="wp-caption aligncenter" style="width: 402px"><img class="size-full wp-image-2810" title="AtMega Puerto Digital" src="http://www.obsoletos.org/wp-content/uploads/2010/01/AtMega-Puerto-Digital.png" alt="Puerto I/O digital" width="392" height="109" /><p class="wp-caption-text">Puerto I/O digital</p></div></li>
</ol>
Por lo demás todos los puertos tienen algún pin cortado u ocluido para que sus respectivos conectores sólo encajen de una manera (la correcta).
<h4>Cómo</h4>
Bueno, para llegar a contruir uno de éstos tú mismo necesitaras los siguientes materiales:
<ol>
	<li>Un trozo de placa perforada (perfboard).</li>
	<li>Un ATMega88 (Los ATMega48 y ATmega168 también valen y sólo se diferencian en la cantidad de memoria de que disponen).</li>
	<li>Un zócalo de 2&#215;14 patas (para sujetar el microcontrolador).</li>
	<li>Un 7805 (proporciona la tensión regulada de 5V.</li>
	<li>Dos condensadores de 10 nF (uno es para &#8220;suavizar&#8221; un poco la tensión de alimentación y efiltrar otro para filtrar ruidos en las entradas de los conversores analógico/digitales).</li>
	<li>Un conector de alimentación de 2.5mm.</li>
	<li>Una pareja de tiras de pines dobles (macho y hembra).</li>
	<li>Una tira de pines acodados hembra.</li>
	<li>Algunos trozos de cable rígido.</li>
</ol>
Aparte de soldador y estaño necesitarás un taladro o una Dremel con una broca fina, porque las patas del conector de alimentación son demasiado gruesas para los agujeros de la placa perforada.

Por lo demás, ningún material en esa lista es muy caro y ninguno es especialmente difícil de encontrar. En algunas tiendas de electrónica igual no tienen los ATMegas pero puedes encargarlos y te los traen en un par de días (cuestan entre 2 y 3 euros cada uno).

Ahora que tienes todos los materiales necesitas el esquema del circuito. Aquí lo tienes, en toda su gloria electrónica:

<div id="attachment_2817" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.obsoletos.org/wp-content/uploads/2010/01/testingGrounds.png"><img class="size-large wp-image-2817" title="TestingGrounds" src="http://www.obsoletos.org/wp-content/uploads/2010/01/testingGrounds-500x375.png" alt="Esquema eléctrico" width="500" height="375" /></a><p class="wp-caption-text">Esquema eléctrico</p></div>

No hay mucho que decir, simplemente se trata de conectar cada pin del micro al pitorro que le corresponda. A la hora de pasar esto a la placa perforada puede que te ayude echarle un vistazo antes a mi placa, así que aquí tienes una foto de la parte de abajo.

<div id="attachment_2688" class="wp-caption alignleft" style="width: 245px"><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090330.JPG"><img class="size-medium wp-image-2688" title="Placa desarrollo AVR- frente" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090330-235x176.jpg" alt="Placa desarrollo AVR- frente" width="235" height="176" /></a><p class="wp-caption-text">Cara A</p></div>

<div id="attachment_2689" class="wp-caption alignleft" style="width: 245px"><a href="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090332.JPG"><img class="size-medium wp-image-2689" title="Placa desarrollo AVR - trasera" src="http://www.obsoletos.org/wp-content/uploads/2009/11/P1090332-235x176.jpg" alt="Placa desarrollo AVR - trasera" width="235" height="176" /></a><p class="wp-caption-text">Cara B</p></div>
<p style="clear: both;">Antes de ponerte a soldar recuerda que tienes que agrandar los agujeros para el conector de alimentación. Mejor ahora que no puedes dañar nada en el proceso. Empieza a soldar por los componentes que menos sobresalgan sobre la placa. Los cables, luego el zócalo y el puerto de programación, el resto de los puertos, los condensadores, el 7805 y, por último, el conector de alimentación.</p>
No conectes todo entre sí hasta que todos los componentes estén sujetos. Luego puedes crear las pistas directamente con estaño sobre la placa. Cuando termines (antes de poner el micro en el zócalo) usa un polímetro para comprobar que no haya cortocircuitos.

Si todo esta bien puedes pasar a conectar cualquier transformador de esos que usa el router o el cargador de pilas. Sólo necesitas que suministre un voltaje de entre 7 y 18 Voltios.
<h4>El cable</h4>
Para programar a este pequeñín necesitaras un cablecico que lo conecte con tu ordenador. Por suerte es muy fácil construir uno. Éste es el programador más barato que hay y sirve para todo tipo de microcontroladores de AVR. Necesitaras:
<ul>
	<li>Un trocito de placa perforada.</li>
	<li>Un conector de puerto paralelo macho (<a href="http://es.wikipedia.org/wiki/D-sub">DB-25</a>).</li>
	<li>5 resistencias (entre 100 Ω y 1KΩ).</li>
	<li>Cable plano de 5 conductores (yo uso el <a href="http://commons.wikimedia.org/wiki/File:Cable_ide.jpg">cable de los discos duros IDE</a> y de las disqueteras, partiéndolo en tiras de la anchura que me interesa).</li>
	<li>Una tira de pines acodados macho.</li>
</ul>
5 de los pines del puerto paralelo se van a usar para la comunicación entre el ordenador y el microcontrolador. La siguiente tabla muestra las equivalencias:
<table border="4">
<tbody>
<tr>
<td><strong>Puerto paralelo</strong></td>
<td>Señal en el programador</td>
</tr>
<tr>
<td>Pin 7</td>
<td>RESET</td>
</tr>
<tr>
<td>Pin 8</td>
<td>SCK</td>
</tr>
<tr>
<td>Pin 9</td>
<td>MOSI</td>
</tr>
<tr>
<td>Pin 10</td>
<td>MISO</td>
</tr>
<tr>
<td>Pin 18</td>
<td>Ground</td>
</tr>
</tbody>
</table>
Tomando el cable plano, tenemos que soldar cada conductor de uno de sus extremos a uno de esos pines del conector DB-25. El otro extremo del cable lo soldamos a la plaquita preforada, y en serie con las resistencias y la tira de pines como en la siguiente foto:
<p style="text-align: center;"><a href="http://www.obsoletos.org/wp-content/uploads/2010/01/IMG_0139.JPG"><img class="size-large wp-image-2859 aligncenter" title="Programador AVR Pinout" src="http://www.obsoletos.org/wp-content/uploads/2010/01/IMG_0139-500x375.jpg" alt="Programador AVR Pinout" width="500" height="375" /></a></p>
El cable terminado encaja en el conector de programación de nuestra placa así:

<a href="http://www.obsoletos.org/wp-content/uploads/2010/01/IMG_0143.JPG"><img class="aligncenter size-large wp-image-2860" title="Programador AVR conectado" src="http://www.obsoletos.org/wp-content/uploads/2010/01/IMG_0143-500x375.jpg" alt="Programador AVR conectado" width="500" height="375" /></a>

Bueno, con esto ya puedes montar y programar tu propia plataforma de desarrollo para microcontroladores. En cuanto a la parte del ordenador, en <a href="http://www.obsoletos.org/2009/06/lo-que-aprendimos-en-el-taller-de-microcontroladores">este post</a> puedes encontrar los paquetes necesarios para compilar y un par de programas de ejemplo.
<h4>Disclamer</h4>
Tras un par de meses de pruebas el chisme funciona bien y es bastante fiable, pero ten en cuenta que yo acabo de empezar en esto, como quien dice, y que probablemente el diseño aún tenga mucho margen para mejorar. Sugerencias y consejos son bienvenidos. De momento, necesitamos un nombre para el producto.

Ah, bueno, al final no he contado cómo hacer el detector de presencia del video. En fin, ya tenemos bastante información por hoy. <a href="http://www.obsoletos.org/2010/03/detector-de-movimiento-sobre-un-atmega88/">En el proximo post</a> te doy todos los detalles. Y para compensar por la espera, te comentaré un par de proyectos sencillos más. Mientras tanto, puedes ir calentando el soldador.]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2010/01/plataforma-de-desarrollo-practica-y-barata-para-microcontroladores/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Las Xbox 360 baneadas invaden eBay</title>
		<link>http://www.obsoletos.org/2010/01/las-xbox-360-baneadas-invaden-ebay/</link>
		<comments>http://www.obsoletos.org/2010/01/las-xbox-360-baneadas-invaden-ebay/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 16:23:55 +0000</pubDate>
		<dc:creator>paaq</dc:creator>
				<category><![CDATA[Breves]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[videoconsolas]]></category>
		<category><![CDATA[xbox 360]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2797</guid>
		<description><![CDATA[Cuando Microsoft decidió el pasado diciembre banear del servicio online a las Xbox 360 chipeadas, provocó curiosos movimientos en la red como la invasión de consolas baneadas a la venta en eBay (en inglés). Para los gamers, la interactividad social y el multijugador online se han convertido en imprescindibles, muchos años después de aquellas Nintendo [...]]]></description>
			<content:encoded><![CDATA[Cuando Microsoft decidió el pasado diciembre <a href="http://www.elotrolado.net/noticia_los-nuevos-baneos-de-xbox-360-llegan-a-espana_16903">banear del servicio online a las Xbox 360 chipeadas</a>, provocó curiosos movimientos en la red como la <a href="http://www.pcworld.com/article/181993/">invasión de consolas baneadas a la venta en eBay</a> (en inglés). Para los gamers, la interactividad social y el multijugador online se han convertido en imprescindibles, muchos años después de aquellas Nintendo GameCube y Sega Saturn que comenzaban a tantear la conexión a la red.]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2010/01/las-xbox-360-baneadas-invaden-ebay/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sobre entrada de datos y circuitos eléctricos (Puerto paralelo II)</title>
		<link>http://www.obsoletos.org/2009/09/sobre-entrada-de-datos-y-circuitos-electricos-puerto-paralelo-ii/</link>
		<comments>http://www.obsoletos.org/2009/09/sobre-entrada-de-datos-y-circuitos-electricos-puerto-paralelo-ii/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 07:30:32 +0000</pubDate>
		<dc:creator>cogollo</dc:creator>
				<category><![CDATA[Hackeos e ideas]]></category>
		<category><![CDATA[Nuestros hacks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[electrónica digital]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[Puerto paralelo]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2467</guid>
		<description><![CDATA[Hace unos meses ya hablamos de la salida de datos a través del puerto paralelo, pero dejé para más tarde hablar de la entrada. Bien, supongo que ya es lo bastante tarde. Para que quede claro, veremos qué hay que hacer para poder leer datos digitales a través del puerto paralelo del PC, mediante un [...]]]></description>
			<content:encoded><![CDATA[Hace unos meses ya <a href="http://www.obsoletos.org/2009/02/accediendo-al-mundo-real-el-puerto-paralelo/">hablamos de la salida de datos a través del puerto paralelo</a>, pero dejé para más tarde hablar de la entrada. Bien, supongo que ya es lo bastante tarde.

Para que quede claro, veremos <strong>qué hay que hacer para poder leer datos digitales a través del puerto paralelo del PC</strong>, mediante un programa en C y en un entorno Linux (aunque los circuitos que usaremos son validos para cualquier entorno).

Recapitulemos: el conector del puerto paralelo tiene 25 pines, que se corresponden con tres lineas de datos diferentes (Data, Control y Status) según este esquema:
<p style="text-align: left;"></p>


<div id="attachment_882" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.obsoletos.org/wp-content/uploads/2009/02/esquemapuertoparalelo.gif"><img class="size-large wp-image-882" title="Esquema puerto paralelo" src="http://www.obsoletos.org/wp-content/uploads/2009/02/esquemapuertoparalelo-500x95.gif" alt="Valor de los pines del puerto. Extraido de CodeProject" width="500" height="95" /></a><p class="wp-caption-text">Valor de los pines del puerto. Extraido de CodeProject</p></div>
<p style="text-align: left;">Además tenemos que Data es de entrada/salida, Control es sólo de salida y Status sólo de entrada. Y que en un determinado pin 0V representan un 0 lógico y 5V un 1 lógico, salvo en los pines que están invertidos (Y este puede ser un buen momento para repasar <a href="http://www.obsoletos.org/2009/02/accediendo-al-mundo-real-el-puerto-paralelo/">el primer artículo</a>).</p>
<p style="text-align: left;">Vimos también que para sacar un byte a través de un puerto hay que usar la función:</p>

<pre style="font-family: monospace; text-align: center;">outb<span style="color: #009900;">(</span>Byte<span style="color: #339933;">,</span>Puerto<span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
<p style="text-align: left;">donde <em>Byte</em> es el byte de datos que queremos mostrar y <em>Puerto</em> es el numero del puerto que queremos usar y que en la mayoría de los casos es 0&#215;378 para el puerto de datos, 0&#215;379 para el puerto de status y 0&#215;380 para el puerto de control.</p>
<p style="text-align: left;">Pues bien, para la entrada de datos tenemos una función similar:</p>

<pre style="font-family: monospace; text-align: center;">inb<span style="color: #009900;">(</span>Puerto<span style="color: #009900;">)</span><span style="color: #339933;">;
</span></pre>
<p style="text-align: left;">que devuelve un byte de datos leidos a traves de <em>Puerto</em>. Por ejemplo, para leer desde el puerto de status y guardarlo en la variable <em>input</em> pondríamos:</p>

<pre style="font-family: monospace; text-align: center;"><strong>short int</strong> input = inb<span style="color: #009900;">(0x379</span><span style="color: #009900;">)</span><span style="color: #339933;">;
</span></pre>
<p style="text-align: left;">Y eso es todo amigos, pero antes de ponernos con un programa de ejemplo deja que aclare una cosilla sobre circuitos eléctricos.</p>
<p style="text-align: left;"><span id="more-2467"></span></p>

<h4 style="text-align: left;">Breve anotación sobre los circuitos eléctricos</h4>
<p style="text-align: left;">En un circuito eléctrico, <strong>un cable que no está conectado a nada no está a 0V</strong>. Vale, puede que para ti esto sea una perogrullada, pero si no estas familiarizado con la electricidad, lo más inmediato es pensar que un cable que no esta conectado, por el que no pasa electricidad, no tiene un voltaje, o sea que está a 0V.</p>
<p style="text-align: left;">Pero no es tan sencillo. Y por lo que he podido comprobar mucha gente tiene esa creencia, que por otra parte causa muchos problemas a la hora de intentar leer datos digitales.</p>
<p style="text-align: left;">Te pondré un ejemplo: fíjate en el esquema de aquí abajo a la izquierda. Uno podría pensar en usar un montaje como éste para detectar la pulsación de un boton. Si <em>Entrada</em> es uno de los pines del puerto de estatus podemos usar <em>inb(0&#215;379)</em> para ver el estado de ese pin.</p>
<p style="text-align: left;"><img class="aligncenter size-large wp-image-2463" title="switch simple" src="http://www.obsoletos.org/wp-content/uploads/2009/08/switch-simple-500x194.jpg" alt="switch simple" width="500" height="194" /></p>
<p style="text-align: left;">Cuando pulsamos en interruptor el circuito se cierra,el pin de entrada está a 5V y leemos un 1 en ese bit. Cuando se suelta el interruptor el circuito se abre de nuevo y el pin de entrada queda &#8220;al aire&#8221;, con lo que debe de estar a 0V y leemos un 0 en su bit, ¿no? Pues más bien no.</p>
<p style="text-align: left;">En primer lugar desconocemos cómo es el circuito detrás de ese pin. Dentro de tu ordenador el mismo circuito que se encarga de la lectura del pin podría estar induciendo ahí un cierto voltaje desconocido para nosotros. Podría ser 0, podría ser 5, podría ser cualquier valor entre 0 y 5. <em>You never know</em>.</p>
<p style="text-align: left;">Eso ya es bastante malo. Pero es que además la configuración del circuito podría hacer que éste actuase como un diminuto condensador y cualquier carga igualmente diminuta que quede atrapada en él produciría también un voltaje desconocido para nosotros. Incluso puede darse el caso de que el cable que estemos usando para la entrada actúe como una antena de radio y nuestra entrada se vea afectada por todo tipo de interferencias.</p>
<p style="text-align: left;">Para que nos entendamos, y reformulando la primera sentencia para un caso más concreto: Un pin de entrada que no está conectado a nada no está a 0V, tendrá un voltaje arbitrario y desconocido para nosotros.</p>
<p style="text-align: left;">¿Y cómo salimos de ésta pues? No te dejes los pines al aire. Por ejemplo: En lugar del interruptor simple de antes podemos usar un selector como el del siguiente esquema:</p>
<p style="text-align: left;"><img class="aligncenter size-large wp-image-2460" title="Switch doble" src="http://www.obsoletos.org/wp-content/uploads/2009/08/Switch-doble-500x220.jpg" alt="Switch doble" width="500" height="220" />En este caso, cuando el selector está arriba tenemos la entrada conectada a los 5V (1 lógico) y cuando está abajo la entrada pasa inmediatamente a estar a 0V (0 lógico). Aquí cada estado del selector está asociado inequívocamente a un valor del bit leído. Puedes encontrar este tipo de selectores bajo los botones del ratón de tu ordenador. De los tres pines que tienen, el que se encuentra bajo el pulsador está normalmente conectado al del otro extremo y cuando se presiona el pulsador pasa a estar conectado al del centro.</p>


<div id="attachment_2464" class="wp-caption aligncenter" style="width: 510px"><img class="size-large wp-image-2464" title="switch doble breadboard" src="http://www.obsoletos.org/wp-content/uploads/2009/08/P1090064-500x375.jpg" alt="switch doble breadboard" width="500" height="375" /><p class="wp-caption-text">Ejemplo de conexión de un selector. En esta imagen y en las siguientes el cable azul está conectado a tierra (0V) y el naranja a 5V.</p></div>
<p style="text-align: left;">Otra forma de mantener la entrada siempre a un voltaje conocido es usar una resistencia <em>pull-up</em> o <em>pull-down</em>. A continuación tienes el esquema del montaje de una resistencia<em> pull-down</em>:</p>
<p style="text-align: left;"><img class="aligncenter size-large wp-image-2461" title="switch pulldown" src="http://www.obsoletos.org/wp-content/uploads/2009/08/switch-pulldown-500x248.jpg" alt="switch pulldown" width="500" height="248" /></p>
<p style="text-align: left;">Se emplea una resistencia de valor intermedio. Lo más habitual es que sea de 1 o 10 KΩ. Cuando el interruptor está cerrado, la resistencia que ofrece la rama del circuito que va a los 5 V es mucho menor que la que va hasta los 0V así que el voltaje en el nodo donde confluyen las tres ramas del circuito es prácticamente 5V. Lo bueno es que aquí, cuando el interruptor se abre, el pin de entrada no queda aislado, sino que sigue conectado a tierra a través de la resistencia. Cualquier carga que hubiera quedado atrapada en el circuito se descarga rápidamente a través de la resistencia y la entrada se pone a 0V.</p>
<p style="text-align: left;">Una resistencia <em>pull-up</em> funciona igual, pero se conecta a los 5V como en este esquema:</p>
<p style="text-align: left;"><img class="aligncenter size-large wp-image-2462" title="switch pullup" src="http://www.obsoletos.org/wp-content/uploads/2009/08/switch-pullup-500x220.jpg" alt="switch pullup" width="500" height="220" /></p>
<p style="text-align: left;">En este caso con interruptor cerrado la rama de tierra tiene mucha menos resistencia que la de 5V y el voltaje en el nodo es de (prácticamente) 0V. Al abrirse el interruptor, la resistencia mantiene la entrada conectada a los 5V y el voltaje de entrada sube hasta ese valor.</p>
<p style="text-align: left;">Aquí abajo puedes ver como sería la entrada con una resistencia <em>pull-dow</em> (izquierda)  y otra <em>pull-up</em> (derecha).</p>
<p style="text-align: left;"><a href="../wp-content/uploads/2009/08/P1090067.jpg"><img class="size-medium wp-image-2465 alignleft" title="switch pulldown breadboard" src="http://www.obsoletos.org/wp-content/uploads/2009/08/P1090065-235x176.jpg" alt="switch pulldown breadboard" width="235" height="176" /><img title="switch pullup breadboard" src="../wp-content/uploads/2009/08/P1090067-235x176.jpg" alt="switch pullup breadboard" width="235" height="176" /></a></p>

<h4 style="text-align: left;">De vuelta al software</h4>
Bien, ahora que ya sabes como conectar tus sensores al puerto paralelo veamos un programita que lea el valor de esos sensores. Este ejemplo lee el valor de dos interruptores conectados a los pines 3 y 4 del puerto de estatus. Los interruptores usan resistencias <em>pull-up</em> por lo que la lectura de un 0 lógico en uno de esos pines representa una pulsación en su interruptor asociado. Un mensaje en pantalla dice qué interruptor se está pulsando.


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Este programa monitoriza el valor estado de 2 pulsadores conectados</span>
<span style="color: #666666; font-style: italic;">//a las lineas de STATUS y muestra por pantalla si se ha pulsado alguno de ellos</span>
&nbsp;
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #666666; font-style: italic;">//sys/io.h es donde estan definidas las funciones ioperm() y inb()</span>
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Esta es la direccion mas frecuente para el puerto paralelo</span>
<span style="color: #339933;">#define DATAPORT 0x378</span>
<span style="color: #666666; font-style: italic;">//Y esta es la direccion de las lineas de Status</span>
<span style="color: #339933;">#define STATUSPORT DATAPORT+1</span>
&nbsp;
<span style="color: #339933;">#define TIEMPOCONPULSACION 300000</span>
<span style="color: #339933;">#define TIEMPOSINPULSACION 10000</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Mascaras para los pines 3 y 4 del puerto de Status</span>
<span style="color: #339933;">#define BOTON1 8</span>
<span style="color: #339933;">#define BOTON2 16</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//Obtenemos permiso de acceso para la direccion de DATAPORT y</span>
  <span style="color: #666666; font-style: italic;">//las 2 siguientes</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ioperm<span style="color: #009900;">&#40;</span>DATAPORT<span style="color: #339933;">,</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>perror<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ioperm&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Entramos en el bucle principal del programa</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//input va a guardar el valor leido desde el puerto</span>
    <span style="color: #993333;">short</span> <span style="color: #993333;">int</span> input<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//pulsacion nos va a decir que boton se ha pulsado</span>
    <span style="color: #993333;">short</span> <span style="color: #993333;">int</span> pulsacion <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
 	<span style="color: #666666; font-style: italic;">//Leemos el byte de las lineas de Status y lo guardamos en input</span>
 	input<span style="color: #339933;">=</span>inb<span style="color: #009900;">&#40;</span>STATUSPORT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 	<span style="color: #666666; font-style: italic;">//Si input tiene el bit BOTON1 a cero es que se ha pulsado el boton correspondiente</span>
 	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>input <span style="color: #339933;">&amp;</span> BOTON1<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
 		<span style="color: #666666; font-style: italic;">//Ponemos pulsacion a 1 para indicarlo y sacamos un mensaje por pantalla</span>
 		pulsacion<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
 	<span style="color: #666666; font-style: italic;">//Si tiene a cero el bit BOTON2 es que se ha pulsado el otro boton</span>
 	<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>input <span style="color: #339933;">&amp;</span> BOTON2<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
 		pulsacion<span style="color: #339933;">=</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Si pulsacion !=0 es que se ha pulsado algun boton.</span>
	<span style="color: #666666; font-style: italic;">//Esperamos TIEMPOCONPULSACION microsegundos para no inundar la pantalla de texto</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pulsacion<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Pulsando boton %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>pulsacion<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 		fflush<span style="color: #009900;">&#40;</span>stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		usleep<span style="color: #009900;">&#40;</span>TIEMPOCONPULSACION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;">//En caso contrario solo esperamos TIEMPOSINPULSACION microsegundos</span>
	<span style="color: #b1b100;">else</span> usleep<span style="color: #009900;">&#40;</span>TIEMPOSINPULSACION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">//Antes de terminar el programa dejamos los permisos de acceso</span>
  <span style="color: #666666; font-style: italic;">//a los puertos como estaban</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ioperm<span style="color: #009900;">&#40;</span>DATAPORT<span style="color: #339933;">,</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>perror<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ioperm&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//El programa termina sin errores</span>
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>



Esto debería dejar más o menos claro cómo leer datos en las líneas de estatus, pero ¿qué pasa con las líneas de datos? ¿No habíamos quedado que son de entrada y salida? Bueno sí, lo son. Al menos en cualquier ordenador razonablemente moderno, pero en sus primeras versiones el puerto de datos era sólo de salida.

Suponiendo que tu ordenador tenga menos de 15 años puedes configurar las líneas de datos para entrada poniendo a 1 el bit 5 del puerto de control (este bit no se corresponde con ningún pin &#8220;físico&#8221; de puerto de control, sólo está ahi para seleccionar el modo del puerto de datos). Es decir:
<pre style="font-family: monospace; text-align: center;">outb<span style="color: #009900;">(</span>0x10<span style="color: #339933;">,</span>0x380<span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
Después de eso ya puedes leer la entrada como hicimos antes, solo tienes que cambiar la dirección del puerto.
<pre style="font-family: monospace; text-align: center;"><strong>short int</strong> input = inb(0x378);<span style="color: #009900;"> </span><span style="color: #009900;"> </span><span style="color: #339933;"> </span></pre>
<h4>Otra vuelta de tuerca</h4>
Para terminar te propongo un programíta que usa tanto entrada como salida de datos por el puerto paralelo. Este programa detecta la pulsación de dos botones como el ejemplo anterior, pero ya no dice por pantalla qué botón se ha pulsado. Ahora tenemos 8 LEDs conectados a las 8 líneas de datos y uno de ellos está encendido. Lo que hace el programa es cambiar el LED que se enciende una posición a la derecha cuando se pulsa el botón derecho y una posición a la izquierda cuando se pulsa el botón izquierdo. Aunque mejor mira el vídeo que tenemos a continuación, que no deja lugar a dudas.

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=6444414&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=6444414&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object>

Bueno, pues el programa que hace eso en realidad es muy similar al primero. Aquí lo tienes:


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Este programa monitoriza el valor estado de 2 pulsadores conectados</span>
<span style="color: #666666; font-style: italic;">//a las lineas de STATUS y cambia la posicion del led que esta iluminado</span>
&nbsp;
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Direccion del puerto paralelo</span>
<span style="color: #339933;">#define DATAPORT 0x378</span>
<span style="color: #339933;">#define STATUSPORT DATAPORT+1</span>
&nbsp;
<span style="color: #339933;">#define TIEMPOCONPULSACION 300000</span>
<span style="color: #339933;">#define TIEMPOSINPULSACION 10000</span>
&nbsp;
<span style="color: #339933;">#define BOTON1 8</span>
<span style="color: #339933;">#define BOTON2 16</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//Obtenemos permiso de acceso para DATAPORT</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ioperm<span style="color: #009900;">&#40;</span>DATAPORT<span style="color: #339933;">,</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>perror<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ioperm&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//light va  aguardar el estado de la salida del puerto.</span>
  <span style="color: #666666; font-style: italic;">//Lo hacemos igual a 00000001 en binario</span>
  <span style="color: #993333;">unsigned</span> <span style="color: #993333;">short</span> <span style="color: #993333;">int</span> light<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">//y lo sacamos por el puerto paralelo para que se encienda el primer led</span>
  outb<span style="color: #009900;">&#40;</span>light<span style="color: #339933;">,</span> DATAPORT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Bucle principal</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">short</span> <span style="color: #993333;">int</span> input<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">short</span> <span style="color: #993333;">int</span> pulsacion <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
 	input<span style="color: #339933;">=</span>inb<span style="color: #009900;">&#40;</span>STATUSPORT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>input <span style="color: #339933;">&amp;</span> BOTON1<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
 		<span style="color: #666666; font-style: italic;">//Se ha pulsado el boton 1</span>
 		pulsacion<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
 	<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>input <span style="color: #339933;">&amp;</span> BOTON2<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
 		<span style="color: #666666; font-style: italic;">//Se ha pulsado el boton 2</span>
 		pulsacion<span style="color: #339933;">=</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pulsacion<span style="color: #339933;">==</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//Si light es (00000001)b lo convertimos en (10000000)b</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>light<span style="color: #339933;">==</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
			light<span style="color: #339933;">=</span><span style="color: #0000dd;">128</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//Si no, desplazamos el 1 un lugar a la derecha</span>
		<span style="color: #b1b100;">else</span>
			light<span style="color: #339933;">&gt;&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//Sacamos el nuevo valor por el puerto</span>
		outb<span style="color: #009900;">&#40;</span>light<span style="color: #339933;">,</span> DATAPORT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		usleep<span style="color: #009900;">&#40;</span>TIEMPOCONPULSACION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pulsacion<span style="color: #339933;">==</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//Si light es (10000000)b lo convertimos en (00000001)b</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>light<span style="color: #339933;">==</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span>
			light<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//Si no, desplazamos el 1 un lugar a la izquierda</span>
		<span style="color: #b1b100;">else</span>
			light<span style="color: #339933;">&lt;&lt;=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//Sacamos el nuevo valor por el puerto</span>
		outb<span style="color: #009900;">&#40;</span>light<span style="color: #339933;">,</span> DATAPORT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		usleep<span style="color: #009900;">&#40;</span>TIEMPOCONPULSACION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> usleep<span style="color: #009900;">&#40;</span>TIEMPOSINPULSACION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Restauramos los permisos de acceso al puerto</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ioperm<span style="color: #009900;">&#40;</span>DATAPORT<span style="color: #339933;">,</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>perror<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ioperm&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//El programa termina sin errores</span>
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>



Ale, pues ya está, con esto terminamos la &#8220;parte teórica&#8221; del puerto paralelo. En el futuro intentaré hablar de cómo interactuar con cosas concretas (motores, pantallas LCD, disqueteras&#8230;), pero ésa es otra historia y debe ser contada en otro momento.]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/09/sobre-entrada-de-datos-y-circuitos-electricos-puerto-paralelo-ii/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Guía visual de hardware</title>
		<link>http://www.obsoletos.org/2009/07/guia-visual-de-hardware/</link>
		<comments>http://www.obsoletos.org/2009/07/guia-visual-de-hardware/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 10:57:24 +0000</pubDate>
		<dc:creator>cogollo</dc:creator>
				<category><![CDATA[Obsolescencia]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[poster]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2308</guid>
		<description><![CDATA[Sí, amigos&#8230; Internet es una gran cosa. El otro lado de la red está lleno de gente dispuesta a compartir su conocimiento y ayudar al mundo en general. Por amor al arte.  Esto no solo es BELLO, así con mayusculas, también es tremendamente práctico. Verás, con la cosa ésta de Obsoletos uno acaba teniendo que [...]]]></description>
			<content:encoded><![CDATA[Sí, amigos&#8230; Internet es una gran cosa. El otro lado de la red está lleno de gente dispuesta a compartir su conocimiento y ayudar al mundo en general. Por amor al arte.  Esto no solo es BELLO, así con mayusculas, también es tremendamente práctico.

Verás, con la cosa ésta de Obsoletos uno acaba teniendo que enfrentarse a cantidades bastante respetables de chatarra informática. Lo peor es que cada pieza de esa creciente pila proviene de unas coordenadas distintas en el tiempo y en el espacio. Y como en el mundo del siglo XXI parece que nadie sepa lo que es un <em>standard</em>, a lo largo de los meses nos hemos tenido que pelear con ranuras de expansión, módulos de memoria, zócalos y conectores de lo más variopinto.

Y es un puteo, porque internet es poderoso y sabio, pero ciego. <a href="http://www.google.es">El oráculo</a> entiende de sustantivos, no de adjetivos ni de imágenes. Así, es trivial descargarse el <a href="http://www.fruitfly.org/sequence/release5genomic.shtml">genoma completo de drosophila melanogaster</a>, con tal de que escribas bien el nombre (y si lo escribes mal, te lo corrigen), pero no hay huevos a encontrar información sobre ese procesador que tienes ahí, encima de la mesa, pero que a saber cómo se llama.

Por eso nos ha alegrado tanto encontrar este poster que <a href="http://sonic840.deviantart.com/">sonic840</a> ha compartido en <a href="http://www.deviantart.com/">devianart</a>:

<div id="attachment_2314" class="wp-caption aligncenter" style="width: 480px"><a href="http://fc01.deviantart.com/fs46/f/2009/200/1/1/Computer_hardware_poster_1_7_by_Sonic840.png"><img class="size-full wp-image-2314" title="GuiaHardware" src="http://www.obsoletos.org/wp-content/uploads/2009/07/hardwareguide1.jpg" alt="GuiaHardware" width="470" height="665" /></a><p class="wp-caption-text">Click para ampliar (ojo que es grandecito)</p></div>
<p style="text-align: left;">Considéralo la piedra de Rosetta de la informática. Una herramienta que te permite comunicarte mucho más fácilmente con google, que te permite decirle exactamente lo que estás buscando. Y está muy completo (los sockets de procesadores van desde el <a href="http://es.wikipedia.org/wiki/8088">8086</a> hasta el futuro, literalmente). A nosotros, desde luego, nos viene de perlas.</p>

Vía <a href="http://hackaday.com/2009/07/18/visual-hardware-identification-guide/">Hack a day</a>.]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/07/guia-visual-de-hardware/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Si vives en un hotel, pueden entrar en tu habitación</title>
		<link>http://www.obsoletos.org/2009/07/si-vives-en-un-hotel-pueden-entrar-en-tu-habitacion/</link>
		<comments>http://www.obsoletos.org/2009/07/si-vives-en-un-hotel-pueden-entrar-en-tu-habitacion/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 11:09:02 +0000</pubDate>
		<dc:creator>paaq</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[libro]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2304</guid>
		<description><![CDATA[Hace meses que el Kindle, el libro electrónico de Amazon, ocupa algo de espacio en las carteras de los estadounidenses, y mucho más en los periódicos del todo el mundo. Aquí somos algo escépticos sobre el futuro del libro electrónico, aunque también he podido ver unos cuantos de estos aparatos en el metro madrileño y [...]]]></description>
			<content:encoded><![CDATA[Hace meses que el <strong>Kindle</strong>, el libro electrónico de Amazon, ocupa algo de espacio en las carteras de los estadounidenses, y mucho más en los periódicos del todo el mundo. Aquí <a href="http://www.obsoletos.org/2009/02/los-ninos-son-el-futuro-el-kindle-no/">somos algo escépticos sobre el futuro del libro electrónico</a>, aunque también he podido ver unos cuantos de estos aparatos en el metro madrileño y me han parecido más cómodos de lo que pensaba.

El gran problema del Kindle, como ya apuntábamos, no es su usabilidad ni su concepto de producto, sino lo cerrado que está. La comunicación entre el Kindle y el resto del mundo está en manos de Amazon, pues se centraliza en la llamada Whispernet a la que se accede mediante una red inalámbrica creada para la ocasión. Amazon, que al fin y al cabo es una librería, incluso ha creado una aplicación para que los usuarios de un iPhone puedan acceder a los contenidos del Kindle. Así pues, la batalla tiene los dos frentes del hardware y el software, y Amazon quiere controlar ambos.

¿Qué problema puede haber? Al fin y al cabo, muchísima gente usa iTunes para actualizar la música en su reproductor portátil. O almacenan sus mails en servicios como Gmail, que te dan gratis lo que otros no pueden darte ni pagando. Confiamos a la <a href="http://es.wikipedia.org/wiki/Computaci%C3%B3n_en_nube">nube</a> partes importantes de nuestra vida privada, esperando honradez y, por qué no decirlo, que nadie en Google esté tan aburrido como para entretenerse leyendo mi correo personal. Podrían hacerlo sin que nadie se enterara, ¿no? Podrían filtrar todos los mensajes que terminen con un &#8220;te quiero&#8221; y elaborar en 0,22 segundos una colección de mil millones de cartas de amor. Pero no lo hacen, porque en internet uno vale tanto como la reputación que tiene.

Bien, pues <strong>Amazon lo ha hecho</strong>. De un día para otro, nos ha proporcionado a los defensores del open source el argumento más espectacular contra productos como el Kindle: la empresa <strong>ha borrado todas las copias de los libros de George Orwell <em>1984</em> y <em>Rebelión en la granja</em> que habían comprado los usuarios</strong>. Como suena: Amazon accedió a todos los aparatos que guardaban un par de libros en su memoria, y borró todas esas copias remotamente sin pedir permiso al comprador ¡y esos libros eran <em>1984 y Rebelión en la granja</em>! Es tan redondo que parece ficción.

Por supuesto, se ha armado la marimorena. Desde los <a href="http://www.amazon.com/tag/kindle/forum/ref=cm_cd_pg_newest?%255Fencoding=UTF8&amp;cdForum=Fx1D7SY3BVSESG&amp;cdPage=1&amp;cdSort=oldest&amp;cdThread=Tx1QUP1NLUY4Q5M&amp;displayType=tagsDetail">foros de Amazon donde surgió la noticia</a>, hasta los gurús que la comentan esta mañana: David Pogue (qué gran titular: <a href="http://pogue.blogs.nytimes.com/2009/07/17/some-e-books-are-more-equal-than-others/">algunos libros son más iguales que otros</a>) o <a href="http://www.enriquedans.com/2009/07/amazon-el-kindle-y-la-mano-negra-que-se-lleva-tus-libros.html">Enrique Dans</a>. <a href="http://arstechnica.com/tech-policy/news/2009/07/amazon-sold-pirated-books-raided-some-kindles.ars">La noticia en Ars Technica es más extensa</a> y recoge las declaraciones de la librería con los motivos por los que borró los libros: básicamente, por un problema de derechos. Dicen que los libros fueron añadidos a la biblioteca del Kindle por una tercera parte que no poseía el copyright, y que todos los usuarios afectados han visto crecer su saldo en el dólar que costaba cada archivo. Vale, pero, como dice David Pogue, si un vendedor del Corte Inglés te vende un libro que no debería, no entra en tu casa de noche para llevárselo dejando un billete encima de la mesa.

Amazon ha prometido no volver a borrar contenido de los Kindles sin pedir permiso, que no lo van a hacer nunca-nunca-nunca, y que para eso van a cambiar el sistema, que actualmente incluye el borrado remoto como una funcionalidad más. Espera&#8230; ¿la red del Kindle fue diseñada para poder borrar un libro de todos los aparatos que lo tienen con sólo pulsar un botón? ¿Qué otras &#8220;funcionalidades&#8221; descubriremos?]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/07/si-vives-en-un-hotel-pueden-entrar-en-tu-habitacion/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Un modelo cooperativo de producción que se va extendiendo</title>
		<link>http://www.obsoletos.org/2009/06/un-modelo-cooperativo-de-produccion-que-se-va-extendiendo/</link>
		<comments>http://www.obsoletos.org/2009/06/un-modelo-cooperativo-de-produccion-que-se-va-extendiendo/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 09:44:30 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[software libre]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2173</guid>
		<description><![CDATA[En Bulma han publicado recientemente un artículo divulgativo sobre software libre, Cultura social cooperativa y el movimiento del software libre (GNU/Linux), así de amplio. Su autora, Rosa Miró Bonet, es alguien en principio ajeno a ese mundo, una enfermera, y quizás precisamente por eso, es uno de los textos más sintéticos y didácticos que he [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.obsoletos.org/wp-content/uploads/2009/06/mapa_conceptual_software_libre.png"><img class="aligncenter size-large wp-image-2176" title="Mapa conceptual software libre" src="http://www.obsoletos.org/wp-content/uploads/2009/06/mapa_conceptual_software_libre-500x346.png" alt="Mapa conceptual software libre" width="500" height="346" /></a>

En <strong><a title="BULMA" href="http://bulma.net">Bulma</a></strong> han publicado recientemente un artículo divulgativo sobre software libre, <a title="El Software Libre visto por una enfermera -- BULMA" href="http://bulma.net/body.phtml?nIdNoticia=2493"><strong>Cultura social cooperativa y el movimiento del software libre (GNU/Linux)</strong></a>, así de amplio. Su autora, Rosa Miró Bonet, es alguien en principio ajeno a ese mundo, una enfermera, y quizás precisamente por eso, es uno de los textos más sintéticos y didácticos que he leído sobre el tema. El texto traza un recorrido general desde los años sesenta, estableciendo los <a title="El Software Libre visto por una enfermera (Página 2) -- BULMA" href="http://bulma.net/body.phtml?nIdNoticia=2493&amp;nIdPage=2">antecedentes del movimiento que rodea hoy al software libre</a>, y atribuyendo la importacia que merece a cada personaje e institución implicados, y a cada texto que se ha escrito sobre el tema. De esta manera consigue justificar los mitos que se han creado en torno a figuras como <a title="Richard Stallman -- Wikipedia" href="http://es.wikipedia.org/wiki/Richard_Stallman">Richard Stallman</a> o textos como <a title="La catedral y el bazar -- Wikipedia" href="http://es.wikipedia.org/wiki/La_catedral_y_el_bazar"><em>La catedral y el bazar</em></a> (<a title="La catedral y el bazar (PDF) -- unizar.es" href="http://softlibre.unizar.es/manuales/softwarelibre/catedralbazar.pdf">PDF</a>, 117 kB), de <a title="Eric. S. Raymon -- Wikipedia" href="http://es.wikipedia.org/wiki/Eric_S._Raymond">Eric S. Raymond</a>.

Mediante este repaso conceptual el texto desbroza conceptos que en muchas ocasiones se mezclan o no se acaban de tener claros, como la diferencia entre un programa y su código fuente, o entre <a title="GPL -- GNU Operating System" href="http://www.gnu.org/copyleft/gpl.html">General Public License</a> (GPL) y <a title="CopyLeft -- GNU Operating System" href="http://www.gnu.org/copyleft/copyleft.es.html">CopyLeft</a>.
<blockquote>Posiblemente el mayor logro de la FSF en el ámbito jurídico es la General Public License (GPL), licencia que permite la libertad de la copia y distribución comercial. Para poder plasmar jurídicamente la GPL Stallman inventa el concepto Copyleft&#8230;</blockquote>
Después se centra en la organización que ha seguido la comunidad de hackers para desarrollar software siguiendo un <a title="El Software Libre visto por una enfermera (Página 6) -- BULMA" href="http://bulma.net/body.phtml?nIdNoticia=2493&amp;nIdPage=6">modelo cooperativo de producción</a>, y recurre a la <a title="Tit for tat -- Wikipedia" href="http://es.wikipedia.org/wiki/Tit_for_tat">teoría de juegos</a> para explicar por qué funciona, y cómo puede crecer desde un entorno local a uno más amplio.
<blockquote><a title="Robert Axelrod -- Wikipedia in english" href="http://en.wikipedia.org/wiki/Robert_Axelrod">Axelrod</a> afirma que la teoría de “Tit for Tat” lleva implícito que nadie busca mayor recompensa que los demás, y se siente feliz si el otro tiene el mismo premio que uno mismo. Al extrapolarlo al movimiento del software libre significa desear que todos tengan las mismas libertades de las que dispone uno mismo.

De acuerdo con esta idea, la teoría de “Tit for Tat” permitiría que los individuos cooperen entre sí prosperando desde pequeños enclaves locales a mayores, de forma que se vayan extendiendo a otras áreas dominadas por individuos egoístas.

Como la cooperación es un fenómeno que produce retroalimentación positiva y nuestra sociedad conserva un cierto tono proselitista, se deduce que por ello mucha gente acaba participando activamente en el desarrollo de este tipo de proyectos.</blockquote>
Los últimos epígrafes del texto son conclusiones y un pronóstico de la evolución de la comunidad en torno al software libre.
<blockquote>En el movimiento del software libre conviven individuos que apoyan un planteamiento centrado en el mejor resultado de productividad que se obtiene bajo la estructura del modelo bazar, manteniendo en todo momento una postura pragmática, rechazando cualquier formulación ética del modelo, junto con otros que sitúan en primer plano valores como la cooperación y libertad.

Este modelo deja de tener sentido cuando el trabajo se realiza con objetivos que divergen a los planteados al inicio, es decir, invertir esfuerzo y dedicación con el objetivo de trabajar para el desarrollo de un conocimiento común, tal y como describen algunos hackers, tener la sensación de formar parte de algo más grande que uno mismo.

El problema puede presentarse si en un momento dado el objetivo cambia de elaborar en red un software libre a elaborar un software gratis, ya que se esto puede llegar a desmoronar el sistema de cooperación sin mando, diluyendo la comunidad, y por tanto dejando el sistema inutilizado.</blockquote>
<small>Imagen: <a title="Feria de divulgación de Software Libre se realiza en las instalaciones del IUT Cumaná -- Moleculax" href="http://moleculax.blogspot.com/2008/04/feria-de-divulgacin-de-software-libre.html">Moleculax</a></small>]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/06/un-modelo-cooperativo-de-produccion-que-se-va-extendiendo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PXE y un cable de red bastan para arrancar tu ordenador sin disquetera, CD ni USB</title>
		<link>http://www.obsoletos.org/2009/06/pxe-y-un-cable-de-red-bastan-para-arrancar-tu-ordenador-sin-disquetera-cd-ni-usb/</link>
		<comments>http://www.obsoletos.org/2009/06/pxe-y-un-cable-de-red-bastan-para-arrancar-tu-ordenador-sin-disquetera-cd-ni-usb/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 07:00:25 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Nuestros hacks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[DHCP]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[PXE]]></category>
		<category><![CDATA[TFTP]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=2094</guid>
		<description><![CDATA[En esto del reciclaje tecnológico hay veces que cae en tus manos un ordenador que es como un niño sordo y ciego con el que te tienes que comunicar, un ordenador sin lector de CD y sin disquetera en el que quieres arrancar un sistema operativo e incluso instalárselo. Por otro lado, hay veces que [...]]]></description>
			<content:encoded><![CDATA[En esto del reciclaje tecnológico hay veces que cae en tus manos un ordenador que es como un niño sordo y ciego con el que te tienes que comunicar, un ordenador sin lector de CD y sin disquetera en el que quieres arrancar un sistema operativo e incluso instalárselo. Por otro lado, hay veces que necesitas instalar el mismo sistema operativo masivamente por la razón que sea, en nuestro caso para preparar los equipos con los que damos los talleres. En este caso, aunque los equipos tengan lector de CD, el método tradicional se revela lento e incómodo: preparar tantas copias del instalador en CD como equipos quieras instalar, copias que al cabo de unos meses se quedan desactualizadas por lo que son, prácticamente, de un solo uso.

Si te enfrentas a uno de estos dos casos puedes intentar comunicarte con el ordenador vía <acronym title="Local Area Network">LAN</acronym>, desde otro equipo de la red local, independientemente del sistema operativo que tenga instalado o de que no tenga ninguno. <strong>Mediante la red local puedes iniciar un ordenador e instalar un sistema operativo completo después.</strong> Para ello necesitamos un equipo que actúe como servidor <acronym title="Pre-boot eXecution Enviroment">PXE</acronym>, al que se conectará el cliente cuando lo encendamos y del que obtendrá los archivos necesarios para arrancar e instalar el sistema operativo completo.

<div id="attachment_2122" class="wp-caption alignnone" style="width: 563px"><img class="size-full wp-image-2122" title="pxe booting" src="http://www.obsoletos.org/wp-content/uploads/2009/06/pxe_booting.jpg" alt="¿Está claro, no?" width="553" height="700" /><p class="wp-caption-text">¿Está claro, no?</p></div>

Bueno, si el gráfico no ha sido suficiente para ti, sigue leyendo, que en realidad es más fácil de lo que parece.<span id="more-2094"></span>
<h2>Cuestiones previas</h2>
<ul>
	<li>En este caso, asumiremos que el servidor está corriendo sobre un <a title="Debian" href="http://debian.org">Debian GNU/Linux</a> o <a title="Categoría:Distribuciones basadas en Debian GNU/Linux -- Wikipedia" href="http://es.wikipedia.org/wiki/Categor%C3%ADa:Distribuciones_basadas_en_Debian_GNU/Linux">una distribución basada en Debian</a>, y que en los clientes queremos instalar <a title="Debian “lenny” Release Information -- Debian" href="http://www.debian.org/releases/lenny/">Debian Lenny</a>.</li>
	<li>Asumiremos también que estamos trabajando con una red local del tipo 192.168.1.0, que son la mayoría de ellas.</li>
	<li>Por último decir, que la instalación, configuración y demás operaciones las haremos desde una consola con permisos de usuario administrador. En las líneas de este pequeño manual indicamos esto con la notación <code>root@server:~#</code>, antes de cada orden que hay que ejecutar como administrador o root.</li>
</ul>
<h2>Requisitos y configuración del equipo cliente</h2>
Para poder realizar este tipo de instalación el cliente deberá disponer de la opción de arranque mediante LAN en la <a title="BIOS -- Wikipedia" href="http://es.wikipedia.org/wiki/BIOS">BIOS</a> (Basic Input/Output System), y tenerla activada. La BIOS es un software que viene instalado en la placa base de cualquier ordenador y que controla el arranque y detecta todo el hardware de la máquina. Normalmente se accede a él nada más encender el ordenador pulsando la tecla adecuada, &#8220;Supr&#8221; en casi todos los casos. En la <a title="Secuencia de arranque -- Wikipedia" href="http://es.wikipedia.org/wiki/Arranque_(inform%C3%A1tica)">secuencia de arranque</a> (Boot sequence) de la BIOS se listan en orden de prioridad los dispositivos desde los que se puede iniciar un sistema operativo: unidades de CD, disquetes, discos duros&#8230; Además, algunas BIOS dan la posibilidad de iniciar el ordenador desde un dispositivo alojado en otro ordenador, a través de una red local. Esta opción es la que activaremos y vamos a usar para arrancar nuestro equipo cliente.
<h2>Requisitos y configuración del equipo servidor</h2>
Este equipo le proporcionará al ciente una dirección en la red local, y posteriormente los archivos necesarios para arrancar. Estos archivos pueden ser un programa para instalar un sistema operativo completo, o directamente un sistema operativo tipo live. Para proporcionar estos dos servicios nuestro servidor tendrá que tener instalado un Pre-boot eXecution Enviroment (PXE) que se compone de un servidor DHCP, para integrar en la red local al cliente, respondiendo a su solicitud dándole una dirección IP; y un servidor TFTP, que pone a disposición de los clientes un sistema mínimo de arranque, un kernel para descargar en definitiva.

Para poner en funcionamiento ambos servicios, DHCP y TFTP los pasos a seguir son tres: instalar los paquetes necesarios, configurar el servicio e iniciarlo.
<h4>Servidor DHCP</h4>
Hay varios paquetes para que un ordenador actúe como servidor DHCP. Nosotros utilizaremos <strong><a title="Dnsmasq -- A DNS forwarder for NAT firewalls" href="http://www.thekelleys.org.uk/dnsmasq/doc.html">dnsmasq</a></strong>.

<strong>Instalación</strong>.
<blockquote><code>root@server:~# apt-get install dnsmasq</code></blockquote>
<strong>Configuración</strong>. El archivo de configuración (/etc/dnsmasq.conf) trae toda la documentación incrustada en forma de comentarios antes de cada orden. Por defecto todas las órdenes vienen comentadas también, para activarlas borraremos la almohadilla de principio de línea. Las líneas que deben estar activas son las siguientes:
<blockquote><code>dhcp-range=192.168.1.223,192.168.1.254,12h
dhcp-no-override
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot</code></blockquote>
<code>dhcp-range</code> indica a dnsmasq el rango de IPs que podrán ser asignadas a clientes por nuestro servidor DHCP, y el tiempo que estas direcciones tardan en renovarse. A la hora de elegir un rango hay que tener en cuenta cuántos equipos van a obtener una dirección del servidor, para que no se acaben, y que el máximo es de 1 a 254.
<code>dhcp-no-override</code> es una medida de seguridad para el PXE. Para los curiosos, hay más información en la <a title="How to configure dnsmasq for gPXE: A potential problem and a fix -- etherboot" href="http://www.etherboot.org/wiki/dnsmasq#a_potential_problem_and_a_fix">wiki de etherboot</a>.
<code>dhcp-boot</code> indica el archivo que contendrá la información de arranque. Por convenio se suele llamar simepre <code>pxelinux.0</code>.
<code>enable-tftp</code> le dice a dnsmasq que active sus funciones relacionadas con el servidor TFTP.
<code>tftp-root</code> por último establece la ubicación accesible para los clientes vía TFTP. Por tanto, es aquí donde tendremos que alojar los archivos que necesiten los clientes para arrancar o iniciar un sistema operativo. Podemos designar cualquier ruta, pero de nuevo por convenio se suele indicar <code>/var/lib/tftpboot</code>.

<strong>Puesta en marcha</strong>.
<blockquote><code>root@server:~# </code><code>/etc/init.d/dnsmasq restart</code></blockquote>
<h4>Servidor TFTP</h4>
<strong>Instalación</strong>.
<blockquote><code>root@server:~# </code><code>apt-get install tftpd-hpa</code></blockquote>
<strong>Configuración</strong>. El fichero de configuración (/etc/default/tftpd-hpa) sólo tiene dos líneas:
<blockquote><code>RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"</code></blockquote>
<code>RUN_DAEMON</code> viene con la opción &#8220;no&#8221;, por defecto; la cambiamos a &#8220;yes&#8221;. En <code>OPTIONS</code> tenemos que asegurarnos que la ruta que figura sea la misma que en el archivo de configuración de dnsmasq.

<strong>Puesta en marcha</strong>.
<blockquote><code>root@server:~# </code><code>/etc/init.d/tftp-hpa start</code></blockquote>
<h4>Servidor PXE</h4>
Pues ya deberías tener listo un servidor PXE para tu red local. Ahora solo te queda descargarte un instalador de la distribución que prefieras, en su versión net-install y colocarla en la ubicación del servidor que hemos definido como accesible a los clientes. En nuestro caso, Debian Lenny. Debian ofrece una versión para instalar por red completamente preparada en un archivo comprimido, así que lo único que hay que hacer es descargarla y descomprimirla:
<blockquote><code>root@server:~# cd /var/lib/tftpboot
root@server:/var/lib/tftpboot# wget http://ftp.es.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/netboot.tar.gz
root@server:</code><code>/var/lib/tftpboot#</code><code> tar -zxvf netboot.tar.gz</code></blockquote>
Ya está. Si ahora encendemos nuestro ordenador cliente, tras hacer el recuento de memoria y las demás comprobaciones de hardware, se conectará al servidor PXE e iniciará el instalador de Debian Lenny.
<h2>Más sobre el tema</h2>
<strong><a title="Setting up a server for PXE network booting -- Debian Administrator" href="http://www.debian-administration.org/articles/478">Setting up a server for PXE network booting</a></strong>, en <a title="Debian Administrator -- System Administration Tips and Resources" href="http://www.debian-administration.org"><em>Debian Administrator</em></a>.
Manual para configurar un servidor PXE, muy completo. Explica la organización que tienen que tener los archivos del servidor a trasferir mediante TFTP, y un resumen de la sintaxis para generar menús para mostrar opciones en el arranque.

<a title="Dnsmasq Setup -- thekelleys.org.uk" href="http://thekelleys.org.uk/dnsmasq/docs/setup.html"><strong>Dnsmasq Setup</strong></a>, en la <a title="Dnsmasq" href="http://thekelleys.org.uk/dnsmasq/doc.html"><em>Página oficial de dnsmasq</em></a>.
Aquí se puede encontrar la manera de configurar dnsmasq no sólo como servidor DHCP, también como servidor DNS.
Ejemplo de archivo de configuración de dnsmasq (/etc/dnsmasq.conf): http://edoceo.com/liber/network-dhcp

<a title="PXELINUX -- Syslinux" href="http://syslinux.zytor.com/wiki/index.php/PXELINUX"><strong>PXELinux</strong></a>, en <a title="The Syslinux Project" href="http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project"><em>The Syslinux Project</em></a>. Información exhaustiva para configurar un PXE, incluyendo la puesta en marcha de un servidor DHCP y TFTP.

<small>Imagen: <a title="Classical Internet Applications (CIA) -- os3" href="https://www.os3.nl/2008-2009/students/wouter_van_dongen/classical_internet_applications_cia">os3. System and networking engineering</a>.</small>]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/06/pxe-y-un-cable-de-red-bastan-para-arrancar-tu-ordenador-sin-disquetera-cd-ni-usb/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Una comprobación empírica que da puntos al software libre</title>
		<link>http://www.obsoletos.org/2009/05/una-comprobacion-empirica-que-da-puntos-al-software-libre/</link>
		<comments>http://www.obsoletos.org/2009/05/una-comprobacion-empirica-que-da-puntos-al-software-libre/#comments</comments>
		<pubDate>Wed, 06 May 2009 07:00:05 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Así va Obsoletos]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[xubuntu]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=1801</guid>
		<description><![CDATA[Tenemos que confesarlo: el lunes cogollo y yo estuvimos toda la mañana y parte de la tarde instalando Windows XP en cinco ordenadores, cinco equipos que utilizaremos en el primero de los talleres de Medialab. La gente de Tinkartank necesita el sistema operativo de Microsoft a toda costa para impartir su taller, y como lo [...]]]></description>
			<content:encoded><![CDATA[Tenemos que confesarlo: el lunes cogollo y yo estuvimos toda la mañana y parte de la tarde instalando Windows XP en cinco ordenadores, cinco equipos que utilizaremos en el primero de <a title="Circuitos rescatados: talleres de reutilización creativa de residuos informáticos -- Obsoletos" href="http://www.obsoletos.org/2009/05/circuitos-rescatados-talleres-de-reutilizacion-creativa-de-residuos-informaticos/">los talleres de Medialab</a>. La gente de <strong><a title="Tinkartank -- neo norwegian experiments in technology and art" href="http://tinkartank.wordpress.com/author/tinkartank/">Tinkartank</a></strong> necesita el sistema operativo de Microsoft a toda costa para impartir su taller, y como <a title="Mini-taller Sonidos olvidados, sonidos rescatados. Hacks musicales y bailables -- Medialab" href="http://medialab-prado.es/article/mini-taller_sonidos_olvidados_sonidos_rescatados_hacks_musicales_y_bailables">lo que van a hacer</a> merece mucho la pena pues hemos hecho una excepción.

Circunstancias que no vienen al caso han querido que los cinco equipos sean los mismos en los que instalamos Linux Xubuntu en el <a title="En directo desde Univerde: ¿qué tal esos talleres? -- Obsoletos" href="http://www.obsoletos.org/2009/04/en-directo-desde-univerde-%c2%bfque-tal-esos-talleres/">taller que dimos reciéntemente con la gente de Univerde</a>. Esto nos ha permitido realizar, sin quererlo, dos comprobaciones empíricas que nos han llenado de orgullo y satisfacción: Xubuntu requiere menos recursos de hardware que Windows XP; y XP es más difícil de instalar y su instalación requiere más tiempo que la de Xubuntu.

Durante la sesión del taller de Univerde dedicada a recuperar equipos con software libre conseguimos poner en funcionamiento seis en tres horas. Cada equipo contaba con un procesador Pentium III a 550-750 MHz, 128 MB de RAM, y un disco duro de 9 GB. De las personas apuntadas al taller ninguna había instalado antes Linux. El instalador de Xubuntu se encargó de detectar y hacer funcionar todo el hardware, instalar un entorno gŕafico completo con aplicaciones de sonido, vídeo, ofimática y navegación por Internet.

Durante la jornada del lunes, conseguimos instalar XP en cinco ordenadores de los seis del taller, tras seis horas de trabajo. A cada ordenador tuvimos que aumentarle la RAM hasta 256 MB para conseguir un funcionamiento que se saliese de lo <em>desesperantemente lento</em>. Aunque hacía más de un año que cogollo y yo no instalábamos XP, previamente lo hemos hecho varias veces. Tras completar los pasos que nos marcó el instalador de Windows, tuvimos que buscar, descargar e instalar los drivers de la tarjeta gráfica de cada equipo, y descargar e instalar varias aplicaciones que no vienen con el XP básico.

La primera comprobación empírica no es nada nuevo y cualquiera dirá «¿Qué esperabas?». En cambio la segunda, puede sorprender a más de uno hasta el punto de decir «Venga ya, deja de hacer apología linuxera.», y de haberse afirmado hace unos años sorprendería a muchos más. Desde Obsoletos, os animamos encarecidamente a hacer este tipo de comprobaciones.]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/05/una-comprobacion-empirica-que-da-puntos-al-software-libre/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ubunchu! Linux en manga</title>
		<link>http://www.obsoletos.org/2009/04/ubunchu-linux-en-manga/</link>
		<comments>http://www.obsoletos.org/2009/04/ubunchu-linux-en-manga/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 10:09:28 +0000</pubDate>
		<dc:creator>paaq</dc:creator>
				<category><![CDATA[Breves]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=1749</guid>
		<description><![CDATA[Un japonés llamado Hiroshi Seo ha alumbrado Ubunchu! el manga sobre la distribución más popular de Linux. En el primer capítulo, Masato, Akane y Risa, los miembros del Club de Sysadmin del instituto, decidirán qué sistema operativo correrá en la nueva máquina del club. Puedes bajar el PDF en inglés aquí o un rar con [...]]]></description>
			<content:encoded><![CDATA[<p>
	<img src="http://www.obsoletos.org/wp-content/uploads/2009/04/ubunchu.jpg" alt="This image has no alt text" />
	</p>Un japonés llamado <a href="http://seotch.wordpress.com/">Hiroshi Seo</a> ha alumbrado <strong>Ubunchu!</strong> el manga sobre la distribución más popular de Linux. En el primer capítulo, Masato, Akane y Risa, los miembros del Club de Sysadmin del instituto, decidirán qué sistema operativo correrá en la nueva máquina del club. Puedes <a href="http://www.mediafire.com/?jyimqyy2td2">bajar el PDF en inglés aquí</a> o <a href="http://www.mcanime.net/foro/viewtopic.php?p=3157892">un rar con PNGs en español mal traducido aquí</a>.

<small>Lo vi en <a href="http://acceso-directo.com/">Acceso Directo</a></small>]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/04/ubunchu-linux-en-manga/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Iniciando sesión remota</title>
		<link>http://www.obsoletos.org/2009/04/iniciando-sesion-remota/</link>
		<comments>http://www.obsoletos.org/2009/04/iniciando-sesion-remota/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 09:45:25 +0000</pubDate>
		<dc:creator>cogollo</dc:creator>
				<category><![CDATA[Nuestros hacks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[NX]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=1486</guid>
		<description><![CDATA[Estas tres últimas semanas han sido poco menos que un infierno. Hace unos días estuvimos aprendiendo a usar el puerto paralelo, e igual estoy adelantando acontecimientos, pero después de conseguir encender luces, no ha sido nada difícil controlar también un par de motores (ya veras cómo en el próximo post). Y después de poder controlar [...]]]></description>
			<content:encoded><![CDATA[Estas tres últimas semanas han sido poco menos que un infierno.<a href="http://www.obsoletos.org/2009/02/accediendo-al-mundo-real-el-puerto-paralelo/"> Hace unos días estuvimos aprendiendo a usar el puerto paralelo</a>, e igual estoy adelantando acontecimientos, pero después de conseguir encender luces, no ha sido nada difícil controlar también un par de motores (ya veras cómo en el próximo post). Y después de poder controlar motores, tampoco ha sido muy difícil ponerles ruedas a esos motores.

Total que ahora<strong> se me ha metido en la cabeza ponerle ruedas a un portátil y hacer que se mueva él solito</strong>. Porque claro, tenemos una red wifi que cubre toda nuestra casa, así que, teóricamente, podríamos acceder a ese portátil, y pilotarlo remotamente desde cualquier lugar del mundo (a través de internet en primera instancia y luego a través de nuestra red local).

Y fijate que no es tan difícil, oye. Tenemos a nuestra disposición herramientas como <a href="http://es.wikipedia.org/wiki/Telnet">telnet</a> o <a href="http://es.wikipedia.org/wiki/OpenSSH">SSH</a> que permiten iniciar sesión en un equipo remoto como si se estuviera ejecutando en nuestro equipo local. Podemos pues pasarle comandos por red a nuestro portátil usando otro ordenador como mando a distancia. El problema con estos sistemas es que sólo permiten iniciar sesion en modo texto. Y si bien no es muy problemático para pasarle información al cochecillo (después de todo sólo queremos que reaccione a la pulsación de ciertas teclas), sí que lo es para que el vehículo nos pase información a nosotros. Porque la información que puede transmitir una consola de texto es bastante limitada, y si estás intentando conducir un cochecillo que está en Madrid desde Cuenca necesitas que te den alguna pista.

Lo primero que se me ocurre para evitarnos este problema es añadirle una <strong>webcam</strong> al invento. Ahora, si iniciamos una sesión gráfica en ese ordenador podemos usar cualquier programilla que nos muestre las imágenes que está captando la webcam, como <a href="http://camorama.fixedgear.org/about.php">camorana</a>. Ergo, si iniciamos una sesión gráfica remota podremos ver lo que está viendo la webcam remotamente.

Parece fácil, ¿verdad? Y es que, además, disponemos de varias formas de hacer esto en linux. Está <a href="http://es.wikipedia.org/wiki/XDMCP">XDMCP</a>, que vendría a ser el protocolo que usa linux por defecto para estos menesteres, y que casi seguro que ya tienes instalado. Y está <a href="http://es.wikipedia.org/wiki/VNC">VNC</a>, que casi seguro que también tienes instalado (prueba a escribir &#8220;vinagre&#8221; en la consola) y que permite iniciar sesiones no sólo en otro ordenador con linux, sino en un ordenador con cualquier sistema operativo (suponiendo que le hayas instalado un servidor de VNC, claro).

Bueno, pues no es tan fácil. El problema con estos dos sistemas es que <strong>consumen muchísimo ancho de banda</strong>. Date cuenta que tienen que enviar la información que tiene que mostrar la pantalla en cada instante.  Pueden funcionar en una red local, pero cuando tienes que mandar ese chorro de datos por internet el sistema se satura y se vuelve inmanejable. Incluso dentro de la red local, en cuanto arrancas la webcam todo se vuelve leeeento y la imagen se mueve a saltos.

Afortunadamente el mundo es grande e internet es pequeño, y una empresa Italiana llamada <a href="http://www.nomachine.com/">Nomachine</a> ya se ha encargado de sacarnos las castañas del fuego. En concreto, esta compañía creo hace un par de años la <a href="http://es.wikipedia.org/wiki/Tecnolog%C3%ADa_NX">tecnología <strong>NX</strong></a>, que para que nos entendamos te permite ejecutar un escritorio virtual igual que con XDMCP o VNC, pero que, entre otras cosas,  cuenta con un potente algoritmo de <strong>compresión de datos</strong>.

En teoría la tecnología NX permite trabajar remotamente incluso con una conexión de modem. Yo no diría tanto. Pero sí es verdad que con velocidades de DSL permite ver las captura de la webcam con una tasa de refresco aceptable. Y en red local, con la conexión wifi de casa va suficientemente fluido como para poder jugar al <a href="http://">MAME</a>.

Entonces ¿cómo le mete uno el NX ese al ordenador? En primer lugar, NX canaliza todas sus comunicaciones a través de <strong>SSH</strong>, así que necesitaras instalar <a href="http://www.openssh.com/">OpenSSH</a> para que todo funcione (en Debian o Ubuntu esto es tan fácil como poner &#8220;apt-get install ssh&#8221; en una consola con permisos de administrador). Despues de eso sólo tienes que<a href="http://www.nomachine.com/select-package.php?os=linux&amp;id=1"> descargarte los tres paquetes de NX de la página de NoMachine</a>. En la máquina que vaya a funcionar como servidor (la máquina a la que te vas a conectar) tienes que instalar los tres paquetes (<em>nxclient</em>, <em>nxnode</em> y <em>nxserver</em>). En el cliente (el ordenador que vas a estar manoseando) sólo hace falta instalar el paquete nxclient.

Y ya estamos listos. &#8220;NX Client for Linux&#8221; debería haber aparecido en el menu de tu escritorio. Si lo pulsas aparecerá una ventana como ésta para que introduzcas los datos de la nueva conexión:
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1594" title="NXclient" src="http://www.obsoletos.org/wp-content/uploads/2009/04/nxclient.jpg" alt="NXclient" width="380" height="450" /></p>
<p style="text-align: left;">Como ves, nada del otro mundo. Sólo tienes que introducir la dirección del servidor al que quieres conectarte (el puerto por defecto es el 22), el tipo de sistema al que vas a conectarte, la velocidad de la conexión y el tamaño que quieres que tenga tu escritorio remoto. Bastante fácil.</p>
<p style="text-align: left;">Por cierto, el NX de NoMachine para linux es gratuito, pero si te va la marcha existe una versión totalmente libre llamada <strong><a href="http://freenx.berlios.de/download.php">FreeNX</a></strong>, aunque resulta algo más complicada de instalar.</p>
<p style="text-align: left;">Y eso es todo. Nada demasiado expectacular, pero creo que este programa puede suponer una muy buena herramienta contra la obsolescencia ya que nos permite rescatar las máquinas más limitadas para usarlas como terminales de conexión a nuestro nuevo y gordo servidor, tal como apuntó hace tiempo <em>erseco</em> <a href="http://www.obsoletos.org/2009/01/el-portatil-de-ocho-euros-hace-amiguitos/#comment-655">en uno de sus comentarios</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/04/iniciando-sesion-remota/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alta Tecnología Andina y el Escuelab de Lima</title>
		<link>http://www.obsoletos.org/2009/03/alta-tecnologia-andina-y-el-escuelab-de-lima/</link>
		<comments>http://www.obsoletos.org/2009/03/alta-tecnologia-andina-y-el-escuelab-de-lima/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 07:00:32 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Así va Obsoletos]]></category>
		<category><![CDATA[Iniciativas]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Talleres]]></category>
		<category><![CDATA[Lima]]></category>
		<category><![CDATA[Perú]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=1483</guid>
		<description><![CDATA[Alta Tecnología Andina (ATA) es una organización cultural no gubernamental peruana dedicada a la difusión y la investigación en torno al arte, la ciencia y la tecnología, que empezó su andadura en 1997 centrada en el vídeo arte. Con el paso del tiempo el nombre se les ha quedado pequeño y ya no solo trabajan [...]]]></description>
			<content:encoded><![CDATA[<strong><a title="Qué es ATA -- ata.org.pe" href="http://www.ata.org.pe/ata/index.html">Alta Tecnología Andina</a></strong> (ATA) es una organización cultural no gubernamental peruana dedicada a la difusión y la investigación en torno al arte, la ciencia y la tecnología, que empezó su andadura en 1997 centrada en el vídeo arte. Con el paso del tiempo el nombre se les ha quedado pequeño y ya no solo trabajan con alta tecnología. Durante los últimos meses de 2007  y hasta abril de 2008 desarrollaron en colaboración con <a title="Mini videos 2 - Ambiente Estereo Realidad # 4 -- Fundación Telefónica en Lima" href="http://centro.fundaciontelefonica.org.pe/blogscentro/emergentes/2008/10/mini-videos-2-ambiente-estereo.html">Enrique Mayorga</a> <em>Blip! Robótica del reciclaje</em>. Estas jorndas con varias fases espaciadas en el tiempo incluían <a title="Exposición “Blip! Robótica de Reciclaje” -- weblog.mendoza.edu.arg" href="http://weblog.mendoza.edu.ar/robotica/archives/017778.html">talleres de aprendizaje y construcción con material reutilizado y una exposición</a> de lo producido en la sede de la Fundación Telefónica de Lima.

Uno de los proyectos más recientes de ATA es la financiación del <strong><a title="Escuelab de Lima, Perú" href="http://www.escuelab.org">Escuelab</a></strong>, un centro cultural en Lima con filosofía de medialab. El centro se ha constituido como un centro comunitario de reparación de portátiles del <a title="One Laptop Per Child" href="http://laptop.org/en/">programa OLPC</a>. Según la página del Escuelab, «Perú es probablemente el país que más portátiles XO tiene en el mundo.» Dos noticias sorprendentes en el mismo párrafo, que haya centros que se dedican específicamente a reparar estas máquinas y que Perú sea el país donde más hay.

El día 5 de abril, parte de Obsoletos nos vamos a Lima a colaborar en la preparación del <a title="Proyecto Residuos Urbanos Sólidos -- Basurama" href="http://basurama.org/b08_rus.htm">proyecto RUS</a> que se llevará a cabo allí a finales de 2009, así que estamos preparando el terreno.]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/03/alta-tecnologia-andina-y-el-escuelab-de-lima/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Suse Studio: inventa nuevas maneras de usar el ordenador</title>
		<link>http://www.obsoletos.org/2009/02/suse-studio-inventa-nuevas-maneras-de-usar-el-ordenador/</link>
		<comments>http://www.obsoletos.org/2009/02/suse-studio-inventa-nuevas-maneras-de-usar-el-ordenador/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 08:08:43 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[novell]]></category>
		<category><![CDATA[suse]]></category>

		<guid isPermaLink="false">http://www.obsoletos.org/?p=876</guid>
		<description><![CDATA[Hace unos días nos lamentábamos en obsoletos de que las masas no estaban preparadas para Linux. El mundo del software libre es un carrusel emocional, y hoy a través de barrapunto nos llevamos la alegría de conocer Suse Studio. Como apuntan en cnet, el software es por definición infinitamente versatil; eso sí, su potencial está [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-877 aligncenter" title="suse studio" src="http://www.obsoletos.org/wp-content/uploads/2009/02/susestudio.png" alt="suse studio" width="369" height="315" /></p>

Hace unos días <a title="Las masas no están preparadas para Linux -- Obsoletos" href="http://www.obsoletos.org/2009/02/las-masas-no-estan-preparadas-para-linux/">nos lamentábamos en obsoletos</a> de que las masas no estaban preparadas para Linux. El mundo del software libre es un carrusel emocional, y hoy a través de <a title="Suse Studio: Creación online de distribuciones Linux personalizadas -- barrapunto" href="http://barrapunto.com/articles/09/02/04/188239.shtml">barrapunto</a> nos llevamos la alegría de conocer <strong><a title="Suse Studio:  Your Linux appliance construction kit" href="http://www.susestudio.com/">Suse Studio</a></strong>.

Como apuntan en <a title="Suse Studio: Linux customization for the masses --  CNet News" href="http://news.cnet.com/8301-13505_3-10148796-16.html">cnet</a>, el software es por definición infinitamente versatil; eso sí, su potencial está limitado por las condiciones bajo las que esté licenciado y por los conocimientos de programación del usuario. Lo primero queda anulado con el concepto de software libre, y lo segundo se va limando poco a poco. Las dos vienen a ser la misma cosa: cuanta más gente sea capaz de desarrollar software más diverso será éste.

La empresa <strong><a title="Novell " href="http://www.novell.com">Novell</a></strong> lanzó en septiembre de 2008 Suse Studio, una herramienta <em>on line</em> que permite crear distribuciones de Linux personalizándolas con las funcionalidades deseadas. La intención de los creadores de OpenSuse ha sido desarrollar una herramienta para todos los públicos, un sistema fácil de usar pero sin renunciar a posibilidades de personalización. Incluye un detector de <a title="Dependencias de software -- Wikipedia" href="http://es.wikipedia.org/wiki/Dependencia_(computaci%C3%B3n)">dependencias</a> inclumplidas, y un sistema para poder cubrir con soporte, de actualización por ejemplo, el amplio abanico de distros: un algoritmo evalúa la distribución una vez compilada y comprueba que cumple unos mínimos; si no los cumple se sugieren los cambios necesarios.

Aunque en fase alfa, se habla ya de Suse Studio como el Linux para las masas. Desde Obsoletos somos menos optimistas, ya que las dificultades de instalación y uso siguen ahí, pero sí que teóricamente hace posibles nuevas maneras de pensar el ordenador al poder más gente programarlo.

Nosotros lo probaremos a ver si nos abre un mundo de posibilidades para crear distros específicas para equipos antiguos, y así ponerlos en funcionamiento para tareas concretas: una máquina recreativa, un equipo de oficina, un ordenador para colegios, un equipo multimedia para el salón&#8230;]]></content:encoded>
			<wfw:commentRss>http://www.obsoletos.org/2009/02/suse-studio-inventa-nuevas-maneras-de-usar-el-ordenador/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

