Olá pessoal, em meu primeiro post aqui no blog irei ensinar
como fazer um leitor de tensão utilizando o arduino e além da leitura serial,
ele mostra os valores num display 5110 da nokia com uma barra de progresso (Bar
Graph).
Material necessário:
1 – Um Arduino, qualquer modelo.
2 – Um display do nokia 5110 Vermelho.
3 – Um potenciômetro de 10k (opcional).
Pra que vai servir?
Medir tensões de 0 a 5Volts, como se fosse um multi teste.
Atenção, o arduino só suporta tensões de até 5V no máximo,
não insira tensões maiores que essa na sua entrada analógica.
Primeiro passo: Ligar as entradas.
Nós podemos ligar a entrada de tensão em uma fonte, em
pilhas, baterias ou na própria saída do arduino. Nesse exemplo vamos utilizar a
saída do arduino.
Caso você não tenha um potenciômetro, coloque um fio saindo
do 5V ou do 3,3V do arduino diretamente para a porta analógica A0.
Se você for medir a tensão de uma pilha ou bateria, ligue o
polo positivo na porta A0 e o negativo no GND do arduino.
Caso você tenha um potenciômetro B10K, ligue da seguinte
forma:
Segundo passo: o código.
Vamos preparar o arduino para a leitura serial de tensão.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int Tenpin = A0; // cria variavel de leitura na porta A0 | |
double val; // cria variavel val | |
double vall;// cria variavel vall | |
void setup(){ | |
Serial.begin(9600); // inicia comunicação serial | |
pinMode(A0,INPUT); // define porta analogica A0 como a entrada da leitura | |
} | |
void loop(){ | |
val = analogRead(A0); // Realiza a leitura | |
Serial.print("Tensao :"); // imprime a palavra tensão | |
vall = (val* 5.00/1023.00); // transforma leitura de bits para volts | |
Serial.println(vall); // imprime vall, valor já em volts | |
delay(1000); // tempo de aguardo até a próxima leitura, em milissegundos | |
} |
Pronto, com esse simples código já temos um leitor com saída
pela serial, faça o teste antes dos próximos passos.
Terceiro passo: Incluir o display.
Esse display além de muito útil e simples é também muito
barato, até mais que um 16x2. Com ele podemos fazer pequenos desenhos e
apresentar textos na tela. Ele era utilizado nos extintos celulares da nokia
modelo 5110, hoje ele é amplamente utilizado em conjunto com o arduino.
Link do Datasheet:
https://www.sparkfun.com/datasheets/LCD/Monochrome/Nokia5110.pdf
Download biblioteca LCD5110_graph.h:
http://www.rinkydinkelectronics.com/library.php?id=47
Download biblioteca LCD5110_graph.h:
http://www.rinkydinkelectronics.com/library.php?id=47
Ligação do display:
// SCLK
- Pin 3 (clock)
// MOSI - Pin 4 (DN<MOSI>)
// DC
- Pin 5 (D/C)
// RST
- Pin 6 (reset)
// CS - Pin 7 (SCE)
Essas são as portas de comunicação e precisam ser declaradas
no código, as demais não precisam, ligue-as da seguinte forma:
// Led – 3,3V
com um resistor para led, pode ser o de 470 ohms.
// VCC – 3,3V
(Atenção, não ligue em 5V)
// GND – GND
do arduino (terra).
Resultado:
Mais detalhes nos comentários do código abaixo:
| ||
//parcerias: | ||
//http://viciadosemarduino.blogspot.com.br/ | ||
//http://sttamp.com/loja | ||
// | ||
//Versão original do código: | ||
//http://educ8s.tv/LightMeter/SimpleLDR.ino | ||
//https://www.youtube.com/watch?v=gauKjcuN2K4 | ||
// | ||
// Leitor de tensão utilizando arduino + display nokia 5110 VERMELHO + potênciometro 10k. | ||
// | ||
//download biblioteca LCD5110_graph.h: | ||
//http://www.rinkydinkelectronics.com/library.php?id=47 | ||
// | ||
// Ligue os pinos do lcd dessa maneira: | ||
// SCK - Pin 3 | ||
// MOSI - Pin 4 | ||
// DC - Pin 5 | ||
// RST - Pin 6 | ||
// CS - Pin 7 | ||
// | ||
#include <LCD5110_Graph.h> // inclui a biblioteca do display 5110 | ||
LCD5110 myGLCD(3,4,5,6,7); // define a sequência de ligação do display | ||
extern unsigned char SmallFont[]; // define tamanho da fonte | ||
extern unsigned char TinyFont[]; | ||
int Tenpin = A0; // cria variavel de leitura na porta A0 | ||
char tenstring [6]; // define tamanho da string | ||
String str; | ||
int tensao = 0; | ||
double val; // cria variavel val | ||
double vall;// cria variavel vall | ||
void setup(){ | ||
myGLCD.InitLCD(); | ||
myGLCD.setFont(SmallFont); | ||
Serial.begin(9600); // inicia comunicação serial | ||
pinMode(A0,INPUT); // define porta analogica A0 como a entrada da leitura | ||
} | ||
void loop(){ | ||
val = analogRead(A0); // Realiza a leitura | ||
Serial.print("Tensao :"); // imprime a palavra tensão | ||
vall = (val* 5.00/1023.00); // transforma leitura de bits para volts | ||
Serial.println(vall); // imprime vall, valor já em volts | ||
delay(1000); // tempo de aguardo até a proxima leitura, em milisegundos | ||
myGLCD.clrScr(); // limpa lcd | ||
myGLCD.update(); // atualiza lcd | ||
tensao = analogRead(Tenpin); | ||
tensao = map(val, 0, 1023, 0, 255); // define a relação entre bits de entrada e de saida no display | ||
str = String(vall)+"V"; // imprime na tela o valor em volts + a letra V | ||
str.toCharArray(tenstring,6); // define o tamanho da string d voltagem | ||
myGLCD.print("Tensao",CENTER,5); // define localização da palavra tensão (5 é a linha onde inicia) | ||
myGLCD.print(tenstring,CENTER,15); // define localização tensão lida (15 é a linha onde inicia) | ||
//inicia processo de impressão da barra | ||
printBar(); | ||
fillBar(tensao); | ||
myGLCD.update(); | ||
delay(100); | ||
} | ||
void printBar() //imprimindo a barra | ||
{ | ||
myGLCD.drawRect(0, 35, 63, 40); // ponto de inicio, borda de cima, comprimento total de pixels, borda de baixo | ||
myGLCD.update(); | ||
} | ||
void fillBar(int percent) | ||
{ | ||
percent = map(percent, 0, 1023, 0, 255); // relação da porcentagem de volts por pixels da barra | ||
myGLCD.drawLine(1, 36, percent, 36); //define as ultimas linhas do display para exibir a barra de porcentagem | ||
myGLCD.drawLine(1, 37, percent, 37); // onde 1 é a coluna de inicio, 36,37,38 e 39 são as linhas. | ||
myGLCD.drawLine(1, 38, percent, 38); | ||
myGLCD.drawLine(1, 39, percent, 39); | ||
} |
Nenhum comentário:
Postar um comentário