Lego MindStorms … de regreso a la robotica.

Hola a Todos.


El pasado día 24 Papá Noel ( una gran persona, todo hay que decirlo ), decidió que me había portado bastante bien durante el año y me sorprendió con un Lego MindStorms.


Tras todas las obligaciones familiares, laborales, mi cumpleaños ( SI,otro año más viejo ), etc, etc, ayer por fín comencé ( como diría mi amigo El Bruno ) con mi conquista personal del mundo.


Hace algunos años me inicié en el tema de la robotica totalmente emocionado despues de ver al señor Data en la saga StarTrek, o a nuestro maravilloso T-1000 en Terminator, y como no … nuestro memorable amigo Roby ( para aquellos que no lo conozcais, Roby es uno de los robots más antiguos de la historia del cine ) y monté un pequeño robotillo que solo éra capaz de seguir una linea de cinta aislante negra sobre un suelo blanco. Esa fue una maravillosa experiencia. ( no recuerdo sobre que lo programé … pero si recuerdo las horas y horas dedicadas para que el pequeño bicho se pusiera en marcha y me hiciera caso!! ).


Aunque ya conocia el tema de los MindStorms gracias a Miguel Jimenez en la CodeCamp del Escorial ( creo q no olvidaré esas 2 horas antes de la presentación del evento de lucha entre los legos en la que estabamos montando los bichos ) me volvió a impresionar la sencillez con la que puedes montar tu propio humanoide y programarlo sin problemas.


Claro que eso te empieza a abrir la mente y nuevas ideas te empiezan a aparecer, pero claro, lo primero es lo primero. Osea que aquí os dejo la implementación del ‘Sigue Lineas’, para que la echeis un vistazo a ver que os parece.



namespace sigueLinea
{
   public partial class frmSigueLaLinea : Form
   {
      // Si el color detectado es igual o superior a este valor, es blanco
      int colorBlanco = 50;
      // Si el color detectado es igual o inferior a este valor, es negro
      int colorNegro = 40;


      public frmSigueLaLinea()
      {
         InitializeComponent();
      }

      #region Eventos

      // Indica si está activo
      bool estaActivo = false;
      // Indica si se ha encontrado la linea
      bool negroEncontrado = false;

      protected override void OnLoad(EventArgs e)
      {
         base.OnLoad(e);
         nxtBrick.Connect();
      }

      protected override void OnClosing(CancelEventArgs e)
      {
         nxtBrick.Disconnect();
         base.OnClosing(e);
      }

     // Comprobamos la información del sensor de visión y decidimos que hacer
      private void nxtLightSensor_ValueChanged(NxtSensor sensor)
      {
         // No se hace nada hasta que no esté activo
         if (estaActivo == false)
         { return; }


         // Inicialmente, el bicho se pone en marcha hasta encontrar la linea.                // En el momento que la encuentra el sensor pondrá a seguirla
         if (nxtLightSensor.Value <= colorNegro)
         { negroEncontrado = true; }

         // Como lo hemos encontrado … le seguimos
         if (negroEncontrado)
         { SigueLaLinea(nxtLightSensor.Value); }
         else
         { SigueRecto(0); }
      }

      // Pulsamos en Ir
      private void btnGo_Click(object sender, EventArgs e)
      {
         estaActivo = true;
      }

      // Pulsamos en Parar
      private void btnStop_Click(object sender, EventArgs e)
      {
         estaActivo = false;
         PararMotor();
         negroEncontrado = false;
      }

      // Pulsamos en Cerrar
      private void btnQuit_Click(object sender, EventArgs e)
      {
         this.Dispose();
      }

   #endregion

   #region Algoritmo para seguir la linea

      public void SigueLaLinea(int LightValue)
      {

      // Si es blanco … lgiramos a la derecha
      if (LightValue > colorBlanco) { GiraDerecha(); }
      // Si es negro … giramos a la izquierda ( un poquito )
      else if (LightValue < colorNegro) { GiraIzquierda(); }
      // Si no es ninguno de los dos .. seguimos recto
      else { SigueRecto(0); }

      }

   #endregion

   #region Control del Robot

      // La velocidad de movimiento
      int Velocidad = 10;
      // A que velocidad se gira
      int gradosGiro = 1;

      public void SigueRecto(int grados)
      {
         nxtMotorA.Turn(Velocidad, grados);
         nxtMotorC.Turn(Velocidad, grados);
      }

      public void VuelveAtras(int grados)
      {
         nxtMotorA.Turn(-Velocidad, grados);
         nxtMotorC.Turn(-Velocidad, grados);
      }

      public void GiraIzquierda()
      {
         nxtMotorA.Turn(Velocidad, gradosGiro);
      }

      public void GiraDerecha()
      {
         nxtMotorC.Turn(Velocidad, gradosGiro);
      }

      public void PararMotor()
      {
         nxtMotorA.Coast();
         nxtMotorC.Coast();
      }

   #endregion

   }
}


Pues eso … un saludo a todos!

4 comentarios en “Lego MindStorms … de regreso a la robotica.”

  1. Hola David!

    Yo también tengo uno (si estuviste en la Code, lo gané en el combate de sumo xD).

    Pues nada, si tienes alguna duda espero poder ayudarte… y cuando quieras montamos una orden de caballeros Lego-Jedis… 😉

    Un saludo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *