En este tutorial vamos a desarrollar un circuito usando un sensor FLEX, Arduino Uno y un servomotor. Este proyecto es un sistema de servocontrol donde la posición del eje del servo está determinada por la flexión, flexión o desviación del sensor FLEX.
Primero hablemos un poco sobre los servomotores. Los servomotores se utilizan cuando se necesita un movimiento o una posición precisos del eje. No se proponen para aplicaciones de alta velocidad. Se proponen para aplicaciones de baja velocidad, par medio y posición precisa. Estos motores se utilizan en máquinas de brazo robótico, controles de vuelo y sistemas de control. Los servomotores se utilizan en sistemas integrados como máquinas expendedoras, etc.
Los servomotores están disponibles en diferentes formas y tamaños. Un servomotor tendrá principalmente sus cables, uno es para voltaje positivo, otro es para tierra y el último es para ajuste de posición. El cable ROJO está conectado a la alimentación, el cable Negro está conectado a tierra y el cable AMARILLO está conectado a la señal.
Un servomotor es una combinación de motor de CC, sistema de control de posición y engranajes. La posición del eje del motor de CC se ajusta mediante la electrónica de control en el servo, según la relación de trabajo de la señal PWM del pin SIGNAL.
Simplemente hablando, la electrónica de control ajusta la posición del eje controlando el motor de CC. Estos datos sobre la posición del eje se envían a través del pin SIGNAL. Los datos de posición al control deben enviarse en forma de señal PWM a través del pin de señal del servomotor.
La frecuencia de la señal PWM (Modulación de ancho de pulso) puede variar según el tipo de servomotor. Lo importante aquí es el DUTY RATIO de la señal PWM. Basándose en esta RACIÓN DE TRABAJO, la electrónica de control ajusta el eje. Para que el eje se mueva a las 9 en punto, la RACIÓN DE ENCENDIDO debe ser 1 / 18.ie. 1 milisegundo de 'tiempo ON' y 17 milisegundos de 'tiempo OFF' en una señal de 18 ms.
Para que el eje se mueva a las 12 en punto, el tiempo de encendido de la señal debe ser de 1,5 ms y el tiempo de apagado debe ser de 16,5 ms. Esta relación es decodificada por el sistema de control en servo y ajusta la posición en base a ella.
Este PWM aquí se genera mediante ARDUINO UNO. Entonces, por ahora sabemos que podemos controlar el eje del servomotor variando la relación de trabajo de la señal PWM generada por Arduino Uno. El UNO tiene una función especial que nos permite proporcionar la posición de SERVO sin perturbar la señal PWM. Sin embargo, es importante conocer la relación de relación de trabajo PWM - posición del servo. Hablaremos más sobre esto en la descripción.
Ahora hablemos de FLEX SENSOR. Para conectar un sensor FLEX a ARDUINO UNO, usaremos la función ADC (conversión analógica a digital) de 8 bits para hacer el trabajo. Un sensor FLEX es un transductor que cambia su resistencia cuando cambia su forma. Un sensor FLEX tiene 2.2 pulgadas de largo o la longitud de un dedo. Se muestra en la figura.
El sensor de flexión es un transductor que cambia su resistencia cuando se dobla la superficie lineal. De ahí el nombre de sensor flexible. Simplemente hablando, la resistencia del terminal del sensor aumenta cuando se dobla. Esto se muestra en la siguiente figura.
Este cambio de resistencia no puede servir de nada a menos que podamos leerlos. El controlador en cuestión solo puede leer las posibilidades en voltaje y nada menos, para esto usaremos un circuito divisor de voltaje, con el que podemos derivar el cambio de resistencia como cambio de voltaje.
El divisor de voltaje es un circuito resistivo y se muestra en la figura. En esta red resistiva tenemos una resistencia constante y otra resistencia variable. Como se muestra en la figura, R1 aquí es una resistencia constante y R2 es un sensor FLEX que actúa como una resistencia.
El punto medio de la rama se toma para medir. Con el cambio de R2, tenemos un cambio en Vout. Entonces con esto tenemos un voltaje que cambia con el peso.
Ahora, lo importante a tener en cuenta aquí es que la entrada que toma el controlador para la conversión de ADC es tan baja como 50 µAmp. Este efecto de carga del divisor de voltaje basado en la resistencia es importante ya que la corriente extraída de Vout del divisor de voltaje aumenta el porcentaje de error aumenta, por ahora no debemos preocuparnos por el efecto de carga.
FLEX SENSOR cuando se dobla su resistencia cambia. Con este transductor conectado a un circuito divisor de voltaje, tendremos un voltaje cambiante con FLEX en el transductor. Este voltaje variable se alimenta a uno de los canales ADC, tendremos un valor digital relacionado con FLEX.
Haremos coincidir este valor digital con la posición del servo, con esto tendremos servocontrol por flex.
Componentes
Hardware: Arduino Uno , fuente de alimentación (5v), condensador de 1000 uF, condensador de 100nF (3 piezas), resistencia de 100KΩ, SERVO MOTOR (SG 90), resistencia de 220Ω, sensor FLEX.
Software: Atmel studio 6.2 o Aurdino nightly.
Diagrama de circuito y explicación
El diagrama de circuito para el control del servomotor mediante el sensor FLEX se muestra en la siguiente figura.
El voltaje a través del sensor no es completamente lineal; será ruidoso. Para filtrar el ruido, se colocan condensadores a través de cada resistencia en el circuito divisor como se muestra en la figura.
Aquí vamos a tomar el voltaje proporcionado por el divisor (voltaje que representa el peso linealmente) y lo alimentaremos en uno de los canales ADC de Arduino UNO. Usaremos A0 para esto. Después de la inicialización del ADC, tendremos un valor digital que representa el sensor inclinado. Tomaremos este valor y lo compararemos con la posición del servo.
Para que esto suceda, debemos establecer algunas instrucciones en el programa y hablaremos de ellas en detalle a continuación.
ARDUINO tiene seis canales ADC, como se muestra en la figura. En ellos cualquiera o todos ellos se pueden utilizar como entradas para voltaje analógico. El UNO ADC tiene una resolución de 10 bits (por lo que los valores enteros de (0- (2 ^ 10) 1023)). Esto significa que asignará voltajes de entrada entre 0 y 5 voltios en valores enteros entre 0 y 1023. Entonces, para cada (5/1024 = 4,9 mV) por unidad.
Aquí vamos a utilizar A0 de UNO.
Necesitamos saber algunas cosas.
|
En primer lugar, los canales UNO ADC tienen un valor de referencia predeterminado de 5V. Esto significa que podemos dar un voltaje de entrada máximo de 5 V para la conversión de ADC en cualquier canal de entrada. Dado que algunos sensores proporcionan voltajes de 0-2,5 V, con una referencia de 5 V obtenemos menor precisión, por lo que tenemos una instrucción que nos permite cambiar este valor de referencia. Entonces, para cambiar el valor de referencia tenemos ("analogReference ();") Por ahora lo dejamos como.
De forma predeterminada, obtenemos la resolución ADC máxima de la placa que es de 10 bits, esta resolución se puede cambiar usando la instrucción ("analogReadResolution (bits);"). Este cambio de resolución puede resultar útil en algunos casos. Por ahora lo dejamos como.
Ahora, si las condiciones anteriores están configuradas por defecto, podemos leer el valor del ADC del canal '0' llamando directamente a la función "analogRead (pin);" aquí "pin" representa el pin donde conectamos la señal analógica, en este caso sería "A0".
El valor de ADC se puede tomar en un número entero como “int SENSORVALUE = analogRead (A0); ”, Por esta instrucción el valor después de ADC se almacena en el entero“ SENSORVALUE ”.
Ahora hablemos del SERVO, el UNO tiene una función que nos permite controlar la posición del servo simplemente dando el valor de grado. Digamos que si queremos que el servo esté en 30, podemos representar directamente el valor en el programa. El archivo de encabezado SERVO se encarga de todos los cálculos de tasa de trabajo internamente.
#incluir
Servo servo; servo.attach (3); servo.write (grados); |
La primera declaración representa el archivo de encabezado para controlar el SERVO MOTOR.
La segunda declaración es nombrar el servo; lo dejamos como el propio servo.
La tercera declaración indica dónde está conectado el pin de la señal del servo; debe ser un pin PWM. Aquí estamos usando PIN3.
La cuarta declaración proporciona comandos para posicionar el servomotor y está en grados. Si se le da 30, el servomotor gira 30 grados.
Ahora el sg90 puede moverse de 0 a 180 grados, tenemos un resultado de ADC de 0 a 1024
Entonces ADC es aproximadamente seis veces la POSICIÓN SERVO. Entonces, dividiendo el resultado de ADC por 6, obtendremos la posición aproximada de la mano SERVO.
Con esto tendremos el valor de posición del servo alimentado al servomotor, que es proporcional a flexión o flexión. Cuando este sensor flexible se monta en un guante, podemos controlar la posición del servo mediante el movimiento de la mano.