19 dezembro 2017

Digispark com DHT11 e Display LCD 16x2 I2C

À pouco tempo atrás, publicamos um post mostrando como conectar um display oled na Digispark Attiny85. O post de hoje vai ser um post no estilo "2 em 1": vamos mostrar como usar a Digispark com display LCD 16x2 I2C, e também como mostrar nesse display as informações de temperatura e umidade usando um sensor de temperatura DHT11.

Digispark com DHT11 e Display LCD 16x2 I2C

O uso do display LCD 16x2 I2C com a Digispark permite mostrar de maneira simples informações como temperatura, contadores e mensagens de aviso sem grandes recursos gráficos, consequentemente economizando a memória do microcontrolador.

Conexão do DHT11 e LCD 16x2 I2C


Para conectar o sensor e o display na Digispark, vamos rever a pinagem do módulo, observando que vamos precisar da interface I2C (destacada em verde na imagem abaixo), que está nos pinos D0 (SDA) e D2 (SCL) para conectar o display LCD 16x2 I2C:

Pinagem Digispark ATtiny85

Já o sensor de temperatura e umidade DHT11 será conectado na porta digital 1 (D1).

Usaremos uma mini protoboard para realizar as conexões, e o nosso circuito fica assim:

Circuito Digispark ATtiny85 DHT11 e LCD 16x2 I2C

Você pode usar tanto a Digispark com conector micro USB quanto o modelo que você liga direto na porta USB. O esquema de conexão é o mesmo.

Programa Digispark com DHT11 e display LCD 16x2 I2C


Para usar a Digispark com o display LCD 16x2 I2C, vamos usar a biblioteca TinyWireM. Essa biblioteca é instalada quando você adiciona a Digispark na IDE do Arduino (para ver como usar a Digispark ATtiny85 com a IDE, instalação de drivers e exemplo básico, acesse este post). 

O DHT11 será usado com a biblioteca TinyDHT, uma biblioteca otimizada pra uso com esse tipo de microcontrolador e está disponível para download neste link. Descompacte a pasta TinyDHT e coloque-a dentro da pasta LIBRARIES da IDE do Arduino.

A leitura da temperatura e umidade é feita à cada 5 segundos. Não se esqueça de desconectar a Digispark do seu computador ao compilar o programa, reconectando-a quando solicitado pela IDE (Plug in Device Now, ou Conecte o dispositivo agora):

Aviso de conexão do dispositivo

Vamos então ao programa, lembrando que você deve colocar, na linha 16, o endereço I2C do display que vc está usando (os endereços mais comuns são 0x27 e 0x3F):

 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
//Programa: Digispark com DHT11 e display LCD 16x2 I2C
//Autor: Arduino e Cia

//I2C Master lib para ATTiny
#include <TinyWireM.h>
#include <LiquidCrystal_I2C.h>
#include <TinyDHT.h>

//Define o tipo do sensor DHT
#define DHTTYPE DHT11

//Sensor conectado no pino 1 Digispark
#define DHTPIN 1

//Endereco I2C do display LCD 16x2
#define END_DISP     0x27

DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal_I2C lcd(END_DISP, 16, 2);

void setup()
{
  //Inicializa a biblioteca I2C
  TinyWireM.begin();
  //Inicializa o LCD
  lcd.init();
  //Inicializa o DHT22
  dht.begin();
  lcd.backlight();
}

void loop()
{
  //Leitura da umidade
  int8_t h = dht.readHumidity();
  //Leitura da temperatura: Use 0 para
  //Celsius, 1 para Fahrenheit
  int16_t t = dht.readTemperature(0);

  //Verifica se o sensor esta respondendo
  if ( t == BAD_TEMP || h == BAD_HUM )
  {
    lcd.clear();
    lcd.print("Erro sensor!");
  }
  else
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp.:    C");
    lcd.setCursor(7, 0);
    lcd.print(t);
    lcd.setCursor(0, 1);
    lcd.print("Umid.:    %");
    lcd.setCursor(7, 1);
    lcd.print(h);
  }
  delay(5000);
}

Após o carregamento, aguarde alguns segundos e a sua Digispark irá mostrar as informações de temperatura e umidade no display.

3 comentários:

  1. Beleza estamos chegando cada vez mais na miniaturização pouco espaço e mais funcionalidades e economia de energia bem como economiza de processador

    ResponderExcluir
  2. tem como fazer com o sensor DS18B20, com sonda?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Tem sim, dê uma olhada neste tutorial, por favor: https://digistump.com/wiki/digispark/tutorials/temp

      Abraço!

      Adilson

      Excluir