반응형
LCD는 Liquid Crystal Display의 약자로 액정 디스플레이 또는 액정 표시장치입니다. 뒷면에 백라이트(backlight)가 있어 빛을 내며 앞면에 있는 액정에 문자나 숫자 등을 표시합니다. 여기에서는 가로로 16개의 문자를 출력할 수 있고 세로로 2줄을 표현할 수 있는 LCD라는 의미의 1602 LCD를 사용하여 실습합니다. 이 LCD는 I2C방식으로 통신을 하여 핀4개로 간편하게 연결할 수 있는 것이 장점입니다.
아두이노와 LCD 연결 회로도
LCD 라이브러리 설치
아두이노를 실행한후 툴->라이브러리 관리 메뉴를 실행한다.
검색란에 LiquidCrystal I2C를 검색하고 라이브러리를 설치합니다.
LCD I2C 주소확인 방법
LCD를 연결 할 때 I2C주소를 확인해야하는데 보통 0x27 또는 0x 3F입니다. LCD를 연결하여 I2C 주소를 알아내기 위한 소스코드입니다.
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
LCD I2C 주소가 0x27인 것을 알 수 있습니다.
LCD에 문자 표시하기
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //I2C 주소를 미리 확인 할 것 0x27 또는 0x3F
void setup()
{
lcd.init(); // LCD초기 설정
lcd.backlight(); // LCD초기 설정
lcd.setCursor(0,0); //텍스트가 LCD에 나타날 위치
lcd.print("Good Morning");
lcd.setCursor(2,1);
lcd.print("How are you?");
}
void loop(){
}
LCD에 문자 흐르게 하기
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("HAPPY BIRTHDAY TO YOU");
}
void loop()
{
for (int i = 0; i < 16; i++) {
lcd.scrollDisplayLeft();
delay(150);
}
}
LCD와 아날로그 값 센서 연결하기 - 온습도, 소리감지, 수분감지센서
LCD에 온습도센서 DHT11 값 측정하여 표시하기
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int dht_pin = A0;
DHT dht11(dht_pin, DHT11);
void setup() {
lcd.init(); // LCD초기 설정
lcd.backlight(); // LCD초기 설정
lcd.setCursor(0,0); //텍스트가 LCD에 나타날 위치
Serial.begin(9600);
dht11.begin();
}
void loop() {
float humi = dht11.readHumidity();
float temp = dht11.readTemperature();
float hic = dht11.computeHeatIndex(temp, humi, false);
if (isnan(humi) || isnan(temp)) {
Serial.println("Failed to read from DHT11 sensor!");
lcd.clear();
return;
}
displayLCD(humi, hic);
delay(1000);
}
void displayLCD(float h, float t) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Humi : ");
lcd.print(h);
lcd.print(" %");
lcd.setCursor(0, 1);
lcd.print("Temp : ");
lcd.print(t);
lcd.print(" C");
}
LCD에 소리감지센서 측정 값 표시하기
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int sensorPin = A0;
void setup() {
lcd.init(); // LCD초기 설정
lcd.backlight(); // LCD초기 설정
//텍스트가 LCD에 나타날 위치
Serial.begin(9600); //시리얼 통신을 시작합니다.
pinMode(sensorPin, INPUT); // declare sensor as input
}
void loop() {
int value = analogRead(sensorPin); // 센서로부터 센서값을 읽어 들입니다.
Serial.println(value);//센서값을 시리얼 모니터로 출력하여 현재 센서값을 보여줍니다.
delay(100);
if (value < 50) { //소리감지 센서 측정 값에 따라 출력
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Silence");
} else {
lcd.clear();
lcd.setCursor(5,1);
lcd.print("Too loud");
}
delay(20);
}
LCD에 수분센서 측정 값 표시하기
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int sensorPin = A0;
void setup() {
lcd.init(); // LCD초기 설정
lcd.backlight(); // LCD초기 설정
//텍스트가 LCD에 나타날 위치
Serial.begin(9600); //시리얼 통신을 시작합니다.
pinMode(sensorPin, INPUT); // declare sensor as input
}
void loop() {
int value = analogRead(sensorPin); // 센서로부터 센서값을 읽어 들입니다.
Serial.println(value);//센서값을 시리얼 모니터로 출력하여 현재 센서값을 보여줍니다.
delay(100);
if (value > 400) { // check if the input is HIGH
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Water Please");
}
else {
lcd.clear();
lcd.setCursor(5,1);
lcd.print("Enough");
}
delay(20);
}
LCD와 초음파 센서연결하기
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 16,2);
int distance;
int triggerPin = 5;
int echoPin = 6;
void setup( ) {
Serial.begin(9600);
pinMode(triggerPin, OUTPUT); // 트리거 핀 출력 설정
pinMode(echoPin, INPUT); // 에코 핀 입력 설정
lcd.init();
lcd.backlight(); // LCD초기 설정
}
void loop( ) {
// 트리거 핀으로 10 us의 펄스를 발생
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
//에코 핀 입력으로부터 거리를 cm 단위로 계산
distance = pulseIn(echoPin, HIGH) / 58;
distance = distance>100? 100:distance;
lcd.setCursor(0,0);
lcd.print("Distance");
lcd.setCursor(0,1);
lcd.print(distance);
lcd.print("cm ");
Serial.println(String(distance)+"cm");
delay(50);
}
반응형
'피지컬컴퓨팅 > 아두이노' 카테고리의 다른 글
아두이노 우노 + 2.4 TFT LCD 디스플레이 쉴드 터치 패널 ILI9341 (0) | 2023.04.17 |
---|---|
아두이노 선풍기(L9110) 팬모터로 만들기(버튼, 초음파센서) (0) | 2023.04.07 |
아두이노 우노와 브레드 보드 연결하기 (0) | 2023.04.02 |
아두이노 실습에 필요한 준비물을 알아보자 (0) | 2023.03.26 |
아두이노 프로젝트_04. 스마트 화분 (0) | 2022.08.10 |