Controlando un servomotor con una fotorresistencia - componentes - circuito - diagrama - código - variantes - referencia
Views 393 Downloads 17 File size 167KB
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