banner

Ir para o Forum

ATTINY – O Menor Arduino do Mundo



Mais um vídeo sobre Arduino, pessoal. E, desta vez, não o maior, mas o MENOR Arduino do mundo: Attiny85! Vamos preparar a IDE do Arduino para trabalhar com o módulo Attiny85 da Digispark e implementar um monitor de temperatura e umidade com a possibilidade de um gatilho ajustável. Nossa montagem é bem simples: temos o velho conhecido DHT22; o Attiny85, um chip que consegue ser menor que o regulador de tensão SMD; e um display i2c oled.


Quero deixar claro que escolhi o módulo Attiny85 da Digispark porque achei ele mais fácil de ser manuseado, mas, se você quiser programar somente o chip Attiny, tudo bem, mas você vai precisar de um conversor USB serial.


Demonstração

Veja no vídeo uma demonstração do circuito em funcionamento.




Recursos usados


  • Um módulo Attiny85 da Digispark
  • Um módulo DHT22
  • Um potenciômetro de 10k
  • Um display OLED 0,96” 128x64 I2C
  • Um resistor de 10k
  • Jumpers para conexão
  • Um protoboard
  • Uma fonte de 5V


Pinagem Digispark Attiny85


Do lado direito ele tem seis pinos:
D5/A0
D4/A2/PWM4/USB-
D3/A3/USB+
D2/A1/SCK/SCL
D1/PWM1/MISO
D0/PWM0/MOSI/SDA/AREF



Circuito

A montagem é bastante simples. Basta seguir as ligações da imagem que não tem erro.



Preparando o Ambiente - Instalando driver’s

Esse Arduino não é como o Uno, que espetou já está funcionando. No caso do Attiny, você precisa instalar algumas coisas.


Para versões da IDE Arduino superiores a 1.6.6 devemos baixar e instalar o driver manualmente usando o link:
https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip
- Executar “install drivers.exe” em sistemas de 32 bits
- Executar “DPinst64.exe” em sistemas de 64 bits



Preparando o ambiente – Instalando placas Digispark

Na IDE, selecione o menu Arquivo -> Preferências.


No campo de URLs adicionais, inclua o caminho abaixo e clique em OK para confirmar.
Se já houver outro caminho, separe por uma vírgula.


Selecione o menu Ferramentas -> Placas -> Gerenciador de Placas.
No Gerenciador de Placas, em tipo, selecione Contribuído.
No campo de filtro, digite Digistump AVR.
Selecione Digistump AVR Boards e instale.


Ao completar a instalação, selecione novamente o menu Ferramentas -> Placas e procure por Digispark (Default – 16.5mhz).


Para fazer o Upload do código-fonte, NÃO CONECTE O DIGISPARK ATTINY85 até ser solicitado.


Simplesmente clique no botão de Upload e, somente ao receber a mensagem, conecte-o à USB.
Mais detalhes sobre o conexão do Digispark no link:




Preparando o ambiente – Biblioteca DHT22

Devido a pouca memória disponível, nem toda biblioteca Arduino poderá ser utilizada. Daremos preferência para aquelas otimizadas para o menor uso de memória. Para o DHT22, utilizaremos DHT-Master.
Para instalar, selecione Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas.


No Gerenciador de Bibliotecas, digite no campo de filtro DHT-master.
Selecione e instale


Para instalar a biblioteca do display, repita os passos anteriores e no campo de filtro digite DigisparkOLED.
Selecione e instale.




Código-fonte – Includes, objetos e pinos

Começamos o nosso programa incluindo as bibliotecas. Definimos o objeto que representa o sensor DHT e as constantes que representam os pinos.

//Inclusão das bibliotecas
#include <DigisparkOLED.h>
#include <Wire.h>
#include <DHT.h>

DHT dht; //objeto que representa o sensor DHT

//Constantes que representam os pinos
const int pinoLed = 1;
const int pinoAjuste = 3;
const int pinoDHT = 4;



Código-fonte – Setup()

Iniciamos o display, ajustamos o pino para leitura do DHT, bem como o pino do Led como saída.  Ajustamos ainda o pino para leitura e ajuste, além do pino de saída para baixo.

void setup() {
  oled.begin(); //inicia o display

  dht.setup(pinoDHT); // ajusta o pino para leitura do DHT

  pinMode(pinoLed, OUTPUT); //ajusta o pino do Led como saída (atuador)
  pinMode(pinoAjuste, INPUT); //ajusta o pino para leitura e ajuste

  digitalWrite(pinoLed, LOW); //Ajusta o pino de saída para baixo
}


Código-fonte – Loop() – Obtendo valores de temperatura e umidade

No Loop, aguardamos o tempo mínimo entre leituras do DHT e limpamos o display. Lemos a umidade e a temperatura do sensor.
Para reduzir o uso de memória, a biblioteca DHT-master retorna os valores de temperatura e umidade como inteiros de três dígitos, sendo o dígito menos significativo a primeira casa decimal após a vírgula. Por exemplo: uma temperatura de 27,5ºC seria retornada como o inteiro 275.
Para simplificar, dividimos as medidas de temperatura e umidade por dez, eliminando o valor após a vírgula. Mas, um tratamento que a inclua não seria difícil de ser implementado, caso uma precisão maior seja requerida.

void loop() {

  delay(dht.getMinimumSamplingPeriod()); //Aguarda o tempo mínimo entre leituras do DHT

  oled.clear(); //Limpa o display

  int humidity = (dht.getHumidity()) / 10; //lê a umidade do sensor
  int temperature = (dht.getTemperature()) / 10; //Lê a temperatura



Código-fonte – Loop() – Obtendo o valor de ajuste

Nesta etapa do Loop, obtemos o valor de ajuste, lendo a entrada do conversor analógico-digital onde o potenciômetro está conectado.
A medida deve variar entre 0 e 1023. Para a faixa de nosso exemplo decidimos converter para uma faixa entre 10 e 51º C aproximadamente.
Para isso, dividimos o valor lido por 25 e ao resultado acrescentamos 10.

/* Lê o potênciometro para determinar a temperatura de ajuste
    e ajusta para a faixa de 10 a 51 graus Celsius aproximadamente
    se leitura = 0    ==> (0/25)+10 = 10
    se leitura = 1023 ==> (1023/25)+10 = 51
  */
  //Variável que armazena o valor de ajuste convertido para temperatura
  int ajuste = (analogRead(pinoAjuste) / 25) + 10;




Código-fonte – Loop() – Lógica de controle

Aqui introduzimos nossa lógica de controle bastante simples.
Se a temperatura lida for maior ou igual ao valor de ajuste, o pino 1, onde o led interno está conectado mudará para Alto, caso contrário será ajustado para Baixo.

//Aqui implementams a lógica de controle
  if (temperature >= ajuste) { //Se a temperatura for maior que o ajuste
    digitalWrite(pinoLed, HIGH); //Ativamos o pino 1 (acende o led)
  }
  else {
    digitalWrite(pinoLed, LOW); //desativamos o pino 1 (desligamos o led)
  }


Código-fonte – Loop() – Exibição do cabeçalho e tempo de operação

A macro F(), introduzida dentro dos prints faz com que as strings sejam gravadas na área de memória Flash e, não, RAM.
Como o tempo de operação utiliza-se da função millis(), este deve sofrer um estouro depois de 52 dias aproximadamente.

oled.setFont(FONT6X8); //Ajusta a fonte do display
  oled.println(F(" - MONITOR - ")); //usa a função F() para armazenar a string na flash e emite para o display
  oled.println(F("")); //salta uma linha

  //mostra o tempo de opereção do monitor
  oled.print(F("Operando a: "));
  oled.print(millis() / 1000);
  oled.println(F(" s"));


Código-fonte – Loop() – Exibindo a temperatura e umidade


//Exibe a temperatura
  oled.print(F("Temperatura: "));
  oled.print(temperature);
  oled.println(F(" C"));

  //Exibe a umidade
  oled.print(F("Umidade: "));
  oled.print(humidity);
  oled.println(F(" %"));


Código-fonte – Loop() – Exibindo um separador e o valor de ajuste


//Exibe um separador
  oled.println(F("____________________"));
  oled.println(F(""));

  //Exibe o valor de ajuste
  oled.print(F("Ajuste: "));
  oled.print(ajuste);
  oled.println(F(" C"));
}


Display OLED

Aqui temos a imagem do monitor funcionando, ou seja, com um exemplo de todos os dados que serão exibidos por ele.



Alguns cuidados ao utilizar o Digispark Attinny85


O módulo não possui as várias proteções que as placas arduino normalmente possuem, então cuidado com curtos e sobretensões. Eles podem danificar o módulo ou até mesmo a USB.
Usamos a biblioteca Wire padrão, mas há versões otimizadas da mesma.
Ao fazer o upload, pode ser necessário deixar algumas portas do módulo desconectadas do circuito, onde serão aplicadas, principalmente, as utilizadas pela USB.



Faça o download dos arquivos:




2 comentários:

  1. ola muito bom o video, eu instalei o drive do (ATTINY 85) mas não esta funcionando o Windows 10 de 32 e 64b não
    esta reconhecendo vc pode me ajudar ?????

    ResponderExcluir
  2. ola fernando tudo bom? gostaria de aprender a como escrever no display 128x32 oled como posicionar palavras grandes e pequenas nas fontes 1 2 e 4 superior direito etc... desde ja agradeço

    ResponderExcluir

Tecnologia do Blogger.