# 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>