<?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>SISTEMAS O.R.P &#187; Electrónica</title>
	<atom:link href="http://www.sistemasorp.es/category/electronica/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sistemasorp.es</link>
	<description>Blog sobre desarrollos y otros temas</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:39:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Recuperar una cámara Zaapa CIP-RW después de un fallo de actualización</title>
		<link>http://www.sistemasorp.es/2012/02/02/recuperar-una-camara-zaapa-cip-rw-despues-de-un-fallo-de-actualizacion/</link>
		<comments>http://www.sistemasorp.es/2012/02/02/recuperar-una-camara-zaapa-cip-rw-despues-de-un-fallo-de-actualizacion/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 15:38:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Reseñas]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=538</guid>
		<description><![CDATA[Hace tiempo que mi amigo Roberto quiso actualizar su cámara IP (la cual compró por recomendación mía). El caso es que al actualizar el firmware el proceso falló y la cámara quedó inutilizada. Así han pasado ya muchos meses hasta que hace unos días me encontré con esta página que hablaba de cómo recuperar una cámara [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo que mi amigo <a href="http://nebula.posterous.com/" target="_blank">Roberto</a> quiso actualizar su cámara IP (la cual compró por recomendación mía). El caso es que al actualizar el firmware el proceso falló y la cámara quedó inutilizada. Así han pasado ya muchos meses hasta que hace unos días me encontré con <a href="http://www.gadgetvictims.com/2009/12/bring-your-fi8908w-paperweight-back-to.html" target="_blank">esta página</a> que hablaba de cómo recuperar una cámara Foscam FI8908W cuando el proceso de actualización de firmware ha fallado.</p>
<p>Lo bueno de esta página es que habla de que las cámaras foscam (y la zaapa ciprw es una de ellas con el modelo FI8901W) no mueren del todo, sino que tienen un puerto serie escondido al que se puede acceder y comunicarse con una consola para cargar un firmware. Yo me he comunicado con la cámara con un conversor serie TTL a USB:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2012/02/IMAG0112.jpg"><img class="aligncenter size-medium wp-image-539" title="Programando la Zaapa" src="http://www.sistemasorp.es/wp-content/uploads/2012/02/IMAG0112-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>La solución ya estaba, sólo tenía que conseguir el firmware de la zaapa (ya que otros no valen) y decirle a mi amigo que me dejase su cámara para arreglársela. Pero no ha sido así de fácil y he tenido que pelearme con varios frentes.</p>
<p>El primero es el servicio técnico de Foscam. En el comentario 101 del anterior enlace un tal David comentaba que Doris de Foscam había sido muy amable y que le había dado los ficheros de recuperación. Yo probé la misma suerte con el servicio técnico de Foscam y esta fué la primera respuesta que obtuve:</p>
<blockquote><p>Hi,</p>
<p>We do not have a model No. FI8901W camera, could you please double check the model No.?</p></blockquote>
<p>Es decir, que no saben ni los modelos que han fabricado. Le dije que <a href="http://www.ipcam-store.com/fi8901w.html" target="_blank">si existía</a> ese modelo de cámara en su marca y me contesto esto otro:</p>
<blockquote><p>Hi,</p>
<p>Sorry for my mistake. We have stopped produce this product for a long time. We do not have the firmware now. Sorry for this.</p></blockquote>
<p>Vamos que no querían ayudarme en nada (David, que suerte tuviste&#8230;).</p>
<p>Buscando por Internet unos ficheros de recupercación para la zaapa o para la FOSCAM FI8901W no encontré nada. Pero por suerte encontré <a href="http://www.openipcam.com/forum/index.php/topic,39.0.html" target="_blank">esto otro</a>. Una forma de extraer de una cámara que funcionase su firmware a través de la consola serie oculta. El proceso fue pesado: me tuve que bajar el kermit 95 y buscar cómo demonios abrir una consola serie, después esperé un rato largo a que se ejecutara el script, convertir con el jedit una salida en otro fichero y finalmente pasar el convertidor de hexadecimal a binario, el cual tuve que compilar, modificar y compilar de nuevo para que funcionase. Todo esto para que al final no se hubiera decargado correctamente el firmware <em>linux.bin</em> y <em>romfs.img</em> necesarios para reprogramar la cámara estropeada, dando esta errores nada más arrancar.</p>
<p>Parecía que no iba a dar con la solución, pero <a href="http://blog.morrison.nl/2011/01/foscam-clone-recovery-tool/" target="_blank">encontré</a> un <a href="http://www.openipcam.com/files/FoscamCloneRecovery.zip" target="_blank">programa</a> que te descargaba automáticamente los ficheros necesarios del firmware. Lo ejecuté y parecía que había hecho bien su trabajo, pero pasó lo mismo que en el anterior párrafo aunque esta vez sólo con el fichero <em>linux.bin</em>. Sin embargo gracias a esta <a href="http://www.computersolutions.cn/blog/2010/04/ip-cam-hacking-pt4/" target="_blank">otra página</a> descubro que el fichero linux.bin es en realidad un archivo .zip y que lo que había hecho está aplicación es comerse los últimos 168 bytes, asi que leyendo la memoria de  la cámara que funcionaba recuperé esos 168 bytes.</p>
<p>Finalmente seguí <a href="http://www.gadgetvictims.com/2009/12/bring-your-fi8908w-paperweight-back-to.html" target="_blank">paso por paso el proceso de nuevo</a> pero cambiando los comandos fx por estos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">fx <span style="color: #000000;">6</span> romfs.img 0x7F0D0000 0x7F0D0000 <span style="color: #660033;">-a</span>
fx <span style="color: #000000;">7</span> linux.bin 0x7F020000 0x00008000 <span style="color: #660033;">-acxz</span></pre></div></div>

<p>Para Windows 7 como no existe el Hyperterminal, he usado el <a href="http://ttssh2.sourceforge.jp/" target="_blank">Tera Term</a>.</p>
<p>Finalmente la cámara de mi amigo ha dejado de ser un pisapapeles y ha vuelto a funcionar, pudiéndola manejar ahora con Firefox, con su IPhone, etc.</p>
<p>Para evitaros las incomodidades por las que yo he pasado os dejo los enlaces de los ficheros de recuperación de la versión que le instalé a mi amigo y que es la última que proporciona Zaapa:</p>
<p><a href="http://www.sistemasorp.es/blog/romfs.img" target="_blank">romfs.img</a></p>
<p><a href="http://www.sistemasorp.es/blog/linux.bin" target="_blank">linux.bin</a></p>
<p><a href="http://www.sistemasorp.es/blog/Embeded Web UI 2.0.0.16.bin" target="_blank">Embeded Web UI 2.0.0.16.bin</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2012/02/02/recuperar-una-camara-zaapa-cip-rw-despues-de-un-fallo-de-actualizacion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Probando el marco digital Parrot DF3120 (parte 1)</title>
		<link>http://www.sistemasorp.es/2012/01/19/probando-el-marco-digital-parrot-df3120-parte-1/</link>
		<comments>http://www.sistemasorp.es/2012/01/19/probando-el-marco-digital-parrot-df3120-parte-1/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 01:33:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Reseñas]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=486</guid>
		<description><![CDATA[He adquirido el marco digital de fotos Parrot DF3120. Es un marco que por menos de 20€ puede representar fotografías en una pantalla de 320&#215;240 (3.5&#8243;). Sus puntos fuertes es que tiene bluetooth para poder subir las imagenes desde, por ejemplo, un móvil y una entrada para tarjetas SD con la misma función. Este marco [...]]]></description>
			<content:encoded><![CDATA[<p>He adquirido el marco digital de fotos <a href="http://www.parrot.com/usa/products/digitalphotoframes/parrotdf3120" target="_blank">Parrot DF3120</a>. Es un marco que <a href="http://www.ebay.es/itm/Parrot-DF3120-3-5-Wireless-Bluetooth-High-Res-Compact-Digital-Photo-Frame-/170711947116?pt=UK_Photography_DigitalCamAccess_RL&amp;hash=item27bf39976c" target="_blank">por menos de 20€</a> puede representar fotografías en una pantalla de 320&#215;240 (3.5&#8243;). Sus puntos fuertes es que tiene bluetooth para poder subir las imagenes desde, por ejemplo, un móvil y una entrada para tarjetas SD con la misma función.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2012/01/IMAG0107.jpg"><img class="aligncenter size-medium wp-image-490" title="Parrot DF3120" src="http://www.sistemasorp.es/wp-content/uploads/2012/01/IMAG0107-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>Este marco <a href="https://sites.google.com/site/repurposelinux/df3120" target="_blank">ha sido hackeado</a> y se le puede instalar un linux, con las ventajas que ello representa. El objetivo de este primer artículo es mostrar el proceso de instalación de linux y cómo acceder a este de una forma sencilla.</p>
<p>Lo primero es hacer un duplicado de disco del siguiente fichero: <a href="http://www.sistemasorp.es/blog/minifs-full-ext.img">minifs-full-ext.img</a>. Esto en linux, siendo root, se consigue con el siguiente comando (disco SD es el nombre que le haya asignado el sistema):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">if</span>=minifs-full-ext.img <span style="color: #007800;">of</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/&lt;</span>disco SD<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Lo siguiente es actualizar el firmware del marco. Para ello hay que encender el marco sin ninguna tarjeta SD insertada y enchufar el cable usb. Cuando podamos acceder al contenido del disco, crear una carpeta llamada <strong>update</strong> y dentro de esta copiar el fichero <a href="http://www.sistemasorp.es/blog/parrotDF3120.plf">parrotDF3120.plf</a>. Después sacar el usb de forma segura y veremos que aparecen 4 cuadros en la pantalla (uno azul y el resto verde), momento en el cual ya se ha actualizado el firmware.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2012/01/IMAG0108.jpg"><img class="aligncenter size-medium wp-image-493" title="Parrot USB" src="http://www.sistemasorp.es/wp-content/uploads/2012/01/IMAG0108-e1326932968101-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>Ahora tenemos un modo de arranque dual. Por un lado si encendemos el marco sin más veremos su funcionalidad de siempre, es decir, se visualizarán las imágenes que tengamos almacenadas una detrás de otra. Pero si metemos la tarjeta SD y antes de encenderlo pulsamos los botones izquierdo y central de la parte de atrás y, sin soltarlos, encendemos el marco, se arrancará  linux y <a href="http://busybox.net/" target="_blank">busybox</a>.</p>
<p>Finalmente para acceder a la consola en el modo linux podemos hacerlo de dos formas (la dificil y la fácil):</p>
<p>La dificil es sacar todos los tornillos para quedarnos con la placa y la pantalla. A continuación soldamos en los agujeros del J4 (la consola serie) los tres pines (1: GND, 2: RX, 3: TX) y nos buscamos un conversor TTL a puerto serie o <a href="http://www.dealextreme.com/p/usb-to-uart-5-pin-cp2102-module-serial-converter-81872" target="_blank">a usb</a> para poder comunicarnos con el dispositivo usando los siguientes parámetros de conexión: 115200 8,N,1 (recomiendo <em>screen</em> en linux o mac y <em>putty</em> en windows). Esta es la consola serie donde se ven los mensajes de estado del arranque y luego se obtiene una shell donde interactuar con linux:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2012/01/IMGP2485.jpg"><img class="aligncenter size-medium wp-image-494" title="Parrot desarmado" src="http://www.sistemasorp.es/wp-content/uploads/2012/01/IMGP2485-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2012/01/consola-serie.png"><img class="aligncenter size-medium wp-image-499" title="consola serie" src="http://www.sistemasorp.es/wp-content/uploads/2012/01/consola-serie-274x300.png" alt="" width="274" height="300" /></a></p>
<p>La fácil es simplemente conectar el cable usb al marco y a nuestro ordenador, lo que nos configurará una conexión ethernet por usb llamada <em>Ethernet Gadget</em>, la cual será una tarjeta de red que debemos configurar con la IP 172.16.61.2 y la máscara de red 255.255.255.0. Si todo ha ido bien y hacemos un ping a la dirección 172.16.61.1 el marco nos debería responder. Finalmente para acceder a una shell sólo hay que hacer un telnet a la IP comentada.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2012/01/telnet.png"><img class="aligncenter size-medium wp-image-498" title="telnet" src="http://www.sistemasorp.es/wp-content/uploads/2012/01/telnet-274x300.png" alt="" width="274" height="300" /></a></p>
<p><strong>Edición 22/01/2011:</strong><br />
En el marco vienen unos programas para probar la pantalla gráfica. Podeis ejecutar cualquiera de ellos:<br />
<em>/usr/bin/plasma</em>: Una bonita demo sobre el efecto plasma.<br />
<em>/usr/bin/newvox</em>: Un paisaje que si tuvieramos teclado podríamos recorrerlo.</p>
<p>He <a href="http://www.sistemasorp.es/2012/01/22/probando-el-marco-digital-parrot-df3120-parte-2/" target="_blank">publicado un segundo artículo</a> que explica cómo crear programas que se ejecuten en el marco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2012/01/19/probando-el-marco-digital-parrot-df3120-parte-1/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Mi charla de telemetría</title>
		<link>http://www.sistemasorp.es/2011/10/11/mi-charla-de-telemetria/</link>
		<comments>http://www.sistemasorp.es/2011/10/11/mi-charla-de-telemetria/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 07:32:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=422</guid>
		<description><![CDATA[Ya han publicado el vídeo de la charla de telemetría que di en la OSHWCON 2011. Toda la documentación de mi charla (presentación, código fuente, esquemáticos, etc.) lo podeis descargar aquí. Agradecer a los organizadores su tiempo, esfuerzo y ganas por sacar adelante algo tan novedoso y pionero. También dignos de mención son los ponentes [...]]]></description>
			<content:encoded><![CDATA[<p>Ya han publicado el vídeo de la charla de telemetría que di en la <a href="http://oshwcon.org/" target="_blank">OSHWCON 2011</a>.</p>
<p><iframe width="420" height="236" src="http://www.youtube.com/embed/cb4OX4HuePQ" frameborder="0" allowfullscreen></iframe></p>
<p>Toda la documentación de mi charla (presentación, código fuente, esquemáticos, etc.) <a href="http://www.sistemasorp.es/blog/oshwcon.zip">lo podeis descargar aquí</a>.</p>
<p>Agradecer a los organizadores su tiempo, esfuerzo y ganas por sacar adelante algo tan novedoso y pionero. También dignos de mención son los ponentes que de forma altruista hemos hecho realidad este fantástico evento. Por supuesto no nos olvidemos de los patrocinadores que han permitido que este evento tuviese un nivel alto y de calidad.</p>
<p>A todos, nos vemos en la OSHWCON 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2011/10/11/mi-charla-de-telemetria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source Hardware Con</title>
		<link>http://www.sistemasorp.es/2011/06/01/open-source-hardware-con/</link>
		<comments>http://www.sistemasorp.es/2011/06/01/open-source-hardware-con/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 17:11:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=411</guid>
		<description><![CDATA[Los días 23,24 y 25 de Septiembre se va a celebrar en Madrid el OSHWCon. Un evento organizado por el colectivo Synusia donde se promociona el hardware libre, la afición a la electrónica, el DIY, etc. La entrada es gratuita, pero hay que inscribirse. Habrá charlas, talleres, mesas redondas y proyectos personales. En mi caso [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sistemasorp.es/wp-content/uploads/2011/06/logo-oshw-open-source-hardware.jpg"><img class="size-full wp-image-413 aligncenter" title="logo-oshw-open-source-hardware" src="http://www.sistemasorp.es/wp-content/uploads/2011/06/logo-oshw-open-source-hardware.jpg" alt="" width="239" height="188" /></a></p>
<p>Los días 23,24 y 25 de Septiembre se va a celebrar en Madrid el <a href="http://oshwcon.org/" target="_blank">OSHWCon</a>. Un evento organizado por el colectivo <a href="http://synusia.es/" target="_blank">Synusia</a> donde se promociona el hardware libre, la afición a la electrónica, el <abbr title="Do It Yourself (Hazlo tu mismo)">DIY</abbr>, etc.</p>
<p>La entrada es gratuita, pero hay que <a href="http://oshwcon.org/es/inscripcion" target="_blank">inscribirse</a>. Habrá <a href="http://oshwcon.org/es/actividades" target="_blank">charlas, talleres, mesas redondas y proyectos personales</a>. En mi caso he creido interesante dar una charla sobre telemetría.</p>
<p>Si os gusta la electrónica y la robótica no os podeis perder este evento único que hará las delicias de todos los aficionados a la electrónica, robótica y cacharreo en general.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2011/06/01/open-source-hardware-con/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Calculadora on-line de timers del PIC</title>
		<link>http://www.sistemasorp.es/2011/03/22/calculadora-on-line-de-timers-del-pic/</link>
		<comments>http://www.sistemasorp.es/2011/03/22/calculadora-on-line-de-timers-del-pic/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 21:43:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[calculadora]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[on line]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[retardo]]></category>
		<category><![CDATA[temporizador]]></category>
		<category><![CDATA[timer]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=406</guid>
		<description><![CDATA[Hace tiempo hice una calculadora para mi uso interno la cual calculaba los valores que había que poner a un timer de un microcontrolador PIC (con su preescaler, su frecuencia, etc) para llegar a un retardo determinado, o viceversa, dado un valor del timer calcular qué retardo provoca. Es muy sencilla y está hecha integramente [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo hice una calculadora para mi uso interno la cual calculaba los valores que había que poner a un timer de un microcontrolador PIC (con su preescaler, su frecuencia, etc) para llegar a un retardo determinado, o viceversa, dado un valor del timer calcular qué retardo provoca. Es muy sencilla y está hecha integramente en html y javascript:</p>
<p><a href="http://www.sistemasorp.es/blog/temporizadores_pic.html">http://www.sistemasorp.es/blog/temporizadores_pic.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2011/03/22/calculadora-on-line-de-timers-del-pic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sistema de riego automático</title>
		<link>http://www.sistemasorp.es/2011/02/07/sistema-de-riego-automatico/</link>
		<comments>http://www.sistemasorp.es/2011/02/07/sistema-de-riego-automatico/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 07:45:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=388</guid>
		<description><![CDATA[Muchas veces me ha surgido la necesidad de regar las plantas que tenía en casa mientras estaba fuera unos días. Por desgracia algunas de ellas han perecido por no ser regadas cada poco tiempo. De esa necesidad surge este proyecto y para llevarlo a cabo he usado una bomba de agua, un bidón, un detector [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces me ha surgido la necesidad de regar las plantas que tenía en casa mientras estaba fuera unos días. Por desgracia algunas de ellas han perecido por no ser regadas cada poco tiempo.</p>
<p>De esa necesidad surge este proyecto y para llevarlo a cabo he usado una bomba de agua, un bidón, un detector de nivel y una placa basada en un pic 16f628 con un relé.</p>
<p>La bomba de agua puede ser la que se usa para renovar el agua de una pecera o para mantener el chorro de una pequeña fuente. Sólo hay que conectarla a la alimentación de la casa para que empiece a bombear agua. Es muy importante que cuando esté enchufada tenga siempre agua, porque si no el motor se puede llegar a quemar. Por otro lado la altura de la manguera que va desde la bomba hasta el tiesto no puede ser mayor de un metro, ya que estos motores van perdiendo fuerza de bombeo a medida que crece la altura por donde tienen que enviar el agua.</p>
<p>El bidón que he usado en el proyecto es uno de los de agua mineral de 5 litros de cualquier marca. Al ser de plástico es fácilmente manejable para poder hacer un agujero y meter el detector de nivel.</p>
<p>El detector de nivel es necesario para evitar que la bomba siga extrayendo agua y se queme el motor por no tener agua que bombear. Yo he usado el de <a href="http://www.sureelectronics.net/goods.php?id=760" target="_blank">sure electronics</a>.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2298.jpg"><img class="alignnone size-medium wp-image-389" title="IMGP2298" src="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2298-225x300.jpg" alt="" width="225" height="300" /></a><a href="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2297.jpg"><img class="alignnone size-medium wp-image-390" title="IMGP2297" src="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2297-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>La placa gobernada por un pic 16f628a es la que activará o desactivará la bomba de agua mediante un relé. Puede ser configurado mediante jumpers tanto el tiempo de riego como el intervalo. También se puede activar el riego manualmente mediante un botón.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2011/02/esquema.png"><img class="alignnone size-medium wp-image-391" title="esquema" src="http://www.sistemasorp.es/wp-content/uploads/2011/02/esquema-300x152.png" alt="" width="300" height="152" /></a></p>
<p>Los componentes de la placa que he usado son:</p>
<ul>
<li>Microcontrolador PIC 16F628A</li>
<li>2 diodos led</li>
<li>2 resistencias de 220 ohm.</li>
<li>1 resistencia de 68K ohm.</li>
<li>1 transistor BC237</li>
<li>1 diodo 1N4148</li>
<li>Un relé de 12 voltios RA12W-K</li>
<li>Un botón</li>
<li>Un regulador 7805</li>
<li>Un condensador de 1000 uf</li>
<li>Un condensador de 100 uf</li>
<li>2 bornes de 2 tomas y uno de 3 tomas.</li>
<li>Pines y jumpers</li>
<li>Fuente de alimentación de 12 V. y 0,5A.</li>
</ul>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2300.jpg"><img class="alignnone size-medium wp-image-392" title="IMGP2300" src="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2300-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Es importante que las pistas (o los cables de una placa de topos) que van a los contactos del relé sean más anchos para soportar la intensidad de la corriente.</p>
<p>Para no tener que pelar el cable de la bomba de agua, he usado un alargador que será al que se enchufe la bomba, pero que está cortado por uno de sus cables para poder engancharlo al relé:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2301.jpg"><img class="alignnone size-medium wp-image-394" title="IMGP2301" src="http://www.sistemasorp.es/wp-content/uploads/2011/02/IMGP2301-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>El código fuente del PIC:</p>
<p>main.h</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;16F628A.h&gt;</span>
&nbsp;
<span style="color: #339933;">#FUSES NOWDT                    //No Watch Dog Timer</span>
<span style="color: #339933;">#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT</span>
<span style="color: #339933;">#FUSES NOPUT                    //No Power Up Timer</span>
<span style="color: #339933;">#FUSES NOPROTECT                //Code not protected from reading</span>
<span style="color: #339933;">#FUSES NOBROWNOUT               //No brownout reset</span>
<span style="color: #339933;">#FUSES NOMCLR                   //Master Clear pin used for I/O</span>
<span style="color: #339933;">#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O</span>
<span style="color: #339933;">#FUSES NOCPD                    //No EE protection</span>
&nbsp;
<span style="color: #339933;">#use delay(clock=4000000)</span>
<span style="color: #339933;">#use fast_io(A)</span>
<span style="color: #339933;">#use fast_io(B)</span>
&nbsp;
<span style="color: #339933;">#define CUANTAS 15</span></pre></div></div>

<p>main.c</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;main.h&quot;</span>
&nbsp;
<span style="color: #993333;">int</span> inicio <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int32</span> segundos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> interrupciones <span style="color: #339933;">=</span> CUANTAS<span style="color: #339933;">;</span>
<span style="color: #993333;">int32</span> repeticiones<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;">7</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">24</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">6</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">24</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">5</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">24</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">4</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">24</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">3</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">24</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">24</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">24</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">12</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">3600</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int16</span> duraciones<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;">16000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">14000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">12000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">10000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">8000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">6000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">4000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2000</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Cuenta los segundos que van pasando para la activación automática del</span>
<span style="color: #666666; font-style: italic;">// riego</span>
<span style="color: #339933;">#INT_RTCC</span>
<span style="color: #993333;">void</span> cronometro<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: #339933;">--</span>interrupciones <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
      <span style="color: #339933;">++</span>segundos<span style="color: #339933;">;</span>
      interrupciones<span style="color: #339933;">=</span>CUANTAS<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;">// La interrupción es lanzada cuando el nivel del agua detectado por</span>
<span style="color: #666666; font-style: italic;">// el sensor está por debajo de este y activamos el led de alarma</span>
<span style="color: #339933;">#INT_RB</span>
<span style="color: #993333;">void</span> nivel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>input<span style="color: #009900;">&#40;</span>PIN_B4<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      output_high<span style="color: #009900;">&#40;</span>PIN_A0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      output_low<span style="color: #009900;">&#40;</span>PIN_A3<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: #009900;">&#123;</span>
      output_low<span style="color: #009900;">&#40;</span>PIN_A0<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;">// La interrupción es lanzada cuando se pulsa el botón</span>
<span style="color: #339933;">#INT_EXT</span>
<span style="color: #993333;">void</span> empiece<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>inicio <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      inicio <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: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #993333;">int</span> contador<span style="color: #339933;">;</span>
&nbsp;
   set_timer0<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_0<span style="color: #009900;">&#40;</span>RTCC_INTERNAL<span style="color: #339933;">|</span>RTCC_DIV_256<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_1<span style="color: #009900;">&#40;</span>T1_DISABLED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_2<span style="color: #009900;">&#40;</span>T2_DISABLED<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_comparator<span style="color: #009900;">&#40;</span>NC_NC_NC_NC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_vref<span style="color: #009900;">&#40;</span>FALSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   port_b_pullups<span style="color: #009900;">&#40;</span>TRUE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   set_tris_a<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   output_low<span style="color: #009900;">&#40;</span>PIN_A0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   output_low<span style="color: #009900;">&#40;</span>PIN_A1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   output_low<span style="color: #009900;">&#40;</span>PIN_A3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   enable_interrupts<span style="color: #009900;">&#40;</span>INT_RTCC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   enable_interrupts<span style="color: #009900;">&#40;</span>INT_RB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   enable_interrupts<span style="color: #009900;">&#40;</span>INT_EXT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   enable_interrupts<span style="color: #009900;">&#40;</span>GLOBAL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   inicio <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">;;</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>inicio <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;">// No dejamos que se pulse de nuevo el botón mientras dure el proceso</span>
         disable_interrupts<span style="color: #009900;">&#40;</span>INT_EXT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #666666; font-style: italic;">// Parpadeamos durante 4 segundos el led de trabajo</span>
         <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>contador <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> contador <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> contador<span style="color: #339933;">++</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>contador <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
               output_high<span style="color: #009900;">&#40;</span>PIN_A1<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: #009900;">&#123;</span>
               output_low<span style="color: #009900;">&#40;</span>PIN_A1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><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;">// Si el nivel del agua está por encima del sensor activamos la bomba</span>
         <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>input<span style="color: #009900;">&#40;</span>PIN_B4<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: #009900;">&#123;</span>
            output_high<span style="color: #009900;">&#40;</span>PIN_A1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            output_high<span style="color: #009900;">&#40;</span>PIN_A3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            delay_ms<span style="color: #009900;">&#40;</span>duraciones<span style="color: #009900;">&#91;</span>input_b<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         output_low<span style="color: #009900;">&#40;</span>PIN_A1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         output_low<span style="color: #009900;">&#40;</span>PIN_A3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         enable_interrupts<span style="color: #009900;">&#40;</span>INT_EXT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         interrupciones <span style="color: #339933;">=</span> CUANTAS<span style="color: #339933;">;</span>
         segundos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
         inicio <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #009900;">&#125;</span>
      <span style="color: #666666; font-style: italic;">// Si el contador de segundos ha llegado a 0 es que hay que empezar </span>
      <span style="color: #666666; font-style: italic;">// el proceso de riego</span>
      <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>segundos <span style="color: #339933;">&gt;=</span> repeticiones<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>input_b<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0x0F</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         inicio <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: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>En el array <em>repeticiones</em> se ponen los milisegundos que dura el intervalo entre riegos, para poder seleccionarlo luego con los jumpers. En el array duraciones se ponen los milisegundos que dura el riego, para poder seleccionarlo luego con los jumpers.</p>
<p>Nada más arrancar el sistema empieza a contar los segundos que quedan para el siguiente riego, según esté configurado en los jumpers. Cuando llega ese momento o se pulsa el botón, el led de trabajo parpadea 4 segundos, permaneciendo encendido al igual que el relé para que funcione la bomba de agua mientras dure el tiempo de riego, según este configurado en los jumpers. Después el led se apaga, se desactiva el relé (y por consiguiente la bomba) y se espera de nuevo al evento de activación (por tiempo o hasta que se pulse de nuevo el botón).</p>
<p>Si el nivel del agua cae por debajo del sensor mientras se está regando se para automáticamente el riego desactivando el relé y encendiendo el led de alarma, que no se apagará hasta que el nivel esté otra vez por encima del sensor. Las siguientes veces que salte el evento por tiempo o por el botón, no activará el relé, protegiendo así a la bomba de estropearse.</p>
<p>Finalmente un video de cómo funciona el conjunto:<br />
<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/r9BiKt1F1j4" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2011/02/07/sistema-de-riego-automatico/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Interactuar con la videocámara MD80 y un microcontrolador</title>
		<link>http://www.sistemasorp.es/2010/12/22/interactuar-con-la-videocamara-md80-y-un-microcontrolador/</link>
		<comments>http://www.sistemasorp.es/2010/12/22/interactuar-con-la-videocamara-md80-y-un-microcontrolador/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 14:38:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[dv]]></category>
		<category><![CDATA[MD80]]></category>
		<category><![CDATA[microcontrolador]]></category>
		<category><![CDATA[mini]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[videocámara]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=367</guid>
		<description><![CDATA[Hace poco escribí una reseña sobre el clon de la videocámara MINIDV MD80. Al ser una videocámara de tamaño reducido se puede usar en los proyectos de electrónica que queramos, sin embargo su autonomía viene marcada por la batería que contiene, además de que el proceso de encendido/apagado y grabación/parada es manual. Mi intención ha [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco escribí una reseña sobre el <a href="http://www.sistemasorp.es/2010/11/29/clon-de-videocamara-md80/" target="_blank">clon de la videocámara MINIDV MD80</a>. Al ser una videocámara de tamaño reducido se puede usar en los proyectos de electrónica que queramos, sin embargo su autonomía viene marcada por la batería que contiene, además de que el proceso de encendido/apagado y grabación/parada es manual. Mi intención ha sido sustituir la batería por otra fuente de alimentación (una batería más grande, un transformador de la corriente eléctrica, etc) y que tanto el encendido como la grabación se hagan a través de un microcontrolador. En este artículo voy a explicar los pasos que he seguido para conseguir mi objetivo.</p>
<p>En principio he desmontado la carcasa de la videocámara y he extraido la electrónica y la batería:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2277.jpg"><img class="alignnone size-medium wp-image-368" title="IMGP2277" src="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2277-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2279.jpg"><img class="alignnone size-medium wp-image-369" title="IMGP2279" src="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2279-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>He desoldado la batería y en su lugar he puesto dos cables para unirlos a una protoboard (aunque podrían soldarse a una placa de topos o a una pcb). Después he soldado dos cables de wrapping a los terminales traseros del botón de encendido y otro cable de wrapping al terminal trasero izquierdo del botón de grabación:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2282.jpg"><img class="alignnone size-medium wp-image-370" title="IMGP2282" src="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2282-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2283.jpg"><img class="alignnone size-medium wp-image-371" title="IMGP2283" src="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2283-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>A partir de aquí ya se puede usar la cámara con un microcontrolador. Para este artículo me he decantado por un pic 12f683. La idea es usar dos transistores NPN para que hagan la simulación de pulsar tanto el botón de encendido como el de la grabación, para este artículo he usado 2 BC547. El microcontrolador activará la base del transistor a través de una resistencia de 390K. y comunicará el colector con el emisor como si de una pulsación manual del botón se tratase. Sólo hay que tener en cuenta que para el botón de encendido, el cable de wrapping de la derecha tiene que ir al colector y el cable de la izquierda al emisor, y en el botón de grabación el único cable va al colector y el emisor va a masa (GND).</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/12/esquema.png"><img class="alignnone size-medium wp-image-382" title="esquema" src="http://www.sistemasorp.es/wp-content/uploads/2010/12/esquema-300x178.png" alt="" width="300" height="178" /></a></p>
<p>La batería que trae la videocámara es una LiPo de una sola celda y tiene una capacidad de 230 mAh. Esto nos da la pista de que a la cámara debemos alimentarla con una tensión de 3,7 v. Para ello he usado un <a href="http://www.sureelectronics.net/goods.php?id=837" target="_blank">regulador Step-Down basado en el chip AX3022 de sure electronics</a>. Este regulador ofrece hasta 1,5 A., más que suficiente para alimentar  la videocámara y el microcontrolador (que puede funcionar a 3,7 v.).</p>
<p>Finalmente así queda el conjunto en una protoboard:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2284.jpg"><img class="alignnone size-medium wp-image-373" title="IMGP2284" src="http://www.sistemasorp.es/wp-content/uploads/2010/12/IMGP2284-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>El ejemplo que he programado en el microcontrolador es muy sencillo: Espera 5 segundos, activa el transistor del botón de encendido durante medio segundo, esto hace que la videocámara se encienda, espera otros 5 segundos, activa el transistor del botón de grabación durante medio segundo, esto hace que la videocámara empiece a grabar, espera 10 segundos, activa el transistor del botón de grabación durante medio segundo, esto hace que la grabación pare, espera 5 segundos y finalmente activa el transistor del botón de encendido durante medio segundo, que provoca que la videocámara se apague:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" 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://www.youtube.com/v/0CQtguYAnOk?hl=es&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/0CQtguYAnOk?hl=es&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>El código fuente del programa del pic:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;main.h&quot;</span>
&nbsp;
<span style="color: #993333;">void</span> power<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   output_high<span style="color: #009900;">&#40;</span>PIN_A0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   output_low<span style="color: #009900;">&#40;</span>PIN_A0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> record<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   output_high<span style="color: #009900;">&#40;</span>PIN_A1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   output_low<span style="color: #009900;">&#40;</span>PIN_A1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
   setup_adc_ports<span style="color: #009900;">&#40;</span>NO_ANALOGS<span style="color: #339933;">|</span>VSS_VDD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_adc<span style="color: #009900;">&#40;</span>ADC_OFF<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_0<span style="color: #009900;">&#40;</span>RTCC_INTERNAL<span style="color: #339933;">|</span>RTCC_DIV_1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_1<span style="color: #009900;">&#40;</span>T1_DISABLED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_2<span style="color: #009900;">&#40;</span>T2_DISABLED<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_comparator<span style="color: #009900;">&#40;</span>NC_NC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_vref<span style="color: #009900;">&#40;</span>FALSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_oscillator<span style="color: #009900;">&#40;</span>OSC_8MHZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;">// TODO: USER CODE!!</span>
   set_tris_a<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   output_a<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   power<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   record<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">10000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   record<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   power<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">;;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Cuando vayamos a conectar la videocámara a un puerto USB para ver las grabaciones, no debemos olvidarnos de desenchufar los cables de alimentación que hemos soldado, ya que la fuente de alimentación ya no es la batería original que contenía.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2010/12/22/interactuar-con-la-videocamara-md80-y-un-microcontrolador/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>El Bus Pirate</title>
		<link>http://www.sistemasorp.es/2010/09/07/el-bus-pirate/</link>
		<comments>http://www.sistemasorp.es/2010/09/07/el-bus-pirate/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 12:04:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[bus]]></category>
		<category><![CDATA[pirate]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=340</guid>
		<description><![CDATA[Bueno, pues me ha llegado el bus pirate y es una maravilla. Se trata de una placa open hardware que sirve para medir y/o interactuar de una forma simple con un montón de cosas. Se conecta por puerto usb a un ordenador y con una interfaz serie podemos enviar comandos al bus pirate. Esto es [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, pues me ha llegado el <a href="http://code.google.com/p/the-bus-pirate/" target="_blank">bus pirate</a> y es una maravilla.</p>
<p>Se trata de una placa open hardware que sirve para medir y/o interactuar de una forma simple con un montón de cosas. Se conecta por puerto usb a un ordenador y con una interfaz serie podemos enviar comandos al bus pirate. Esto es lo que puede hacer:</p>
<ul>
<li>Tomar medidas de 0 a 6 voltios.</li>
<li> Medir frecuencias de 1 Hz a 40 MHz</li>
<li>Generar PWM de 1 kHz a 4 MHz</li>
<li> Interactuar con dispositivos UART, SPI, I2C, MIDI, teclado, LCD, JTAG, etc</li>
<li> Analizador lógico de 10 Hz a 1 MHz</li>
<li> Se pueden hacer scripts desde Perl, Python, etc.</li>
<li> Se puede reprogramar para ser un programador de AVR o de PIC</li>
</ul>
<p>Mi primera prueba ha sido medir la temperatura de un <a href="http://www.google.es/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBkQFjAA&amp;url=http%3A%2F%2Fwww.national.com%2Fds%2FLM%2FLM35.pdf&amp;rct=j&amp;q=lm35&amp;ei=CimGTNuPM4vd4Abc7ozSBA&amp;usg=AFQjCNENZbT8LU9FiMNcj0B-2pHbkdUr4w&amp;sig2=hfJh5gKNss-5wYjJoGj8kw&amp;cad=rja" target="_blank">LM35</a>:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/09/IMGP2222.jpg"><img class="alignnone size-medium wp-image-341" title="bus pirate y LM35" src="http://www.sistemasorp.es/wp-content/uploads/2010/09/IMGP2222-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/09/piratebus.png"><img class="alignnone size-medium wp-image-342" title="interfaz serie" src="http://www.sistemasorp.es/wp-content/uploads/2010/09/piratebus-300x188.png" alt="" width="300" height="188" /></a></p>
<p>Que indica que en la habitación tengo 32 grados (calorcito hace, si <img src='http://www.sistemasorp.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>La verdad es que es muy cómodo y muy rápido para probar todos aquellos componenes que en otro caso tendríamos que desplegar un montón de componentes para obtener algún resultado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2010/09/07/el-bus-pirate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Alarma con un pic 16f628, un transceptor ds275, sensor de movimiento y un modem antiguo</title>
		<link>http://www.sistemasorp.es/2010/08/14/alarma-con-un-pic-16f628-un-transceptor-ds275-sensor-de-movimiento-y-un-modem-antiguo/</link>
		<comments>http://www.sistemasorp.es/2010/08/14/alarma-con-un-pic-16f628-un-transceptor-ds275-sensor-de-movimiento-y-un-modem-antiguo/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 09:15:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[16f628]]></category>
		<category><![CDATA[alarma]]></category>
		<category><![CDATA[ds275]]></category>
		<category><![CDATA[modem]]></category>
		<category><![CDATA[movimiento]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[pir]]></category>
		<category><![CDATA[sensor]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=328</guid>
		<description><![CDATA[Tenía un modem externo antiguo de 2400 b.p.s. que me regalaron y se me ocurrió la idea de usarlo para crear una alarma. Los bueno de los modems es que puedes interactuar con la línea telefónica para hacer llamadas. La idea consiste en que un sensor de movimiento piroeléctrico de infrarrojos (PIR) detecte el movimiento [...]]]></description>
			<content:encoded><![CDATA[<p>Tenía un modem externo antiguo de 2400 b.p.s. que me regalaron y se me ocurrió la idea de usarlo para crear una alarma. Los bueno de los modems es que puedes interactuar con la línea telefónica para hacer llamadas.</p>
<p>La idea consiste en que un sensor de movimiento piroeléctrico de infrarrojos (PIR) detecte el movimiento de una persona en una sala, este informaría de la detección a un pic y este sería el encargado de llamar a un número de teléfono a través del modem.</p>
<p>El matería que he usado es:</p>
<ul>
<li>Sensor de movimiento piroeléctrico de infrarrojos (PIR) de sure electronics DC-SS502 ( <a href="http://www.sureelectronics.net/goods.php?id=932" target="_blank">http://www.sureelectronics.net/goods.php?id=932</a> )</li>
<li>Microcontrolador PIC 16f628A ( <a href="http://www.microchip.com/wwwproducts/devices.aspx?ddocname=en010210" target="_blank">http://www.microchip.com/wwwproducts/devices.aspx?ddocname=en010210</a> )</li>
<li>Transceptor ds275 ( <a href="http://www.maxim-ic.com/datasheet/index.mvp/id/2929" target="_blank">http://www.maxim-ic.com/datasheet/index.mvp/id/2929</a> )</li>
<li>Una placa de topos, cable, un conector serie db9 macho y un modem externo</li>
</ul>
<p>Para hacer el circuito lo más sencillo posible he usado un pic 16f628a dado que con él podemos ahorrarnos el poner un cristal de cuarzo externo, poder desactivar el pin MCLR y usar la USART que trae consigo (podría haber usado un pic 16f88 igualmente). También he usado el transceptor ds275 porque se puede comunicar con un puerto serie como el del modem sin añadirle ningún condensador como ocurre con el MAX232. Como no quería depender de una fuente de alimentación externa, he soldado unos cables al modem para obtener de este los 5 voltios necesarios para el pic y el transceptor y para la alimentación de 9 voltios del sensor PIR.</p>
<p>Este es el esquema del circuito:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/08/esquema.png"><img class="alignnone size-medium wp-image-329" title="esquema" src="http://www.sistemasorp.es/wp-content/uploads/2010/08/esquema-300x195.png" alt="" width="300" height="195" /></a></p>
<p>El sensor PIR tiene una salida digital que va conectada al pin RB0 del pic, que se puede programar como interrupción, por lo que el pic puede permanecer en modo sleep hasta que recibe la interrupción del sensor y empezar a mandar los comandos AT para hacer la llamada de alarma. Como el PIC no puede por sí sólo interactuar con un puerto serie, el transceptor convierte las señales del PIC a señales RS232 para enviárselas al puerto serie del modem y viceversa. Una vez que se ha hecho la llamada y el modem detecta que se ha colgado la linea, devolverá un código numérico que el pic recibirá para volver a dejar el sistema en modo de detección.</p>
<p>Foto del conjunto:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/08/IMGP2211.jpg"><img class="alignnone size-medium wp-image-330" title="IMGP2211" src="http://www.sistemasorp.es/wp-content/uploads/2010/08/IMGP2211-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Un video de demostración:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/WYHL4va0dgY&#038;hl=es&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/WYHL4va0dgY&#038;hl=es&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Lo que sucede en el video es lo siguiente: Se enciende el modem y el pic configura este para que no tenga eco los comandos, para que devuelva respuestas numéricas y que el altavoz esté desactivado, después de 15 segundos de espera para que el usuario pueda abandonar la habitación el pic se pone a esperar la detección de movimiento, cuando la detecta llama a un número de móvil prefijado para que el usuario reciba la alerta.</p>
<p>El código fuente del pic esta programado en CCS y es el siguiente:</p>
<p><strong>main.h</strong></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;16F628A.h&gt;</span>
&nbsp;
<span style="color: #339933;">#FUSES NOWDT                    //No Watch Dog Timer</span>
<span style="color: #339933;">#FUSES INTRC                    //Internal RC Osc</span>
<span style="color: #339933;">#FUSES NOPUT                    //No Power Up Timer</span>
<span style="color: #339933;">#FUSES NOPROTECT                //Code not protected from reading</span>
<span style="color: #339933;">#FUSES NOBROWNOUT               //No brownout reset</span>
<span style="color: #339933;">#FUSES NOMCLR                   //Master Clear pin used for I/O</span>
<span style="color: #339933;">#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O</span>
<span style="color: #339933;">#FUSES NOCPD                    //No EE protection</span>
&nbsp;
<span style="color: #339933;">#use delay(clock=4000000)</span>
<span style="color: #339933;">#use fast_io(b)</span>
<span style="color: #339933;">#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #000000; font-weight: bold;">enum</span> <span style="color: #009900;">&#123;</span>INICIO<span style="color: #339933;">,</span> DETECTA<span style="color: #339933;">,</span> ALARMA<span style="color: #339933;">,</span> LLAMADO<span style="color: #009900;">&#125;</span> ESTADOS<span style="color: #339933;">;</span></pre></div></div>

<p><strong>main.c</strong></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;main.h&quot;</span>
&nbsp;
ESTADOS estado<span style="color: #339933;">;</span>
<span style="color: #993333;">volatile</span> <span style="color: #993333;">int8</span> dato<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// se ha detectado un movimiento y se pasa al estado de alarma</span>
<span style="color: #339933;">#INT_EXT</span>
<span style="color: #993333;">void</span> movimiento<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>estado <span style="color: #339933;">==</span> DETECTA<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      estado <span style="color: #339933;">=</span> ALARMA<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;">// se ha detectado un carácter en la cola la USART</span>
<span style="color: #339933;">#INT_RDA</span>
<span style="color: #993333;">void</span> lectura<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #993333;">int8</span> valor<span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>kbhit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      valor <span style="color: #339933;">=</span> getc<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>valor <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\r</span>'</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         dato <span style="color: #339933;">=</span> valor<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// función genérica que pasa al estado de detección borrando cualquier interrupción anterior y activándola </span>
<span style="color: #993333;">void</span> deteccion<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   estado <span style="color: #339933;">=</span> DETECTA<span style="color: #339933;">;</span>
   clear_interrupt<span style="color: #009900;">&#40;</span>int_ext<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   enable_interrupts<span style="color: #009900;">&#40;</span>int_ext<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   setup_timer_0<span style="color: #009900;">&#40;</span>RTCC_INTERNAL<span style="color: #339933;">|</span>RTCC_DIV_1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_1<span style="color: #009900;">&#40;</span>T1_DISABLED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_timer_2<span style="color: #009900;">&#40;</span>T2_DISABLED<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_comparator<span style="color: #009900;">&#40;</span>NC_NC_NC_NC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_vref<span style="color: #009900;">&#40;</span>FALSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   setup_oscillator<span style="color: #009900;">&#40;</span>OSC_4MHZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">// Ponemos a todos los pines del puerto B como entrada excepto el de salida de la USART </span>
   set_tris_b<span style="color: #009900;">&#40;</span><span style="color: #208080;">0xFB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">// Empezamos por el estado de inicio</span>
   estado <span style="color: #339933;">=</span> INICIO<span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">// La interrupción debe ser cuando pasa de nivel bajo a nivel alto</span>
   ext_int_edge<span style="color: #009900;">&#40;</span> L_TO_H <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   enable_interrupts<span style="color: #009900;">&#40;</span>int_rda<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   enable_interrupts<span style="color: #009900;">&#40;</span>global<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;">// TODO: USER CODE!!</span>
&nbsp;
   <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">;;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>estado<span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         <span style="color: #666666; font-style: italic;">// En el estado de inicio inicializamos el modem para que no haga eco de los comandos, </span>
         <span style="color: #666666; font-style: italic;">// los valores de respuesta sean numéricos y apague el altavoz del modem, esperando</span>
         <span style="color: #666666; font-style: italic;">// 15 segundos para dejar salir al usuario de la sala y pasamos al estado de detección</span>
         <span style="color: #b1b100;">case</span> INICIO<span style="color: #339933;">:</span>
            delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ATE0V0M0<span style="color: #000099; font-weight: bold;">\r</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">13000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            deteccion<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
         <span style="color: #666666; font-style: italic;">// En el estado de detección esperamos la interrupción en modo sleep para consumir menos</span>
         <span style="color: #b1b100;">case</span> DETECTA<span style="color: #339933;">:</span>
            sleep<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
         <span style="color: #666666; font-style: italic;">// Se desactiva la interrupción y marcamos el número de teléfono que queramos alertar</span>
         <span style="color: #b1b100;">case</span> ALARMA<span style="color: #339933;">:</span>
            disable_interrupts<span style="color: #009900;">&#40;</span>int_ext<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            dato <span style="color: #339933;">=</span> <span style="color: #ff0000;">'A'</span><span style="color: #339933;">;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ATDTXXXXXXXXX<span style="color: #000099; font-weight: bold;">\r</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            estado <span style="color: #339933;">=</span> LLAMADO<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
         <span style="color: #666666; font-style: italic;">// Esperamos a que termine la llamada para que vuelva al estado de detección</span>
         <span style="color: #b1b100;">case</span> LLAMADO<span style="color: #339933;">:</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>dato <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'A'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
               deteccion<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: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Sólo comentar que XXXXXXXXX hay que sustituirlo por el número de teléfono al que queramos dar la alarma.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2010/08/14/alarma-con-un-pic-16f628-un-transceptor-ds275-sensor-de-movimiento-y-un-modem-antiguo/feed/</wfw:commentRss>
		<slash:comments>72</slash:comments>
		</item>
		<item>
		<title>Robot con arduino, motorshield, módulo bluetooth y cámara portatil</title>
		<link>http://www.sistemasorp.es/2010/07/03/robot-con-arduino-motorshield-modulo-bluetooth-y-camara-portatil/</link>
		<comments>http://www.sistemasorp.es/2010/07/03/robot-con-arduino-motorshield-modulo-bluetooth-y-camara-portatil/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 07:12:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[cámara]]></category>
		<category><![CDATA[motorshield]]></category>
		<category><![CDATA[robot]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=312</guid>
		<description><![CDATA[Hace tiempo que hice mi primer robot, pero este se quedó en el olvido y recientemente he querido retomarlo para un proyecto de orientación por GPS. De momento lo he estado montando para que detecte colisiones con objetos, pero además me comunique mediante bluetooth cuando detecta esas colisiones. He aquí los pasos que he ido [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo que hice <a href="http://www.sistemasorp.es/2009/05/09/robot/" target="_blank">mi primer robot</a>, pero este se quedó en el olvido y recientemente he querido retomarlo para un proyecto de orientación por GPS. De momento lo he estado montando para que detecte colisiones con objetos, pero además me comunique mediante bluetooth cuando detecta esas colisiones. He aquí los pasos que he ido siguiendo para montarlo:</p>
<p>Primero extraemos la electronica y nos quedamos con los cables de los motores del coche teledirigido, después añadimos un conector tamiya con fusible para la batería LIPO:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1930.jpg"><img class="alignnone size-medium wp-image-313" title="chasis" src="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1930-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Nos hacemos con una placa <a href="http://www.arduino.cc/es/" target="_blank">Arduino</a> y un <a href="http://www.bricogeek.com/shop/15-motor-shield-kit.html" target="_blank">motorshield</a>, en la cual se pueden acoplar en sus pines los cables de los motores:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1938.jpg"><img class="alignnone size-medium wp-image-314" title="arduino y motorshield" src="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1938-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>En el mercado existen multitud de módulos bluetooth, yo he comprado <a href="http://www.sureelectronics.net/goods.php?id=402" target="_blank">el de sure electronics</a> por su sencillez tanto de montaje como de comunicaciones (va a 9600 bps). Dos cables van a los pines RX y TX de la arduino y otros dos van a la salida de 3,3 voltios y GND de la arduino. Para comunicarse con él en windows basta con el <em>putty </em>accediendo al puerto COM que se haya asociado a vuestra conexión bluetooth;  si se trata de linux o mac podeis conectaros desde la consola con <em>screen /dev/&lt;dispositivo&gt; 9600</em> siendo <em>&lt;dispositivo&gt;</em> el tty asociado a la conexión:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/07/modulo.jpg"><img class="alignnone size-medium wp-image-315" title="módulo bluetooth" src="http://www.sistemasorp.es/wp-content/uploads/2010/07/modulo-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Montamos los bumpers. El cable suelto va a uno de los pines GND de la arduino, los otros dos cables van conectados a los pines EC1 y EC2 de la motorshield, que a su vez están conectados a los pines 4 y 5 de la arduino, por lo que se deberá activar la resistencia pull-up interna de esos pines:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1964.jpg"><img class="alignnone size-medium wp-image-316" title="bumpers" src="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1964-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Una batería LIPO para alimentar el conjunto, pegada con velcro para que se sujete bien a la vez que sea fácil quitarla para cargarla o sustituirla:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1929.jpg"><img class="alignnone size-medium wp-image-317" title="batería LIPO" src="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1929-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Aunque no es necesario, he puesto una cámara wireless alimentada con una pila de 9 voltios para grabar los movimientos. Al final el conjunto queda así:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1960.jpg"><img class="alignnone size-medium wp-image-318" title="robot" src="http://www.sistemasorp.es/wp-content/uploads/2010/07/IMGP1960-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Como el movimiento se demuestra andando, pongo un video de su funcionamiento (recomiendo agrandarlo para ver mejor los detalles). A la izquierda el putty mostrando los mensajes que envía la arduino a través de bluetooth, en el centro un video del cómo responde el robot y a la derecha otro video desde dentro del robot:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/s0NB3TtsjI4&#038;hl=es&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/s0NB3TtsjI4&#038;hl=es&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Finalmente dejo el código fuente del robot para el entorno Arduino:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> dirA <span style="color: #339933;">=</span> <span style="color: #0000dd;">12</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// sentido</span>
<span style="color: #993333;">int</span> dirB <span style="color: #339933;">=</span> <span style="color: #0000dd;">13</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// direccion </span>
<span style="color: #993333;">int</span> speedA <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// velocidad del motor</span>
<span style="color: #993333;">int</span> speedB <span style="color: #339933;">=</span> <span style="color: #0000dd;">11</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// parada o encendido de la dirección</span>
<span style="color: #993333;">int</span> bumperI <span style="color: #339933;">=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// bumper izquierdo</span>
<span style="color: #993333;">int</span> bumperD <span style="color: #339933;">=</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// bumper derecho</span>
<span style="color: #993333;">int</span> boton2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// boton 2 de la motorshield</span>
<span style="color: #993333;">int</span> boton1 <span style="color: #339933;">=</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// boton 1 de la motorshield</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// El robot va hacia atrás</span>
<span style="color: #993333;">void</span> atras<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  digitalWrite <span style="color: #009900;">&#40;</span>dirA<span style="color: #339933;">,</span> HIGH<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;">// El robot va hacia alante</span>
<span style="color: #993333;">void</span> alante<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  digitalWrite <span style="color: #009900;">&#40;</span>dirA<span style="color: #339933;">,</span> LOW<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;">// El robot tuerce a la izquierda</span>
<span style="color: #993333;">void</span> izquierda<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  digitalWrite <span style="color: #009900;">&#40;</span>dirB<span style="color: #339933;">,</span> LOW<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;">// El robot tuerce a la derecha</span>
<span style="color: #993333;">void</span> derecha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  digitalWrite <span style="color: #009900;">&#40;</span>dirB<span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&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;">// Configuración de los pines de la motorshield</span>
  pinMode <span style="color: #009900;">&#40;</span>dirA<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  pinMode <span style="color: #009900;">&#40;</span>dirB<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  pinMode <span style="color: #009900;">&#40;</span>speedA<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  pinMode <span style="color: #009900;">&#40;</span>speedB<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Configuración de los pines de los bumpers</span>
  pinMode <span style="color: #009900;">&#40;</span>bumperI<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode <span style="color: #009900;">&#40;</span>bumperD<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Configuración de los botones de la motorshield</span>
  pinMode <span style="color: #009900;">&#40;</span>boton1<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode <span style="color: #009900;">&#40;</span>boton2<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Configuración de las comunicaciones por bluetooth</span>
  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>
<span style="color: #009900;">&#125;</span>
&nbsp;
&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: #666666; font-style: italic;">// Si se ha pulsado el boton de arranque</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</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: #009900;">&#123;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// para evitar rebotes en el boton</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;empiezo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    analogWrite<span style="color: #009900;">&#40;</span>speedA<span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// PWM a 100</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">// Si se ha pulsado el boton de parada</span>
  <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</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: #009900;">&#123;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// para evitar rebotes en el boton</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;termino&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    analogWrite<span style="color: #009900;">&#40;</span>speedA<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: #666666; font-style: italic;">// PWM a 0</span>
  <span style="color: #009900;">&#125;</span>  
  alante<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// Si se ha detectado una colisión por el flanco derecho</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>bumperD<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: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;choque derecha&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    digitalWrite<span style="color: #009900;">&#40;</span>speedB<span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #666666; font-style: italic;">// Va hacia atrás a la derecha durante 1 segundo    </span>
    derecha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    atras<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// Va hacia alante a la izquierda durante medio segundo</span>
    alante<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    izquierda<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    digitalWrite<span style="color: #009900;">&#40;</span>speedB<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">// Si se ha detectado una colisión por el flanco izquierdo</span>
  <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>bumperI<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: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;choque izquierda&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    digitalWrite<span style="color: #009900;">&#40;</span>speedB<span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #666666; font-style: italic;">// Va hacia atrás a la izquierda durante 1 segundo</span>
    izquierda<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    atras<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// Va hacia alante a la derecha durante medio segundo    </span>
    alante<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    derecha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    digitalWrite<span style="color: #009900;">&#40;</span>speedB<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2010/07/03/robot-con-arduino-motorshield-modulo-bluetooth-y-camara-portatil/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

