Display OLED com ARDUINO
Quando estamos projetando, por exemplo uma máquina ou equipamento, por muitas vezes temos a necessidade de uma interface visual. Esta interface pode ser um LED, um display de 7 segmentos, um display LCD, um display de OLED, entre outros.
Na etapa de desenvolvimento do seu projeto não é tão necessário qualquer “saída” visual, pois podemos utilizar uma saída serial para avaliar o funcionamento do circuito. Entretanto, isto demanda de um notebook ou desktop para conexão entre o seu equipamento e uma tela. Quando se vislumbra a utilização deste equipamento de forma mais funcional é necessário acrescentar algum artificio para podermos utilizar da melhor forma nosso projeto.
Na postagem de hoje vamos falar de um componente que particularmente utilizo muito durante as prototipagens dos meus projetos: Display Oled Gráfico 128×64.
OLED
Antes de mais nada vamos entender um pouco mais do que se trata o organic light-emitting diode ou diodo emissor de luz orgânico. Basicamente este o OLED tem o funcionamento semelhante aos diodos e LED convencionais, contudo ao invés de utilizar camadas tipo n e p, ele utiliza moléculas orgânicas para produzir seus pixels.
Ele é composto por seis camadas diferentes. Na parte superior e inferior existem camadas de vidro ou plástico para proteção. Entre estas camadas estão localizados os terminais negativo (catodo) e positivo (anodo), e finalmente entre estes terminais ficam as camadas orgânicas emissiva(onde a luz é produzida) e a camada condutora(ao lado do anodo).
Quais são as vantagens e desvantagens deste display?
Vantagens: como não necessita de iluminação externa este display tem um consumo de energia muito baixa comparado aos modelos convencionais. Quando pensamos em IoT economia de energia é uma das principais premissas de projeto. Além disso eles tem um brilho e um contraste que deixam qualquer interface visual muito interessante.
Desvantagens: além da produção ser mais complexa, o que o torna mais caro, este display possui uma vida útil menor do que outros modelos. A vida útil pode variar de 10 mil a 40 mil horas de uso, não acho que isso seja pouco mas enfim… Outro detalhe importante – água pode danifica-lo facilmente, então evite projetos que corram o risco de molhar o display.
DISPLAY OLED GRÁFICO
O display OLED possui um tamanho 0,96¨ com 128 x 64 pixels, ou seja, são 8192 pontos que podem ser alterados. Quem está por trás deste controle é o SSD1306. Este chip é responsável por fazer o controle e a comunicação entre o dispositivo e algum microcontrolador/CPU.
A comunicação entre o microcontrolador e o display é feita através da interface I2C
Especificações:
- Conexão: I2C (endereço 0x3C);
- Área visível: 0.96″;
- Resolução: 128 x 64;
- Controlador: SSD1306;
- Tensão de Alimentação: 3.3V / 5V;
- Tensão de I/O: 3.3V / 5V;
- Cor Letra: Azul;
- Dimensões da placa: 28x27mm.
Agora que conhecemos um pouco do display vamos colocar em prática o que foi apresentado. LET’S WORK
CONECTANDO O DISPLAY NO ARDUINO
Neste tutorial mostraremos como fazer a conexão entre o Arduino e o display OLED 0,96¨através da comunicação I2c.
Materiais Utilizados:
Esses itens, e mais uma outros para implementar seu projeto – você acha AQUI na nossa loja :D.
Montagem:
Para montarmos este projeto iremos seguir o esquema abaixo:
- Pino GND Display conectado ao pino GND Arduino;
- Pino VCC Display conectado ao pino 5V Arduino;
- Pino SCL Display conectado ao pino A5(SCL) Arduino;
- Pino SDA Display conectado ao pino A4(SDA) Arduino.
DICA: como o consumo deste Display é baixo podemos utilizar o próprio Arduino como fonte de energia, porém o projeto fica vinculado a uma conexão com cabo USB. Sugiro então a utilização de uma fonte ajustável para sua protoboard e uma fonte de alimentação externa.
Bibliotecas
Para fazer o display funcionar corretamente é importante adicionar sua biblioteca especifica. Foram testadas duas bibliotecas e ambas funcionaram corretamente:
Para instalar é bem simples: na IDE Arduino clique na aba superior Sketch > Incluir Biblioteca > Adicionar Biblioteca .ZIP. Então basta selecionar o arquivo .ZIP que você baixou dos repositórios disponíveis acima.
Essas bibliotecas incluem uma série de exemplos e aplicações para testar o funcionamento do display.
Existem comando para desenhar as mais diversas figuras geométricas, textos com fontes e tamanhos variados, caracteres especiais, além de poder plotar alguma figura especifica em bitmap.
É importante ler o conteúdo da página WIKI deste display – nele encontramos todos os comandos possíveis e como implementá-los.
Código-fonte: ALO MUNDO!
Como de praxe o primeiro programa a ser testado deve ser simples, visando uma introdução e familiarização ao conteúdo que esta sendo estudado.
Desta forma utilizamos aqui um exemplo da própria biblioteca com algumas pequenas alterações:
/* "Hello World!" example code. Universal 8bit Graphics Library, https://github.com/olikraus/u8glib/ Copyright (c) 2012, olikraus@gmail.com All rights reserved. Adaptado por: Samuel Centenaro de Oliveira(samuelcentenaro@gmail.com) Data: 25/07/2017 */ #include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.setFont(u8g_font_unifont); //u8g.setFont(u8g_font_osb21); u8g.drawStr( 0, 22, "Auto Core"); } void setup(void) { // flip screen, if required // u8g.setRot180(); // set SPI backup if required //u8g.setHardwareBackup(u8g_backup_avr_spi); // assign default color value if ( u8g.getMode() == U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); // white } else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) { u8g.setColorIndex(3); // max intensity } else if ( u8g.getMode() == U8G_MODE_BW ) { u8g.setColorIndex(1); // pixel on } else if ( u8g.getMode() == U8G_MODE_HICOLOR ) { u8g.setHiColorByRGB(255,255,255); } } void loop(void) { // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // rebuild the picture after some delay delay(50); }
O comando U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); é o que configura a utilização deste modelo especifico de display com esta biblioteca, por isso é imprescindível nos atentarmos a este detalhes.
Na figura abaixo eu criei uma imagem em bitmap para colocar no display. Por enquanto vou deixar vocês na curiosidade para um próximo post que faremos.
CONCLUSÕES
Neste post conhecemos um pouco as características e funcionalidades deste dispositivo que eu considero de fundamental importância para qualquer projeto MAKER. Fizemos uma breve apresentação do que podemos fazer, no intuito realmente de fazer os primeiros testes e avaliações dos produtos.
Podem fazer qualquer pergunto que estamos aqui para responde-las e tentam ajuda-los da melhor maneira possível. Leiam, estudem, testem, critiquem, sugestione – tudo é muito importante para nós.
E não esqueça de dar um pulo na loja para aproveitar as promoções e novidades!
Se você gostou deste post deixe seu comentário aqui e curta no Facebook!!
REFERÊNCIAS
http://www.explainthatstuff.com/how-oleds-and-leps-work.html
http://www.instructables.com/id/Monochrome-096-i2c-OLED-display-with-arduino-SSD13/
http://guy.carpenter.id.au/gaugette/2012/11/08/controlling-an-adafruit-spi-oled-with-a-raspberry-pi/
ola gostei da praticidade e a beleza deste display eu estou com duvidas a respeito de como posicionar as letras por exemplo quero um relogio dital, como pocisiono as letras por exemplo no cenrto e os numeros em baixo? desde ja agradeço, estou usando um display 128×32 mas logo espero adiquirir este de 128×64
Olá Davidson, tudo bem?
Para poder posicionar os caracteres no display, é interessante você estudar um pouco sobre a biblioteca que você está utilizando!
Normalmente nela já fala os comandos e a ação que cada um provoca.
Mas, com relação ao display de 128×64, temos a biblioteca da Adafruit GFX:
https://github.com/adafruit/Adafruit-GFX-Library/blob/master/Adafruit_GFX.h
Com ela, temos o comando “display.setCursor(X,Y);” onde alocamos o caractere dentro da margem do display!
No próprio site da Adafruit você consegue estudar sobre, vou deixar o link para você:
https://learn.adafruit.com/adafruit-gfx-graphics-library/overview
Caso tenha dúvida, só comentar aqui!
Abraços!