Show Posts
Pages: [1]
1  Forum 2005-2010 (read only) / Troubleshooting / Re: Trouble when attaching 3rd servo (Duemilanove 328) on: May 23, 2010, 09:13:55 am
I'm having a problem similar with your, It seems resumes when I use more the 2 servos, because the servos's values rollback to the initial possition post in setup method.
This problem dos not appear at the arduino mega, then it's not a servo problem.
2  Forum 2005-2010 (read only) / Portugues / Re: 2 Servos on: May 23, 2010, 09:27:18 am
Salve galera,
So agora pude testar com vários servos, e parece não funcionar direito. Quando tento posicionar mais de 2 servos o programa parece  reiniciar, só que não é constante, e quanto mais servos eu tento movimentar simultaneamente, mais este erro acontece.
Fiz testes com “delay” e o programa fica mais estabilizado, mais não 100%.

O interessante é que com o arduino mega este erro não acontece, posso trabalhar sem delay, tudo fica perfeito.

Estou vasculhando a documentação, mais não encontro nada que justifique esta diferença de comportamento entre o deumilanove e o mega.
3  Forum 2005-2010 (read only) / Portugues / Re: 2 Servos on: April 21, 2010, 10:17:41 am
Acabei de fazer um teste com 3 servos, nas portas 8, 9 e 12. Funcionou sem problema.  smiley-wink

Observe que na documentação do Duemilanove, pode trabalhar com 12 servos simultaneamente usando a biblioteca Servo.h.

Como no meu projeto um Duemilanove terá que manipular 6 servos, fiquei preocupado com a informação do Amando96, porem, pelas minhas pesquisas e meus testes, um Duemilanove consegue sim manipular mais de 2 servos com a biblioteca servo.

Assim que minha encomenda de servos chegar, vou testar com 6 “ao mesmo tempo”.
4  Forum 2005-2010 (read only) / Portugues / Re: 2 Servos on: April 19, 2010, 05:57:54 pm
Já fiz este teste e funciona sim.
Tem que colocar mais informações, pois o problema pode estar em vários locais.
Eu mesmo tenho vários servos sendo alguns queimados.

Alem de servo defeituoso pode ser erro na ligação elétrica, código com bug, fonte de energia, etc.
Eu tenho mais facilidade em analisar código, se puder, poste o código no fórum para que eu possa analisar.

5  Forum 2005-2010 (read only) / Portugues / Re: Array de sensores CNY70, on: May 17, 2010, 08:49:26 pm
Sobre a segunda questão:

Cara você tem que ter enfoque na solução, não no problema. Porque motivo esta trabalhando com binário e fazendo operação de bit.........a  não ser que esteja estudando esses tipos de operações....
A única coisa que tem que fazer e verificar qual o sensor que esta com o maior valor(ou menor) para descobrir qual o sensor esta mais próximo da linha.

Outra coisa, coloque nome de métodos mais descritivo, lineError que dizer algum erro mais nada haver com “escolhe sensor que esta sobre a linha”, desculpe mais seu código esta muito ruim, você poderia ter colocando o método simplesmente como escolhe_senser_que_esta_sobre_a_linha(), garanto a você que qualquer um conseguiria entender.

Outra coisa é sobre essa operação de igualdade.....veja bem o que esta fazendo.....eu não vou nem comentar.

Segue um codigo so para mostrar como pode ser feito:

int escolhe_sensor_que_esta_sobre_a_linha(){
      int sensor = 0;
      double error = 0.0;
      //busca pelo sensor que esta mais proximo da linha, ou seja, esta captando valor mais escuro
  for (int i=5; i < nsensores; i++){
      int valor = digitalRead (sensor);
      if( valor > sensor){
       sensor = valor;
      }
  }
  return sensor;
}



6  Forum 2005-2010 (read only) / Portugues / Re: Array de sensores CNY70, on: May 17, 2010, 08:14:29 pm
Observe o seguinte codigo dentro do metodo: double error(int senval[])

...
  double error = 0.0;
  errorval = error;
....
voce esta atribuindo o valor 0.0 a variavel erro, depois atribuindo a variavel ao errorval, ou seja errorval esta ficando igual a zero.

Ou seja, a variavel (neste caso global) errorval vai ficar sempre zero.

Se esta trabalhando com uma variavel global, voce pode tratar ela sem a necessidade de uma função que retorna algum valor.

Recomendo retirar a variavel local error da função double error(int senval[]).

Qualquer coisa entre em contato.
7  Forum 2005-2010 (read only) / Portugues / Re: Arduino para abrir fechaduras??? Any help? on: April 24, 2010, 02:46:25 pm
Eu posso tentar ajudar em relação ao item 1.

Acho que você esta trabalhando de forma errada com a comunicação serial. Observe que o arduino não lé "String" por padrão.

Caso queria trabalhar com ASCII, você precisa montar uma lógica para ler todos os bytes e montar a string dentro do arduino.

Por exemplo seja enviado a string:
“100,200,300\n”

Tem que ser lido byte a byte no arduino como no exemplo:
  char buff[512]; // valor 512 pode ser bem menor
  int i = 0;
  for(i=0; i < 512; i++){
     char c =  (char)Serial.read();
     buff = c;
     // sai da loop caso encontre um retorno
     if( c == '\n' )break;
  }
  buff = '\0'; //fim da string

Recomendo trabalhar de forma binária para economizar memória, onde cada valor seja guardado em um único byte;
8  Forum 2005-2010 (read only) / Portugues / Re: Servos com rotação constante on: April 21, 2010, 10:39:21 am
Realmente é bem fácil fazer.

Tem uma dica de um português, como transformar um servo normal para um de rotação continua, veja ai: http://lusorobotica.com/index.php?topic=1218.0

Eu preferi comprar um já pronto, pois li no mesmo fórum que existe problema na “calibração”.

Aqui vende estes tipos de servos: http://www.unitecorp.eng.br/faces/ServMotores/Servo360.jsp, já comprei deles é recomendo.

Este pessoal vende com o valor bem mais em conta: suporte@robotic.net.br, porem, não sei se já vem de fabrica como rotação continua, ou se foi uma simples modificação.
9  Forum 2005-2010 (read only) / Portugues / Re: Metodos de programação on: April 12, 2010, 03:31:56 pm
A melhor forma de trabalhar com interrupção sem parar o sistema ( comando deley() ) e fazer sincronismo de tempo.
Um exemplo de como isto funciona pode ser visto no exemplo "blick without delay" : http://arduino.cc/en/Tutorial/BlinkWithoutDelay.

Segue um pseudo código para exemplificar:
//defina uma variável global para armazenar o tempo anterior:
Long tempoAnterior = 0;
-----------
//dentro do loop principal
If( (millis() - tempoAnterior) > 2000)
{
      tempoAnterior = millis();
      //Execute a rotina. Esta rotina será executada a casa 2 segundos
      Rotina();
}

10  Forum 2005-2010 (read only) / Portugues / Re: Arduino com C++ on: April 12, 2010, 12:55:53 pm
Boa tarde,

Eu tambem não consegui ler usando o metodo desta forma "ReadFile( porta, BufferRecebe, 100, &BytesLidos, NULL );"
Tive que utilizar o parametro OVERLAPPED.
Segue metodo para ler uma linha da comunicação serial do arduino:
std::string ReadLinha()
{
      std::string ret;
      char szRxChar = 0;
      char atual = 0;
  DWORD dwBytesRead = 0;
      int cout =0;
      OVERLAPPED ovRead;
      memset(&ovRead,0,sizeof(ovRead));
      ovRead.hEvent = hReadEvent;

      while( true )
  {
                        // Check if a read is outstanding
        if (HasOverlappedIoCompleted(&ovRead))
        {
                // Issue a serial port read
            if (!ReadFile(hSerial,&szRxChar,1,
                    &dwBytesRead,&ovRead))
            {
                DWORD dwErr = GetLastError();
                        if (dwErr!=ERROR_IO_PENDING){
                    return ret;
                        }
                        return "-1";
            }
        }
            if( dwBytesRead > 0){
                  ret += szRxChar;
                  if( szRxChar == '\n' || szRxChar == '\r' ){
                        break;
                  }
            }else{
                  return "-1";
            }
  }
      return ret;
}
11  Forum 2005-2010 (read only) / Exhibition / Re: My Hexapod walks! on: April 15, 2010, 04:01:01 pm
Thank you guys. It was a helpfull explanation
12  Forum 2005-2010 (read only) / Exhibition / Re: My Hexapod walks! on: April 13, 2010, 07:04:32 pm
I am trying to do one of this too. The objective is to stuty IA. I am thinking to use one arduino to control six servos.
But I am worry to burn the arduino by using 6 standard servo at once.

Could some one give me advice about it?
Pages: [1]