Controle Básico de um LCD 16x2

O novo componente neste projeto é, obviamente, o LCD. Um display de cristal líquido funciona utilizando as propriedades de modulação da luz nos cristais líquidos. O display é formado de pixels, cada um preenchido com cristais líquidos. Esses pixels são dispostos à frente de uma fonte de luz traseira ou de um refletor. Os cristais são posicionados em camadas imprensadas entre filtros polarizadores. Os dois painéis polarizadores são alinhados a 90 graus um do outro, o que bloqueia a luz. O primeiro filtro polarizador polarizará as ondas de luz de modo que elas avancem apenas em uma orientação. O segundo filtro, estando a 90 graus do primeiro, bloqueará a luz. Em outras palavras, imagine que o filtro é composto de fendas muito finas, que correm em uma direção. A luz polarizada percorrerá essas fendas na mesma orientação, mas quando atingir o segundo filtro, com fendas que avançam na outra direção, ela não passará. Aplicando uma corrente às linhas e colunas das camadas, podemos alterar a orientação dos cristais e fazer com que eles se alinhem de acordo com o campo elétrico. Isso faz com que a luz gire (twist) 90 graus, permitindo que passe pelo segundo filtro. Por isso, alguns displays são referidos como “Super-Twist”. 
O LCD é composto de uma grade de pixels, organizados em grades menores que formam os caracteres. Um LCD típico de 16 x 2 terá 16 grades de caracteres em duas linhas. Cada grade de caracteres é composta de 5 pixels de largura e 8 pixels de altura. Se você aumentar muito o contraste de seu display, os 32 arrays de 5 x 8 pixels se tornarão visíveis.  Neste projeto será necessário incluir a biblioteca LiquidCrystal.h.
Agora, vamos colocar na prática criando um display de temperatura.
Componentes:
  • 01 Arduino
  • 01 01 LCD 16 x 2
  • 01 Potenciômetro de 10KΩ
  • 01 Sensor de temperatura analógico LM 35
  • 01 Push Button 
Faça a conexão dos fios conforme figura abaixo:

Controle Básico de um LCD 16x2


 Verifique a sua fiação e carregue o código:


  1 
  2  // Projeto Indicação da Temperatura na Tela LCD 16 x 2
  3 
  4  // Este programa indica as temperaturas nas escalas Celsius, Fahrenheit e Kelvin
  5 
  6 
  7  #include <LiquidCrystal.h> // Inicializa a biblioteca com os números dos pinos de interface
  8 
  9  LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Cria um objeto lcd e atribui os pinos
 10 
 11  int maxC = 0, minC=100, maxF = 32, minF = 212, maxK = 273, minK = 373; // Para registro das máximas e mínimas
 12  int escala = 0;   // Variável que permite a mudança das escalas.
 13  int buttonPin=8;
 14 
 15  // Protótipos das funções das escalas de temperatura
 16  void celsius(int sensor);
 17  void fahrenheit(int sensor);
 18  void kelvin(int sensor);
 19 
 20  void setup()
 21  {
 22      lcd.begin(16, 2); // Define o display com 16 colunas e 2 linhas
 23      analogReference(INTERNAL1V1 );
 24      pinMode(buttonPin, INPUT);
 25      lcd.clear();
 26  }
 27 
 28  void loop()
 29  {
 30      lcd.setCursor(0,0); // Define o cursor na posição de início
 31      int sensor = analogRead(0); // Lê a temperatura do sensor
 32      int buttonState = digitalRead(buttonPin); // Verifica se o botão foi pressionado
 33 
 34      switch (buttonState) // Altera o estado da escala, caso tenha sido pressionado
 35      {
 36      case HIGH:
 37          escala = escala + 1;
 38          lcd.clear();
 39 
 40          if (escala == 3)
 41          {
 42              escala = 0;
 43          }
 44      }
 45 
 46      delay(250);
 47 
 48      switch (escala) // Decide por escala em Celsius ou Fahrenheit
 49      {
 50      case 0:
 51          celsius(sensor);
 52          break;
 53 
 54      case 1:
 55          fahrenheit(sensor);
 56          break;
 57 
 58      case 2:
 59          kelvin(sensor);
 60          break;
 61      }
 62 
 63 
 64 
 65  }
 66 
 67  void celsius(int sensor)
 68  {
 69      lcd.setCursor(0,0);
 70      lcd.print("Temp=");
 71      int temp = sensor * 0.09765625; // Converte para Celsius
 72      lcd.print(temp);
 73      lcd.write(B11011111);
 74      lcd.print("C ");
 75 
 76      if (temp > maxC)
 77      {
 78          maxC = temp;
 79      }
 80 
 81      if (temp < minC)
 82      {
 83          minC = temp;
 84      }
 85 
 86      lcd.setCursor(0,1);
 87      lcd.print("Mx=");
 88      lcd.print(maxC);
 89      lcd.write(B11011111);
 90      lcd.print("C Mn=");
 91      lcd.print(minC);
 92      lcd.write(B11011111);
 93      lcd.print("C ");
 94  }
 95 
 96  void fahrenheit(int sensor)
 97  {
 98      lcd.setCursor(0,0);
 99      lcd.print("Temp=");
100      float temp = ((sensor * 0.09765625) * 1.8)+32; // Converte para Fahrenheit
101      lcd.print(int(temp));
102      lcd.write(B11011111); // Imprime o símbolo de grau
103      lcd.print("F ");
104 
105      if (temp > maxF)
106      {
107          maxF = temp;
108      }
109 
110      if (temp < minF)
111      {
112          minF = temp;
113      }
114 
115      lcd.setCursor(0,1);
116      lcd.print("Mx=");
117      lcd.print(maxF);
118      lcd.write(B11011111);
119      lcd.print("F Mn=");
120      lcd.print(minF);
121      lcd.write(B11011111);
122      lcd.print("F ");
123  }
124 
125 
126  void kelvin(int sensor)
127  {
128      lcd.setCursor(0,0);
129      lcd.print("Temp=");
130      float temp = sensor * 0.09765625 + 273; // Converte para Fahrenheit
131      lcd.print(int(temp));
132      lcd.write(B11011111); // Imprime o símbolo de grau
133      lcd.print("K ");
134 
135      if (temp > maxK)
136      {
137          maxF = temp;
138      }
139 
140      if (temp < minK)
141      {
142          minF = temp;
143      }
144 
145      lcd.setCursor(0,1);
146      lcd.print("Mx=");
147      lcd.print(maxK);
148      lcd.write(B11011111);
149      lcd.print("K Mn=");
150      lcd.print(minK);
151      lcd.write(B11011111);
152      lcd.print("K ");
153  }


Após carregar o programa, pode-se verificar a leitura da temperatura com o registro das máximas e mínimas. Mudança das escalas Celsius, Fahrenheit e Kelvin pelo push button e controle de brilho pelo potenciômetro.

Nenhum comentário:

Postar um comentário