Vous êtes sur la page 1sur 4

Como ya se ha mencionado para realizar el control de el servomotor y del motor a pasos se opto por el sistema embebido Arduino, el cual

cuenta con un chip ATMega de la familia AVR, este puede ser programado bajo un sistema RISC, esto quiere decir que su set de instrucciones es reducido, y su programacin es bastante sencilla basada en C, ademas de contar con un entorno de programacin multiplataforma esto quiere decir que corre bajo sistemas GNU/Linux, Windows y MacOS, sin necesidad de cambiar la sintaxis en la programacin, ademas de ser bastante flexible, cuenta ya con libreras para realizar el control de dichos motores, estas son Servo.h y Stepper.h, se explicara de manera breve su contenido y cuales son las instrucciones/funciones que permiten el control de los elementos ya mencionados. La librera Servo.h contiene en su interior una serie de instrucciones que nos permite definir o declarar el uso de un servomotor, las funciones mas importantes dentro de esta librera son attach() y write(), estas dos funciones nos permiten definir el pin de la seal para manejar el servomotor y la escritura de una seal a ese mismo pin. El cdigo bsico para manejar un servomotor se encuentra como ejemplo dentro de el IDE Arduino y es el siguiente: // Controlling a servo position using a potentiometer (variable resistor) // by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> #include <Servo.h> Servo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there } Este cdigo nos permite controlar el servomotor con un potencimetro con un rango de 0 a 180, sin embargo al usar este cdigo la lectura del potencimetro es constante y cualquier ruido generado por las seales puede causar el movimiento involuntario del servomotor. Para evitar que este problema se suscite es necesario realizar una lectura del potencimetro un determinado numero de veces y guardar su valor para obtener un promedio, que sera escrito al servomotor, esto se logra mediante la declaracin de un arreglo donde seran guardados los valores de lectura, obteniendo un cdigo como el siguiente.

#include <Servo.h> int lect[10]; //Declaracin del arreglo para lecturas, este puede ser variable int val, i = 0, tot = 0, prom = 0; //Declaracin de acumuladores y contadores Servo serv1; //Declaracin de servomotor void setup(){ serv1.attach(9); // Asignacion del pin para la sear del servomotor Serial.begin(9600); //Incializa el monitor serial for(i=0; i< 10; i++) // Inicializa el arreglo en 0 lect[i] = 0; i=0; } void loop(){ tot = tot lect[i]; //Se realiza una resta del valor contenido en tot con el valor del arreglo en la posicion i. lect[i] = analogRead(A0);//Agrega una lectura al arreglo en la posicin i tot = tot + lect[i];//Realiza la suma de lecturas en tot. i = i + 1; //Aumenta en 1 el contador i para pasar a la siguiente posicin dentro del arreglo //Una condicional para obtener el promedio de las lecturas if (i >= 10){ i = 0; //Inicializa el contador para volver a colocar los valores en la primera posicin del arreglo. prom = tot / 10; Obtiene el promedio de las lecturas val= map(prom, 0, 1023, 0, 179); //guarda el valor del mapeo del potencimetro con respecto al angulo de giro del servomotor. serv1.write(val); //Escribe el valor obtenido en ngulos al servomotor Serial.println(val, DEC); //Imprime en el monitor serial el valor de la posicin actual del servomotor. } } Con esto se obtiene una lectura y escritura mas limpia al servomotor, pero aun cuando esto se realiza, las lecturas obtenidas en el monitor serial son variantes con respecto a la posicin fsica del servomotor dependiendo de el rango de grados en que se encuentre por ejemplo existe una variacin de 4 grados en en el monitor serial, en el rango de 20-30 grados fsicos esto es, en la pantalla se obtienen 24 cuando el servomotor se encuentra en 20 fsicos, para esto en el cdigo se incluye una correccin en rangos de 10 grados dependiendo de la variacin que se tenga, entre las lineas serv1.write(val); //Escribe el valor obtenido en ngulos al servomotor if(val >= 20 && val <=30){ val=val-4 //Este arreglo nos permite colocar en pantalla una posicin mas precisa} Serial.println(val, DEC); //Imprime en el monitor serial el valor de la posicin actual del servomotor. Este arreglo se realiza para cada rango como ya se dijo dependiendo de la variacin.

Para la utilizacion del motor a pasos se utiliza el ejemplo basico de arduino, con la libreria Stepper.h, la cual contiene una clase llamada Stepper por medio de la cual se declara el uso de un motor a pasos #include <Stepper.h> //Libreria const int stepsPerRevolution = 48; // Numero de pasos por revolucin del motor (Varia de acuerdo a cada motor) Stepper myStepper(stepsPerRevolution, 8,9,10,11); //Inicaliza el uso del motor a pasos en los pines 8,9,10 y 11en estos pines se colocan los cables de las bobinas del motor. int stepCount = 0; // Numero de pasos que el motor a dado void setup() { Serial.begin (9600); } void loop() { int sensorReading = analogRead(A0); //Lectura del valor del potenciometro int motorSpeed = map(sensorReading, 0, 1023, 0, 100); // Mapea el potenciomentro en un rango de 0 //a 100 if (motorSpeed > 0) { myStepper.setSpeed(motorSpeed); // Envia el valor de rpm a la que debe girar el motor a pasos Serial.println (motorSpeed); // Imprime en pantalla los rpm myStepper.step(stepsPerRevolution/100); // Pasos por revolucion del motor } }

Diagramas de conexin para motores realizados con Fritzing (Programa de prototipo de circuitos)

Ilustracin : Servomotor

Ilustracin : Motor a pasos

Vous aimerez peut-être aussi