Arduino筆記(18):Nokia 5510 單色顯示器

今天發現一家新的電子材料行在市區開幕,就想說進去逛一下看看有沒有新的感測模組,剛好看到 Nokia 5510 LCD 這個模組,只覺得樹莓派有顯示畫面,如果是 Arduino 要如何將字元或圖像呈現在 LCD上。當下就花了 1百xx元買了一片,要來試看看 Arduino 如何將影像透過連接的 Pin 顯示到 LCD上。結果帶回去一試,螢幕中間那塊都變成深色,於是再拿回去店裡換一個新的。

有了顯示 LCD 後,我試著將 DS18B20這個測試溫度的IC 接上,將讀取的值顯示在 LCD上,請看以下實做的結果:


[材料]

• Arduino Uno x 1
• Nokia 5510 x 1
• DS18B20 溫度控制 IC x 1
• 可變電阻 x 1
• 連接線 x n條

[接線圖]



• Nokia 5110 LCD模組連接線路
Arduino接腳Nokia 5510 LCD模組
Pin 6RST (Reset)
Pin 7CE (Chip Enable)
Pin 5D/C (Data/Command Selection)
Pin 4DIN (Serial Input)
Pin 3CLK (Clock Input)
VCC3.3V (VCC)
*17- LIGHT (Backlight Control)
GNDGND (Ground)

*1 : 連接可變電阻(中),可變電阻另兩腳分別接 3.3V 和 GND

• DS18B20 連接線路:
左腳接地;右腳接 5V;中間腳接 Arduino Pin 10及6.8 K Ohm後接 3.3V電源

[程式一]

程式內呼叫三個不同的函式庫,請到以下網址下載後,解壓縮放在執行 Arduino 資料夾內的 Libraries 目錄。

•  One Wire Library
•  PCD8544 library
•  DallasTemperature Library

#include <onewire.h>
#include <PCD8544.h>
#include <dallastemperature.h>

#define ONE_WIRE_BUS 10     // DB18B20 中間腳接的 Pin

// 設定 oneWire 與 DS18B20 通訊 
OneWire oneWire(ONE_WIRE_BUS); 

// 將 oneWire 參考值傳給 DB18B20 
DallasTemperature sensors(&oneWire);

// 畫一個笑臉
static const byte glyph[] = { B00010000, B00110100, B00110000, B00110100, B00010000 };

static PCD8544 lcd;

void setup() {
  // 與 PCD8544 相容的顯示器
  lcd.begin(84, 48);

  // 將笑臉圖案設定在位於 ASCII table 0 的位置.
  lcd.createChar(0, glyph);
  sensors.begin(); 
}

void loop() {
  static int counter = 0;

  // 寫入一段文字
  lcd.setCursor(0, 0);
  lcd.print("I'm Ceiling.");

  // 讀取 DS18B20溫度
  sensors.requestTemperatures();
  
  // 在畫面顯示計數器
  lcd.setCursor(0, 1);
  lcd.print(counter, DEC);
  lcd.write(' ');
  lcd.write(0);  // 畫一個笑臉

  // 將游標設定在第 3 列
  lcd.setCursor(1, 3);
  lcd.print("Temp: ");  
  lcd.print(sensors.getTempCByIndex(0));
  lcd.print("'C");  
    
  delay(200);
  counter++;
}

[程式二]

以下程式是顯示溫度,我保留原作者的程式碼,僅修改連接 LCD的 Pin 號,作者使用 LCD5110_Graph這個函式庫,可以將字型放大、縮小,讓大家參考。

/*
Author: Danny van den Brande, ArduinoSensors.nl. BlueCore Tech.
Hello world! this is a example project for the DS18b20 on a old Nokia 5110 LCD Display.
 */

#include <onewire.h>
#include <DallasTemperature.h>
#include <LCD5110_Graph.h>

#define ONE_WIRE_BUS 10

LCD5110 lcd(3,4,5,6,7);

extern unsigned char SmallFont[];
extern unsigned char BigNumbers[];
extern uint8_t borderRoundedIcon[];

char TempCelciusFahrenheit[6];

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

float tempC = 0;
float tempF = 0;

void setup(void)
{
  lcd.InitLCD();
  sensors.begin();
}

void loop(void)
{ 
  lcd.clrScr();
  lcd.drawBitmap(0, 0, borderRoundedIcon, 84, 48);
  sensors.requestTemperatures();
  tempC = sensors.getTempCByIndex(0);
  tempF = sensors.toFahrenheit(tempC);

//  convertToString(tempF); //these are Fahrenheit, uncomment when using degrees.
  convertToString(tempC);  //These are degrees, comment when using Fahrenheit.

  lcd.setFont(BigNumbers);
  lcd.print(TempCelciusFahrenheit,22,14); // You can set position of the text here.
  lcd.setFont(SmallFont);
  lcd.print("Temp.Celc.",17,5); //Comment when using Fahrenheit
  lcd.print("Temp.Fahr.",17,5); //Uncomment when using Celcius  lcd.update();  
  delay(1000);
}
void convertToString(float number)
{
   dtostrf(number, 3, 1, TempCelciusFahrenheit);
}

[執行結果]


[參考資料]

•  Sparkfun:Graphic LCD Hookup Guide
•  randomnerdtutorials.com:Complete Guide for Nokia 5110 LCD with Arduino
•  Danny van den Brande:Arduino - Nokia 5110 LCD temperature meter with the DS18B20

Post a Comment

較新的 較舊