• Welcome to LusoRobótica - Robótica em Português.
 

Smalluino - O teu primeiro robô V1.0

Started by TigPT, 04 de June de 2008, 01:36

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

egito

Podes fazer um chassi e por uma pololu bal
Tiago Fernandes

amando96

Normalmente usam-se rodas omnidirectionais, ou seja, tipo as das cadeiras de escritório, mas em ponto pequeno, tipo esta ou esta.

Eu cheguei a usar uma roda dos leitores de cassete:


:D

ricardo-reis

amando, as rodas omnidireccionais são diferentes das 'rodas livres' das cadeiras de escritório.. tu sabes disso.. as omnidireccionais são estas:

Omni directional wheels

egito

Tiago Fernandes

Stigma

Ja completei o meu projecto base. Contudo agora gostava de instalar uns componentes extra, mas como o espaço é pouco n sei como o fazer. Estava a pensar aquirir um protoshield, mas se entendi bem, estes nao vem soldados, e eu nesse aspecto estou a zero. Introduzir uma breadboard seria de pensar, mas para isso tenho que criar um suporte para o sistema todo, e também n sei bem como o fzr. Alguem me pode dar algum feedback? Bgd

ricardo-reis

cria um tópico com o teu robot, tira umas fotos e mostra ao pessoal.. é capaz de ser mais simples assim dar ideias..

JessyNeves

Boas Noites !
Então, decidi, eu e uns colegas, pegar neste excelente tutorial e segui-lo para nos introduzirmos à Robotica! Conseguimos montar o robot, e julgamos nós , tudo está ligado devidamente!

O problema surge aquando da programação. Fizemos o Upload do código fornecido no tutorial para o Arduino, e ligámos o Smalluino.
Situação, o Smalluino anda constantemente ''à roda''. Respeita a parte inicial do código, ''parado'', mas depois começa a ''rodar'' sobre ele mesmo. ( uma roda para cada sentido ).
Tentámos reduzir, alterar valores, mas o problema mantém-se. achamos a situação bastante estranha.

qq ajuda é bem vinda. obrigado

ricardo-reis

#172
Quote from: ricardo-reis on 01 de December de 2010, 17:53
então é pk não estão bem calibrados.. de qualquer forma, é simples de resolver..

o pin de sinal dos servos está preparado para receber um valor de 0 a 255. estima-se que o valor 127 seja o valor que os manda parar. mas se isto não for verdade, o valor há-de estar ali por perto.. portanto, aconselho-te a fazer um programa simples que te percorra os valores de 100 a 200 (just in case) e que te faça um print do valor que está a testar no ecrã. isto serve para que determines, pra cada um dos servos, qual é o valor que os faz parar.

void parado(int tempo){
  for(int i = 0; i<tempo;i++){
    for (int j=100;j<200; j++){
    analogWrite(motorEsq, j);   
    analogWrite(motorDrt, j);   
    Serial.print("A testar valor: ");
    Serial.println(j);
    delay(500);     
  }
}

isto deve ser o código para o que disse acima, não te esqueças do Serial.begin(9600); no setup().

(editei o primeiro post, com o código de testes dos servos completo)

darkpedro

eu sou um iniciante, e gostava de saber como é que colocas no smalluino a partir do suporte das pilhas aquela entrada preta?

ruicosta93

#174
Boas. eu para o meu primeiro robo guiei-me por aqui e tive problemas com os servos por usar o analogWrite.  Para evitar que outros iniciantes com o mesmo problema que eu desanimem aqui fica um codigo feito pelo Njay e alterado por mim para fazer o mesmo que o smalluino. Este codigo segundo o Njay é bom para usar para controlar servos de rotação continua.

// Continuous rotation servo class.
// By Njay in 2009 (EmbeddedDreams.com)
// Licensed under CC BY NC SA ([url=http://creativecommons.org/licenses/by-nc-sa/2.5/pt/]http://creativecommons.org/licenses/by-nc-sa/2.5/pt/[/url]
#include <Servo.h>


/**
* Wraps a MegaServo object to control a continuous rotation servo.
* The servo should be calibrated to be stopped when Megaservo::write()
* is set to 90. * When speed is set to 0 to stop the servo, the servo is detached to
* make sure it will be completly stopped.
*/
class ContinuousRotationServo
{ 
public:   
  ContinuousRotationServo (unsigned char pin)  {       
    mSpeed = 0;       
    SetPin(pin);   
  }   

  ContinuousRotationServo (void)  {       
    mSpeed = 0;   
  }   

  inline void SetPin (unsigned char pin)  {       
    mPin = pin;   
  }   

  // Set the speed. 0 to be stopped, > 0 to rotate in one direction   
  // and < 0 to rotate on the other.   
  void SetSpeed (signed char speed)  {       
    if (speed == 0)  {           
      if (mSpeed != 0)  {               
        //Serial.println("dettach");               
        mServo.detach();           
      }       
    }       
    else  {           
      if (mSpeed == 0)  {               
        //Serial.println("attach");               
        mServo.attach(mPin);           
      }           
      //Serial.println("set speed");           
      mServo.write(90 + speed);       
    }       
    mSpeed = speed;   
  }   

  inline void Detach (void)  {       
    mServo.detach();   
  }
private:   
  Servo          mServo;   
  unsigned char  mPin;   
  signed char    mSpeed;    // current speed};
};


ContinuousRotationServo  servoDir(9);
ContinuousRotationServo  servoEsq(10);

void setup (){
 
}
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++){
servoDir.SetSpeed(0);
servoEsq.SetSpeed(0);
delay(500);
}
}
void tras(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
servoDir.SetSpeed(45);
servoEsq.SetSpeed(-45);
delay(500);
}
}
void frente(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
servoDir.SetSpeed(-45);
servoEsq.SetSpeed(45);
delay(500);
}
}
void esquerda(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
servoDir.SetSpeed(-45);
servoEsq.SetSpeed(-45);
delay(500);
}
}
void direita(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
servoDir.SetSpeed(45);
servoEsq.SetSpeed(45);
delay(500);
}
}



Qualquer erro avisem.
Rui Costa

senso

Usas o botão que tem o simbolo # ou metes [code ] código aqui dentro[/code ] e retiras os espaços entre code e o ]
Avr fanboy

Bony

Ola :)

surgiu - me aqui um problema, eu não comprei servos, comprei "motores normais", portanto o fio do sinal não tenho :( apenas tenho do GND e VCC, como poderei fazer para funcionar na mesma ?

cumps

xiserre

usas transistor's ou pontes h.. o sinal de controlo vai ser diferente..

Bony


senso

E que tipo de motor é?
Tem caixa ou é só e apenas um motor DC?

Aconselho-te a usar uma ponte H, pois está tudo dentro do IC e é praticamente ligar meia duzia de fios e está feito, com transistores é preciso uma carrada de componentes extra e o trabalho que dá para os montar.
Avr fanboy