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:
3 Comentários
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
ResponderExcluiresta reconhecendo vc pode me ajudar ?????
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
ResponderExcluirFernando, segui sua receita , carrega o programa normalmente, e funciona!, mas se eu desligar, quando eu religo o código desapareceu e nada funciona.
ResponderExcluirPse help!