Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

sexta-feira, 26 de abril de 2013

Ethernet break

Outro dia o companheiro de SJC Hacker Clube Duyle gentilmente me emprestou um breakboard Ethernet para eu fazer uns testes de acesso à internet pelo Arduino. A minha ideia era criar um client internet para acessar um webservice feito em C# que eu criei e publiquei na nuvem.
Acontece que eu não consegui de jeito nenhum encontrar como fazer um client usando essa lib. Então, para não perder um embalo, criei um serviço no Arduino para informar a temperatura ambiente do meu quarto via browser.

É muito fácil de fazer.



Esse é o break. De um lado a conexão RJ45 para ligar o "fio azul" (vindo do seu roteador), do outro os pinos para conexão ao Arduino.

A pinagem é essa:



E a conexão com o Arduino é essa:

ENC28J60 Module
  Arduino      Due/UNO
Arduino Mega
VCC
3V3
3V3
RESET
RESET
RESET
ENC-INT
2
2
GND
GND
GND
SCK
13
52
MISO
12
50
MOSI
11
CS
10
53





Para medir a temperatura usei um termsistor como sensor, ligado no jeito clássico, como divisor de tensão, assim:



No caso, são sei de quanto é o meu termistor, mas coloquei um resistor de 1k e funcionou. Aqui uma foto do circuito montado:


Abaixo o circuito do termômetro. A pecinha com a extremidade preta espetada na placa é o termistor.



O código, como é de praxe nesse blog, está publicado abaixo. Foi feito com base no código demo que vem com a própria biblioteca.Aliás, são duas, clique para fazer o download: etherShield.h e ETHER_28J60.h

#include "etherShield.h"
#include "ETHER_28J60.h"

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};   
// Esse código deve ser único dentro da sua rede.
// A menos que vc tenha mais de uma placa dessa na 
// sua rede, esse valor deve servir.
                                                           
static uint8_t ip[4] = {192, 168, 0, 15};     
// Endereço IP a ser usado para a sua placa.
// Este depende de como a sua rede estiver conectada.
// Descubra o IP da sua máquina e use um parecido, com 
// diferença no último número.

static uint16_t port = 80;
// O padrão é 80

ETHER_28J60 ethernet;

#define sensorPort 0

// Essa função lê a temperatura
int GetTemp()
{
  int sensorValue=analogRead(sensorPort);
  return map(sensorValue,150,174,20,36);   
}

void setup()
{ 
  ethernet.setup(mac, ip, port);
  Serial.begin(9600);
}

void loop()
{
  // Quando houver alguma solicitação de serviço...
  if (ethernet.serviceRequest())
  {
    // monta uma pagina com a temperatura corrente.
    ethernet.print("<H1>Monitoramento de Temperatura no Escrit&oacuterio</H1>");
    ethernet.print("<H2>No momento a temperatura aqui &eacute de ");
    ethernet.print(GetTemp());
    ethernet.print(" &degC</H2>");
    ethernet.respond();
  }
}

Aqui os resultados: ao acessar o "site" com o endereço correspondente, no meu caso: http://192.168.0.15/.

Esse é o resultado obtido:

Ao aquecer o termistor um pouco com o dedo, nova leitura:
É isso. É mole ou não é?
Se alguém souber me dar a dica sobre como fazer o client...