Controlando Un Servomotor Con Una Fotorresistencia

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 4

Controlando un servomotor con una fotorresistencia

- componentes - circuito - diagrama - cdigo - variantes - referencias - otros -

En este proyecto vamos controlar un servomotor a partir de la


informacin que obtengamos de una fotorresistencia. Para hacerlo
tomaremos el valor analgico que nos de un divisor de voltaje
formado por una fotorresistencia y una resistencia fija. Este valor lo
transformaremos a un valor en grados entre 0 y 180 y este valor ser
la posicin a la que moveremos el servo.
Para mover el servo usaremos la biblioteca Servo, que nos facilita el
manejo de estos motores.
- al inicio

Componentes
arduino
protoboard
un servomotor
una fotorresistencia
una resistencia de 10 KOms.
- al inicio

Circuito
Los servomotores son motores elctricos con un mecanismo interno
de control que nos da la posibilidad de controlarlo su posicin.
Normalmente estn construidos para girar en un angulo de de 0 a
180 grados en ambos sentidos, aunque los hay que tienen giro
continuo.
El servomotor de nuestro kit es un servomotor de 5 volts y tiene tres
cables para hacerlo funcionar. Un cable rojo, que se debe conectar a
5 volts. Un cable negro, que se debe conectar a tierra. Y un tercer
cable, amarillo en nuestro motor, que es el cable de control y que
vamos a conectar a un pin de salida del arduino.

- al inicio

Cdigo
Para utilizar los servomotores desde el Arduino contamos con la
biblioteca Servo, que nos permite controlarlo de manera muy simple.
Lo primero que debemos hacer es incorporar la biblioteca Servo en
nuestro sketch, que es una de las bibliotecas que ya viene con el
software del Arduino.
Con esta biblioteca primero hay que crear un objeto Servo. Despues
hay que ligarlo al pin con el que vamos a controlarlo y finalmente con
la funcin write() lo colocamos en la posicin deseada.
Los valores que nos da el divisor de voltaje con la fotorresistencia, no
son valores entre 0 y 1023, como sera con un potenciometro, si no
valores en un rango ms pequeo. Para usar el valor de la
fotorresistencia vamos a agregar una rutina en el setup() que nos
permita saber cuales son los valores mximo y minimo de este
circuito y con esos valores haremos el mapeo al valor que usaremos
para el servo.
Para hacer esto, que llamaremos calibrar nuestro sensor, vamos a
usar la estructura de control while, que nos permite repetir un ciclo
mientras se cumple una condicin. En este caso tomaremos el valor
del reloj de nuestro microcontrolador usando la funcin millis() y
repetiremos el ciclo mientras no hayan pasado 5 segundos.
En este ciclo usaremos dos variables: maximo, que iniciaremos con 0
y minimo que iniciaremos con 1023. Tomaremos la lectura de nuestro
sensor e iremos actualizando el valor de estas dos variables. Si es
mayor que el mximo o si es menor que el mnimo.
/*
En este proyecto vamos a mover un servo de acuerdo al valor
de una fotorresistencia

Vamos a leer el valor del circuito de la fotorresistencia


entre un maximo y un minimo que ya habremos calibrado
y lo convertiremos a un valor entre 0 y 180
la calibracion la haremos en la funcion setup()
*/
#include <Servo.h>

// incluimos la biblioteca Servo

Servo miservo;

// creamos un objecto servo para controlar

el motor

servo

sensor
sensor

const int pinServo = 9;

// pin del servo

const int pinLed = 13;

// pin del led

const int pinSensor = A0;

// pin de la fotorresistencia

int angulo = 0;

// variable para guardar la posicion del

int valSensor = 0;
int minimo = 1023;

// variable para leer el valor del sensor


// variable para el valor minimo del

int maximo = 0;

// variable para el valor maximo del

void setup() {
miservo.attach(pinServo);
Serial.begin(9600);

// liga el servo al pin 9


// inicializa la comunicacion

Serial
// hace la calibracion del sensor
pinMode(pinLed, OUTPUT);
digitalWrite(pinLed, HIGH);
while (millis() < 5000) {
valSensor = analogRead(pinSensor);
if (valSensor < minimo) {
minimo = valSensor;
}
if (valSensor > maximo) {
maximo = valSensor;
}
}
digitalWrite(pinLed, LOW);
}
void loop() {
valSensor = analogRead(pinSensor);
sensor

// leemos el valor del

angulo = map(valSensor, minimo, maximo, 0, 180);


convertimos los valores del sensor a los del servo
miservo.write(angulo);

//

delay(15);
que el servo llegue a su posicion

//

manda al servo la posicion


//

espera unos milisegundos para

Serial.print("min = ");
Serial.print(minimo);
Serial.print(" max = ");
Serial.print(maximo);
Serial.print(" sen = ");
Serial.print(valSensor);
Serial.print(" angulo = ");
Serial.println(angulo);
}
- al inicio

Variantes
Puedes hacer que el divisor de voltaje con dos fotorresistencias.
Puedes usar otros sensores analgicos para mover el servo.
- al inicio

Referencias:
Arduino Reference: Servo Library
Referencia Arduino: Biblioteca Servo
Biblioteca para el manejo y control de servomotores
Arduino Reference: While
Referencia Arduino: While
Estrucura de control while()
Arduino Reference: millis()
Referencia Arduino: millis()
Funcin millis(), tiempo en milisegundos desde que arranco el arduino
- al inicio

Ejemplos similares en otras pginas:


Knob(ingles)
Mando(espaol)
- al inicio

Esta pgina est siendo creada para apoyar las actividades del
Taller de Arduino en la Fac. de Ciencias de la UNAM.
Para mayor informacin comunicarse con eduardosac (at) gmail.com

http://arduino.matem.unam.mx/proyectos/fotorresistenciaServo

También podría gustarte