Documentos de Académico
Documentos de Profesional
Documentos de Cultura
LABORATORIO N° 2
EL SERVO MOTOR
1.OBJETIVO.- Entre los objetivos del laboratorio están:
Estudiar el servomotor (SG90 ó LSG 90)
Aplicar el Microcontrolador Arduino Uno en el control de servomotores
Utilizar la librería servo.h del Entorno IDE de ARDUINO para el control de servomotores
2.TEORIA.-
Un servomotor es un actuador que tiene la capacidad de ubicarse en una posición estable dentro de un
rango determinado de operación. Los servomotores son utilizados normalmente para tareas de ubicación
de posición como ser: abrir o cerrar cerraduras, control de seguimiento de paneles solares, control de brazos
robóticos, etc. Normalmente el eje del servomotor gira hasta 180°, aunque hoy en día es posible encontrar
servos que giren 360°, hacia la derecha e izquierda. Como se ve en la figura 1.1
Para la adquisición de un servomotor, se debe tener en claro los requerimientos a necesitar de este, por
lo tanto, las características que se debe tener en cuenta a la hora de su compra deben ser acorde a las
especificaciones otorgadas en la hoja del fabricante, las cuales son:
Peso del servomotor
Dimensiones
Torque
Velocidad de operación
Voltaje de operación Un servomotor consta de las siguientes partes:
Motor DC
Sistema de engranajes
Potenciómetro
Circuito de control Como se ve en la figura 2, un servomotor consta de partes electrónica, mecánicas y
eléctricas.
Lo que significa que un servomotor constituye un sistema completo.
1
MICROCONTROLADORES ARDUINO Ing Felix Castillo Muñoz
Funcionamiento: En general los servomotores tienen tres cables, los cuales son:
Voltaje de alimentación VCC
Tierra común GND
Señal de control
Normalmente los colores de los cables dispuestos por los fabricantes, son los siguientes: Figura 3:
2
MICROCONTROLADORES ARDUINO Ing Felix Castillo Muñoz
La señal PWM será la encargada de controlar la posición del eje del servomotor, por lo tanto, se debe
establecer la frecuencia de la señal y además el ciclo de trabajo (duty cycle), como se ve en la figura 5.
Figura 5: El Duty cycle es quien va a establecer la posición del servomotor como se ve la figura 6:
Manejo del actuador SERVO MOTOR programación. Se debe establecer las respectivas conexiones de
alimentación del servomotor, para la señal de control se debe tener en cuenta que esta debe estar
conectada a un pin que sea capaz de ofrecer una señal PWM. En el Arduino Uno, el pin 2 ofrecen una
salida PWM, por lo que se debe conectar el pin de señal de control en uno de estos.
En este caso se utilizará el servomotor SG90. De su hoja de datos tenemos las siguientes
características:
3
MICROCONTROLADORES ARDUINO Ing Felix Castillo Muñoz
𝑻𝒐𝒏
𝑫𝒖𝒕𝒚 𝑪𝒚𝒄𝒍𝒆 = ∗ 𝟏𝟎𝟎
𝑻𝒐𝒏 + 𝑻𝒐𝒇𝒇
𝟐. 𝟒
= ∗ 𝟏𝟎𝟎
𝟐. 𝟒 + (𝟐𝟎 − 𝟐. 𝟒)
= 𝟏𝟐
𝐷𝑢𝑡𝑦 𝐶𝑦𝑐𝑙𝑒 = 12
4
MICROCONTROLADORES ARDUINO Ing Felix Castillo M.
3. MATERIALES.-
3. Un protoboard
4. Un servomotor SG90
5. Un potenciómetro de 10 K
4. LABORATORIO.-
L1. Armar el circuito de la figura 1, la señal de control del servomotor se conecta al PIN 2 de la
salida DIGITAL, De la placa del Arduino, conectar la tierra GND y 5V al protoboard y de este al
servomotor ( GND y Vcc=5V) además de los extremos del potenciómetro, el punto medio del
potenciómetro se conecta a la entrada A0 del puerto de entrada ANALOG IN del
microcontrolador Arduino.
5
MICROCONTROLADORES ARDUINO Ing Felix Castillo M.
#include <Servo.h>
Servo Servo1;
int PINSERVO = 2;
int PULSOMIN = 700;
int PULSOMAX = 2350;
void setup() {
// introducir el código y correr una vez:
Servo1.attach (PINSERVO,PULSOMIN,PULSOMAX);
}
void loop() {
// introducir el código y hacer correr :
Servo1.write(0);
delay (2000);
Servo1.write(180);
delay (2000);
}
L.3. Cambiar en el programa de L2 con los siguientes valores y observar
PULSOMIN= 900;
PULSOMAX=2100;
Luego cambie a:
PULSOMIN= 800;
PULSOMAX=2200;
Luego cambie a:
PULSOMIN= 700;
PULSOMAX=2350;
#include <Servo.h>
Servo Servo1;
int PINSERVO = 2;
int PULSOMIN = 700;
int PULSOMAX = 2350;
int VALORPOT;
int ANGULO;
int POT=0;
void setup() {
// introducir el Código y hacer correr:
Servo1.attach (PINSERVO,PULSOMIN,PULSOMAX);
}
void loop() {
// introducir el código principal y hacer correr:
VALORPOT = analogRead(POT);
ANGULO = map(VALORPOT,0,1023,0,180);
Servo1.write(ANGULO);
delay (20);
}