Carro Seguidor de Línea con Arduino, Puente H L298N y Sensores Infrarrojos |José Fidel|

Sdílet
Vložit
  • čas přidán 24. 06. 2021
  • Hola a todos, mi nombre es José Fidel, soy estudiante de Ingeniería Mecatrónica, en el vídeo de hoy realicé un carro seguidor de línea negra, para reconocer dicha línea negra lo hice mediante dos sensores infrarrojos, además de la ayuda de un puente H L298N para controlar el sentido y velocidad de los motores, cómo microcontrolador utilicé un Arduino Uno, para la alimentación fue necesaria una batería de 9V, para probarlo realicé un circuito con cinta negra. Espero les guste y les sea de utilidad, no olviden dejar su like y suscribirse.
  • Věda a technologie

Komentáře • 40

  • @sergionunezvillacres
    @sergionunezvillacres Před 2 lety +1

    José Fidel cordial saludo. Excelente trabajo. Felicitaciones!

  • @jhonnycondorihuallpa5285
    @jhonnycondorihuallpa5285 Před 2 lety +3

    hola muy interesante tu video me gusto mucho, me podrías ayudar con el código de programación

  • @danielyanez9823
    @danielyanez9823 Před 2 lety +1

    Buen video bro me sirve demasiado para un proyecto pero una pregunta
    Puedes hacer que vaya un poco más rápido el carrito..?

  • @yassirbruce7912
    @yassirbruce7912 Před rokem

    me gusto ese video, podrías compartirme la programación.

  • @yarleycamilomejiabedoya6369

    Buenas Tardes
    Me podrias orientar respecto al montaje en proteus??? es que estoy tratando de hacer el diagrama y no se como hacerlo

  • @victorcalle2374
    @victorcalle2374 Před rokem +1

    Buenas noches, excelente trabajo, me puedes facilitar el código fuente?

  • @josedanielhernandez6529
    @josedanielhernandez6529 Před 2 lety +8

    Hola, muy buen aporte, me podrías compartir la programación.

  • @carlosenriquegonzalezmonca7249

    hola una pregunta ya prendio y todo pero no sé mueve el carrito las llantas no giran como lo soluciono?

  • @eliza_bethsp
    @eliza_bethsp Před rokem

    Como puedo hacer para que el carrito vaya a mas velocidad??

  • @roselydelarosaluchi4899
    @roselydelarosaluchi4899 Před 2 lety +2

    Hola, bro. Cómo conectaste a los puertos ENA y ENB del puente H? es que mis jumpers quedan muy flojos, gracias por tan buen video

  • @catalogorestrepo6615
    @catalogorestrepo6615 Před 3 lety +5

    Excelente video, donde pudo conseguir el código de programación para ingresar al Arduino?

    • @BionicSpace13
      @BionicSpace13  Před 2 lety +23

      Muchas gracias, aquí tienes el código:
      //Canal CZcams:José Fidel
      // Definición de variables y constantes relacionadas con el motor izquierdo
      const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo
      const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo
      const int ENA = 6;

      // Definición de variables y constantes relacionadas con el motor derecho
      const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo
      const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo
      const int ENB = 5;

      const int vel = 70;
      const int vel2 = 90;
      const int vel3 = 55;
      const int vel4= 35;

      // Definición de variables y constantes relacionadas con los sensores IR
      int lecturaSensorIzq; // Almacena el valor de la lectura del sensor izquierdo
      int lecturaSensorDer; // Almacena el valor de la lectura del sensor derecho
      const int sensorIzqPin = A0; // El sensor izq irá conectado al pin analógico A0
      const int sensorDerPin = A1; // El sensor derecho irá conectado al pin analógico A1

      void setup()
      {
      // Se declaran todos los pines como salidas
      // Pines asociados a los motores
      pinMode (IN1, OUTPUT);
      pinMode (IN2, OUTPUT);
      pinMode (IN3, OUTPUT);
      pinMode (IN4, OUTPUT);
      pinMode (ENA, OUTPUT);
      pinMode (ENB, OUTPUT);
      pinMode( sensorIzqPin , INPUT) ;
      pinMode( sensorDerPin , INPUT) ;
      Serial.begin(9600); // Se inicia el puerto de comunicaciones en serie
      }

      void loop()
      {

      lecturaSensorIR(); // Se lee el valor de los sensores IR
      // Se analiza el resultado de los sensores para hacer que el robot siga la línea negra

      // Si el resultado de ambos sensores es 0 (zona blanca) el robot sigue se para
      if(lecturaSensorIzq == 1 && lecturaSensorDer == 1)
      {
      robotParar(); // El robot para

      }
      // Si el izquierdo retorna 0 (zona blanca) y el derecho 1 (negra) el robot gira derecha
      if (lecturaSensorIzq == 1 && lecturaSensorDer == 0)
      {
      robotIzquierda();
      // El robot gira a la derecha
      Serial.println("Gira Izquierda");

      }
      // Si el izquierdo retorna 1 (zona negra) y el derecho 0 (blanca) el robot gira izquierda
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 1)
      {
      robotDerecha();


      }
      // Si ambos sensores retornan 0 (zona negra) el robot sigue recto
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 0)
      {
      robotAvance(); // El robot avanza
      Serial.println("robot avanza");
      }

      }
      /*
      Función lecturaSensorIR: leerá el valor del sensor de infrarrojos TCRT5000
      y lo almacena en una variable. Dicho sensor retornará el valor 0 (LOW) si
      el sensor está en zona blanca y el valor 1 (HIGH) si el sensor está en zona
      negra.
      */
      void lecturaSensorIR()
      {
      lecturaSensorIzq = digitalRead(sensorIzqPin); // Almacena la lectura del sensor izquierdo
      lecturaSensorDer = digitalRead(sensorDerPin); // Almacena la lectura del sensor derecho

      Serial.println("El valor del sensor izquierdo es ");
      Serial.println(lecturaSensorIzq);

      Serial.println("El valor del sensor derecho es ");
      Serial.println(lecturaSensorDer);
      }
      /*
      Función robotAvance: esta función hará que ambos motores se activen a máxima potencia
      por lo que el robot avanzará hacia delante
      */
      void robotAvance()
      {
      // Motor izquierdo
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel); //Velocidad motor A

      // Motor derecho
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel); //Velocidad motor B
      }

      /*
      Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho
      por lo que el coche girará hacia la derecha (sentido horario)
      */
      void robotDerecha()
      {
      // Motor izquierdo
      // Se activa el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel3); //Velocidad motor A

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel4); //Velocidad motor A

      }
      /*
      Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo
      por lo que el coche girará hacia la izquierda (sentido antihorario)
      */
      void robotIzquierda ()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel4); //Velocidad motor A

      // Motor derecho
      // Se activa el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel3); //Velocidad motor A
      }
      /*
      Función robotParar: esta función parará ambos motores
      por lo que el robot se parará.
      */
      void robotParar()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, LOW);
      digitalWrite (IN2, LOW);

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, LOW);
      digitalWrite (IN4, LOW);

      }

    • @edwarmolina5596
      @edwarmolina5596 Před 2 lety

      @@BionicSpace13 bro no lo puedo copear

  • @marisolyepezospino8140

    Hola muy buen aporte, me puedes pasar la hoja de programación a mi correo

  • @azteiklag2989
    @azteiklag2989 Před 2 lety +1

    Se pueden usar los sensores TCRT5000 con ese código que tienes o cambia ?

    • @BionicSpace13
      @BionicSpace13  Před rokem

      No lo sé, necesito checar, mándame mensaje a Instagram

  • @damiancabrera1022
    @damiancabrera1022 Před 2 lety +1

    Disculpa el código puede funcionar de la misma forma pero con sensores tcrt5000

    • @BionicSpace13
      @BionicSpace13  Před rokem

      No lo sé, necesito checar, mándame mensaje a Instagram

  • @dariozambrano6740
    @dariozambrano6740 Před rokem

    como se hace la programacion

  • @moncho02
    @moncho02 Před 2 lety

    Hola, alguien me puede decir cómo se llama la música de fondo del minuto 1:20 por favor.

  • @migueloswaldoordonezmelo6532
    @migueloswaldoordonezmelo6532 Před 11 měsíci

    buena tarde.
    cual es la referencia de los sensores? y me puede colaborar con el codigo?
    gracias

  • @tanyapereira2679
    @tanyapereira2679 Před 3 měsíci

    Hola! me podrías ayudar con el código para programarlo, por favor

  • @jesusalejandrosantanavelas5565

    Me podrías ayudar con el programa pero con sensores tcrt5000

    • @BionicSpace13
      @BionicSpace13  Před 2 lety

      Mándame un correo y por ahí te lo paso con gusto!

  • @fernandoleana2618
    @fernandoleana2618 Před 2 lety +2

    Buen video
    Tendrás el diagrama Bro ?

  • @eliasfrias7659
    @eliasfrias7659 Před 2 lety

    Hola podrias pasar el codigo solo para copiar y pegar?

  • @elcapichoco7703
    @elcapichoco7703 Před 2 lety

    me podrías pasas el código el carrito bro

  • @jonathanhuerta1147
    @jonathanhuerta1147 Před 6 měsíci

    Hola buenas noches
    Me podrías apoyar con los códigos del seguidor de línea

  • @memesovejosos9567
    @memesovejosos9567 Před 2 lety +1

    Amigo como se llman los cables que usaste por favor qwq

  • @yahiromar25
    @yahiromar25 Před rokem +2

    Me puedes pasar el código del carrito seguidor de línea.
    Saludod

  • @jaimeyulianzambranogarcia7794

    holaaa, me puedes hacer el favor de enviarme el codigo completo

    • @BionicSpace13
      @BionicSpace13  Před 2 lety +1

      //Canal CZcams:José Fidel
      // Definición de variables y constantes relacionadas con el motor izquierdo
      const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo
      const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo
      const int ENA = 6;

      // Definición de variables y constantes relacionadas con el motor derecho
      const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo
      const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo
      const int ENB = 5;

      const int vel = 70;
      const int vel2 = 90;
      const int vel3 = 55;
      const int vel4= 35;

      // Definición de variables y constantes relacionadas con los sensores IR
      int lecturaSensorIzq; // Almacena el valor de la lectura del sensor izquierdo
      int lecturaSensorDer; // Almacena el valor de la lectura del sensor derecho
      const int sensorIzqPin = A0; // El sensor izq irá conectado al pin analógico A0
      const int sensorDerPin = A1; // El sensor derecho irá conectado al pin analógico A1

      void setup()
      {
      // Se declaran todos los pines como salidas
      // Pines asociados a los motores
      pinMode (IN1, OUTPUT);
      pinMode (IN2, OUTPUT);
      pinMode (IN3, OUTPUT);
      pinMode (IN4, OUTPUT);
      pinMode (ENA, OUTPUT);
      pinMode (ENB, OUTPUT);
      pinMode( sensorIzqPin , INPUT) ;
      pinMode( sensorDerPin , INPUT) ;
      Serial.begin(9600); // Se inicia el puerto de comunicaciones en serie
      }

      void loop()
      {

      lecturaSensorIR(); // Se lee el valor de los sensores IR
      // Se analiza el resultado de los sensores para hacer que el robot siga la línea negra

      // Si el resultado de ambos sensores es 0 (zona blanca) el robot sigue se para
      if(lecturaSensorIzq == 1 && lecturaSensorDer == 1)
      {
      robotParar(); // El robot para

      }
      // Si el izquierdo retorna 0 (zona blanca) y el derecho 1 (negra) el robot gira derecha
      if (lecturaSensorIzq == 1 && lecturaSensorDer == 0)
      {
      robotIzquierda();
      // El robot gira a la derecha
      Serial.println("Gira Izquierda");

      }
      // Si el izquierdo retorna 1 (zona negra) y el derecho 0 (blanca) el robot gira izquierda
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 1)
      {
      robotDerecha();


      }
      // Si ambos sensores retornan 0 (zona negra) el robot sigue recto
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 0)
      {
      robotAvance(); // El robot avanza
      Serial.println("robot avanza");
      }

      }
      /*
      Función lecturaSensorIR: leerá el valor del sensor de infrarrojos TCRT5000
      y lo almacena en una variable. Dicho sensor retornará el valor 0 (LOW) si
      el sensor está en zona blanca y el valor 1 (HIGH) si el sensor está en zona
      negra.
      */
      void lecturaSensorIR()
      {
      lecturaSensorIzq = digitalRead(sensorIzqPin); // Almacena la lectura del sensor izquierdo
      lecturaSensorDer = digitalRead(sensorDerPin); // Almacena la lectura del sensor derecho

      Serial.println("El valor del sensor izquierdo es ");
      Serial.println(lecturaSensorIzq);

      Serial.println("El valor del sensor derecho es ");
      Serial.println(lecturaSensorDer);
      }
      /*
      Función robotAvance: esta función hará que ambos motores se activen a máxima potencia
      por lo que el robot avanzará hacia delante
      */
      void robotAvance()
      {
      // Motor izquierdo
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel); //Velocidad motor A

      // Motor derecho
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel); //Velocidad motor B
      }

      /*
      Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho
      por lo que el coche girará hacia la derecha (sentido horario)
      */
      void robotDerecha()
      {
      // Motor izquierdo
      // Se activa el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel3); //Velocidad motor A

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel4); //Velocidad motor A

      }
      /*
      Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo
      por lo que el coche girará hacia la izquierda (sentido antihorario)
      */
      void robotIzquierda ()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel4); //Velocidad motor A

      // Motor derecho
      // Se activa el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel3); //Velocidad motor A
      }
      /*
      Función robotParar: esta función parará ambos motores
      por lo que el robot se parará.
      */
      void robotParar()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, LOW);
      digitalWrite (IN2, LOW);

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, LOW);
      digitalWrite (IN4, LOW);

      }

  • @cristiancamilocortesbaquer8135

    hola donde puedo conseguir el codigo?

    • @BionicSpace13
      @BionicSpace13  Před 2 lety

      //Canal CZcams:José Fidel
      // Definición de variables y constantes relacionadas con el motor izquierdo
      const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo
      const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo
      const int ENA = 6;

      // Definición de variables y constantes relacionadas con el motor derecho
      const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo
      const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo
      const int ENB = 5;

      const int vel = 70;
      const int vel2 = 90;
      const int vel3 = 55;
      const int vel4= 35;

      // Definición de variables y constantes relacionadas con los sensores IR
      int lecturaSensorIzq; // Almacena el valor de la lectura del sensor izquierdo
      int lecturaSensorDer; // Almacena el valor de la lectura del sensor derecho
      const int sensorIzqPin = A0; // El sensor izq irá conectado al pin analógico A0
      const int sensorDerPin = A1; // El sensor derecho irá conectado al pin analógico A1

      void setup()
      {
      // Se declaran todos los pines como salidas
      // Pines asociados a los motores
      pinMode (IN1, OUTPUT);
      pinMode (IN2, OUTPUT);
      pinMode (IN3, OUTPUT);
      pinMode (IN4, OUTPUT);
      pinMode (ENA, OUTPUT);
      pinMode (ENB, OUTPUT);
      pinMode( sensorIzqPin , INPUT) ;
      pinMode( sensorDerPin , INPUT) ;
      Serial.begin(9600); // Se inicia el puerto de comunicaciones en serie
      }

      void loop()
      {

      lecturaSensorIR(); // Se lee el valor de los sensores IR
      // Se analiza el resultado de los sensores para hacer que el robot siga la línea negra

      // Si el resultado de ambos sensores es 0 (zona blanca) el robot sigue se para
      if(lecturaSensorIzq == 1 && lecturaSensorDer == 1)
      {
      robotParar(); // El robot para

      }
      // Si el izquierdo retorna 0 (zona blanca) y el derecho 1 (negra) el robot gira derecha
      if (lecturaSensorIzq == 1 && lecturaSensorDer == 0)
      {
      robotIzquierda();
      // El robot gira a la derecha
      Serial.println("Gira Izquierda");

      }
      // Si el izquierdo retorna 1 (zona negra) y el derecho 0 (blanca) el robot gira izquierda
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 1)
      {
      robotDerecha();


      }
      // Si ambos sensores retornan 0 (zona negra) el robot sigue recto
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 0)
      {
      robotAvance(); // El robot avanza
      Serial.println("robot avanza");
      }

      }
      /*
      Función lecturaSensorIR: leerá el valor del sensor de infrarrojos TCRT5000
      y lo almacena en una variable. Dicho sensor retornará el valor 0 (LOW) si
      el sensor está en zona blanca y el valor 1 (HIGH) si el sensor está en zona
      negra.
      */
      void lecturaSensorIR()
      {
      lecturaSensorIzq = digitalRead(sensorIzqPin); // Almacena la lectura del sensor izquierdo
      lecturaSensorDer = digitalRead(sensorDerPin); // Almacena la lectura del sensor derecho

      Serial.println("El valor del sensor izquierdo es ");
      Serial.println(lecturaSensorIzq);

      Serial.println("El valor del sensor derecho es ");
      Serial.println(lecturaSensorDer);
      }
      /*
      Función robotAvance: esta función hará que ambos motores se activen a máxima potencia
      por lo que el robot avanzará hacia delante
      */
      void robotAvance()
      {
      // Motor izquierdo
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel); //Velocidad motor A

      // Motor derecho
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel); //Velocidad motor B
      }

      /*
      Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho
      por lo que el coche girará hacia la derecha (sentido horario)
      */
      void robotDerecha()
      {
      // Motor izquierdo
      // Se activa el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel3); //Velocidad motor A

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel4); //Velocidad motor A

      }
      /*
      Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo
      por lo que el coche girará hacia la izquierda (sentido antihorario)
      */
      void robotIzquierda ()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel4); //Velocidad motor A

      // Motor derecho
      // Se activa el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel3); //Velocidad motor A
      }
      /*
      Función robotParar: esta función parará ambos motores
      por lo que el robot se parará.
      */
      void robotParar()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, LOW);
      digitalWrite (IN2, LOW);

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, LOW);
      digitalWrite (IN4, LOW);

      }

  • @cristiandecker2180
    @cristiandecker2180 Před 3 lety +1

    Hola… donde puedo conseguir el código

    • @BionicSpace13
      @BionicSpace13  Před 2 lety +3

      //Canal CZcams:José Fidel
      // Definición de variables y constantes relacionadas con el motor izquierdo
      const int IN1 = 13; // Pin digital 13 para controlar sentido giro motor izquierdo
      const int IN2 = 12; // Pin digital 12 para controlar sentido giro motor izquierdo
      const int ENA = 6;

      // Definición de variables y constantes relacionadas con el motor derecho
      const int IN3 = 11; // Pin digital 11 para controlar sentido giro motor izquierdo
      const int IN4 = 10; // Pin digital 10 para controlar sentido giro motor izquierdo
      const int ENB = 5;

      const int vel = 70;
      const int vel2 = 90;
      const int vel3 = 55;
      const int vel4= 35;

      // Definición de variables y constantes relacionadas con los sensores IR
      int lecturaSensorIzq; // Almacena el valor de la lectura del sensor izquierdo
      int lecturaSensorDer; // Almacena el valor de la lectura del sensor derecho
      const int sensorIzqPin = A0; // El sensor izq irá conectado al pin analógico A0
      const int sensorDerPin = A1; // El sensor derecho irá conectado al pin analógico A1

      void setup()
      {
      // Se declaran todos los pines como salidas
      // Pines asociados a los motores
      pinMode (IN1, OUTPUT);
      pinMode (IN2, OUTPUT);
      pinMode (IN3, OUTPUT);
      pinMode (IN4, OUTPUT);
      pinMode (ENA, OUTPUT);
      pinMode (ENB, OUTPUT);
      pinMode( sensorIzqPin , INPUT) ;
      pinMode( sensorDerPin , INPUT) ;
      Serial.begin(9600); // Se inicia el puerto de comunicaciones en serie
      }

      void loop()
      {

      lecturaSensorIR(); // Se lee el valor de los sensores IR
      // Se analiza el resultado de los sensores para hacer que el robot siga la línea negra

      // Si el resultado de ambos sensores es 0 (zona blanca) el robot sigue se para
      if(lecturaSensorIzq == 1 && lecturaSensorDer == 1)
      {
      robotParar(); // El robot para

      }
      // Si el izquierdo retorna 0 (zona blanca) y el derecho 1 (negra) el robot gira derecha
      if (lecturaSensorIzq == 1 && lecturaSensorDer == 0)
      {
      robotIzquierda();
      // El robot gira a la derecha
      Serial.println("Gira Izquierda");

      }
      // Si el izquierdo retorna 1 (zona negra) y el derecho 0 (blanca) el robot gira izquierda
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 1)
      {
      robotDerecha();


      }
      // Si ambos sensores retornan 0 (zona negra) el robot sigue recto
      if (lecturaSensorIzq == 0 && lecturaSensorDer == 0)
      {
      robotAvance(); // El robot avanza
      Serial.println("robot avanza");
      }

      }
      /*
      Función lecturaSensorIR: leerá el valor del sensor de infrarrojos TCRT5000
      y lo almacena en una variable. Dicho sensor retornará el valor 0 (LOW) si
      el sensor está en zona blanca y el valor 1 (HIGH) si el sensor está en zona
      negra.
      */
      void lecturaSensorIR()
      {
      lecturaSensorIzq = digitalRead(sensorIzqPin); // Almacena la lectura del sensor izquierdo
      lecturaSensorDer = digitalRead(sensorDerPin); // Almacena la lectura del sensor derecho

      Serial.println("El valor del sensor izquierdo es ");
      Serial.println(lecturaSensorIzq);

      Serial.println("El valor del sensor derecho es ");
      Serial.println(lecturaSensorDer);
      }
      /*
      Función robotAvance: esta función hará que ambos motores se activen a máxima potencia
      por lo que el robot avanzará hacia delante
      */
      void robotAvance()
      {
      // Motor izquierdo
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel); //Velocidad motor A

      // Motor derecho
      // Al mantener un pin HIGH y el otro LOW el motor gira en un sentido
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel); //Velocidad motor B
      }

      /*
      Función robotDerecha: esta función acccionará el motor izquierdo y parará el derecho
      por lo que el coche girará hacia la derecha (sentido horario)
      */
      void robotDerecha()
      {
      // Motor izquierdo
      // Se activa el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel3); //Velocidad motor A

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel4); //Velocidad motor A

      }
      /*
      Función robotIzquierda: esta función acccionará el motor derecho y parará el izquierdo
      por lo que el coche girará hacia la izquierda (sentido antihorario)
      */
      void robotIzquierda ()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, HIGH);
      digitalWrite (IN2, LOW);
      analogWrite (ENA, vel4); //Velocidad motor A

      // Motor derecho
      // Se activa el motor derecho
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
      analogWrite (ENB, vel3); //Velocidad motor A
      }
      /*
      Función robotParar: esta función parará ambos motores
      por lo que el robot se parará.
      */
      void robotParar()
      {
      // Motor izquierdo
      // Se para el motor izquierdo
      digitalWrite (IN1, LOW);
      digitalWrite (IN2, LOW);

      // Motor derecho
      // Se para el motor derecho
      digitalWrite (IN3, LOW);
      digitalWrite (IN4, LOW);

      }