GoGo Board e Blocos para Mecatrônica

19
COTUCA - UNICAMP ANDERSON PIRES ROCHA DEPARTAMENTO DE MECÂNICA GOGO BOARD PARA MECATRÔNICA – BLOCOS V 1.0.2b CAMPINAS 2014

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.