<?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>pesadillo.com &#187; Arduino</title>
	<atom:link href="http://www.pesadillo.com/pesadillo/?feed=rss2&#038;tag=arduino" rel="self" type="application/rss+xml" />
	<link>http://www.pesadillo.com/pesadillo</link>
	<description>&#34;pesadillo&#34; en la RED</description>
	<lastBuildDate>Thu, 07 Jul 2022 12:29:34 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Cotrol IR Robosapien. Hackeando un Robosapiens Version 1</title>
		<link>http://www.pesadillo.com/pesadillo/?p=11092</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=11092#comments</comments>
		<pubDate>Thu, 09 May 2019 22:36:04 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Robótica]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=11092</guid>
		<description><![CDATA[Después de haberme pillado mi primer juguete robot para estudiarlo, un Robosapiens de segunda mano por wallapop. Este me llegó con un defecto inesperado. el mando no funcionaba!. La idea inicial era pasárselo a peque de la casa y estudiarlo para preparar un clon o similar. Al final, se ha convertido en un reto para  &#8220;devolverle vida&#8221;. Tras visitar cientos [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/robosapiesnIRv1.png"><img class="aligncenter size-full wp-image-11096" alt="robosapiesnIRv1" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/robosapiesnIRv1.png" width="487" height="528" /></a></p>
<p>Después de haberme pillado mi primer juguete robot para estudiarlo, un Robosapiens de segunda mano por wallapop. Este me llegó con un defecto inesperado. el mando no funcionaba!.</p>
<p>La idea inicial era pasárselo a peque de la casa y estudiarlo para preparar un clon o similar. Al final, se ha convertido en un reto para  &#8220;devolverle vida&#8221;.</p>
<p>Tras visitar cientos de webs sobre el robot robosapiens, en donde apenas había contenido, y los  artículos estaban a medio terminar en su explicación de como hackear Robosapiens. He recopilado información suficiente para lograr el primer objetivo: Controlar el robot sin entrar a tocar la electrónica.</p>
<p>Esto pasa por entender el funcionamiento del mando IR e intentar reproducir su funcionamiento.</p>
<p>Hay un truco brillante para controlar estos modelos (V1)  <a href="http://playground.arduino.cc/Main/RoboSapienIR">http://playground.arduino.cc/Main/RoboSapienIR</a>  pero también significa que tienes que arruinar tu soldador haciendo un agujero en el cuerpo del robot para colgarle una mochila.</p>
<p>Como referencia ha de tomarse el trabajo de  Ken Shirriff <a href="http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html">http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html</a> pero este está pensado para la transmisión de códigos IR para televisores no para los robots, aún que las ultimas librerías ya incluyen el nombre &#8220;RobotIrRemote&#8221;.</p>
<p>Modificando los ficheros de las librerías de la versión 1.0.0 del IRRemote en cuestión, en la página <a href="https://cae2100.wordpress.com/2014/01/15/robosapienwowwee-ir-arduino-library/">https://cae2100.wordpress.com/2014/01/15/robosapienwowwee-ir-arduino-library/</a> consiguieron crear un comando específico (irsend.sendRSV1) para el control del robot a través del Arduino (Version 1, 2 y resto de robots sapiens).</p>
<p>Este comando aparece en algunas páginas, pero el código suministrado siempre estaba incompleto, no funcionaba o simplemente no explicaban que debía convertirse el código hexadecimal a decimal, antes de transmitirlo.</p>
<p><span><span>En su primera versión (modificación) solo podían manejar el envío de códigos de 8 bits (un byte) (irsend.sendRSV1), pero los productos V2 y otros wowwee usan códigos de 12 bits, por lo que desarrollaron el comando para manejo de las siguientes versiones (irsend.sendRSV2).  </span><span>Los códigos nuevos robots wowwee IR (infrarrojos) utilizan el mismo tipo de datos que se enviaban antes, los mismos códigos de 8 bits, pero utilizan un código identificador de 4 bits que hace que ese control remoto específico solo funcione en ese robot.</span></span></p>
<p><span>Aquí hay una lista de todos los comandos para un grupo de robots wowwee:</span></p>
<p><span>Códigos de Robosapien V1:</span></p>
<p><a href="http://www.aibohack.com/robosap/ir_codes.htm" rel="nofollow">http://www.aibohack.com/robosap/ir_codes.htm</a></p>
<p><span>Robosapien V2 y otros robots wowwee:</span></p>
<p><a href="http://www.aibohack.com/robosap/ir_codes_v2.htm" rel="nofollow">http://www.aibohack.com/robosap/ir_codes_v2.htm</a></p>
<p><span>En la página V2, el 3xx es el 0011, también conocido como el código de identificación del robot. Para cambiar a otro robot, simplemente cambia el 3 a cualquier robot que esté tratando de controlar.</span></p>
<p>Para reproducir el proyecto, puedes descargar ya la librería modificada aquí:</p>
<p><a href="https://drive.google.com/file/d/0BwYG1PFb3ZByaTAxMlJZS2pIM1E/edit?usp=sharing" rel="nofollow">https://drive.google.com/file/d/0BwYG1PFb3ZByaTAxMlJZS2pIM1E/edit?usp=sharing</a></p>
<p>Enlace recogido  de la página <a href="https://cae2100.wordpress.com/2014/01/15/robosapienwowwee-ir-arduino-library/">https://cae2100.wordpress.com/2014/01/15/robosapienwowwee-ir-arduino-library/</a></p>
<p>También tienes una copia en el repositorio: <a href="https://github.com/pesadillo/robosapiensv1/">https://github.com/pesadillo/robosapiensv1/</a></p>
<p>Una vez instalada en las librerías, es momento del código (Probado en Arduino 1.8  con Arduino UNO):</p>
<pre class="brush: php; title: ; notranslate">
/*
 * CONTROL REMOTO DESDE PC PARA ROBOSAPIENS V1
 * Version  del codigo 1.0
 *
 * Based on IRSend demo from ken Shirriffs library - this sends simple commands to a RoboSapien V1 using and IR Transmitter with Arduino
 * Based on https://daverobertson63.wordpress.com/2013/05/05/updated-robosapien-ir-control-arduino/
 *
 * La historia:
 * Despues de haber conseguido por wallapop un Robosapiens v 1.0, me encontre que su mando estaba estropeado. Trasteando por Internet, me he encontrado
 * cientos de ejemplos con códigos a medias, o sin explicar completamente. Me decidí a entrar de lleno en la programación y control de este robot
 * tan facil a asequible de conseguir ahora y facilitar el acceso a la documentación a todos los seguidores de la web www.pesadillo.com
 *
 *
 * De interés:
 * La libreria a utilizar es IRRemote V 1.0.0 (modificada) que he incluido desde el apartado Programa/Incluir Libreria/Añadir libreria ZIP
 * Esta libreria puedes descargarla desde https://drive.google.com/file/d/0BwYG1PFb3ZByaTAxMlJZS2pIM1E/edit?usp=sharing
 * que he encontrado en la pagina https://cae2100.wordpress.com/2014/01/15/robosapienwowwee-ir-arduino-library/ y dedonde he conseguido parte del codigo
 * Si ya tienes una libreria mas actualizada instalada, puedes escoger la version activa en el apartado Programa/Incluir Libreria/Gestionar Libreria/IRRemote
 * Selecciona la version 1.0.0 y funcionará a la primera
 *
 * The circuit:
 * IR LED - LED emisor en pin 3 controlado por 2n2222A con sus respectivas resistencias.
 *
 * Revisa el articulo publicado en http://www.pesadillo.com/pesadillo/?p=11092
 *
 * created 09/05/2019
 * by pesadillo &lt;http://www.pesadillo.com&gt;
 * This example code is in the public domain.
*/

/*
 * Lista de comandos disponibles:
 * Fuente : https://daverobertson63.wordpress.com/2013/05/05/updated-robosapien-ir-control-arduino/
 * Botón   Color mando   Función                             Pinzas   Codigo arduino
 * 12      rojo          Girar a la derecha                    1           128
 * 1       rojo          Brazo derecho arriba                  2           129
 * 4       rojo          Brazo derecho hacia fuera             2           130
 * 5       rojo          Inclinar cuerpo derecho               1           131
 * 2       rojo          Brazo derecho abajo                   2           132
 * 3       rojo          Brazo derecho encogido                2           133
 * 11      rojo          Caminar hacia adelante                2           134
 * 15      rojo          Caminar hacia atrás                   2           135
 * 14      rojo          Girar a la izquierda                  1           136
 * 6       rojo          Brazo izquierdo arriba                2           137
 * 9       rojo          Brazo izquierdo hacia fuera           2           138
 * 10      rojo          Inclinar cuerpo derecho               1           139
 * 7       rojo          Brazo izquierdo hacia abajo           2           140
 * 8       rojo          Brazo izquierdo encogido              2           141
 * 13      rojo          Detener                               1           142
 * 19      rojo          Programa de Comando Maestro           1           144
 * 20      rojo          Programa de juego                     1           145
 * 16      rojo          Programa de sensor derecho            1           146
 * 18      rojo          Programa de sensor izquierdo          1           147
 * 17      rojo          Programa de sensor sonoro             1           148
 * 12      Verde         Paso a la derecha                     1           160
 * 1       Verde         Golpe derecho                         1           161
 * 4       Verde         Lanzamiento diestro                   1           162
 * 5       Verde         Dormir                                1           163
 * 2       Verde         Recolección de la mano derecha        1           164
 * 3       Verde         Inclinarse hacia atrás                1           165
 * 11      Verde         Paso adelante                         1           166
 * 15      Verde         Paso hacia atras                      1           167
 * 14      Verde         Paso a la izquierda                   1           168
 * 6       Verde         Golpe izquierdo                       1           169
 * 9       Verde         Tiro de la mano izquierda             1           170
 * 10      Verde         Escucha                               1           171
 * 7       Verde         Recogida de la mano izquierda         1           172
 * 8       Verde         Inclinación hacia delante             1           173
 * 13      Verde         Reiniciar                             1           174
 * 19      Verde         Programa de Comando Maestro           1           176
 * 20      Verde         Despierta                             1           177
 * 16      Verde         Programa de sensor derecho Ejecutar   1           178
 * 18      Verde         Programa de Sensor Izquierdo Ejecutar 1           179
 * 17      Verde         Programa de sensor sonoro ejecutado   1           180
 * 12      Naranja       Golpe de mano derecha 3               1           192
 * 1       Naranja       Barrido de la mano derecha            1           193
 * 4       Naranja       Eructar                               1           194
 * 5       Naranja       LLave de la mano derecha              1           195
 * 2       Naranja       Alta 5                                1           196
 * 3       Naranja       LLave de la mano derecha              1           197
 * 11      Naranja       Excavadora                            1           198
 * 15      Naranja       Ups                                   1           199
 * 14      Naranja       Golpe de mano izquierda 3             1           200
 * 6       Naranja       Barrido de la mano izquierda          1           201
 * 9       Naranja       Silbar                                1           202
 * 10      Naranja       LLave de la mano izquierda            1           203
 * 7       Naranja       Replicar                              1           204
 * 8       Naranja       LLave de la mano izquierda            1           205
 * 13      Naranja       Rugido                                1           206
 * 19      Naranja       Todo demo                             1           208
 * 20      Naranja       Apagado                               1           209
 * 16      Naranja       Demo 1                                1           210
 * 18      Naranja       Demo 2                                1           211
 * 17      Naranja       Demostración de baile                 1           212
*/

#include
IRsend irsend;        // pin 3 es IR LED salida
int data;             // Variable de almace de datos de la lectura serie
void setup()
{
Serial.begin(9600);
irsend.sendRSV1(142);// Envio sonido test de inicio
}
void loop() {
  while (Serial.available()&gt; 0) {
    data = Serial.parseFloat(); //Capturo valor DECIMAL introducido
    Serial.println(data); // Veo datos enviados en monitor serie
    irsend.sendRSV1(data); //Envio datos al pin 3

}
}
</pre>
<p>Un detalle tonto que me hizo perder algo de tiempo en la puesta en marcha. Acuérdate de que el infrarrojo, esté siempre por encima de la altura de la cabeza del robot, si no, el receptor no recibirá la orden.</p>
<p>El circuito:</p>
<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/LEDir1led.jpg"><img class="aligncenter size-full wp-image-11107" alt="LEDir1led" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/LEDir1led.jpg" width="446" height="386" /></a></p>
<p>Que hace el código?</p>
<p>Los comandos enviados a través del terminal serie del software Arduino, son enviados al Robosapiens a través del diodo IR que tiene una resistencia de 100 Ohm como medida de protección.</p>
<p>Más detalles:</p>
<p>Como se conectan diodos IR emisores y receptores:</p>
<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/ir_sensor_schematic.png"><img class="aligncenter size-full wp-image-11104" alt="ir_sensor_schematic" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/ir_sensor_schematic.png" width="800" height="305" /></a></p>
<p>Como identificar ánodo y cátodo del diodo:</p>
<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/IR_LED_Set_small.png"><img class="aligncenter size-full wp-image-11105" alt="IR_LED_Set_small" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/IR_LED_Set_small.png" width="236" height="337" /></a></p>
<p>Fijarse en la musca del encapsulado o que el ánodo tiene la patilla mas larga (en componentes nuevos).</p>
<p>Como ganar mas potencia con más leds:<a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/LEDir2leds.jpg"><img class="aligncenter size-full wp-image-11108" alt="LEDir2leds" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2019/05/LEDir2leds.jpg" width="638" height="386" /></a></p>
<p>En este caso, para aumentar la potencia de luz del diodo, en lugar de conectar directamente el diodo a la patilla 3, alimentamos a u transistor 2N2222A que es el que controlará, aplicando tensión directamente al diodo a través de su resistencia.</p>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/NC-9QShaIiw?rel=0&amp;controls=0&amp;showinfo=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=11092</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (19)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10959</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10959#comments</comments>
		<pubDate>Sun, 04 Oct 2015 19:30:26 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10959</guid>
		<description><![CDATA[Arduino Robot Ps A la conquista del Bluetooth (2) &#8230; Ayer planteamos el esquema y este es el resultado: Una vez localizada la aplicación, y tras averiguar los comandos que envía la aplicación al modulo. Modificamos nuestro programa&#8230; &#160; y se lo enviamos a la placa Arduino&#8230; &#160; Retocamos el código y evitamos que el robot ande continuamente. De la siguiente [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p><strong>A la conquista del Bluetooth (2) &#8230;</strong></p>
<p>Ayer planteamos el esquema y este es el resultado:</p>
<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/0Image000032.jpg"><img class="aligncenter size-full wp-image-10963" alt="0Image00003" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/0Image000032.jpg" width="600" height="450" /></a> <a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/0Image000021.jpg"><img class="aligncenter size-full wp-image-10964" alt="0Image00002" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/0Image000021.jpg" width="600" height="450" /></a></p>
<p>Una vez localizada la aplicación, y tras averiguar los comandos que envía la aplicación al modulo. Modificamos nuestro programa&#8230;</p>
<p>&nbsp;</p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 27 Agosto 2015

http://www.pesadillo.com/

  Experimento... Implementamos un sistema de control remoto por Bluetooth. En lugar de que el
  robot realice una tarea programada, controlaremos sus movimientos.
  SEGUNDA PARTE: Mediante comunicacion Bluethooth comunicaremos un telefono con el Arduino Robot Ps
  Utilizaremos la aplicacion de  http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
  
 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2


#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4


int speakerPin = 13;  // declaro pin para speaker

#include &lt;SoftwareSerial.h&gt;

#define RxD 10
#define TxD 11
#define RST 5
//#define KEY 4

SoftwareSerial BTSerial(RxD, TxD);

//char Bluetooth; //crear variable que almacena los datos recibidos por el puerto serie
int inputString=0; //definimos 0 el valor de texto recibido por BT
 

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

   
  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   
   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT); 

  pinMode(RST, OUTPUT);
 // pinMode(KEY, OUTPUT);
  digitalWrite(RST, LOW);
  //digitalWrite(KEY, HIGH);
  digitalWrite(RST, HIGH);
  
  delay(500);
  
  BTSerial.flush();
  delay(500);
  BTSerial.begin(9600);
  BTSerial.begin(9600);//Habilitamos puerto BT a la velocidad de 9600
}

//pitidos (subproceso)
void pitido(char pitidos_num)
{
// el sibproceso pitido(3) Haría 3 pitidos)  
   for (int pip=0; pip&lt;pitidos_num; pip++)
     {
     for (int i=300; i&gt;0; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(200);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(200); 
        
     }
        delay (50);  
     }
}

// Antes de nada, obtenemos la lista de comandos de la aplicacion para manejar el robot
//Programa para control con el telefono: http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
// La nuestra utiliza los siguientes caracteres:
//A = Arriba
//B = Abajo
//C = Derecha
//D = Izquierda
//E = Stop
//F = Giro 360
//G = Giro -360

//Empieza el ciclo
void loop()
{
  
  if (BTSerial.available()){ //si hay datos en el BT
   /* COMENTAMOS ESTE TEXTO QUE NO UTILIZAMOS while(BTSerial.available())
    {
      char inChar = BTSerial.read(); //lee la entrada de datos caracter por caracter
      inputString += inChar;        //compone la cadena como la recibe por el puerto serie
      
    }
   BTSerial.println(inputString); //'Imprimimos la cadena de texto almacenada en el puerto en la variable*/
   inputString=BTSerial.read(); //almacenamos el valor del texto enviado
   
   
  
  //delay (50);
   // while (Serial.available() &gt; 0)  
   // { Bluetooth = Serial.read() ; }      // borrar buffer (datos almacenados) del puerto serie
   

  // avance
  if (inputString=='A') //En caso de recibir
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH); 
  
  }

  //atras
  if (inputString=='B')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW); 
   
  } 

     //giro Derecha  
  if (inputString=='C')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (50); //giramos durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
  //giro Izquierda
  if (inputString=='D')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (50); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
 
  
  //para
  if (inputString=='E')
  {
   
         // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
   pitido(2);
  } 
 //giro derecha 360
  if (inputString=='F')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (490); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
  
       //giro izquierda 360  
  if (inputString=='G')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (490); 
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
 
   

   
  }
 //inputString = &quot;&quot;;//Poner vaciar variable
}//fin del ciclo del programa

</pre>
<p>y se lo enviamos a la placa Arduino&#8230;</p>
<p>&nbsp;<br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/3VtM4lN2A2Q?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe></p>
<p>Retocamos el código y evitamos que el robot ande continuamente. De la siguiente forma, se controlará mejor el movimiento:</p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 27 Agosto 2015

http://www.pesadillo.com/

  Experimento... Implementamos un sistema de control remoto por Bluetooth. En lugar de que el
  robot realice una tarea programada, controlaremos sus movimientos.
  SEGUNDA PARTE: Mediante comunicacion Bluethooth comunicaremos un telefono con el Arduino Robot Ps
  Utilizaremos la aplicacion de  http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
  En este codigo evitamos que se mueva continuamente y mandamos ordenes cortas para mejor control.
  
 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2


#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4


int speakerPin = 13;  // declaro pin para speaker

#include &lt;SoftwareSerial.h&gt;

#define RxD 10
#define TxD 11
#define RST 5
//#define KEY 4

SoftwareSerial BTSerial(RxD, TxD);

//char Bluetooth; //crear variable que almacena los datos recibidos por el puerto serie
int inputString=0; //definimos 0 el valor de texto recibido por BT
 

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

   
  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   
   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT); 

  pinMode(RST, OUTPUT);
 // pinMode(KEY, OUTPUT);
  digitalWrite(RST, LOW);
  //digitalWrite(KEY, HIGH);
  digitalWrite(RST, HIGH);
  
  delay(500);
  
  BTSerial.flush();
  delay(500);
  BTSerial.begin(9600);
  BTSerial.begin(9600);//Habilitamos puerto BT a la velocidad de 9600
}

//pitidos (subproceso)
void pitido(char pitidos_num)
{
// el sibproceso pitido(3) Haría 3 pitidos)  
   for (int pip=0; pip&lt;pitidos_num; pip++)
     {
     for (int i=300; i&gt;0; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(200);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(200); 
        
     }
        delay (50);  
     }
}

// Antes de nada, obtenemos la lista de comandos de la aplicacion para manejar el robot
//Programa para control con el telefono: http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
// La nuestra utiliza los siguientes caracteres:
//A = Arriba
//B = Abajo
//C = Derecha
//D = Izquierda
//E = Stop
//F = Giro 360
//G = Giro -360

//Empieza el ciclo
void loop()
{
  
  if (BTSerial.available()){ //si hay datos en el BT
   /*while(BTSerial.available())
    {
      char inChar = BTSerial.read(); //lee la entrada de datos caracter por caracter
      inputString += inChar;        //compone la cadena como la recibe por el puerto serie
      
    }
   BTSerial.println(inputString); //'Imprimimos la cadena de texto almacenada en el puerto en la variable*/
   inputString=BTSerial.read(); //almacenamos el valor del texto enviado
   
   
  
  //delay (50);
   // while (Serial.available() &gt; 0)  
   // { Bluetooth = Serial.read() ; }      // borrar buffer (datos almacenados) del puerto serie
   

  // avance
  if (inputString=='A') //En caso de recibir
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH); 
     delay (300); //durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  }

  //atras
  if (inputString=='B')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW); 
      delay (300); //durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 

     //giro Derecha  
  if (inputString=='C')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (50); //giramos durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
  //giro Izquierda
  if (inputString=='D')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (50); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
 
  
  //para
  if (inputString=='E')
  {
   
         // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
   pitido(2);
  } 
 //giro derecha 360
  if (inputString=='F')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (490); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
  
       //giro izquierda 360  
  if (inputString=='G')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (490); 
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
 
   

   
  }
 //inputString = &quot;&quot;;//Poner vaciar variable
}//fin del ciclo del programa

</pre>
<p>Y&#8230; He aquí el resultado:</p>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/nf8n0aFOOpw?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe></p>
<p>Un nuevo Juguete para los peques de la casa&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10959</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (20)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10968</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10968#comments</comments>
		<pubDate>Sun, 20 Sep 2015 19:37:48 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10968</guid>
		<description><![CDATA[Arduino Robot Ps Nuestro proyecto de control Bluetooth terminado &#8230; Como hemos visto a lo largo de este tutorial, hemos pasado de programar movimientos predefinidos a lograr un control remoto sobre nuestro pequeño robot. Todavía tenemos mucho juego por delante y ahora es el momento de jugar&#8230; Implementamos accesorios a la estructura y nos ponemos a inventar juegos, por ejemplo coger [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p><strong>Nuestro proyecto de control Bluetooth terminado &#8230;</strong></p>
<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/0Image000032.jpg"><img class="aligncenter size-full wp-image-10963" alt="0Image00003" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/0Image000032.jpg" width="600" height="450" /></a></p>
<p>Como hemos visto a lo largo de este tutorial, hemos pasado de programar movimientos predefinidos a lograr un control remoto sobre nuestro pequeño robot. Todavía tenemos mucho juego por delante y ahora es el momento de jugar&#8230;</p>
<p>Implementamos accesorios a la estructura y nos ponemos a inventar juegos, por ejemplo coger un objeto y llevarlo de vuelta.</p>
<p><iframe src="https://www.youtube.com/embed/tV7xER0u4QU?rel=0&amp;showinfo=0" height="315" width="560" allowfullscreen="" frameborder="0"></iframe></p>
<p>Estoy estudiando la tercera modificación, que será implementar unos sensores que convertirán nuestro pequeño robot en un seguidor de lineas. A la espera de recibir los componentes, no me queda otra que seguir jugando <img src='http://www.pesadillo.com/pesadillo/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> . Las entradas correspondientes se añadirá después de esta para agrupar todo el curso.</p>
<p>Un saludo. Muchas gracias a los que están ayudando a mantener con sus donativos los gastos del nuevo servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10968</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (18)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10947</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10947#comments</comments>
		<pubDate>Fri, 18 Sep 2015 17:59:44 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10947</guid>
		<description><![CDATA[Arduino Robot Ps A la conquista del Bluetooth&#8230; Después de 18 días de trasteo 10 minutos diarios con el módulo Arduino UNO, podemos decir que &#8220;tenemos todo controlado&#8221;,  y que mejor control que manejar nuestro pequeño montaje con el bluetooth. Como he especificado en la entrada anterior, el módulo BT HC-05 nos permitirá conectar nuestro teléfono Android al montaje. Después de probar [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p><strong>A la conquista del Bluetooth&#8230;</strong></p>
<p>Después de 18 días de trasteo 10 minutos diarios con el módulo Arduino UNO, podemos decir que &#8220;tenemos todo controlado&#8221;,  y que mejor control que manejar nuestro pequeño montaje con el bluetooth.</p>
<p>Como he especificado en la entrada anterior, el módulo BT HC-05 nos permitirá conectar nuestro teléfono Android al montaje. Después de probar varios programillas gratuitos, he conseguido uno que es ideal para empezar a trastear&#8230;</p>
<p><a href="https://play.google.com/store/apps/details?id=appinventor.ai_hobbyprojects_com.BluetoothRoboControl&amp;hl=es" target="_blank">Bluetooth Robo Control</a></p>
<p>Aquí vemos un video de funcionamiento:<br />
<iframe src="https://www.youtube.com/embed/K413aW8mbtk?rel=0&amp;showinfo=0" height="315" width="420" allowfullscreen="" frameborder="0"></iframe></p>
<p>He decidido pasar de pines en los hilos de conexión hembra que habían llegado con el módulo, y me he hecho con una tira macho hembra de 40 conexiones (0,70€):</p>
<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/2015-09-12-15.42.16.jpg"><img class="aligncenter size-full wp-image-10948" alt="2015-09-12 15.42.16" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/2015-09-12-15.42.16.jpg" width="640" height="480" /></a></p>
<p style="text-align: justify;">Este sistema facilita mucho más las conexiones. En este punto integramos el modulo con la ayuda de un nuevo accesorio que nos permitirá disponer de varios puntos desde donde obtener los puntos de alimentación. Se trata de un accesorio para la placa Arduino UNO que se monta sobre ella y permite incluir un modulo protoboard para montar circuitos de prueba. Este sistema llamado <a href="http://www.ebay.es/sch/i.html?_odkw=Protoshield+arduino&amp;LH_PrefLoc=2&amp;_sop=15&amp;_osacat=0&amp;_from=R40&amp;_trksid=m570.l1313&amp;_nkw=Protoshield+arduino&amp;_sacat=0" target="_blank">ProtoShield</a> nos permitirá el desarrollo posterior de otro tipo de proyectos con el montaje. Coste aproximado 1,25€ (ebay).</p>
<p style="text-align: justify;"><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/Arduino_proto_shield_001.jpg"><img class="aligncenter size-full wp-image-10949" alt="Arduino_proto_shield_00[1]" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/Arduino_proto_shield_001-e1443978025399.jpg" width="500" height="393" /></a></p>
<p style="text-align: justify;">Quedará integrada en nuestra placa de la siguiente forma:</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-10950" alt="VUPN5706-3[1]" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/VUPN5706-31-e1443978136835.jpg" width="500" height="419" /></p>
<p>Y la conexión de la circuitería quedará de la siguiente manera:</p>
<p style="text-align: center;"><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/Arduinops3.jpg"><img class="aligncenter  wp-image-10953" alt="Arduinops3" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/10/Arduinops3.jpg" width="577" height="425" /></a></p>
<p>Tienes  trabajo hasta mañana para ubicar el modulo. Si esperas a la próxima entrada, veras como lo he implementado en el chasis.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10947</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (17)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10898</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10898#comments</comments>
		<pubDate>Wed, 16 Sep 2015 22:48:59 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10898</guid>
		<description><![CDATA[Arduino Robot Ps Una vuelta de tuerca&#8230; Habiendo programado nuestro pequeño robot para sus &#8220;primeros pasos&#8221; el peque de la casa me ha preguntado: &#8220;¿y por que no puedo usar el mando de la tele para moverlo?&#8221; A lo que he respondido y por que no? Me he puesto manos a la obra, y en lugar de utilizar el mando del [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p><strong>Una vuelta de tuerca&#8230;</strong></p>
<p>Habiendo programado nuestro pequeño robot para sus &#8220;primeros pasos&#8221; el peque de la casa me ha preguntado: &#8220;¿y por que no puedo usar el mando de la tele para moverlo?&#8221;</p>
<p>A lo que he respondido y por que no?</p>
<p>Me he puesto manos a la obra, y en lugar de utilizar el mando del TV, me he dicho, &#8220;y si usamos directamente el teléfono por bluethooth y nos evitamos las interferencias infrarrojas y poder usarlo en la calle con un amplio radio de alcance? &#8230;</p>
<p>Aquí la solución:</p>
<p><a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/09/0Image00001.jpg"><img class="aligncenter size-full wp-image-10903" alt="0Image00001" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/09/0Image00001.jpg" width="600" height="450" /></a></p>
<p>Un modulo BT<a href="http://www.ebay.es/sch/i.html?_from=R40&amp;_sacat=0&amp;LH_FS=1&amp;_nkw=hc%2005%20arduino&amp;rt=nc&amp;LH_PrefLoc=2&amp;_trksid=p2045573.m1684" target="_blank"> HC-05 para el arduino</a> (ebay 1,65€)</p>
<p>Antes de implementar el programa definitivo, debemos probar el funcionamiento del Arduino con el puerto serie virtual que se genera en la comunicación entre el programa y la placa Arduino, para ello, utilizaremos un nuevo código, que nos permitirá revisar las ordenes que enviamos desde el puerto serie de la aplicación y verificar el movimiento en el robot.</p>
<p>Elevamos el robot del suelo para que queden las ruedas en el aire y enviamos el siguiente programa:</p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 12 Agosto 2015

http://www.pesadillo.com/

  Experimento... Implementamos un sistema de control remoto por Bluetooth. En lugar de que el
  robot realice una tarea programada, controlaremos sus movimientos.
  PRIMERA PARTE: Mediante la consola de puerto serie del programador Arduino (monitor serie) enviaremos los
  comandos para verificar el funcionamiento del programa sobre el Arduino Robot Ps

 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2

#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4

int speakerPin = 13;  // declaro pin para speaker

char Bluetooth; //crear variable que almacena los datos recibidos por el puerto serie
String inputString=&quot;&quot;; //definimos a nulo la cadena de texto

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT);
   Serial.begin(9600);   // set the baud rate to 9600, same should be of your Serial Monitor
}

//pitidos (subproceso)
void pitido(char pitidos_num)
{
// el sibproceso pitido(3) Haría 3 pitidos)
   for (int pip=0; pip&lt;pitidos_num; pip++)
     {
     for (int i=300; i&gt;0; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(200);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(200);

     }
        delay (50);
     }
}

// Antes de nada, obtenemos la lista de comandos de la aplicacion para manejar el robot
// La nuestra utiliza los siguientes caracteres:
//F = Arriba
//L = Izquierda
//R = Derecha
//D = Abajo
//E = Stop (aqui utilizaremos el pitido)

//Empieza el ciclo
void loop()
{

if(Serial.available()){//Si hay datos en el puerto serie
  while(Serial.available())
    {
      char inChar = (char)Serial.read(); //lee la entrada de datos
      inputString += inChar;        //compone la cadena como la recibe por el puerto serie
    }
    Serial.println(inputString); //damos saliada a la cadena de texto almacenada.
    while (Serial.available() &gt; 0)
    { Bluetooth = Serial.read() ; }      // borrar buffer (datos almacenados) del puerto serie

  // avance
  if (inputString==&quot;F&quot;) //En caso de recibir
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   //delay (tarea[i]); No utilizamos los delay ya que funcionara mientras reciba el comando por el puerto serie
  }
  //giro derecha
  if (inputString==&quot;R&quot;)
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   //delay (tarea[i]);
  }
  //giro izquierda
  if (inputString==&quot;L&quot;)
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   //delay (tarea[i]);
  }
  //atras
  if (inputString==&quot;D&quot;)
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   //delay (tarea[i]);
  }
  //para
  if (inputString==&quot;E&quot;)
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
   pitido(2);
   //delay (tarea[i]);
  }

  inputString = &quot;&quot;;//Poner vaciar variable
  //cerramos la recepcion datos serie
  }

//fin del ciclo del programa
}
</pre>
<p>Una vez realizada la programación, nos vamos a HERRAMIENTAS / MONITOR SERIE y enviamos las letras escogidas para efectuar los diferentes movimientos&#8230; veremos que el robot interpreta el comando recibido por el puerto serie y lo ejecuta.</p>
<p>En la siguiente entrada, realizaremos la conexión del modulo e implantaremos el nuevo programa.</p>
<address>En este punto, he de mencionar que todo lo publicado hasta ahora en este &#8220;paso a paso&#8221; funciona perfectamente, intentar utilizar códigos de terceros o recopilados de foros me ha llevado a callejones sin salida y pérdidas de tiempo.</address>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10898</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (16)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10895</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10895#comments</comments>
		<pubDate>Tue, 15 Sep 2015 22:29:48 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10895</guid>
		<description><![CDATA[Arduino Robot Ps Llegados a este punto, donde hemos simplificado suficientemente lo comandos de acción sobre nuestros motores a través del Arduino, y viendo la eficacia de comando &#8220;array&#8221; para generar unas secuencias pre programadas, mejoramos el código de la siguiente manera: &#160; Interesante&#8230; pre programamos tareas en un array &#8220;ilimitado&#8221;&#8230; ummm podríamos realizar varios subproceos para que se ejecutaran arrays [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p>Llegados a este punto, donde hemos simplificado suficientemente lo comandos de acción sobre nuestros motores a través del Arduino, y viendo la eficacia de comando &#8220;array&#8221; para generar unas secuencias pre programadas, mejoramos el código de la siguiente manera:</p>
<p>&nbsp;</p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 12 Agosto 2015

http://www.pesadillo.com/

  Modificamos codigo para programar movimientos y tiempos predifinidos ILIMITADOS

 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2

#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4

//#define MOTOR_DIR_FORWARD  0
//#define MOTOR_DIR_BACKWARD   1
//Se termina de eliminar codigo antiguo con  el // que lo transforma en comentario y nos quedamos con el programa personalizado

int speakerPin = 13;  // declaro pin para speaker

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT);
}

//pitidos (subproceso)
void pitido(char pitidos_num)
{
// el sibproceso pitido(3) Haría 3 pitidos)
   for (int pip=0; pip&lt;pitidos_num; pip++)
     {
     for (int i=300; i&gt;0; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(200);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(200);

     }
        delay (50);
     }
}

/*
Tarea a realizar por el robot
avanza(2000);//enviamos cuanto avanza
para(2000);//enviamos cuanto para
atras(2000);//enviamos cuanto atras...
para(2000);
girad(230);//= +-90g
para(2000);
girai(230);//= +-90g
para(2000);
girad(460);// giro derecha 180g
para(2000);
*/

//comandos (programa)
//definimos dos valores ilimitados, comado y tiempo de tarea (tarea)
// array con mismo numero de valores (se corresponden)
//tabla de comandos
// 0 = parar
// 1 = avanza
// 2 = atras
// 3 = giraderecha
// 4 = giraizquierda

//definimos un array  &quot;comado&quot; que almacena las ordenes a realizar
int comando[]={1,0,2,0,3,0,4,0,3,0,3,0};
//definimos un array &quot;tarea&quot; que especifica los tiempos de esa tarea
int tarea[]={1000,2000,1000,2000,230,2000,230,2000,460,1000,460,2000};

//Empieza el ciclo infinito
void loop()
{

// usamos un bucle para hacer efecto silvido.
 for (int i=500; i&gt;200; i--)
 {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(i);
digitalWrite(speakerPin, LOW);
delayMicroseconds(i);

 }
delay (5000);//esperamos 5 segundos despues de silvido

//comenzamos el ciclo del programa en el bucle
//si el programa esta bien definido (misma cantidad de valores) en &quot;comando&quot; y &quot;tarea&quot;, ejecutamos el programa
if (sizeof(comando)==sizeof(tarea)){
  //ejecutamos las ordenes programadas en el array,
  //donde &quot;sizeof(comando)&quot; nos dará el numero total de comandos a realizar
  //y restamos 1 por que el primer comando ha de ser el array con valor &quot;0&quot;
  for (int i = 0; i &lt; sizeof(comando)-1; i++) {
  // avance
  if (comando[i]==1)
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (tarea[i]);
  }
  //giro derecha
  if (comando[i]==3)
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (tarea[i]);
  }
  //giro izquierda
  if (comando[i]==4)
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (tarea[i]);
  }
  //atras
  if (comando[i]==2)
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (tarea[i]);
  }
  //para
  if (comando[i]==0)
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
   pitido(2);
   delay (tarea[i]);
  }
  }
}

//Final de tarea programada y volvemos al principio despues de 3 pitidos y 3 segundos de espera.
pitido(3);
delay (3000);
}

</pre>
<p>Interesante&#8230; pre programamos tareas en un array &#8220;ilimitado&#8221;&#8230; ummm podríamos realizar varios subproceos para que se ejecutaran arrays distintos en función de si hay un choque, una acción de un haz de luz,&#8230;</p>
<p>La utilización de arrays es muy simple aún que podríamos entrar más en la utilización de &#8220;arrays dobles&#8221; que almacenan las dos variables, pero ahora no es el momento.</p>
<address>Lo que hemos estirado a 15 días (10 minutos diarios), se ha realizado en la mesa en una tarde de rompederos de cabeza, y funciona!!!</address>
<p>En este punto, damos por entendido el programa de control de nuestro robot y pasamos a tareas mayores&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10895</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (15)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10893</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10893#comments</comments>
		<pubDate>Mon, 14 Sep 2015 22:12:10 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10893</guid>
		<description><![CDATA[Arduino Robot Ps Seguimos de lleno con la programación, entendiendo paso a paso, y evolucionando nuestro programa para conseguir simplificar las ordenes a enviar a nuestro pequeño robot. Hemos dedicado 10 minutos diarios, y ya tenemos nuestro pequeño robot autónomo, realizando pequeños movimientos pre programados. Seguimos programando&#8230; Hemos pasado a la utilización del &#8220;array&#8221;&#8230; un comando que nos permitirá almacenar [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p>Seguimos de lleno con la programación, entendiendo paso a paso, y evolucionando nuestro programa para conseguir simplificar las ordenes a enviar a nuestro pequeño robot.</p>
<p>Hemos dedicado 10 minutos diarios, y ya tenemos nuestro pequeño robot autónomo, realizando pequeños movimientos pre programados.</p>
<p><strong>Seguimos programando&#8230;</strong></p>
<p>Hemos pasado a la utilización del &#8220;array&#8221;&#8230; un comando que nos permitirá almacenar varios valores en una variable&#8230;</p>
<p>Lo entenderemos fácilmente con el codigo:</p>
<p><strong> (código 7)</strong></p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 12 Agosto 2015

http://www.pesadillo.com/

  Modificamos codigo para porgramar movimientos y tiempos predifinidos para conseguir simplificar las ordenes de mando.
  Implementacion del &quot;array&quot;

 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2

#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4

#define MOTOR_DIR_FORWARD  0
#define MOTOR_DIR_BACKWARD   1

int speakerPin = 13;  // declaro pin para speaker

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT);
}

//pitidos
void pitido(char pitidos_num)
{

   for (int pip=0; pip&lt;pitidos_num; pip++)
     {
     for (int i=300; i&gt;0; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(200);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(200);

     }
        delay (50);
     }
}

/*
Tarea a realizar
avanza(2000);//enviamos cuanto avanza
para(2000);//enviamos cuanto para
atras(2000);//enviamos cuanto atras...
para(2000);
girad(230);//= +-90g
para(2000);
girai(230);//= +-90g
para(2000);
girad(460);// giro derecha 180g
para(2000);
*/

//comandos
//definimos dos valores, comado y tiempode tarea (tarea)
// array con mismo numero de valores (se corresponden)
//tabla de comandos
// 0 = parar
// 1 = avanza
// 2 = atras
// 3 = giraderecha
// 4 = giraizquierda
int comando[10]={1,0,2,0,3,0,4,0,3,1};
int tarea[10]={1000,2000,1000,2000,230,1000,230,2000,460,1000};

//Empieza el ciclo
void loop()
{

// usamos un bucle para hacer efecto silvido.
 for (int i=500; i&gt;200; i--)
 {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(i);
digitalWrite(speakerPin, LOW);
delayMicroseconds(i);

 }
delay (5000);//esperamos 5 segundos después de silvido

//comenzamos el cliclo del programa bucle
//Este ciclo es el encargado de realizar cada orden almacenada en los dos arrays predefinidos
//el que controla el movimiento y el tiempo de ese movimiento

//definimos la variable numérica (INT) &quot;i&quot; con el valor cero, decimos que se ejecite mientras sea menor que 10 (i &lt; 10) y vamos sumando uno (i++)
for (int i = 0; i &lt; 10; i++) {

// avance
if (comando[i]==1)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH);
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH);
 delay (tarea[i]);
}

//giro derecha
if (comando[i]==3)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH);
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW);
 delay (tarea[i]);
}

//giro izquierda
if (comando[i]==4)
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW);
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH);
 delay (tarea[i]);
}

//atras
if (comando[i]==2)
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW);
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW);
 delay (tarea[i]);
}

if (comando[i]==0)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,LOW);
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,LOW);
 pitido(2);
 delay (tarea[i]);
}
}

//Una vez terminado el bucle &quot;for&quot; realizamos 3 pitidos y vuelve al comienzo del bucle infinito -void loop()-
pitido(3);
delay (3000);
}

</pre>
<p>Como hemos visto anteriormente, una vez simplificada la acción de los motores, nos dedicamos a mejorar el programa simplificando la forma de enviar las ordenes a nuestro robot. En este caso, dos arrays &#8220;emparejados&#8221; se encargan almacenar los dos comando necesarios para la realización del movimiento.</p>
<p>Veremos un nuevo retoque el próximo día.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10893</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (14)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10891</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10891#comments</comments>
		<pubDate>Sun, 13 Sep 2015 22:08:01 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10891</guid>
		<description><![CDATA[Arduino Robot Ps Seguimos probando&#8230; Siguiendo con el objetivo de simplificar las ordenes de mando para nuestro pequeño robot, nos hemos puesto las manos a la obra y hemos llegado a una simplificación interesante: &#160; El próximo día rizaremos más el rizo y conseguiremos un nuevo objetivo.]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p><strong>Seguimos probando&#8230;</strong></p>
<p>Siguiendo con el objetivo de simplificar las ordenes de mando para nuestro pequeño robot, nos hemos puesto las manos a la obra y hemos llegado a una simplificación interesante:</p>
<p>&nbsp;</p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 12 Agosto 2015

http://www.pesadillo.com/

  Implementamos altavoz para proporcionar pitidos de señalizacion. Simplificamos los giros en motores.
  Simplificamos codigo enviando a los subprocesos los tiempos de ejecución del comando.

 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2


#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4


#define MOTOR_DIR_FORWARD  0
#define MOTOR_DIR_BACKWARD   1

int speakerPin = 13;  // declaro pin para speaker
 

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

   
  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   
   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT); 
}


void motorStart(char motor_num, byte direction)
{
  
   char pin_ctl1;
   char pin_ctl2;
   
   if (motor_num == 1)
   {
      pin_ctl1 = MOTOR1_CTL1;
      pin_ctl2 = MOTOR1_CTL2;
   }   
   else
   {
      pin_ctl1 = MOTOR2_CTL1;
      pin_ctl2 = MOTOR2_CTL2;     
   }
  
   switch (direction)
   {
     case MOTOR_DIR_FORWARD:
     {
       digitalWrite(pin_ctl1,LOW);
       digitalWrite(pin_ctl2,HIGH);          
     }
     break; 
          
     case MOTOR_DIR_BACKWARD:
     {
        digitalWrite(pin_ctl1,HIGH);
        digitalWrite(pin_ctl2,LOW);          
     }
     break;         
   }
}

void motorStop(char motor_num)
{
   if (motor_num == 1)
   {
     digitalWrite(MOTOR1_CTL1,LOW);
     digitalWrite(MOTOR1_CTL2,LOW);     
   }
   else
   {
     digitalWrite(MOTOR2_CTL1,LOW);
     digitalWrite(MOTOR2_CTL2,LOW);     
   }
}


//pitidos
void pitido(char pitidos_num)
{
  
   for (int pip=0; pip&lt;pitidos_num; pip++)
     {
     for (int i=300; i&gt;0; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(200);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(200); 
        
     }
        delay (50);  
     }
}


// avance
void avanza(int avanza_num) //seguimos con el SUBPROCESO &quot;avanza&quot; al que le pedimos un valor numerico (INT)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH); 
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH); 
 delay (avanza_num);//Aplicamos el valor numerico obtenido entre parentesis 
}  

void para(int para_num)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,LOW); 
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,LOW);
 pitido(2);
 delay(para_num);
}  

//giro derecha
void girad(int girad_num)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH);
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW);
 delay (girad_num);  
}   

//giro izquierda  
void girai(int girai_num)
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW); 
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH);
 delay (girai_num);   
} 

//atras
void atras(int atras_num)
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW); 
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW); 
 delay (atras_num);  
} 
  

void loop()
{
  
    // usamos un bucle para hacer efecto silvido.
   for (int i=500; i&gt;200; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(i);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(i); 
        
     }
    //fin silvido 
   delay(5000);// espera 5 segundos

//He aqui el código simplificado con los comandos del anterior desarrollo:
  
avanza(2000);//enviamos cuanto avanza
para(2000);//enviamos cuanto para
atras(2000);//enviamos cuanto atras...
para(2000);
girad(230);//= +-90g     
para(2000);
girai(230);//= +-90g
para(2000);
girad(460);// giro derecha 180g        
para(2000);
//Final

// Como se observa muchisimo mas simple
pitido(3);
delay (3000);
}
</pre>
<p>El próximo día rizaremos más el rizo y conseguiremos un nuevo objetivo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10891</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (13)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10885</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10885#comments</comments>
		<pubDate>Sat, 12 Sep 2015 22:42:35 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10885</guid>
		<description><![CDATA[Arduino Robot Ps Seguimos probando&#8230; Una vez implementado este accesorio es hora de probarlo: Un buen comportamiento, pero con alguna modificación de código quedaría mejor la exactitud de movimientos. Intentando mejorar el código y simplificación de comandos he llegado a esto: &#160; Un código más entendible&#8230; podéis probarlo enviando la programación a la placa para ver su comportamiento. El próximo [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p><strong>Seguimos probando&#8230;</strong></p>
<p>Una vez implementado este accesorio es hora de probarlo:<br />
<iframe src="https://www.youtube.com/embed/xhYdr4Pc9J8?rel=0&amp;showinfo=0" height="315" width="560" allowfullscreen="" frameborder="0"></iframe></p>
<p>Un buen comportamiento, pero con alguna modificación de código quedaría mejor la exactitud de movimientos.</p>
<p>Intentando mejorar el código y simplificación de comandos he llegado a esto:</p>
<p>&nbsp;</p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 12 Agosto 2015

http://www.pesadillo.com/

  Implementamos altavoz para proporcionar pitidos de señalizacion. Simplificamos los giros en motores.

 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2

#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4

#define MOTOR_DIR_FORWARD  0
#define MOTOR_DIR_BACKWARD   1

int speakerPin = 13;  // declaro pin para speaker

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT);
}

void motorStart(char motor_num, byte direction)
{

   char pin_ctl1;
   char pin_ctl2;

   if (motor_num == 1)
   {
      pin_ctl1 = MOTOR1_CTL1;
      pin_ctl2 = MOTOR1_CTL2;
   }
   else
   {
      pin_ctl1 = MOTOR2_CTL1;
      pin_ctl2 = MOTOR2_CTL2;
   }

   switch (direction)
   {
     case MOTOR_DIR_FORWARD:
     {
       digitalWrite(pin_ctl1,LOW);
       digitalWrite(pin_ctl2,HIGH);
     }
     break;

     case MOTOR_DIR_BACKWARD:
     {
        digitalWrite(pin_ctl1,HIGH);
        digitalWrite(pin_ctl2,LOW);
     }
     break;
   }
}

void motorStop(char motor_num)
{
   if (motor_num == 1)
   {
     digitalWrite(MOTOR1_CTL1,LOW);
     digitalWrite(MOTOR1_CTL2,LOW);
   }
   else
   {
     digitalWrite(MOTOR2_CTL1,LOW);
     digitalWrite(MOTOR2_CTL2,LOW);
   }
}

//pitidos
void pitido(char pitidos_num)
{

   for (int pip=0; pip&lt;pitidos_num; pip++)
     {
     for (int i=300; i&gt;0; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(200);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(200);

     }
        delay (50);
     }
}

// avance

void avanza() //creamos el comando &quot;avanza&quot; y especificamos el comportamiento de las salidas (sentido de giro de los motores)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH);
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH);
}

void para() //comando &quot;para&quot; donde dejamos de suministrar energia a los morores
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,LOW);
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,LOW);
pitido(2);
}

void girad() //giro a derecha
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH);
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW);
}

void girai() //giro a izquierda (vease que se alimenta uno de los polos de las bobinas del motor en funcion del giro deseado)
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW);
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH);
}

void atras()//atras... invertimos &quot;avanza&quot;
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW);
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW);
}

void loop()
{

    // usamos un bucle para hacer efecto silvido.
   for (int i=500; i&gt;200; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(i);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(i);

     }
    //fin pitido
   delay(5000);// espera 5 segundos

//Ejecutamos los comandos deseados llamando a los subprocesos:
avanza();
delay (2000);//paramos 5 segundos

para();
delay (5000);//paramos 5 segundos

atras();
delay (2000);//paramos 5 segundos

para();
delay (5000);//paramos 5 segundos

girad();
  delay(230);//= +-90g

para();
  delay (5000);//paramos 5 segundos

girai();
  delay(230);//= +-90g

para();
  delay (5000);//paramos 5 segundos

  // giro derecha 180g
girad();
  delay(460);//=+-180grados

para();
  delay (10000);//paramos 10 segundos

pitido(3);//damos 3 pitidos
delay (3000);//esperamos 3 segundos
}

</pre>
<p>Un código más entendible&#8230; podéis probarlo enviando la programación a la placa para ver su comportamiento.<br />
El próximo día seguiremos con el desarrollo y aprendizaje.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10885</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (12)</title>
		<link>http://www.pesadillo.com/pesadillo/?p=10785</link>
		<comments>http://www.pesadillo.com/pesadillo/?p=10785#comments</comments>
		<pubDate>Fri, 11 Sep 2015 22:23:54 +0000</pubDate>
		<dc:creator>pesadillo</dc:creator>
				<category><![CDATA[Electronica]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://www.pesadillo.com/pesadillo/?p=10785</guid>
		<description><![CDATA[Arduino Robot Ps Seguimos programando&#8230; Esta vez, implementaremos un nuevo accesorio a nuestro robot. Un pequeño altavoz que nos proporcione información de en que punto del proceso se encuentra. Y así queda nuestra nueva implementación: Y ya podéis hacer la prueba&#8230; no olvidéis retocar los valores del bucle por u otras combinaciones (modificando los valores numéricos) para conseguir vuestro propio [...]]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">Arduino Robot <span style="color: #ff0000;">Ps</span></h1>
<p><strong>Seguimos programando&#8230;</strong></p>
<p>Esta vez, implementaremos un nuevo accesorio a nuestro robot. Un pequeño altavoz que nos proporcione información de en que punto del proceso se encuentra.</p>
<pre class="brush: php; title: ; notranslate">
/*********************************************************************************************

  Tutorial: Arduino Robot Ps V1.0
  Autor: Pesadillo.com Agosto 2015

http://www.pesadillo.com

 ********************************************************************************************/
//esto es una linea comentada (no se ejecuta en el codigo)

/*
Esto es una frase comentada (no se ejecuta en el codigo)
*/

/*
En este ejercicio simplificamos variables no utilizadas (salidas analógicas para el control de velocidad) con respecto al código anterior.
Implementamos un altavoz (buzz) de PC para averiguar en que punto del proceso se encuentra nuestro Arduino Robot Ps. Nos informará con sonidos de lo que hace.

*/

#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2

#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4

#define MOTOR_DIR_FORWARD  0
#define MOTOR_DIR_BACKWARD   1

int speakerPin = 13;  // declaro pin para speaker (aprobechamos que la masa esta al lado de este pin)

void setup()
{
  // Configuramos pines para motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

  // Configuramos pines para motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   // Configuramos pin para salida (OUTPUT) del altavoz (speaker)
   pinMode(speakerPin, OUTPUT);
}

/*
void NOMBRE
son subprocesos a los que llamamos desde el programa principal
*/
void motorStart(char motor_num, byte direction)
{
  /*En este  void se reclaman dos variables (una de tipo &quot;caracter (CHAR)&quot; y otra de tipo BYT (byte) para especificar el numero de motor y direccion*/
   char pin_ctl1;
   char pin_ctl2;

   if (motor_num == 1)
   {
      pin_ctl1 = MOTOR1_CTL1;
      pin_ctl2 = MOTOR1_CTL2;
   }
   else
   {
      pin_ctl1 = MOTOR2_CTL1;
      pin_ctl2 = MOTOR2_CTL2;
   }

   switch (direction)
   {
     case MOTOR_DIR_FORWARD:
     {
       digitalWrite(pin_ctl1,LOW);
       digitalWrite(pin_ctl2,HIGH);
     }
     break;

     case MOTOR_DIR_BACKWARD:
     {
        digitalWrite(pin_ctl1,HIGH);
        digitalWrite(pin_ctl2,LOW);
     }
     break;
   }
}

void motorStop(char motor_num)
{
  /*Este void &quot;motorstop&quot; detiene el motor que recibe entre parentesis (mediante una variable del tipo caracter ej. a,b,c,d,1,2,3...)*/
   if (motor_num == 1)//si el motor es el 1
   {
     digitalWrite(MOTOR1_CTL1,LOW);//ponemos a 0v (low) la salida
     digitalWrite(MOTOR1_CTL2,LOW);//ponemos a 0v (low) la salida del pin MOTOR1_CTL2 (nombre del pin que hemos puesto mas arriba y que se corresponde don el pon 9 del Arduino)
   }
   else
   {
     digitalWrite(MOTOR2_CTL1,LOW);
     digitalWrite(MOTOR2_CTL2,LOW);
   }
}

void loop()
{

    // usamos un bucle para hacer efecto silvido.
   for (int i=500; i&gt;200; i--)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(i);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(i+500);
     }

   delay(5000);
  // espera 5 segundos

  // avance
  motorStart(1, MOTOR_DIR_FORWARD);
  motorStart(2, MOTOR_DIR_FORWARD);
  delay(1100);//2200 milisegundos = +- 1metro

  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);//paramos 5 segundos

  // giro derecha 90g
  motorStart(1, MOTOR_DIR_FORWARD);
  motorStart(2, MOTOR_DIR_BACKWARD);
  delay(230);//= +-90g
  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);//paramos 5 segundos

  // giro izquierda 90g
  motorStart(2, MOTOR_DIR_FORWARD);
  motorStart(1, MOTOR_DIR_BACKWARD);
  delay(230);//= +-90g
  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);//paramos 5 segundos

  // giro derecha 180g
  motorStart(1, MOTOR_DIR_FORWARD);
  motorStart(2, MOTOR_DIR_BACKWARD);
  delay(460);//=+-180grados
  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);//esperamos 5 segundos

}

</pre>
<p>Y así queda nuestra nueva implementación:<br />
<a href="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/08/Image000111.jpg"><img class="aligncenter size-full wp-image-10640" alt="Image00011" src="http://www.pesadillo.com/pesadillo/wp-content/uploads/2015/08/Image000111.jpg" width="600" height="450" /></a></p>
<p>Y ya podéis hacer la prueba&#8230; no olvidéis retocar los valores del bucle</p>
<pre class="brush: php; title: ; notranslate">
   for (int i=500; i&gt;200; i--)//restamos (de grave a agudo)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(i);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(i+500);
     }
</pre>
<p>por</p>
<pre class="brush: php; title: ; notranslate">
   for (int i=200; i&lt;500; i++)//sumamos (de agudo a grave)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(i);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(i+500);
     }
</pre>
<p>u otras combinaciones (modificando los valores numéricos) para conseguir vuestro propio sonido.<br />
Con este bucle creamos una onda cuadrada con una determinada frecuencia que es lo que interpreta el altavoz (speaker).<br />
A valores mas pequeños, frecuencias mas altas = Sonidos más agudos.</p>
<p>Seguimos mañana.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pesadillo.com/pesadillo/?feed=rss2&#038;p=10785</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
