segunda-feira, 23 de março de 2015

Leitor de tensão serial + display nokia 5110 vermelho

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.


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:

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: 



//Código adaptado, comentado e editado por Marcelo Cella
//marcelocella204@gmail.com
//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