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.

5 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
  3. Bom dia. Eu estou precisando de efetuar duas medições: uma medição com um sensor indutivo NPN 6-36 e outra medição com uma célula de carga.

    Teria algum exemplo para inserir as duas variáveis no display?

    Obrigado

    ResponderExcluir
    Respostas
    1. Oi José,

      Infelizmente não tenho (ainda). Que tipo de célula de carga vc está usando?

      Abraço!

      Adilson

      Excluir