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);
}
}
}
Tags:
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
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por