LOJA FÍSICA
Praça Mauá, 4541 - Sala 22
09580-050 - São Caetano do Sul / SP
CENTRAL DE ATENDIMENTO
(11) 3522-7626
info@robocore.net
HORÁRIO DE FUNCIONAMENTO
De segunda à sexta das 9:00 às 18:30
Retornar
ao topo
Controlando seu RoboARM


Bem-vindo ao tutorial de controle do seu RoboARM

A seguir você irá aprender:
  • Como fazer a ligação dos servos e joysticks no Sensor Shield V5;
  • Fazer o upload do código na placa;
  • Como alimentar corretamente todo o conjunto;
  • Quais direções do joystick controlam os diferentes movimentos do servo.
O código e ligações deste tutorial são otimizados para os produtos:

Conectando os componentes no Sensor Shield V5

Já com a estrutura completa do braço robótico montada e sua placa Arduino fixada na base, encaixe o Sensor Shield V5 no topo de sua placa.

Como estamos tratando de um conjunto de 4 servos, precisaremos utilizar o Sensor Shield V5 para alimentar todo o sistema e fornecer a corrente necessária para os servos sem passar pelo regulador de 1 A da placa Arduino (caso você esteja usando o RoboARM com uma Julieta, basta alimentá-la diretamente com uma fonte de pelo menos 3 A que a própria Julieta possui um regulador que irá fornecer até 3 A para os servos).

A conexão dos componentes ficará como na imagem abaixo.

Caso esteja utilizando com uma Julieta: conecte os servos nos pinos A0 até A3 e os direcionais e alimentação dos joysticks nos pinos A4 em diante.


Upload do código na placa

Antes de alimentar o conjunto com a fonte (veremos no próximo passo como alimentar o projeto corretamente), precisamos programar a placa Arduino para controlar os servos do RoboARM. Para isso precisaremos da Arduino IDE 1.8.x no computador, que é o programa que irá fazer o upload do nosso código para a placa.

Se essa é sua primeira vez utilizando um Arduino, clique na imagem abaixo para ver o tutorial que irá te ensinar como fazer o download e instalar a Arduino IDE em seu computador.
Com a Arduino IDE instalada, conecte sua placa Arduino em seu computador, copie e cole o código abaixo dentro da IDE.

Caso esteja utilizando com uma Julieta: lembre-se de alterar no código acima os pinos dos servos e joysticks para os novos pinos que estão conectados (servos nos pinos A0 até A3 e os direcionais e alimentação dos joysticks nos pinos A4 em diante).


Antes de fazer o upload do código na placa, certifique-se de que as configurações do menu de ferramentas estão iguais às da imagem abaixo.

O número atrelado à Porta COM pode mudar de sistema para sistema: fique tranquilo caso o número seja diferente, mas certifique-se de escolher a Porta COM que está conectada sua placa.


Após igualar as configurações, você já pode carregar o código para a sua placa clicando no ícone .
Se você seguiu todos os passos corretamente até aqui, você verá a mensagem "Carregado" no painel inferior da IDE informando que o código foi carregado com sucesso para a sua placa.

Alimentando o projeto

Agora que já carregou o código do braço robótico, desconecte sua placa Arduino do computador para que possamos alimentar o projeto com uma fonte.

O pacote Eletrônica RoboARM contém uma Fonte 5V 5A e um Extensor DC P4 Fêmea que você utilizará agora para fornecer energia para todo o Braço Robótico: com a fonte ainda desconectada da tomada, insira o conector P4 da fonte no Extensor DC P4 Fêmea, como na foto abaixo.
O Extensor DC P4 Fêmea nos permite separar os polos positivo e negativo da fonte (VCC e GND) sem precisarmos cortar o conector para ter acesso aos cabos, legal né?

Iremos alimentar todo o RoboARM através do borne de conexão do Sensor Shield V5: com a chave Phillips, desaperte os parafusos do borne e insira o fio preto no borne indicado como GND e aperte o parafuso para firmar a conexão. Agora, insira o fio vermelho no borne indicado como VCC e aperte o parafuso para firmar a conexão.

IMPORTANTE: certifique-se de que o jumper esteja conectado nos pinos ao lado do borne para que a fonte alimente todo o sistema.

Hora de se divertir

Já estamos na etapa final! Se você seguiu corretamente os passos anteriores, agora é só conectar sua fonte na tomada para o RoboARM iniciar.

Abaixo você confere o que cada joystick irá controlar na movimentação do seu RoboARM.
ATENÇÃO: o código proposto neste tutorial conta com algumas medidas de segurança para evitar o travamento e esforço excessivo dos servos, a fim de prever que os mesmos corram risco de queimar. Se perceber que algum servo está fazendo muito esforço e/ou esquentando demais, realize o movimento contrário ou corte a alimentação do conjunto para destravar o eixo e prevenir que ele queime.

Boa diversão ;)


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


Janchietar
date Enviado: 2018-12-28 17:30:57
Olá a todos! Bacana, sccamargo, que então agora funcionou. Então esse é o procedimento correto. Primeiramente carrega do programa no Arduino sem o Shield e só depois é que liga o shield. Interessante que então o problema da garra é geral e deve ser algum problema na parte do programa que calibra a posição básica da garra. Seria preciso que os engenheiros da RoboCore vissem estas nossas mensagens para tentar solucionar o problema. Será que eles não estão acompanhando esta discussão? Como será que faz para eles verem?
Em relação à velocidade dos movimentos, de fato, os movimentos melhoram com curtos toques nos joysticks, mas eu acredito que deve ter um parâmetro no programa que define uma espécie de "sensibilidade" que pode fazer os movimentos um pouco mais lentos. Isso também os engenheiros da RoboCore podem solucionar facilmente e nos indicar o que mudar no programa original. Abraços a todos.

Francois
date Enviado: 2019-01-09 12:57:33
Janchietar
É recomendado que o braço seja alimentado somente pela fonte externa para evitar conflitos de alimentação (com o jumper da imagem do tutorial conectado). Além disso, procure carregar os código para a placa apenas quando os servo motores estiverem desconectados (por exemplo sem o jumper citado), pois eles podem precisar de mais corrente do que a porta USB pode fornecer.

Para diminuir a sensibilidade do controle você pode tentar aumentar o tempo de pausa entre cada laço. Para isso basta alterar o valor da variável <delay_loop> que está na seção "variables" do código.

Se a garra ou algum outra parte do braço ainda não estiver de acordo, envie um e-mail para suporte@robocore.net com os números dos pedidos (ou das notas fiscais), algumas fotos do sistema montado e um vídeo mostrando o controle de todos os motores pelos joysticks usando o código deste tutorial.

Janchietar
date Enviado: 2019-01-09 21:38:10
Janchietar
Obrigado, François. Vou seguir as suas recomendações. Dentro de alguns poucos dias eu posto o resultado. Vou enviar também e-mail com fotos e vídeo. Abraço e um ótimo 2019.

sccamargo
date Enviado: 2018-12-28 11:20:02
Olá, mais uma vez. Segui os passos do Janchietar para carregar o código. Depois de montado o shield, fui colocando um cabo por vez e testando seus movimentos. Conclusão: todos os comandos funcionaram, com exceção da garra que, similar ao relatado pelo Janchietar, fecha muito pouco e abre-se totalmente, mas diferentemente dele, os movimentos são controláveis por leves toques no joystick. quanto à garra, desmontei e tornei a montar mas o problema continua.

Francois
date Enviado: 2019-01-09 12:52:19
sccamargo
Envie um e-mail para suporte@robocore.net com os números dos pedidos (ou das notas fiscais), algumas fotos do sistema montado e um vídeo mostrando o controle de todos os motores pelos joysticks usando o código deste tutorial.

sccamargo
date Enviado: 2019-01-09 14:45:19
sccamargo
Olá, obrigado pelo retorno. Como estou fora, de férias, só poderei seguir as orientações depois do dia 21/01. Por enquanto, fico acompanhando os comentários aqui.

Janchietar
date Enviado: 2018-12-27 00:00:09
Olá pessoal, eu de novo! Mais um comentário, os comandos dos dois joysticks funcionam, com exceção do da garra, que não fecha totalmente, como eu havia comentado antes. Mas, vale a pena também observar que os movimentos da base e dos braços de altura e de avanço são relativamente rápidos. Prevejo que será difícil tentar pegar um objeto e depositá-lo em determinado lugar, porque os movimentos são rápidos. Será que tem uma "sensibilidade" dos movimentos, para torná-los mais lentos e portanto, mais controláveis? Abraços.

Janchietar
date Enviado: 2018-12-26 23:25:31
Olá a todos deste fórum! Para mim aparentemente deu tudo certo, com exceção do movimento da garra. Eu carreguei o programa na placa Arduino Uno R3 sem o Shield. Depois que eu carreguei o sketch, eu desliguei o cabo USB do laptop, instalei o shield sobre o Arduino e liguei a fonte de 5V e 5A nos terminais do Shield, com o jumper instalado. Todos os comando do joystick funcionam, só que o comando da garra não a fecha totalmente. Ela abre totalmente, mas não fecha totalmente. Ela fecha mais ou menos até a metade. Será que é problema de calibração? Bom, parece que eu tive uma melhor sorte. Vou procurar entender os comandos da garra para ver se percebo algo que possa ser mudado. Abraço a todos.

sccamargo
date Enviado: 2018-12-23 16:41:33
Usando um código mais simples e carregando com os cabos desconectados do shield:

1. alimentando com a fonte de 5V pelo borne do shield (jumpeado), move o braço voluntária e erraticamente e não obedece o joystick;

2. alimentando com o fonte 5V pelo plug do Arduíno (shield sem jumper), cessa o movimento voluntário e obedece parcialmente o joystick.

3. a primeira vista pode ser que os eixos dos servos estejam desalinhados em relação aos braços, garra e base, embora tenha seguido a orientação do tutorial (mantê-los, no sentido anti-horário, até o final de curso).

PS. se alguém mais está com problemas, poste suas dúvidas ou possíveis soluções encontradas.

Francois
date Enviado: 2019-01-09 12:53:42
sccamargo
Como a leitura dos joysticks é feita pelos pinos analógicos, às vezes os comandos erráticos podem ser provocados por um mau contato nas conexões do controle.

sccamargo
date Enviado: 2018-12-23 13:29:58
1. Carreguei o código com os cabos dos servos e joystick desligados, parou de piscar o led da placa e ao ligar, o monitor serial indica que houve a calibragem dos eixos X e Y.
2. porém, movimenta-se sozinhos, às vezes rápido, outras lentamente (parece que em loop)
3. Joystick não funciona.
4. Coloquei um código mais simples mas continua a movimentar-se sozinho, porém aceita alguns comandos, parece errático.

davikd
date Enviado: 2018-12-22 19:45:54
Ol, fiz e refiz todos os procedimentos, mas continuo com problemas,

Estou tendo problemas com o meu, eu estava com o mesmo problema relatado aqui pelo sccamargo, desconectei e reconectei os servos e os erros ao compilar quantinuam iguais porem ele ligou, mas ficou maluco, ao ligar ele sozinho abaixa tudo, e abre bem pouco a garra e a parte direita do controle não faz nada, a esquerda consigo controlar o movimene da base e expandir o braço, mas ele não levanta e quando levanta é muito pouco.

Francois
date Enviado: 2019-01-09 12:49:16
davikd
É recomendado que o braço seja alimentado somente pela fonte externa para evitar conflitos de alimentação (com o jumper da imagem do tutorial conectado). Além disso, procure carregar os código para a placa apenas quando os servo motores estiverem desconectados (por exemplo sem o jumper citado), pois eles podem precisar de mais corrente do que a porta USB pode fornecer.

Em relação à programação, você está usando uma IDE recente (a partir da 1.8.x)?

sccamargo
date Enviado: 2018-12-22 14:16:27
olá, após todos os procedimentos, o led da placa fica piscando ao ligar no USB para carregar o código e ao alimentar a placa.

1. todos os cabos revisados - ok

2. IDE confirma carregamento do código

3. jumper de alimentação - ok

Sintoma: ao alimentar a placa, o led pisca e o braço avança lentamente para esquerda, tanto com a fonte de 5V como com o cabo USB e o joystick não funciona.

Informação da IDE:

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino: In member function &#39;size_t Joystick::printTo(Print&) const&#39;:

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:128:28: warning: passing &#39;const Joystick&#39; as &#39;this&#39; argument discards qualifiers [-fpermissive]

       size += p.print(getX());

                            ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:91:9: note:   in call to &#39;int Joystick::getX()&#39;

     int getX(void){

         ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:130:29: warning: passing &#39;const Joystick&#39; as &#39;this&#39; argument discards qualifiers [-fpermissive]

       size += p.print(meanX());

                             ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:112:9: note:   in call to &#39;int Joystick::meanX()&#39;

     int meanX(void){

         ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:132:28: warning: passing &#39;const Joystick&#39; as &#39;this&#39; argument discards qualifiers [-fpermissive]

       size += p.print(getY());

                            ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:98:9: note:   in call to &#39;int Joystick::getY()&#39;

     int getY(void){

         ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:134:29: warning: passing &#39;const Joystick&#39; as &#39;this&#39; argument discards qualifiers [-fpermissive]

       size += p.print(meanY());

                             ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:119:9: note:   in call to &#39;int Joystick::meanY()&#39;

     int meanY(void){

         ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:137:35: warning: passing &#39;const Joystick&#39; as &#39;this&#39; argument discards qualifiers [-fpermissive]

         size += p.print(getButton());

                                   ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:105:9: note:   in call to &#39;int Joystick::getButton()&#39;

     int getButton(void){

         ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino: In member function &#39;virtual size_t RoboServo::printTo(Print&) const&#39;:

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:213:39: warning: passing &#39;const RoboServo&#39; as &#39;this&#39; argument discards qualifiers [-fpermissive]

       size += p.print(Servo::attached());

                                       ^

In file included from C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:39:0:

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.19.0_x86__mdqgnx93n4wtt\libraries\Servo\src/Servo.h:113:8: note:   in call to &#39;bool Servo::attached()&#39;

   bool attached();                   // return true if this servo is attached, otherwise false 

        ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:217:35: warning: passing &#39;const RoboServo&#39; as &#39;this&#39; argument discards qualifiers [-fpermissive]

       size += p.print(Servo::read());

                                   ^

In file included from C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:39:0:

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.19.0_x86__mdqgnx93n4wtt\libraries\Servo\src/Servo.h:111:7: note:   in call to &#39;int Servo::read()&#39;

   int read();                        // returns current pulse width as an angle between 0 and 180 degrees

       ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino: In function &#39;void loop()&#39;:

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:401:53: warning: invalid conversion from &#39;int&#39; to &#39;Motor&#39; [-fpermissive]

         angle = AngleCorrection(current_motor, angle); // validate the angle

                                                     ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:319:5: note:   initializing argument 1 of &#39;int AngleCorrection(Motor, int)&#39;

 int AngleCorrection(Motor, int);

     ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:412:53: warning: invalid conversion from &#39;int&#39; to &#39;Motor&#39; [-fpermissive]

         angle = AngleCorrection(current_motor, angle); // validate the angle

                                                     ^

C:\Users\sergi\Documents\Arduino\robo-arm-joystick-fio-1\robo-arm-joystick-fio-1.ino:319:5: note:   initializing argument 1 of &#39;int AngleCorrection(Motor, int)&#39;

 int AngleCorrection(Motor, int);

     ^

O sketch usa 6842 bytes (21%) de espaço de armazenamento para programas. O máximo são 32256 bytes.
Variáveis globais usam 308 bytes (15%) de memória dinâmica, deixando 1740 bytes para variáveis locais. O máximo são 2048 bytes.

Francois
date Enviado: 2019-01-09 12:48:53
sccamargo
É recomendado que o braço seja alimentado somente pela fonte externa para evitar conflitos de alimentação (com o jumper da imagem do tutorial conectado). Além disso, procure carregar os código para a placa apenas quando os servo motores estiverem desconectados (por exemplo sem o jumper citado), pois eles podem precisar de mais corrente do que a porta USB pode fornecer.

Em relação à programação, você está usando uma IDE recente (a partir da 1.8.x)?