Gráficos TFT:Gráficos de história ao vivo
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
Visão geral
Você já quis representar graficamente seus dados profissionalmente em um LCD TFT? Mas há um problema, é particularmente difícil criar um gráfico por causa de todos os cálculos envolvidos.
Este projeto tem como objetivo tirar todo esse estresse de seus ombros e permitir que você crie seu próprio gráfico de histórico personalizado, fazendo um gráfico de tudo o que você quiser em apenas alguns segundos. Tudo que você precisa fazer é editar 5 variáveis.
Vídeo
Imagem
Funcionalidade
Este projeto visa tornar a representação gráfica fácil e divertida para todos, todos os cálculos difíceis estão concluídos, tudo o que o usuário precisa fazer é editar 2 variáveis e escolher a cor do seu gráfico. Aqui estão alguns exemplos que mostram a diversidade do gráfico.
O gráfico traçará a temperatura ao vivo, em intervalos de 6 segundos, o valor será exibido por um ponto, o ponto será conectado a outros pontos por uma linha. Os segundos que passaram desde o início do código serão exibidos no eixo x com o intervalo dos valores no eixo y.
O projeto funciona de forma simples, o Arduino Mega lê o valor do sensor DHT 11 e armazena a temperatura em uma variável, depois representa o valor no gráfico customizado. Aqui está um diagrama que ilustra a visão geral da funcionalidade.
Aqui está uma imagem que mostra a visão geral do código do projeto.
-
Leitura de temperatura
vai ler a temperatura do sensor
-
Dados do processo
irá processar a leitura do sensor e mapeá-la para o gráfico.
-
Dados do gráfico
exibirá os valores mapeados no gráfico.
Tudo que você precisa saber para prosseguir com este projeto é um amplo entendimento de como as coisas estão posicionadas no LCD TFT, isso é explicado abaixo.
Refiro-me a todo o LCD como a tela, é aqui que tudo é desenhado, todas as bibliotecas TFT LCD funcionam de forma bastante semelhante, portanto, as funções neste código também devem funcionar com outras bibliotecas. Abaixo está o esboço de um quadrilátero (um retângulo) sendo desenhado em um LCD TFT.
Neste esboço, um retângulo é desenhado, cada ponto é rotulado, a linha de código que é usada para desenhar um retângulo é esta,
tft.fillRect (originX, originY, sizeX, sizeY, Color);
-
originX
é representado por 'z' no diagrama acima, esta é a distância da direita da tela até a forma.
-
originY
é representado por 'x' no esboço, esta é a distância do topo da tela até a forma.
-
sizeX
é o tamanho da forma no eixo x, este é o comprimento da forma.
-
sizeY
é o tamanho da forma no eixo y, esta é a altura da forma.
Benefícios
O usuário operando isto projeto irá benefício Em:
- Gráfico de dados do sensor em um LCD TFT
- Faça isso em segundos
Construindo o projeto
Etapa 1: Obrigatório Aparelho
Este projeto está usando um sensor de temperatura e umidade DHT 11 para receber os dados de temperatura, mas qualquer sensor pode ser usado, a troca do sensor será explicada mais adiante.
- 1, Arduino Mega
- 1, Elegoo 2.8 'TFT LCD
- 1, sensor DHT 11
- 1, breadboard
- Fios de jumpers
Etapa 2: Conectando o Circuito
Aqui estão os esquemas para o projeto, basta conectar o sensor DHT 11 ao Arduino Mega e pronto.
Etapa 3:Reconhecendo o Código
Existem 3 partes principais no código:
- Configurar gráfico
- Leitura da temperatura
- Desenhar gráfico
Essas seções são explicadas a seguir.
- Configurar gráfico
// desenha o título tft.setCursor (10, 10); // define o cursor tft.setTextColor (BLUE); // define a cor do texto tft.setTextSize (4); // define o tamanho do texto tft.println (graphName); // desenha o contorno tft.drawLine (originX, originY, (originX + sizeX), originY, graphColor); tft.drawLine (originX, originY, originX, (originY - sizeY), graphColor); // desenhar rótulos para (int i =0; i
Esta parte do código desenhará o contorno do gráfico, desenhará as linhas dos eixos xey, também desenhará as marcas e rotulará o eixo y com valores.
- Ler Temperatura
chk =DHT.read11 (22); temp =(temperatura DHT);
Esta linha curta de código lerá a temperatura do sensor DHT 11 e a armazenará em uma variável.
- Desenhar Gráfico
if (blockPos <8) {// imprime o tempo tft.setCursor ((mark [valuePos] - 5), (originY + 16)); tft.setTextColor (graphColor, WHITE); tft.setTextSize (1); tft.println (timeBlock [valuePos]); // mapeia o valor locationBlock [valuePos] =map (temp, 0, graphRange, originY, (originY - sizeY)); // desenhar ponto tft.fillRect ((mark [valuePos] - 1), (locationBlock [valuePos] - 1), markSize, markSize, pointColor); // tente conectar ao ponto anterior if (valuePos! =0) {tft.drawLine (mark [valuePos], locationBlock [valuePos], mark [(valuePos - 1)], locationBlock [(valuePos - 1)], lineColor); } blockPos ++; } else {// limpar a tela do gráfico tft.fillRect ((originX + 2), (originY - sizeY), sizeX, sizeY, WHITE); // mapeia o valor - ponto atual locationBlock [valuePos] =map (temp, 0, graphRange, originY, (originY - sizeY)); // ponto de desenho - ponto atual tft.fillRect ((mark [7]), (locationBlock [valuePos] - 1), markSize, markSize, pointColor); // desenha todos os pontos para (int i =0; i <8; i ++) {tft.fillRect ((mark [(blockPos - (i + 1))] - 1), (locationBlock [(valuePos - i)] - 1), markSize, markSize, pointColor); } // desenhe todas as linhas para (int i =0; i <7; i ++) {tft.drawLine (mark [blockPos - (i + 1)], locationBlock [valuePos - i], mark [blockPos - (i + 2)], locationBlock [valuePos - (i + 1)], lineColor); } // alterar as tabelas de tempo para (int i =0; i <=8; i ++) {tft.setCursor ((mark [(blockPos - i)] - 5), (originY + 16)); tft.setTextColor (graphColor, WHITE); tft.setTextSize (1); tft.println (timeBlock [valuePos - i]); }} valuePos ++;
Esta parte longa do código irá desenhar os pontos do gráfico em seus valores e então irá juntá-los através de linhas, o código verifica se a tela do gráfico está preenchida, se estiver, ele começará a ejetar o primeiro valor do gráfico e movendo os outros para cima para permitir espaço para o novo valor a ser inserido, se ainda houver espaço, o dispositivo continuará adicionando valores em intervalos.
Personalização do gráfico
O engraçado deste gráfico é que ele é 100% editável, então o usuário pode editar o tamanho do gráfico, sua localização e sua cor, o usuário também pode exibir quaisquer dados no gráfico graças à sua flexibilidade. São são todas as variáveis com as quais você deve se preocupar.
bool proDebug =0; uint16_t graphColor =BLUE; uint16_t pointColor =BLACK; uint16_t lineColor =GREEN; String graphName ="Gráfico de tempo"; int graphRange =50; int markSize =3;
-
proDebug
é o utilitário de depuração embutido no projeto, ele é definido como 0 como padrão, quando definido como 1 / verdadeiro, ele imprimirá a temperatura atual no Monitor Serial, este é um utilitário de depuração, observe que se ativado, o Monitor Serial é deve ser aberto para que o código seja executado.
-
graphColor
define a cor do gráfico, as linhas xey e seus rótulos são definidos com esta cor.
-
pointColour
representa a cor do ponto ilustrando o valor no gráfico.
-
lineColour
define a cor da linha que une os pontos no gráfico à cor selecionada.
-
graphRange
é a espinha dorsal do gráfico, note que é muito importante que seja definido corretamente, ele representa o valor máximo que pode ser representado graficamente, estou usando um sensor de temperatura, não esperaria que o valor ultrapassasse 50ºC, então eu defino o valor para 50, se você quiser representar graficamente uma entrada analógica bruta, você pode definir o graphRange para 1024, o valor máximo que um pino analógico pode exibir.
-
markSize
representa o tamanho do ponto que identifica o valor do sensor no gráfico, o valor representa o comprimento do quadrado.
E é isso, é tudo com que você precisa se preocupar, o restante das variáveis serão descobertas automaticamente pelo Arduino.
Mudança o Valor
É bom representar graficamente a temperatura da sua sala, mas é ainda melhor se você puder exibir os dados do sensor no gráfico, e você pode, apenas editando algumas linhas de código, você pode representar graficamente quaisquer dados da umidade do solo à luz intensidade. Aqui está um guia para fazer isso.
Indo Além
Você pode fazer mais experimentos com o projeto, tentar editar as constantes originX, originY, sizeX e sizeY para dar ao seu gráfico um tamanho e posição diferentes na tela. Existe um arquivo de cabeçalho anexado ao esboço principal, ele contém os códigos de cores de algumas cores, tente alterar a cor do gráfico e das barras. E é isso, seu gráfico personalizado está pronto.
Bibliotecas
- Bibliotecas Elegoo - Copyright (c) 2012 Adafruit Industries sob a licença BSD.
- DHT - Autor Rob Tillaart, esta biblioteca é de domínio público
Antecedentes
Publiquei recentemente um projeto que representa graficamente 1, 2, 3 ou 4 valores em um gráfico de barras. Decidi publicar outro modelo para gráficos. Não há modelos para gráficos de barras que não tenham linhas em todo o lugar ameaçando confundir, então decidi fazer as contas novamente e publicar um projeto simples que permite a todos criar um gráfico de seus dados em um gráfico histórico, ao vivo.
Código
TFTHistoryGraph
Todo o CódigoEsquemas
schematics_g5pey3GWqv.fzzProcesso de manufatura