Controlando Un Servomotor Con Una Fotorresistencia

Controlando un servomotor con una fotorresistencia - componentes - circuito - diagrama - código - variantes - referencia

Views 393 Downloads 17 File size 167KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Controlando un servomotor con una fotorresistencia - componentes - circuito - diagrama - código - variantes - referencias - otros -

En este proyecto vamos controlar un servomotor a partir de la información que obtengamos de una fotorresistencia. Para hacerlo tomaremos el valor analógico 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 posición 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 eléctricos con un mecanismo interno de control que nos da la posibilidad de controlarlo su posición. Normalmente están 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

Código 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 función write() lo colocamos en la posición deseada. Los valores que nos da el divisor de voltaje con la fotorresistencia, no son valores entre 0 y 1023, como sería con un potenciometro, si no valores en un rango más pequeño. Para usar el valor de la fotorresistencia vamos a agregar una rutina en el setup() que nos permita saber cuales son los valores máximo 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 condición. En este caso tomaremos el valor del reloj de nuestro microcontrolador usando la función 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 máximo o si es menor que el mínimo. /* 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

// 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 analógicos 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() Función millis(), tiempo en milisegundos desde que arranco el arduino - al inicio

Ejemplos similares en otras páginas:  Knob(ingles)  Mando(español) - al inicio

Esta página está siendo creada para apoyar las actividades del Taller de Arduino en la Fac. de Ciencias de la UNAM. Para mayor información comunicarse con eduardosac (at) gmail.com

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