LusoRobótica - Robótica em Português
Robótica => Iniciantes => Tópico iniciado por: joao rexinho em 23 de Abril de 2010, 18:02
-
Boas, recentemente adiquiri dois servo motores springrc SM-S4303R para fazer um smalluino. Montei o, fiz o upload do código para o arduino duemilanove e os servos começaram a andar um para trás e outro para a frente e respondem aos ciclos do código :-\ :-\ :-\ O que esta a acontecer?????????Verifiquei as entradas e estão correctas, será problema do Arduino? :-\ :-\ :-\
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg718.imageshack.us%2Fimg718%2F8916%2Fdsc00018r.jpg&hash=633ba6fbabeb9d3b8ab7b9f305bc4449c20afa49) (http://img718.imageshack.us/i/dsc00018r.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg338.imageshack.us%2Fimg338%2F7133%2Fdsc00021iu.jpg&hash=582ce7b8c7234fb8c0d65dac5dbe67f6f8683ef7) (http://img338.imageshack.us/i/dsc00021iu.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg193.imageshack.us%2Fimg193%2F6320%2Fdsc00024rwj.jpg&hash=e865086936312da42539f5c5365c8adc462a9dab) (http://img193.imageshack.us/i/dsc00024rwj.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg651.imageshack.us%2Fimg651%2F32%2Fdsc00023yjj.jpg&hash=4597edf91ae4faab49e1766afd7dc3e392d05600) (http://img651.imageshack.us/i/dsc00023yjj.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg706.imageshack.us%2Fimg706%2F4269%2Fdsc00022hp.jpg&hash=5ea1313f38792f22418628c4e05957114f514f45) (http://img706.imageshack.us/i/dsc00022hp.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg219.imageshack.us%2Fimg219%2F1007%2Fdsc00033pm.jpg&hash=c26d0f17ae7b1c0cef33888da022ebe5e3475039) (http://img219.imageshack.us/i/dsc00033pm.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
Que tal está?
-
provavelmente tens o os fios da alimentação trocados ;)
-
Acho que não
preto = GND
vermelho = VIN
branco = 11 PWN, 10 PWN
-
É um problema de código.
Já me aconteceu o mesmo e o problema estava no código
-
Podias indicar o problema pf? Já troquei a entrada para 6, 5 o motor fica a fazer barulho e anda muito devagar mas mesmo assim não responde aos ciclos.
int motorEsq = 11;
int motorDrt = 10
;
void setup()
{
pinMode(motorEsq, OUTPUT);
pinMode(motorDrt, OUTPUT);
}
void loop()
{
parado(4);
frente(2);
esquerda(6);
tras(2);
esquerda(6);
direita(6);
}
void parado(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 127);
analogWrite(motorDrt, 127);
delay(500);
}
}
void tras(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 152);
analogWrite(motorDrt, 102);
delay(500);
}
}
void frente(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 102);
analogWrite(motorDrt, 152);
delay(500);
}
}
void esquerda(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 102);
analogWrite(motorDrt, 102);
delay(500);
}
}
void direita(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 152);
analogWrite(motorDrt, 152);
delay(500);
}
}
-
O código está correcto
Deve ser necessário ir a um dos motores e modificar-lhe o sentido de rotação
A folha técnica do motor explica como proceder e é muito fácil.
-
Faz outro código, e brinca com os numeros do analogWrite, tive uns servos que para andar no mesmo sentido um tinha de estar 90, e o outro a 75 :o
e é mais fácil mexer nums numeros do que abrir o servo...
-
neste endereço explica como alterar o sentido de rotação do servo da Paralax
http://www.parallax.com/dl/docs/prod/motors/crservo.pdf (http://www.parallax.com/dl/docs/prod/motors/crservo.pdf)
Isto deverá resolver a questão
Não é necessário abrir o servo, é com uma chave de fenda que actua num pequeno parafuso
-
pois, experimenta codigos mais simples
int motorEsq = 11;
int motorDrt = 10;
void setup()
{
pinMode(motorEsq, OUTPUT);
pinMode(motorDrt, OUTPUT);
}
void loop()
{
digitalWrite(motorEsq, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motorDrt, HIGH); // Fazem com que o motor da direita ande em frente
delay (2000);
digitalWrite(motorEsq, LOW); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motorDrt, HIGH); // Fazem com que o motor da esquerda ande em frente
delay (1000); // Tempo que vai ficar a fazer esta função
digitalWrite(motorEsq, HIGH); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motorDrt, LOW); // Fazem com que o motor da esquerda ande em frente
delay (1000);
digitalWrite(motorEsq, LOW); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motorDrt, HIGH); // Fazem com que o motor da esquerda ande em frente
delay (1000);
}
-
Ja agora, como tas a alimentar os servos?
-
Mas esse código é para motores dc com ponte H
EDIT: até não é, mas não funciona com um servo :o
-
ponte H sao quantro pinos
mas isto ja faz os servos mexer nao?
-
Sempre pensei que precisavam de um pulso.
-
Desculpem tive 2 treinos de hoquei. utilizei este e funcionam bem os servos mas qando meto o codigo do smalluino estam sempre a andar. Estive a a mexer na peça para mudar os sentido, com este código não dá. Esta a ser alimentada pelo pc porque tenho as pilhas a carregar.
#include <Servo.h>
Servo myservo1;
Servo myservo2;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
}
void loop()
{
myservo1.write(45);
myservo2.write(45);
delay(1000);
myservo1.write(135);
myservo2.write(135);
delay(1000);
}
-
Ja consegui virei la a peça ao maximo e depois no codigo alterei o analogWrite. :) :) :) :) ;D ;D ;D ;D :D :D :D :D :D
Muito obrigado a todos ::) ::) ::)
O codigo ficou algo como isto
int motorEsq = 11;
int motorDrt = 10
;
void setup()
{
pinMode(motorEsq, OUTPUT);
pinMode(motorDrt, OUTPUT);
}
void loop()
{
parado(4);
frente(2);
esquerda(6);
tras(2);
esquerda(6);
direita(6);
}
void parado(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 0);
analogWrite(motorDrt, 0);
delay(500);
}
}
void tras(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 45);
analogWrite(motorDrt, 150);
delay(500);
}
}
void frente(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 150);
analogWrite(motorDrt, 45);
delay(500);
}
}
void esquerda(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 45);
analogWrite(motorDrt, 45);
delay(500);
}
}
void direita(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
analogWrite(motorEsq, 150);
analogWrite(motorDrt, 150);
delay(500);
}
}
-
e fotos? ;D
-
Amanha de manha já vou meter, certo um video e já estou a trabalhar no código para acrescentar dois sensores IR .As rodas foram feitas por mim estão um pouco tortas mas rolam uma maravilha ;D ;D
-
queremos ver isso ;D
-
o meu 1º robo smalluino (http://www.youtube.com/watch?v=R0EznPSxLlw#ws)
-
Muitíssimo bom aspecto!
ele tem alguns sensores ou ainda está só a fazer movimentos programados?
-
Movimentos programados :D mas já estou a trabalhar no codigo para sensores IR.
-
Que cena é essa a frente? :D
-
São rodas de carrinhos que tinha e da um bom suporte pois agora posso colocar mais ferros para por os sensores IR e outras coisas.A pouco veio me a ideia de utilizar uma ponte h e colocar em cima do robo com sensores IR. Então o robo quando encotra se algo á frente parava e e o modulo que fiz começava a funcionar e disparava bolinhas.
com este modulo:
"gun"" pistola" de dois motores outro ângulo (http://www.youtube.com/watch?v=snJslKth1II#)
-
ja acabei a programação ou pelo menos Não há erros, ainda não testei. ::) ::) ::) ::) ;D ;D ;D.estou a fazer a parte mecanica.
int sensorIrDPin = 0;
int sensorIrEPin = 1;
int sensorIrDValue = 0; // valor leído del pot
int sensorIrEValue = 1; // valor leído del pot
int motorEsq = 11;
int motorDrt = 10
;
void setup()
{
// inicializa comunicación serial a 9600 bps:
Serial.begin(9600);
pinMode(motorEsq, OUTPUT);
pinMode(motorDrt, OUTPUT);
}
void loop()
{
sensorIrDValue = analogRead(sensorIrDPin);
sensorIrEValue = analogRead(sensorIrEPin);
delay(200);
if(sensorIrDValue>=100 + sensorIrEValue>=100){
analogWrite(motorEsq, 150);
analogWrite(motorDrt, 45);
}
sensorIrDValue = analogRead(sensorIrDPin);
sensorIrEValue = analogRead(sensorIrEPin);
delay(200);
if(sensorIrDValue>=300 + sensorIrEValue>=300){
analogWrite(motorEsq, 45);
analogWrite(motorDrt, 150);
}
sensorIrDValue = analogRead(sensorIrDPin);
sensorIrEValue = analogRead(sensorIrEPin);
delay(200);
if(sensorIrDValue>=100 + sensorIrEValue>=150){
analogWrite(motorEsq, 45);
analogWrite(motorDrt, 45);
}
sensorIrDValue = analogRead(sensorIrDPin);
sensorIrEValue = analogRead(sensorIrEPin);
delay(200);
if(sensorIrDValue>=150 + sensorIrEValue>=100){
analogWrite(motorEsq, 150);
analogWrite(motorDrt, 150);
}
}