Utilizando Monitor Serial Gráfico do Arduino
Olá, tudo bem? Hoje vamos conhecer uma função da IDE do Arduino muito interessante. Estou falando sobre o monitor serial gráfico do Arduino. Bastante utilizado para representar os dados enviados para a serial do Arduino de uma forma gráfica. Então, você quer saber como utilizar essa função? Continue aqui comigo!
Por que utilizar o Monitor Serial Gráfico do Arduino?
A resposta dessa pergunta pode ser o fato que de existem programas os quais precisam necessariamente de uma interface, seja ela gráfica ou não, para poder saber o que está acontecendo naquele exato momento.
Em outras palavras, seria o resultado do monitoramento de um sensor. Contudo, nem sempre é possível adicionar um display ao projeto.
Isso porque o display dá um trabalho adicional de ser implementado no código e no circuito além de representar um custo a mais. Por esse motivo, a utilização do monitor serial se torna mais viável nos casos mais simples de análise de variação de algum sensor.
Então, no projeto de hoje onde vamos representar a leitura do sensor de umidade, o monitor serial gráfico será importante, ele mostrará de uma forma mais clara e direta, visualmente falando, os dados lidos pelo sensor e, isso pode nos auxiliar na correção de bugs.
Funcionamento do Projeto
O funcionamento desse projeto será bastante simples, pois iremos trabalhar apenas com o sensor de umidade e temperatura DHT11 (ainda não tem o seu sensor? Relaxa, clicando nesse link você vai poder adquirir o seu, aproveite!) e o monitor serial gráfico.
Na verdade, os componentes e o circuito já foram apresentados no blog, basta entrar no post sobre o sensor de umidade e temperatura DHT11:
Mas resumindo, a ideia de hoje vai ser de pegar os valores lidos pelo sensor e transformar isso em algo gráfico. No caso seria a plotagem de um gráfico que varia no tempo, mostrando a oscilação da leitura feita pelo sensor.
Componentes Utilizados
- 1x Arduino de sua preferência
- 1x DHT11 Sensor de Umidade e Temperatura
- 1x Resistor de 10K
- 1x Protoboard
- Alguns Jumper’s
Montagem do Circuito
A seguir está a ligação do nosso projeto de hoje. Primeiramente, é importante que você desligue o cabo USB do seu Arduino e realize as ligações com ele desligado, combinado? Depois é só ligar novamente!

Fonte: AutoCore Robótica
Código do Projeto Comentado
Para o código que vamos utilizar hoje, é necessário que você tenha instalado em seu computador a biblioteca do sensor DHT11. Isso porque facilita na hora de criar o código pois ele já vem com algumas funções bem fáceis de utilizar. Então basta clicar na imagem abaixo e descompactar o arquivo, renomeando para “DHT” e copiando a pasta para as “libraries” do seu Arduino.
Depois de realizar a instalação da biblioteca, basta abrir a sua IDE do Arduino e copiar o seguinte código:
/*
Projeto: Utilização do Monitor Serial Gráfico
Autor: Danilo Nogueira - AutoCore Robótica
Data: 23/09/2018
Domínio Público.
*/
#include <idDHT11.h>
int idDHT11pino = 2; //Porta Digital do Arduino onde o pino do sinal do sensor DHT esta conectado
int idDHT11intNumber = 0; //Número da interrupção respectiva à porta definida
void dht11_wrapper(); // Declaração da funcão de controle da interrupção.
void loopDHT(); // Atualiza a leitura do sensor
idDHT11 DHT11(idDHT11pin, idDHT11intNumber, dht11_wrapper); //Instanciação do Objeto de Controle do Sensor
void setup()
{
// Iniciando a serial com velocidade de 9600
Serial.begin(9600);
Serial.println("Inicio do Programa");
}
//Variaveis utilizadas para calcular as temperaturas do Sensor DHT11
float temperaturaC;
float umidade;
void loop()
{
loopDHT(); // Função que atualiza o sensor
// Aqui estamos mostrando na serial as temperaturas calculadas
Serial.print("Temperatura Celcius: ");
Serial.println( temperaturaC );
delay(100);
Serial.print("Umidade Relativa: ");
Serial.println( umidade );
delay(100);
Serial.println();
}
void dht11_wrapper() {
DHT11.isrCallback();
}
void loopDHT(){ // Função que vai calcular as temperaturas
#define tempoLeitura 1000
static unsigned long delayLeitura = millis() + tempoLeitura + 1;
static bool request = false;
if ((millis() - delayLeitura) > tempoLeitura) {
if (!request) {
DHT11.acquire();
request = true;
}
}
if (request && !DHT11.acquiring()) {
request = false;
int result = DHT11.getStatus();
// Caso ocorra algum erro ele será escrito na serial
switch (result)
{
case IDDHTLIB_OK:
Serial.println("Leitura OK");
break;
case IDDHTLIB_ERROR_CHECKSUM:
Serial.println("Erro\n\r\tErro Checksum");
break;
case IDDHTLIB_ERROR_ISR_TIMEOUT:
Serial.println("Erro\n\r\tISR Time out");
break;
case IDDHTLIB_ERROR_RESPONSE_TIMEOUT:
Serial.println("Erro\n\r\tResponse time out");
break;
case IDDHTLIB_ERROR_DATA_TIMEOUT:
Serial.println("Erro\n\r\tData time out erro");
break;
case IDDHTLIB_ERROR_ACQUIRING:
Serial.println("Erro\n\r\tAcquiring");
break;
case IDDHTLIB_ERROR_DELTA:
Serial.println("Erro\n\r\tDelta time to small");
break;
case IDDHTLIB_ERROR_NOTSTARTED:
Serial.println("Erro\n\r\tNao iniciado");
break;
default:
Serial.println("Erro Desconhecido");
break;
}
// Aqui vamos armazenar o valor das temperaturas na variáveis para mostrar o loop
float valor = DHT11.getCelsius();
if (!isnan(valor)) {
temperaturaC = valor;
}
valor = DHT11.getHumidity();
if (!isnan(valor)) {
umidade = valor;
}
delayLeitura = millis();
}
}
Ativando o Monitor Serial Gráfico do Arduino
Agora que vem a mágica! Após realizar o upload do código, verifica se os dados do sensor estão sendo mostrados no monitor serial e caso esteja, basta entrar em “Ferramentas -> Plotter Serial”, ou apenas clicando ao mesmo tempo as teclas “Ctrl + Shift + L”. Como mostra a imagem a seguir:

Fonte: AutoCore Robótica
Resultado do Projeto
Por fim, deixo para você um vídeo do nosso canal no Youtube, onde mostro o resultado do projeto em funcionamento. Caso tenha ficado alguma dúvida não hesite em mandar mensagem combinado?
Mas e ai? Gostou? Caso tenha ficado algo incompleto para você, comenta abaixo
Dicas? Dúvidas?
Idéias de post?
Críticas?
Só comentar também!
Forte abraço!


Como passar o gráfico que está no Serial Monitor para um display gráfico?
Olá Gustavo, isso é uma ótima ideia para futuros post! 😉
Mas respondendo a sua pergunta, o display gráfico é como uma folha de papel em branco, onde você vai utilizar os comandos da biblioteca para desenhar!
Assim, pesquisando na documentação [link abaixo] você pode encontrar o comando “drawLine”, o qual é configurado da seguinte forma:
u8g.drawLine(x1, y1, x2, y2);
Basicamente, imagine que o gráfico vai iniciar em (0,0), depois o sensor fez uma leitura de 55 e depois 40. Dessa forma, você escreve:
u8g.drawLine(0, 0, 10, 55);
u8g.drawLine(10, 55, 20, 40);
Observe que eu coloquei um intervalo de 10 no eixo X, e então fazemos isso até percorrer o display inteiro (64), quando acabar, limpamos ele e começamos do (0,0) novamente! Ficou claro?
Link da Biblioteca (u8glib): https://github.com/olikraus/u8glib/wiki/userreference#drawline
Abraços!