
Descrición:
Imos controlar a posición dun servo de rotación estándar mediante programación.
Utilizaremos un microservo SG90
Montaxe:
Conexión: Aínda que depende de cada fabricante, en xeral o cable vermello vai a 5V, o negro/marrón a terra (GND) e o branco/amarelo/laranxa é o que recibe o sinal do pin arduino. Imos conectalo ao pin 9.
![]() |
![]() |
Se no canto dun microservo utilizas un servo máis potente non o conectes aos 5V da placa e utiliza alimentación externa.
Control da posición:
A posición do servo contrólase a través do envío de pulsos en anchura (PWM). Segundo a duración do pulso obtemos diferentes posicións do eixe do servo. Porén, dependendo do servo que se utilice e do ciclo útil do mesmo podemos necesitar realizar cálculos para axustar a posición.

Programación:
#include <Servo.h> | Inclúe a librería “servo” para poder utilizar as funcións que contén. Sketch -> Importar Libraría -> Servo |
Servo meuservo; | Crea unha variable co nome do servo |
meuservo.attach(Pin); | Indica en que pin está conectado o servo. |
meuservo.write(ángulo); | Sitúa o eixe do servo na posición indicada. |
Programas:
1. Xirar un ángulo
1. Xirar un ángulo determinado: Podemos controlar exactamente a posición (ángulo) que queremos que teña o servo en cada momento
// Importamos a librería servo #include <Servo.h> // Declaración de variables: Servo meuservo; // poñémoslle nome ao servo: "meuservo" // Configuración: void setup(){ meuservo.attach(6); // Indicamos que está conectado no pin 6 } // Programa: void loop(){ meuservo.write(0); // Móvese ata a posición de 0º delay (2000); meuservo.write(180); // Móvese ata a posición de 180º delay (2000); meuservo.write(90); // Móvese ata a posición de 90º delay (2000); }
2. Pouco a pouco
2. Pouco a pouco: Imos facer que un servo xire lentamente ata unha posición e despois cambie rapidamente á posición de partida.
#include <Servo.h> // Importamos a librería servo // Declaración de variables: Servo meuservo; // poñémoslle nome ao servo: "meuservo" // Configuración: void setup(){ meuservo.attach(6); // Indicamos que está conectado no pin 6 } // Programa: void loop(){ meuservo.write(0); // Parte da posición de 0º delay (2000); for(int i=1;i<=120;i++){ // Móvese pouco a pouco ata 120º meuservo.write(i); delay (50); } delay (1000); }
3. Control con pulsadores
3. Control con pulsadores: imos facer que cada vez que prememos nun pulsador o servo se mova ata a posición correspondente a cada un deles.
#include <Servo.h> // Importamos a librería servo // Declaración de variables: int pulsador0 = 2; // Pin 2 asignado a un pulsador int pulsador180 = 3; // Pin 3 asignado a outro pulsador Servo meuservo; // Poñémoslle nome ao servo // Configuración: void setup() { meuservo.attach(6); // Servo conectado no pin 6 } // Programa: void loop() { if (digitalRead(pulsador0) == 1){ // Se o pulsador0 esta premido meuservo.write(0); // O servo xira ata a posición 0º delay (500); } if (digitalRead(pulsador180) == 1){ // Se o pulsador180 esta premido meuservo.write(180); // O servo xira ata a posición 180º delay (500); } }
Propostas:
- Ao chou: Fai un programa de xeito que o servo xire a distintas posicións elixidas ao chou. Utiliza a función random. Por exemplo:
chou=random(0,180); // dá un valor ao aleatorio entre 0 e 180.
- Cal é a súa posición?: Engade o necesario aos programas anteriores para visualizar na consola a posición na que se atopa o servo.
- Pouco a pouco: Fai un programa que funcione de xeito que cando prememos nun pulsador o servo xira 10º nun sentido e cando prememos noutro pulsador xira 10º en sentido contrario. Introduce os límites de 0 e 180º.
Extras:
- Orientación automática. Fai unha placa solar que se oriente automaticamente cara onde maior sexa a luminosidade. Utiliza dúas fotorresistencias para medir a luz nos laterais. Un servo fará xirar a placa no sentido axeitado ata que a luz incidente sexa a mesma nas dúas LDRs (ou nun rango próximo).