2.5 Adicionando um novo multímetro – Minipa ET-2042D
2.5.2 Configurando o Web Server
Dentre todos os servidores do laboratório virtual, o Web Server foi o que sofreu o maior número de alterações.
Neste servidor é criada a interface onde o usuário interage com o sistema e configuradas as mensagens que serão passadas aos demais servidores por requisições dos usuários. Para isso, são usadas as linguagens HTML, CSS e JavaScript.
Para criar o multímetro, foram usadas fotos de um multímetro real. Dessas imagens foram separados o corpo do instrumento e a chave seletora, que serão tratados como imagens separadas.
O corpo do instrumento (Figura 42) é uma imagem estática que serve como grade para os demais elementos visuais, como display e chave seletora.
Figura 42 - Multímetro para a interface web
Fonte: elaboração própria (2018)
O display onde são mostrados os resultados das medições é um campo de texto em HTML, com propriedades configuradas para imitar o display do multímetro real.
A chave seletora (Figura 43) é uma imagem de tamanho e posição fixos, mas que é possível rotacionar através do uso de funções em JavaScript. Baseado no ângulo de rotação da imagem é possível determinar o modo do multímetro escolhido pelo usuário.
Figura 43 - Chave seletora do multímetro
Fonte: elaboração própria (2018)
Usando o multímetro padrão já instalado no VISIR como referência, foram criados os arquivos JavaScript e CSS do novo multímetro. O HTML do instrumento é armazenado como uma variável - var tpl - dentro do arquivo ‘minipamultimeter.js’, por isso não existe um arquivo com a extensão ‘.html’ para o instrumento. Nessa estrutura HTML armazenada na variável são definidos alguns marcadores HTML, com classes e identificadores próprios, que serão usados para manipular os elementos no navegador. É neste HTML também que são referenciadas as imagens que serão carregadas no navegador e o link para o manual de instruções do instrumento.
No arquivo ‘minipamultimeter.css’ (Apêndice A) são definidas as propriedades visuais do multímetro. Configurando as propriedades vinculadas às classes ou identificadores do HTML, são definidos o tipo e tamanho de fontes do display e a visibilidade e posição de todos os elementos da página. Usando essas propriedades foi possível sobrepor a imagem da chave seletora e do texto do display sobre a imagem do corpo do instrumento. Também foi configurada a visibilidade de elementos que só devem ser visíveis em determinados casos, como o sinal ‘AC’
quando forem medidos sinais em corrente alternada ou o sinal de negativo (-) que só deve ser visível quando a leitura apresentar valores negativos.
O documento ‘minipamultimeter.js’ é o principal arquivo do instrumento.
Além de carregar a variável que armazena o HTML ele também é responsável pela lógica e interação da página.
Neste arquivo há uma função que verifica o ângulo de rotação da imagem da chave seletora e associa este ângulo a um dos 30 modos do multímetro. Sabendo o modo selecionado, pode-se definir os valores das variáveis que serão passados aos demais servidores quando o usuário fizer uma requisição.
Para definir os parâmetros de cada um dos 30 modos possíveis, foi criado uma estrutura switch-case onde para cada posição da chave seletora será atribuído um valor para as variáveis range e function – através da função SetMode(mode) -, que serão anexadas ao arquivo XML que será passado aos demais servidores. As variáveis resolution e autozero podem ter valores iguais para todas as opções. Isto não terá impacto no funcionamento do instrumento. Dentro da estrutura switch-case ainda são reconfigurados alguns elementos visuais, como os sinais de AC ou negativo.
A Tabela 8 associa a posição da chave seletora com o ângulo da imagem e os valores que serão armazenados nas variáveis mode e range.
Com isso, o instrumento está configurado para enviar todas as requisições necessárias para fazer quase todos os tipos de medição que o multímetro ET-2042D permite. Por uma limitação de hardware foram deixadas de fora as medições de teste de linha viva, temperatura e hFE.
Após fazer uma requisição, o usuário recebe uma resposta do servidor em um arquivo XML. O Web Server deve tratar esse arquivo e extrair dele as informações relevantes para a exibição dos resultados da medição. Retomando a Tabela 6, pode- se observar um parâmetro chamado ‘result’. Esse parâmetro armazena o resultado da medição feita pelo Equipment Server.
Este resultado deve ser colocado no display do instrumento respeitando o formato do display original. Resgatando a Figura 36, pode-se observar que o valor armazenado na variável dmm_result – 9,831235e+002 – não está num formato semelhante ao que pode ser exibido no display do multímetro. Para tratar isso, foi criada uma segunda estrutura switch-case que, baseada no parâmetro range, adequa o resultado para um formato que respeite o display original, considerando o número máximo que pode ser exibido e a posição do dígito decimal. Assim o resultado final da interface do multímetro ET-2042D ficou como ilustrado na Figura 44.
Tabela 8 - Opções da chave seletora
Chave seletora Ângulo da imagem mode range
200 246 resistance 200
2k 258 resistance 2 x 103
20k 270 resistance 20 x 103
200k 282 resistance 200 x 103
2M 294 resistance 2 x 106
200M 306 resistance 200 x 106
200m 318 dc volts 2 x10-3
2 330 dc volts 2
20 342 dc volts 20
200 354 dc volts 200
1000 6 dc volts 1000
750 18 ac volts 750
200 30 ac volts 200
20 42 ac volts 20
2 54 ac volts 2
TEST 66 off
20m 78 ac current 20 x 10-3
200m 90 ac current 200 x 10-3
20 102 ac current 20
20 114 dc current 20
200m 126 dc current 200 x 10-3
20m 138 dc current 20 x 10-3
ºC 150 off
20n 162 capacitance 20 x 10-9
2u 174 capacitance 2 x 10-6
200u 186 capacitance 200 x 10-6
hFE 198 off
200k 210 frequency 200 x 103
2k 222 frequency 2 x 103
DIODE 234 diode 1
Fonte: elaboração própria (2018)
Figura 44 - Multímetro Minipa ET-2042D no VISIR
Fonte: elaboração própria (2018)
Durante a conversão, parte do resultado é truncado e perde-se a precisão do número. Essa perda não tem impacto significativo no valor medido, considerando o número de casas decimais do instrumento. A Figura 45 ilustra este comportamento do display mostrando a mesma medição de um resistor de 10 kΩ usando escalas diferentes. Nas escalas de 200 Ω e 2 kΩ o instrumento mostra ‘1. ‘, indicando que houve estouro na escala selecionada. Em 20 kΩ e 200 kΩ a leitura apresentada está adequada. Em 2 MΩ, a leitura mostra alguma imprecisão e em 200 MΩ a leitura está errada por ter sido escolhida uma escala inadequada. Este comportamento é muito semelhante ao obtido quando as medições são feitas usando o multímetro real, como pode ser visto na Figura 46.
Figura 45 - Medição de resistor de 10KΩ em diferentes escalas – VISIR
Fonte: elaboração própria (2018)
Figura 46 - Medição de resistor de 10kΩ em diferentes escalas – instrumento real
Fonte: elaboração própria (2018)
Os outros modos do multímetro apresentaram o comportamento esperado.
A Figura 47 apresenta a resposta do multímetro para medições de tensão DC, tensão AC, corrente DC, corrente AC, capacitância, frequência e teste de diodo. As configurações dos instrumentos para cada medição são:
a) tensão DC: +10 V;
b) tensão DC: -5 V;
c) tensão AC: 10 Vpp (3,535 Vrms), f = 500 Hz;
d) corrente DC: +10 V, R = 1 KΩ;
e) corrente DC: -5 V, R = 1 KΩ;
f) corrente AC: 10 Vpp (3,535 Vrms), R = 1 KΩ, f = 500 Hz;
g) capacitância: C = 0,1 uF;
h) frequência: 10 Vpp (3,535 Vrms), f = 500 Hz;
i) diodo: D = 1N4007.
Figura 47 - Medições com o multímetro ET-2042D
Da esquerda para direita, de cima para baixo: a) tensão DC +10 V, b)tensão DC -5 V, c) tensão AC, d) corrente DC +10 V, e) corrente DC -5 V, f) corrente AC, g) capacitância, h) frequência e i) teste de diodo.
Fonte: elaboração própria (2018)
Com estes resultados pode-se afirmar que é possível adicionar novos instrumentos no laboratório remoto. A performance obtida com o multímetro virtual é adequada para se validar a proposta de inserir um novo instrumento no sistema.
3 CONCLUSÃO
O trabalho desenvolvido na plataforma VISIR trouxe uma oportunidade única aos envolvidos no projeto. Considerando a pouca quantidade de informações disponíveis relacionadas à tecnologia do laboratório, pode-se considerar que boa parte do trabalho foi um exercício de engenharia reversa, onde, partindo de um ambiente funcionando corretamente, fez-se um movimento de fora pra dentro, com o intuito de compreender e se apropriar da tecnologia.
Quando o laboratório foi instalado no IFSC, os envolvidos ainda desconheciam as possibilidades de intervir no laboratório, mas a possibilidade de alterar o ambiente, principalmente os instrumentos na interface web, já era cogitada.
Um dos objetivos deste trabalho era compreender o funcionamento do VISIR, tanto software quanto hardware, e com a revisão da bibliografia e análise do funcionamento de todos os servidores, pode-se criar material de apoio para dar suporte aos outros objetivos e, talvez, para futuros projetos.
Também foi proposta a inserção de um novo componente e um novo instrumento no laboratório. Com a adição do diodo e do multímetro Minipa ET-2042D e seu correto funcionamento, foi confirmado que estas alterações são possíveis e viáveis. A documentação gerada para descrever como adicionar novos elementos pode servir de referência para modificar os demais instrumentos ou adicionar novo componentes.
As alterações descritas neste texto foram aplicadas ao laboratório instalado no IFSC e, até o encerramento deste trabalho, não foram reportados defeitos críticos.
O novo multímetro foi, inclusive, adotado como instrumento padrão para o sistema.
Assim, acredita-se que os objetivos do trabalho foram alcançados com êxito.
Como sugestão de futuros trabalhos, pode-se atualizar toda a interface web, construindo páginas responsivas e usando ferramentas web mais modernas.
Pode-se, também, adicionar novas fontes de tensão, gerador de funções e osciloscópio para que o laboratório remoto apresente os mesmos instrumentos usados em laboratórios reais.
REFERÊNCIAS
ABED – Associação Brasileira de Educação a Distância. Censo EAD.BR: Relatório Analítico da Aprendizagem a Distância no Brasil 2015. Curitiba: InterSaberes, 2016.
Disponível em:
<http://www.abed.org.br/site/pt/midiateca/censo_ead/1395/2016/09/censoead.br_- _2015/2016>. Acesso em: 24 de abril de 2017.
ALVES, Gustavo R. et al. Spreading remote lab usage a system – a community – a federation. International Conference of the Portuguese Society for Engineering Education (CISPEE). 2016, Portugal: IEEE, 2016.
Aprender PHP Operadores no PHP. 2010. Disponível em:
<http://aprenderphp.com.br/artigo/operadores-no-php/>. Acesso em: 16 de junho de 2019
BRASIL. Lei n. 9.394, de 20 de dezembro de 1996. Estabelece as diretrizes e bases da educação nacional. Diário Oficial da União, Brasília, DF, 23 dez. 1996. Disponível em: <http://www.planalto.gov.br/ccivil_03/leis/L9394.htm>. Acesso em: 07 de maio 2017.
______. Decreto n. 5.622, de 19 de dezembro de 2005. Regulamenta o art. 80 da Lei n o 9.394, de 20 de dezembro de 1996, que estabelece as diretrizes e bases da educação nacional. Diário oficial da União, Brasília, DF, 20 dez. 2005. Disponível em: <http://portal.mec.gov.br/seed/arquivos/pdf/dec_5622.pdf>. Acesso em: 07 de maio de 2017.
______. Portaria n. 4.059 de dezembro de 2004. Diário Oficial da União, Brasília, DF, 13 dez. 2004. Disponível em:
<http://portal.mec.gov.br/sesu/arquivos/pdf/nova/acs_portaria4059.pdf>. Acesso em:
07 de maio de 2017.
______. Portaria n. 1.428 de dezembro de 2018. Diário Oficial da União, Brasília, DF, 31 dez. 2018. Disponível em: <http://www.in.gov.br/materia/-
/asset_publisher/Kujrw0TZC2Mb/content/id/57496468/do1-2018-12-31-portaria-n-1- 428-de-28-de-dezembro-de-2018-57496251>. Acesso em: 30 de julho de 2019.
PROTOCOL Specification Version 4.1. s.d.
DS, Kiran TCP 3-Way Handshake. 2014. Disponível em:
<http://kirandsnetworkingandlinux.blogspot.com/2014/02/tcp-3-way- handshake.html>. Acesso em: 15 de junho de 2019
ELETROPEÇAS Comercial Eletrônica Multímetro Digital Minipa ET-2042D. 2019.
Disponível em < https://www.eletropecas.com/Produto/multimetro-digital-minipa-et- 2042d>. Acesso em 30 de julho de 2019.
GUSTAVSSON, Ingvar VISIR Relay Switching Matrix Version 4.1 – User’s Manual. 2016.
KOZIEROK, Charles M. The TCP/IP Guide. 2005. Disponível em:
<http://www.tcpipguide.com/>. Acesso em: 30 de novembro de 2018.
LARSEN, Ronald W. LabVIEW for Engineers. New Jersey: Pearson Education, 2011.
MDN Web Docs Tecnologia para desenvolvedores web. 2019a. Disponível em:
<https://developer.mozilla.org/pt-BR/docs/Web/>. Acesso em: 15 de junho de 2019.
______. CSS: Cascading Style Sheets. 2019b. Disponível em:
<https://developer.mozilla.org/en-US/docs/Web/CSS>. Acesso em: 15 de junho de 2019.
______. JavaScript. 2019c. Disponível em: <https://developer.mozilla.org/pt- BR/docs/Web/javascript>. Acesso em: 15 de junho de 2019.
______. HTTP. 2019d. Disponível em: <https://developer.mozilla.org/pt- BR/docs/Web/HTTP>. Acesso em: 15 de junho de 2019.
National Instruments Conceitos básicos de LabVIEW. 2019. Disponível em:
<http://www.ni.com/getting-started/labview-basics/pt/environment>. Acesso em: 16 de junho de 2019.
RELLE – Ambiente de aprendizagem com Experimentos remotos Laboratórios.
2019. Disponível em <http://relle.ufsc.br/labs>. Acesso em 30 de julho de 2019.
SCHLICHTING, Luis. C. M. et al. Remote Laboratory: Application and usability.
Technologies Applied to Electronics Teaching (TAEE), 2016, Espanha: IEEE, 2016.
TAWFIK, Mohamed et al. VISIR: Experiences and Challenges. International Journal of Online Engineering (iJOE). 2012.
TAWFIK, Mohamed VISIR Installation and Start-up Guide V.1. Electric, Electronic and Control Engineering Department. 2011, Espanha: UNED, 2011.
The PHP Group PHP Manual. 2019. Disponível em: <http://php.net/>. Acesso em:
16 de junho de 2019.
TOTTY, Brian et al. HTTP: The Definitive Guide. Sebastopol: O'reilly Media, 2009.
656 p.
UNIVERSIA. Educação a distância é a que mais cresce no Brasil, segundo censo do MEC. Notícias Universia Brasil, 2016. Disponível em:
<http://noticias.universia.com.br/destaque/noticia/2016/02/22/1136578/educacao- distancia-cresce-brasil-segundo-censo-mec.html>. Acesso em: 24 de abril de 2017.
VISIR Laboratório remoto. 2019. Disponível em:
<https://visir.florianopolis.ifsc.edu.br/visir/index.php/pt>. Acesso em: 17 de junho de 2019.
W3Schools XML Tutorial. 2019. Disponível em:
<https://www.w3schools.com/xml/default.asp>. Acesso em: 15 de junho de 2019.
WEBLAB Deusto Darchimedes-demo. 2019. Disponível em
<https://weblab.deusto.es/weblab/labs/Aquatic%20experiments/darchimedes- demo/>. Acesso em 30 de julho de 2019.
World Wide Web Consortium (W3C) EXTENSIBLE MARKUP LANGUAGE (XML).
2008. Disponível em: <https://www.w3c.org/TR/xml/>. Acesso em: 30 de novembro de 2018.
______. HTML 5.2. 2017. Disponível em: <https://www.w3.org/TR/html/>. Acesso em: 15 de junho de 2019.
APÊNDICE A – CÓDIGO-FONTE MINIPAMULTIMETER.JS
"use strict";
var visir = visir || {};
visir.MinipaMultimeter = function(id, elem) {
//alert("O instrumento selecionado está em desenvolvimento, por favor selecione outro.");
var dmm = this;
this.range = 1; // escala selecionada no cursor. Diferente de _range, que configura o pxi-4072
this._elem = elem;
this._result = "";
this._resolution = "3.5";
this._cursor = "";
this._lastMode = "20kR";
visir.MinipaMultimeter.parent.constructor.apply(this, arguments) var imgbase = "instruments/minipamultimeter/";
if (visir.BaseLocation) imgbase = visir.BaseLocation + imgbase;
var tpl = '<div class="minipadmm">\
<img src="' + imgbase + 'minipa_main.png" width="243" height="400" draggable="false"
/>\
<div class="display">\
<div class="dmm_value" id="value">1. </div>\
<div class="mode">AC</div>\
<div class="signal">-</div>\
</div>\
<div class="rot">\
<div class="top vred">\
<img src="' + imgbase + 'minipa_knob.png" alt="handle" width="120"
height="120" />\
</div>\
</div>\
<div class="manual_link"><a
href="https://portal.if.usp.br/labdid/sites/portal.if.usp.br.labdid/files/ET- 2042D-1101-BR.pdf" target="_blank">%downloadManual%</a></div>\
</div>';
tpl = tpl.replace(/%downloadManual%/g, visir.Lang.GetMessage("down_man"));
elem.append(tpl);
dmm.SetCursor("20kR");
var top = elem.find(".top");
setRotation(top, 0);
var handle = elem.find(".rot");
function handleTurn(elem, deg) {
if (!visir.Config.Get("readOnly")) {
deg = ( deg - deg % 12 ) + 6;
if (deg <= 360 || deg >= 0) {
setRotation(top, deg);
var rotFuncMap = {246: "200R", 258: "2kR", 270: "20kR", 282: "200kR"
, 294: "2MR", 306: "200MR", 318: "200mVdc", 330:
"2Vdc", 342: "20Vdc", 354: "200Vdc", 6: "1000Vdc", 18: "750Vac", 30: "200Vac", 42: "20Vac", 54: "2Vac", 66: "test", 78: "20mIac", 90: "200mIac", 102:
"20Iac", 114: "20Idc", 126: "200mIdc", 138:
"20mIdc", 150: "celsius", 162:
"20nF", 174: "2uF", 186: "200uF", 198: "hfe", 210:
"200KHz", 222: "2KHz", 234: "diode"
};
var cursor = rotFuncMap[deg];
dmm.SetCursor(cursor);
dmm.UpdateDisplay();
return deg;
} }
return undefined; // don't set a new rotation }
handle.turnable({ offset: 90, turn: handleTurn }) dmm.UpdateDisplay();
}
extend(visir.MinipaMultimeter, visir.Multimeter) visir.MinipaMultimeter.prototype.Test = function() {}
visir.MinipaMultimeter.prototype.SetCursor = function(cursor) { this._cursor = cursor;
this._range = -1;
this._elem.find(".mode").toggle(false);
$('.mode, .signal').hide();
switch(this._cursor){
// "2kR", 270: "20kR", 282: "200kR" , 294: "2MR", 306: "200MR"
case "200R":
this.range = 200;
this.SetMode("resistance");
break;
case "2kR":
this.range = 2e3;
this.SetMode("resistance");
break;
case "20kR":
this.range = 20e3;
this.SetMode("resistance");
break;
case "200kR":
this.range = 200e3;
this.SetMode("resistance");
break;
case "2MR":
this.range = 2e6;
this.SetMode("resistance");
break;
case "200MR":
this.range = 200e6;
this.SetMode("resistance");
break;
case "200mVdc":
this.range = 2e-3;
this.SetMode("dc volts");
break;
case "2Vdc":
this.range = 2;
this.SetMode("dc volts");
break;
case "20Vdc":
this.range = 20;
this.SetMode("dc volts");
break;
case "200Vdc":
this.range = 200;
this.SetMode("dc volts");
break;
case "1000Vdc":
this.range = 1000;
this.SetMode("dc volts");
break;
case "2Vac":
this._elem.find(".mode").toggle(true);
$(".mode").show();
this.range = 2;
this.SetMode("ac volts");
break;
case "20Vac":
$(".mode").show();
this.range = 20;
this.SetMode("ac volts");
break;
case "200Vac":
this.range = 200;
$(".mode").show();
this.SetMode("ac volts");
break;
case "750Vac":
$(".mode").show();
this.range = 750;
this.SetMode("ac volts");
break;
case "test":
case "celsius":
this.SetMode("off");
break;
case "20mIdc":
this.range = 20e-3;
this.SetMode("dc current");
break;
case "200mIdc":
this.range = 200e-3;
this.SetMode("dc current");
break;
case "20Idc":
this.range = 20;
this.SetMode("dc current");
break;
case "20mIac":
$(".mode").show();
this.range = 20e-3;
this.SetMode("ac current");
break;
case "200mIac":
$(".mode").show();
this.range = 200e-3;
this.SetMode("ac current");
break;
case "20Iac":
$(".mode").show();
this.range = 20;
this.SetMode("ac current");
break;
case "20nF":
this._range = 100e-9;
this.range = 20e-9;
this.SetMode("capacitance");
break;
/* case "2uF":
this._range = 0.00001;
this.range = 2e-3;
this.SetMode("inductance");
break;
*/
case "2uF":
this._range = 0.00000001;
this.range = 2e-6;
this.SetMode("capacitance");
break;
case "200uF":
this._range = 0.000001;
this.range = 200e-6;
this.SetMode("capacitance");
break;
case "hfe":
this.SetMode("off");
break;
case "2KHz":
this.range = 2e3;
this.SetMode("frequency");
break;
case "200KHz":
this.range = 200e3;
this.SetMode("frequency");
break;
case "diode":
this._range = 1;
this.range = 1;
this.SetMode("diode");
break;
// end switch }
}
visir.MinipaMultimeter.prototype.UpdateDisplay = function() { this._elem.find(".display").toggle(true);
var out = this.formatResult();
if (isNaN(out)) { out = "1. ";
} else { }
if(this._cursor == "test" | this._cursor == "hfe" | this._cursor == "celsius"){
out = "000";
}
if(out == 0){
$(".signal").hide();
}
this._elem.find(".dmm_value").toggle(true).text(out);
}
visir.MinipaMultimeter.prototype.ReadResponse = function(response) { visir.MinipaMultimeter.parent.ReadResponse.apply(this, arguments) this.UpdateDisplay();
}
visir.MinipaMultimeter.prototype.formatResult = function(){
// ajusta o valor que será exibido no display var result = this.GetResult();
var range = this.range;
result = result.toPrecision(4);
if(this._lastMeasure != this._mode){
result = 0;
}
if(result < 0){
$(".signal").show();
} else{
$(".signal").hide();
}
result = Math.abs(result);
// Se o resultado for maior que a escala, exibe o valor "1.000"
if(result >= range) {
$(".signal").hide();
return "1. ";
}
switch(range){
case 1:
result *= 1000;
result = result.toFixed(0) + ".";
break;
case 200e6:
result /= 1e6;
result = result.toFixed(1);
break;
case 2e6:
result /= 1e6;
result = result.toFixed(3);
break;
case 200e3:
result /= 1000;
result = result.toFixed(1);
break;
case 20e3:
result /= 1000;
result = result.toFixed(2);
break;
case 2e3:
result /= 1000;
result = result.toFixed(3);
break;
case 1000:
result /= 1000;
result = result.toFixed(0) + ".";
break;
case 750: