Introdução à Engenharia de Computadores e Telemática. Guião das Aulas Práticas

Documentos relacionados
Introdução à Engenharia de Computadores e Telemática. Guião das Aulas Práticas

Introdução à Engenharia de Computadores e Telemática. Guião das Aulas Práticas

Introdução à Engenharia de Computadores e Telemática. Guião das Aulas Práticas

Relatório da Aula Prática 10

Manual Studio Uno 2.0

Aspeto. 1.Objetiva; 2.Botão de gravação 3.Botão para tirar fotografias _ POR 01

Microsoft Word 2010 NORMA ABNT para Trabalhos Acadêmicos Conceitos Básicos

Ferramentas Web, Web 2.0 e Software Livre em EVT

Guião de Preenchimento do Módulo Reporte de Execução Física Versão 1.0

GUIA RÁPIDO PARA INSTALAÇÃO DO CURUMIM

Ferramentas Web, Web 2.0 e Software Livre em EVT

Comutador USB 2.0 de Partilha

Ferramentas Web, Web 2.0 e Software Livre em EVT

Ferramentas Web, Web 2.0 e Software Livre em EVT

Índice. Início Rápido Aplicação on-line Dispositivo Estação de Carga...20

Experiência 2 Metrologia Elétrica. Medições com Osciloscópio e Gerador de Funções

Manual de utilizador do Sistema PUC para dispositivos móveis

Guia rápido de utilização

O aprendiz de investigador

ELABORADO POR MARCO SOARES 1. Formatação de texto

Guia rápido de utilização

Configurar e usar o Voltar ao meu Mac

Programação em Linguagem C

Guião de Preenchimento do Módulo Reporte de Indicadores Versão 1.1

O Manual do Remote Desktop Connection. Brad Hards Urs Wolfer Tradução: José Pires

Editor id. Este guia pode ser descarregado como beginner_id-editor_pt.odt ou beginner_ideditor_pt.pdf

Segurança Informática e nas Organizações. Guiões das Aulas Práticas

Concursos Micro-Rato. Ciber-Rato

A instalação será feita através do link Setup Magni 2, situado no CD do Rasther.

OpenTouch Conversation One

Conceito e objectivo. destaques deste produto. How To ARES POS

Ambiente de programação

Integração com o Ambiente Virtual de Aprendizagem Moodle

Utilizar o Office 365 no iphone ou ipad

Instruções de Utilização. Actuador de comutação

Explorador do Windows (manipulação de ficheiros)

GUIA DE CONSULTA RÁPIDA Microsoft Surface Hub

Edimax Gemini Kit de atualização de roaming Wi-Fi doméstico RE11 Guia de instalação rápida

Página Inicial do Moodle

Aula 01 Microsoft Excel 2016

Centro de informática e Sistemas do Instituto Politécnico de Tomar

FTC2E - IP GATEWAY MANUAL DE UTILIZADOR 2014

Xerox ColorQube 9301 / 9302 / 9303 Painel de controle

LAB4 Introdução aos Controladores Lógicos Programáveis

Escola Secundária c/ 3º Ciclo de Ferreira Dias. CURSOS PROFISSIONAIS Ano Letivo 2012 / Atividade 2

Tutorial para o aluno Moodle

Teclado. Mike McBride Anne-Marie Mahfouf Tradução: José Pires

Usando 123D: Led e Protoboard

BLOCO WAIT. Figura 3 Bloco de espera (para um sensor) Símbolo Descrição Por defeito 1

Ferramentas Web, Web 2.0 e Software Livre em EVT

- Trabalho Prático de Algoritmos e Programação usando Robô Arduino -

GUIA RÁPIDO PARA INSTALAÇÃO DO CURUMIM

Lojamundi Tecnologia Sem Limites br

Programação em Linguagem C

Comando 2.0 Guia utilização rápida

Versão 2.0. Manual do Utilizador Para Windows Vista, 7 e 8

1 - Ambiente de desenvolvimento

FICHA DE TRABALHO Identifica e descreve as áreas do editor do Scratch assinaladas com números.

Ferramentas Web, Web 2.0 e Software Livre em EVT

ZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011

SP-1101W/SP-2101W Quick Installation Guide

Manual de Produto Pssst! Mobile Versão Pg 1

Novidades no EPC GM. Navegação gráfica. Navegação comum para cada veículo

Laboratório 1 Topologias de Rede / Utilizando o Packet Tracer

PROGRAMAÇÃO I - Folha prática 1

Tutorial 133 DUO Criação de telas e utilização do teclado

Xerox WorkCentre 6655 Impressora multifuncional em cores Painel de controle

Manual do Utilizador Brother Software Licence Management Tool

BEKS. Modelos: BEKY e BEKS. Manual de Referência Rápida

Instruções. Descrição do produto

Primeiros passos ANTES DE COMEÇAR: PREPARE O SCANNER. Certifique se de formata o cartão microsd antes de utilizar o scanner.

Manual do Ambiente de Programação de Blocos Studuino

Laboratórios Integrados II LECom (1 o ano)

Manual do Utilizador do Connection Manager

TUTORIAL DO SOFTWARE SMART NOTEBOOK 10

Agrupamento de Escolas Miradouro de Alfazina (171839) Tecnologias da Informação e Comunicação AULA 3 4

MANUAL DE UTILIZAÇÃO DA PLATAFORMA MOODLE DO IAVE

Ferramentas Web, Web 2.0 e Software Livre em EVT

Jabra. Evolve 75. Manual de utilizador

Live Mesh - A rede de nós segundo a Microsoft

Este material foi preparado para auxiliar você no decorrer do curso. É um referencial teórico que deve ser consultado aula após aula.

Gestão de Base de dados Formulários

KODU. Como desenvolver o raciocínio lógico dos alunos

OpenOffice.org. tutorial apresentação

Welcome to the World of PlayStation Manual de início rápido

Servidor de rede USB sobre IP com 4 portas USB 2.0

Seedu. Manual do Utilizador do Seedu. Data de publicação: 30 de junho de Versão 1.0

Associações de Ficheiros. Mike McBride Tradução: José Pires

Programação 2017/2018 2º Semestre

Tutorial sobre o MineraFórum I. Introdução

Instalação. Ponto de acesso sem fios NETGEAR ac WAC120. Conteúdo da embalagem. NETGEAR, Inc. 350 East Plumeria Drive San Jose, CA USA

Ferramentas Web, Web 2.0 e Software Livre em EVT

Catálogo BloguesEDU Apoio técnico

Guia de Instalação do Google Cloud Print

Ferramentas Web, Web 2.0 e Software Livre em EVT

Manual do Utilizador Brother Meter Read Tool

Ferramentas Web, Web 2.0 e Software Livre em EVT

LÂMPADA LED DE LUZ AMBIENTE COM COLUNA BLUETOOTH

USB Tablet. Guia de instalação

Transcrição:

Introdução à Engenharia de Computadores e Telemática Guião das Aulas Práticas Departamento de Eletrónica, Telecomunicações e Informática Universidade de Aveiro 20122013

Conteúdo 1 Introdução ao UNIX 3 1.1 A relevância do sistema operativo Linux................... 4 1.2 O Arranque, Login e Logout.......................... 4 1.3 A Linha de Comandos UNIX......................... 5 1.3.1 Interfaces de texto e grácas...................... 5 1.3.2 Execução de comandos......................... 6 1.3.3 Edição de um comando......................... 8 1.3.4 Navegação no Sistema de Ficheiros.................. 8 1.3.5 Manipulação de cheiros........................ 11 1.3.6 Ajuda On-line.............................. 12 1.4 Edição de cheiros de texto.......................... 12 1.4.1 Procura de texto............................ 14 2 Conceitos elementares de HTML 15 2.1 Protocolo HTTP................................ 16 2.1.1 Objeto retornado............................ 17 2.1.2 Parâmetros num URL......................... 17 2.2 Documentos HTML............................... 17 2.2.1 Marcas (tags).............................. 18 2.2.2 Comentários............................... 19 2.2.3 Parametrização de marcas....................... 19 2.2.4 Estruturação de documentos...................... 19 2.2.5 Hiper-referências............................ 22 2.2.6 Imagens................................. 22 2.3 Conteúdos dinâmicos.............................. 23 2.4 Exploração de um servidor HTTP....................... 23 3 Ferramentas colaborativas 25 3.1 Acesso remoto via SSH............................. 26 3.1.1 Estabelecimento da sessão....................... 26 3.1.2 Transferência de cheiros........................ 27 3.1.3 Autenticação por chaves........................ 28 3.1.4 Reencaminhamento do protocolo X11................. 29 2

3.2 Git........................................ 30 3.2.1 Introdução................................ 30 3.2.2 Repositório: Monitorização dos conteúdos de um diretório..... 33 3.2.3 Introdução ao blob........................... 34 3.2.4 Os blobs são armazenados em trees.................. 35 3.2.5 De que são feitas as trees........................ 36 3.2.6 Commits................................. 38 3.2.7 Outros nomes para commit...................... 40 3.2.8 Índice: o intermediário......................... 42 3.2.9 Agora muito rápido........................... 43 4 Redes de Computadores 47 4.1 Introdução.................................... 48 4.2 Conguração de rede de um PC........................ 49 4.3 Endereços Físicos................................ 50 4.4 Tradução de nomes em endereços IP..................... 50 4.5 Conectividade e rotas.............................. 51 4.6 Identicação da entidade responsável por uma máquina........... 52 4.7 Transmissão de informação em redes: traceroute.............. 52 4.8 Transmissão de informação em redes: conteúdo HTTP........... 53 5 Instalação e exploração de máquinas virtuais 55 5.1 Introdução.................................... 57 5.2 Instalação de sistemas operativos....................... 57 5.2.1 Sistema live............................... 57 5.2.2 Distribuição SliTaz........................... 58 5.3 Instalação do uma máquina virtual...................... 58 5.3.1 Criação de uma máquina virtual.................... 58 5.3.2 Arranque de uma máquina virtual................... 62 5.3.3 Instalação do SliTaz no disco rígido virtual.............. 64 5.3.4 Instalação de software adicional.................... 70 5.3.5 Módulos especiais para o sistema operativo.............. 70 5.4 Duplicação de máquinas virtuais........................ 72 5.5 Conguração de redes de máquinas virtuais................. 72 5.6 Interligação de redes.............................. 75 5.7 Criação de uma VPN.............................. 78 6 Produção de documentos com LATEX 83 6.1 Introdução.................................... 85 6.2 Ações de preparação.............................. 85 6.3 Compilação de documentos L A TEX....................... 86 6.4 Caracteres especiais do L A TEX......................... 86 6.4.1 O caráter '\'.............................. 87 3

6.4.2 O caráter '$'.............................. 87 6.4.3 Os carateres '{' e '}'.......................... 87 6.4.4 Os carateres '[' e ']'.......................... 89 6.4.5 O caráter '%'.............................. 89 6.4.6 O caráter '~'.............................. 89 6.5 Estrutura obrigatória de um documento................... 89 6.6 Funcionalidades adicionais........................... 90 6.7 Dimensão das letras............................... 92 6.8 Estruturação de documentos.......................... 92 6.8.1 Título.................................. 92 6.8.2 Partes, capítulos, secções e parágrafos................. 93 6.8.3 Listas de itens.............................. 94 6.8.4 Objetos utuantes: guras e tabelas................. 96 6.8.5 Referências a partes do texto..................... 97 6.8.6 Disposição de elementos em matriz.................. 98 6.8.7 Expressões e ambientes matemáticos................. 99 6.9 Inclusão de guras............................... 101 6.10 Índices de conteúdos, de guras e de tabelas................. 103 6.11 Referências bibliográcas............................ 103 6.11.1 Ficheiro de bibliograa, BibTeX.................... 103 6.11.2 Uso de citações bibliográcas..................... 105 6.11.3 Estilos de bibliograa.......................... 106 6.12 Visão global da geração de documentos L A TEX................ 106 7 Programação do robô DETI PIC 111 7.1 Introdução.................................... 112 7.2 O robô DETI PIC............................... 112 7.2.1 Movimentação.............................. 112 7.2.2 Sensores................................. 112 7.2.3 Comunicação com o exterior...................... 113 7.3 O ambiente DETInchanting.......................... 114 7.3.1 Interface................................. 114 7.3.2 Tipos de blocos............................. 114 7.3.3 Categorias de blocos.......................... 115 7.3.4 Macro-estrutura de um programa................... 116 7.3.5 Edição de um programa........................ 116 7.4 Programação do robô DET PIC com o ambiente DETInchanting...... 117 7.4.1 Programas com comunicação para o exterior............. 117 7.4.2 Programas com sensores........................ 117 7.4.3 programas com locomoção....................... 119 7.4.4 Programas complexos.......................... 120 4

8 Programação do robô DETI PIC (cont.) 121 8.1 Introdução.................................... 122 8.2 Exercícios.................................... 122 9 Programação do robô DETI PIC (cont.) 123 9.1 Introdução.................................... 124 9.2 Exercícios.................................... 124 5

Resumo Este guião possui um plano para cada aula prática de IECT. O objetivo destes guiões é o de fomentar a aprendizagem de várias matérias através de experiências práticas. Durante as mesmas os alunos devem aplicar o seu raciocínio crítico e, desejavelmente, ir mais além na exploração de tópicos relacionados com os do guião.

2

110

Aula Prática 7 Programação do robô DETI PIC Resumo: - IntroduÇão ao robô DETI PIC. - IntroduÇão ao ambiente DETInchanting. - Desenvolvimento de programas elementares. Conteúdo 7.1 Introdução............................... 112 7.2 O robô DETI PIC.......................... 112 7.2.1 Movimentação............................ 112 7.2.2 Sensores................................ 112 7.2.3 Comunicação com o exterior..................... 113 7.3 O ambiente DETInchanting.................... 114 7.3.1 Interface................................ 114 7.3.2 Tipos de blocos............................ 114 7.3.3 Categorias de blocos......................... 115 7.3.4 Macro-estrutura de um programa.................. 116 7.3.5 Edição de um programa....................... 116 7.4 Programação do robô DET PIC com o ambiente DETInchanting117 7.4.1 Programas com comunicação para o exterior............ 117 7.4.2 Programas com sensores....................... 117 7.4.3 programas com locomoção...................... 119 7.4.4 Programas complexos........................ 120 111

7.1 Introdução O robô DETI PIC é um robô pedagógico desenvolvido por docentes do DETI para ser usado em Unidades Curriculares de cursos da UA. O ambiente DETInchanting é uma adaptação do ambiente Inchanting 1, o qual foi desenvolvido para programar robôs Mindstorm da Lego 2. 7.2 O robô DETI PIC Este robô possui capacidades sensoriais e de movimentação mínimas. Para além disso, possui algumas capacidades limitadas de envio de informação para o exterior. 7.2.1 Movimentação Em termos de movimentação o robô possui duas rodas num mesmo eixo mas independentes, cada uma acoplada a um motor próprio. Estes são motores DC sem realimentação, com a velocidade regulada através de PWM (pulse width modulation). Os motores podem girar nos dois sentidos (designados por backward e forward no ambiente DETInchanting). A paragem dos motores não obriga necessariamente à paragem instantânea do robô pelo facto de os motores não possuírem realimentação. Assim, se o robô estiver em movimento e os seus motores forem parados no programa, quanto maior for a inércia do robô maior pode ser o efeito de deriva (ou deslizamento). 7.2.2 Sensores Sensor do estado da bateria O sensor do estado da bateria indica o seu estado de carga. Este sensor indica o valor da tensão (voltagem) da bateria multiplicado por 10. Como a bateria dos robôs é formada por 8 pilhas recarregáveis de 1.2 Volt cada, montadas em série, o total da tensão com carga máxima deverá ser ligeiramente superior a 9.6 Volt. Sensores de distância O robô possui 3 sensores de distância colocados na sua parte da frente, protegidos contra colisões dentro da sua estrutura. O sensor de distância frontal está alinhado com a perpendicular do eixo das rodas; os outros dois, direito e esquerdo, estão nos lados opostos (o sensor direito está colocado à esquerda desse eixo, o sensor esquerdo está colocado à direita). Estes sensores medem distâncias em centímetros e têm uma gama útil que não deverá exceder os 80 cm contados a partir do limite exterior do robô. A distância reportada 1 http://enchanting.robotclub.ab.ca 2 http://mindstorms.lego.com 112

quando um objeto está encostado na parte frontal do robô deverá ser conrmada experimentalmente, muito embora se tenha feito uma calibração para ser um valor próximo de zero. Sensores de brilho Na superfície inferior do robô, e na sua frente, estão colocados 5 sensores de brilho. A função primordial destes sensores é a de indicar a cor do solo a partir do seu brilho: ser for brilhante, a cor deverá ser clara, caso contrário a cor deverá ser escura. Nos trabalhos que serão executados com o robô usar-se-ão estes sensores para distinguir um solo sem marcas branco de uma pista marcada a preto (ou outra cor escura). Os sensores de brilho estão espaçados de maneira a que seja fácil fazer o reconhecimento de uma linha e das suas curvas ou bifurcações. Há um grupo central, próximo do eixo perpendicular ao eixo das rodas, constituído por 3 sensores (LEFT, CENTER e RIGHT), e mais 2 sensores, mais distantes desse eixo (FAR LEFT e FAR RIGHT). A distância a que os sensores estão da solo deve permitir uma leitura correta de zonas claras e escuras do mesmo quando plano e com uma iluminação razoável. Botões de pressão O robô dispõe de dois botões de pressão, um preto e um vermelho. Estes botões indicam apenas se estão a ser premidos ou não. Estes sensores possuem algum ruído, i.e. quando pressionados e libertados uma única vez, de forma normal, podem gerar uma sucessão rápida de informações de pressão e não pressão. Temporizador O robô dispõe de um temporizador que permite avaliar a passagem do tempo. Este é um contador de ciclos de relógio da placa-mãe desde o instante em que o programa é iniciado ou desde que se reinicia o contador. A programação do temporizador no ambiente de programação faz-se com segundos (ou frações de segundo), até uma resolução de 1 milissegundo. 7.2.3 Comunicação com o exterior Na placa-mãe do robô há 4 leds vermelhos (com a legenda D2-D5). O led D2 será designado por led 0, enquanto o led D5 será designado por led 3. Estes leds podem apenas ser ligados ou desligados, não existindo quais outros estados. A cha USB do robô pode ser ligada através do cabo apropriado a um computador, no qual se pode obter (ler), através de aplicações apropriadas, informação enviada pelo robô. 113

7.3 O ambiente DETInchanting O DETInchanting é um ambiente gráco para programação do robô DETI PIC em ambientes Linux. A programação de aplicações faz-se arrastando blocos com funcionalidades especícas para um programa (guião). As formas dos blocos está associada à sua funcionalidade. Para seguir as explicações seguintes é conveniente iniciar o DETInchanting, devendo para tanto executar o comando $ /usr/local/iect/detinchanting 7.3.1 Interface A interface do DETInchanting divide-se grosso modo em 4 partes. Na parte superior temos menus para gerir a criação, salvaguarda e recuperação de aplicações, bem como menus para alterar a língua da interface. Por omissão a interface estará em Inglês, e assim a vamos considerar neste guião, porque a interface em Português ainda não está concluída (mas estará nas próximas aulas). Abaixo dos menus, na parte esquerda, temos as categorias de instruções. Ao todo temos 6 categorias, que podem ser selecionadas na parte superior. Em cada categoria temos um conjunto base de instruções, ao qual poderemos mais tarde adicionar outras. Cada categoria tem um nome que motiva o agrupamento das instruções nela guardadas, e outras que futuramente serão criadas. As cores usadas por cada categoria são diferentes para facilitar a compreensão dos programas. Abaixo dos menus, ao centro, ca a área onde são criados os programas, ou guiões (scripts). Ao contrário com o que acontecia nas aplicações que estiveram na origem do DETInchanting, e devido a limitações do robô, cada programa desenvolvido para o robô é formado apenas por um único guião. Abaixo dos menus, à direita, ca uma área que neste momento não tem qualquer utilidade. Em versões futuras a parte superior desta área será usada para apresentar informação enviada via USB pelo robô. No canto superior direito da interface existe uma bandeira verde. Quando ativa apresentada sem um círculo vermelho cortado por cima serve para compilar o guião atual para o robô, para o carregar no robô e para iniciar a sua execução no robô. O DETInchanting deteta automaticamente a presença de um robô ligado por USB. Quando tal acontece, a bandeira verde acima referida ca disponível (não sobreposta pelo círculo vermelho cortado). No entanto, para carregar um programa para o robô é necessário ligar o seu interruptor. 7.3.2 Tipos de blocos Os blocos do DETInchanting dividem-se grosso modo em 3 grandes tipos: 114

Commands: são blocos que realizam uma ação. Estes blocos têm uma envolvente formada por um retângulo com dois encaixes (ou, por vezes, apenas com um encaixe). Reporters: são blocos que representam uma valor numérico ou textual. Este valor pode ser fornecido diretamente (uma constante numérica), pode ser fornecido por uma variável, pode ser fornecido por um sensor (e.g. valor do temporizador), ou ainda ser fornecido por qualquer outor bloco que seja deste tipo. Estes blocos têm uma envolvente oval. Predicates: são blocos que fornecem um valor lógico (verdadeiro ou falso). Este valor pode ser fornecido diretamente através de predicados constantes (true e false), pode ser fornecido por uma variável, pode ser fornecido por um sensor (e.g. Red button is pressed?) ou pode ainda ser fornecido por qualquer outro bloco que seja deste tipo. Estes blocos têm uma envolvente hexagonal. 7.3.3 Categorias de blocos Os blocos do DETInchanting organizam-se em 6 categorias: Motors: Nesta categoria estão todos os blocos relativos à movimentação do robô usando os seus motores. Sensing: Nesta categoria estão todos os blocos relativos à utilização dos sensores. Operators: Nesta categoria estão blocos que realizam operações aritméticas ou lógicas. Control: Nesta categoria estão blocos que realizam operações de controlo do uxo de execução de um programa. Looks: Nesta categoria estão blocos que realizam operações de comunicação com o exterior do robô. Variables: Nesta categoria estão blocos que realizam operações sobre variáveis, incluindo a sua criação e eliminação. Estão também blocos que lidam com listas, um tipo especial de variáveis que podem conter listas indexáveis de valores. Estas categorias pode ser enriquecidas com mais blocos, que podem e devem ser criados para facilitar a organização dos programas. Um novo bloco pode ser criado usando o botão make a block da categoria Variables, ou selecionando o fundo da área de edição de programas com o botão direito do rato e escolhendo a opção make a block do menu contextual. A criação de um novo bloco passa em primeiro lugar pela indicação do seu tipo (command, reporter ou predicate) e da sua categoria. Esta última serve apenas para denir onde é que o novo bloco será apresentado futuramente. Só depois é que se programa o bloco, usando para o efeito outros blocos. A categoria de um bloco criado pelos programadores pode ser alterada em qualquer momento. Uma vez mais, isso não altera o seu comportamento, altera apenas o local onde o bloco irá aparecer ao programador. 115

7.3.4 Macro-estrutura de um programa Um programa tem obrigatoriamente de começar com o bloco When clicked, da categoria Control, e termina após um bloco desta mesma categoria cuja base é lisa. Um bloco criado pelo programador começa num bloco com um formato igual ao do início do programa, mas com um nome próprio do bloco, e termina igualmente num bloco da categoria Control cuja base é lisa. Nos novos blocos dos tipos reporter e predicate, o valor que devolvem deveria, em princípio, ser indicado num local próprio na parte inferior da janela de edição do bloco. No entanto, por razões que não importa aqui referir, foram criados blocos novos, os return da categoria Control, que devem ser usados para indicar o valor que deverá ser produzido por esses blocos. 7.3.5 Edição de um programa A edição de um programa faz-se arrastando blocos das categorias para a área de edição e colocando-os no local próprio no programa. Posteriormente podem ser movimentados para outros locais com o botão esquerdo do rato. Podem ainda ser duplicados usando o botão direito do rato e as opções duplicate e duplicate - this block do menu contextual. A primeira duplica o bloco selecionado e vários outros abaixo; a segunda duplica apenas o bloco selecionado. Exercício 7.1 Experimente construir um programa, sem qualquer m concreto, encaixando blocos de várias categorias. A remoção de um bloco do programa faz-se selecionando-o e arrastando-o para a zona esquerda da interface, onde estão todos os blocos de uma categoria. Porém, esta operação é normalmente mais complexa porque a seleção de um bloco num programa implica a seleção de todos os que lhes estão abaixo (até um bloco envolvente). Por este facto, é preciso primeiro partir o programa abaixo do bloco que queremos remover (descolando o programa abaixo do bloco em questão dele mesmo), apagar o bloco e depois voltar a colar o programa. A operação unitária de apagar um ou mais blocos pode ser imediatamente revertida, caso se tenha tratado de um erro. Para isso, deve ser usado o botão direito do rato e a opção undo last drop do menu contextual. Exercício 7.2 Experimente apagar blocos do programa que escreveu. Experimente também anular imediatamente algumas dessas operações. 116

7.4 Programação do robô DET PIC com o ambiente DETInchanting Ao longo desta secção vamos apresentar pequenos programas que irão mostrar em pleno todas as funcionalidades de programação do robô e do ambiente de desenvolvimento de aplicações. 7.4.1 Programas com comunicação para o exterior Exercício 7.3 O nosso primeiro programa irá car indenidamente a acender e apagar um dos leds, alterando o seu estado de segundo em segundo. Escreva duas versões deste programa, uma usando o bloco de espera wait, outra usando o temporizador. Em ambos os casos acenda e apague leds usando blocos da categoria Looks. Exercício 7.4 O segundo programa irá car indenidamente a enviar uma mensagem de texto para o computador, repetindo a mesma mensagem de segundo em segundo. Para visualizar essas mensagens deve ser usado o comando pterm (que está na diretoria /usr/local.ua/iect/detinchanting-base/detpic32/pic32mx/bin ), mas este comando apenas poderá ser executado após o carregamento do programa no robô. Aproveite uma das versões do programa do exercício anterior e use o bloco print da categoria Looks. Após este exercício termine a aplicação pterm desligando o cabo USB do robô ou com a sequência de teclas Ctrl+C na consola dessa aplicação. 7.4.2 Programas com sensores Exercício 7.5 O terceiro programa consistirá em fazer um indicador visual do estado da bateria do robô. O estado deverá ser atualizado indenidamente de segundo em segundo. Use o bloco battery voltage da categoria Sensing para obter o estado (tensão) da bateria. Use os 4 leds como uma barra indicadora: acende os 4 se o valor for superior a 98, apenas 3 se [98, 96[, apenas 2 se [96, 94[, apenas 1 se [94, 92[, e nenhum caso seja inferior ou igual a 92. Exercício 7.6 O quarto programa consistirá na escrita de um bloco para o programa anterior. Nomeadamente, vamos criar um bloco do tipo command na categoria Looks que, dado um valor entre 0 e 4, acende igual número de leds. Feito o bloco, vamos usá-lo para apresentar o valor da voltagem. 117

Exercício 7.7 O quinto programa consistirá num ciclo innito que verica se algum botão está pressionado e acende um led sempre que tal acontece. Deve ser usado um (ou mais) led(s) diferente(s) para cada botão. Para usar os botões é preciso congurar os robô para usar estes sensores. Isso é feito através do botão Configure Sensors da categoria Sensing. Já na janela do editor de conguração, basta acrescentar o bloco Sensor DETI Buttons named Button a um dos portos de ligação no lado direito da interface. Feita esta conguração, vericamos que na categoria Sensing surge um novo bloco que indica se um botão está pressionado. O menu no interior deste bloco permite escolher o botão desejado. Exercício 7.8 O sexto programa consiste numa alteração do anterior nos seguintes moldes: (i) em vez de acender um led deve ser escrito texto via USB no computador, e (ii) o texto só deverá ser escrito após um ciclo de pressão e libertação do botão. Ou seja, após a pressão espera-se pela libertação e só então se procede à escrita. Na resolução deste exercício irá notar a presença de variações de alta frequência no valor dado pelos sensores; para os resolver é necessário usar períodos de espera reduzidos. Exercício 7.9 O sétimo programa consistirá num ciclo innito que verica se o robô está demasiado perto de um obstáculo. A proximidade deverá ser dada por uma barra de leds (quanto mais acesos, mais longe estamos, quando estiverem todos apagados, já estamos próximo de mais). Experimente medir a proximidade com um dos sensores de distância apenas. Para usar os sensores de distância é preciso congurar os robô para usar estes sensores, tal como aconteceu no caso dos botões. Isso é igualmente feito através do botão Configure Sensors da categoria Sensing. Já na janela do editor de conguração, basta acrescentar o bloco Sensor DETI Range named Range a um dos portos de ligação no lado direito da interface. Feita esta conguração, vericamos que na categoria Sensing surge um novo bloco que fornece a distância a um obstáculo medida por um dos três sensores de distância. O menu no interior deste bloco permite escolher o sensor desejado. Exercício 7.10 O nono programa consiste numa sosticação do programa anterior para usar o botão preto para mudar de sensor e o botão vermelho para terminar a execução do programa. Maximize o uso de blocos. Exercício 7.11 O décimo programa consistirá num ciclo innito que verica o estado dos sensores de brilho do robô. Essa estado deverá ser apresentado nos leds da seguinte forma: FAR LEFT escuro: acende led 3 FAR RIGHT escuro: acede led 0 118

LEFT e CENTER escuros: acende led 2. RIGHT e CENTER escuros: acende led 1. LEFT, CENTER e RIGHT escuros: acende leds 1 e 2. Para usar os sensores de brilho é preciso congurar os robô para usar estes sensores, tal como aconteceu no caso dos botões e dos sensores de distância. Isso é igualmente feito através do botão Configure Sensors da categoria Sensing. Já na janela do editor de conguração, basta acrescentar o bloco Sensor DETI Line named Line a um dos portos de ligação no lado direito da interface. Feita esta conguração, vericamos que na categoria Sensing surge um novo bloco que indica se um dos 5 sensores de brilho reporta escuridão. O menu no interior deste bloco permite escolher o sensor desejado. Teste os sensores de luminosidade numa tira preta colocada sobre a mesa. Teste igualmente esses sensores sobre a folha de papel com uma pista a preto desenhada que lhe será fornecida. 7.4.3 programas com locomoção Chegámos, agora, ao ponto onde vamos colocar o robô a deslocar-se. Esta parte carece de cuidados especiais, para evitar que o robô que descontrolado e se danique. Para que isso não aconteça os alunos devem evitar trabalhar com velocidades muito elevadas, e ter sempre muita atenção ao movimento do robô para minimar estragos no mesmo. É também imprescindível que os programas comecem sempre por uma espera por uma pressão num botão (sugere-se o preto) para evitar que o robô se comece a deslocar logo após o carregamento do programa, e estando ainda ligado via USB ao computador. Finalmente, se possível o botão vermelho deve ser associado a uma terminação da execução do programa no robô. Para usar os motores é preciso congurá-los. Tal é similar ao que se fez com os sensores, mas neste caso faz-se na categoria Motors. No editor de conguração dos motores devese associar motores lentos (DETI Motor Slow) a ambos os portos Motor Port PWD A e Motor Port PWD B. Estes representam os portos de acesso aos motor esquerdo e direito, respetivamente. Finalmente, para terminar a conguração deve-se dar um nome a cada motor. Esse nome é arbitrário e será usado mais tarde no programa para referir o motor. Exercício 7.12 Congure os motores e faça um programa que desloque o robô em diante, a uma velocidade xa, durante 3 segundos, após o que o programa termina. Verique a evolução do robô com diferentes velocidades. Teste agora com diferentes velocidades e com os motores a girar em sentido contrário. 119

7.4.4 Programas complexos Está agora na hora de fazer programas mais complexos que unam locomoção a controlo sensorial. Exercício 7.13 Faça um programa que siga um percurso linear indicado por uma tira de cor preta até chegar ao seu extremo. Nesse ponto deverá terminar a execução. Exercício 7.14 Altere o programa anterior para voltar para trás em cada extremo da linha, girando sobre si próprio, fazendo um número innito de percursos. Exercício 7.15 Altere o programa anterior para evitar obstáculos sobre a linha, parando o movimento até que os mesmos sejam removidos. Exercício 7.16 Altere o programa anterior para empurrar suavemente obstáculos sobre a linha para fora da mesma. Os obstáculos podem ser empurrados ao longo da linha ou para o lado da mesma. Devem ser evitadas colisões bruscas com os obstáculos. Exercício 7.17 Faça um programa que siga innitamente uma linha preta fechada (mas não circular). 120