Jeffrey Cross
Jeffrey Cross

COMO - Fazer um "medidor de dados Net"

Voltímetro antigo exibe a qualidade do ar atual da web - Por Tom Igoe…

Uma coisa que me decepciona em relação aos computadores é o pouco caráter que possuem. Instrumentos antigos de exibição de informações, como relógios de pêndulo vitorianos, barômetros e bússolas, e os mecanismos de cálculo de Babbage, têm uma presença que os computadores modernos não têm.

Eu cubro o visual do iPod tanto quanto o próximo, mas mesmo o melhor design de fabricação hoje não combina com o antigo amor artesanal de latão e madeira. Widgets de desktop substituem a necessidade de relógios, barômetros e cotações de ações, e hardware de exibição multiuso como o Ambient Orb também executam essas funções. Mas como essas coisas têm pouca presença e são facilmente reconfiguradas, é fácil esquecer quais informações elas estão exibindo. Será que o mergulho repentino do medidor significa que meus estoques do Google despencaram ou que vai chover amanhã?

Muitos geeks, inclusive eu, resistem a essa tendência, colecionando fanaticamente instrumentos antigos por razões estéticas. Eu tenho brincado com instrumentos antigos para exibir dados de novas fontes. Eu tenho alguns lindos voltímetros de madeira e amperímetros do início do século XX, que resgatei do lixo do departamento de física da minha universidade. Eles funcionam muito bem, mas não são tão portáteis quanto o multímetro atual, então eu não os estava usando, o que é uma tragédia para instrumentos tão orgulhosos e funcionais. Então, decidi pegar uma sugestão da Ambient Devices (ambientdevices.com) e transformar uma delas em um monitor de qualidade do ar.

Primeiro, eu inventei o sistema básico. O medidor que usei é um voltímetro analógico que varia de 0 a 3V CC. Esse é um bom intervalo para controlar a partir de um microcontrolador, então decidi usar meu módulo microcontrolador atual favorito, o Arduino (arduino.cc). Montar uma estação de monitoramento da qualidade do ar parecia mais trabalho do que eu queria, mas felizmente os dados das áreas locais dos Estados Unidos estão disponíveis on-line.

AirNow (airnow.gov) é um site interagências que reporta o Índice de Qualidade do Ar (AQI) de estações de monitoramento locais em todo o país. Eu conectaria o microcontrolador à Internet usando um módulo Lantronix serial-para-Ethernet (lantronix.com), depois extrairia os dados da página da AirNow para minha cidade, New York City.

Modulação de Largura de Pulso

O layout do sistema fazia sentido (Figura A), mas o microcontrolador precisava enviar uma tensão variável para o medidor e os microcontroladores não conseguiam emitir tensões analógicas. Eles podem, no entanto, gerar uma série de pulsos de ativação e desativação muito rápidos que podem ser filtrados para fornecer uma tensão média. Quanto maior a relação de tempo ligado e desligado em cada pulso, maior a tensão média (Figura B). Essa técnica é chamada modulação por largura de pulso (PWM).

Para que um sinal PWM apareça como um sinal analógico, o dispositivo que recebe os pulsos tem que reagir mais lentamente que a taxa de pulso. Por exemplo, a largura de pulso pode modular um efeito de escurecimento de um LED porque o olho humano não consegue detectar transições on-off mais rapidamente do que cerca de 30Hz.

Voltímetros analógicos demoram a reagir à mudança de voltagem, então o PWM também funcionará bem para o nosso monitor antigo. Para acionar o medidor, eu conectaria seu terminal positivo a um pino de saída do microcontrolador e seu pino negativo ao terra. Então eu poderia controlar sua leitura pela largura de pulso modulando o pino de saída do micro.

Escala 1: 1

O mostrador do medidor indica de 0 a 150, e o AQI vai de 0 a 500. Mas a EPA considera o ar que mede 150 como “insalubre para todos os indivíduos”, então decidi ajustar meu medidor para mostrar o AQI bruto, sem qualquer escala. Se eu ver a agulha presa no alto, eu sei que não deveria respirar.

Analisando a página AirNow

O próximo passo foi obter os dados do site da AirNow de alguma forma que o microcontrolador pudesse ler. O microcontrolador pode ler facilmente em strings curtas e converter o ASCII em binário, mas seria difícil analisar todo o texto em uma página da Web e encontrar a string correta. Então eu decidi escrever um programa no meu próprio servidor que iria analisar a página do AirNow, extrair apenas a leitura atual do AQI para Nova York e salvá-lo em algum lugar onde o microcontrolador pudesse lê-lo. O microcontrolador poderia, então, solicitar uma conexão TCP via conversor serial-para-Ethernet e ler os dados.

A página da AirNow é bem formatada para extrair os dados (Figura C). O número AQI é mostrado claramente no texto, e se você remover todas as tags HTML da fonte da página, ele sempre aparecerá em uma linha sozinha seguindo a linha “AQI observado em hh: mm AM / PM:”. Eu escrevi um pequeno script PHP para ler a página, remover o HTML e encontrar essas duas linhas. Quando isso acontecia, ele retornava o valor AQI por si mesmo da seguinte forma:

< AQI: 43>

No meu servidor, uma tarefa cron executa o script PHP periodicamente e grava o valor retornado em um arquivo que é acessível via HTTP (Hypertext Transport Protocol).

Interface Serial-para-Ethernet

O próximo passo foi conectar o microcontrolador ao conversor serial-Ethernet e depois à rede. Eu usei o dispositivo Xport da Lantronix, o que facilita. Como outros dispositivos Lantronix, o Xport tem uma pilha TCP / IP e interfaces simples de web e telnet incorporadas no lado da Ethernet. No lado serial, ele usa o mesmo protocolo serial TTL que a maioria dos microcontroladores, incluindo o Arduino, então conectá-los significa simplesmente conectar a linha de transmissão do micro à linha de recepção do conversor e vice-versa (Figura E). Eu usei um Xport para este projeto porque eu tinha uma placa de circuito impresso para ele, mas se você é novato nesses dispositivos, você pode querer começar com o Lantronix Micro. O Micro possui um conector mais simples e pode ser conectado a uma placa de ensaio sem solda com um conector IDE e um cabo de fita.

Antes de poder conectar o dispositivo Lantronix à rede, você deve configurá-lo. Lantronix tem um utilitário de configuração para download para o Windows, DeviceInstaller. Para usuários que não são usuários do Windows, eu tenho alguns programas que farão o trabalho (um para Java, um para Processing) disponível on-line em makezine.com/11/diycircuits_meter.

Em uma rede com DHCP habilitado, os dispositivos Lantronix obterão um endereço automaticamente. Depois de saber o endereço do dispositivo, você pode fazer um telnet para configurar as configurações de porta serial e de rede. Aqui estão as configurações que usei para este projeto:

*** Parâmetros básicos IP addr 192.168.0.23, gateway 192.168.0.1, máscara de rede 255.255.255.000 (8 bits) *** Canal 1 Baudrate 9600, Modo I / F 4C, Fluxo 00 Porta 10001 IP remoto Adr: --- nenhum ---, Port 00000 Modo de conexão: D4 Modo de desconexão: 00 Modo de descarga: 00

Comunicações e Código

O microcontrolador, em seguida, se conecta a um servidor web, enviando o dispositivo Lantronix uma seqüência de conexão que especifica o endereço numérico do servidor e o número da porta:

C204.15.193.131 / 80

Uma vez que uma conexão é feita, o dispositivo Lantronix retorna um “C” para confirmar. Depois disso, todos os dados enviados em qualquer direção passam diretamente entre o microcontrolador e o servidor, como por meio de uma conexão de porta serial.

O código completo do Arduino para o meu microcontrolador está online em makezine.com/11/diycircuits_meter. Ele se conecta à rede com um método como este:

void xportConnect () {// envia o endereço do servidor e // espera por um byte "C" para voltar. // preencha o endereço numérico do seu servidor abaixo: Serial.print ("C204.193.131 / 80"); status = conectando; }

Em seguida, aguarda o dispositivo Lantronix retornar com um "C":

if (status == connecting) {// lê a porta serial: if (Serial.available ()) {inByte = Serial.read (); if (inByte == 67) {// 'C' em status ascii = conectado; }}}

Uma vez conectado, envia uma solicitação HTTP assim:

void httpRequest () {// Fazer requisição HTTP GET. Preencha o caminho para sua versão // do script CGI: Serial.print ("GET / ~ myaccount / scraper.php HTTP / 1.1n"); // Preencha o nome do seu servidor: Serial.print ("HOST: www.myserver.comnn"); status = solicitando; }

E o servidor responde:

HTTP / 1.1 200 OK Data: Sex, 14 Abr 2006 21:31:37 GMT Servidor: Apache / 2.0.52 (Red Hat) Duração do conteúdo: 10 Conexão: close Tipo de conteúdo: text / html; charset = UTF-8 <AQI: 65>

Quando você chama esse script PHP de um navegador, não vê os itens do cabeçalho na parte superior porque o navegador remove para você. No programa Arduino, tirei o cabeçalho ignorando todos os bytes antes do sinal <. Então peguei apenas os caracteres numéricos da string restante, convertei-os para um valor binário e tive meu valor de Índice de Qualidade do Ar.

O passo final foi a largura de pulso modular o medidor. Isso é simples no Arduino, usando o comando de gravação analógica:

void setMeter (int desiredValue) {int airQualityValue = 0; // se o valor não atrelar o medidor, convertê-lo // para a escala do medidor e enviá-lo para fora: if (desiredValue <= meterScale) {airQualityValue = desiredValue * meterMax / meterScale; gravação analógica (meterPin, airQualityValue); }}

Das Blinkenlights

Como toque final, adicionei LEDs a 4 das saídas digitais do Arduino para poder monitorar o progresso da conexão. Os LEDs pendurados nos pinos de E / S digitais do Arduino 6–9 indicam o status Disconnected, Connected, Connecting e Request, respectivamente.

Isso é tudo que existe para isso! O único passo restante é construir uma base falsa para o medidor que hospeda os componentes eletrônicos. Uma vez feito isso, você tem uma maneira atraente de rastrear a qualidade do ar local e colocou um instrumento bem-feito de volta ao serviço útil.


Tom Igoe ensina computação física e desenvolvimento de tecnologia sustentável no Interactive Telecommunications Program (ITP) da NYU. Ele espera um dia trabalhar com macacos.


Referências:

Faça: Arduino Starter Kit Arduino Introdução ao Arduino

http://airnow.gov

http://ambientdevices.com

http://arduino.cc

http://lantronix.com

https://makezine.com/11/diycircuits_meter

http://itp.nyu.edu/itp/


De MAKE 11 - Página 133. Para obter MAKE, assine ou compre volumes únicos.

Ação

Deixar Um Comentário