GoGo Board e Blocos para Mecatrônica
Transcript of GoGo Board e Blocos para Mecatrônica
COTUCA - UNICAMP
ANDERSON PIRES ROCHA
DEPARTAMENTO DE MECÂNICA
GOGO BOARD PARA MECATRÔNICA – BLOCOS
V 1.0.2b
CAMPINAS
2014
INTRODUÇÃO
Blocos é um ambiente de programação icônica, aonde o usuário especifica
um programa com elementos visuais, ou blocos, ao invés de escrever um código de
texto (“Blocos” significa “blocks” em Inglês). O software Blocos traduz
automaticamente cada bloco em uma declaração na linguagem de computador
Cricket Logo.
O usuário poderá até mesmo ver o texto do programa gerado se assim
desejar, embora não seja necessário – espera-se que os alunos quando introduzidos
na programação Logo encontrem a representação visual de um programa de
computador mais fácil de aprender do que a versão textual.
Por fim, o software Blocos chama um compilador Cricket Logo, que compila o
texto do programa, gerando uma sequência de códigos que representa o programa,
e essa sequência de códigos é enviada para uma placa controladora para ser
executada. O compilador Cricket Logo é fornecido juntamente com o software Blocos.
Blocos tem sido utilizado com sucesso com as seguintes placas controladoras:
1. Br-Gogo Board ( http://sourceforge.net/projects/br-gogo/ )
2. Babuino Board ( http://babuinoproject.blogspot.com/ )
3. GoGo Real (http://www.gogoreal.com/)
4. GoGo Board (http://www.gogoboard.org/)
O ambiente Blocos foi escrito em Python, portanto, pode ser executado em
Windows, Linux e Mac e demais sistemas compatíveis com esta linguagem.
1. A JANELA PRINCIPAL DO BLOCOS
O ambiente Blocos deverá ser iniciado através do arquivo Blocos.py, no
entanto, antes de utiliza-lo será necessário instalar as dependências de software
para que este arquivo funcione corretamente e o ambiente esteja pronto para uso.
A janela do Blocos (figura 1) irá aparecer poucos segundos após iniciarmos o
programa. As diferentes áreas são rotuladas em azul e suas descrições serão
encontradas a seguir.
Figura 1: Janela principal do Blocos
Uma janela de comando Python (figura 2) também aparecerá no Windows
2000 e XP, e se ocupará com instruções de depuração que poderemos usar no
Blocos, porém, a maior parte delas poderemos ignorar. Às vezes poderemos usar
esta janela para depurarmos problemas se encontrarmos algum.
Figura 2: Janela do Python
2. CONHECENDO O AMBIENTE
Como visto anteriormente na figura 1, temos diversas áreas no ambiente
Blocos, cada qual com uma função específica, conforme veremos a seguir.
• Painel de Blocos: Poderemos clicar em qualquer bloco neste painel e
mover o cursor para o Painel de Programação. O bloco clicado irá
aparecer sob o cursor para que possamos posicioná-lo e soltá-lo
clicando novamente.
• Guias de Blocos: Poderemos clicar nessas guias para selecionar
diferentes menus de Blocos. Setas na parte superior e inferior da guia
são exibidas, as quais irão rolar as guias de blocos visíveis.
• Painel de Programação: Blocos serão montados aqui para a construção
de um programa. O bloco Início sempre aparecerá e sempre começará
um programa. Os blocos "grudam" quando são trazidos próximos uns
dos outros. As formas dos blocos darão pistas quanto ao que se
encaixam diretamente. As descrições dos blocos serão feitas a seguir.
• Painel de Definição: Em alguns blocos, aparecerão nesta área botões
para seleção de opções e/ou caixas de texto para inserirmos valores.
Estas opções serão mostradas nas seções de referências de
comandos.
• Barra de Menu: Geralmente, as entradas do menu funcionam como
esperado e não há nenhum guia atualmente dentro do próprio Blocos -
se precisarmos de ajuda, além da Referências de Comandos que se
seguirá neste manual, poderemos utilizar os fóruns Babuino ou Blocos.
• Menu Ver: Sua função será a de visualizarmos o código Logo que o
programa gerar automaticamente. Em muitos casos, será de pouca
utilidade, a menos que queiramos usar o Cricket Logo. Com isso
poderemos cortar e colar o código do Blocos no Cricket Logo.
• Menu Arquivo: Utilizado para criar novos programas ou para carregar
os já existentes. Poderemos criar um diretório para armazenar
programas escritos em Blocos utilizando este menu, já que o Blocos
não cria um diretório específico com esta finalidade.
• Download: Clicaremos neste botão para carregar um programa na
placa de hardware do robô atual. Todos os blocos no Painel de
Programação serão carregados na placa. Caso tenhamos blocos que
não façam parte do programa, deveremos excluí-los ou eles poderão
confundir nosso robô.
3. BLOCOS E SUAS REFERÊNCIAS DE COMANDOS
Controles (Motores)
Ligar - Liga um ou mais motores. Botões de seleção do
motor aparecerão no Painel de Definição e serão
descritos abaixo.
Desligar - Desliga um ou mais motores. Botões de
seleção do motor aparecerão no Painel de Definição.
Ligue por - Ativa um ou mais motores por um período
especifico de tempo. Botões de seleção do motor
aparecerão no Painel de Definição. Sua unidade de
tempo é décimos de segundo.
Reverter - Inverte o sentido de rotação de um ou mais
motores. Botões de seleção do motor aparecerão no
Painel de Definição.
Frear - Para um ou mais motores, o mais rápido
possível. Botões de seleção do motor aparecem no
Painel de Definição.
Para_Cá - Define a direção de um ou mais motores no
sentido horário. Se o motor girar no sentido contrário,
bastará trocarmos os fios nos conectores da placa.
Para_Lá - Define a direção de um ou mais motores no
sentido anti-horário. Se o seu motor girar no sentido
contrário, bastará trocarmos os fios nos conectores da
placa.
Botões de seleção de motores – São apresentados no
Painel Definição quando um bloco motor for selecionado.
Clicando nas caixas de seleção poderemos definir o
motor ou motores afetados pelo bloco.
Potência - Define a potência para um ou mais motores.
Apenas valores entre 0 e 7 deverão ser usados. O valor
0 significa que o motor será desligado e 7 (padrão)
significa que a potência máxima será utilizada no motor.
Modulação por largura de pulso (PWM) é o método
utilizado para variar a velocidade dos motores.
Comportamentos indeterminados porão ocorrer se
valores superiores a 7 forem utilizados.
Posição – Define a posição angular de um servo motor
baseado nos valores mínimos e máximos de trabalho do
mesmo.
Fluxo
Se – O bloco será examinado, se a condição associada
a ele for VERDADEIRA, os blocos de ação são
executadas e o fluxo do programa continuará. Se a
condição associada ao bloco for FALSA, o programa
continuará sem executar os blocos de ação associados.
Se Senão - O bloco será examinado, se a condição
associada a ele for VERDADEIRA, os blocos de ação no
lado esquerdo serão executados e o fluxo do programa
continuará. Se a condição associada ao bloco for
FALSA, os blocos de ação no lado direito serão
executados e o fluxo do programa também continuará.
Laço – Os blocos de ação associados a este bloco
serão continuamente executados indefinidamente ou até
que uma situação externa ao programa finalize sua
execução. Exemplo: Falta de energia, acionamento do
botão reset.
Repetir - Os blocos de ação associados a este bloco
serão executados pelo número de vezes especificado no
Painel de Definição.
Espere até – Durante a execução deste bloco, nosso
programa aguardará até que a condição associada ao
bloco torne-se VERDADEIRA, assim a execução do
programa continuará.
Enquanto – Durante a execução deste bloco, nosso
programa executará uma determinada tarefa enquanto a
condição associada a este bloco for VERDADEIRA,
caso contrário a tarefa não será executada.
Pare – Este bloco terá efeito quando utilizado em
conjunto com o bloco Laço, de forma que nosso
programa saia desta rotina.
Fluxo (Exemplos)
Exemplo de uso Se - O bloco examinado será o Botão
1. Se o botão for pressionado, a condição será
VERDADEIRA e o Motor A será desligado. Se o Botão 1
não for pressionado, a condição associada ao bloco Se
não terá nenhum efeito e não será executada.
Este exemplo assume que todos os botões estão em
nível alto, ou seja, não pressionados. Quando
pressionados estarão em nível baixo, ou em terra,
comportamento próprio dos circuitos que utilizam pull-
up.
Exemplo de uso Se Senão - O bloco examinado será
Não (Botão 2), assim, o resultado do exame do Botão 2
será invertido.
Se o Botão 2 for pressionado, a condição associada ao
bloco Se será FALSA, o Motor B ligará e o Motor A será
desligado. Se o Botão 2 não for pressionado, a
condição associada ao bloco Se será VERDADEIRA e o
Motor A ligará, enquanto Motor B será desligado. A
execução de nosso programa continuará após a
execução do Se Senão.
Exemplo de uso Laço – O Motor A ligará por 2
segundos (vinte décimos de segundo), depois reverterá
seu sentido de rotação. Devido a utilização do Laço, o
Motor A será ligado por mais 2 segundos e reverterá
novamente.
Este comportamento continuará indefinidamente (ou até
que as baterias se esgotem). Muitos programas na área
de robótica utilizam um único Laço.
Exemplo de uso Repetir – O Motor A ligará. Após 2
segundos (Bloco Espere por), depois reverterá seu
sentido de rotação. Em seguida, ele reverterá
novamente, até totalizar três vezes. A execução
continuará com a instrução após a repetição. O número
3 especifica o número de repetições.
Exemplo de uso Espere até – O Motor A ligará. Ele
permanecerá ligado até que o Botão 1 esteja em nível
alto. Uma vez que a condição do bloco examinado
(Botão 1) torne-se VERDADEIRA, a execução
continuará e o Motor A será desligado.
Disposição (Posicionamento)
Bloco de Posicionamento 1 - Usado como um
espaçador para posicionar os blocos em um programa
para eles não se sobreporem. Não causa nenhum efeito
sobre a execução do programa.
Bloco de Posicionamento 2 - Usado como um
espaçador para posicionar os blocos em um programa
para eles não se sobreporem. Não causa nenhum efeito
sobre a execução do programa.
Bloco de Posicionamento 3 - Usado como um
espaçador para posicionar os blocos em um programa
para eles não se sobreporem. Não causa nenhum efeito
sobre a execução do programa.
Bloco de Posicionamento: Exemplo - A instrução Se
Senão ligará o Motor A por 2 segundos, se o Botão 1
não estiver pressionado. Caso contrário, o Motor B será
ligado por 4 segundos. Devido ao número 20 se sobrepor
a ação do bloco Ligar B por, a leitura do programa
torna-se difícil para o usuário.
Bloco de Posicionamento: Exemplo (cont.) - Este
programa é idêntico ao anterior, porém um bloco
Posicionamento 1 foi usado para mover o bloco de
ação da via esquerda mais para baixo, enquanto um
bloco Posicionamento 2 move o bloco de ação da outra
via mais à direita. A leitura do programa esta agora muito
mais fácil para o usuário.
Condições de Teste (Comparações Lógicas)
Botão - O nível de tensão da chave ou botão
selecionada será examinado. Se estiver alto (perto da
tensão de alimentação positiva, geralmente 5 volts), o
valor será VERDADEIRO. Se estiver baixo (perto do
terra), o valor será FALSO.
Alternar entre botões de escolha – Estas opções do
bloco botão serão exibidas no Painel de Definição
quando um botão estiver inserido e selecionado no
Painel de Programa.
Estas opções de escolha permitem que o botão seja
especificado.
Não - O valor lógico do item associado a este bloco será
invertido. Este bloco é muito utilizado em conjunto com
o bloco Botão para inverter seu resultado.
E - Se os dois itens comparados forem VERDADEIROS,
o resultado será VERDADEIRO. Se não, o resultado
será FALSO.
Ou - Se qualquer um dos dois itens comparados for
VERDADEIRO, o resultado será VERDADEIRO. Se
nenhum dos itens for VERDADEIRO, o resultado será
FALSO.
Ou exclusivo (XOR) - Se os valores lógicos dos itens a
serem comparados não forem os mesmos (um
VERDADEIRO, o outro FALSO), esta comparação será
VERDADEIRA. Se eles forem iguais, o resultado será
FALSO.
Comparação - Compara dois valores. A comparação
poderá ser igual (=), maior (>) ou menor (<). Estas
opções, no Painel de Definição, permitirão que a
comparação seja especificada. O resultado será o valor
lógico da comparação (VERDADEIRO ou FALSO).
Escolha dos Botões de Comparação - Estas opções
aparecerão no Painel de Definição e permitem que os
tipos de comparação sejam definidas.
Exemplo de uma Comparação – O valor da leitura do
Sensor 1 será comparada ao valor 100. Se for menor, o
resultado da comparação será VERDADEIRO. Caso
contrário, será FALSO. Veja a descrição de Sensores e
Números na próxima seção.
Exemplo de Combinação Condicional - Os valores do
Botão 1 e Botão 2 serão lidos. Se ambos estiverem em
nível alto (VERDADEIRO), esta condicional será
VERDADEIRA. Se um estiver em nível baixo, o
resultado da comparação será FALSO.
Números (16 bits inteiros)
Número - O número digitado nas opções deste bloco,
no Painel de Definição, será usado neste bloco.
Números são inteiros positivos entre 0 e 32767.
Esta opção aparecerá no Painel de Definição. O valor de
um número será digitado nesta caixa. A tecla ENTER
deverá será usada após a digitação do valor e este
aparecerá no bloco Número que acabamos de inserir.
Exemplos do uso do bloco Número foram mostrados
anteriormente.
Aleatório - Um número aleatório será gerado através
deste bloco. Um valor diferente será gerado a cada
execução deste bloco em nosso programa.
O bloco Aleatório é frequentemente usado em conjunto
com o bloco Módulo para obtermos um número
aleatório em um determinado intervalo (descrito abaixo).
O bloco Aleatório terá um valor entre 0 e 32767.
Sensor - O sensor selecionado será lido em toda
execução do programa. Sensores retornarão um valor
numérico entre 0 e 1023, ao serem lidos.
Escolha do Sensor – Estas opções aparecerão no
Painel de Definição quando um bloco Sensor for
inserido no painel de Programa ou estiver selecionado.
Para ativarmos estas opções, bastará clicarmos sobre o
sensor desejado.
Adicionar – Realiza a adição de dois valores.
Subtrair – Realiza a subtração entre um segundo valor
e o primeiro.
Multiplicar – Realiza a multiplicação entre dois valores.
Dividir – Realiza a divisão entre um primeiro valor e o
segundo.
Módulo - Retorna o resto inteiro da divisão do primeiro
valor com o segundo.
Este exemplo demonstra o uso do Módulo. O resultado
será um número aleatório entre zero e 10.
Variável – Utilizado para criar uma variável. Quando
inserido este bloco no Painel de Programação, a opção
abaixo aparecerá no Painel de Definição:
Para introduzir um novo nome de variável, deveremos
nos certificar que o cursor esteja na caixa superior (para
nomeá-la), digitaremos o nome e pressionaremos
ENTER. Para utilizarmos uma variável existente,
clicamos em seu nome a partir do menu suspenso.
Geralmente, não é uma boa ideia utilizar uma nova
variável sem primeiro utilizar o bloco de criação de
variáveis e definirmos o bloco descrito a seguir.
Criar e Definir uma Variável – Arrastaremos o bloco
Variável (acima) na abertura existente neste bloco.
Utilizando as opções demostradas anteriormente,
forneceremos um nome para criar uma nova variável, ou
selecionaremos um nome existente de variável.
Anexaremos um número próximo ao bloco para definir o
valor. Além de atribuir um valor a uma nova variável, os
valores das variáveis existentes poderão ser alterados
desta forma. Veja o exemplo abaixo.
Exemplo de configuração e uso de variáveis - A variável
denominada Velocidade 1 foi criada e recebeu o valor
3. A variável denominada Velocidade 2 foi criada e
recebeu o valor 1. A Potência do Motor A será definida
com o valor da variável Velocidade 1 (neste caso, 3).
Até dezesseis variáveis poderão ser definidas e
utilizadas em um programa.
Tempo
Relógio - Usado para definir um período de tempo em
décimos de segundo ou em milésimos de segundo. A
opção abaixo aparecerá no Painel de Definição.
Esta é a opção que aparecerá no Painel de Definição
quando o bloco Tempo for inserido ou selecionado e
permitirá que tipo de tempo seja definido em décimos ou
milésimos de segundo.
Tempo - Este bloco representa o valor atual do
temporizador de 16 bits. O valor a cada 65,535
segundos. O Tempo será em milésimos de segundos
com uma precisão de quatro milissegundos.
Zerar Relógio - Faz com que o temporizador interno de
16 bits seja resetado (zerado). Permite que uma maior
precisão de tempo seja especificada.
Espere por – Causa uma pausa na execução do
programa durante o tempo indicado. Ele deve ser ligado
a um bloco de Tempo, apesar de um bloco Número
também poderá ser utilizado. Sua unidade de tempo é
décimos de segundo.
Exemplo de Uso do Relógio - Este exemplo demonstra
como o Zerar relógio e o Tempo poderão ser utilizados
para um atraso superior a 0,1 segundos. Neste caso,
ligaremos um motor por 640 milissegundos, em seguida,
desligaremos por 2 segundos, e repetiremos estas
tarefas indefinidamente. O Zerar relógio inicia o tempo
em 0 segundos.
Quando o tempo atingir 640 milissegundos, a
comparação será VERDADEIRA e o Motor A será
desligado. Deveremos nos certificar que o tempo de
atraso especificado seja maior que o tempo levado para
executar os blocos antes da comparação, caso
queiramos precisão. Devemos evitar comparações “=",
já que há certa imprecisão no temporizador.
Outros (Vários)
Bip - Faz com que o Beeper (buzzer) emita um som
com duração de 50 milissegundos.
Haverá uma pausa mínima de 50 milésimos de segundo
antes de outro bip.
Comentário - Usado para inserir comentários em um
programa como forma de explicar partes de um
programa.
Não causará efeitos sobre a execução do programa.
Acender Led – Liga o Led do usuário presente na
placa.
Apagar Led - Desliga o Led do usuário presente na
placa.
Mostrar – Este bloco permite que valores sejam
enviados ao módulo de display analógico conectado a
placa através dos conectores i2c. Através dele será
possível exibir valores de variáveis, números ou ainda o
valor de um determinado sensor.
Exemplo de Comentário - Este é um exemplo de um
bloco de comentário que poderá ser utilizado em um
programa. Não tem nenhum efeito sobre um programa e
não será baixado (enviado à placa).
Enviar – Este bloco permite que valores sejam enviados
ao computador através da porta USB. Estas valores
poderão ser visualizados através de programas
Terminal.
Recal – Este bloco será utilizado para a leitura dos
valores armazenados na memória interna na placa. De
acordo com a quantidade destes valores, será
necessária a utilização de diversos blocos em
sequencia.
Record – Através deste bloco, armazenaremos valores
na memória interna da placa, de maneira a serem
utilizados posteriormente para análise.
Resetdp – Através deste bloco, restauramos endereço
inicial aonde os dados serão armazenados ou lidos a
partir da memória interna da placa. Este bloco,
geralmente será utilizado antes dos blocos Recall e
Record.
Start I2C – Este bloco será responsável por iniciar a
comunicação I2C. Ele deverá ser associado ao bloco
Número, que indicará o endereço do dispositivo que
desejamos nos comunicar.
I2C Stop - Este bloco será responsável por finalizar a
comunicação I2C.
I2C Write – Este bloco será responsável por enviar
informações através da comunicação I2C.
I2C Read – Este bloco será utilizado para a leitura de
informações provenientes da comunicação I2C.
Procedimentos
Novo procedimento - Usado para definir um novo
procedimento (também chamado de função ou sub-
rotina).
Fim - Utilizado para encerrar uma definição de
procedimento.
Quando um novo procedimento for definido, um bloco
com o nome deste será criado. Aqui visualizamos o
Painel de blocos quando a guia de blocos procedimentos
estiver selecionada.
O propósito de definir um novo bloco de procedimento
será o de agrupar um número de blocos que serão
utilizados repetidamente em nosso programa. Isso
permite que reutilizemos o conjunto de blocos facilmente
sem termos que digitá-los novamente. Ele também
manterá nosso programa mais simples e enxuto.
Quando o bloco de novo procedimento for selecionado e
inserido no Painel de Programa, esta opção aparecerá
no Painel de Definição. Digitaremos aqui um nome para
o novo procedimento.
Aqui está a forma como o Painel de Blocos será
apresentado após um novo procedimento estiver criado.
Quando um novo bloco com for adicionado, seu nome
será definido no Painel de Programação.
Há pouco espaço para nomes, por isso eles serão
geralmente muito curtos. Se muitos procedimentos novos
forem definidos, será necessário adicionarmos
comentários com blocos Comentários para explicarmos
o que cada procedimento fará.
Completamos a definição do novo procedimento,
adicionando demais blocos e terminando com um bloco
Fim.
Não devemos excluir o novo procedimento a partir da
Janela de programação! Ele permanecerá no Painel de
Blocos.
Usando um novo procedimento - Uma vez definido o
novo procedimento, ele poderá ser utilizado como
qualquer outro bloco de ação. Podemos utilizar quantas
vezes quisermos em nosso programa principal. Cada vez
que ele for encontrado, os blocos de procedimento serão
executados.
REFERÊNCIAS
Newton C. Braga, Newton C. Braga. Eletrônica Básica Para Mecatrônica. Editora
Saber. 2012.
Rosário, João Maurício – Princípios de mecatrônica – São Paulo. Editora Prentice
Hall. 2005.
Alternativas de Baixo Custo para o uso da Robótica Educacional: Construção e
Avaliação do Framework GoGo Board. Disponível em:
<http://www.ft.unicamp.br/liag/robotica/downloads/a8.pdf>. Acessado em: Abril de
2014.
Larson, Jim. Babuino Command Reference. 2010.
Rocha, Anderson Pires. Manual do Ambiente de Programação Blocos. 2011.
D'Abreu, João Vilhete V.; Mirisola, Luiz G. B.; Ramos, Josué J. G.. Ambiente de
Robótica Pedagógica com Br_GOGO e Computadores de Baixo Custo: Uma
Contribuição para o Ensino Médio. Disponível em: <http://br-
ie.org/pub/index.php/sbie/article/download/1580/1345>. Acessado em: Abril de 2014.
Ramos, Josué J G; d´Abreu, João Villhete Veigas; Oliveira, Alberto Arruda de; Alves,
Lucas T.; Oliveira, Victot M.. Robótica Pedagógica de Baixo Custo - RPBC.
Disponível em:
<http://www.cti.gov.br/index.php?option=com_content&view=article&id=283&Itemid=
193>. Acessado em: Abril de 2014.