
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).

