• Nenhum resultado encontrado

A TAMPA DO COMANDO À DISTÂNCIA

N/A
N/A
Protected

Academic year: 2021

Share "A TAMPA DO COMANDO À DISTÂNCIA"

Copied!
6
0
0

Texto

(1)

PASSO A PASSO

BRAÇOS E MÃO, 19

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.

C

ontinuando 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. COMPONENTES 1. 2 parafusos de 2,3 x 6 mm 2. Tampa da caixa 1. 2.

A TAMPA DO COMANDO

À DISTÂNCIA

A TAMPA DO COMANDO

À DISTÂNCIA

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).

(2)

PROGRAMAÇÃO

PASSO A PASS0

N

o 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

DUPLICAR EM C-LIKE O

COMPORTAMENTO VISÃO

DUPLICAR EM C-LIKE O

COMPORTAMENTO VISÃ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.

«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 importaçã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.

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).

(3)

DUPLICAR EM C-LIKE O COMPORTAMENTO VISÃO

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.

EXEMPLOS DE PROGRAMAÇÃO

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_off(LED_ALL); 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() { led_off(LED_ALL); end(); } void OrdemUm() {

set_tracking_color(-,-,-,40); // Substituir os guiões pelos valores RGB led_off(LED_ALL);

led_on(LED_RED); }

void OrdemDois() {

set_tracking_color(-,-,-,40); // Substituir os guiões pelos valores RGB led_off(LED_ALL);

led_on(LED_YELLOW); }

Código C-like do programa clone de VViissããoo, descrito nestas páginas. O código terá que ser memorizado num arquivo denominado vviissiioonn..cclliikkee, carregado no robot e compilado utilizando o software Visual C-like Editor. Além do comportamento principal (MMaaiinn) há outros dois

comportamentos, SSeegguueeCCoorr e OOrrddeennssOOrraaiiss. Lembramos que é preciso personalizar o código do programa introduzindo o correspondente trio de valores (RGB) nas instruções sseett__ttrraacckkiinngg__ccoolloorr.

(4)

C

om 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.

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

PROGRAMAÇÃO

PASSO A PASSO

UM MONITOR PARA

A TEMPERATURA

UM MONITOR PARA

A TEMPERATURA

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.

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 importaçã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

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.

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.

(5)

UM MONITOR PARA A TEMPERATURA

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

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

CLASSE TEMPERATUREMONITOR

package communication.examples; import communication.handler.ProtocolHandler; import communication.handler.internal.InternalHandler; import communication.transport.ConnectionProvider; import communication.handler.internal.InternalModule; import communication.handler.internal.VoiceRegister; import communication.handler.internal.ArmsRegister; import java.io.IOException; import javax.swing.*; import java.awt.*; import 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;

public static void main { [...] }

public TemperatureMonitor() { [...] }

private class RefreshDisplay implements Runnable { 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

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.

(6)

PASSO A PASSO

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.

EXEMPLOS DE PROGRAMAÇÃ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

Código Java dos métodos da classe TTeemmppeerraattuurreeMMoonniittoorr. 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 (cchheecckkTTeemmppeerraattuurree) e o segundo para o anúncio da referida temperatura por parte de O SEU ROBOT mediante o módulo Voz (ssaayyTTeemmppeerraattuurree). Os métodos lliiggaarr e ddeesslliiggaarr 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.

Referências

Documentos relacionados

As principais características deste agente são: avaliação do diálogo sobre as emoções, representação do modelo de personalidade Big-Five e impacto dos valores

Visando a este cenário, o Ministério da Saúde criou o Programa de Educação pelo Trabalho para a Saúde (PET-Saúde), regulamentado pela Portaria Interministerial

E) CRIE NO SEU CADERNO UM TÍTULO PARA ESSA HISTÓRIA EM QUADRINHOS.. 3- QUE TAL JUNTAR AS SÍLABAS ABAIXO PARA FORMAR O NOME DE CINCO SUGESTÕES DE PRESENTE PARA O DIA

Possíveis danos para a saúde: Longo prazo - efeitos sistémicos Utilização final: Consumidores. Vias de

Acerca da intolerância com a homossexualidade, em uma obra retratando suas experiên- cias com LGBTI´s em viagens pelo continente africano, do Cabo ao Cairo, o pesquisador espa-

Varr edura TCP Window ( cont inuação) ACK- win manipulado Não Responde ACK- win manipulado ICMP Tipo 3 Firewall Negando Firewall Rejeitando Scanner de Porta... Var r edur a FI N/

Concentração de determinada substância, acima da qual podem ocorrer alterações prejudiciais à qualidade do solo e da água subterrânea VALOR DE PREVENÇÃO -

´e aquele pelo qual a filosofia alem˜a traduziu, depois de Kant, o latim existentia, mas Heidegger deu-lhe um sentido muito particu- lar, j´a que designa na sua filosofia