sábado, 29 de setembro de 2012

Review Ethernet Shield com Wiznet W5100 / TF Slot

O Ethernet Shield utiliza o chip Wiznet W5100, que é confiável e tem como grande concorrente o Microchip ENC28J60. O bom do Ethernet Shield com Wiznet é que possui uma biblioteca bem difuncida no Arduino, alem disso ele funciona com todos microcontroladores.
Eu recomendo comprar no dealextreme, porque o preço está em promoção, esse shield geralmente é caro pois tem grande demanda, e o DX está com uma promoção muito boa para componentes eletrônicos e Arduino, mesmo que demore um pouco mais para receber, vale a pena fazer o pedido.

Visão Geral:


A placa é muito bem feita, possui próprio regulador de tensão, e os pinos do Arduino continuam acessíveis:

Ele funciona diretamente com a biblioteca oficial do Arduino e possui um slot para cartão micro-SD, que pode ser usado para armazenar arquivos, como uma pagina na web, ou até mesmo para fazer logs.
É compatível com o Arduino Duemilanove (168 ou 328), Uno,assim como Mega (1280/2560) e pode ser acessadausando a biblioteca SD.O W5100 Wiznet oferece suporte a TCP e UDP,e suporta até quatro conexões de soquete simultânea.

O que as luzes significam:


PWR: indica que a placa e shield são alimentados
LINK: indica a presença de um link de rede e pisca quando o escudo transmite ou recebe dados
FULLD: indica que a conexão de rede é full duplex
100M: indica a presença de uma ligação de rede 100 Mb / s (em vez de 10 Mb / s)
RX: pisca quando o shield recebe dados
TX: pisca quando o shield envia dados
COLL: pisca quando colisões de rede são detectados


O shield não é fornecido com o módulo PoE embutido, que é um componente separado que deve ser adicionada.
Arduino se comunica tanto com o W5100 e cartão SD utilizando o canal SPI (através do conector ICSP). Isto é em pinos digitais 11, 12, e 13 no Duemilanove e os pinos 50, 51, e 52 no Mega. Em ambas as placas, pinos 10 é utilizado para selecionar o W5100 e o pino 4 para o cartão SD. Estes pinos não pode ser usado como i/o. No Mega, o hardware SS pino, 53, não é usado para selecionar o W5100 ou o cartão SD, mas deve ser mantido como uma saída ou a interface SPI não irá funcionar.

Observe que, como o W5100 e SD usam barramento SPI, apenas um pode estar ativo de cada vez. Se você estiver usando ambos os periféricos em seu programa, deve se tomar cuidado de ligar e desligar os periféricos. Se você não está usando um dos periféricos em seu programa, no entanto, você precisa explicitamente desliga-lo. Para fazer isso com o cartão SD, definir pino 4 como uma saída e escrever como saída alta para ele. Para o W5100, definir pino digital 10 como uma saída alta.


Código de exemplo:


Esse código é bem simples, ele vai criar um servidor web sobre o IP do Ethernet Sheild, na porta 80. Nesse client você pode colocar todos tipos de informações, nesse casso ele esta mostrando uma frase, o codigo esta muito bem comentado e fácil de entender, so compilar e gravar.

#include <SPI.h>
#include <Ethernet.h>

byte mac[]= {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Aqui vc coloca seu MAC
byte ip[] =(192,168,0,120); // Aqui vc coloca um IP, varia de acordo com sua rede

EthernetServer server(80); // iniciando servidor na porta 80

void setup() 
  {
  Serial.begin(9600); // Abre comunicacao serial
  Ethernet.begin(mac, ip); // define seu mac e IP
  server.begin(); // inicia servidor
  Serial.print("server is at "); // imprime endereco IP na serial
  Serial.println(Ethernet.localIP());
}

void loop() 
{
  EthernetClient client = server.available(); // procura clients conectados
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (== '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println ("<center>");
           client.println ("<H1>DEALEXTREME ETHERNET</H1>");
          client.println ("</center>");
          client.println("</html>");
          break;
        }
        if (== '\n') {
          currentLineIsBlank = true;
        } 
        else if (!= '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
}

Vale lembrar que esses e outros exemplos podem ser encontrados na própria pagina do Arduino, e em meu blog.
Isso é o que vai aparecer quando você abrir o http:// SEU IP:80 


Essas são imagens do circuito funcionando:





Esse modulo é muito bom, vale a pena ter, pois eleva o nível dos seus projetos, é relativamente barato, e pode ser usado com todos microcontroladores. Fica na sua imaginação de como vai usar.
Lembrando que ele é 2 em 1 pois tem o cartão SD, que serve para varias outras aplicações. Vou deixar agora umas imagens com zoom, para mostrar como a qualidade das placas é boa:

Mostrando o chip wiznet, que pode esquentar um pouco, é normal:


Mostrando o conector RJ45, o botão de reset :


Slot de cartão SD, muito útil para paginas web grandes:



Os pinos são bem longos, assim ele não encosta no seu Arduino, prevenindo contra curto circuito:


É isso ai, até a próxima!!





Review Teclado Matricial 4x4 dealextreme

Olá todo mundo!

Hoje vamos falar de um teclado matricial 4x4, esse teclado é muito bom, cada tecla tem vida útil de cerca de 200,000 apertos!! Além disso possui letras, pode ser utilizado para milhares e milhares de projetos, alguns que vem na minha mente são proteção com senha, ou entrar com algum valor por exemplo em graus para mover um sevo motor.
De novo, use sua imaginação para utilizar esses items.

Ele pode ser comprado no dealextreme por um preço muito bom, existem outros sites na internet que vendem esse tipo de teclado, mas infelizmente a estrutura é muito frágil, alem disso não te dão muita segurança de receber em casa o seu produto.
Assim eu recomendo fazer a compra no DX, pois a entrega é garantida e eles sempre tem em estoque, e as peças são ótima qualidade.

Esse componente vem com 8cm de cabo, alem de cabo conector:



Como funciona:

Internamente esse é o desenho do circuito do teclado:


Para o firmware você deve fazer o microcontrolador colocar 1 em uma das colunas e 0 nas outras. Então você faz uma varredura linha a linha olhando se alguma delas possui nivel lógico 1. Passa para próxima coluna e faz novamente a varredura pelas linhas. Ao terminar a varredura de todas linhas e colunas você saberá qual tecla está sendo apertada (caso seja).Por exemplo: Caso voce coloque 1 na primeira coluna e 0 nas demais e na varredura de teclas a linha 3 apresente nivel lógico 1 e as demais linhas nivel lógico 0 significa que o usuário está apertando o número 7.


Tabela - Tecla e seu valor decimal e binário
Tecla
Valor Decimal
Valor Binário
Tecla
Valor Decimal
Valor Binário
Linha 1 / Coluna 1
0
0000
Linha 3 / Coluna 1
8
1000
Linha 1 / Coluna 2
1
0001
Linha 3 / Coluna 2
9
1001
Linha 1 / Coluna 3
2
0010
Linha 3 / Coluna 3
10
1010
Linha 1 / Coluna 4
3
0011
Linha 3 / Coluna 4
11
1011
Linha 2 / Coluna 1
4
0100
Linha 4 / Coluna 1
12
1100
Linha 2 / Coluna 2
5
0101
Linha 4 / Coluna 2
13
1101
Linha 2 / Coluna 3
6
0110
Linha 4 / Coluna 3
14
1110
Linha 2 / Coluna 4
7
0111
Linha 4 / Coluna 4
15
1111


No Arduino:

Vale lembrar que esse teclado pode ser utilizado em qualquer microcontrolador, nos vamos usar no Arduino pois ele já possui uma biblioteca pronta, que funciona muito bem. basta baixar o keypad.h e adicionar ao seu programa.

Programa de exemplo:

Esse programa mostra o funcionamento da biblioteca, nele você define como seu teclado é, quantas teclas, e qual letra/numero corresponde essa tecla, feito isso basta colocar quantas linhas e quantas colunas voce tem.
Assim toda hora que pressionar um botão, seu código vai ser enviado para porta serial em forma do digito pressionado. 


#include <Keypad.h>

const byte ROWS = 4; //quatro linhas
const byte COLS = 4; //quatro colunas
//define simbolos do teclado
char hexaKeys[ROWS][COLS] = 
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //ligar as linhas do teclado
byte colPins[COLS] = {6, 7, 8, 9};    //ligar as colunas do teclado

//inicie o NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup()
{
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey != NO_KEY)
  {
    Serial.println(customKey);
  }
}

Forma que os conectores devem ser ligados:


A membrana é muito fina:

Parte traseira da membrana:



O teclado pode ser facilmente modificado para se adequar em seu projeto:



Um outro uso muito bom para esse teclado, é utilizar a biblioteca password, nela você pode usar ele para abrir uma tranca por exemplo.


É isso ai, quem sabe no futuro falo mais desse teclado, quando ele estiver ligado em um projeto maior!




quinta-feira, 27 de setembro de 2012

Review Thumb Joystick Module + Towerpro MG995 Metal Servo

Olá!!

Esse review vai juntar dois items muito bons, que não podem faltar a ninguém, um deles é o Thumb Joystick do dealextreme, e o outro é o servo Towerpro MG955. Vamos aproveitar esse posta para comentar sobre os dois items a fundo, seu funcionamento, e um exemplo muito legal.
Ambos os items podem ser comprados no DX, com ótimos preços,  e qualidade muito boa.É dificil achar preço melhor em outros lugares da internet.

Sobre o Thumb Joystick:


Esse modulo pode ser usado em qualquer microcontrolador, ele é feito de dois potenciômetros, um para o eixo X e outro para o eixo Y, alem disso se você pressionar, ele possui um botão. Suas aplicações são infinitas, nesse exemplo eu vou fazer a leitura analógica dos potenciômetros, e depois de fazer essa leitura vou colocar esses valores no servo motor Towerpro MG955.

Imagens do Thumb Joystick:



Lateralmente:


A parte preta é removível, expondo seu circuito interno:


Por outros ângulos fica fácil de ver os potenciômetros:



Usando o Thumb Joystick:


Para usar é bem simples, como se trata de um potenciômetro variável, a primeira coisa que vamos fazer é ligar os pinos no microcontrolador, o pino GND tem que ser ligado ao terra, o pino +5V deve ser ligado a tensão, os pinos VRx e VRy devem ser ligados em canais analógicos, para fazer a leitura que varia entre 0 e 1023, sendo o minimo 0V e o máximo 5V.
Feita essa leitura voce pode jogar esses dados em uma outra variavel, nesse exemplo vai ser quantos graus o motor servo deve se mover, vai ficar mais tranquilo de entender quando eu postar o codigo. Mas primeiro vamos falar do servo motor.


O que é um Servo Motor:

Um servo motor é um dispositivo eletromecânico com características especiais que possibilitam o posicionamento preciso de um eixo em qualquer ângulo entre 0° e 180°. Geralmente possui alto torque devido às reduções por meio de engrenagens.

Onde é usado:

Nos mais variados ramos da mecânica e eletrônica, principalmente em indústrias, robôs e acionamentos controlados por computador. Em brinquedos também são muito usados, são modelos mais simples e menores, mas que possuem uma grande precisão e velocidade. 

Funcionamento:


Vou descrever o funcionamento do servo desde a leitura dos sinais elétricos até o posicionamento final. Vale lembrar que a cada 20ms (milissegundo) o servo faz a leitura do sinal no fio correspondente (signal).
Vamos imaginar um pequeno processador ligando e desligando uma saída de tensão de 5 volts durante um tempo de 1,5ms (ligado) e 18,5ms (desligado). 


Outra imagem que mostra todos pulsos:


Imagens do servo motor do DX:


Onde o fio vermelho é +5V, o fio marrom é GND e o fio amarelo é de dados.


O servo acompanha varias garras, que podem ser utilizadas de ferentes maneiras, vale lembrar que esse servo do dealextreme aguenta 25kfg


Vamos programar:

Esse código faz o seguinte, olha o valor do joystick, pega esse valor e mapeia entre 0 e 180, depois disso coloca esse valor em graus no microcontrolador, o programa esta bem comentado e fácil de entender:


#include <Servo.h>   // incluindo a biblioteca dos servos
Servo SRx; 
Servo SRy;

const int VRx = A0; 
const int VRy = A1; 

const int led  = 13;
const int botao = 2;

int sensorVRx = 0;       
int sensorVRy = 0; 
int outputVRx = 0;
int outputVRy = 0;

int estadoBotao = 0; 

long tempo_anterior      = 0;
long intervalo           = 100; //milisegundos
unsigned long tempo_atual;

void setup() 
{
  Serial.begin(9600); 
  SRx.attach(9);
  SRy.attach(10);
  pinMode(led,  OUTPUT);
  pinMode(botao, INPUT);
}

void loop() 
{
  tempo_atual = millis();// o tempo atual é igual ao tempo de funcionamento do uC   
  sensorVRx   = analogRead(VRx);   
  sensorVRy   = analogRead(VRy);   
  outputVRx   = map(sensorVRx, 0, 1023, 0, 180); 
  outputVRy   = map(sensorVRy, 0, 1023, 0, 180);   
  
  estadoBotao = digitalRead(botao);
  if(estadoBotao==HIGH)
    {
      digitalWrite(led,HIGH);
    }
    else 
      {
        digitalWrite(led,LOW);
      }
      
  if(tempo_atual - tempo_anterior > intervalo)// se o tempo atual menos o tempo anterior for maior que o intervalo com que eu quero fazer minha acao
    { 
      tempo_anterior = tempo_atual;//tempo anterior recebe o tempo atual 
      Serial.print(outputVRx);  
      Serial.print(",");
      Serial.print(outputVRy); 
      Serial.print(",");
      Serial.println("");
    }
  
  SRx.write(outputVRx);
  SRy.write(outputVRy);
  delay(2);                     
}

Rodando o código:








segunda-feira, 24 de setembro de 2012

Review Arduino GPRS Shield - EFCom SIM900

Introdução:

  O GPRS Shield - EFCom é muito compacto e confiável como modulo sem fio. Esse modulo GPRS Shield é compatível com todas placas Arduino. EFCom é baseado no SIM900 GPRS Module, que entrega GSM/GPRS 850/900/1800/1900MHz, com voz, MS, dados e Fax, em uma placa muito pequena e que consome pouca corrente. SIM900 é compatível com GSM/GPRS é toda feita em SMT e tem um poderoso chip processador integrado AMR926EJ-S,

   Essa placa pode ser comprada do dealextreme, por um preço muito bom, que é difícil de achar em outras lojas, a qualidade da placa é muito boa e durável. Tudo funciona assim que sai do pacote sem muitas configurações, a embalagem protege os pinos e a antena, todas placas são testadas.




O bom de comprar no DX, é porque as placas vem com a fonte de 2A, que é de extrema importância, pois quando estão fazendo chamas, recebendo SMS a corrente tem picos muito alto, e para o funcionamento perfeito o ideal é ter uma fonte de 9V e 1A, 9V pois quando esta no pico de funcionamento tem um dropout de 3V, assim não causa problemas no funcionamento do Arduino, que precisa de 5V.

O Shield é configurado e controlado via comandos AT. A placa é boa pois conta com bloco de jumpers que permitem selecionar em qual canal USART vai se comunicar com microcontrolador(D0-D3, para serial via hardware e software).
Outra coisa muito boa é a presença de um super capacitor para RTC, o real time clock pode funcionar por 1 dia sendo alimentado pelo super capacitor.
EFcom pode ser ligada usando o botão físico de S_PWR, assim como o pino digital D6 para ligar/desligar e o pino D5 para reset.


O que esta integrado:


  • Totalmente compatível com Arduino / Freaduino e Mega.
  • Porta serial livre de conexão, você pode selecionar a porta serial do hardware (D0/D1) controle ou Software porta serial (D2/D3) controlá-lo.
  • Fornecimento de energia Super capacitor para o RTC.
  • Quad-Band 850/900/1800/1900 MHz
  • GPRS multi-slot classe 10/8
  • GPRS Classe de estação móvel B
  • Controle através de comandos AT (GSM 07.07, 07.05 e EFCOM mais Comandos AT)
  • SIM Toolkit aplicação
  • Tensão: 3.1 4.8V ...
  • Baixo consumo de energia: 1,5 mA (modo sleep)
  • Temperatura de operação: -40 ° C a +85 ° C
  • Dimensão: 68.33x53.09mm (mesma dimensão do Arduino placa principal)

Antes de ligar:

  • Usar carregador 9V para o fornecimento de energia para o seu Arduino e EFCom, o carregador de 9V vem com shield comprado no dealextreme EFCom Shild. 
  • Verifique se o seu cartão SIM está desbloqueado.
  • A configuração padrão de fábrica para o GPRS UART é 19200 bps 8-N-1. (Pode ser alterado usando comandos AT).

Analisando a placa:

Zoom nos fones de ouvido e microfone(tem que usar headset), e o super capacitor para RTC:


Mostrando os pinos de USART que podem ser modificados:


SIM900, um dos mais poderosos no mercado:


Antena que acompanha compra no DX:




Bandeja de cartão SIM:


Status do led:

LEDStateFunction
StatusOffPower Off
OnPower On
NetlightOffSIM900 não esta funcionando
64ms On/800ms OffSIM900 não tem rede
64ms On/3000ms OffSIM900 tem rede
64ms On/300ms OffGPRS cmunicando

Codigos e Exemplos:

Conversando entre Computador > Arduino > SIM900 e voltando dados SI900 > Arduino > Computador:



#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
void setup() { mySerial.begin(19200); Serial.begin(19200); }   void loop() { if(Serial.available()) { mySerial.print((unsigned char)Serial.read()); } else if(mySerial.available()) { Serial.print((unsigned char)mySerial.read()); }   }

Com esse código você pode mandar todos comandos AT para seu SIM900, e receber a resposta, agora basta olhar a lista de todos comandos, e enviar um SMS, por exemplo:

void setup()
{
  Serial.begin(19200); 
  Serial.print("\r");
  delay(1000);                
  Serial.print("AT+CMGF=1\r");  
  delay(1000);
                         
  Serial.print("AT+CMGS=\"+NUMERO DE CELULAR\"\r");                                                                                         
  delay(1000);
  Serial.print("SIM900 and Arduino say Hi!\r"); 
  delay(1000);
  Serial.print(26,BYTE); 
}
 
void loop()
{
     
}

No próximo post, vou colocar códigos comentados, explicando tudo!!