A TAMPA DO COMANDO À DISTÂNCIA



Documentos relacionados
CAPA PARA OS CABOS DA CABEÇA

A BANDEJA PORTA-OBJECTOS

A PLACA DO COMANDO À DISTÂNCIA

Tutorial de Computação Introdução a Programação Gráfica em Java para MEC1100 v

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Universidade da Beira Interior. Sistemas Distribuídos

Java. Marcio de Carvalho Victorino

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Programação Gráfica em Java.

Is Event Dispatcher Threade (Animation)

Programação Concorrente em java - Exercícios Práticos Abril 2004

Implementando uma Classe e Criando Objetos a partir dela

SAMUO APP: MANUAL DO ADMINISTRADOR

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Tratamento de Eventos

MÓDULO 4 SWING Parte 3

Manual Processamento de Imagem. João L. Vilaça

Guia de Fatores de Qualidade de OO e Java

Unidade IV: Ponteiros, Referências e Arrays

Programação Orientada a Objetos em Java

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Guia Site Empresarial

Java 2 Standard Edition Como criar classes e objetos

Programação de Computadores - I. Profª Beatriz Profº Israel

Orientação a Objetos

Sistemas Paralelos e Distribuídos /2004 Curso: Matemática /Informática Sistemas Distribuídos /2004 Curso: Ensino da Informática

Aula 30 - Sockets em Java

GeoMafra Portal Geográfico

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

2 Orientação a objetos na prática

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Conceitos importantes

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

Java : Comunicação Cliente-Servidor.

JAVA APLICAÇÕES GRÁFICAS Propriedade Utilizada: FontSizeAnimation

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Introdução a Java. Hélder Nunes

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

CURSO DE PROGRAMAÇÃO EM JAVA

Curso de Aprendizado Industrial Desenvolvedor WEB

Eclipse IDE Dá-se importância aos antepassados quando já não temos nenhum. Francois Chateaubriand

Java Mail Server. Manual do Utilizador

Prototype, um Design Patterns de Criação

Exercícios de Revisão Java Básico

Seu manual do usuário EPSON LQ-630

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

1 Criando um aplicativo visual em Java

DEFINIÇÃO DE MÉTODOS

Entradas Digitais. PdP. Autores: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 27/12/2005 Última versão: 18/12/2006

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Programação Básica em Arduino Aula 2

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Configurar o Furbot no Eclipse

THREADS EM JAVA. George Gomes Cabral

O BRAÇO DIREITO DO ROBOT

Leitor MaxProx-Lista-PC

Neste tutorial irá criar uma animação simples com base num desenho do Mechanical Desktop.

SISTEMA DE ALARME INTELIGENTE

Programação por Objectos. Java

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

PdP. Autor: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 26/12/2005 Última versão: 18/12/2006

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Conteúdo do pacote. Lista de terminologia. Powerline Adapter


Sagômetro Digital. Manual de Instalação e Operação

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

SOFTWARE. Equipamentos de gestão para controlo de acessos

R O B Ó T I C A. Sensor Smart. Ultrassom. Versão Hardware: 1.0 Versão Firmware: 1.0 REVISÃO

LW056 SWEEX WIRELESS LAN PC CARD 54 MBPS. O Windows detectará automaticamente o aparelho e aparecerá a seguinte janela.

Oficina de Manipulação e Edição de Fotografia e Imagem Digital GIMP

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

5 Caso de estudo O cartão fidelidade

Persistência de Classes em Tabelas de Banco de Dados

1) De acordo com o trecho de código escrito na linguagem JAVA, responda a questão abaixo:

Sistema de Informação de Licenciamento de Operações de Gestão de Resíduos

Controladores Lógicos Programáveis 2

Display de Cristal Líquido

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

UDPcast Clonagem de HDs via rede utilizando

Manual do instalador Box Input Rev Figura 01 Apresentação do Box Input.

Threads e Concorrência em Java (Material de Apoio)

Capítulo 2. Laboratório 2.1. Introdução ao Packet Tracer, Roteadores, Switches e Inicialização

Gestor de Janelas Gnome

Classes Abstratas e Interfaces

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

JSP - ORIENTADO A OBJETOS

Roteiro para criação de Applet

(Aula 17) Threads em Java

Transcrição:

PASSO A PASSO A TAMPA DO COMANDO À DISTÂNCIA COMPONENTES 1. 2. Com este fascículo também são entregues algumas das peças necessárias para completar o comando à distância universal. Neste caso são dois parafusos e a tampa da carcaça. Continuando com as peças que compõem o comando à distância universal, agora entregam-se a tampa da caixa. Este elemento, de cor preta, protegerá as peças do interior do comando, concretamente o emissor e o receptor, de pancadas e do pó. Embora pareça opaca, a tampa permite a passagem dos raios infravermelhos. Assim, o funcionamento do comando não é influenciado pela presença deste elemento protector. Por esta razão, a tampa é parecida, em termos de função e constituição, com as peças análogas utilizadas nas portas de comunicação por infravermelhos para PC e telemóveis ou nos comandos à distância normais. Para evitar danificar a sua superfície é aconselhável manter a tampa no invólucro de plástico até que chegue a altura de montar o comando à distância. O mesmo conselho aplica-se ao resto das peças entregues até agora, incluindo os dois parafusos de 2,3 x 6 mm que completam o conjunto de elementos incluídos neste fascículo. Estes parafusos, em concreto, vão servir para fixar a placa de controlo do comando à distância à caixa que lhe serve de carcaça. BRAÇOS E MÃO, 19 1. 2 parafusos de 2,3 x 6 mm 2. Tampa da caixa Peças do comando à distância (à excepção da placa de controlo e da tampa). Primeira parte da caixa (à direita com as outras peças do fascículo 84); a segunda metade da caixa (à esquerda, fascículo 85); o cabo do tipo mini-usb (em cima, à esquerda, fascículo 87); o circuito (em cima, fascículo 88). 1371

PASSO A PASS0 DUPLICAR EM C-LIKE O COMPORTAMENTO VISÃO PROGRAMAÇÃO Alguns comportamentos pré-definidos que podem ser activados em O SEU ROBOT são facilmente reproduzíveis utilizando a linguagem de programação C-like. Com o código que apresentamos neste exemplo criaremos um clone do comportamento Visão introduzindo uma variante interessante. No seguinte exemplo em C-like vemos como implementar um programa clone do comportamento Visão, um dos pré-definidos em O SEU ROBOT. Recordemos que este último se encarrega de fazer com que o robot siga com a cabeça os movimentos de um objecto de uma cor determinada, detectado graças à câmara CMOS da cabeça do robot. O reconhecimento dos objectos produz-se processando as imagens captadas pelo sensor. Os píxeis que têm uma cor semelhante à indicada como «target» reagrupam-se para localizar áreas contíguas que correspondam aos objectos identificados. No comportamento pré-definido, a referida cor está configurada em tonalidades semelhantes às da pele de uma pessoa e não se pode modificar. Neste exemplo, no entanto, acrescentámos a possibilidade de personalizar a nosso gosto a cor dos objectos que o O SEU ROBOT segue. Concretamente, podem-se estabelecer, no código C-like do programa, duas cores distintas. Para passar de uma cor para outra basta dar as ordens orais «um» e «dois». Com a ordem «zero» fecha-se a aplicação. CONFIGURAÇÃO DAS CORES Para fazer com que O SEU ROBOT reconheça adequadamente as cores que queremos configurar é preciso defini-las com alguma precisão. A câmara CMOS não percebe as cores da mesma maneira que o sistema de visão humano. Aquilo que para a nossa vista é um amarelo forte, poderá ser captado pela câmara como um amarelo menos saturado. Calibrar as cores é uma operação bastante simples. Em primeiro lugar, temos que arranjar dois pedaços de cartão de duas cores diferentes e que meçam, aproximadamente, 15 x 15 centímetros. Cada um dos recortes será o objectivo que seguirá O SEU ROBOT quando receber, respectivamente, as ordens orais Imagem de um pedaço de cartão de cor captada por O SEU ROBOT e analisada com um programa de tratamento de imagem para se obterem as três componentes de cor (vermelho, verde e azul). «um» e «dois». Depois, indica-se ao robot que tire uma fotografia a cada um dos pedaços de cartão. Para se obter a cor captada pela câmara CMOS é necessário abrir as imagens com um programa de tratamento de imagem (como o Photoshop ou o GIMP, que pode ser descarregado gratuitamente de www.gimp.org) e utilizar a ferramenta «conta-gotas» para se ter a referência exacta da cor nas imagens, na RGB (vermelho, verde e azul). Para cada um dos três canais de cor é fornecido um valor situado entre 0 e 255. Anotam-se os três valores obtidos para cada um dos dois cartões pois vão servir de referência para configurar as cores do «target» no código C-like do programa. O CÓDIGO DO PROGRAMA Analisamos agora o código do programa. Depois da ação dos arquivos da biblioteca robot.h e c-like.h, necessários para o funcionamento da aplicação, aparecem as duas variáveis X e Y, dedicadas à memorização do ponto central do objecto identificado por O SEU ROBOT. 1372

DUPLICAR EM C-LIKE O COMPORTAMENTO VISÃO EXEMPLOS DE PROGRAMAÇÃO Código C-like do programa clone de Visão, descrito nestas páginas. O código terá que ser memorizado num arquivo denominado vision.clike, carregado no robot e compilado utilizando o software Visual C-like Editor. Além do comportamento principal (Main) há outros dois comportamentos, SegueCor e OrdensOrais. Lembramos que é preciso personalizar o código do programa introduzindo o correspondente trio de valores (RGB) nas instruções set_tracking_color. CÓDIGO C-LIKE DO PROGRAMA #include «c-like.h» #include «robot.h» int X = 0; int e = 0; declare( behavior(ordensorais) ); declare( behavior(seguecor) ); void OrdemZero(); void OrdemUm(); void OrdemDois(); define( behavior(main)) set_tracking_color(-,-,-,40); //Substituir os sublinhados pelo trio de valores RGB led_on(led_red); start(ordensorais); start(seguecor); // Main define( behavior(ordensorais) ) local(voice_cmd) = wait_for (voice_cmd, update); switch (local(voice_cmd)) case CMD_ZERO: OrdemZero(); break; case CMD_ONE: OrdemUm(); break; case CMD_TWO: OrdemDois(); break; // OrdensOrais define( behavior(seguecor) ) local(vision) = wait_for (vision, update); X = local(vision).x; Y = local(vision).y; lcd_clear(); lcd_write_int(1,1,x); lcd_write_int(2,1,y); if (X > 35) head_pan_r(1); else if (X < -35) head_pan_r(-1); if (Y > 20) head_tilt_r(1); else if (Y < -20) head_tilt_r(-1); // SegueCor void OrdemZero() end(); void OrdemUm() set_tracking_color(-,-,-,40); // Substituir os guiões pelos valores RGB led_on(led_red); void OrdemDois() set_tracking_color(-,-,-,40); // Substituir os guiões pelos valores RGB led_on(led_yellow); Além do comportamento Main existem outros dois: OrdensOrais e SegueCor. O primeiro ocupa-se de mudar a cor objectivo, consoante a ordem oral («um» ou «dois») ou de encerrar o programa (ordem «zero»). Além disso, configuram-se duas cores diferentes para os led dos olhos, com base na ordem recebida. O segundo comportamento configura o coração do programa. Com base no ponto central do objecto identificado pelo robot, a cabeça desloca-se para manter o enquadramento «centrado». No seu código terás que o guardar num arquivo chamado vision.clike; lembre-se de substituir os primeiros parâmetros (relativos à cor) nas instruções set_tracking_color de acordo com as suas medições. O último parâmetro (o limite) terá que ficar configurado num valor equivalente a 40. As coordenadas do ponto central são mostradas no display do robot, através das instruções lcd_write. Main inicializa a cor objectivo por defeito (escolhendo uma cor entre as medidas experimentalmente) e acciona os outros comportamentos do programa. 1373

PASSO A PASSO UM MONITOR PARA A TEMPERATURA PROGRAMAÇÃO Nos exemplos de Java dos fascículos anteriores vimos que é possível, e relativamente simples, aceder aos registos de O SEU ROBOT para ler o valor medido por um dos seus sensores. No novo programa que propomos nestas páginas vamos criar um interface para monitorizar a temperatura ambiente. Com o programa Java de exemplo que aqui apresentamos poderá confirmar como é fácil criar um interface gráfico para monitorizar a temperatura que O SEU ROBOT mede. Desta medição encarrega-se um sensor colocado na frente do robot e controlado, tal como já referimos noutras ocasiões, pela placa electrónica Braços. O interface é bastante simples. Na parte esquerda aparece uma casa de texto que mostra a temperatura medida, ao passo que à direita há um botão que, quando carregado, faz com que o robot pronuncie a referida temperatura. A casa de texto mostra duas cores diferentes consoante o valor medido: verde quando é inferior a 30 graus centígrados e vermelho quando é igual ou superior a este valor. Em cima, o painel para monitorizar a temperatura, enquanto se mede um valor inferior a 30 graus centígrados. Em baixo, o mesmo display quando o sensor mede uma temperatura superior a 30 graus. TEMPERATUREMONITOR Esta aplicação é constituída por uma única classe: TemperatureMonitor. Esta tanto implementa os métodos para a gestão do interface gráfico como para o acesso aos registos do robot. Dado que o programa é composto apenas por uma classe, só é preciso introduzir o código completo num único arquivo chamado TemperatureMonitor.java. Para a compilação e a execução deste programa pode Screenshot dos comandos correspondentes ao início do programa TemperatureMonitor. Indica-se como parâmetro de início a cadeia COM3, que indica a porta de série virtual utilizada neste caso para estabelecer a ligação Bluetooth entre o robot e o PC. aplicar-se aquilo que já vimos em fascículos anteriores. Na primeira parte do código Java encontram-se as declarações do pacote e de ação das classes auxiliares necessárias ao funcionamento do programa. Além das classes para a gestão dos elementos gráficos encontram-se também as que permitem a comunicação com o robot e o acesso aos seus registos. Aqui intervêm os pacotes correspondentes às placas electrónicas Braços e Voz. O sensor de temperatura é controlado pelo primeiro destes dois módulos, ao passo que o segundo é necessário para que o robot possa anunciar a temperatura média. A classe TemperatureMonitor extende JFrame, cuja função é a realização da janela gráfica da aplicação. Como se podem confirmar pelos screenshots que ilustram estas páginas, o interface do programa é minimalista. Como já foi referido, existe uma casa de texto para a visualização da temperatura e um botão para activar a pronúncia desta última por parte do 1374

86-paso a paso (3) 10/24/08 12:17 AM Page 1359 UM MONITOR PARA A TEMPERATURA EXEMPLOS DE PROGRAMAÇÃO Exemplos de código Java para a implementação de uma classe para a realização de um interface gráfico para a monitorização da temperatura ambiente, medida pelo correspondente sensor electrónico montado na frente de O SEU ROBOT. public static void main [...] public TemperatureMonitor() [...] private class RefreshDisplay implements Runnable CLASSE TEMPERATUREMONITOR package communication.examples; communication.handler.protocolhandler; communication.handler.internal.internalhandler; communication.transport.connectionprovider; communication.handler.internal.internalmodule; communication.handler.internal.voiceregister; communication.handler.internal.armsregister; java.io.ioexception; javax.swing.*; java.awt.*; java.awt.event.*; public class TemperatureMonitor extends JFrame private static String portname; private ProtocolHandler protocol; private InternalHandler internal; private JPanel panel; private JLabel temp; private JButton speak; Thread t; boolean active = false; robot. O método main cria uma instância de TemperatureMonitor, invocando o construtor. Antes de fazer isso, main confirma se foi indicada pelo utilizador, no início do programa, a porta de série virtual para comunicar com o robot. Vejamos agora como se estrutura o código do construtor. Em primeiro lugar, associa-se ao evento «fecho da janela» o encerramento do programa. Depois chamam-se e colocam-se no painel da aplicação os diferentes elementos gráficos. Para a sua disposição utiliza-se um «layout total» que estabelece a posição exacta de cada objecto gráfico mediante as chamadas aos métodos setbounds. Os dois primeiros parâmetros indicam as coordenadas (X e Y) nas quais ficará colocado o elemento, ao passo que a terceira e a quarta determinam a sua dimensão (largura e altura). Todos os parâmetros são expressos em píxeis. Quando se carrega no botão speak lança-se a invocação do método saytemperature. Finalmente int x = 0; public void run() while(active) x = checktemperature(); if (x < 30) temp.setbackground(color.green); temp.settext(«temperatura: «+ Integer.toString(x) + «C»); else temp.setbackground(color.red); temp.settext(«temperatura: «+ Integer.toString(x) + «C»); try Thread.sleep(2000); catch (Exception e) // class RefreshDisplay private void saytemperature() [...] private boolean conectar() [...] private void desconectar() [...] // class TemperatureMonitor activa-se a ligação com o robot e executa-se o fio t de tipo RefreshDisplay. Analisando este último, o método run é formado por um ciclo while, executado repetidamente até que o valor da variável booleana active se estabelece em «true» (verdadeiro). Com uma cadência de dois segundos, estabelecida mediante a instrução Thread.sleep(2000), mede-se a temperatura ambiente com o sensor. Por isso recorre-se a outro método, checktemperature (do qual falaremos mais adiante). Uma vez memorizado o valor da temperatura na correspondente variável X, configura-se a cor de fundo da casa de visualização: verde se X é inferior a 30 e vermelho no caso contrário. Ocupemo-nos agora do método checktemperature. Como já foi referido, este último realiza uma leitura no registo de O SEU ROBOT correspondente ao controlo do gestor de temperatura. Na eventualidade de se detectarem erros durante 1375

PASSO A PASSO EXEMPLOS DE PROGRAMAÇÃO Código Java dos métodos da classe TemperatureMonitor. Aparecem em primeiro lugar o método principal e o construtor. Este último também se ocupa da visualização do interface gráfico no monitor do PC e de executar a ligação com o robot, invocando o método ligar. Depois indicam-se outros dois métodos, o primeiro especial para a leitura da temperatura que o sensor mede (checktemperature) e o segundo para o anúncio da referida temperatura por parte de O SEU ROBOT mediante o módulo Voz (saytemperature). Os métodos ligar e desligar permitem, como de costume, activar e desactivar a ligação entre o robot e o PC através da ligação Bluetooth. Para o código destes últimos podem-se consultar as páginas 1229 e 1230 desta colecção. MÉTODOS DA CLASSE TEMPERATUREMONITOR public static void main(string[] args) if (args.length < 1) System.err.println(«Determina a porta a utilizar para a ligação (ex. COM5)»); return; portname = args[0]; TemperatureMonitor gui = new TemperatureMonitor(); // main public TemperatureMonitor() super(«temperaturemonitor»); addwindowlistener( new WindowAdapter() public void windowclosing(windowevent e) active = false; desconectar(); System.exit(0); ); setbounds(0,0,240,95); panel = new JPanel(); panel.setlayout(null); temp = new JLabel(«Temperatura: «+ «C»); temp.setbounds(10,10,120,40); temp.setopaque(true); speak = new JButton(«Voz»); speak.setbounds(140,10,80,40); speak.setfocusable(false); speak.addactionlistener( new ActionListener() public void actionperformed(actionevent e) saytemperature(); ); panel.add(temp); panel.add(speak); getcontentpane().add(panel); if (!conectar()) System.exit(0); t = new Thread(new RefreshDisplay()); active = true; t.start(); setvisible(true); // class constructor private int checktemperature() int[] buf = new int[1]; try internal.readregister(internalmodule.arms, ArmsRegister.TEMPERATURE, buf); return buf[0]; catch (Exception e) e.printstacktrace(); return -1; // checktemperature private void saytemperature() int[] buf = new int[1]; try internal.readregister(internalmodule.arms, ArmsRegister.TEMPERATURE, buf); internal.writeregister(internalmodule.voice, VoiceRegister.TEMPERATURE, buf); System.out.println(«Speak!»); catch (Exception e) e.printstacktrace(); // saytemperature o acesso aos registos do robot, restitui-se o valor -1 para indicar a citada anomalia. O terceiro a começar pelo fim, saytemperature, lê o registo associado ao sensor de temperatura e activa o anúncio por parte de O SEU ROBOT do valor medido. Para isto é suficiente escrever essa quantidade num registo especial do módulo Voz, concretamente em VoiceRegister.TEMPERATURE. Os dois últimos métodos incluídos na classe TemperatureMonitor são os habituais ligar e desligar, que activam e desactivam respectivamente a ligação Bluetooth entre o robot e o PC. O código destes últimos métodos é idêntico ao explicado no fascículo 77 (e que já utilizámos em diferentes programas Java). Quando se testa este programa é imprescindível não submeter o sensor a temperaturas demasiado elevadas, pois isto poderia deteriorá-lo e danificar outros circuitos ou a estrutura do robot. 1376