<?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>Push The Button &#187; Arduino</title>
	<atom:link href="http://pushthebutton.es/archivos/category/arduino/feed" rel="self" type="application/rss+xml" />
	<link>http://pushthebutton.es</link>
	<description>Worklog de electronica, DIY, e informática de Alwar</description>
	<lastBuildDate>Thu, 10 May 2012 10:27:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Brazo robótico (Arduino+Bluetooth+Android)</title>
		<link>http://pushthebutton.es/archivos/brazo-robotico-arduinobluetoothandroid</link>
		<comments>http://pushthebutton.es/archivos/brazo-robotico-arduinobluetoothandroid#comments</comments>
		<pubDate>Thu, 10 May 2012 10:27:50 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/?p=316</guid>
		<description><![CDATA[Para la asignatura de Sistemas Empotrados y en Tiempo Real del Grado en ingeniería informática de la URJC teníamos que hacer un proyecto con Arduino. La temática era libre, solo debía tener cierta originalidad y dificultad. Nuestro grupo decidimos hacer un brazo robótico que controlaríamos a través de bluetooth desde un dispositivo android. El martes pasado, fue la presentación [...]]]></description>
			<content:encoded><![CDATA[<p>Para la asignatura de Sistemas Empotrados y en Tiempo Real del <a title="Grado en ingeniería informatica de la URJC" href="http://www.urjc.es/estudios/grado/ingenieria_informatica/ingenieria_informatica.html" target="_blank">Grado en ingeniería informática </a>de la URJC teníamos que hacer un proyecto con Arduino. La temática era libre, solo debía tener cierta originalidad y dificultad. Nuestro grupo decidimos hacer un brazo robótico que controlaríamos a través de bluetooth desde un dispositivo android.</p>
<p>El martes pasado, fue la presentación de los proyectos, y la nuestra fue todo un desastre. Nervios + tocar cosas que funcionan a ultima hora = desastre. Aunque al final acabamos con nota aceptable (6,7 de la clase, y 9 del profesor) decidí que esto no podía quedar así y debía mostrar al resto como funcionaba de verdad el brazo. A si que he decidido poner aquí los videos del brazo. Pero no, no son del brazo terminado, si no de algunas pruebas hechas antes terminarlo. Cuando me lleguen los dos servos que me faltan (uno se rompio y otro era del Kit de arduino que nos prestó el profesor y que ya se lo hemos devuelto) grabaremos un vídeo en condiciones y lo mostraré&#8230; mientras tanto&#8230;</p>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/DJmd1T-T5Nc" frameborder="0" allowfullscreen></iframe></p>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/tty41QSh4xg" frameborder="0" allowfullscreen></iframe></p>
<p><iframe src="http://player.vimeo.com/video/41451836" width="500" height="375" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><br />
Si, lo se, se me da muy mal editar vídeos&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/brazo-robotico-arduinobluetoothandroid/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino y el driver Motorola MC14499</title>
		<link>http://pushthebutton.es/archivos/arduino-y-el-driver-motorola-mc14499</link>
		<comments>http://pushthebutton.es/archivos/arduino-y-el-driver-motorola-mc14499#comments</comments>
		<pubDate>Wed, 09 May 2012 21:51:46 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/?p=308</guid>
		<description><![CDATA[Puff&#8230; hace mas de un año que no escribo nada en el blog, casi se me ha olvidado como se hace, y eso que este año ha sido un año interesante. A si que vamos a empezar despacito&#8230; El otro día un amigo me dejo una pequeña placa (PCB) que se había encontrado. Seguramente sea [...]]]></description>
			<content:encoded><![CDATA[<p>Puff&#8230; hace mas de un año que no escribo nada en el blog, casi se me ha olvidado como se hace, y eso que este año ha sido un año interesante. A si que vamos a empezar despacito&#8230;</p>
<p>El otro día un amigo me dejo una pequeña placa (PCB) que se había encontrado. Seguramente sea de una maquina de vending o algo por el estilo ya que tiene 4 displays de 7 segmentos y otros 4 pulsadores. Venía con un cable plano de 16 hilos, y trae en soldado a la placa un chip <a title="MC14499P" href="http://www.datasheetcatalog.org/datasheet/motorola/MC14499DW.pdf" target="_blank">MC14499P</a>. Obviamente lo primero que hice, fue buscar en internet el datasheeet del chip. Este es un driver para 4 displays de 7 segmentos que se puede enlazar en cascada a otros drivers para controlar mas displays. La forma de comunicarnos con el es a traves de tres señales: DATA, CLOCK y ENABLE. Al no haber libreria de arduino para este chip, tuve que pensar como comunicarme con el, y como su interfaz es tán parecida a la de los registros de desplazamiento (Shift Registers -&gt;74HC595) pues probé con el mismo método. La función <a title="ShiftOut" href="http://arduino.cc/en/Reference/ShiftOut" target="_blank">ShiftOut</a>, y con un poco de prueba y error saque las posiciones de cada digito. Aquí dejo el vídeo:</p>
<p><iframe src="http://www.youtube.com/embed/W7vNcQa96F8" frameborder="0" width="420" height="315"></iframe></p>
<p>Y el código:</p>
<pre>#define LATCH   6
#define CLK     7
#define DATA    8

<span style="color: #808080;">// 128.64.32.16.8.4.2.1 // 0 0 0 0 1 1 1 1</span>

void setup() {
  Serial.<span style="color: #ff9900;">begin</span>(<span style="color: #99cc00;">9600</span>);
  Serial.<span style="color: #ff9900;">println</span>(<span style="color: #993300;">"startup"</span>);

  <span style="color: #ff9900;">pinMode</span>(LATCH,<span style="color: #000080;">OUTPUT</span>);
  <span style="color: #ff9900;">pinMode</span>(CLK,  <span style="color: #000080;">OUTPUT</span>);
  <span style="color: #ff9900;">pinMode</span>(DATA, <span style="color: #000080;">OUTPUT</span>);
}

void loop(){
    <span style="color: #ff9900;">digitalWrite</span>(LATCH, <span style="color: #000080;">LOW</span>);
    <span style="color: #ff9900;">shiftOut</span>(DATA, CLK, <span style="color: #000080;">MSBFIRST</span>, 80);  <span style="color: #808080;"> //80 = 0 1 0 1 | 0 0 0 0  [ </span><span style="color: #808080;">5 | 0 ]</span></pre>
<pre>    <span style="color: #ff9900;">shiftOut</span>(DATA, CLK, <span style="color: #000080;">MSBFIRST</span>, 233); <span style="color: #808080;"> //229= 1 1 1 0 | 1 0 0 1 [ - | 9 ]</span></pre>
<pre><span style="color: #808080;">//Resultado 9 - 0 5</span></pre>
<pre>    <span style="color: #ff9900;">digitalWrite</span>(LATCH, <span style="color: #000080;">HIGH</span>);<span style="color: #808080;"> // Activando el latch indicamos de que ya están todos los datos</span>
    <span style="color: #ff9900;">delay</span>(1000);   <span style="color: #808080;">// Lo mostramos durante un segundo</span>
    <span style="color: #ff9900;">digitalWrite</span>(LATCH, <span style="color: #000080;">LOW</span>);  <span style="color: #808080;">// Bajamos el latch para introducir mas datos. </span>
    <span style="color: #ff9900;">shiftOut</span>(DATA, CLK, <span style="color: #000080;">MSBFIRST</span>, 33); <span style="color: #808080;"> //33 = 0 0 1 0 | 0 0 0 1 [ 2 | 1 ]</span>
    <span style="color: #ff9900;">shiftOut</span>(DATA, CLK, <span style="color: #000080;">MSBFIRST</span>, 2);   <span style="color: #808080;">//2 = 0 0 0 0 | 0 0 1 0 [ 0 | 2 ]</span></pre>
<pre><span style="color: #808080;">// Resultado : 2 0 1 2</span></pre>
<pre>
    <span style="color: #ff9900;">digitalWrite</span>(LATCH, <span style="color: #000080;">HIGH</span>);
    <span style="color: #ff9900;">delay</span>(1000);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/arduino-y-el-driver-motorola-mc14499/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CAN Sniffer con Arduino + Secuduino</title>
		<link>http://pushthebutton.es/archivos/can-sniffer-con-arduino-secuduino</link>
		<comments>http://pushthebutton.es/archivos/can-sniffer-con-arduino-secuduino#comments</comments>
		<pubDate>Fri, 06 May 2011 18:20:55 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Vehiculos]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/?p=286</guid>
		<description><![CDATA[Para quien no conozca que es el CAN-bus, copio de la wikipedia CAN (acrónimo del inglés Controller Area Network) es un protocolo de comunicaciones desarrollado por la firma alemana Robert Bosch GmbH, basado en una topología bus para la transmisión de mensajes en entornos distribuidos. Lee la entrada completa Y para que quiero yo esto? [...]]]></description>
			<content:encoded><![CDATA[<div align="justify">Para quien no conozca que es el CAN-bus, copio de la <a href="http://es.wikipedia.org/wiki/Bus_CAN">wikipedia</a> </p>
<blockquote><p>CAN (acrónimo del inglés Controller Area Network) es un protocolo de comunicaciones desarrollado por la firma alemana Robert Bosch GmbH, basado en una topología bus para la transmisión de mensajes en entornos distribuidos.</p></blockquote>
<div id="attachment_287" class="wp-caption aligncenter" style="width: 310px"><a href="http://pushthebutton.es/wp-content/uploads/2011/05/cansniffer.jpg"><img src="http://pushthebutton.es/wp-content/uploads/2011/05/cansniffer-300x300.jpg" alt="Analizar del bus CAN" title="cansniffer" width="300" height="300" class="size-medium wp-image-287" /></a><p class="wp-caption-text">Can Sniffer</p></div>
<p><a href="http://pushthebutton.es/archivos/can-sniffer-con-arduino-secuduino">Lee la entrada completa</a><br />
<span id="more-286"></span><br />
Y para que quiero yo esto? Pues desde hace unos cuantos años, el aumento de electrónica en los coches ha obligado a los fabricantes a implantar una red dentro del vehículo para poder comunicar todos los sensores, actuadores y cpus del coche sin tener que tirar metros y metros de cables para conectarlos todos. Con este bus, podemos comunicar toda la electrónica del coche <strong>¡¡¡con solo dos hilos!!!</strong> (Cosas de la transmision diferencial y el <a href="http://es.wikipedia.org/wiki/Carrier_sense_multiple_access">CSMA</a>). Aunque en la realidad, por ejemplo en los coches del grupo Volkswagen cada vehículo tiene tres buses, el de Tracción, el de Confort, y el de &#8220;Infotaiment&#8221;.  Como es de esperar, las comunicaciones mas vitales del coche van por el de tracción, lo referente a los asientos, el climatizador, puertas, ventanas luces etc va por el de confort, y por último la información del cuadro de instrumentos (<a href="http://en.wikipedia.org/wiki/Aka">a.k.a</a> Cockpit) la radio, el navegador &#8230; va por el de &#8220;infotaiment&#8221;. Y aquí es donde me interesa el sniffer, ya que en mi coche, la radio se puede comunicar con el Cockpit para mostrar información en el FIS, incluso en coches con mandos en el volante (manos libres, control de la radio&#8230;) puedes a través de este bus saber cuando se pulsa un botón. Todo esto enfocado a algún día llevar en el coche un CarPC/TabletPC y dotarlo de funcionalidades añadidas.</p>
<p>El cacharro en si es bien sencillo.</p>
<ul>
<li><a href="http://secuduino.blogspot.com/">Un controlador del CAN-BUS</a></li>
<li>Arduino </li>
<li>Software adecuado (Do It Yourself)</li>
</ul>
<p>En principio solo vamos a analizar una parte de las comunicaciones, ya que por el bus  viaja mucha información, y solo una parte nos interesa, ademas esta va codificada (que no cifrada) a su manera, ya que aunque el CAN es un estándar, cada fabricante pone los datos en el bus como le da la gana. </p>
<p>Una vez tengamos la información que necesitemos, podemos reprogramar arduino para que simplemente conecte el pc con el CAN-BUS.</p>
<p>Aquí dejo la foto del caos-cableado que une todo. La idea es que también lleve su tarjeta SD/microSD para que almacene todos los mensajes durante los viajes y después analizarlos sin necesidad del PC siempre en el coche.<br />
<div id="attachment_288" class="wp-caption aligncenter" style="width: 310px"><a href="http://pushthebutton.es/wp-content/uploads/2011/05/cansniffer2.jpg"><img src="http://pushthebutton.es/wp-content/uploads/2011/05/cansniffer2-300x203.jpg" alt="CAN Sniffer sin LCD" title="cansniffer2" width="300" height="203" class="size-medium wp-image-288" /></a><p class="wp-caption-text">CAN Sniffer sin LCD</p></div></div>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/can-sniffer-con-arduino-secuduino/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matriz de diodos &#8211; Test 3</title>
		<link>http://pushthebutton.es/archivos/matriz-de-diodos-test-3</link>
		<comments>http://pushthebutton.es/archivos/matriz-de-diodos-test-3#comments</comments>
		<pubDate>Mon, 14 Jun 2010 19:29:45 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/?p=258</guid>
		<description><![CDATA[Está hecho con Arduino, un array de pares darlington (ULN2003A) y un shift register 74HC595. Solo falta montarlo en una placa, soldarlo con unos cuantos mas shift registers y tendremos una marquesina. Esuqema de conexion de la matriz de 8&#215;8: Las resistencias que hay entre los integrados y la matriz, a mi me ha funcionado [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" 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/XnqpI_hctaU&amp;hl=es_ES&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/XnqpI_hctaU&amp;hl=es_ES&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Está hecho con Arduino, un array de pares darlington (ULN2003A) y un shift register 74HC595. Solo falta montarlo en una placa, soldarlo con unos cuantos mas shift registers y tendremos una marquesina. Esuqema de conexion de la matriz de 8&#215;8:<br />
<a href="http://img193.imageshack.us/img193/6409/matrixl.png"><img class="aligncenter" title="8x8 Led matrix" src="http://img193.imageshack.us/img193/6409/matrixl.png" alt="8x8 Led matrix" width="640" /></a></p>
<p>Las resistencias que hay entre los integrados y la matriz, a mi me ha funcionado con resistencias de entre 0,5K Ohm y 1k Ohm<br />
El codigo está <a href="http://pushthebutton.es/archivos/matriz-de-diodos-test-3"> aquí</a>.<br />
<span id="more-258"></span></p>
<pre name="code" class="c">
// 8*8 LED matrix with ULN2003A &amp; 74HC595
// Made by Vadim S.
//On 25.06.2009
// Mod by Alwar
//On 13.06.2010
///Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
int x;
int y;
// here the definion of all the letter(big ans small) and numbers
#define A     {B00111100,B01000010,B01000010,B01000010,B01111110,B01000010,B01000010,B01000010}
#define B     {B01111100,B01000010,B01000010,B01111100,B01000010,B01000010,B01000010,B01111100}
#define C     {B00111110,B01000000,B01000000,B01000000,B01000000,B01000000,B01000000,B00111110}
#define D     {B01111100,B01000010,B01000010,B01000010,B01000010,B01000010,B01000010,B01111100}
#define E     {B01111110,B01000000,B01000000,B01111100,B01000000,B01000000,B01000000,B01111110}
#define F     {B01111110,B01000000,B01000000,B01111100,B01000000,B01000000,B01000000,B01000000}
#define G     {B00111100,B01000010,B01000010,B01000000,B01000111,B01000010,B01000010,B00111100}
#define H     {B01000010,B01000010,B01000010,B01111110,B01000010,B01000010,B01000010,B01000010}
#define I     {B00111000,B00010000,B00010000,B00010000,B00010000,B00010000,B00010000,B00111000}
#define J     {B00011100,B00001000,B00001000,B00001000,B00001000,B01001000,B01001000,B00110000}
#define K     {B01000100,B01001000,B01010000,B01100000,B01010000,B01001000,B01000100,B01000010}
#define L     {B01000000,B01000000,B01000000,B01000000,B01000000,B01000000,B01000000,B01111110}
#define M     {B01000100,B10101010,B10010010,B10010010,B10000010,B10000010,B10000010,B10000010}
#define N     {B01000010,B01100010,B01010010,B01001010,B01001010,B01001010,B01000110,B01000010}
#define O     {B00111100,B01000010,B01000010,B01000010,B01000010,B01000010,B01000010,B00111100}
#define P     {B00111100,B01000010,B01000010,B01000010,B01111100,B01000000,B01000000,B01000000}
#define Q     {B00111100,B01000010,B01000010,B01000010,B01000010,B01000110,B00111110,B00000001}
#define R     {B00111100,B01000010,B01000010,B01000010,B01111100,B01000100,B01000010,B01000010}
#define S     {B00111100,B01000010,B01000000,B01000000,B00111100,B00000010,B01000010,B00111100}
#define T     {B11111110,B00010000,B00010000,B00010000,B00010000,B00010000,B00010000,B00010000}
#define U     {B01000010,B01000010,B01000010,B01000010,B01000010,B01000010,B01000010,B00111100}
#define V     {B01000010,B01000010,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000}
#define W     {B10000010,B10000010,B10000010,B10000010,B10010010,B10010010,B10101010,B01000100}
#define X     {B01000010,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B01000010}
#define Y     {B10000010,B01000100,B00101000,B00010000,B00010000,B00010000,B00010000,B00010000}
#define Z     {B01111110,B00000010,B00000100,B00001000,B00010000,B00100000,B01000000,B01111110}
#define lit_a {B00000000,B00000000,B00000000,B00111000,B01000100,B01000101,B01000101,B00111010}
#define lit_b {B00000000,B00100000,B00100000,B00100000,B00111100,B00100010,B00100010,B00111100}
#define lit_c {B00000000,B00000000,B00000000,B00111100,B01000000,B01000000,B01000000,B00111100}
#define lit_d {B00000000,B00000100,B00000100,B00000100,B00111100,B01000100,B01000100,B00111100}
#define lit_e {B00000000,B00000000,B00111000,B01000100,B01000100,B01111000,B01000000,B00111100}
#define lit_f {B00011000,B00100100,B00100000,B00100000,B01110000,B00100000,B00100000,B00100000}
#define lit_g {B00011100,B00100010,B00100010,B00011110,B00000010,B00000010,B00010010,B00001100}
#define lit_h {B01000000,B01000000,B01000000,B01000000,B01111000,B01000100,B01000100,B01000100}
#define lit_i {B00000000,B00010000,B00000000,B00010000,B00010000,B00010000,B00010000,B00010000}
#define lit_j {B00000000,B00010000,B00000000,B00010000,B00010000,B00010000,B01010000,B00110000}
#define lit_k {B00000000,B00000000,B01001000,B01010000,B01100000,B01100000,B01010000,B01001000}
#define lit_l {B01000000,B01000000,B01000000,B01000000,B01000000,B01000000,B01000000,B01000000}
#define lit_m {B00000000,B00000000,B00110100,B01001010,B01001010,B01001010,B01001010,B01001010}
#define lit_n {B00000000,B00000000,B01111000,B01000100,B01000100,B01000100,B01000100,B01000100}
#define lit_o {B00000000,B00000000,B00000000,B00011100,B00100010,B00100010,B00100010,B00011100}
#define lit_p {B00000000,B00000000,B00011100,B00100010,B00100010,B00111100,B00100000,B00100000}
#define lit_q {B00000000,B00000000,B00111000,B01000100,B01000100,B00111100,B00000100,B00000100}
#define lit_r {B00000000,B00000000,B00111000,B01000000,B01000000,B01000000,B01000000,B01000000}
#define lit_s {B00000000,B00111000,B01000100,B01000000,B00111000,B00000100,B01000100,B00111000}
#define lit_t {B00100000,B00100000,B00100000,B01111000,B00100000,B00100000,B00100010,B00011100}
#define lit_u {B00000000,B00000000,B00000000,B01000100,B01000100,B01000100,B01000100,B00111000}
#define lit_v {B00000000,B00000000,B01000100,B01000100,B01000100,B01000100,B00101000,B00010000}
#define lit_w {B00000000,B00000000,B00000000,B01000100,B01000100,B01010100,B01010100,B00101000}
#define lit_x {B00000000,B00000000,B00000000,B00000000,B00100100,B00011000,B00011000,B00100100}
#define lit_y {B00000000,B01000100,B01000100,B00111100,B00000100,B00000100,B00000100,B00111000}
#define lit_z {B00000000,B00000000,B00000000,B01111100,B00001000,B00010000,B00100000,B01111100}
#define space {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}
#define num_0 {B00111100,B01000110,B01001010,B01001010,B01001010,B01010010,B01100010,B00111100}
#define num_1 {B00001000,B00011000,B00001000,B00001000,B00001000,B00001000,B00001000,B00011100}
#define num_2 {B00111100,B01000010,B00000100,B00001000,B00010000,B00100000,B01000000,B01111110}
#define num_3 {B01111110,B00000010,B00000010,B00011100,B00000010,B00000010,B01000010,B00111100}
#define num_4 {B00000100,B00001100,B00010100,B00100100,B01000100,B01111110,B00000100,B00000100}
#define num_5 {B01111110,B01000000,B01000000,B00111100,B00000010,B00000010,B00000010,B01111100}
#define num_6 {B00111100,B01000000,B01000000,B01111100,B01000010,B01000010,B01000010,B00111100}
#define num_7 {B01111110,B00000010,B00000100,B00001000,B00010000,B00010000,B00010000,B00010000}
#define num_8 {B00111100,B01000010,B01000010,B00111100,B01000010,B01000010,B01000010,B00111100}
#define num_9 {B00111100,B01000010,B01000010,B01000010,B00111110,B00000010,B00000010,B00111100}
#define times {B00000000,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B00000000}
// Signals for shift register, go over al cols, one each time
byte barrido[8] = { B00000001,B00000010,B00000100,B00001000,B00010000,B00100000,B01000000,B10000000 };
const int numPatterns = 15;//this is the number of patterns you want to display
// the patterns order
byte patterns[numPatterns][8]={space,M,A,D,E,space,B,Y,space,A,L,W,A,R,space};
void setup(){
  // this is a commed that makes pins 0-7 outputs(see more on the arduino site)
  DDRD=B11111111;
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
// int loop acts like a delay, it take 8 mSecands to scan all of the rows so int
// loops = 15 is a good time for it
void display_pattern(int loops)
{
   for(x=0;x
   { // loop over the patterns
      for (int z=0;z&lt;8;z++)
      { //scrolls one bite at a time
         for(int t=0;t
         {// the delay we get with loops
            for(y=0;y&lt;8;y++)
            {
               // loops over the array of bytes
               byte temp = patterns[x][y];
               byte temp_2=patterns[x+1][y];
               //writes digital outputs, Z is for how much bites it need to scroll
               PORTD = (temp&lt;&gt;7-z);
               delayMicroseconds(800);// the time every row is one
               PORTD=B00000000;// all pins are low, fixes the ghosting effect
               digitalWrite(latchPin, LOW);
               shiftOut(dataPin, clockPin, LSBFIRST, barrido[y]);
               //return the latch pin high to signal chip that it
               //no longer needs to listen for information
               digitalWrite(latchPin, HIGH);
            }
         }
      }
   }
}
void loop(){
// calls for the display_pattern function and says that int loop = 15
// (if you do more loop the pattern whould scrrol slower).
display_pattern(15);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/matriz-de-diodos-test-3/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Voltimetro para baterias (de airsoft) [Battery Tester]</title>
		<link>http://pushthebutton.es/archivos/voltimetro-para-baterias-de-airsoft-battery-tester</link>
		<comments>http://pushthebutton.es/archivos/voltimetro-para-baterias-de-airsoft-battery-tester#comments</comments>
		<pubDate>Fri, 11 Jun 2010 23:06:59 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/?p=232</guid>
		<description><![CDATA[Lo mejor de esto es el comprender que esa asignatura llamada fundamentos físicos de la informática está sirviendo para algo. Si antes fueron los transistores bipolares, ahora es el &#8220;Divisor de tensión&#8220;. Incomprendido hasta hoy este circuito hace honor a su nombre dividiendo la tensión de entrada dependiendo de los valores de las resistencias: Para [...]]]></description>
			<content:encoded><![CDATA[<div align="justify">Lo mejor de esto es el comprender que esa asignatura llamada fundamentos físicos de la informática está sirviendo para algo. Si antes fueron los transistores bipolares, ahora es el &#8220;<a href="es.wikipedia.org/wiki/Divisor_de_tensión">Divisor de tensión</a>&#8220;. Incomprendido hasta hoy este circuito hace honor a su nombre dividiendo la tensión de entrada dependiendo de los valores de las resistencias:</p>
<div align="center"><a href="http://es.wikipedia.org/wiki/Archivo:Resistive_divider.png"><img alt="Divisor de Tensión" src="http://img809.imageshack.us/img809/1264/resistivedivider.png" title="Divisor de tensión" width="178" height="168" /></a></div>
<p><span id="more-232"></span><br />
Para hallar el valor de salida en relación al de entrada debemos aplicar la siguiente formula:</p>
<div align="center"><img src="http://l.wordpress.com/latex.php?latex=V_%7Bout%7D%3D%5Cfrac%7BR_2%7D%7BR_1%20%2B%20R_2%7D%20V_%7Bin%7D%20&#038;bg=00000&#038;fg=FFFFFF&#038;s=0" title="V_{out}=\frac{R_2}{R_1 + R_2} V_{in} " style="vertical-align:-20%;" class="tex" alt="V_{out}=\frac{R_2}{R_1 + R_2} V_{in} " /></div>
<p>¿Y para uqe nos vale esto? Pues porque el &#8220;<a href="http://es.wikipedia.org/wiki/Conversi%C3%B3n_anal%C3%B3gica-digital">convertidor analógico digital</a>&#8221; que trae Arduino solo acepta hasta 5 voltios, pero si por ejemplo en mi caso queremos utilizar el circuito para comprobar baterías de 8,4 voltios, y puede que también de 9,6 voltios necesitamos reducir el voltaje de entrada para no churruscar nuestra placa de prototipado. Entonces con el divisor de tensión el ADC de arduino ahora acepta hasta 10v con una resolución de 10bits lo que no da una precisión de 9,77 mV. Si quisiéramos baterías mas grandes deberíamos añadir resistencias al divisor de tensión para que en Vout cuando Vin es máximo solo hubiese 5 voltios. No vale poner una resistencia muy grande, necesitamos varias, ya que en mi ejemplo cada resistencia tiene una caída de potencial del 50%. Si po ejemplo quisiéramos medir baterías de hasta 20 voltios, necesitaríamos dividir por 4 la tensión, y lo conseguríamos conectando en vez de dos resistencias, cuatro. Y conectaríamos Vout entre la penúltima y la última resistencia. Como las 4 resistencias serán iguales, pues cada una tendrá una caída de potencial de 1/4 del voltaje de entrada, lo que nos daría como máximo 5 voltios.<br />
<br />
Este es el circuito. Donde el simbolo del voltimetro es la placa arduino usando cualquiera de sus pines de entrada analogicos (A0~A5). La batería de 9 voltios es la que queremos probar. Las resistencias según pueden ser de entre 1K y 10K, yo uso un valor intermedio de 4,7K.<br />
<a href="http://img824.imageshack.us/img824/6564/batterytester.png"><img alt="" src="http://img824.imageshack.us/img824/6564/batterytester.png" title="Circuito battery test" class="aligncenter" width="330" height="425" /></a><br />
<br />
<strong>El código</strong><br />
Es muy sencillo, creo que no hace falta explicarlo.</p>
<pre name="code" class="c">
int sensorPin = 3;
int sensorValue = 0;
float voltaje = 0.0;

void setup()
{
  Serial.begin(9600);
  Serial.println("Battery Tester");
} 

void loop()
{
  sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);
  voltaje = ((5*float(sensorValue))/1024);
  Serial.print("Divisor de Tension (Vout): ");
  Serial.println(voltaje,3);
  Serial.print("Voltaje estimado (Vin): ");
  Serial.println(voltaje*2,3);
  delay(1250);

}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/voltimetro-para-baterias-de-airsoft-battery-tester/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eagle + POV RAY =</title>
		<link>http://pushthebutton.es/archivos/eagle-pov-ray</link>
		<comments>http://pushthebutton.es/archivos/eagle-pov-ray#comments</comments>
		<pubDate>Tue, 08 Jun 2010 22:57:07 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ATmega]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[EAGLE]]></category>
		<category><![CDATA[ISP]]></category>
		<category><![CDATA[POV RAY]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/archivos/eagle-pov-ray</guid>
		<description><![CDATA[Ahora me ha dado por buscar un programador de micros ATmega. He visto dos opciones, el USBasp o desde el propio arduino. Me gustaba bastante el USBasp de Olek ya que es como un pendrive pero es casi todo SMD y para mis manos inexpertas no es viable. A si que me decido por la [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://img80.imageshack.us/img80/5906/isp2.png"><img class="aligncenter" title="ISP Shield" src="http://img80.imageshack.us/img80/5906/isp2.png" alt="ISP Shield" width="600" /></a></p>
<div align="justify">Ahora me ha dado por buscar un programador de micros ATmega. He visto dos opciones, el <a href="http://www.fischl.de/usbasp/">USBasp</a> o desde el propio <a href="http://drug123.org.ua/mega-isp-shield/">arduino</a>. Me gustaba bastante el <a href="http://olek.tk/en/show_image.php?img=prj_usbasp.jpg">USBasp de Olek</a> ya que es como un pendrive pero es casi todo <a href="http://es.wikipedia.org/wiki/Tecnolog%C3%ADa_de_montaje_superficial">SMD</a> y para mis manos inexpertas no es viable. A si que me decido por la placa <a href="http://en.wikipedia.org/wiki/In-system_programming">ISP</a> para arduino. Viendo lo sencilla que es se me a ocurrido modificarla para que porte un zócalo de 28 pines para no tener que usar cables a la hora de programar, aunque no he eliminado ese conector. Este es el resultado de tener que estar estudiando, que haces de todo menos estudiar. El día que tenga que preparar unas oposiciones seguro que construyo un avión o una central nuclear. A ver si después de exámenes lo llevo a la realidad y vemos si <a href="http://www.nongnu.org/avrdude/">AVRDUDE</a> puede programar a traves de eso.</div>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/eagle-pov-ray/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Se aburre, se cansa, y te dice a ver si te pudres!</title>
		<link>http://pushthebutton.es/archivos/se-aburre-se-cansa-y-te-dice-a-ver-si-te-pudres</link>
		<comments>http://pushthebutton.es/archivos/se-aburre-se-cansa-y-te-dice-a-ver-si-te-pudres#comments</comments>
		<pubDate>Tue, 14 Oct 2008 19:45:46 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Off Topic]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/?p=106</guid>
		<description><![CDATA[Exceptuando lo de LiveJournal, ya que yo escribo mi propio blog, me siento identificado con este comic encontrado en xkcd.com. Tiene muchos, y buenos, pero solo algunos soy capaz de entenderlos. Otro muy bueno es este, ademas romantico y friki a la vez. Esto de que te cansas de internet ya me paso una vez, [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 458px"><a href="http://xkcd.com/77/"><img title="Harto con Internet" src="http://imgs.xkcd.com/comics/bored_with_the_internet.jpg" alt="xkcd.com - Harto con Internet" width="448" height="559" /></a><p class="wp-caption-text">xkcd.com - Harto con Internet</p></div>
<p>Exceptuando lo de LiveJournal, ya que yo escribo mi propio blog, me siento identificado con este comic encontrado en xkcd.com. Tiene muchos, y buenos, pero solo algunos soy capaz de entenderlos. Otro muy bueno es <a title="Momento Angular" href="http://xkcd.com/162/" target="_blank">este</a>, ademas romantico y friki a la vez.</p>
<p>Esto de que te cansas de internet ya me paso una vez, y ahora otra, normalmente viene dado por la falta de creatividad, ya que no sabes nada nuevo que hacer, que proyectos emprender o como es en este caso, que lo que quieres hacer eres incapaz por tu falta de conocimientos, o tu poca habilidad para programar en C un programa para arduino que controle un <a title="Tutorial LCD y Arduino" href="http://arduino.cc/en/Tutorial/LCDLibrary" target="_blank">LCD de 16&#215;2</a> caracteres y un <a title="Tutorial Keypad y arduino" href="http://www.arduino.cc/playground/Main/KeypadTutorial" target="_blank">teclado 4&#215;4</a>. Haber si cojo fuerzas y consigo hacerlo funcionar (aunque 2º de bachillerato no me da muchas fuerzas, tampoco creo que tenga cuando llegue a la carrera o tenga que trabajar).</p>
<p><strong>Purely Booooooring</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/se-aburre-se-cansa-y-te-dice-a-ver-si-te-pudres/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matrices de Diodos</title>
		<link>http://pushthebutton.es/archivos/matrices-de-diodos</link>
		<comments>http://pushthebutton.es/archivos/matrices-de-diodos#comments</comments>
		<pubDate>Sat, 19 Jul 2008 19:50:12 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Scripts y Programacion]]></category>
		<category><![CDATA[diodos]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[leds]]></category>
		<category><![CDATA[matrices]]></category>
		<category><![CDATA[matrix]]></category>
		<category><![CDATA[matriz]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/?p=57</guid>
		<description><![CDATA[Ya por fin conseguí hacerme con unas cuantas matrices de LEDs y así me ahorro soldar centenares de leds. Por falta de previsión no me he hecho con un convertidor serie paralelo (shift register) y no he podido probar como mostrar caracteres en una matriz de 8&#215;8 como la de la fotografía, a sí que [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://pushthebutton.es/images/matriz.png" border="0" alt="Matriz Luciendo" /></p>
<p>Ya por fin conseguí hacerme con unas cuantas matrices de LEDs y así me ahorro soldar centenares de leds.</p>
<p>Por falta de previsión no me he hecho con un convertidor serie paralelo (shift register) y no he podido probar como mostrar caracteres en una matriz de 8&#215;8 como la de la fotografía, a sí que me he tenido que conformar con  hacer un pequeño efecto de cortinilla con un modulo para ir probando. Es bastante sencillito.  Tras localizar cada pin (que es bastante laborioso y no he encontrado un datasheet decente) conectamos los negativos al GND de la placa arduino, y los 8 positivos a 8 entradas de la placa arduino. Y después con un bucle encendemos las columnas que queremos&#8230;</p>
<p><span id="more-57"></span>Este es el resultado:</p>
<p><embed src="http://www.metacafe.com/fplayer/1507841/.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"> </embed><br /><font size = 1><a href="http://www.metacafe.com/watch/1507841//">Ir a MetaCafe</a></font></p>
<p>Y aquí otra forma:<br />
<embed src="http://www.metacafe.com/fplayer/1512694/.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"> </embed><br /><font size = 1><a href="http://www.metacafe.com/watch/1512694//">Ir a MetaCafe</a></font></p>
<p>El esquema de conexión es el siguiente:<br />
<img src="http://pushthebutton.es/images/matriz-esquema.png" border="0" alt="Esquema de conexion" /></p>
<p>Es una putada que los positivos no estén en un lado y los negativos en otro, sería bastante mas fácil.</p>
<p>Ahora abrimos el IDE de arduino y pegamos el codigo:<br />
<img src="http://pushthebutton.es/images/matriz-codigo.png" border="0" alt="Arduino IDE" /></p>
<p>Ahora dependiendo del efecto que queramos tenemos un bucle o dos dentro del &#8220;void loop&#8221;:<br />
El mas simple es el que esta dando vueltas de un lado a otro (se encienden las columnas por este orden: 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8&#8230;):<br />
<code><br />
void setup() {<br />
  pinMode(2, OUTPUT);<br />
  pinMode(3, OUTPUT);<br />
  pinMode(4, OUTPUT);<br />
  pinMode(5, OUTPUT);<br />
  pinMode(6, OUTPUT);<br />
  pinMode(7, OUTPUT);<br />
  pinMode(8, OUTPUT);<br />
  pinMode(9, OUTPUT);<br />
}</p>
<p>void loop() {<br />
  for (int i=2; i <= 9; i++){<br />
    digitalWrite(i, HIGH); //Encendemos<br />
    delay(100); //Esperamos<br />
    digitalWrite(i, LOW); //Apagamos y vamos a la siguiente<br />
  }<br />
}</code></p>
<p>Pero tambien podemos hacer uno que valla de un lado al otro (las columnas se encienden 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1...):<br />
<code>void setup() {<br />
  pinMode(2, OUTPUT);<br />
  pinMode(3, OUTPUT);<br />
  pinMode(4, OUTPUT);<br />
  pinMode(5, OUTPUT);<br />
  pinMode(6, OUTPUT);<br />
  pinMode(7, OUTPUT);<br />
  pinMode(8, OUTPUT);<br />
  pinMode(9, OUTPUT);<br />
}</p>
<p>void loop() {<br />
  for (int i=2; i <= 9; i++){<br />
    digitalWrite(i, HIGH); //<br />
    delay(100);<br />
    digitalWrite(i, LOW); //<br />
  }<br />
  for (int i=9; i >= 2; i--){<br />
    digitalWrite(i, HIGH); //<br />
    delay(100);<br />
    digitalWrite(i, LOW); //<br />
  }<br />
}</code></p>
<p>Pero esto solo son dos ejemplos, deja volar la imaginación, experimenta con el código y observa que obtienes!</p>
<p>Si buscáis en internet, encontrareis por ejemplo muy buenos <a href="http://www.instructables.com">instructables</a> como <a href="http://www.instructables.com/id/SPF2HSWFHAVXW7Z/">este</a> o como <a href="http://www.instructables.com/id/USB-LED-scrolling-marquee-sign/">este otro</a></p>
<p>Bueno y una vez tengamos varios "shift registers" habrá que avanzar algo mas no?</p>
<p>PD: En un <a href="http://pushthebutton.es/archivos/puzzlemation-y-matrices-de-diodos/">articulo</a> anterior tenéis una mas información sobre esto.</p>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/matrices-de-diodos/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Arduino conectado a una PDA</title>
		<link>http://pushthebutton.es/archivos/arduino-conectado-a-una-pda</link>
		<comments>http://pushthebutton.es/archivos/arduino-conectado-a-una-pda#comments</comments>
		<pubDate>Sat, 03 Nov 2007 16:50:16 +0000</pubDate>
		<dc:creator>Alwar</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronica y Hardware]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[electronica]]></category>
		<category><![CDATA[pda]]></category>
		<category><![CDATA[pocket pc]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://pushthebutton.es/archivos/arduino-conectado-a-una-pda/</guid>
		<description><![CDATA[No se como se me llego a ocurrir&#8230; supongo que seria para aprovechar el puerto usb serie de la pda. De momento tampoco le veo utilidad, bueno si, la de usar una pda como consola de arduino, y enviarle comandos desde la pantalla tactil El caso es que se puede. Al principio pensaba que no, [...]]]></description>
			<content:encoded><![CDATA[<p>No se como se me llego a ocurrir&#8230; supongo que seria para aprovechar el puerto usb serie de la pda. De momento tampoco le veo utilidad, bueno si, la de usar una pda como consola de arduino, y enviarle comandos desde la pantalla tactil <img src='http://pushthebutton.es/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>El caso es que se puede. Al principio pensaba que no, porque la pda no tiene una conexion rs232 que nos permita enviar datos por un puerto serie, pero tiene un conector usb&#8230; a si que me puse a ver como conectaban arduino al ordenador y llegué a la pagina de <a href="http://www.ftdichip.com/">FTDI</a>, un chip que utiliza arduino en su version USB para poder comunicarse por el usb y no usar el rs232&#8230; viendo la pagina de drivers veo que hay para todas las plataformas, incluida esta Windows CE 4.2 y 5.0, es verdad que la pda usa Windows Mobile 5, pero espero que funcione el driver (por eso de la compatibilidad con versiones anteriores&#8230;. 8-))</p>
<p>A ver si esta noche puedo programar ya, y pruebo el driver&#8230; y si funciona pues tendre que buscar un cable USB de miniUSB a USB tipo B, ???</p>
]]></content:encoded>
			<wfw:commentRss>http://pushthebutton.es/archivos/arduino-conectado-a-una-pda/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

