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
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