# 5. Robótica

# Robótica

En esta capítulo vamos a dar movimiento a nuestro Arduino.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-hmgyymnh.png)

Si tienes dudas técnicas en este capítulo pon un ticket a http://soporte.catedu.es/ y te ayudaremos:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-ycve4xrc.gif)

# Servomotores

Una de las aplicaciones más utilizadas de los sistemas de control por ordenador y en la robótica están asociados con los motores, que permiten accionar o mover otros componentes, como puertas, barreras, válvulas, ruedas, etc. Uno de los tipos que vamos a ver en este capítulo son lo servos, hay de dos tipos:

- El **servomotor** o **servos convencionales** que posee la capacidad de posicionar su eje en un ángulo determinado entre 0 y 180 grados en función de una determinada señal.
- **Servo de rotación continua** Son servos por fuera igual que los anteriores, pero pueden girar 360º y se controlan por tiempo

<p class="callout info">Por defecto cuando se dice **servo**, es un **servomotor o servo convencional**</p>

#### <span style="color: rgb(22, 145, 121);">**Servos de rotación continua**</span>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-lbl316vf.png)

Para controlar un servo de rotación continua, las instrucciones a realizar son :

- Incluyes la librería de servos **\#include &lt;Servo.h&gt;**
- Declaras una variable servo **Servo myservo;** //puedes poner el nombre que quieras p.e. miservo
- En *setup()* tienes que decir a qué pin está conectado **myservo.attach(9);** //por ejemplo pin 9
- Y en *loop()*
    - **myservo.write(90)**; //significa servo parado
    - **myservo.write(180);** //significa servo funcionando al 100% en el sentido de las agujas del reloj
    - **myservo.write(0);** //significa servo funcionando al 100% en el sentido contrario de las agujas del reloj

Mira el vídeo, esta realizado con otra shield ECHIDNA y con bloques mBlock (curso Echidna https://libros.catedu.es/books/echidna/ ) fíjate como:

- Los extremos 0º y 180º es a máxima velocidad, pero un sentido u otro.
- 90º es parado.
- Un valor intermedio es menos velocidad (se ve el ejemplo 80º y 100º) -
- Si tiene deriva, (cosa frecuente) tienen un potenciómetro para ajustar.

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--4" src="//www.youtube.com/embed/Z-5SerXmRY0" width="560"></iframe>

<p class="callout success">Si quieres saber más sobre servomotores te recomendamos estas paginas del Zaragozano Luis LLamas: [Servomotores](https://www.luisllamas.es/controlar-un-servo-con-arduino/) convencionales y Servomotores de [rotación continua](https://www.luisllamas.es/controlar-un-servo-de-rotacion-continua-con-arduino/)</p>

#### <span style="color: rgb(22, 145, 121);">**Servomotores o servos convencionales**</span>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-aizawsea.png)

Los servos son un tipo especial de motor en el que se añade una circuito lógico electrónico que permite un control mucho más preciso que a un motor normal de corriente continua. Esto les permite posicionar el eje en un ángulo determinado.

El hardware interno se compone de un potenciómetro y un circuito integrado que controlan en todo momento los grados que gira el motor. De este modo, en nuestro caso, desde Arduino, usando las salidas digitales PWM podremos controlar fácilmente un servo. Lo ideal es conectarlo a 6V pero trabajan bien en los 5V del Arduino.

Hay muchos modelos, en robótica educativa cuestan entre 1-5€, el más común es el SG90, muy barato, pero tiene muy poca fuerza, el MG90S tiene algo más, si queremos algo más, ya tiene que ser el MG996R pero ya este modelo **NO se puede conectar directamente al Arduino o Raspberry,** el pico de energía que necesita, provoca el reinicio de la placa. Incluso varios pequeños SG90.

Las instrucciones son las mismas que los servos de rotación continua, pero los valores que se proporcionan son los grados que se desean.

- Incluyes la librería de servos **\#include &lt;Servo.h&gt;**
- Declaras una variable servo **Servo myservo;** //puedes poner el nombre que quieras p.e. miservo
- En *setup*() tienes que decir a qué pin está conectado **myservo.attach(9);** //por ejemplo pin 9
- Y en *loop*() 
    - **myservo.write(90)**; //Posición 90º (posición por defecto)
    - **myservo.write(180);** //Posición 180º
    - **myservo.write(0);** // Posición 0º

La instrucción *myservo.write(angulo)* envía por el pin digital declarado en *myservo.attach()* pulsos cuadrados de 50Hz y de anchura el estado alto proporcional al ángulo que se desea.

- Un pulso de 0.5-1ms es 0º
- Un pulso de 1.5 ms es 90º
- Un pulso de 2-2.5ms es 180º

Si quieres saber más, te recomendamos [https://www.luisllamas.es/controlar-un-servo-con-arduino/](https://www.luisllamas.es/controlar-un-servo-con-arduino/)

<div class="sketchfab-embed-wrapper" id="bkmrk-"><iframe allow="autoplay; fullscreen; xr-spatial-tracking" allowfullscreen="allowfullscreen" frameborder="0" src="https://sketchfab.com/models/6e5ff0e57708426b87ea8cf2edfbb2cc/embed" title="Arduino Servomotor"> </iframe>

</div>[ Arduino Servomotor ](https://sketchfab.com/3d-models/arduino-servomotor-6e5ff0e57708426b87ea8cf2edfbb2cc?utm_medium=embed&utm_campaign=share-popup&utm_content=6e5ff0e57708426b87ea8cf2edfbb2cc) by [ Marco De Simone ](https://sketchfab.com/marcodesimone888?utm_medium=embed&utm_campaign=share-popup&utm_content=6e5ff0e57708426b87ea8cf2edfbb2cc) on [Sketchfab](https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6e5ff0e57708426b87ea8cf2edfbb2cc)

# Control de servomotores

#### <span style="color: rgb(22, 145, 121);">**Montaje 25: Testea tu servo (servomotor)**</span>

En el siguiente programa de testeo [(fuente: forum arduino](http://forum.arduino.cc/index.php?topic=118333.0)) vamos a probar el servo.

- Conecta el servo al pin 7
- Utiliza el puerto serie para teclear el ángulo que quieras con el teclado de tu ordenador.
- No queremos que entiendas todo el código, pues el puerto serie lee es caracteres ASCII y tiene que convertir el carácter a ángulos.
- Si tecleas un valor más grande de 500 se le indica al servo no el ángulo que se tiene que mover, sino cuanto tiempo en ms se tiene que mover.

##### <span style="color: rgb(22, 145, 121);">**Montaje 25: Conexión sin Edubásica**</span>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-afnslx2w.png)

La conexión se realiza mediante 3 cables: 2 de alimentación (+5V/GND) y un tercero, conectado por ejemplo el 7 , donde indicaremos los grados que queremos que gire a través de un programa en Arduino.

##### <span style="color: rgb(22, 145, 121);">**Montaje 25: Conexión con Edubásica**</span>

En Edubásica tenemos una forma muy sencilla de conectar un servo a la tarjeta. Lo puedes hacer mediante las clavijas identificadas con JP3. De arriba abajo las conexiones son:

- Señal (pin7)
- +Vin
- GND

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-hnfe9emd.png)

Recuerda que siempre puedes utilizar los pines analógicos como E/S digitales, del pin 14 al 19.

Por ejemplo, puedes conectar el servo al pin analógico 5, pero declarado como digital en el 19.

##### <span style="color: rgb(22, 145, 121);">**Montaje 25: video**</span>

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--3" src="//www.youtube.com/embed/b7JWiL-tucg?rel=0" width="560"></iframe>

Por ejemplo en este Servo **HD-1440A** con el anterior programa se ve que es un servo barato:

- No puede hacer ángulos de +180º luego es un servo convencional
- No puede hacer ángulos de menos de 10º no llega a parar, o sea tiene deriva.

Si eliges uno un poco más caro como el **MG90S** no tiene estos problemas en los extremos. [Ver](https://catedu.github.io/programa-arduino-con-echidna/55-rele.html)

##### <span style="color: rgb(22, 145, 121);">**Montaje 25: simulación**</span>

Aquí lo tienes simulado en Tinkercad [https://www.tinkercad.com/things/4FQNFOdoS8Z-25testeatuservo](https://www.tinkercad.com/things/4FQNFOdoS8Z-25testeatuservo)

<iframe frameborder="0" height="453" marginheight="0" marginwidth="0" scrolling="no" src="https://www.tinkercad.com/embed/4FQNFOdoS8Z?editbtn=1" width="725"></iframe>

Pincha en **simulación** y luego **código**, y encontrarás el cuadro **monitor seri**e donde puedes teclear el ángulo que quieras. Observa al servo cuando pulses Intro

[![servo1arduino.png](https://libros.catedu.es/uploads/images/gallery/2023-12/scaled-1680-/servo1arduino.png)](https://libros.catedu.es/uploads/images/gallery/2023-12/servo1arduino.png)

##### <span style="color: rgb(22, 145, 121);">**Montaje 25: Programa**</span>

[https://create.arduino.cc/editor/javierquintana/1d59ad76-dc4a-4b6d-8238-66ae593ce728/preview](https://create.arduino.cc/editor/javierquintana/1d59ad76-dc4a-4b6d-8238-66ae593ce728/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/1d59ad76-dc4a-4b6d-8238-66ae593ce728/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

#### <span style="color: rgb(22, 145, 121);">**Montaje 26 controlando el servo**</span>

<span style="color: rgb(0, 0, 0);">Vamos a jugar un poco, montar este circuito de tal manera que el servo este haciendo este ciclo</span>

- <span style="color: rgb(0, 0, 0);">Un segundo en su posición inicial 90º</span>
- <span style="color: rgb(0, 0, 0);">Un segundo en 180º</span>
- <span style="color: rgb(0, 0, 0);">Un segundo a 45º</span>

<span style="color: rgb(0, 0, 0);">El programa lo puedes conseguir en el botón Code de la siguiente simulación</span>

<span style="color: rgb(22, 145, 121);">**<iframe frameborder="0" height="453" marginheight="0" marginwidth="0" scrolling="no" src="https://www.tinkercad.com/embed/3sAd2FZ2opr?editbtn=1" width="725"></iframe>** </span>

#### <span style="color: rgb(22, 145, 121);">**Montaje 27 controlando el servo**</span>

<span style="color: rgb(0, 0, 0);">Vamos a simular un motor paso a paso. El servo ahora tiene que pasar de 10º a 180º de 10 en 10 parando 1 segundo en cada paso</span>

<span style="color: rgb(0, 0, 0);"><iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--12" src="//www.youtube.com/embed/IfpJzziVuFw" width="560"></iframe>

</span>

<span style="color: rgb(0, 0, 0);">El programa lo puedes conseguir en el botón Code de la siguiente simulación</span>

<span style="color: rgb(0, 0, 0);"><iframe frameborder="0" height="453" marginheight="0" marginwidth="0" scrolling="no" src="https://www.tinkercad.com/embed/bJlRTA5Lsha?editbtn=1" width="725"></iframe>

</span>

#### <span style="color: rgb(22, 145, 121);">**Montaje 28 servo y potenciómetro**</span>

Podemos probar una aplicación muy importante que está basada en mover el servo según una determinada entrada analógica. Este nos puede ser muy útil si queremos controlar servos por medio de joysticks por ejemplo o cualquier dispositivo que cuente con potenciómetros para realizar un movimiento.

El código está obtenido desde los ejemplos que vienen incluido en la IDE de de Arduino (Knob) que encontrarás en: Archivo-&gt;Ejemplos-&gt;Servo, sólo hemos cambiado esta línea: **myservo.attach(7)**;

Lo que hace este programa es variar la posición del servo enfunción de la posición del potenciómetro que leemos de manera analógica.

Sólo nos queda mapear la lectura para que se mueva de 0 a 180º.

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--15" src="//www.youtube.com/embed/_knaXSFBF_M" width="560"></iframe>

En la siguiente simulación, puedes mover el potenciómetro y ver el resultado<iframe frameborder="0" height="453" marginheight="0" marginwidth="0" scrolling="no" src="https://www.tinkercad.com/embed/gl6syqapJHe?editbtn=1" width="725"></iframe>

# Motores DC

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-zpnrme6m.jpeg)

**Arduino (UNO)** no proporciona corriente suficiente para hacer funcionar, en condiciones "dignas", un motor de corriente continua de los que solemos usar en el aula-taller de Tecnologías (motor DC). Conviene alimentar Arduino con una fuente externa (7 -12 V) para poder proporcionar intensidad necesaria para el par motor requerido en los proyectos.

Existen "shields" o tarjetas que se encajan sobre Arduino y le añaden funciones específicas como mover motores DC.

##### <span style="color: rgb(22, 145, 121);">**Alimentación**</span>

Como vimos en la sección de Alimentación eléctrica de Arduino (ver [https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/hardware)](https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/hardware)) no es recomendable alimentar Arduino, cuando se trabaja con elementos de "alto" consumo como pueden ser los motores DC, con el cable USB. Tenemos la posibilidad de proporcionar más corriente (mA) a través de la conexión jack de Arduino. En el pin Vin tendremos una salida del voltaje que apliquemos por el jack que servirá para alimentar a los motores. Si el motor es pequeño y trabaja sin carga, sí que se puede conectar diréctamente al Arduino.

Recomendamos las siguientes páginas de Luis Llamas: [Tipo de motores](https://www.luisllamas.es/tipos-motores-rotativos-proyectos-arduino/) y [Motores paso a paso](https://www.luisllamas.es/motores-paso-paso-arduino-driver-a4988-drv8825/)

##### <span style="color: rgb(22, 145, 121);">**Montajes que vamos a realizar**</span>

Vamos a controlar los motores de 4 formas:

- Montaje 29 motor con transistor con/sin la shield Edubásica
- Montaje 30 circuito integrado L293 con/sin la shield Edubásica
- Montaje 31 un coche loco con/sin la shield Edubásica
- Montaje 32 un coche teledirigido con el móvil con/sin la shield Edubásica
- Montaje 33 un coche teledirigido con la voz con/sin la shield Edubásica

#### <span style="color: rgb(22, 145, 121);">**Montaje 29 motor con transistor**</span>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-40e42ftq.jpeg)

El transistor es un componente analógico con infinidad de aplicaciones. Como se observa en la imagen, es un dispositivo con tres pines llamados emisor (E), colector (C) y base (B). El funcionamiento a groso modo es sencillo: Si suministramos "cierta" cantidad de corriente al terminal llamado base, entre los terminales emisor y colector circulará una corriente proporcional a la que entra por la base. Puede ser unas 100 veces mayor (este valor dependerá del transistor y se llama ganancia), por lo tanto, lo que tenemos es un amplificador de corriente, o sea, que con una intensidad pequeña podemos obtener una más grande entre los terminales emisor y colector. Si a estos dos terminales conectamos un motor DC conseguiremos hacerlo girar con garantías. Cuando no hay corriente en la base (o es muy pequeña) el colector y emisor están desconectados y no circulará corriente entre ellos.

<p class="callout success">Nuestra propuesta es que realices un montaje de mover un motor a través de un transistor. Que funcione 1 segundo, luego 1 segundo parado y así sucesivamente.</p>

##### <span style="color: rgb(22, 145, 121);">**Montaje 29 Programa motor con transistor**</span>

Este es el programa que te proponemos: [https://create.arduino.cc/editor/javierquintana/c2d6681b-76d7-4231-9f8b-d0110348b7d4/preview](https://create.arduino.cc/editor/javierquintana/c2d6681b-76d7-4231-9f8b-d0110348b7d4/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/c2d6681b-76d7-4231-9f8b-d0110348b7d4/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

##### <span style="color: rgb(22, 145, 121);">**Montaje 29 Esquema de montaje motor con transistor con Edubásica**</span>

La shield de Edubásica ya tiene incorporado el transistor y los diodos de protección para funcionar el motor, para ello tenemos que hacer:

- Poner el interruptor en ON
- Conectar el motor en la salida del transistor y Vin
- Utilizar D6 como pin de control del motor

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-znalqnwc.png)

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--4" src="//www.youtube.com/embed/enfIaqwsDhg" width="560"></iframe>

##### <span style="color: rgb(22, 145, 121);">**Montaje 29 Esquema de montaje motor con transistor sin Edubásica**</span>

Desde Arduino (salida digital) actuamos sobre la base si enviamos un HIGH al pin digital donde la conectemos (pin 6 en el esquema). El transistor tiene que tener suficiente ganancia. Se conecta un diodo de protección en antiparalelo (1N004). Cuando el motor se para las bobinas se desmagnetizan y se descargan de energía eléctrica. El diodo proporciona un camino para su descarga (la energía se disipa en forma de calor en el diodo) y así se evita que sufra el transistor.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-hhxwd6q4.png)

Es decir, sería esta vista :

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-3egvfuae.png)

<p class="callout danger">Importante: NO CONECTES EL MOTOR DIRÉCTAMENTE AL ARDUINO, PODRÍAS DAÑARLO</p>

##### <span style="color: rgb(22, 145, 121);">**Montaje 29 Simulación de montaje motor con transistor sin Edubásica**</span>

<span style="color: rgb(0, 0, 0);">En el momento de realizar este circuito, Tinkercad no tiene un Jack de conexión, luego hemos conectado directamente la pila al Vin</span>

<iframe frameborder="0" height="453" marginheight="0" marginwidth="0" scrolling="no" src="https://www.tinkercad.com/embed/5jwVKqxbivr?editbtn=1" width="725"></iframe>

##### ¿Te atreves?

Otra posibilidad que protege el transistor es, en vez de conectar directamente el motor al colector del transistor, ubicar un relé en esa posición y accionar el motor con alimentación independiente con la conmutación del relé. ¿Te atreves a montar un montaje que active el motor DC mediante un relé conectado al colector del transistor.?

#### <span style="color: rgb(22, 145, 121);">**Montaje 30 motor con Circuito L293**</span>

El circuito integrado L293 permite controlar motores DC de pequeña potencia, pero en general bobinas, o sea cualquier elemento que precise pico de potencia, como los relés, etc.. Para utilizarlo hay que hacer un montaje externo a Arduino, en una placa de pruebas, y alimentar a los motores a través de este circuito integrado.

El CI L293 tiene las siguientes características:

- Se pueden controlar hasta 2 motores.
- Proporciona 1A a los motores (en total) y permite cambiar el sentido de giro.
- Utiliza un puente en H que funciona según se observa en las figuras (internamente utiliza transistores para conmutar\*) :

![](https://libros.catedu.es/img/461px-H_bridge.png)Modos de operación para invertir el sentido de giro:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-gaaqgqkd.png)

"[H bridge operating](https://commons.wikimedia.org/wiki/File:H_bridge_operating.svg#/media/File:H_bridge_operating.svg)" by Cyril BUTTAY - own work, made using inkscape. Licensed under [CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/) via [Wikimedia Commons](//commons.wikimedia.org/wiki/).

<p class="callout success">Nuestra propuesta es que montes el motor utilizando el CI L293 que realice el siguiente ciclo :  
- Giro en un sentido durante 1seg.   
- Paro durante 0.5seg.   
- Giro en sentido contrario durante 1 seg  
- Paro durante 0.5seg.</p>

##### <span style="color: rgb(22, 145, 121);">**Montaje 30 motor con Circuito L293 con Edubásica**</span>

Edubásica es una tarjeta diseñada para facilitar la tarea en el aula. Elimina gran parte de cableado y conexiones en la placa de pruebas lo que evita muchos errores en las prácticas.

En esta placa disponemos de las dos opciones vistas anteriormente. Edubásica lleva montados, entre otros componentes, un circuito integrado L293 y un transistor. Por lo tanto podemos activar motores **usando ambas opciones**, aunque lo recomendable es utilizar el L293 que permite el cambio de sentido de giro y regular la velocidad actuando con una señal PWM sobre los dos pines de habilitación (dependiendo de la hoja de datos viene como ENABLE o CHIP INHIBIT) del circuito L293. Los pines de Arduino que pueden regular la velocidad por PWM correspondientes a esas patillas de habilitación serán: D10 para el motor A y D11 para el motor B.

Para hacer funcionar dos motores DC con Edubásica sólo tenemos que conectar en las clemas indicadas (serigrafiados en la placa como Motor A y Motor B) los dos cables de cada motor. Según se observa en la imagen, tenemos 4 conexiones para los dos motores. Desde Arduino y con la [tabla de verdad](https://libros.catedu.es/sin_edubsica.html) del CI L293 indicada en la sección anterior, podemos regular el sentido de giro y velocidad de cada motor.

Edubásica **lleva un interruptor que permite tomar el voltaje de la salida Vin de Arduino (alimentación externa), necesaria para dar la corriente suficiente para accionar los motores.** Cuando el piloto Vin está encendido significa que la alimentación de Edubásica viene de Vin de Arduino, o bien, directamente desde una fuente externa conectada a la clema Vin de Edubásica de la regleta de alimentación (en la imagen la regleta de la parte inferior).

Es muy fácil, podemos conectar hasta dos motores en los pines dispuestos para ello, y utilizaremos:

- Para el motor A el control de velocidad por el pin 10 y las direcciones por 8 y 9
- Para el motor B el control de velocidad por el pin 11 y las direcciones por 12 y 13.
- Interruptor en ON

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-flq9vw87.png)

Conectando los dos terminales del motor a la clema del transistor de Edubásica, también podríamos hacerlo funcionar enviando un nivel HIGH al pin digital 6 de Arduino. Este pin (D6) está conectado directamente a la base del transistor de Edubásica. La desventaja respecto al CI L293 es que, en este caso, no podríamos cambiar el sentido de giro.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-pacz3rdt.png)

##### <span style="color: rgb(22, 145, 121);">**Montaje 30 motor con Circuito L293 sin Edubásica**</span>

Vamos a ver de qué manera se pueden activar los motores DC para hacer una secuencia sencilla de giro. Primero de todo vamos a ver cómo se conecta todo. Las conexiones del circuito integrado según podemos ver en la hoja de datos del fabricante son las siguientes:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-kylgtrwv.png)

- Vcc2(VC), pin 8 del L293: El voltaje que se introduzca aquí alimentará a los motores (Vin de Arduino).
- Vcc1(VSS), pin 18 del L293: El voltaje que se introduzca aquí alimentará al propio circuito integrado (+5V de Arduino).

Las conexiones del circuito con Arduino las podemos ver en el siguiente esquema:

Para saber la orientación del sentido de giro disponemos de la siguiente tabla de verdad:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-4bk3pxns.png)

##### <span style="color: rgb(22, 145, 121);">**Simulación 30 motor con Circuito L293 sin Edubásica**</span>

<iframe frameborder="0" height="453" marginheight="0" marginwidth="0" scrolling="no" src="https://www.tinkercad.com/embed/k1f3QuzDboV?editbtn=1" width="725"></iframe>

#### <span style="color: rgb(22, 145, 121);">**Montaje 31 Coche loco**</span>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-pk4vfve5.png)

Vamos a darle un poco de emoción

<iframe allowfullscreen="allowfullscreen" class="giphy-embed" frameborder="0" height="264" id="bkmrk--18" src="https://giphy.com/embed/p5P3aRq6wimsM" width="480"></iframe>

[via GIPHY](https://giphy.com/gifs/car-driving-p5P3aRq6wimsM)

<p class="callout success">Te proponemos que realices unos movimientos locos en el coche (los que quieras)</p>

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--29" src="//www.youtube.com/embed/j6Z9botrgdo" width="560"></iframe>

##### <span style="color: rgb(22, 145, 121);">**Montaje 31 chasis coche**</span>

Puedes ver en [esta página de Luis Llamas ](https://www.luisllamas.es/coche-robot-barato-con-arduino-presupuesto/) cómo hacer un coche teledirigido puede salir por menos de 20€, nosotros como ya tenemos el L298N integrado en **Edubasica**, sólo hemos comprado el [chasis](https://es.aliexpress.com/item/Free-shipping-Smart-car-chassis-Tracing-car-The-robot-car-chassis-With-code-disc-tachometer-Four/32554236304.html) por 7€ y no vamos a poner sensor ultrasonidos y sensor de línea:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-opcsrckt.png)

Si quieres hacerlo todo terreno [Luis Llamas te explica cómo hacerlo con cadenas](https://www.luisllamas.es/arduino-robot-cadenas/).

##### <span style="color: rgb(22, 145, 121);">**Montaje 31 coche loco con Edubásica: Conexiones**</span>

Las conexiones son muy sencillas:

- Pines motor A al conector pines motor A de Edubásica
- Pines motor B al conector pines motor B de Edubásica
- Cables de las pilas a Vin y GND

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-avlc4bk9.png)

<p class="callout info">NOTA: Si funciona pero ves que las ordenes están cambiadas (es decir que queremos que gire a la izquierda y va hacia delante, queremos que vaya hacia delante y gira a la izquierda...) es debido a que tenemos los cables rojo y negro de un motor intercambiados.</p>

##### Ordenes

Estos son los pines que hay que activar:

<table id="bkmrk-orden-motor-a-motor-"><thead><tr><th>Orden</th><th>Motor A</th><th>Motor B</th></tr></thead><tbody><tr><td>Velocidad</td><td>10</td><td>11</td></tr><tr><td>Dirección 1</td><td>8</td><td>12</td></tr><tr><td>Dirección 2</td><td>9</td><td>13</td></tr></tbody></table>

La tabla de verdad es muy fácil:

**MOTOR A**

<table id="bkmrk-pin-10-pin-8-pin-9-m"><thead><tr><th>Pin 10</th><th>Pin 8</th><th>Pin 9</th><th>Motor A</th></tr></thead><tbody><tr><td>HIGH</td><td>HIGH</td><td>LOW</td><td>giro</td></tr><tr><td>HIGH</td><td>LOW</td><td>HIGH</td><td>giro contrario</td></tr><tr><td>LOW</td><td>X</td><td>X</td><td>STOP</td></tr></tbody></table>

**MOTOR B**

<table id="bkmrk-pin-11-pin-12-pin-13"><thead><tr><th>Pin 11</th><th>Pin 12</th><th>Pin 13</th><th>Motor B</th></tr></thead><tbody><tr><td>HIGH</td><td>HIGH</td><td>LOW</td><td>giro</td></tr><tr><td>HIGH</td><td>LOW</td><td>HIGH</td><td>giro contrario</td></tr><tr><td>LOW</td><td>X</td><td>X</td><td>STOP</td></tr></tbody></table>

##### Ampliaciones posibles

Recuerda que en el transistor aún puedes poner otro motor. Respecto a terminales digitales, te quedan pines para poner servos, sensor de ultrasonidos, sensor de líneas...

##### <span style="color: rgb(22, 145, 121);">**Montaje 31 coche loco sin Edubásica: Conexiones**</span>

Tenemos que comprar el chasis anterior y además un [L298N, recomendamos ver esta página de Luis Llamas](https://www.luisllamas.es/arduino-motor-corriente-continua-l298n/)

[![embedded-image-5fb9ciab.png](https://libros.catedu.es/uploads/images/gallery/2023-12/scaled-1680-/embedded-image-5fb9ciab.png)](https://libros.catedu.es/uploads/images/gallery/2023-12/embedded-image-5fb9ciab.png)

La circuitería se complica, pues necesitamos cablear los pines de control:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-xiy5fsa1.png)

<p class="callout danger">Recuerda: Siempre **pon en común las masas GND.** En caso contrario puedes romper la placa Arduino y también el L298</p>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-bqbmzqxj.png)

##### Ordenes

Para respetar los mismos programas que Luis Llamas, estos son los pines que hay que activar:

<table id="bkmrk-orden-motora-motorb-"><thead><tr><th>Orden</th><th>MotorA</th><th>MotorB</th></tr></thead><tbody><tr><td>Velocidad</td><td>6</td><td>11</td></tr><tr><td>Dirección 1</td><td>7</td><td>9</td></tr><tr><td>Dirección 2</td><td>8</td><td>10</td></tr></tbody></table>

La tabla de verdad es muy fácil:

**MOTOR A**

<table id="bkmrk-pin-6-pin-7-pin-8-mo"><thead><tr><th>Pin 6</th><th>Pin 7</th><th>Pin 8</th><th>MotorA</th></tr></thead><tbody><tr><td>HIGH</td><td>HIGH</td><td>LOW</td><td>giro</td></tr><tr><td>HIGH</td><td>LOW</td><td>HIGH</td><td>giro contrario</td></tr><tr><td>LOW</td><td>X</td><td>X</td><td>STOP</td></tr></tbody></table>

**MOTOR B**

<table id="bkmrk-pin-11-pin-9-pin-10-"><thead><tr><th>Pin 11</th><th>Pin 9</th><th>Pin 10</th><th>MotorB</th></tr></thead><tbody><tr><td>HIGH</td><td>HIGH</td><td>LOW</td><td>giro</td></tr><tr><td>HIGH</td><td>LOW</td><td>HIGH</td><td>giro contrario</td></tr><tr><td>LOW</td><td>X</td><td>X</td><td>STOP</td></tr></tbody></table>

##### <span style="color: rgb(22, 145, 121);">**Montaje 31 coche loco con** <span style="color: #169179;">**Edubásica**</span>**: Código**</span>

<span style="color: rgb(0, 0, 0);">El código es sencillo pero engorroso. Sólo hemos utilizado la función inicial SETUP de tal manera que sólo lo ejecuta una vez. LOOP lo hemos dejado vacío</span>

<span style="color: rgb(0, 0, 0);">[https://create.arduino.cc/editor/javierquintana/761d52b7-9cef-4af9-9061-8c405888da7d/preview](https://create.arduino.cc/editor/javierquintana/761d52b7-9cef-4af9-9061-8c405888da7d/preview)</span>

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/761d52b7-9cef-4af9-9061-8c405888da7d/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

##### <span style="color: rgb(22, 145, 121);">**Montaje 31 coche loco sin** <span style="color: #169179;">**Edubásica**</span>**: Código**</span>

Cambia el principio de la cabecera, y omitiendo los LEDs:

```cpp+lineNumbers:true
////////////// SIN EDUBASICA ////////////////
#define ENABLEA 6
#define DIR1A 7
#define DIR2A 8
#define ENABLEB 11
#define DIR1B 9
#define DIR2B 10
```

[https://create.arduino.cc/editor/javierquintana/af7ee63f-e189-4ca2-85e7-09fa3c9abfdc/preview](https://create.arduino.cc/editor/javierquintana/af7ee63f-e189-4ca2-85e7-09fa3c9abfdc/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/af7ee63f-e189-4ca2-85e7-09fa3c9abfdc/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

<p class="callout info">**Reto**: ¿Qué tal si en vez de activarse con el botón, que simplemente cuando este oscuro (utiliza el valor del pin analógico 2 = LDR), se ponga a bailar?</p>

#### <span style="color: rgb(22, 145, 121);">**Montaje 32 Coche teledirigido**</span>

Sé que lo estabas pensando... ponerle [el Bluetooth](https://libros.catedu.es/mdulo_bluetooth.md), vamos allá:

<p class="callout success">Realizar un coche teledirigido por Bluetooth con las siguientes órdenes  
- U = Up hacia delante  
- D = Down hacia atrás  
- L = Left giro a la izquierda  
- R = Right giro a la derecha  
- S = Stop paro</p>

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--31" src="//www.youtube.com/embed/_cn9sSBwZXA" width="560"></iframe>

<p class="callout warning">OJO, para realizar este ejercicio tienes que vincular el HC-06 con la APP, vincularlo, poner el HC-06 pero quitarlo cuando se carga el programa... etc. ¿no te acuerdas? : A repasar lo anterior.</p>

<p class="callout info"><span style="color: rgb(0, 0, 0);">Las conexiones son las mismas que el montaje 31</span></p>

##### <span style="color: rgb(22, 145, 121);">**Montaje 32 Coche teledirigido código con Edubásica**</span>

[https://create.arduino.cc/editor/javierquintana/d89d0168-fd8a-42ff-ad5f-f0c9e0da9266/preview](https://create.arduino.cc/editor/javierquintana/d89d0168-fd8a-42ff-ad5f-f0c9e0da9266/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/d89d0168-fd8a-42ff-ad5f-f0c9e0da9266/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

##### <span style="color: rgb(22, 145, 121);">**Montaje 32 Coche teledirigido código sin Edubásica**</span>

Cambia el principio de la cabecera, y omite los LEDs:

[https://create.arduino.cc/editor/javierquintana/38a32560-c6ea-499f-8579-87edf60ddd55/preview](https://create.arduino.cc/editor/javierquintana/38a32560-c6ea-499f-8579-87edf60ddd55/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/38a32560-c6ea-499f-8579-87edf60ddd55/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

<iframe allowfullscreen="allowfullscreen" class="giphy-embed" frameborder="0" height="274" id="bkmrk--33" src="https://giphy.com/embed/l3vQYPi2ow7YWXQFW" width="480"></iframe>

[via GIPHY](https://giphy.com/gifs/aardman-fun-cartoon-l3vQYPi2ow7YWXQFW)

<iframe allowfullscreen="allowfullscreen" class="giphy-embed" frameborder="0" height="270" id="bkmrk--35" src="https://giphy.com/embed/bXgimR7bxcHAc" width="480"></iframe>

[via GIPHY](https://giphy.com/gifs/arduino-arducar-car-bXgimR7bxcHAc)

#### Coche teledirigido con voz

¿Y si ahora lo controlamos por voz?

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--37" src="//www.youtube.com/embed/fj2cwYS2KvY" width="560"></iframe>

#### Solución

**¡¡ Es el mismo código que el anterior !!!**

Lo que pasa es en la aplicación [Arduino Blue Control](https://libros.catedu.es/la_app.md) utilizamos en vez del mando con flechas, el control de voz. **[Easy-peasy](http://www.wordreference.com/es/translation.asp?tranword=easy-peasy)** !!

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-2oopqshn.png)

Y previamente hemos configurado los comandos de voz:

<table id="bkmrk-orden-de-voz-comando"><thead><tr><th>Orden de voz</th><th>Comando a enviar</th></tr></thead><tbody><tr><td>adelante</td><td>U</td></tr><tr><td>atrás</td><td>D</td></tr><tr><td>derecha</td><td>R</td></tr><tr><td>izquierda</td><td>L</td></tr><tr><td>stop</td><td>S</td></tr></tbody></table>

Total 5 comandos de voz a configurar:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-6bpxynov.png)

# Barrera

Vamos ahora a realizar UN PROYECTO donde englobamos varios de los elementos que hemos visto en este curso, algo que visualmente tenga un sentido práctico y motivador en el alumnado

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-veryx5f3.jpeg)

Utilizaremos:

- Placa Shield de Edubásica (optativo) por facilitar las conexiones
- Servo motor
- Dos sensores de ultrasonidos
- Módulo Bluetooth
- Imaginación y maña

#### <span style="color: rgb(22, 145, 121);">**Montaje 33 Barrera por Bluetooth**</span>

<p class="callout success">Retp 33  
El propósito es que cuando se pulse la flecha arriba de la [APP DEL MOVIL](https://libros.catedu.es/la_app.md) la barrera suba y se enciende la luz verde, y cuando se pulsa la flecha abajo, baje la barrera y se enciende la luz roja, esta es una manera eficaz de que nadie entre en el recinto si no está autorizado, y que mejor que con una aplicación móvil.</p>

##### <span style="color: rgb(22, 145, 121);">**Montaje 33 Barrera por Bluetooth sin** </span><span style="color: #169179;"><span style="font-size: 23.324px;">**Edubásica**</span></span>

Hay que utilizar el esquema del servo

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-jy7v3o8k.png)

y el esquema del Bluetooth **a la vez**

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-hnk7usvh.png)![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-dk3mhw0q.png)

##### <span style="color: rgb(22, 145, 121);">**Montaje 33 Barrera por Bluetooth con** </span><span style="color: #169179;"><span style="font-size: 23.324px;">**Edubásica**</span></span>

Nos simplifica el cableado, conectando el módulo Bluetooth en el zócalo correspondiente [tal y como vimos](https://libros.catedu.es/mdulo_bluetooth.html)

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-rkjnplw3.png)

Con piezas de lego fijamos el servo y le añadimos un cartón que simule una barrera. El pin del servo lo conectaremos **en el 7 de Edubásica**, el Vcc y G a Vin y masa.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-jgooipd2.png)

La configuración de los ángulos de abierto y cerrado depende en qué posición atornillamos la barrera, luego lo mejor es probarlo con el MONTAJE 25 TESTEA TU SERVO y en nuestro caso nos sale que 40º es abierto y 140º es cerrado.

![Detalle de la unión barrera hecha con cartón y el servo, sujetado con piezas de lego y la barrera utilizando el accesorio cruz del servo y atado con un hilo de cobre](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-s4bncc4c.jpeg)

##### <span style="color: rgb(22, 145, 121);">**Montaje 33 Barrera por Bluetooth VIDEO**</span>

- No hagas caso de los sensores de ultrasonidos por ahora, corresponde al siguiente montaje
- No desmontes las conexiones, te servirán para el siguiente montaje.

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--6" src="//www.youtube.com/embed/tg0k7ZHvmCg?rel=0" width="560"></iframe>

##### <span style="color: rgb(22, 145, 121);">**Montaje 33 Barrera por Bluetooth CODIGO**</span>

El programa en el Arduino es el siguiente:

[https://create.arduino.cc/editor/javierquintana/e8bdf8fc-b5b8-4e27-8207-07ab3ccf6222/preview](https://create.arduino.cc/editor/javierquintana/e8bdf8fc-b5b8-4e27-8207-07ab3ccf6222/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/e8bdf8fc-b5b8-4e27-8207-07ab3ccf6222/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

#### <span style="color: rgb(22, 145, 121);">**Montaje 34 Barrera por sensores ultrasonidos**</span>

Ahora **le añadimos**  *(esperamos que no hayas desmontado el montaje anterior)* dos sensores de ultrasonidos, si detecta el coche a la entrada de la barrera, se enciende la luz amarilla en espera que el coche pueda abrir con el móvil.

<p class="callout success">Reto 34  
-Una vez recibido el código de abrir barrera, se abre y se enciende la luz verde.  
Una vez cruzado el coche, lo detecta el ultrasonido de la salida que cerrará la barrera poniendo el semáforo en rojo otra vez.</p>

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--9" src="//www.youtube.com/embed/nlnxai_u360?rel=0" width="560"></iframe>

La configuración de pines de los ultrasonidos que hemos elegido: (se omite la alimentación +5V y GND por simplificar la ilustración)

[![arduinobarrerabtus.png](https://libros.catedu.es/uploads/images/gallery/2023-12/scaled-1680-/arduinobarrerabtus.png)](https://libros.catedu.es/uploads/images/gallery/2023-12/arduinobarrerabtus.png)

- ULTRASONIDOS DE ENTRADA 
    - Trig = 4
    - echo = 2
- ULTRASONIDOS DE SALIDA 
    - Trig = 6
    - echo = 5
- Servo 
    - Pin = 7

Los sensores de ultrasonidos ocupan algunos pines de los semáforos, pero no hay problemas, si te fijas en el código, en un momento dado se manda un pulso y en otro momento se recoge, se calcula la distancia y se visualiza el semáforo, sin entrar en contradicción.

<p class="callout info">El programa por supuesto es mejorable (tiene fallos a ver si los adivinas).</p>

[https://create.arduino.cc/editor/javierquintana/5e4fd64c-bbbc-4878-bbcf-8acb61871040/preview](https://create.arduino.cc/editor/javierquintana/5e4fd64c-bbbc-4878-bbcf-8acb61871040/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/5e4fd64c-bbbc-4878-bbcf-8acb61871040/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

## FINNNN

Esperamos que este curso, no sólo te has formado, sino que has disfrutado. Cualquier sugerencia, cambio, propuesta, fallos... puedes hacerlo en [www.catedu.es](https://www.catedu.es) en la sección de SOPORTE o INFORMACÓN ¡¡gracias!!!