<?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>planoComplejo</title>
	<atom:link href="http://planocomplejo.com.ar/wp/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://planocomplejo.com.ar/wp</link>
	<description>Ingeniería, electrónica y sistemas de la información</description>
	<lastBuildDate>Tue, 08 Nov 2011 19:20:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Usando git para administrar un sitio web</title>
		<link>http://planocomplejo.com.ar/wp/?p=365</link>
		<comments>http://planocomplejo.com.ar/wp/?p=365#comments</comments>
		<pubDate>Thu, 03 Nov 2011 05:44:05 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=365</guid>
		<description><![CDATA[Es posible usar git para llevar un control de versiones de un sitio y permitir la colaboarcion de varios desarrolladores. Para pequeños proyectos puede ser deseable que al hacer un git push queramos que se actualice el sitio con la última versión. Aca está simplemente una receta para hacerlo. La idea es inicializar el repositorio [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/11/git.jpg" rel="lightbox[365]"><img class="alignright size-full wp-image-374" style="margin-left: 5px; margin-right: 5px; border-width: 1px; border-color: black; border-style: solid;" title="git" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/11/git.jpg" alt="" width="175" height="175" /></a>Es posible usar git para llevar un control de versiones de un sitio y permitir la colaboarcion de varios desarrolladores. Para pequeños proyectos puede ser deseable que al hacer un git push queramos que se actualice el sitio con la última versión.</p>
<p>Aca está simplemente una receta para hacerlo. La idea es inicializar el repositorio en el directorio donde se encuentra el sitio (&#8216;/var/www&#8217; por ejemplo) y configurarlo para que luego de cada commit haga un reset hard, haciendo que se manifiesten los últimos cambios inmediatamente.</p>
<p><span id="more-365"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www$ <span style="color: #c20cb9; font-weight: bold;">git</span> init</pre></div></div>

<p>Luego configuramos los siguientes archivos:</p>
<p><strong>.git/config:</strong></p>
<p><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">[core]</span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">repositoryformatversion = <span style="color: #000000;">0</span>
filemode = <span style="color: #c20cb9; font-weight: bold;">true</span>
bare = <span style="color: #c20cb9; font-weight: bold;">false</span>
logallrefupdates = <span style="color: #c20cb9; font-weight: bold;">true</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>receive<span style="color: #7a0874; font-weight: bold;">&#93;</span>
denyCurrentBranch = warn</pre></div></div>

<p><strong> .git/hooks/post-recieve:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
 <span style="color: #7a0874; font-weight: bold;">cd</span> ..
 <span style="color: #c20cb9; font-weight: bold;">env</span> <span style="color: #660033;">-i</span> <span style="color: #c20cb9; font-weight: bold;">git</span> reset <span style="color: #660033;">--hard</span>
<span style="color: #666666; font-style: italic;"># Fix some file permission problem. Esto es solo para un caso particular, no lo necesitas. Podes poner lo que quieras aca...</span>
<span style="color: #666666; font-style: italic;"># echo [ INFO ] - Setting file permissions for token.sqlite and parent directories.</span>
<span style="color: #666666; font-style: italic;"># for i in `find /var/www/ -name token.sqlite`; do chmod 777 $i; chmod 777 `dirname $i`; done</span></pre></div></div>

<p>En el directorio raiz colocamos un archivo <strong>.gitignore</strong> para cancelar la &#8220;ignoracion&#8221; de los archivos que empiezan con . como el .htacces.</p>
<p>.gitignore:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">!</span>.<span style="color: #000000; font-weight: bold;">*</span></pre></div></div>

<p>Eso es todo. Cada vez que un developer haga un commit en el server se actualizara el sitio a la ultima versión.</p>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=365</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fabricar servo con motor paso a paso (PaP)</title>
		<link>http://planocomplejo.com.ar/wp/?p=333</link>
		<comments>http://planocomplejo.com.ar/wp/?p=333#comments</comments>
		<pubDate>Thu, 20 Oct 2011 04:27:00 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[motor paso a paso]]></category>
		<category><![CDATA[servo]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=333</guid>
		<description><![CDATA[Cómo construir en forma sencilla un servo sin reducción con un motor paso a paso extraido de una impresora. Para realizar el control del servo se utilizará una arduino, la cual a se conecta al motor PaP a través de un array darlington. Los comandos del servo serán recibidos por el puerto serie de la [...]]]></description>
			<content:encoded><![CDATA[<h3><a href="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07106.resized.jpg" rel="lightbox[333]"><img class="alignright size-full wp-image-334" style="border-width: 1px; border-color: black; border-style: solid; margin: 5px;" title="Interfaz servo" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07106.resized.jpg" alt="" width="250" height="188" /></a></h3>
<p>Cómo construir en forma sencilla un servo sin reducción con un motor paso a paso extraido de una impresora. Para realizar el control del servo se utilizará una arduino, la cual a se conecta al motor PaP a través de un array darlington. Los comandos del servo serán recibidos por el puerto serie de la arduino.</p>
<p>El control se hace desde un sencillísimo programa en python (2 líneas de código).</p>
<p>Como ejemplo, este servo se utilizó para controlar la rotación de una cámara web.</p>
<p><span id="more-333"></span></p>
<h3><span class="Apple-style-span" style="font-size: 15px; font-weight: bold;">Requisitos</span></h3>
<ul>
<li>Motor paso a paso de 4 bobinas. Voltaje 12v. Estan en todos lados: impresoras, disqueteras, lectoras CD/DVD, etc</li>
<li>Arduino</li>
<li>Integrados ULN2003A, uno cada 500mA de consumo del motor. Son muy baratos.</li>
<li>Elementos para realizar el conexionado. En este caso protoboard y cables.</li>
</ul>
<div>
<h3>Pasos para el ensamblado</h3>
<ul>
<li>Identificar la funcion de cada cable (si te interesa saber cómo deja un comentario pidiendolo y lo agrego).</li>
<li>Uno (o dos) de los cables será común a todas las bobinas. Conectarlo a +12V.</li>
<li>Conectar las bobinas a los ULN2003A pines 13, 14,15 y 16), encimándolos para aumentar la capacidad global de corriente del circuito.</li>
<li>El pin 8 del ULN va a GND.</li>
<li>Conectar los pines elegidos de la arduino (en este caso 6,8,10 y 12) al ULN (pines del 1-4).</li>
<li>Configurar y cargar el codigo fuente del sketch.</li>
<li>Darle power y probar (ver video)</li>
</ul>
<div style="text-align: center;"><iframe src="http://www.youtube.com/embed/FtCW1iarqUY" frameborder="0" width="420" height="315"></iframe></div>
<h3><span class="Apple-style-span" style="font-size: 15px; font-weight: bold;">Script de prueba (python)</span></h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">import serial
serial.<span style="color: #202020;">Serial</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/dev/ttyUSB0&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span>chr<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<h3 lang="c">Fotos</h3>

<a href='http://planocomplejo.com.ar/wp/?attachment_id=335' title='DSC07093'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07093-150x150.jpg" class="attachment-thumbnail" alt="DSC07093" title="DSC07093" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=336' title='DSC07096croped'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07096croped-150x150.jpg" class="attachment-thumbnail" alt="DSC07096croped" title="DSC07096croped" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=337' title='DSC07097croped'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07097croped-150x150.jpg" class="attachment-thumbnail" alt="DSC07097croped" title="DSC07097croped" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=338' title='DSC07104'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07104-150x150.jpg" class="attachment-thumbnail" alt="DSC07104" title="DSC07104" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=339' title='DSC07106'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07106-150x150.jpg" class="attachment-thumbnail" alt="DSC07106" title="DSC07106" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=340' title='DSC07110'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07110-150x150.jpg" class="attachment-thumbnail" alt="DSC07110" title="DSC07110" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=334' title='Interfaz servo'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2011/10/DSC07106.resized-150x150.jpg" class="attachment-thumbnail" alt="Interfaz servo" title="Interfaz servo" /></a>

<h3>Código fuente</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* SERVO INTERFACE FOR A STEP-MOTOR (OR &quot;MOTOR PASO A PASO&quot; (PAP))
 *
 * A ULN2003A darlington array is used as interface between the
 * motor coils and the Arduino.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version. See http://www.gnu.org/licenses/
 * Maxi Padulo - 30.09.2011
 */</span>
<span style="color: #666666; font-style: italic;">// Configuration</span>
<span style="color: #993333;">int</span> motorPins<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">12</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// The pins connected to the motor</span>
<span style="color: #993333;">int</span> totalSteps <span style="color: #339933;">=</span> <span style="color: #0000dd;">32</span><span style="color: #339933;">;</span>              <span style="color: #666666; font-style: italic;">// How many steps has the PAP motor, or in this case (my motor has 48)</span>
                                  <span style="color: #666666; font-style: italic;">// how many of them are we going to use in the servo.</span>
<span style="color: #993333;">int</span> delayTime <span style="color: #339933;">=</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">;</span>               <span style="color: #666666; font-style: italic;">// To control the speed of the servo. If it is too small, some steps</span>
                                  <span style="color: #666666; font-style: italic;">// can be jumped and sincronization is lost. This</span>
                                  <span style="color: #666666; font-style: italic;">// parameter is inteded to play with, because depends of the motor,</span>
                                  <span style="color: #666666; font-style: italic;">// voltage, load, etc.</span>
boolean Active <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>            <span style="color: #666666; font-style: italic;">// If Active = False, all coils will be off after placing the servo in</span>
                                  <span style="color: #666666; font-style: italic;">// the right position.</span>
&nbsp;
<span style="color: #993333;">int</span> count <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> count2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> count3<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> inByte<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> pos <span style="color: #339933;">=</span> totalSteps<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> newPos<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<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;">// Set the output pins</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">;</span> count<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    pinMode<span style="color: #009900;">&#40;</span>motorPins<span style="color: #009900;">&#91;</span>count<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Inicializando...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// To inicialize the steps count, we move the servo to one extreme to be shure of his position.</span>
  <span style="color: #666666; font-style: italic;">// Then I set it in the middle of his trajectory.</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count3 <span style="color: #339933;">=</span> totalSteps<span style="color: #339933;">;</span> count3 <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count3<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    moveBackward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">//pos=0;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count3 <span style="color: #339933;">=</span> totalSteps<span style="color: #339933;">/</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span> count3 <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count3<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  digitalWrite<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">13</span><span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// set the LED on</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>count2 <span style="color: #339933;">==</span> <span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      count2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      count2<span style="color: #339933;">&lt;&lt;=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">=</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span> count <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      digitalWrite<span style="color: #009900;">&#40;</span>motorPins<span style="color: #009900;">&#91;</span>count<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> count2<span style="color: #339933;">&gt;&gt;</span>count<span style="color: #339933;">&amp;</span><span style="color: #208080;">0x01</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    delay<span style="color: #009900;">&#40;</span>delayTime<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    pos<span style="color: #339933;">++;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> moveBackward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>count2 <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>
      count2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      count2<span style="color: #339933;">&gt;&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">=</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span> count <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      digitalWrite<span style="color: #009900;">&#40;</span>motorPins<span style="color: #009900;">&#91;</span>count<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> count2<span style="color: #339933;">&gt;&gt;</span>count<span style="color: #339933;">&amp;</span><span style="color: #208080;">0x01</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    delay<span style="color: #009900;">&#40;</span>delayTime<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    pos<span style="color: #339933;">--;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Serial.<span style="color: #202020;">available</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    inByte <span style="color: #339933;">=</span> Serial.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><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>inByte <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>inByte <span style="color: #339933;">&lt;</span> totalSteps<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      newPos <span style="color: #339933;">=</span> inByte<span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>newPos <span style="color: #339933;">&gt;</span> pos<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count3 <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>newPos <span style="color: #339933;">-</span> pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> count3 <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count3<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count3 <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">-</span> newPos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> count3 <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count3<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          moveBackward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #666666; font-style: italic;">// We send back the new position</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> DEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>Active<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">=</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span> count <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> count<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      digitalWrite<span style="color: #009900;">&#40;</span>motorPins<span style="color: #009900;">&#91;</span>count<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=333</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cambio en planocomplejo</title>
		<link>http://planocomplejo.com.ar/wp/?p=297</link>
		<comments>http://planocomplejo.com.ar/wp/?p=297#comments</comments>
		<pubDate>Wed, 04 May 2011 18:23:37 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[planoComplejo]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=297</guid>
		<description><![CDATA[He decidido cambiar el sitio. Esta nueva estructura me resulta mucho más cómoda y manejable. El sitio antiguo seguirá siendo siempre accesible a través de: http://planocomplejo.com.ar/cms Algunas cosas fueron migradas, otras quedarán en el otro sitio. No creo que esto cause molestias, pero pido disculpas en caso de que así sea. Maxi]]></description>
			<content:encoded><![CDATA[<p>He decidido cambiar el sitio. Esta nueva estructura me resulta mucho más cómoda y manejable.<br />
El sitio antiguo seguirá siendo siempre accesible a través de:</p>
<ul>
<li><a href="http://planocomplejo.com.ar/cms" target="_blank">http://planocomplejo.com.ar/cms</a></li>
</ul>
<p>Algunas cosas fueron migradas, otras quedarán en el otro sitio. No creo que esto cause molestias, pero pido disculpas en caso de que así sea.</p>
<p>Maxi</p>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=297</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cambiar el UUID de una imagen en VirtualBox</title>
		<link>http://planocomplejo.com.ar/wp/?p=266</link>
		<comments>http://planocomplejo.com.ar/wp/?p=266#comments</comments>
		<pubDate>Tue, 03 May 2011 11:57:27 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[UUID]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=266</guid>
		<description><![CDATA[Si hemos copiado una imagen de disco de virtual box y la queremos usar nuevamente en otra maquina virtual distinta nos encontraremos con el siguiente error: Failed to open the hard disk ARCHIVO.vdi. Cannot register the hard disk &#8216;ARCHIVO.vdi&#8217; {55c80bf5-cd7b-45cd-9782-ff0bbae57ce5} because a hard disk &#8216;OTRO_ARCHIVO.vdi&#8217; with UUID {55c80bf5-cd7b-45cd-9782-ff0bbae57ce5} already exists. Para resolver esto podemos cambiar [...]]]></description>
			<content:encoded><![CDATA[<p>Si hemos copiado una imagen de disco de virtual box y la queremos usar nuevamente en otra maquina virtual distinta nos encontraremos con el siguiente error:</p>
<p><strong>Failed to open the hard disk </strong><em>ARCHIVO</em><strong>.vdi.</strong><br />
<strong> Cannot register the hard disk &#8216;</strong><em>ARCHIVO</em><strong>.vdi&#8217; {55c80bf5-cd7b-45cd-9782-ff0bbae57ce5}</strong><br />
<strong> because a hard disk &#8216;</strong><em>OTRO_ARCHIVO</em><strong>.vdi&#8217; with UUID {55c80bf5-cd7b-45cd-9782-ff0bbae57ce5} already exists.</strong></p>
<p>Para resolver esto podemos cambiar el UUID de la imagen que hemos copiado con el siguiente comando:</p>
<p><span id="more-266"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">VBoxManage internalcommands sethduuid ARCHIVO.vdi</pre></div></div>

<p>Esto genera un nuevo UUID para esa imagen de disco, y nos permite usarla nuevamente en otra maquina virtual.</p>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=266</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejecutar commando cuando un host vuelve a estar activo</title>
		<link>http://planocomplejo.com.ar/wp/?p=254</link>
		<comments>http://planocomplejo.com.ar/wp/?p=254#comments</comments>
		<pubDate>Mon, 02 May 2011 17:20:32 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=254</guid>
		<description><![CDATA[A veces necesito reiniciar una maquina y luego ejecutar un comando en ella, pero no tengo ganas de esperar a que reinicie y bootee de nuevo. En sistemas grandes puede tardar un par de minutos. Lo que hago simplemente es correr el siguiente comando: ping -c 1 $HOST -w 600 &#38;&#38; sleep 10 &#38;&#38; ssh [...]]]></description>
			<content:encoded><![CDATA[<p>A veces necesito reiniciar una maquina y luego ejecutar un comando en ella, pero no tengo ganas de esperar a que reinicie y bootee de nuevo. En sistemas grandes puede tardar un par de minutos.</p>
<p><span id="more-254"></span>Lo que hago simplemente es correr el siguiente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ping</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">1</span> <span style="color: #007800;">$HOST</span> <span style="color: #660033;">-w</span> <span style="color: #000000;">600</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">10</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #007800;">$USER</span><span style="color: #000000; font-weight: bold;">@</span><span style="color: #007800;">$HOST</span> <span style="color: #007800;">$COMMANDO</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tardo mucho. Abortado&quot;</span></pre></div></div>

<p><strong>Explicacion</strong>:</p>
<p>Basicamente hago ping a la maquina de destino y espero hasta que me responda. Cuando me responde, ejecuto el comando deseado. Si no responde luego del timeout(600s) escribo un mensaje. Todo lo que empieza con $, debe ser reemplazado por su correspondiente valor. También puede ser cargado como variable bash (o del shell en uso).</p>
<p><strong>Explicación detallada:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ping</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">1</span> <span style="color: #007800;">$HOST</span> <span style="color: #660033;">-w</span> <span style="color: #000000;">600</span></pre></div></div>

<p>Consiste en el comando ping con determinados parámetros:</p>
<ul>
<li>&#8220;<strong>-c 1</strong>&#8221; indica que debe quedarse esperando a que el $HOST le responda 1 paquete y luego salir</li>
<li>&#8220;<strong>-w 600</strong>&#8221; esto es el tiempo que debe quedar esperando la respuesta del $HOST antes de darse por vencido</li>
</ul>
<p>Si no se recibe respuesta luego de 600 segundo ping aborta con mensaje de error distinto de 0, por lo que los demas comandos unidos por el &#8220;&amp;&amp;&#8221; (AND) no se ejecutan y en cambio se ejecuta el echo &#8221; &#8216; bla bla &#8216; &#8220;. Si por el contrario responde, se ejecuta todo lo que le sigue unido por los &amp;&amp; y no se ejecuta los que está luego del &#8220;||&#8221;. Es simple lógica binaria creo q no necesita explicación.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">10</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #007800;">$USER</span><span style="color: #000000; font-weight: bold;">@</span><span style="color: #007800;">$HOST</span> <span style="color: #007800;">$COMMANDO</span></pre></div></div>

<p>Una vez que me responde el ping, espero 10 segundos antes de ejecutar el comando ssh, ya que el servicio de ssh (sshd) se inicia un poco despues que el servicio de red. Si lo intentamos enseguida no funciona. Para que el comando se ejecute sin intervencion del usuario (sin poner la clave) es necesario tener configurado el HOST para iniciarlo passwordless (buscar en google &#8220;passwordless ssh&#8221;)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tardo mucho. Abortado&quot;</span></pre></div></div>

<p>Este es el mensaje de error que muestra si no se recibio respuesta de ping del HOST luego de los 600 segundos. Puede ser valido un comando aqui tambien obviamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=254</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vBox en modo pantalla completa en un monitor secundario</title>
		<link>http://planocomplejo.com.ar/wp/?p=252</link>
		<comments>http://planocomplejo.com.ar/wp/?p=252#comments</comments>
		<pubDate>Mon, 02 May 2011 14:06:20 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[fullscreen]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=252</guid>
		<description><![CDATA[El modo pantalla completa (Teclas HOST + F) de virtual box solo se activa en la pantalla primaria, por mas que lo ejecutemos en una pantalla secundaria. Es posible mover virtual box en pantalla completa a otro monitor secundario, haciendo: Ir a modo pantalla completa (Teclas HOST + F) Abrir el menu oculto (Teclas HOST [...]]]></description>
			<content:encoded><![CDATA[<p>El modo pantalla completa (Teclas HOST + F) de virtual box solo se activa en la pantalla primaria, por mas que lo ejecutemos en una pantalla secundaria.<br />
Es posible mover virtual box en pantalla completa a otro monitor secundario, haciendo:</p>
<p><span id="more-252"></span></p>
<blockquote>
<ol>
<li>Ir a modo pantalla completa (Teclas HOST + F)</li>
<li>Abrir el menu oculto (Teclas HOST + Home)</li>
<li>Luego elegir la opcion &#8220;View/Virtual Screen 1/Use host screen X&#8221;</li>
</ol>
</blockquote>
<p>Es fácil una vez que se sabe como hacerlo.</p>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=252</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quitar sectores defectuosos del filesystem</title>
		<link>http://planocomplejo.com.ar/wp/?p=119</link>
		<comments>http://planocomplejo.com.ar/wp/?p=119#comments</comments>
		<pubDate>Tue, 12 Apr 2011 17:16:22 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[badsectors]]></category>
		<category><![CDATA[e2fsck]]></category>
		<category><![CDATA[hang]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[smart]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=119</guid>
		<description><![CDATA[Descripción del problema: al usar la notebook en determinados momentos se congela todo el sistema (ni el mouse se mueve) y luego de aproximadamente 10 segundos vuelve todo a la normalidad. Y muchas veces  este fenómeno sucede al intentar abrir un programa el cual, luego del periodo de &#8220;congelamiento&#8221;, no se abre. Primer paso vemos [...]]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration: underline;">Descripción del problema:</span> al usar la notebook en determinados momentos se congela todo el sistema (ni el mouse se mueve) y luego de aproximadamente 10 segundos vuelve todo a la normalidad. Y muchas veces  este fenómeno sucede al intentar abrir un programa el cual, luego del periodo de &#8220;congelamiento&#8221;, no se abre.</p>
<p><span id="more-119"></span>Primer paso vemos que tiene el log para decir:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">tail</span> <span style="color: #660033;">-n40</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>messages</pre></div></div>

<p>Google nos indica que puede ser problema de incompatibilidad del kernel de linux con cierto hardware. Pruebo con un kernel mas antiguo que seguro lo use mucho tiempo sin problemas y el mismo problema nuevamente.</p>
<p>A ver q tiene la SMART del disco para decirnos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">smartctl <span style="color: #660033;">-a</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda</pre></div></div>

<p>vemos un monton de errores como este:</p>
<pre>Error 3667 occurred at disk power-on lifetime: 7005 hours (291 days + 21 hours)</pre>
<pre>When the command that caused the error occurred, the device was active or idle.</pre>
<pre>After command completion occurred, registers were:</pre>
<pre>ER ST SC SN CL CH DH</pre>
<pre>-- -- -- -- -- -- --</pre>
<pre>40 51 00 87 76 ba e3  Error: UNC at LBA = 0x03ba7687 = 62551687</pre>
<pre>Commands leading to the command that caused the error were:</pre>
<pre>CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name</pre>
<pre>-- -- -- -- -- -- -- --  ----------------  --------------------</pre>
<pre>c8 00 08 85 76 ba 03 00      05:04:07.038  READ DMA</pre>
<pre>27 00 00 00 00 00 00 00      05:04:07.038  READ NATIVE MAX ADDRESS EXT</pre>
<pre>ec 00 00 00 00 00 00 00      05:04:07.017  IDENTIFY DEVICE</pre>
<pre>ef 03 42 00 00 00 00 00      05:04:06.998  SET FEATURES [Set transfer mode]</pre>
<pre>27 00 00 00 00 00 00 00      05:04:06.998  READ NATIVE MAX ADDRESS EXT</pre>
<pre>Error 3667 occurred at disk power-on lifetime: 7005 hours (291 days + 21 hours) \</pre>
<pre>When the command that caused the error occurred, the device was active or idle.</pre>
<p><code>After command completion occurred, registers were: ... (continúa)</code></p>
<p>Testeemos el disco:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">smartctl <span style="color: #660033;">-l</span> selfstest <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda</pre></div></div>

<p>para hacer un test extendido y ver que esta pasando&#8230; Una vez ejecutado el comando tomarse una siesta porque tarda un rato (60 min en mi caso).</p>
<p>Otra vez para ver que salió:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">smartctl <span style="color: #660033;">-a</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda</pre></div></div>

<p><code>Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error<br />
# 1  Extended offline    Completed: read failure       90%      7011         61355945</code></p>
<p>epaaa. Checkeamos con</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">fdisk <span style="color: #660033;">-l</span></pre></div></div>

<p><code>Disk /dev/sda: 120.0 GB, 120034123776 bytes<br />
255 heads, 63 sectors/track, 14593 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0xc9cffc73</code></p>
<p><code> Device Boot      Start         End      Blocks   Id  System<br />
/dev/sda1   *           1        1311    10530576    7  HPFS/NTFS<br />
/dev/sda2            1312        3110    14450467+  83  Linux<br />
/dev/sda3            3111        3302     1542240   82  Linux swap / Solaris<br />
/dev/sda4            3303       14593    90694927    f  W95 Ext'd (LBA)<br />
/dev/sda5            3303        4869    12586896   83  Linux<br />
/dev/sda6   *        4870        5507     5124703+  83  Linux<br />
/dev/sda7            5508       14593    72983263+   7  HPFS/NTFS</code></p>
<p>Los sectores que nos tiro el SMART estaban calculados como de 512 bytes, y los de fdisk son de 1Kb. Asi que en vez de ir sumando y acumulando los bloques del fdisk, directamente calculamos en base a los numeros de cilindro que abarca cada particion.</p>
<p>Ya sospechamos que este error esta en la particion de linux q estamos usando (/dev/sda5 en este caso), por lo cual vamos a calcular primero los bloques que abarca esa partición. Fdisk dice q empieza en el cilindro 3303 y termina en el 4869 (inclusive).</p>
<p>Por lo cual 3303 x 16065 (cilindro inicial x cantidad de bloques por cilindro (de 512bytes, lo dice el fdisk)) = 53062695</p>
<p>4870 x 16065 = 78236550</p>
<p>Nuestro primer bloque defectuoso esta en el sector <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">61355945 </span>y nuestra paricion se encuentra entre el 53062695 y el 78236550.</p>
<p>Efectivamente tenemos bloques defectuosos en nuestra particion linux.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">BOOTEAMOS EN OTRA PARTICION, <span style="color: #7a0874; font-weight: bold;">&#40;</span>o en un BOOTCD<span style="color: #7a0874; font-weight: bold;">&#41;</span> Y SEGUIMOS.</pre></div></div>

<p>De curiosos nomas vemos a ver cuantos hay:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">badblocks <span style="color: #660033;">-n</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda5</pre></div></div>

<p>Obtengo una lista de bloques de los bloques defectuosos. 147 en total.</p>
<p>Podría usar esta lista para indicarle al e2fsck que los marque como defectuosos, pero como tengo que escribir esto y tengo tiempo vamos a lo seguro:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">e2fsck <span style="color: #660033;">-c</span> <span style="color: #660033;">-c</span> <span style="color: #660033;">-v</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda5</pre></div></div>

<p>(ojo que hay q poner el -c dos veces, para que compruebe los sectores defectuosos de modo no destructivo). Responder a las preguntas que se hacen al final, si se quiere todo por defecto agregar la opcion -y al comando anterior.</p>
<p>Listo, problema resuelto.</p>
<p><strong>NOTA PARA APRENDER UN POCO MAS:</strong> Los sectores defectosos no son algo de otro mundo, y cuando hay pocos no es nada por lo cual preocuparse. Los discos vienen diseñados para tolorear cierto numero de sectores defectuosos, los cuales una vez encontrados los marca como no usables y los relocaliza en una parte del disco que viene de fábrica destinada para tal fin. El problema es que una vez que se llena este espacio previsto, no hay más lugar para relocalizarlos por lo cual el disco no hace nada y en mi caso evidentemente se cuelga como un boludo por un rato.</p>
<p>Podemos ver esto cuando hacemos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">smartctl <span style="color: #660033;">-a</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda</pre></div></div>

<p><code>ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE<br />
5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0</code></p>
<p>Vemos que en el peor (worst) de los caso podemos tener 200 relocaciones de sectores y es justo lo que tengo. Segun esto al tener mas de 140 ya deberia tener cuidado, ya que esto indica que el disco puede fallar muy prontamente. Pero en mi caso como todo esto surgió por un golpe, se que se debe al impacto mientras la laptop estaba funcionando y no a una inminente falla del disco.</p>
<p>Cuando se le acaban estos 200 sectores para relocalizar, empieza a tirar los errores que nos arruinaban la vida, y los sectores defectuosos no queda otra que indicarle al filesystem que no los use. Y eso fué lo que hicimos.</p>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=119</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Washing Machine</title>
		<link>http://planocomplejo.com.ar/wp/?p=12</link>
		<comments>http://planocomplejo.com.ar/wp/?p=12#comments</comments>
		<pubDate>Thu, 25 Nov 2010 10:40:31 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[bomba de agua]]></category>
		<category><![CDATA[electroválvula]]></category>
		<category><![CDATA[lavarropas]]></category>
		<category><![CDATA[LCD]]></category>
		<category><![CDATA[microcontrolador]]></category>
		<category><![CDATA[motor]]></category>
		<category><![CDATA[PIC 16F877]]></category>
		<category><![CDATA[temperatura]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wordpress/?p=12</guid>
		<description><![CDATA[Introducción Este proyecto es un controlador electrónico para lavarropas automáticos. Está implementado en base a un microcontrolador PIC 16F877, y fue diseñado para un lavarropas Aurora A330. Fué mi primer proyecto de electrónica, así que es suceptible de muchas mejoras de hardware especialmente. El firmware es bastante robusto, y dotan a la máquina lavadora de [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-43 alignright" style="border: 1px solid black;" title="WM_MotherV31" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_MotherV31-300x225.jpg" alt="" width="240" height="180" /></p>
<h3>Introducción</h3>
<p>Este proyecto es un controlador electrónico para lavarropas automáticos. Está implementado en base a un microcontrolador PIC 16F877, y fue diseñado para un lavarropas Aurora A330.</p>
<p>Fué mi primer proyecto de electrónica, así que es suceptible de muchas mejoras de hardware especialmente.</p>
<p>El firmware es bastante robusto, y dotan a la máquina lavadora de muchas funciones. El codigo fuente se encuentra disponible bajo licencia GPL, para que lo puedas modificar y adaptar a tu gusto.</p>
<p><span id="more-12"></span><br />
<strong> ATENCIÓN<br />
</strong></p>
<p>Esto es algo bastante viejo (más de 3 años), pero dado que un amigo me lo ha pedido decidí subirlo por si a alguien  más le sirve. Fué mi primer proyecto con microcontroladores, asi que seguro se puede mejorar mucho, especialmente el hardware en la etapa de potencia, pero eso quedará a tu criterio.</p>
<p><del datetime="2010-11-26T15:09:36+00:00">Disculpen pero no habra documentación, es un proyecto muy viejo y no fue pensado para eso. </del> <strong>UPDATE 25/11/2010</strong> Dado el interés en el proyecto (especialemente de Xaime y Andrés) voy a tratar de subir todo lo que pueda ayudar a entenderlo y construirlo. Pero ACLARO que este proyecto lo hice para aprender, y sin intenciones de difundirlo. Si hoy lo tendría que hacer lo haría de forma diferente, especialmente reemplazaría los relays y el diseño de la fuente de alimentación. Además en el momento en que lo armé estaba un poco desesperado por hacer andar la lavadora porque se me acumulaba la ropa sucia, asi que eso contribuyó mucho a que aparecieran muchas chapuzas. Por otro lado lleva casi 3 años funcionando perfectamente hasta hoy 08/08/2010.</p>
<p>Dicho todo esto pasemos a lo pertinente.</p>
<h2>Revisión de las características del sistema</h2>
<p><strong>Hardware</strong></p>
<p style="padding-left: 30px;">- Pantalla LCD 16&#215;2, con 3 botones para acceder a todas las funciones.<br />
- Elecroválvula para carga.<br />
- Gaveta selectora de 4 niveles (para jabon de lavado, prelavado, blanqueador y suavizante respectivamente) controlada     mediante servo de aeromodelismo.<br />
- Presómetro de un solo nivel. La placa base esta diseñada para que soporte un presómetro de 2 niveles (carga y media carga).<br />
- Resistencia para calentar el agua de 1200W.<br />
- Sensor de temperatura LM35.<br />
- Motor de marcha lenta con giro en ambos sentidos y marcha rápida para centrifugado.<br />
- Bomba de extracción de agua.</p>
<p><strong>Software</strong></p>
<p style="padding-left: 30px;">- Autoinicialización de la memoria EEPROM, para el primer uso o ante un estado inconsistente.<br />
- Programa para calibrar el servo que controla las gavetas de jabón. Se realiza la primera vez luego de la instalación.<br />
- Varios programas de lavado, para distintos tipos de prendas.<br />
- Posibilidad de programar el lavado para que empieze a determinada hora.<br />
- Permite detener el lavado en cualquier momento. Luego se puede desagotar y/o centrifugar.<br />
- No se desprograma por mas que se interrumpa el suministro eléctrico, cuando éste se restaura, el programa continúa desde el último paso incompleto.</p>
<p style="padding-left: 30px;">Pudes ver algunas fotos del software funcionando al final del artículo, en la zona de descargas bajo el apartado <em>Simulación</em>.</p>
<h2>Descripción del sistema</h2>
<p>El sistema consiste básicamente en 3 partes:</p>
<p style="padding-left: 30px;">- La etapa de potencia<br />
- El panel de control<br />
- La placa madre</p>
<p><strong>La etapa de potencia</strong><br />
Basicamente es una caja de relés que controlan el flujo eléctrico de los distintos elementos de la lavadora, tal como lo haría un programador mecánico.</p>
<p>La etapa de potencia se encarga de controlar:<br />
- La electroválvula (EV), para permitir el paso del agua hacia las gavetas. Cuando circula corriente por la EV esta deja pasar el agua.<br />
- La resistencia (TR) se encarga de elevar la temperatura del agua. Consume bastante, entre 1000W y 2000W, así que el relé a usar y los cables deben ser capaces de soportar este caudal de corriente.<br />
- La bomba de agua, que se encarga de extraer el agua desde el tambor.<br />
- El motor, que es la parte más complicada.</p>
<p>Podemos decir que el motor se comporta como 2 motores (marcha lenta y centrifugado), por más que es uno solo. Las bobinas en su interior están dispuestas para que funcione así, como si fuesen 2 en 1.<br />
La conexión en mi lavarropas consiste en un fichón que posee 6 contactos, de los cuales solo 5 son útiles (perdón pero no tengo foto de esto).</p>
<p>Uno es masa o tierra, y los otros son 2 pares. El primer par corresponde al motor de marcha lenta, y el otro al motor de centrifugado. Para averiguar cual par corresponde con cual fui a una casa de motores a preguntar, y no hicieron más que probar unas cuantas veces hasta que me supieron decir como era la distribución de las patillas.</p>
<p>Ambos motores necesitan un capacitor, que en mi caso es uno solo que está compartido. En algunos lavarropas pueden ser dos, de diferente capacidad. En tal caso se deberá modificar levemente la etapa de potencia para adecuarse a esos cambios.</p>
<p>Tomemos el par de patillas que corresponde al motor de marcha lenta. Para hacer funcionar el motor se debe conectar las terminales del capacitor a estas 2 patillas, y luego conectar el vivo a SOLO UNA de ellas.<br />
El motor de marcha lenta pude girar en ambos sentidos, que dependen de en cual de estas 2 patillas conectemos el vivo.<br />
El motor de centrifugado funciona en un solo sentido, y hay que buscar en cual de las 2 patillas correspondientes al motor de centrifugado hay que conectar el vivo, ya que tiene más fuerza en solo una de ellas (al menos en mi motor es así).</p>
<p>Para aclarar todo esto es recomendable mirar el diagrama de la etapa de potencia.</p>
<div><a href="http://planocomplejo.com.ar/wordpress/wp-content/uploads/2009/08/panelDistribucion.jpg" rel="lightbox[12]"></a></div>
<p style="text-align: center;"><a href="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/panelDistribucion.jpg" rel="lightbox[12]"><img class="size-medium wp-image-59  aligncenter" title="WM_panelDistribucion" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/panelDistribucion-300x229.jpg" alt="" /></a></p>
<p>NOTAS:</p>
<ul>
<li>Tanto el RLY_SM como el RLY_ML pueden reemplazarse por relés doble inversor, pero yo lo arme con 2 relés cada uno porque me salía mas barato así.</li>
<li>En los contactos de los relays (donde conmuta la corriente alterna), se les puede colocar un SNUBBER para reducir el chispazo de la conmutación mecánica. Es especialmente importante colocárselo al RLY_AC. Los snubbers que yo uso son R=100Ohm/1Watt, C=100nF/250V. Esto reduce las interferencias provocadas por la conmutación y reduce el desgaste del relé. Yo les coloqué snubbers a los relés RLY_AC, RLY_EV, RLY_BA y RLY_TR. Con esa configuración me han durado varios años y todavia siguen funcionando bien.</li>
</ul>
<p>La etapa de potencia conviene instalarla alejada de la placa base y del display LCD, para reducir la interferencia electromagnética.</p>
<div style="text-align: center;"><a href="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Relays.jpg" rel="lightbox[12]"><img class="alignnone size-medium wp-image-51" title="WM_CajaRelays1" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Relays-300x225.jpg" alt="" /></a></div>
<h4>El panel de control</h4>
<p>Consiste en 3 botones (Izquierda, Derecha y Enter) y una pantalla LCD de 16&#215;2. Además cuenta con un led testigo de alimentación.</p>

<a href='http://planocomplejo.com.ar/wp/?attachment_id=46' title='WM_Panel1'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Panel0-150x150.jpg" class="attachment-thumbnail" alt="WM_Panel1" title="WM_Panel1" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=47' title='WM_Panel2'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Panel1-150x150.jpg" class="attachment-thumbnail" alt="WM_Panel2" title="WM_Panel2" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=48' title='WM_Panel3'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Panel2-150x150.jpg" class="attachment-thumbnail" alt="WM_Panel3" title="WM_Panel3" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=49' title='WM_Panel4'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Panel3-150x150.jpg" class="attachment-thumbnail" alt="WM_Panel4" title="WM_Panel4" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=50' title='WM_Panel5'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Panel4-150x150.jpg" class="attachment-thumbnail" alt="WM_Panel5" title="WM_Panel5" /></a>

<p>Los botones permite controlar las funciones del programador. Los botones (especialmente si no son de buena calidad) es muy común que produzcan rebotes, es decir que cuando apretamos el botón los contactos en su interior realizan unos rebotes microscópicos que hace que parezca que apretamos varias veces el botón. Para eso se coloca un capacitor en paralelo, que ya está contemplado en el motherboard.</p>
<p>El LCD posee a su vez un microcontrolador en su interior, que es bastante sensible al ruido en la linea, y se suele colgar (tildar) con facilidad. Si tienes problema con que el programa se tilda y no sabes porqué es un buen lugar por donde buscar. El programa no puede funcionar sin el LCD y tampoco si el LCD está tildado ya que hay una comunicación bidireccional.</p>
<h4>La placa madre</h4>
<p>Es la parte central del diseño donde se ubica el microcontrolador y se conectan todos los periféricos a él.</p>

<a href='http://planocomplejo.com.ar/wp/?attachment_id=45' title='WM_MotherV33'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_MotherV33-150x150.jpg" class="attachment-thumbnail" alt="WM_MotherV33" title="WM_MotherV33" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=44' title='WM_MotherV32'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_MotherV32-150x150.jpg" class="attachment-thumbnail" alt="WM_MotherV32" title="WM_MotherV32" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=43' title='WM_MotherV31'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_MotherV31-150x150.jpg" class="attachment-thumbnail" alt="Placa base en fase de pruebas" title="WM_MotherV31" /></a>

<p>Para alimentarla se le conecta directamente la salida de un transformador de 220VAC/9VAC de 1A que luego de rectificarse se transforman en aprox. 12VDC. Opcionalmente le puse un fusible al transformador donde va conectado a 220v, en uno de sus cables ( valor del fusible 250v/1A).</p>
<p>Posee una fuente regulada en la misma placa. Y creo yo que el sistema de alimentación y la inmunidad al ruido electromagnético son el mayor punto débil del diseño. Es en este punto donde mi falta de conocimiento me trajo muchos problemas.<br />
En fin, el resultado fue a base de prueba y error (de haber tenido un osciloscopio me hubiera facilitado muchisimo la tarea) y de leer muchos foros de electrónica y algunos artículos sobre tratamiento de ruido. Los libros sobre este tema estaban bastante fuera de mi alcance en ese momento.</p>
<p>Los botones y los leds no necesitan mucha explicación. Tampoco la conexión con el LCD. Solo hay que tener la precaución de conectar cada pin con su correspondiente.</p>
<p>El presómetro normalmente es como un interruptor, cuando junta cierta presión se activa. Debes identificar las patillas del presometro y conectar una a tierra y la otra a la entrada de presómetro en la placa base. Este esta diseñado tambien para presometros de 2 niveles (en el caso de usar 2 se debe modificar el firmware), pero como mi lavarropas tiene solo uno, utilizo solo la primer entrada. En el firmware solo se utiliza una, la primera.</p>
<p>Lo que figura como buzzer en el esquemático es en realidad un piezoeléctrico. El buzzer es un piezoeléctrico mas un circuito que al aplicarle corriente ya produce un tono predefinido. El piezoeléctrico actua únicamente como un parlante, y nos permite emitir sonidos de diferentes frecuencias. Originalmente lo diseñe para usar un buzzer, pero luego me decidí usar un piezoeléctrico (y ya tenía fabricada la PCB) así que no debes usar el transitor que figura en el esquema y en la placa. Simplemente conecta el piezoeléctrico a la patilla correspondiente del microcontrolador (puedes hacer un puente con un pequeño cable sobre la misma PCB), el micro entrega sufciciente corriente para hacer sonar el piezoeléctrico con una intensidad suficiente. Se aconseja colocar un pequeño capacitor en paralelo con las patillas del piezoeléctrico.<br />
Si conectas un buzzer no funcionará, ya que por la patilla se emite el tono para hacer sonar el piezo.</p>
<p>Posee un zócalo para programarlo por ICSP, que puedes usar para programar el PIC.</p>
<p>El zócalo para expansion rs232 por ahora no esta siendo usado, pero está pensado para que se pueda comunicar con otro micro o con una pc. Para esto tambien esta el LINK_LED q por ahora tampoco se usa.</p>
<p>La conexión con el servo depende de la marca del mismo (buscar en internet). El circuito esta diseñando para que el cable de la señal sea el del medio. En caso de que tu servo posea una distribución distinta en el conector es muy fácil intercambiarlo para que se ajusten al del diseño de la placa base.<br />
El servo generalmente tiene una libartad de rotacion de 180º, asi que se debe colocar en la gaveta de forma tal que permita utilizar la mayor parte de esos 180º. La unión mecánica con la palanca del selector de gavetas no necesita mayor complicación, basta con un alambre suficientemente rígido con forma tal que permita transmitir el movimiento del brazo del servomotor con comodidad hacia la palanca.</p>

<a href='http://planocomplejo.com.ar/wp/?attachment_id=52' title='WM_Servo1'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Servo1-150x150.jpg" class="attachment-thumbnail" alt="Servo para la selección de gaveta" title="WM_Servo1" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=53' title='WM_Servo2'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Servo2-150x150.jpg" class="attachment-thumbnail" alt="Selector de gavetas" title="WM_Servo2" /></a>

<p>El sensor de temperatura yo lo coloqué donde iba el termostato original. El cableado del sensor de temperatura es bastante importante creo. Se debe hacer con cable mallado o blindado, para que las inducciones no alteren la medida. De todas formas el firmware hace las lecturas entre medio de las conmutaciones para evitar justamente eso, y además posee un sistema de amortigüamiento de lecturas para tomar una mejor decisión.</p>

<a href='http://planocomplejo.com.ar/wp/?attachment_id=54' title='WM_SensorTemperatura1'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Termostato1-150x150.jpg" class="attachment-thumbnail" alt="WM_SensorTemperatura1" title="WM_SensorTemperatura1" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=55' title='WM_SensorTemperatura2'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Termostato2-150x150.jpg" class="attachment-thumbnail" alt="WM_SensorTemperatura2" title="WM_SensorTemperatura2" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=56' title='WM_SensorTemperatura3'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Termostato3-150x150.jpg" class="attachment-thumbnail" alt="WM_SensorTemperatura3" title="WM_SensorTemperatura3" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=57' title='WM_SensorTemperatura4'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2009/08/WM_Termostato4-150x150.jpg" class="attachment-thumbnail" alt="WM_SensorTemperatura4" title="WM_SensorTemperatura4" /></a>

<p>En el código fuente se encuentra bastante documentación en los comentarios, que pueden aclarar algunas ideas, recomiendo darle una mirada especialemente si tienes intenciones de modificar el código tambien.</p>
<p>Sino te invito a postear tu inquietud en la zona de comentarios.</p>
<h2>Descargas</h2>
<p>1- <a href="http://planocomplejo.com.ar/archivos/wm/Motherboard.sch">Esquemático del motherboard (Eagle)</a></p>
<ul>
<li>Todas las resistencias pullup son de 1k.</li>
<li>Las resistencias de los optoacopladores se deben calcular de acuerdo a las especificaciones del optoacoplador utilizado. Las que yo use son de 570 Ohms.</li>
<li>También te puedes saltear los optoacopladores por completo y conectar directamente con el ULN2003AN, pero los opto le dan robustez y seguridad al circuito.</li>
</ul>
<p>2- <a href="http://planocomplejo.com.ar/archivos/wm/Motherboard.brd">PCB del motherboard (Eagle)</a></p>
<ul>
<li>Si bien funciona bien, cuando la vi ahora el momento de republicarla me parece horrible, creo que he mejorado muchisimo en el diseño de PCB desde esa época. Si tienes suficiente entusiasmo pudes generar una nueva a partir del esquemático, y porqué no compartirla con nosotros para ver como quedó.</li>
</ul>
<p>3- <a href="http://planocomplejo.com.ar/archivos/wm/etapaPotencia.DSN">Esquemático de la etapa de potencia (Proteus ISIS)</a></p>
<ul>
<li>Las bobinas de los relays no precisan un diodo para la contrarrestar la autoinducción, ya que esta incorporada en el UNL.</li>
<li>En los contactos de los relays (donde conmuta la corriente alterna), se producen mini chispazos debido a que es un contacto mecánico. Esto lleva a un desgaste del relay y además genera ruido que suele afectar especialemente al display LCD, el cual se tilda, y en consecuencia interrumpe la comunicación con el PIC que se queda esperando que éste le de permiso para escribirlo. Para apaliar esto se les puede colocar un SNUB. Los snub que yo uso son una resistencia (R=100Ohm/1Watt) y un capacitor (C=100nF/250V) que se conectan en serie. El snub se coloca en paralelo en los contactos del relay donde se produce la conmutación. Con eso me han durado varios años y todavia siguen funcionando bien.</li>
</ul>
<p>4- Firmware PIC16F877A <a href="http://planocomplejo.com.ar/archivos/wm/wm5.hex">v5 (final)</a> | <a href="../archivos/wm/wm.hex">v4 (estable) </a>(Click Derecho -&gt; Guardar Como&#8230;)</p>
<p>5- <a href="http://planocomplejo.com.ar/archivos/wm/simulacionProteus.zip">Simulación en Proteus ISIS</a></p>

<a href='http://planocomplejo.com.ar/wp/?attachment_id=33' title='WMv5off'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2010/11/WMv5off-150x150.jpg" class="attachment-thumbnail" alt="WMv5off" title="WMv5off" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=32' title='WMv5on'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2010/11/WMv5on-150x150.jpg" class="attachment-thumbnail" alt="WMv5on" title="WMv5on" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=31' title='WMv5on2'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2010/11/WMv5on2-150x150.jpg" class="attachment-thumbnail" alt="WMv5on2" title="WMv5on2" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=30' title='WMv5on3'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2010/11/WMv5on3-150x150.jpg" class="attachment-thumbnail" alt="WMv5on3" title="WMv5on3" /></a>
<a href='http://planocomplejo.com.ar/wp/?attachment_id=29' title='WMv5on4'><img width="150" height="150" src="http://planocomplejo.com.ar/wp/wp-content/uploads/2010/11/WMv5on4-150x150.jpg" class="attachment-thumbnail" alt="WMv5on4" title="WMv5on4" /></a>

<ul>
<li>Para cambiar el firmware en la simulacion, se debe ir a las propiedades del microcontrolador (U1), y allí elegir el archivo binario que lo contiene. Para facilitar las cosas ya le incorporé el firmware de la version 5.</li>
</ul>
<div>6- <a href="http://planocomplejo.com.ar/archivos/wm/wmv5-source.zip">Código fuente WMv5</a> (licencia GPL)</div>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=12</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Invertir imagen monitor CRT (invertir bobinas del yugo)</title>
		<link>http://planocomplejo.com.ar/wp/?p=156</link>
		<comments>http://planocomplejo.com.ar/wp/?p=156#comments</comments>
		<pubDate>Wed, 21 Jul 2010 13:23:31 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[bobinas]]></category>
		<category><![CDATA[monitor crt]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=156</guid>
		<description><![CDATA[Esta vez me encontré con el problema de invertir la imagen del monitor. Necesitaba usar el monitor colgado del techo (en otras palabras, patas para arriba), por lo cual era necesario rotar la imagen 180° sobre su eje longitudinal. Esta es una solución muy sencilla para rotar la imagen de un monitor CRT (tambien aplicable [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="border: 1px solid black;" title="Funcionando" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/250x188-images-stories-articulos-monitorCooilInvertion-6.JPG" alt="Funcionando" width="250" height="188" />Esta vez me encontré con el problema de invertir la imagen del monitor. Necesitaba usar el monitor colgado del techo (en otras palabras, patas para arriba), por lo cual era necesario rotar la imagen 180° sobre su eje longitudinal.</p>
<p>Esta es una solución muy sencilla para rotar la imagen de un monitor CRT (tambien aplicable a TVs).</p>
<p><strong>ATENCION</strong>: Antes de abrir el monitor cersiorarse de haberlo desenchufado mientras estaba encendido, de esta forma se fuerza a los capacitores a descargarse, reduciendo el riesgo de electrocución.</p>
<p><span id="more-156"></span>En la parte externa del tubo existen 2 bobinas que generan campos electromagnéticos para desviar el haz de electrones y realizar el barrido de la pantalla. Este conjunto de bobinas se conoce como yugo.</p>
<p style="text-align: center;"><a title="Yugo Monitor" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/1.jpg" target="_blank"><img style="border: 1px solid black;" title="Yugo Monitor" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/188x251-images-stories-articulos-monitorCooilInvertion-1.jpg" alt="Yugo Monitor" width="188" height="251" /></a> <a title="Rotar imagen monitor" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/1-2.jpg" target="_blank"><img style="border: 1px solid black;" title="Rotar imagen monitor" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/333x250-images-stories-articulos-monitorCooilInvertion-1-2.jpg" alt="Yoke coils" width="333" height="250" /></a></p>
<p>Una de las bobinas del yugo es la encargada de controlar la desviación vertical y la otra controla la desviación horizontal.</p>
<p style="text-align: center;"><a title="Yugo Monitor" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/2.JPG" target="_blank"><img style="border: 1px solid black;" title="Yugo Monitor" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/250x188-images-stories-articulos-monitorCooilInvertion-2.JPG" alt="Yugo Monitor" width="250" height="188" /></a></p>
<p>Como se observa en la imagen anterior, existen 4 cables que conectan el yugo con la placa madre del monitor. Un par por cada bobina. Son inconfundibles porque siempre son 4 y tienen diametros y colores que resaltan sobre todo el resto del circuito.<br />
Generalmente la combinacion de colores es similar en los monitores que he abierto. Pero para estar seguros se puede usar un multímetro o un probador de continuidad para encontrar cuales son los pares. Para esto se puede remover facilmente el conector y probar directamente en la ficha hembra sin cortar ningun cable.</p>
<p>En mi caso (y probablemente en el tuyo también) tenía la siguiente configuracion.</p>
<ul>
<li>par MARRON-AMARILLO &#8211;&gt; Bobina deflectora VERTICAL (aprox. 6 Ohm)</li>
<li>par AZUL-ROJO &#8211;&gt; Bobina deflectora HORIZONTAL (aprox. 2.5 Ohm)</li>
</ul>
<p>Si invertimos la polaridad de la bobina vertical esta desviará el haz de electrones hacia abajo cuando debería enviarlo hacia arriba, por lo que la imagen se dibujará de forma inversa, es decir de abajo hacia arriba. Sería como espejar la imagen sobre el eje x.</p>
<p>Probemos, a ver que sucede&#8230;</p>
<p style="text-align: center;"><a title="Yugo Monitor" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/3.JPG" target="_blank"><img style="border: 1px solid black;" title="Yugo Monitor" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/250x188-images-stories-articulos-monitorCooilInvertion-3.JPG" alt="Yugo Monitor" width="250" height="188" /></a></p>
<p>Ponemos el conector en su lugar, y tomamos las precauciones necesarias para no electrocutarnos y no morirnos del susto por si pasa algo. Enchufamos y encendemos.</p>
<p style="text-align: center;"><a title="Imagen espejada" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/4.JPG" target="_blank"><img style="border: 1px solid black;" title="Imagen espejada" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/250x188-images-stories-articulos-monitorCooilInvertion-4.JPG" alt="Imagen espejada" width="250" height="188" /></a></p>
<p>Como se ve la imagen se ha espejado sobre el eje x. Sin embargo aún no es legible, porque falta espejarlo sobre el eje y. Para esto solo hay que hacer lo mismo con la bobina de deflección horizontal.</p>
<p style="text-align: center;"><a title="Conexión bobinas" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/5.JPG" target="_blank"><img style="border: 1px solid black;" title="Conexión bobinas" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/250x188-images-stories-articulos-monitorCooilInvertion-5.JPG" alt="Conexión bobinas" width="250" height="188" /></a></p>
<p>Ya tenemos el monitor listo para ser instalado patas para arriba.</p>
<p style="text-align: center;"><a title="Funcionando" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/6.JPG" target="_blank"><img style="border: 1px solid black;" title="Funcionando" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/250x188-images-stories-articulos-monitorCooilInvertion-6.JPG" alt="Funcionando" width="250" height="188" /></a></p>
<p>Ya tenemos el monitor listo para ser instalado patas para arriba.</p>
<p style="text-align: center;"><a title="Funcionando" rel="lightbox[86]" href="http://www.planocomplejo.com.ar/cms/images/stories/articulos/monitorCooilInvertion/7.JPG" target="_blank"><img style="border: 1px solid black;" title="Funcionando" src="http://www.planocomplejo.com.ar/cms/plugins/content/mavikthumbnails/thumbnails/188x250-images-stories-articulos-monitorCooilInvertion-7.JPG" alt="Ya instalado. Así quedó." width="188" height="250" /></a></p>
<p>También es util para gastar alguna broma sobre un TV, ya que si invertimos la bobina de deflexión horizontal, la imagen no parece estar alterada hasta que aparece algun simbolo o algo escrito.</p>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=156</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smart Boot Monitor display Monocromo</title>
		<link>http://planocomplejo.com.ar/wp/?p=149</link>
		<comments>http://planocomplejo.com.ar/wp/?p=149#comments</comments>
		<pubDate>Sat, 29 May 2010 19:08:18 +0000</pubDate>
		<dc:creator>Maxi</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[monocromo]]></category>
		<category><![CDATA[sbm]]></category>

		<guid isPermaLink="false">http://planocomplejo.com.ar/wp/?p=149</guid>
		<description><![CDATA[Si, soy fan del hardware viejo. Tengo un querido monitor monocromo (&#8220;donado&#8221; por Dan Mildon); son de aquellos que tienen conectores DB9 para las señales de video. Queriendo instalar Debian Lenny en una PC con un K5 133Mhz y 32 Mb RAM, me encontré con un problema: Como el BIOS no soporta booteo desde CD [...]]]></description>
			<content:encoded><![CDATA[<p>Si, soy fan del hardware viejo. Tengo un querido monitor monocromo (&#8220;donado&#8221; por Dan Mildon); son de aquellos que tienen conectores DB9 para las señales de video.</p>
<p>Queriendo instalar Debian Lenny en una PC con un K5 133Mhz y 32 Mb RAM, me encontré con un problema:</p>
<ul>
<li>Como el BIOS no soporta booteo desde CD uso el Smart Boot Manager desde un disquete para poder cargar el sector de arranque del CD.</li>
<li>SBM escribe directamente sobre la memoria de la tarjeta VGA, por lo tanto la placa de video monocromática nunca se entera de nada.</li>
</ul>
<p>SOLUCIÓN:</p>
<ul>
<li>Como la opcion de booteo de CD es la última en el SBM, simplemente desplazarse a ciegas hasta el final (con la flecha hacia abajo del teclado varias veces). Como el menú no es circular al llegar al ultimo elemento NO empieza desde el principio. Luego le damos a la tecla Enter y veremos como carga la instalación desde el CD.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://planocomplejo.com.ar/wp/?feed=rss2&#038;p=149</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://stats.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->

