26 novembro 2014

Raspberry Pi : Instale o Raspbian e crie seu primeiro programa em Python

Raspberry Pi B+


Depois de falar sobre o que é o Raspberry e mostrar as diferenças entre o Raspberry B e o B+, chegou a hora de botar a mão na massa. Hoje vamos ver como ligar o Raspberry Pi B+ aos periféricos, e como instalar o Raspbian, o sistema operacional do Raspberry.

18 novembro 2014

Data e hora no Arduino com o RTC DS1302

Neste artigo vamos ver como extrair as informações de data e hora do módulo RTC DS1302, um módulo que funciona da mesma forma que o DS1307, mas possui algumas diferenças principalmente na parte de comunicação com o Arduino, já que o DS1307 usa I2C e o DS1302 usa comunicação com 3 fios.

Módulo RTC DS1302


O módulo é controlado pelo DS1302 ,um chip do tipo RTC (Real Time Clock, ou Relógio de Tempo Real), com funções de data, hora e calendário. Ele é capaz de fornecer as informações de horas, minutos, segundos, dia da semana, data, mês e ano, e ajusta automaticamente os dados referentes aos meses com menos de 31 dias e também anos bissextos.

Pinagem DS1302

Na imagem abaixo temos a pinagem do CI DS1302 (datasheet) e a função de cada pino :


CI RTC DS1302 - Pinagem

E abaixo a disposição do CI DS1302 no módulo, que na verdade não possui muitos componentes adicionais, apenas o cristal de 32.768 kHz e a bateria (CR2032) para manter a alimentação do chip em caso de falta de energia :


Módulo RTC DS1302 - Pinagem


O CI aceita alimentação de 2 à 5.5V, logo podemos ligar o módulo utilizando os pinos 3.3V ou 5V do Arduino.

Ligação módulo DS1302 ao Arduino

São utilizados três pinos para conexão ao Arduino : RST (Reset ou CE - Chip Enable), DATA (I/O) e CLK (ou SCLK / Serial Clock). Para testes vou alimentar o módulo com os 5V do Arduino :


Circuito Arduino Uno - DS1302


Como pinos de dados usamos os pinos 6, 7 e 8 do Arduino. Você pode escolher outros pinos do Arduino e mudar essa configuração nas linhas iniciais do programa.

Mostrando as informações de data e hora do DS1302

Existe um artigo no site oficial do Arduino, mostrando em detalhes como ler as informações do DS1302. Para quem gosta de entender como essa comunicação é feita, byte a byte, vale a pena dar uma olhada nessa página: http://playground.arduino.cc/Main/DS1302.

Para a maioria das aplicações esse código é bem extenso e não muito simples de entender, por isso o pessoal da Virtuabotix adaptou esse código e criou uma biblioteca chamada virtuabotixRTC (clique aqui para efetuar o download da biblioteca). Com ela fica muito fácil de extrair as informações do DS1302 e utilizá-las junto com outras funções do Arduino.

Note que no início do programa temos essa linha, que serve para determinar a data e hora atuais :

myRTC.setDS1302Time(<segundos>, <minutos>, <hora>, <dia da semana>, <dia do mês>, <mês>, <ano>)

Uma vez setada a data e a hora, a linha acima deve ser comentada e o programa novamente carregado no Arduino. 

Criei o programa abaixo baseado nos exemplos da biblioteca, e acrescentei a rotina que mostra o dia da semana por extenso :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// Programa : Data e hora com modulo RTC DS1302
// Alteracoes e adaptacoes : Arduino e Cia
//
// Baseado no programa original de Krodal e na biblioteca virtuabotixRTC

// Carrega a biblioteca virtuabotixRTC
#include <virtuabotixRTC.h>           

// Determina os pinos ligados ao modulo
// myRTC(clock, data, rst)
virtuabotixRTC myRTC(6, 7, 8);

void setup()  
{      
  Serial.begin(9600);
  // Informacoes iniciais de data e hora
  // Apos setar as informacoes, comente a linha abaixo
  // (segundos, minutos, hora, dia da semana, dia do mes, mes, ano)
  myRTC.setDS1302Time(00, 58, 23, 2, 17, 11, 2014);
}

void loop()  
{
  // Le as informacoes do CI
  myRTC.updateTime(); 

  // Imprime as informacoes no serial monitor
  Serial.print("Data : ");
  // Chama a rotina que imprime o dia da semana
  imprime_dia_da_semana(myRTC.dayofweek);
  Serial.print(", ");
  Serial.print(myRTC.dayofmonth);
  Serial.print("/");
  Serial.print(myRTC.month);
  Serial.print("/");
  Serial.print(myRTC.year);
  Serial.print("  ");
  Serial.print("Hora : ");
  // Adiciona um 0 caso o valor da hora seja <10
  if (myRTC.hours < 10)
  {
    Serial.print("0");
  }
  Serial.print(myRTC.hours);
  Serial.print(":");
  // Adiciona um 0 caso o valor dos minutos seja <10
  if (myRTC.minutes < 10)
  {
    Serial.print("0");
  }
  Serial.print(myRTC.minutes);
  Serial.print(":");
  // Adiciona um 0 caso o valor dos segundos seja <10
  if (myRTC.seconds < 10)
  {
    Serial.print("0");
  }
  Serial.println(myRTC.seconds);

  delay( 1000);
}

void imprime_dia_da_semana(int dia)
{
  switch (dia)
  {
    case 1:
    Serial.print("Domingo");
    break;
    case 2:
    Serial.print("Segunda");
    break;
    case 3:
    Serial.print("Terca");
    break;
    case 4:
    Serial.print("Quarta");
    break;
    case 5:
    Serial.print("Quinta");
    break;
    case 6:
    Serial.print("Sexta");
    break;
    case 7:
    Serial.print("Sabado");
    break;
  }
}

Esse programa envia as informações de data e hora para o serial monitor :

Data e hora DS1302 - Serial Monitor

Em um próximo artigo sobre o DS1302, vou utilizar esse módulo para montar um relógio utilizando display 7 segmentos. Até lá !


11 novembro 2014

Gravando dados do Arduino no cartão SD

Trabalhando com sensores, muitas vezes temos a necessidade de armazenar os dados para consulta posterior, em situações onde não podemos monitorar o circuito todo o tempo. Pode ser quando desejamos consultar a variação de temperatura de um ambiente ou então verificar quando um determinado alarme foi acionado.

Para casos assim podemos gravar os dados do Arduino em um cartão, utilizando o módulo cartão SD :

gravando dados no cartão SD Arduino

Antes de mais nada não se assuste com a quantidade de pinos. São 16, mas usamos apenas 6 para conexão ao Arduino. Olhando o módulo de frente, você pode  usar tanto os pinos da direita como os da esquerda, pois eles tem a mesma  função. Observe a imagem abaixo :


Módulo SD - Pinos

Com relação aos cartões SD, eu testei 3  modelos de cartão no módulo. Sem citar nomes, o cartão de "marca" não funcionou de jeito nenhum, enquanto os cartões genéricos funcionaram perfeitamente. Todos  foram formatados da mesma maneira, e testados com FAT e FAT32. O módulo funcionou com cartões pequenos, de 512 Mb, e também com cartões de maior capacidade, como os de 8 Gb.

Conectando o módulo cartão SD ao Arduino

O módulo SD se conecta ao Arduino utilizando a interface SPI (arduino.cc/en/Reference/SPI), utilizando no nosso exemplo os pinos 4, 11, 12 e 13. A alimentação do módulo é feita por meio do pino 5V  do Arduino.

Atenção com os pinos de sinal, pois eles trabalham com nível de sinal de 3.3V, de  maneira semelhante aos módulos bluetooth que eu já mostrei aqui no site. Utilize  a calculadora desse link  para calcular o valor dos resistores que você  vai utilizar para montar o divisor de tensão. Eu usei resistores de 220 e 330 ohms, que forneceram um  nível de sinal de aproximadamente 3V, suficiente para os testes :

SD Arduino



Gravando dados no cartão SD

No circuito acima eu liguei um push-button à porta digital 3 para demonstrar como os dados são gravados no cartão SD. A cada toque no botão, um contador é incrementado e esse valor é gravado no cartão com o seguinte formato :

Contador : <valor>

O programa utiliza a biblioteca SD, que já está embutida na IDE do Arduino. No inicio do programa é feito um pequeno teste para verificar se as conexões estão corretas e se o cartão SD está sendo reconhecido. Caso esteja tudo ok, um loop verifica se o botão foi pressionado e em caso afirmativo, grava esse dado no cartão SD junto com o valor atual do contador :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Programa : Teste escrita cartao SD
// Autor : Arduino e Cia
// Baseado no arquivo exemplo da biblioteca SD

// Carrega a biblioteca SD
#include <SD.h>

Sd2Card SDcard;
SdVolume volume;

// Pino do Arduino conectado ao pino CS do modulo
const int chipSelect = 4;  
// Pino do Arduino conectado ao push-button
int pinobotao = 3;
int contador = 0;

void setup()
{
  // Define o pino do push-button como entrada
  pinMode(pinobotao, INPUT);
  Serial.begin(9600);
  //Inicia a comunicacao com o modulo SD
  if (!SD.begin(chipSelect)) 
  {
    Serial.println("Falha ao acessar o cartao !");
    Serial.println("Verifique o cartao/conexoes e reinicie o Arduino...");
    return;
  }
  Serial.println("Cartao iniciado corretamente !");
  Serial.println("Aguardando acionamento do push-button...");
  Serial.println();
}

void loop() 
{
  int valor = digitalRead(pinobotao);
  // Verifica se o push-button foi acionado
  if (valor == 1)
  {
    // Delay caso o botão continue pressionado
    while(digitalRead(pinobotao) == 1)
    {
      delay(100);
    }
    // Incrementa o contador e envia os dados para o
    // Serial monitor
    contador=contador++;
    Serial.print("Botao pressionado. Contador : ");
    Serial.println(contador);
  
    // Abre o arquivo arquivo.txt do cartao SD
    File dataFile = SD.open("arquivo.txt", FILE_WRITE);
    // Grava os dados no arquivo
    if (dataFile) 
    {
      dataFile.print("Contador : ");
      dataFile.println(contador);
      dataFile.close();
    }  
    else 
    {
      // Mensagem de erro caso ocorra algum problema
      // na abertura do arquivo
      Serial.println("Erro ao abrir arquivo.txt !");
    } 
  }
}

Após pressionar o push-button algumas vezes, coloque o cartão SD no seu computador, e abra o arquivo ARQUIVO.TXT. Você terá um arquivo nesse formato :

Arquivo cartão SD

07 novembro 2014

Livro Arduino - Primeiros Passos com Sensores

Gosta de livros ? E livros de Arduino ? E livros de Arduino com desconto ? Melhor ainda, né ? :-)

A Novatec acaba de lançar um livro para o público que curte Arduino e Raspberry. É o Primeiros Passos com Sensores , dos autores Kimmo Karvinen e Tero Karvinen.

Eu já estou com o meu e posso afirmar que tem muita coisa interessante, tanto para quem está começando agora, como para quem já tem um pouco mais de experiência com sensores.

Primeiros Passos com Sensores - Novatec
 
Mas antes de falar do livro, vou falar do desconto : entre no site da Novatec, clique em COMPRAR e utilize esse código da promoção :

 ARDUINOCIA 

Aproveite, o desconto é de 20%. :-)

Falando agora do principal, o livro. Ele aborda vários tipos de sensores como sensores de luz, interruptores, sensores de efeito hall, infravermelho, temporizadores, sensor de proximidade, pressão, temperatura, ultrassom, etc.

Tudo bem explicado, com exemplos divididos em 4 capítulos e 20 projetos, com a descrição, detalhes de funcionamento e material necessário, além de apêndices sobre Arduino e Raspberry.

06 novembro 2014

Cooler com Arduino e pastilha termoelétrica TEC1-12706

Vamos montar um pequeno cooler para manter a água gelada utilizando Arduino ? Isso é possível com o uso da pastilha termoelétrica TEC1-12706, que vamos utilizar nesse artigo :

Pastilha Termoelétrica TEC1-12706

Essa pastilha usa o Efeito Peltier para gerar temperaturas muito baixas (muitas vezes abaixo de 0), em um lado da pastilha, e temperaturas muito altas do outro lado. Essa pastilha é usada frequentemente em bebedouros , mini coolers ou então pode ser utilizada para refrigeração de CPU´s, ideal para quem gosta de um overclock. ;-)

A imagem abaixo ilustra o funcionamento da pastilha, com os seus pares de elementos semicondutores tipo P e N. Na pastilha TEC1-12706 temos 127 pares de elementos, responsáveis por gerar a diferença de temperatura entre os dois lados do componente :

Efeito Peltier
Imagem : Wikipedia

Uma das características dessa pastilha é esquentar de maneira muito rápida. Em poucos segundos um dos lados fica bem quente, e nesse lado é necessário um dissipador de calor para que as temperaturas não entrem em equilíbrio e anulem o efeito da pastilha. A ausência do dissipador pode até mesmo danificá-la.

Nos meus testes eu utilizei um dissipador de calor retirado de uma CPU, e uma fonte de computador para alimentação, já que a pastilha apresentou melhores resultados quando alimentada com 12v.

Não recomendo ligar a pastilha diretamente no Arduino, pois ele não vai fornecer a corrente necessária para esquentar/esfriar a pastilha. Verifique o datasheet da TEC1-12706 para se certificar dos níveis de tensão e corrente suportados. Nos meus testes a pastilha começou a esfriar à partir de 1A  (mais um motivo para não utilizar diretamente os 5v do Arduino). Opte por uma fonte de alimentação externa, de no mínimo 12V e 2 A.

Ok, e o que podemos fazer se a pastilha não funciona diretamente com o Arduino ?

Podemos utilizar o Arduino como um auxiliar para ligar e desligar a alimentação da pastilha, adaptando um sensor de temperatura que vai acionar a pastilha quando a temperatura chegar à um valor X, e desligar a alimentação quando a temperatura diminuir e chegar à um valor Y, formando assim um "cooler".

Para isso, eu utilizei um circuito composto pelo Arduino Uno, um sensor de temperatura LM35 e um relé de 2 canais (utilizando apenas um dos relés) :


Circuito Arduino - Pastilha termoelétrica



Fixei o LM35 em um recipiente com água e montei o meu cooler conforme a imagem abaixo. Não gostei muito do resultado com o LM35, já que o tipo de encapsulamento do sensor não ajuda na hora de monitorar a temperatura, Talvez o circuito fique melhor com um DS18B20, o DHT11 ou algum outro sensor de temperatura.

Estrutura cooler com pastilha termoelétrica

O programa abaixo monitora a temperatura do sensor (porta analógica A0) e aciona o Relé 1 (ligado à porta digital 4) caso a temperatura esteja abaixo daquela determinada na variável TEMP_MAX. Caso a temperatura chegue ao mesmo valor da variável TEMP_MIN, o relé é desligado. Os resultados também são enviados para o serial monitor, mostrando a temperatura atual, e o estado do relé :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Programa : Cooler com pastilha termoeletrica TEC1-12706
// Autor : Arduino e Cia

int pin = A0; // Pino analogico para ligacao do LM35
int pinorele = 4; //Pino digital ligado ao rele (IN1)

int TEMP_MAX = 20; // Temperatura maxima - liga a pastilha
int TEMP_MIN = 10; // Temperatura minima - desliga a pastilha

String estadopastilha;

// Variavel que armazenam a temperatura em Celsius
int tempc = 0; 
int samples[8]; // Array para precisão na medição

int i;

void setup()
{
  Serial.begin(9600);     
  pinMode(pinorele, OUTPUT);
}

void loop()
{
  // Loop que faz a leitura da temperatura 8 vezes
  for(i = 0;i<=7;i++)
  { 
    samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
    // A cada leitura, incrementa o valor da variavel tempc
    tempc = tempc + samples[i]; 
    delay(100);
  }
  // Divide a variavel tempc por 8, para obter precisão na medição
  tempc = tempc/8.0; 
  
  // Se a temperatura estiver acima de TEMP_MAX, aciona a pastilha
  if(tempc >= TEMP_MAX) 
  {
    digitalWrite(pinorele, LOW);
    estadopastilha = "Acionada";
  }

  // Se a temperatura estiver abaixo de TEMP_MIN, desliga a pastilha
  if(tempc <= TEMP_MIN) 
  {
    digitalWrite(pinorele, HIGH);
    estadopastilha = "Desligada";
  }
  Serial.print("Temperatura : ");
  Serial.print(tempc,DEC);
  Serial.print(" Cels. - Pastilha : ");
  Serial.println(estadopastilha);

  tempc = 0;
  delay(1000); // Aguarda 1 segundo e reinicia o processo
}

Obviamente esse circuito não pode ser considerado um cooler "profissional", ainda precisa de muitos ajustes e algumas adaptações (um potenciômetro para regular a faixa de temperatura seria uma boa idéia), mas pode servir como base para o seu projeto utilizando a pastilha termoelétrica.