KKM: OLED 128x64

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

U ovom tutorijalu ćemo se upoznati s jednim vrlo malim ali zanimljivim modulom koji primjenu nalazi u svim projektima gdje je potrebno prikazati neke podatke sa senzora. Radi se o OLED displeju veličine 0.96“ što ga čini lako primjenjivim u svim projektima jer ne zauzima puno mjesta, a daje odličan kontrast zbog drukčijeg načina rada od LCD displeja.
 

Karakteristike modula:
• Radni napon: 3.3V ili 5 V
• Potrošnja: 30 mA (ovisi o broju upaljenih pixela)
• Komunikacija: I2C ili SPI
• Boja pixela: Bijela
• Veličina displeja: 0.96“

KAKO RADI?

Displej se sastoji od 128*64 individualnih pixela koji su upravljani sa SSD1306 kontrolerom koji pali ili gasi svaki pixel ovisno kako smo mu zadali. Kako imamo pixele koji se pale ili gase oni nam daju osvjetljenje i displej ne treba pozadinsko osvjetljenje kao kod LCD displeja, te je zbog toga potrošnja OLED displeja puno manja nego kod LCD. Iz istog razloga je i kontrast puno bolji te se s displeja iako je malih dimenzija jasno mogu pročitati i sitniji znakovi. Kontroler SSD1306 podatke može primati na 2 načina putem SPI ili I2C komunikacije ovisno kako odaberemo: na zadnjoj strani displeja nam je označeno koje pinove trebamo kratko spojiti kako bi imali SPI ili I2C komunikaciju
Za napajanje kontrolera se koristi napon od 3.3 V te je zbog toga na pločicu ugrađen regulator napona. Kontroler također može od napona s kojim se napaja napraviti napon (7-9 V) koji je potreban za napajanje samog displeja odnosno pixela. Kako je naš modul izveden tako da se napaja s 5-3.3V naponom onda moramo u programu kontroleru reći da treba napraviti veći napon za rad displeja.

KAKO POVEZATI?

Modul je vrlo jednostavno povezati jer koristi I2C ili SPI komunikaciju . Ako koristimo I2C komunikaciju na pin A4 povezujemo SDA (D1) pin modula, a na pin A5 sa Croduina SCL (D0) pin s modula. Ako koristimo SPI komunikaciju onda nam je potrebno 5 vodiča za komunikaciju, a dolje je napisano koji pin sa Croduina se spaja na koji pin na displeju. Kao što smo pod karakteristikama naveli modul može raditi na 5 V ili na 3.3 V pa je svejedno koji napon mu dovedemo jer u sebi ima ugrađen naponski konverter.

SPI komunikacija
Displej >>>>>>>>>>>> Croduino
GND >>>>>>>>>>>> GND
VCC >>>>>>>>>>>> 5 V ili 3.3 V
D0 >>>>>>>>>>>> D10
D1 >>>>>>>>>>>> D9
RES >>>>>>>>>>>> D13
DC >>>>>>>>>>>>D11
CS >>>>>>>>>>>> D12

ARDUINO KOD

Kako bi OLED displej mogli koristiti sa Croduinom potrebno je instalirati biblioteku Adafruit_SSD1306 za rad s OLED displejom koja sadrži sve funkcije koje koristimo u primjerima. Ako ne znate kako instalirati biblioteku pogledajte tutorijal u kojem je sve detaljno objašnjeno.
U prvom primjeru ćemo koristiti SPI komunikaciju i na displej prikazivati znakove koje šaljemo sa Serial monitora.

#include <SPI.h> //uključujemo SPI biblioteku koja nam omogućuje SPI komunikaciju
#include <Adafruit_SSD1306.h> //uključujemo biblioteku za rad s OLED displejom

#define SCREEN_WIDTH 128 //definiramo širinu displeja, u pixelima
#define SCREEN_HEIGHT 64 //definiramo visinu displeja, u pixelima

//deklariramo pinove na koje spajamo oled displej za SPI komunikaciju( standardni Croduino pinovi za SPI komunikaciju)
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13

//Konstruktor za našu biblioteku za OLED displej,kako bi imali pristup funkcijama koje upravljanju displejom
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

//string u koji spremamo podatke sa Serial monitora te ih potom ispisujemo na displej
String buf; 

void setup() {
 Serial.begin(9600);//započinjemo serijsku komunikaciju(9600 bauda)
 //Inicijalizacija biblioteke za OLED displej
 // SSD1306_SWITCHCAPVCC = generira napon za displej(7-9 V) od 3.3V napona koji ima s regulatora napona
 if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { //Adresa 0x3C za 128x64 displej
 //ako inicijalizacija nije uspjela na Serial monitoru dobijemo poruku o grešci
 Serial.println(F("SSD1306 allocation failed"));
 for(;;); //beskonačna petlja ako inicijalizacija nije uspjela kako program ne bi nastavio izvođenje
 }
}

void loop() {
 //provjeravamo dali iam podataka na Serijskoj komunikaciji, te ako ima nastavljamo s izvršavanjem koda
if(Serial.available()){
 buf=Serial.readString();//podatke koje primimo sa serijske komunikacije spremamo u varijablu buf 
 //Ispisujemo što smo primili na Serial monitor
 Serial.println("Ovo je primljeno");
 Serial.println(buf);
 
 display.clearDisplay(); //očistimo displej
 display.setTextSize(1); //postavimo veličinu teksta na 1 
 display.setTextColor(WHITE); //postavimo boju teksta
 display.setCursor(0,0); //postavimo kursor na početak prvog reda
 display.println(buf); //šaljemo primljeni string na displej
 display.display(); //na displeju prikazujemo sve što smo poslali 
 } 
}

Drugi primjer koristi I2C komunikaciju i u njemu ćemo očitavati temperaturu s DHT senzora te ju ispisivati na displej.

* 
#include <Wire.h> //uključujemo wire biblioteku koja nam omogućuje I2C komunikaciju 
#include <Adafruit_SSD1306.h> //uključujemo biblioteku za rad s OLED displejom
#include "DHT.h" //uključujemo biblioteku za DHT senzor temperature i vlage

#define SCREEN_WIDTH 128 //definiramo širinu displeja, u pixelima
#define SCREEN_HEIGHT 64 //definiramo visinu displeja, u pixelima
#define DHTPIN 10 // definiramo pin na koji je spojen data pin s DHT senzora
#define DHTTYPE DHT11 //definiramo tip DHT senzora(DHT11 ili DHT22

//Konstruktor za našu biblioteku za OLED displej,kako bi imali pristup funkcijama koje upravljanju displejom
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
//Konstruktor za DHT senzor
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  
  dht.begin();////Inicijalizacija biblioteke za DHT senzor
 //Inicijalizacija biblioteke za OLED displej
 // SSD1306_SWITCHCAPVCC = generira napon za displej(7-9 V) od 3.3V napona koji ima s regulatora napona
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Adresa 0x3C za 128x64 displej
   //ako inicijalizacija nije uspjela na Serial monitoru dobijemo poruku o grešci
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); //beskonačna petlja ako inicijalizacija nije uspjela kako program ne bi nastavio izvođenje
  }
}

void loop() {
  float temperatura=dht.readTemperature();//u varijablu temperatura spremamo temperaturu sa DHT11 senzora
  float vlaga=dht.readHumidity();// u varijablu vlaga spremamo vlagu zraka sa DHT11 senzora
  display.clearDisplay();//funkcija za brisanje svega s displeja
  display.setTextSize(1);//funkcija za postavljanje veličine teksta            
  display.setTextColor(WHITE);//funkcija za postavljanje boje slova(naš displej može samo jednu boju)        
  display.setCursor(0,0);//funkcija za postavljanje kursora (0-127,0-63)na displeju gdje želimo početi s ispisom teksta             
  display.print("Temp: ");//funkcija za ispis teksta koji joj predamo
  display.print(temperatura);//ispisuje temperaturu
  display.print(" *C");//ispisujemo razmak i *C kako bi znali da je temp u stupnjevima Celzijevim
  display.setCursor(0,10);// postavljamo kursor u novi red i ispisujemo podatke za vlagu
  display.print("Vlaga: ");
  display.print(vlaga);
  display.println(" %");
  display.display();//prikazujemo sav tekst na displeju koji smo prethodno poslali u buffer displeja
  delay(1000);// pauza od 1 sekunde kako se vrijednosti ne bi stalno mijenjale
  }
Leave a Reply