Neste tutorial iremos desenvolver um circuito utilizando sensor de força, Arduino Uno e um servo motor. Será um sistema de controle servo onde a posição do eixo do servo é determinada pelo peso presente no sensor de força. Antes de prosseguir, vamos falar sobre o servo e outros componentes.
Servo motores são usados onde há uma necessidade de movimento ou posição precisa do eixo. Eles não são propostos para aplicações de alta velocidade. Estes são propostos para aplicações de baixa velocidade, torque médio e posição precisa. Esses motores são usados em máquinas de braço robótico, controles de vôo e sistemas de controle. Servo motores também são usados em algumas impressoras e aparelhos de fax.
Os servo motores estão disponíveis em diferentes formas e tamanhos. Um servo motor terá principalmente fios, um é para tensão positiva, outro é para aterramento e o último é para ajuste de posição. O fio VERMELHO está conectado à alimentação, o fio preto está conectado ao aterramento e o fio AMARELO está conectado ao sinal.
Um servo motor é uma combinação de motor DC, sistema de controle de posição e engrenagens. A posição do eixo do motor DC é ajustada pela eletrônica de controle no servo, com base na relação de trabalho do sinal PWM do pino SINAL. Simplesmente falando, a eletrônica de controle ajusta a posição do eixo controlando o motor DC. Estes dados relativos à posição do eixo são enviados através do pino SIGNAL. Os dados de posição para o controle devem ser enviados na forma de sinal PWM através do pino de sinal do servo motor.
A frequência do sinal PWM (modulado por largura de pulso) pode variar com base no tipo de servo motor. O importante aqui é a DUTY RATIO do sinal PWM. Com base nesta razão de dever, a eletrônica de controle ajusta o eixo.
Conforme mostrado na figura abaixo, para que o eixo seja movido para 9o, a RAÇÃO PARA LIGAR deve ser 1 / 18.ie. 1 milhão de segundo de 'tempo LIGADO' e 17 milhões de segundo de 'tempo DESLIGADO' em um sinal de 18 ms.
Para que o eixo seja movido para 12o clock, o tempo ON do sinal deve ser 1,5 ms e o tempo OFF deve ser 16,5 ms.
Esta relação é decodificada pelo sistema de controle no servo e ele ajusta a posição com base nele.
Este PWM aqui é gerado usando ARDUINO UNO.
Portanto, por enquanto sabemos que podemos controlar o eixo do SERVO MOTOR variando a relação de trabalho do sinal PWM gerado pelo UNO.
Agora vamos falar sobre sensor de força ou sensor de peso.
Para fazer a interface de um sensor FORCE com ARDUINO UNO, vamos usar o recurso ADC (Conversão Analógico para Digital) de 8 bits no arduno uno.
Um sensor FORCE é um transdutor que muda sua resistência quando a pressão é aplicada na superfície. O sensor FORCE está disponível em diferentes tamanhos e formas.
Vamos usar uma das versões mais baratas porque não precisamos de muita precisão aqui. O FSR400 é um dos sensores de força mais baratos do mercado. A imagem do FSR400 é mostrada na figura abaixo.
Agora é importante observar que o FSR 400 é sensível ao longo do comprimento, a força ou peso deve ser concentrado no labirinto no meio do olho do sensor, conforme mostrado na figura.
Se a força for aplicada em momentos errados, o dispositivo pode danificar permanentemente.
Outra coisa importante saber é que o sensor pode acionar correntes de alto alcance. Portanto, tenha em mente as correntes motrizes durante a instalação. Além disso, o sensor tem um limite de força de 10Newtons. Portanto, podemos aplicar apenas 1Kg de peso. Se forem aplicados pesos superiores a 1Kg, o sensor pode apresentar alguns desvios. Se aumentar mais de 3Kg. o sensor pode danificar permanentemente.
Como dito anteriormente, este sensor é usado para detectar as mudanças na pressão. Portanto, quando o peso é aplicado em cima do sensor FORCE, a resistência é alterada drasticamente. A resistência do FS400 sobre o peso é mostrada no gráfico abaixo:
Conforme mostrado na figura acima, a resistência entre os dois contatos do sensor diminui com o peso ou a condutância entre os dois contatos do sensor aumenta.
A resistência de um condutor puro é dada por:
Onde, p- Resistividade do condutor
l = comprimento do condutor
A = área do condutor.
Agora considere um condutor com resistência “R”, se alguma pressão for aplicada no topo do condutor, a área no condutor diminui e o comprimento do condutor aumenta como resultado da pressão. Portanto, pela fórmula, a resistência do condutor deve aumentar, pois a resistência R é inversamente proporcional à área e também diretamente proporcional ao comprimento l.
Então, com isso, para um condutor sob pressão ou peso, a resistência do condutor aumenta. Mas essa mudança é pequena em comparação com a resistência geral. Para uma mudança considerável, muitos condutores são empilhados juntos.
Isso é o que acontece dentro dos Sensores de Força mostrados na figura acima. Olhando de perto, pode-se ver muitas linhas dentro do sensor. Cada uma dessas linhas representa um condutor. A sensibilidade do sensor está em números de condutores.
Mas neste caso a resistência vai diminuindo com a pressão porque o material usado aqui não é um condutor puro. Os FSR aqui são dispositivos robustos de filme espesso de polímero (PTF). Portanto, esses não são dispositivos de material condutor puro. São constituídos por um material, que apresenta diminuição da resistência com o aumento da força aplicada na superfície do sensor.
Este material apresenta características conforme mostrado no gráfico do FSR.
Essa mudança na resistência não pode servir de nada, a menos que possamos lê-los. O controlador em mãos só consegue ler as chances na tensão e nada menos, para isso vamos usar um circuito divisor de tensão, com isso podemos derivar a variação da resistência como variação da tensão.
O divisor de tensão é um circuito resistivo e é mostrado na figura. Nesta rede resistiva temos uma resistência constante e outra resistência variável. Conforme mostrado na figura, R1 aqui é uma resistência constante e R2 é o sensor FORCE que atua como uma resistência.
O ponto médio do ramo é medido. Com a mudança de R2, temos mudança em Vout. Assim, temos uma tensão que muda com o peso.
Agora, uma coisa importante a se notar aqui é que a entrada obtida pelo controlador para a conversão ADC é tão baixa quanto 50 µAmp. Este efeito de carregamento do divisor de tensão baseado em resistência é importante porque a corrente retirada de Vout do divisor de tensão aumenta a porcentagem de erro aumenta, por enquanto não precisamos nos preocupar com o efeito de carregamento.
Agora, quando a força é aplicada no SENSOR DE FORÇA, a tensão na extremidade do divisor muda este pino conforme conectado ao canal ADC do UNO, obteremos um valor digital diferente do ADC do UNO, sempre que a força no sensor mudar.
Este valor digital ADC é combinado com a relação de trabalho do sinal PWM, portanto, temos o controle de posição SERVO em relação à força aplicada no sensor.
Componentes
Hardware: UNO, fonte de alimentação (5v), capacitor 1000uF, capacitor 100nF (3 peças), resistor 100KΩ, SERVO MOTOR (SG 90), resistor 220Ω, sensor de força FSR400.
Software: Atmel studio 6.2 ou aurdino noturno.
Diagrama de circuito e explicação de trabalho
O diagrama do circuito para controle do servo motor pelo sensor de força é mostrado na figura abaixo.
A tensão no sensor não é completamente linear; será barulhento. Para filtrar o ruído, um capacitor é colocado em cada resistor no circuito divisor, conforme mostrado na figura.
Aqui vamos pegar a tensão fornecida pelo divisor (tensão que representa o peso linearmente) e alimentá-la em um dos canais ADC do Arduino Uno. Após a conversão, vamos pegar esse valor digital (representando o peso) e relacioná-lo ao valor PWM e fornecer esse sinal PWM ao motor SERVO.
Assim, com o peso, temos um valor PWM que muda sua relação de trabalho dependendo do valor digital. Quanto maior o valor digital, maior a relação de trabalho do PWM. Portanto, com o sinal PWM de relação de trabalho mais alto, o servo eixo deve alcançar a extrema direita ou a extrema esquerda de acordo com a figura fornecida na introdução.
Se o peso for menor, teremos uma relação de trabalho PWM menor e conforme a figura na introdução o servo deve alcançar a extrema direita.
Com isso temos um controle de posição SERVO por PESO ou FORÇA.
Para que isso aconteça precisamos estabelecer algumas instruções no programa e falaremos sobre elas em detalhes a seguir.
ARDUINO possui seis canais ADC, como mostra a figura. Nestes, qualquer um ou todos eles podem ser usados como entradas para tensão analógica. O UNO ADC tem resolução de 10 bits (portanto, os valores inteiros de (0- (2 ^ 10) 1023)). Isso significa que ele mapeará tensões de entrada entre 0 e 5 volts em valores inteiros entre 0 e 1023. Então, para cada (5/1024 = 4,9 mV) por unidade.
Aqui vamos usar A0 de UNO. Precisamos saber algumas coisas.
|
Em primeiro lugar, os canais ADC do Arduino Uno têm um valor de referência padrão de 5V Isso significa que podemos fornecer uma tensão de entrada máxima de 5 V para conversão ADC em qualquer canal de entrada. Como alguns sensores fornecem tensões de 0-2,5 V, com uma referência de 5 V obtemos menos precisão, portanto, temos uma instrução que nos permite alterar esse valor de referência. Portanto, para alterar o valor de referência, temos (“analogReference ();”) Por enquanto, deixamos como.
Como padrão, obtemos a resolução máxima do ADC da placa que é 10bits, esta resolução pode ser alterada usando a instrução (“analogReadResolution (bits);”). Essa mudança de resolução pode ser útil em alguns casos. Por enquanto, deixamos como.
Agora, se as condições acima forem definidas como padrão, podemos ler o valor do ADC do canal '0' chamando diretamente a função "analogRead (pino);", aqui "pino" representa o pino onde conectamos o sinal analógico, neste caso, seria “A0”. O valor de ADC pode ser convertido em um número inteiro como “int SENSORVALUE = analogRead (A0); ”, Por esta instrução o valor após ADC é armazenado no inteiro“ SENSORVALUE ”.
O PWM do UNO pode ser obtido em qualquer um dos pinos simbolizados como “~” na placa PCB. Existem seis canais PWM no UNO. Vamos usar o PIN3 para nosso propósito.
analogWrite (3, VALOR); |
Da condição acima, podemos obter diretamente o sinal PWM no pino correspondente. O primeiro parâmetro entre colchetes é para escolher o número do pino do sinal PWM. O segundo parâmetro é para escrever a taxa de serviço.
O valor PWM do Arduino Uno pode ser alterado de 0 a 255. Com “0” como o mais baixo para “255” como o mais alto. Com 255 como taxa de serviço, teremos 5 V no PIN3. Se a taxa de serviço for de 125, obteremos 2,5 V no PIN3.
Agora vamos falar sobre o controle do servo motor, o Arduino Uno possui um recurso que nos permite controlar a posição do servo apenas fornecendo o valor do grau. Digamos que se queremos que o servo esteja em 30, podemos representar diretamente o valor no programa. O arquivo de cabeçalho do SERVO cuida de todos os cálculos da relação de trabalho internamente. Você pode aprender mais sobre o controle do servo motor com o arduino aqui.
Agora o sg90 pode se mover de 0-180 graus, temos o resultado ADC de 0-1024.
Portanto, ADC é aproximadamente seis vezes a POSIÇÃO DO SERVO. Portanto, ao dividir o resultado ADC por 6, obteremos a posição aproximada da mão do SERVO. Portanto, temos um sinal PWM cuja relação de trabalho muda linearmente com PESO ou FORÇA. Sendo dado ao servo motor, podemos controlar o servo motor pelo sensor de força.