Projeto: Controle servomotor com as mãos utilizando sensor flex e Arduino


Neste vídeo mostra como controlar servomotor com as mãos utilizando sensor flex e Arduino. O servomotor gira ao dobrar o sensor flex proporcionalmente. Você pode saber mais sobre o sensor flex acessando aqui

Para este projeto vamos precisar de: dois servomotores, dois sensores flex, dois resistores de 10K ohm, dois capacitores de 1uF e um Arduino. A figura abaixo mostra a ligação a ser feita:

Os capacitores de 1uF são utilizados para diminuir a variação de tensão do sensor flex.

Abaixo está a programação para Arduino:

#include <Servo.h>

int flexpin=A0;
int flexpin1=A1;
int pos=90;
int pos1=90;
Servo myservo, myservo1;
int flex[20];
int flex1[20];
int sumflex=0;
int sumflex1=0;

void setup()
{
myservo.attach(7);
myservo1.attach(8);
Serial.begin(9600);
}

void loop()
{
for(int x=0; x<20; x++)
{
flex[x]=analogRead(flexpin);
flex1[x]=analogRead(flexpin1);
sumflex=sumflex+analogRead(flexpin);
sumflex1=sumflex1+analogRead(flexpin1);

delayMicroseconds(14);
}
sumflex=sumflex/20;
sumflex1=sumflex1/20;
if(Serial.available())
{
Serial.println(sumflex);
Serial.println(sumflex1);
delay(100);
}
pos=map(sumflex,870,800,0,180);
pos1=map(sumflex1,870,800,0,180);
myservo.write(pos);
myservo1.write(pos1);

delay(200);
}

De acordo com a programação, o Arduino faz a leitura dos pinos analógicos, depois faz uma amostragem e dessa amostragem, faz uma média. Depois de calculada a média das amostras, o Arduino converte para posição em graus com a função map. Por fim, o Arduino envia essa posição em graus para os servomotores.

E é isso! Esperamos que tenha gostado! Se tiver dúvidas, poste aqui neste blog! Para sugestões de tutoriais, poste aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente! Até a próxima!

Referências:

http://www.labdegaragem.org/loja/index.php/34-sensores/sensor-flexivel-de-2-2.html

http://www.labdegaragem.org/loja/index.php/36-motores-afins/servo-motor-pequeno.html

http://labdegaragem.com/profiles/blogs/tutorial-arduino-com-servomotor

http://labdegaragem.com/profiles/blogs/tutorial-de-como-utilizar-o-sensor-flex-com-arduino

  • Mauro Assis

    Eu estou orientando um aluno de Eng. de Controle e Automação na criação de uma "mão biônica", que vai reproduzir os movimentos captados a partir de uma luva equipada com esses sensores. Vejam o primeiro ensaio que fizemos:

     

     

  • Francisco Lucena Gomes Jr

    Não entendi pra que as variáveis flex[20] e flex1[20]?

  • Marcos Vinicius candido

    Pessoal onde comprar este flex?Sou novo no site e estou kerendo começar a usar o arduino, vou precisar muito da ajuda de vcs. Obrigado.

  • Francisco Lucena Gomes Jr

    Marcos, vc pode comprar aqui mesmo na loja do LdG.

  • Carlos Calisto

    todos os servos só giram 90º? 

  • Mauro Assis

    Carlos,

    Esses servos são de 180º. O importante é que ele consiga fletir o dedo.

  • Flavio Vieira

    Se as variaveis analógicas são int flexpin=A0; e int flexpin1=A1; porque no desenho só uma porta analógica é utilizada?

  • Ricardo Taoni Xavier

    como programar e colocar mais 3 servos? para que ao todo fique 5.

  • Mauro Assis

    Recardo, é colocar mais servos, servo3, servo4... eu tenho um robô com seis servos: http://labdegaragem.com/profiles/blogs/rob-solteiro-procura

  • Ricardo Taoni Xavier

    Assis muito interessante seu braço, me desculpe não fui tão especifico como coloco eles nas portas de entrada tanto os servos quantos os flex... agradeço se puder me ajudar 

    um abraço...

  • Mauro Assis

    Vc tem que colocar os servos nas portas PWM (elas estão identificadas na placa do seu Arduino).  E os flex vc liga nas analógicas, como um divisor de tensão. 

  • Mauro Assis

    PS: Aqui tem um tutorial sobre ligar os flex e aqui um vídeo sobre isso.

  • hugo leonardo b

    Boa tarde  adorei o projeto eu gostaria de saber se teria tbem como converte essa para a linguagem em c.

    Para a família pic. to tentando mas nao to conseguindo vc poderia me dizer  por favor

    grato

      

  • Daniel Alves

    Fiz um desse utilizando um servo como esse e um sensor, mas por que será que quando dobro o sensor, o motor fica girando de forma instável, para frente e para trás, mesmo com o sensor dobrado parado?

  • Mauro Assis

    Daniel,

    É que a leitura do sensor varia mesmo com o sensor parado, por interferências diversas. Vc tem que "suavizar" o sinal de alguma forma, por exemplo, fazendo uma média de 10 leituras antes de atuar no motor.