domingo, 29 de janeiro de 2012

Termômetro Interno no Arduino

O pessoal da comunidade brasileira do Arduino descobriu na última semana que existe um termometro interno no ATMega328. O termometro pode ser iniciado através da programação abaixo:



long readTemp() {

  long result;
  // Read temperature sensor against 1.1V reference
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = (result - 125) * 1075;
  return result;
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println( readTemp(), DEC );
  delay(1000);
}


obs: O valor é dado em millis, 25000 equivale a 25 graus Celsius.

referencia:
http://code.google.com/p/tinkerit/wiki/SecretThermometer


Montando Shield SD Card

Ao analisar as conexão do SD Card shield percebi quer eram ligações bem simples. Navegando na internet encontrei um site onde o shield havia sido feito em casa em uma PCI convencional. Para monstar o shield em casa é necessário entender o funcionamento dos pinos do SD.


 A ligação padrão no Arduino geralmente é feita na forma da figura abaixo:



As saídas do Arduino funcionam em 5V, porém o SD funciona em 3V. Então o circuito do shield precisa conter alguns resistores que farão a divisão da tensão em um valor de corrente que seja apropriado.

Diagrama completo da placa e conexão:



Problemas com Tipo de Cartão SD

Ao efetuar testes do post anterior me deparei com uma falha no programa. O cartão era reconhecido mas não possuia a partição reconhecida.

Mensagem do SDHC:


Initializing SD card...Wiring is correct and a card is present.


Card type: SDHC
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card



O erro fez com que eu tivesse que pesquisar vários tipos de cartões.

A maioria dos dados podem ser retirados dos sites na internet.

http://pt.wikipedia.org/wiki/Secure_Digital_Card

http://tecnologia.terra.com.br/noticias/0,,OI3300281-EI15607,00-Conheca+os+diferentes+tipos+de+cartoes+de+memoria.html

http://cartaodememoria.com/

https://www.sdcard.org/home/

Depois que o cartão correto foi colocado o programa funcionou normalmente.

Mensagem no SD2 já com arquivo criado:


Initializing SD card...Wiring is correct and a card is present.


Card type: SD2


Volume type is FAT16


Volume size (bytes): 1966800896
Volume size (Kbytes): 1920704
Volume size (Mbytes): 1875


Files found on the card (name, date and size in bytes):
TEST.TXT      2012-01-25 16:04:04 98

Testes com SD Card no Arduino

Durante a última semana executei alguns testes com um Shield SD Card da Itead Studio versão 1.0.





Fornecedor: Itead Studio
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=18&products_id=232

Os pinos utilizados foram:

13- CLK
12- MISO
11- MOSI
10- CS

Nesta versão de shield o Chip Select se encontra no pino 10 portanto o Sketch teve seu programa alterado. No entanto, tudo funcionou perfeitamente. Foram feitos testes com Sketch SDCardInfo e ReadWrite.

Programa:
http://arduino.cc/en/Tutorial/CardInfo

O cartão utilizado foi um SD2, não fiz nenhum tipo de formatação e a leitura foi feita em FAT16.

O shield funciona perfeitamente com cartão SD2 convencional porém não funciona com o SDHC que possui adaptador com um micro cartão. Vou descrever o problema  no próximo post.

Técnicas de Download e Invasão

No post anterior eu dispus um link interessante com uma série de pastas, subpastas e arquivos para download. Porém existe um problema para o usuário comum. O problema é acessar cada pasta e salvar os arquivos com um clique do mouse levando em consideração que o número de pastas é muito grande. A solução computacional para isso está na plataforma Linux através do comando wget no terminal:

wget -r <url>

A recursividade nesse comando é indicada através do r minúsculo. Ou seja, todas as pastas e subpastas daquele endereço serão baixadas. Através desse comando é fácil baixar arquivos contendo links de pastas que podem incluir acesso a banco de dados. Depois do arquivo estar baixado basta dar uma vasculhada. Em sites como Wordpress e blogs convencionais os arquivos ficam sempre nos mesmos lugares, isso torna o acesso ainda mais fácil.

Eu não faço uso para invasão e isso constitui crime. Porém, tenho em mente que o conceito da palavra Hacker é desconstruir o funcionamento para construir novamente de forma diferente. Hacker não é quem invade e sim quem sabe como funciona e faz bom uso disso.

Antes de encerrar o post gostaria de lembrar que ainda existe um comando que determina o tamanho da pasta remota. E, além disso, o terminal do linux não deixar logs com dados de navegadores no site, até porque não é usado nenhum tipo de navegador nesse caso. O comando wget também é utilizado em robôs como mecanismos de busca dessa forma os robôs da Google que fazem a indexação dos sites.

sábado, 14 de janeiro de 2012

IR - Infrared no Arduino


Uma biblioteca sensacional do Arduino  é a <IRremote.h> para sinais Infra Red. Vou passar a dica geral para a transmissão e para recepção. Na transmissão, o código para envio é bem simples:


#include <IRremote.h>
IRsend irsend;

void setup()
{
  Serial.begin(9600);
}

void loop() {
  if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
      irsend.sendSony(0xa90, 12); // Sony TV power code
      delay(100);
    }
  }
}


Lógico, é necessário conectar o LED de transmissão.


Agora a parte da recepção do sinal. Para conectar o sensor de recebimento use o seguinte esquema:


Para o recebimento do sinal o código:


#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}


Agora a dica principal. Ao invés de construir um sistema de transmissão é possível usar qualquer tipo de controle remoto. Para isso é necessário saber que código o controle transmite. Agora o mais sensacional, pesquisando na internet encontrei um site onde é possível saber o código de transmissão de qualquer controle remoto e com isso montar um sistema de automação.

Os arquivos estão no site abaixo, sugiro o donwload antes que esses documentos saiam do ar! As pastas estão separadas por fabricante!
http://lirc.sourceforge.net/remotes/


Mais detalhes sobre a biblioteca IR
http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html


Mais sobre IR

http://rudrigolima.wordpress.com/2011/03/01/usando-controle-remoto-ir-para-acionamentos/