CONTACT INFORMATION
Monday to Friday from 8:00 to 17:30
+55 11 3522-7626 / vendas@robocore.net
Back
to top

Kit Iniciante Robótica - 6. Primeiros Movimentos

This tutorial is not available in English



Chega de piscar LEDs, chegou a hora de programar sua placa Julieta para colocar o seu robô pra andar! Nesse capítulo você aprenderá como mover os motores com a placa, seja indo para frente, para trás, ou mesmo fazendo curvas. Este tópico é de extrema importância já que seus conceitos serão usados em qualquer projeto de robô móvel. Preste bastante atenção no que for proposto aqui, principalmente se você não tiver experiência com uso de bibliotecas.


Movendo o robô para frente


Para facilitar todo o trabalho, chegou a hora de utilizar a Biblioteca FalconRobot. Para isso, a linha #include "FalconRobot.h" deve ser adicionada ao topo do código. Essa linha possibilitará a criação do objeto FalconRobotMotors que possui as funções para controlar os movimentos do seu robô.


Essa linha cria um objeto chamado motors que perimitirá o controlar os motores esquerdo e direito do robô e assim controlar seu movimento. Veja mais detalhes na seção Entendendo o Código.

Antes de enviar este código de exemplo, tenha certeza que o seu robô está em uma posição segura. O programa começará imediatamente depois que você carregar o código em sua Julieta. Isso pode fazer com que ele caia da sua mesa ou derrube algum objeto. Por esse motivo, coloque o robô em uma posição onde as rodas não toquem a mesa.

Importante: para que o exemplo funcione é necessário que os motores estejam devidamente conectados, a chave dos motores esteja na posição ON e a placa esteja sendo alimentada pelas baterias.


Carregue esse código de exemplo para a sua Plataforma Falcon. Para isso, vá em: Arquivo->Exemplos->RoboCore Falcon Robot Library->Exp2_1_DriveForward ou copie e cole o código de exemplo abaixo.


Após carregar o código para seu robô você deverá ver os dois motores girando par frente em velocidade máxima por um segundo e depois parando.
Se por acaso você observar que uma das rodas está girando para trás ao invés de ir para frente, basta inverter os fios do motor em questão. Por exemplo, se o motor da esquerda está girando para trás, remova o cabo USB e o conector de bateria do robô e inverta os fios do motor esquerdo em seu conector. Reconecte tudo e pronto!


Se os dois motores estiverem girando para frente, desplugue o cabo USB e coloque o seu robô no chão. Aperte o Botão Reset para resetar manualmente o seu programa e veja o seu robô andando para frente pela primeira vez!


Entendendo o código


Adicionar a linha include "FalconRobot" ao topo do código permite acessar um número de classes, objetos e funções que irão auxiliar você a controlar o seu robô muito facilmente. A biblioteca FalconRobot possui rotinas para criação dos seguintes objetos:
  • FalconRobotMotors - controle dos motores
  • FalconRobotButton - leitura dos botões
  • FalconRobotLineSensor - leitura dos sensores de linha
  • FalconRobotDistanceSensor - leitura do sensor de distância
Nesse capítulo o foco é entender como funciona a classe FalconRobotMotors. Essa classe possui os métodos para controlar os motores. Na programação, métodos são as ações ou perguntas que você faz aos objetos.


Lembre-se que nessa linha um objeto chamado motors é criado utilizando a classe FalconRobotMotors. Ela recebe 4 parâmetros, que são, respectivamente, os pinos EN1, EN2, IN1 e IN2 dos motores. Isso é chamado de "inicialização" de um objeto. Agora, você pode utilizar qualquer método que faça parte dessa classe. Para utilizar (ou "chamar") um método, o comando irá iniciar com motores. seguido do nome do método. Veja alguns exemplos:

Movendo para Frente/Trás

motors.drive(velocidade, direcao) aciona os dois motores. Esse método possui dois parâmetros: a velocidade e a direção (FORWARD ou BACKWARD). A velocidade é um valor em porcentagem, onde 0 significa 0% (Motor parado) e 100 significa 100% (motores em máxima velocidade). A direção pode ser FORWARD (para frente) ou BACKWARD (para trás).


Algumas vezes rodar os motores em máxima velocidade faz as rodas derraparem. Se você enfrentar problemas de tração, tente trabalhar com velocidades mais baixas.

Parando os motores

motors.stop() desliga os motores, fazendo o robô parar. Nesse caso, é o mesmo que definir a velocidade para 0%.


Em alguns momentos você perceberá que, dependendo da velocidade que o robô está, ao mandá-lo parar, ele levará um certo tempo até que pare totalmente, pois mesmo ao desligar os motores, o robô tenderá a se mover um pouco mais por inércia.


Indo Além


Agora que você sabe como controlar o seu robô, veja se você consegue fazê-lo mover para frente por 2 segundos, parar por 1 segundo e dar ré por 2 segundos.


Solução de Problemas


Erro de compilação - 'FalconRobotMotors' does not name a type

Isso indica que a Biblioteca FalconRobot não foi adicionada corretamente ao sketch. Isso pode ser resultado de basicamente duas coisas:
  • #include "FalconRobot.h" - essa linha precisa estar no topo do código e escrita exatamente assim.
  • Você não instalou a Biblioteca corretamente. Volte ao Capítulo Softwares e Drivers e tenha certeza de instalar corretamente a Biblioteca FalconRobot.

Os motores não estão girando!

  • Verifique se a chave dos motores está na posição ON
  • Tenha certeza que as pilhas estão devidamente encaixadas em seu robô e que o conector está bem conectado à sua placa Julieta.
  • Tenha certeza que conectou os motores corretamente. Observe o Capítulo Eletrônica para maiores detalhes.

O robô se move, mas gira em círculo!

  • Provavelmente uma de suas rodas está girando para trás ao invés de girar para frente. Identifique qual roda é e inverta os fios desse motor, basta trocar o fio vermelho pelo preto.

O robô não anda reto! Ele está fazendo uma curva!

Isso é muito comum para todos os robôs que possuem rodas motoras independentes. Existem muitas razões para isso, construção do próprio motor, pequena diferença no diâmetro das rodas, etc. Veja abaixo algumas coisas que você pode fazer para diminuir essa diferença:
  • Verifique se não tem nada raspando na roda do robô. Observe se a parte interna da roda não está tocando o chassi. Se isso for verdade, tente deixar uma pequena distância entre a roda e o chassi, apenas o suficiente para que eles não se toquem mais.
  • Para seguir em linha reta, é necessário que as duas rodas girem exatamente na mesma velocidade. Entretanto, girando os motores na velocidade máxima, pode ser que as rodas derrapem, perdendo tração. Portanto, tente utilizar uma velocidade menor que 100%.
  • Usar um encoder seria uma maneira de garantir que as duas rodas girem exatamente a mesma distância. Esse conceito não será abordado nessa apostila, mas você pode buscar maiores informações sobre o assunto.


Fazendo Curvas


Nesse experimento você aprenderá como fazer o seu robô realizar curvas ajustando a velocidade do motor esquerdo e direito de maneira independente. Serão apresentados novos métodos da classe FalconRobotMotors que permitirão controlar os motores separadamente.
Mais uma vez, lembre-se de manter o seu robô em uma posição segura para que ele não caia da sua mesa ou derrube algum objeto. Mantenha as rodas do robô longe da mesa ou de qualquer outra superfíce.

Carregue esse código de exemplo para a sua Plataforma Falcon. Para isso, vá em: Arquivo->Exemplos->RoboCore Falcon Robot Library->Exp2_2_Turning ou copie e cole o código de exemplo abaixo.


Após carregado, o sketch fará com que as rodas de seu robô gire um pouco, mude de direção e pare. Remova o cabo USB e coloque o robô no chão. Pressione o botão reset para reiniciar o programa. Observe seu robô se movendo!
Em uma superfície totalmente plana e sem obstáculos, seu robô deve seguir para frente em linha reta, girar cerca de 90ª para a direita e, em seguida, mover-se para frente novamente.
Calma, se o seu robô não estiver girando 90º corretamente, existem duas coisas que você pode fazer para ajustar esse giro:
  • Tente alterar o tempo de rotação modificando o tempo do delay(500). O padrão do exemplo é 500ms, tente aumentar ou diminuir de acordo com o resultado que você tem observado.
  • Você pode também alterar a velocidade com que o robô faz o giro, até uma velocidade que faça com o que o robô gire os 90º desejados.


Entendendo o Código


No último exempo você utilizou o comando motors.drive(velocidade, direcao) para controlar os dois motores de modo a fazer o robô ir para frente ou para trás.
Para controlar os motores individualmente, a classe FalconRobotMotors possui dois métodos utilizados no exemplo:


Similar ao .drive(velocidade, direcao), a velocidade é um valor de 0 a 100. Onde 0 é a velocidade nula, ou seja, motor parado, e 100 é a velocidade máxima. E a direcao, FORWARD = Frente, BACKWARD = Ré.
A Plataforma Robótica Falcon é bastante ágil, por isso é interessante utilizar velocidades menores para virar. No exemplo, a velocidade utilizada foi de 50%.

setup() vs. loop()

Até esse ponto, os códigos foram todos construídos dentro do setup(). Qualquer código que for colocado entre as chaves { e } depois do setup() irá ser executado apenas uma vez. Isso é muito conveniente para testar instruções ou rotinas únicas. Mas, e se você desejar repetir um padrão, como um quadrado por exemplo?
Qualquer código que for colocado no loop() irá ser repetido infinitas vezes enquanto o robô estivar energizado e não for resetado. No código de exemplo foi colocado um código para que o seu robô faça uma figura 8. As duas barras em frente cada linha de código está comentando ele. Remova as barras para ver seu robô fazer uma figura 8.


Você provavelmente terá que ajustar os valores de velocidade e delay para que a figura fique mais próxima do desejado.


Indo Além


Com os conceitos desse exemplo você conseguiria programar seu robô para fazer um quadrado? Agora que você já ajustou a curva de 90º, basta você repetir isso quatro vezes para que seu robô faça um trajeto parecido com uma caixa.

Agora é hora de usar a imaginação, quais outras figuras geométricas ou qualquer tipo de padrão você consegue fazer?


Solucionado Problemas


O robô não consegue andar! Mas você ouve um barulho agudo!

  • Se você consegue sentir que o motor está tentando girar, mas não consegue, tente aumentar a velocidade nominal no código. Se isso não resolver, nem com a velocdade máxima, talvez seja a hora de trocar as pilhas de seu robô.


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

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


alexhoffmann83
date Enviado: 2020-03-14 17:04:44
Boa tarde.
Que sugestão de bateria mais durável que pilhas vocês dão para este robô de kit iniciante para robótica com placa julieta? Um mesmo código que rodou poucas vezes perfeitamente agora está funcionando de forma errática. Creio que sejam as pilhas que descarregaram rapidamente. Uma bateria de 9v poderia ser ligada neste carrinho ao invés das pilhas? Nesse caso, duraria substancialmente mais? Ou vocês tem outra sugestão para dar?
A propósito, muito bom o kit. Meu filho de 9 anos está aprendendo a programar e tomar gosto pela programação graças a essa oportunidade. Obrigado.

Giovanni5
date Enviado: 2020-03-16 08:47:53
alexhoffmann83
Baterias de 9 V não são recomendadas para alimentação de robôs, pois elas possuem uma taxa de descarga inferior às próprias pilhas, o que pode resultar em robô que não é capaz de partir, por conta do consumo de corrente dos motores. A bateria ideal para trabalhar com a Julieta e com os motores da plataforma robótica Falcon é bateria de LiPo de 7,4 V (https://www.robocore.net/loja/baterias/bateria-lipo-2s-2200mah-30c ou https://www.robocore.net/loja/baterias/bateria-lipo-2s-1800mah-15c), que possui uma taxa de descarga e duração de carga muito superior às pilhas.

enio.arantes
date Enviado: 2018-12-28 23:04:59
Boa noite, estou efetuando testes com o kit e parece estar apresentando algum problema, pois quando coloco os motores para rodar para trás (BACKWARD), somente as luzes vermelhas acendem, alternando a luminosidade conforme se alternam. 

void loop() {
  // Figure 8 pattern -- Turn Right, Turn Left, Repeat
  motors.leftDrive(100, BACKWARD);  // Left motor CCW at 100%
  motors.rightDrive(25, FORWARD);   // Right motor CW at 40%
  delay(1000);
  motors.leftDrive(25, BACKWARD);    // Left motor CCW at 40%
  motors.rightDrive(100, FORWARD);   // Right motor CW at 100%
  delay(1000);
}

Francois
date Enviado: 2019-01-08 17:50:22
enio.arantes
Suspenda o robô para que não ande sem rumo e carregue o código abaixo na sua Julieta:


Em seguida nos descreva o comportamento dos LEDs.

winnesd0
date Enviado: 2018-10-01 14:32:51
boa tarde, o que são os EN1, EN2, IN1 e IN2 dos motores? e eu posso efetuar os testes dos motores com uma fonte atx de  volts?

winnesd0
date Enviado: 2018-10-01 14:35:21
winnesd0
12 volts***

Francois
date Enviado: 2018-10-01 15:36:37
winnesd0
ENx e INx são, respectivamente, os pinos de PWM e de direção para controlar o driver de motores (L298). Como o driver possui dois canais independentes, utiliza-se os pares de controle 1 (EN1 e IN1) e 2 (EN2 e IN2).

Você pode alimentar a sua Julieta com 12 V desde que os seus motores sejam compatíveis com essa tensão. No caso do Falcon, você pode fazer alguns testes com esse valor de tensão, porém recomendamos que utilize um valor menor para uso contínuo, pois o robô será mais controlável e os motores terão uma vida útil maior.

winnesd0
date Enviado: 2018-10-01 16:44:39
winnesd0
Estes ENx e INx são somente quando se usa a placa Julieta ou com arduino + shiled ponte H tambem?
Eu estou utilizando Arduino Mega e Shield ponte H para programar o falcon, durante os testes estou utilizando uma fonte atx de 12 volts e para apresentação (é pra um trabalho de faculdade) irei utilizar bateria de litio de 11.1 volts pelo que diz a embalagem. Estou com outra duvida, eu inicialmente tentei programar os motores com a biblioteca AFMotor mas não deu resultado nenhum com os motores. Eles só funcionam se usar esta biblioteca que indica no tutorial? apenas ela ou a do AFMotor tambem no meu caso com a shield?

Francois
date Enviado: 2018-10-01 19:18:07
winnesd0
No datasheet (https://www.st.com/en/motor-drivers/l298.html) ou no esquema elétrico (https://bit.ly/2P2BQDv) do L298 observa-se os pinos INx (1 a 4) e EN (A e B). Estes são os pinos de controle do L298, e podem variar se você usar outro driver. A biblioteca deste manual foi concebida para o L298, pois é o driver da placa Julieta. Mas leve em consideração que na Julieta os pinos IN2 (INA2 no esquema elétrico da placa) e IN4 (INB2) estão ligados aos pinos IN1 (INA1) e IN3 (INB1) por meio de um circuito inversor. Se o seu módulo ponte H precisar de dois pinos para o controle da direção, não recomendamos que use a biblioteca deste tutorial.

profmarcoshg
date Enviado: 2018-08-06 13:18:06
Boa tarde, estou carregando o programa de funcionamento dos motores, entretanto não ocorre nada, as baterias estão carregadas e a alimentação está Ok. quando carrego o programa executa o procedimento corretamente informado carregado e acompanhado da mensagem:
O sketch usa 1272 bytes (3%) de espaço de armazenamento para programas. O máximo são 32256 bytes.
Variáveis globais usam 17 bytes (0%) de memória dinâmica, deixando 2031 bytes para variáveis locais. O máximo são 2048 bytes.
Entretanto nada ocorre seja com a alimentação da placa ou sem usando o botão reset.

Francois
date Enviado: 2018-08-06 14:08:48
profmarcoshg
A chave M_EN, que fica entre o conector de alimentação e o conector do motor 1, está na posição On? Você pode primeiro testar sem os motores conectados, para ver se pelo menos os seus LEDs acendem.

AlmiroCyrinoFil
date Enviado: 2017-09-29 07:50:52
Foram feitas as montagens previstas. Inclusive colocando as pilhas, mas para o teste foi desligado uma das pilhas. Foi feita a compilação sem problema. Mas na execução deu o seguinte erro:
O arquivo esta sendo usado por outro processo. Como resolver este problema?
Obrigado

MarceloFarias
date Enviado: 2017-09-29 09:13:24
AlmiroCyrinoFil
Tente abrir e fechar a IDE. Caso não funcione, tente reiniciar o seu computador e tentar novamente.

Ailsonn
date Enviado: 2017-09-13 17:17:37
Eu consegui resolver o problema passado mas agr é o seguinte ao apertar em carregar no ARDUINO ele não faz nada.. só aparece a mensagem embaixo: "O sketch usa 1272 bytes (3%) de espaço de armazenamento para programas. O máximo são 32256 bytes.
Variáveis globais usam 17 bytes (0%) de memória dinâmica, deixando 2031 bytes para variáveis locais. O máximo são 2048 bytes."E
As ligações foram feitas de forma correta. Ele apenas para de piscar a luz "L" E FICA CM ELA LIGADA

Ailsonn
date Enviado: 2017-09-13 17:26:02
Ailsonn
Testei agora.. ele parou de ligar a luz L e ligou as de trás do motor junto cm as duas da frente e dps voltou ao "Normal".. e n fez nada

Ailsonn
date Enviado: 2017-09-13 17:31:41
Ailsonn
a luzes que piscam são a RX e TX.. tentei clicar no reset e nada.. ele só piscou as luzes que ficam entre os motores e voltou a acender a luz L

Francois
date Enviado: 2017-09-13 19:00:01
Ailsonn
Ao carregar o código para a placa deve aparecer a mensagem "carregando", que muda para "concluído" quando o processo deu certo. Durante a programação da placa, os LEDs Rx e Tx piscaram, pois a placa está se comunicando com o computador para garantir a transferência do código.
Se logo após carregar a placa as luzes dos motores piscam, sendo que a chave dos motores está na posição ON, significa provavelmente que o código está sendo executado. Se você estiver alimentando a placa somente pela USB os motores não girarão, você verá somente a execução do programa com os LEDs dos motores. Note pelo código que esses LEDs piscarão, e dentro de aproximadamente 2 s eles desligarão e o programa não executará nenhuma outra função.

Ailsonn
date Enviado: 2017-09-14 09:42:15
Ailsonn
Tá, isso significa então que a placa n está sendo alimentada pela bateria ? Pois quando tiro o USB ela fica totalmente desligada.. isso oq vc falou ocorreu.. apenas pisca e a roda não faz nada!! Ao tirar do USB se eu apertasse *RESET* ele faria a programação mas apenas fica desligado..  Afinal se ela não está rodando é pq a bateria não está conectada devidamente ? E é também por isso que ele não faz nada ao tirar do USB ?

Francois
date Enviado: 2017-09-14 13:45:23
Ailsonn
Se ao desconectar a USB a placa desliga, significa que a outra fonte de alimentação, a bateria, não está corretamente conectada. O primeiro passo ao usar a placa é tentar programá-la. Faça o teste com o exemplo Blink (Arquivo > Exemplos > 01.Basic). Se funcionar, você verá os LEDs Rx e Tx da Julieta acenderem durante a programação e, após essa etapa, o LED L piscar de um em um segundo. Em seguida desconecte a USB e alimente a placa pela bateria para verificar que as suas ligações estão corretas e o código continua funcionando normalmente. Depois disso você pode partir para o teste dos motores, que é o código deste tutorial.

O botão de Reset só funciona quando a placa está energizada, pois ele faz o microcontrolador voltar para a primeira linha do código.

skutner
date Enviado: 2017-08-28 15:44:29
Seguindo a orientação, testei os motores em separado, com o sketch original (potência 100%, delay 1000ms). Em separado, cada um deles funciona corretamente, de acordo com o programa. Conectando os dois simultaneamente, o comportamento errático volta: duas ou três vezes para frente, uma vez ré.... e depois de alguns resets, entra no "loop infinito", rodando apenas para a frente até eu desligar a chave on/off depois de 5 ou 6 repetições

MarceloFarias
date Enviado: 2017-08-29 09:54:33
skutner
Por favor, tente remover os fios dos seus sensores e refaça o teste com os dois motores conectados. Deixe apenas os motores e bateria conectados a sua Julieta.

cristiane2002
date Enviado: 2017-08-24 17:56:05
quando coloco a linha aparece isso:Arduino: 1.8.4 (Windows 7), Placa:"Arduino/Genuino Uno"

C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\arduino-builder -dump-prefs -logger=machine -hardware C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware -tools C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\tools-builder -tools C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -built-in-libraries C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\libraries -libraries C:\Users\jota\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10804 -build-path C:\Users\jota\AppData\Local\Temp\arduino_build_714894 -warnings=none -build-cache C:\Users\jota\AppData\Local\Temp\arduino_cache_364365 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -verbose C:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\examples\Exp2_1_DriveFoward\Exp2_1_DriveFoward.ino
C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\arduino-builder -compile -logger=machine -hardware C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware -tools C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\tools-builder -tools C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -built-in-libraries C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\libraries -libraries C:\Users\jota\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10804 -build-path C:\Users\jota\AppData\Local\Temp\arduino_build_714894 -warnings=none -build-cache C:\Users\jota\AppData\Local\Temp\arduino_cache_364365 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr -verbose C:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\examples\Exp2_1_DriveFoward\Exp2_1_DriveFoward.ino
Using board 'uno' from platform in folder: C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr
Detecting libraries used...
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10804 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR   "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\cores\arduino" "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\variants\standard" "C:\Users\jota\AppData\Local\Temp\arduino_build_714894\sketch\Exp2_1_DriveFoward.ino.cpp" -o "nul"
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10804 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR   "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\cores\arduino" "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\variants\standard" "-IC:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src" "C:\Users\jota\AppData\Local\Temp\arduino_build_714894\sketch\Exp2_1_DriveFoward.ino.cpp" -o "nul"
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10804 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR   "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\cores\arduino" "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\variants\standard" "-IC:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src" "C:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src\FalconRobotButton.cpp" -o "nul"
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10804 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR   "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\cores\arduino" "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\variants\standard" "-IC:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src" "C:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src\FalconRobotDistanceSensor.cpp" -o "nul"
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10804 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR   "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\cores\arduino" "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\variants\standard" "-IC:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src" "C:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src\FalconRobotLineSensor.cpp" -o "nul"
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10804 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR   "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\cores\arduino" "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\variants\standard" "-IC:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src" "C:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src\FalconRobotMotors.cpp" -o "nul"
Generating function prototypes...
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10804 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR   "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\cores\arduino" "-IC:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\hardware\arduino\avr\variants\standard" "-IC:\Users\jota\Documents\Arduino\libraries\FalconRobot-master\src" "C:\Users\jota\AppData\Local\Temp\arduino_build_714894\sketch\Exp2_1_DriveFoward.ino.cpp" -o "C:\Users\jota\AppData\Local\Temp\arduino_build_714894\preproc\ctags_target_for_gcc_minus_e.cpp"
"C:\Users\jota\Documents\arduino-1.8.4-windows (2)\arduino-1.8.4\tools-builder\ctags\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\Users\jota\AppData\Local\Temp\arduino_build_714894\preproc\ctags_target_for_gcc_minus_e.cpp"
Usando a biblioteca FalconRobot-master na versão 0.0.1 na pasta: C:\Users\jota\Documents\Arduino\libraries\FalconRobot-master 
exec: "C:\\Users\\jota\\Documents\\arduino-1.8.4-windows (2)\\arduino-1.8.4\\tools-builder\\ctags\\5.8-arduino11/ctags": file does not exist
Erro compilando para a placa Arduino/Genuino Uno


 e os motores nao rodam oq faço?

Francois
date Enviado: 2017-08-24 18:38:40
cristiane2002
Parece um problema de software. Tente compilar o exemplo Blink (Arquivo > Exemplos > 01.Basic) e se não funcionar, desinstale a IDE e instale a versão ZIP (https://www.arduino.cc/download_handler.php?f=/arduino-1.8.4-windows.zip).

skutner
date Enviado: 2017-08-22 18:09:19
Fazendo os primeiros testes com o robot, me deparo com um comportamento estranho. Alterei o código do Exp2_1_DriveForward para incorporar ré; quando carrego na placa, ainda conectado na USB o comportamento é o esperado: roda para frente por um segundo; desliga os motores; roda para trás um segundo; desliga. Quando desconecto a USB, ele fica rodando indefinidamente para a frente. Nem para, nem inverte a rotação. Preciso desligar na chave On/Off. Segue código:
#include <FalconRobot.h> 

FalconRobotMotors motors(5, 7, 6, 8); 

void setup() {
  motors.drive(100, FORWARD);  
  delay(1000);         
  motors.stop();       
  motors.drive(100, BACKWARD);  
  delay(1000);        
  motors.stop();      
  
}

void loop() {
  
}

Francois
date Enviado: 2017-08-22 18:51:34
skutner
Você está alimentando o robô com as pilhas ou com outro tipo de bateria? Você tentou alterar as velocidades para 50%?

skutner
date Enviado: 2017-08-22 20:52:07
skutner
Olá François
A alimentação é a padrão, 6 pilhas AA; amanhã tentarei alterar as velocidades e darei feedback.

skutner
date Enviado: 2017-08-23 18:36:30
skutner
Continuando os experimentos de ontem, alterei a velocidade do motor de 100% para 80% e a situação relatada permanece: quando o USB está conectado o programa funciona como esperado, quando USB é desconectado e a alimentação passa a ser a padrão (6 baterias AA) o motor só gira num sentido e entra numa espécie de loop, me obrigando a desligar a chavinha On/Off (ver abaixo continuação....)

skutner
date Enviado: 2017-08-23 18:40:46
skutner
Resolvi tentar então o comando independente dos motores direito e esquerdo com o código abaixo; infelizmente a situação se repete: quando conectado no USB funciona como esperado, nas baterias roda "louco"

#include "FalconRobot.h"  

FalconRobotMotors motors; 

void setup() {
 
  motors.leftDrive(75, FORWARD);
  motors.rightDrive(75, FORWARD); 
  delay(1000);       
  motors.stop();    
  delay(250);       
  motors.leftDrive(75, BACKWARD); 
  motors.rightDrive(75, BACKWARD); 
  delay(1000);       
  motors.stop();    
}



void loop() {

}

Francois
date Enviado: 2017-08-23 20:01:08
skutner
Dependendo dos seus testes e do uso que tenha feito com o robô, suas pilhas nesse momento podem estar com carga baixa e isso pode ser que esteja ocasionando esse problema. Se possível, teste com pilhas novas ou com uma fonte de alimentação que suporte a tensão e corrente necessárias para ver se o problema persiste.

skutner
date Enviado: 2017-08-23 20:08:44
skutner
Resolvi tentar então o comando independente dos motores direito e esquerdo com o código abaixo; infelizmente a situação se repete: quando conectado no USB funciona como esperado, nas baterias roda "louco"

#include "FalconRobot.h"  

FalconRobotMotors motors; 

void setup() {
 
  motors.leftDrive(75, FORWARD);
  motors.rightDrive(75, FORWARD); 
  delay(1000);       
  motors.stop();    
  delay(250);       
  motors.leftDrive(75, BACKWARD); 
  motors.rightDrive(75, BACKWARD); 
  delay(1000);       
  motors.stop();    
}



void loop() {

}

MarceloFarias
date Enviado: 2017-08-24 09:48:46
skutner
Dependendo dos seus testes e do uso que tenha feito com o robô, suas pilhas nesse momento podem estar com carga baixa e isso pode ser que esteja ocasionando esse problema. Se possível, teste com pilhas novas ou com uma fonte de alimentação que suporte a tensão e corrente necessárias para ver se o problema persiste.

skutner
date Enviado: 2017-08-24 17:25:24
skutner
De fato as baterias (novas, que vieram no kit) estavam bem abaixo da tensão nominal (7,3V para o banco de 6 pilhas); instalei novas (Duracell) que estão com tensão de 8,8V, mas o problema persiste. Funciona de acordo com o esperado quando conectado no USB, mas roda apenas para frente e em loop infinito, quando acionado pelas pilhas.

skutner
date Enviado: 2017-08-24 17:45:13
skutner
Fiz mais alguns teste, e observo um comportamento bem estranho: reduzindo o tempo de delay para 500, 800 ou 900 ms o programa funciona corretamente; com delay de 1000 ou 1100 o comportamento é errático; em alguns casos "loop infinito", em outros roda duas, três e até quatro vezes para frente e finaliza com uma de ré (para trás é sempre uma única rodada); fiz uma alteração no programa, encadeando dois delays de 500ms....e aí funcionou; com três delays de 500ms encadeados também funciona! Agora só falta entender ;-) !!

Francois
date Enviado: 2017-08-25 13:04:46
skutner
Esse comportamento é estranho, pois diminuir o delay deveria manter o erro. Ele geralmente acontece quando a fonte de alimentação não consegue fornecer corrente suficiente para o conjunto e acaba desligando ou diminuindo a tensão consideravelmente, por exemplo com pilhas já usadas. Além disso, fazer o motor acelerar, frear ou mudar de movimento bruscamente causa uma demanda alta de corrente e pode interferir na alimentação, por isso o delay menor não deveria melhorar o acionamento.
Verifique as conexões, deixe apenas os motores conectados na placa e teste um motor de cada vez (A, depois B, depois A+B), alterando a velocidade também. Isso talvez dê uma noção melhor do que está acontecendo.