Descrición:
Imos mover un servo en función da posición do cursor dun potenciómetro conectado a unha entrada analóxica.
Montaxe:
Conectamos o servo ao pin 9 e un potenciómetro á entrada analóxica A0
![]() |
![]() |
Programas:
1. control con map
1. control con map: Imos transformar o valor lido na entrada analóxica (pot) nun valor de xiro para o servo utilizando a función map.
#include <Servo.h> // Importamos a librería servo
// Declaración de variables
int pot=0; // variable que le o valor do potenciómetro, entre 0 e 1023
int xiro=0; // variable que enviamos ao servo, entre 0 e 180
Servo meuservo;
// Configuración
void setup(){
meuservo.attach(9); // Servo conectado no pin 9
meuservo.write(xiro); // Inicialmente na posición de 0º
}
// Programa:
void loop() {
pot = analogRead(A0); // Asignamos a variable "pot" ao valor lido en A0
xiro = map(pot,0,1023,0,180); // Calculamos o valor correspondente para o xiro
meuservo.write(xiro); // facemos xirar o servo ata a posición xiro
delay(20);
}
2. control con variación
2. control con variación: Imos controlar o xiro do servo establecendo unha variación no ángulo de xiro no canto de facer a conversión desde o valor analóxico ao xiro. Deste xeito non controlamos con precisión a posición do servo, pero podemos movelo de forma máis fluída.
#include <Servo.h> // Importamos a librería servo
// Declaración de variables:
Servo servo1;
int pot; // variable que le o valor do potenciómetro do eixe X, entre 0 e 1023
int xiro=90; // variable que enviamos ao servo1, entre 0 e 180
int variacion=3; // O valor que sumamos ou restamos ao xiro cada vez que se move o potenciómetro.
// Configuración:
void setup() {
servo1.attach(6); // Servo1 conectado no pin 6
Serial.begin(9600);
}
// Programa:
void loop() {
// Control do servo1 co potenciómetro do eixe X
// A valores do EixeX menores que 400 desconta graos e a maiores de 600 aumenta os graos de xiro.
pot = analogRead(A0); // Asignamos a variable "pot" ao valor lido en A0
if (pot<400){
xiro=xiro-variacion;
if(xiro<0){ // Evitamos que o xiro que envíe sexa menor que cero.
xiro=0;
}
}
else if(pot>600){
xiro=xiro+variacion;
if (xiro>180){ // Evitamos que o xiro que envíe sexa maior que 180
xiro=180;
}
}
Serial.println("Xiro="+String(xiro));
servo1.write(xiro);
delay(50); // Con este tempo establecemos a velocidade
}
Proposta:
- Ventá automática: Supón que a apertura dunha ventá está controlada por un servo de xeito que cando hai moita luz no exterior a ventá se pecha e cando hai pouca se abre, mantendo sempre unha luminosidade constante no interior. Conecta unha LDR nunha entrada analóxica e fai que un servo de mova en función da luz incidente.

