estou com um projeto de tcc sobre o controle de um braço robotico com 4 servos motores atraves de um aplicativo criado no app inventor mais o braço vibra de maneira que não faz o movimento perfeito. alguem poderia me ajudar uso uma fonte para alimentar os servos de 5v e 3A

#include <SoftwareSerial.h>

#include <Servo.h>
Servo myservo1, myservo2, myservo3, myservo4;

int bluetoothTx = 11;
int bluetoothRx = 12;

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
myservo1.attach(9);
myservo2.attach(10);
myservo3.attach(7);
myservo4.attach(4);

//Setup usb serial connection to computer
Serial.begin(9600);

//Setup Bluetooth serial connection to android
bluetooth.begin(9600);

}

void loop()
{
//Read from bluetooth and write to usb serial
if(bluetooth.available()>=2 )
{
int servopos = bluetooth.read();
int servopos1 = bluetooth.read();
int realservo = (servopos1 *256) + servopos;
Serial.println(realservo);

if (realservo >= 1000 && realservo <1180){
int servo1 = realservo;
servo1 = map(servo1, 1000,1180,0,180);
myservo1.write(servo1);
Serial.println("servo subir // descer ON");
delay(10);

}

if (realservo >=2000 && realservo <2180){
int servo2 = realservo;
servo2 = map(servo2,2000,2180,0,180);
myservo2.write(servo2);
Serial.println("servo direita // esquerda On");
delay(1);

}

if (realservo >=3000 && realservo < 3180){
int servo3 = realservo;
servo3 = map(servo3, 3000, 3180,0,180);
myservo3.write(servo3);
Serial.println("servo alongar// retornar On");
delay(1);
}
if (realservo >=4000 && realservo < 4180){
int servo4 = realservo;
servo4 = map(servo4, 4000, 4180,0,180);
myservo4.write(servo4);
Serial.println("servo abrir // fechar On");
delay(1);
}

}
}

Exibições: 2100

Responder esta

Respostas a este tópico

Qual a especificação da fonte ? Quantos ampéres?
Meça o 5V quando estiver fazendo os testes.
Qual servo esta usando ?

estou usando uma fonte MTX de 5 Volts e 3 Amperes somente para os servos. e 4 micro servos 9g sg90 de todos videos que vi  todos braços conseguem se movimentar corretamente

Pode ser que o braço que montou esta com peso excessivo.

Esse motor servo é bem fraquinho. Faça um teste sem carga.

Mande uma foto do braço montado.

peso eu creio que não pois não estou pegando nada nele ainda apenas movimento

ele movimenta todos os servos perfeitamente e a conexão do bluetooth também está ótima mais parece que ele meio que tenta acionar dois servos ao mesmo tempo por isso que fica tremendo algo assim. já conferi a programação de cima abaixo não encontrei nenhum erro que seja referente a isso.

A minha impressão é de que o braço esta muito pesado para o motor.

Você esta usando o mesmo servo motor do exemplo que baseou o seu projeto?

Seu programa, usa um servo de cada vez, nunca dois ao mesmo tempo.

Não percebi nenhum erro. 

Quais é a faixa de valores enviados pelo Bluetooth ?

Pode ser que esteja enviando valores  errados.

int servopos = bluetooth.read();    
int servopos1 = bluetooth.read();

https://www.arduino.cc/en/Reference/Servo

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

exatamente uso o mesmo servo que tive como base de outro projeto . sim ele só aceita eu movimentar um servo de cada vez. a tela do meu app está abaixo simulada com valores distintos de cada servo para não haver choque de valores.

Bom dia Wanderson, 

Não consegui identificar na sua Aplicação Android , os valores de:

thumbposition

esquerda direita

retornar e alongar 

fechar e abrir

subir e descer

Sugiro essas mudanças no seu Sketch, para tentar identificar o problema :

if (realservo >= 1000 && realservo <1180){ int servo1 = realservo;
servo1 = map(servo1, 1000,1180,0,180);
myservo1.write(servo1);
Serial.println("servo subir // descer ON");

Serial.print(" Servopos = ");

Serial.println(servopos);

Serial.print(" Servopos1 = ");

Serial.println(servopos1);

delay(100);

Repita essa programação nas outras rotinas - veja que aumentei o delay:

Serial.print(" Servopos = ");

Serial.println(servopos);

Serial.print(" Servopos1 = ");

Serial.println(servopos1);

delay(100);

Pela experiência que tenho com comunicação Bluetooth e Android, essa linha é um grande erro:

int servopos = bluetooth.read();    
int servopos1 = bluetooth.read();

Essa leitura deve ser feita só uma vez e usada no decorrer da aplicação, e outra, eu mandaria String com identificadores e separaria na execução, tipo:

s1,150

s2,50

s3,175

Separava o s[númeroDoServo] e depois da vírgula eu capturava o valor e armazenava em um inteiro e aplicava na posição do servo.

no modulo bluetooth muita gente usa resistores vocês indicariam usar tmb um de 10K e um de 20K e capacitores nos servos para acabar com os tremiiques

A função dos resistores é que evite de queimar o pino RX, pois a maioria dos bluetooth só suporte 3.3 v no pino RX.

Acredito que o principal objetivo seja não queimar a porta RX do bluetooth por conta de trabalhar com 5v, porém o arduino envia tbm 5v, trabalhando no limite, qualquer oscilação poderia queimar a porta, por isso que se divide a tensão atraves dos resitores e baixa pra 3.3 pra garantir uma margem de segurança.

Olá Sandro

O Eduardo está certo, o Arduino trabalha com 5V e o módulo bluetooth com 3,3V, logo é necessário equalizar a tensão de saída do TX do arduino com o RX do bluetooth.

O limite de tensão dos pinos de I/O é 3,6V. Caso tenha dúvidas consulte a documentação do dispositivo.

manual HC-05

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço