En este tutorial desarrollaremos un circuito usando sensor de fuerza, Arduino Uno y un servomotor. Será un sistema de servocontrol donde la posición del eje del servo está determinada por el peso presente en el sensor de fuerza. Antes de continuar, hablemos del servo y otros componentes.
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 también se utilizan en algunas impresoras y máquinas de fax.
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.
Como se muestra en la figura siguiente, para que el eje se mueva a las 9 en punto, la RACIÓN DE ENCENDIDO debe ser de 1/18. 1 milisegundo de 'tiempo ON' y 17 milisegundos de 'tiempo OFF' en una señal de 18ms.
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 SERVO MOTOR variando la relación de trabajo de la señal PWM generada por UNO.
Ahora hablemos de sensor de fuerza o sensor de peso.
Para conectar un sensor FORCE con ARDUINO UNO, usaremos la función ADC (conversión analógica a digital) de 8 bits en arduno uno.
Un sensor de FUERZA es un transductor que cambia su resistencia cuando se aplica presión sobre la superficie. El sensor FORCE está disponible en diferentes tamaños y formas.
Vamos a utilizar una de las versiones más económicas porque aquí no necesitamos mucha precisión. FSR400 es uno de los sensores de fuerza más baratos del mercado. La imagen del FSR400 se muestra en la siguiente figura.
Ahora es importante tener en cuenta que el FSR 400 es sensible a lo largo, la fuerza o el peso deben concentrarse en el laberinto en el medio del ojo del sensor, como se muestra en la figura.
Si la fuerza se aplica en momentos incorrectos, el dispositivo podría dañarse permanentemente.
Otra cosa importante a saber es que el sensor puede conducir corrientes de alto rango. Así que tenga en cuenta las corrientes de conducción durante la instalación. Además, el sensor tiene un límite de fuerza de 10 Newtons. Por lo que podemos aplicar solo 1Kg de peso. Si se aplican pesos superiores a 1 kg, el sensor puede mostrar algunas desviaciones. Si aumenta más de 3Kg. el sensor podría dañarse permanentemente.
Como se dijo anteriormente, este sensor se usa para detectar los cambios de presión. Entonces, cuando el peso se aplica sobre el sensor de FUERZA, la resistencia cambia drásticamente. La resistencia del FS400 al sobrepeso se muestra en el siguiente gráfico:
Como se muestra en la figura anterior, la resistencia entre los dos contactos del sensor disminuye con el peso o la conductancia entre dos contactos del sensor aumenta.
La resistencia de un conductor puro viene dada por:
Dónde, p- Resistividad del conductor
l = Longitud del conductor
A = Área del conductor.
Ahora considere un conductor con resistencia “R”, si se aplica algo de presión sobre el conductor, el área del conductor disminuye y la longitud del conductor aumenta como resultado de la presión. Entonces, por fórmula, la resistencia del conductor debería aumentar, ya que la resistencia R es inversamente proporcional al área y también directamente proporcional a la longitud l.
Entonces, con esto para un conductor bajo presión o peso, la resistencia del conductor aumenta. Pero este cambio es pequeño en comparación con la resistencia general. Para un cambio considerable, muchos conductores se apilan juntos.
Esto es lo que sucede dentro de los sensores de fuerza que se muestran en la figura anterior. Al mirar de cerca, se pueden ver muchas líneas dentro del sensor. Cada una de estas líneas representa un conductor. La sensibilidad del sensor está en números de conductores.
Pero en este caso la resistencia disminuirá con la presión porque el material utilizado aquí no es un conductor puro. Los FSR aquí son dispositivos robustos de película gruesa de polímero (PTF). Entonces estos no son dispositivos de material conductor puro. Estos están hechos de un material que exhibe una disminución en la resistencia con un aumento en la fuerza aplicada a la superficie del sensor.
Este material muestra características como se muestra en el gráfico de FSR.
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 de FUERZA 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.
Ahora, cuando se aplica la fuerza en el SENSOR DE FUERZA, el voltaje en el extremo del divisor cambia este pin cuando está conectado al canal ADC de UNO, obtendremos un valor digital diferente del ADC de UNO, siempre que cambie la fuerza en el sensor.
Este valor digital ADC coincide con la relación de trabajo de la señal PWM, por lo que tenemos el control de posición SERVO en relación con la fuerza aplicada en el sensor.
Componentes
Hardware: UNO, fuente de alimentación (5v), condensador 1000uF, condensador 100nF (3 piezas), resistencia 100KΩ, SERVO MOTOR (SG 90), resistencia 220Ω, sensor de fuerza FSR400.
Software: Atmel studio 6.2 o aurdino nightly.
Diagrama de circuito y explicación de trabajo
El diagrama de circuito para el control del servomotor por sensor de fuerza 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 a uno de los canales ADC de Arduino Uno. Después de la conversión, tomaremos ese valor digital (que representa el peso) y lo relacionaremos con el valor PWM y proporcionaremos esta señal PWM al motor SERVO.
Entonces, con el peso, tenemos un valor de PWM que cambia su relación de trabajo según el valor digital. Cuanto mayor sea el valor digital, mayor será la relación de trabajo de PWM. Entonces, con una señal PWM de relación de trabajo más alta, el eje del servo debe llegar al extremo derecho o al extremo izquierdo según la figura proporcionada en la introducción.
Si el peso es menor, tendremos una relación de trabajo PWM más baja y, según la figura de la introducción, el servo debería llegar al extremo derecho.
Con esto tenemos un control de posición SERVO por PESO o FUERZA.
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 ADC de Arduino Uno 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 ”.
El PWM de UNO se puede lograr en cualquiera de los pines simbolizados como “~” en la placa PCB. Hay seis canales PWM en UNO. Vamos a utilizar PIN3 para nuestro propósito.
analogWrite (3, VALOR); |
Desde la condición anterior, podemos obtener directamente la señal PWM en el pin correspondiente. El primer parámetro entre paréntesis es para elegir el número de pin de la señal PWM. El segundo parámetro es para la relación de trabajo de escritura.
El valor PWM de Arduino Uno se puede cambiar de 0 a 255. Con "0" como más bajo a "255" como más alto. Con 255 como relación de trabajo, obtendremos 5V en PIN3. Si la relación de trabajo se da como 125, obtendremos 2.5V en PIN3.
Ahora hablemos del control del servomotor, el Arduino Uno tiene una característica 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. Puede obtener más información sobre el control del servomotor con arduino aquí.
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. Por lo tanto, tenemos una señal PWM cuya relación de trabajo cambia linealmente con PESO o FUERZA. Dado esto al servomotor, podemos controlar el servomotor mediante un sensor de fuerza.