본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 4X4 키패드 모듈을 사용해서 I2C 1602 LCD에 키값 출력해 보기

by 오마이엔지니어 2022. 11. 30.
반응형

Arduino Uno 로 4X4 키패드 모듈을 사용해서 I2C 1602 LCD에 키값을 출력해 보고
추가로 패스워드를 입력해서 릴레이 모듈을 제어해 보는 프로젝트입니다

<4X4 키패드 모듈 이미지>
4X4 키패드 모듈은 키패드와 기타 출력장치의 다양한 프로젝트와 테스트에 적합합니다

아두이노와 호환가능하며 LCD, 모니터 등 다양한 외부 장치를 활용 하는데 유용합니다
2.54mm 8핀 커넥터 (1~4핀은 "행" ROW , 5~8핀은 "열" COLUMN 구성입니다)

 


<4X4 키패드 모듈의 구성_2.54mm 8핀 커넥터 (1~4핀은 "행" ROW , 5~8핀은 "열" COLUMN 구성입니다)

사용된 부품

Arduino Uno R3 (Italy)

브래드 보드
4X4 키패드 모듈
I2C 1602 캐릭터 LCD 모듈

1채널 릴레이 모듈
점퍼케이블
5mm LED - 블루
막대저항 220 Ohm

사용된 키트
아두이노 4X4 키패드 키트

구성 배선도-I2C 1602 캐릭터 LCD에 키값 출력해 보기

 

구성 배선도-패스워드 입력해서 1채널 릴레이 모듈 제어해 보기

 

사용된 라이브러리

keypad.zip
0.02MB
LiquidCrystal_I2C.zip
0.02MB


사용된 예제소스 

Keypad I2C1602.txt
0.00MB
keypad I2C1602 Relay.txt
0.00MB


주의사항
기본적으로 위의 LiquidCrystal_I2C 라이브러리 설치가 필요합니다
라이브러리 설치 방법은 아래 링크(Arduino IDE 설치하기)를 참조해 주세요
Arduino IDE 설치하기

I2C 1602 캐릭터 LCD는 생산버전에 따라 I2C 주소가 다를수 있으므로 I2C 주소를 확인한 다음 테스트합니다
I2C 주소 확인 방법은 아래 링크를 참조해 주세요
Arduino Uno 로 I2C 1602/2004 캐릭터 LCD를 사용해보고 I2C 주소 확인해 보기

첫번쩨 Keypad I2C 1602 예제코드를 살펴보면

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
위 3가지 라이브러리를 사용하는것을 확인할 수 있습니다
Wire.h 라이브러리는 아두이노 IDE 설치시 기본 설치되는 라이브러리입니다
LiquidCrystal_I2C 라이브러리는 기존 다른버전의 LiquidCrystal_I2C가 이미 설치되어 있는경우
버전이 안 맞아서 컴파일 에러가 날수도 있습니다
(이 경우 기존 라이브러리를 백업후 삭제후 위 첨부된 라이브러리를 다운로드해서 설치해서 테스트합니다)

const byte ROWS = 4;
const byte COLS = 4;
4행 4열 세팅을 확인할 수 있습니다

char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
9,8,7,6 번 핀이 행(ROWS) 세팅이고, 5,4,3,2 번 핀이 열(COLS) 세팅입니다

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
customKeypad  키패드를 인식합니다

LiquidCrystal_I2C lcd(0x27, 16, 2);  
I2C 1602 LCD I2C 주소는 0x27 입니다, 0x27 이 아닌경우 I2C 주소 스캔 예제로 I2C 주소 확인후 변경해 줍니다

void setup(){
  lcd.backlight();
  lcd.init(); 
}
LCD를 인식합니다

void loop(){
  char customKey = customKeypad.getKey();
  if (customKey){
    lcd.clear();
    lcd.setCursor(0, 0); 
    lcd.print(customKey);
  }
}
LCD에 customKey 키값을 추력해 줍니다


두번째 Keypad I2C1602 Relay 예제를 살펴보면

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

첫번째 예제와 동일하게 위 3가지 라이브러리를 사용하는것을 확인할 수 있습니다

#define Password_Length 8 
패스워드 길이는 8로 세팅되어 있습니다

int signalPin = 12;
1채널 릴레이 모듈 신호핀은 12번 세팅입니다

char Data[Password_Length]; 
char Master[Password_Length] = "123456*"; 
패스워드는 123456*로 세팅되어 있습니다,
8자리 넘지않는 원하는 패스워드 변경후 테스트 해볼수 있습니다

const byte ROWS = 4;
const byte COLS = 4;
4행 4열 세팅을 확인할 수 있습니다


char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
9,8,7,6 번 핀이 행(ROWS) 세팅이고, 5,4,3,2 번 핀이 열(COLS) 세팅입니다

LiquidCrystal_I2C lcd(0x27, 16, 2);  
I2C 1602 LCD I2C 주소는 0x27 입니다, 0x27 이 아닌경우 I2C 주소 스캔 예제로 I2C 주소 확인후 변경해 줍니다

void loop(){

  lcd.setCursor(0,0);
  lcd.print("Enter Password:");

  customKey = customKeypad.getKey();
  if (customKey){
    Data[data_count] = customKey; 
    lcd.setCursor(data_count,1); 
    lcd.print(Data[data_count]); 
    data_count++; 
    }

LCD에 Enter Password 문구가 출력되고 패스워드 입력시 LCD에 customKey 키값이 출력 됩니다

 if(!strcmp(Data, Master)){
      lcd.print("Correct");
      digitalWrite(signalPin, HIGH); 
      delay(5000);
      digitalWrite(signalPin, LOW);
      }
    else{
      lcd.print("Incorrect");
      delay(1000);
      }

if 문을 사용해서 패스워드가 맞을때는 LCD에 Correct 가 표시되고 신호가 HIGH 로 출력되어
1채널 릴레이 모듈이 동작하고 딜레이 타임후 LOW로 출력되어 1채널 릴레이 모듈이 동작종료됩니다

else 그밖의 경우 패스워드가 맞지 않을때는 LCD에 Incorrect 가 표시됩니다

프로젝트 동영상-I2C 1602 캐릭터 LCD에 키값 출력해 보기


프로젝트 동영상-패스워드 입력해서 1채널 릴레이 모듈 제어해 보기


본 테스트에서 1채널 릴레이 모듈에 간단한 LED를 배선했지만 그밖의 별도 전원과 배선된
모터등을 연결해서도 릴레이 모듈로 제어할수 있습니다



반응형

댓글