Medidor de distância com display OLED colorido
Com o display Oled Colorido SSD1331 você pode criar projetos com maior interatividade com o usuário, já que o display permite mostrar até 65.000 cores diferentes, entre gráficos e texto.
Como exemplo, vamos montar um medidor de distância com sensor ultrassônico HC-SR04, mostrando na tela a distância e ao lado um gráfico, que aumenta ou diminui conforme a distância do objeto ao sensor.
Display Oled Colorido 0.96″
O display oled que vamos utilizar é de 0.96 polegadas, com resolução de 96×64 pixels. Ele é capaz de mostrar 65.000 cores, funcionando com conexão SPI e tensão de alimentação entre 2,8 e 5,5V. O controlador é o SSD1331 (datasheet).
Ao contrário de outros displays que tem apenas uma faixa colorida no topo (altura de 13 pixels, se não me engano), esse display oled colorido é capaz de mostrar cores em qualquer área da tela, deixando o seu projeto muito mais agradável visualmente.
Outro ponto positivo deste display é a compatibilidade com placas que trabalham com nível de sinal de 3.3 e 5V, assim você pode usar o display diretamente em placas como Arduino, Raspberry Pi, módulos ESP8266, etc.
Conexão display oled colorido no Arduino
Como já mencionamos anteriormente, a conexão com o Arduino é feita pela interface SPI. Vamos então conectar o display em um Arduino Uno usando os pinos digitais 8, 9, 10, 11 e 13.
Nos pinos digitais 5 e 6 vamos ligar os pinos trigger e echo o sensor ultrassônico HC-SR04.
Programa medidor de distância
O programa do medidor de distância com display oled colorido usa as bibliotecas Adafruit SSD 1331, Ultrasonic e também da Adafruit GFX para mexer na parte gráfica do display. Instale essas bibliotecas a partir do menu da IDE do Arduino, em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Primeiramente procure por ssd1331 e instale a biblioteca indicada na imagem abaixo:
Repita o procedimento procurando por Ultrasonic:
Por último, procure por Adafruit GFX e instale a biblioteca:
Após a instalação das bibliotecas e inicialização do display e do sensor ultrassônico, o programa efetua a leitura do sensor e chama a rotina AtualizaDisplay() para mostrar as informações na tela.
//Programa: Medidor de distancia com // display Oled Colorido SSD1331 //Autor: Arduino e Cia #include <Ultrasonic.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1331.h> #include <SPI.h> //Pinos de ligacao do display SSD1331 #define sclk 13 #define mosi 11 #define cs 10 #define rst 9 #define dc 8 //Definicao de cores #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF //Ligacao do pino Trigger do HC-SR04 #define PINO_TRIGGER 5 //Ligacao do pino Echo do HC-SR04 #define PINO_ECHO 6 //Inicializa o sensor ultrassonico Ultrasonic Ultrasonic(PINO_TRIGGER, PINO_ECHO); //Inicializa o display Oled Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst); //Posicao inicial do grafico int posicao_x = 72; int posicao_y = 26; int largura = 8; int altura = 2; void setup(void) { Serial.begin(9600); display.begin(); //Informacoes iniciais do display display.fillScreen(BLACK); display.drawRect(0, 0, 96, 17, WHITE); display.fillRect(0, 0, 96, 17, YELLOW); display.drawRect(0, 0, 96, 17, WHITE); display.drawRect(0, 19 , 54, 44, WHITE); display.drawRect(55, 19 , 41, 44, WHITE); display.setCursor( 22, 50 ); display.print("cm"); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor( 22, 5 ); display.print( "DISTANCIA" ); } void loop(void) { //Leitura da distancia do HC-SR04 long distancia = Ultrasonic.distanceRead(); //Atualiza as informacoes na tela AtualizaDisplay(distancia); delay(30); } void AtualizaDisplay(long val) { //Atualiza a distancia na tela display.fillRect(1, 20 , 50, 23, BLACK); display.setTextSize(2); display.setTextColor(BLUE); display.setCursor( 10, 29 ); display.print( val ); //Atualiza a animacao da distancia display.fillRect(57, 20 , 38, 42, BLACK); posicao_x = 72; posicao_y = 26; largura = 8; altura = 2; int grafico = map(val, 0, 200, 1, 8); if (grafico >= 8) { grafico = 8; } //Preenche animacao distancia for (int i = 1; i <= grafico; i++) { display.fillRect(posicao_x, posicao_y , largura, altura, GREEN); posicao_x = posicao_x - 2; posicao_y = posicao_y + 4; largura = largura + 4; } }
Para maiores informações sobre os comandos gráficos da biblioteca Adafruit GFX, consulte a documentação da biblioteca neste link.
Gostou do display Oled Colorido SSD1331? Confira também como fazer um medidor usando display LCD 16×2 no post Medidor de Distância com o sensor ultrassônico HC-SR04.
Parabéns achei interessante projeto vou tentar montar para ver bem mais a fundo a priori percebi que ao compilar o código na linha 33 ,34 está dando erro.
Boa noite,
Obrigado. Você tem alguma outra biblioteca Ultrasonic instalada ? Me parece que está em conflito com alguma biblioteca existente.
Abraço!
Arduino: 1.6.5 (Windows 7), Placa:"Arduino/Genuino Uno"
Opções de compilação alteradas, recompilando tudo
Usando biblioteca Ultrasonic na pasta: C:Program Files (x86)ArduinolibrariesUltrasonic-master
Usando biblioteca PCD8544 na pasta: C:Program Files (x86)ArduinolibrariesPCD8544 (legacy)
Usando biblioteca Adafruit SSD1331 OLED Driver Library for Arduino na pasta: C:Program Files (x86)ArduinolibrariesAdafruit-SSD1331-OLED-Driver-Library-for-Arduino-master
Usando biblioteca SPI na pasta: C:Program Files (x86)ArduinohardwarearduinoavrlibrariesSPI
C:Program Files (x86)Arduinohardwaretoolsavr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:Program Files (x86)Arduinohardwarearduinoavrcoresarduino -IC:Program Files (x86)Arduinohardwarearduinoavrvariantsstandard -IC:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc -IC:Program Files (x86)ArduinolibrariesPCD8544 -IC:Program Files (x86)ArduinolibrariesAdafruit-SSD1331-OLED-Driver-Library-for-Arduino-master -IC:Program Files (x86)ArduinohardwarearduinoavrlibrariesSPI C:UsersFMAppDataLocalTempbuild5561403172525669483.tmpMEDIDOR_DISTANCIA_COM_OLED_COLORIDO.cpp -o C:UsersFMAppDataLocalTempbuild5561403172525669483.tmpMEDIDOR_DISTANCIA_COM_OLED_COLORIDO.cpp.o
In file included from MEDIDOR_DISTANCIA_COM_OLED_COLORIDO.ino:7:0:
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:24:24: error: expected ')' before 'sigPin'
Ultrasonic(uint8_t sigPin);
^
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:25:24: error: expected ')' before 'trigPin'
Ultrasonic(uint8_t trigPin, uint8_t echoPin);
^
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:27:31: error: 'uint8_t' has not been declared
unsigned int distanceRead(uint8_t und);
^
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:30:5: error: 'uint8_t' does not name a type
uint8_t trig;
^
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:31:5: error: 'uint8_t' does not name a type
uint8_t echo;
^
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:32:5: error: 'boolean' does not name a type
boolean threePins = false;
^
MEDIDOR_DISTANCIA_COM_OLED_COLORIDO.ino:36:45: error: no matching function for call to 'Ultrasonic::Ultrasonic(int, int)'
MEDIDOR_DISTANCIA_COM_OLED_COLORIDO.ino:36:45: note: candidates are:
In file included from MEDIDOR_DISTANCIA_COM_OLED_COLORIDO.ino:7:0:
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:22:7: note: Ultrasonic::Ultrasonic()
class Ultrasonic {
^
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:22:7: note: candidate expects 0 arguments, 2 provided
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:22:7: note: Ultrasonic::Ultrasonic(const Ultrasonic&)
C:Program Files (x86)ArduinolibrariesUltrasonic-mastersrc/Ultrasonic.h:22:7: note: candidate expects 1 argument, 2 provided
Multiple libraries were found for "Ultrasonic.h"
Used: C:Program Files (x86)ArduinolibrariesUltrasonic-master
Not used: C:Program Files (x86)ArduinolibrariesHCSR04Ultrasonic
Not used: C:Program Files (x86)ArduinolibrariesHCSR04
Multiple libraries were found for "Adafruit_GFX.h"
Used: C:Program Files (x86)ArduinolibrariesPCD8544
Not used: C:Program Files (x86)ArduinolibrariesAdafruit-GFX-Library-master
no matching function for call to 'Ultrasonic::Ultrasonic(int, int)'
Boa noite,
Parece mesmo conflito de biblioteca. No relatório que vc mandou consta "Multiple libraries were found for Ultrasonic.h".
Abraço!
Realmente era isso mesmo estava com 2 lib dele porem esta dentro de outra pasta que não sei como foi parar lá (: Valeu Abraço parabéns gostei muito do OLED achei bem interessante, obrigado pela atenção (y)
Opa, que bom que funcionou. 🙂
Valeu. Abraço!
ola podem me passar um contato?
Bom dia,
Por favor utilize o formulário de contato no lado direito da página. Conversamos por email.
Abraço!
Adilson
Bom dia, achei muito interessante este projeto, dá pra fazer várias coisas a partir dele, só fiquei com uma dúvida, se eu não tiver um display colorido, como o do Nokia que vendem na loja, o que eu preciso alterar no código para ele funcionar?
Boa noite,
Vai depender da ligação do display que você tem. Se for I2C, fica mais fácil.
Abraço!
Adilson
cara eu não consigo fazer isso com display spi,você pode ajudar?
Oi Marcos,
O display que estou usando nesse post é SPI. Qual modelo você tem?
Abraço!
Adilson
0.96 polegada Módulo Display OLED CII SPI Série Branca 128X64 I2C Placa De Tela De LCD 0.96
Saudações,
sou iniciante em Arduino e gostaria de ligar esse display em um Arduino Mega, pode me passar o esquema de ligação?
Obrigado.
Oi Paulo!
Tudo bem? No Mega, os pinos da interface SPI são diferentes. Faça as seguintes alterações:
Uno -> Pino 13 – Mega -> Pino 52
Uno -> Pino 11 – Mega -> Pino 51
Uno -> Pino 10 – Mega -> Pino 53
A principio são só esses 3 pinos e vc precisa alterar também no programa. As linhas de 10 a 15 ficam assim:
//Pinos de ligacao do display SSD1331
#define sclk 52
#define mosi 51
#define cs 53
#define rst 9
#define dc 8
Eu estou sem um mega aqui no momento para testar, mas creio que vc não terá problemas. Se não funcionar, dê um toque que eu te ajudo.
Abraço!
Adilson