본문 바로가기
  • 분말혼합기 배합기
자유게시판

아두이노 정밀 치수 확인 및 재단기 코딩

by 이진주방산업(고령공장) 2025. 10. 12.

"아두이노 정밀 재단 및 키패드 적용" "아두이노 정밀 재단 및 키패드 치수 적용 적용된 치수가 엔코더 읽어옴 그 치수가 동일 하면 릴레이 작동"

코딩 설계지 : 이진주방산업

코딩 자료

  • 엔코더 숫자: LCD 하단에 표시
  • 키패드 숫자: LCD 상단에 표시
  • 11번 핀 ON/OFF: 키패드 숫자 = 엔코더 숫자일 때만 HIGH
  • 입력 초기화, 완료, 신호 출력 기능 유지
  • 사용 목적
  • 정확한 치수 표시
  • 정밀 재단기 제작
  • 🔹 아두이노 UNO 핀 번호 정리
부품
핀/선
아두이노 UNO 핀
I2C LCD
SDA
A4
 
SCL
A5
 
VCC
5V
 
GND
GND
4x4 Keypad
Row 1
2
 
Row 2
3
 
Row 3
4
 
Row 4
5
 
Col 1
6
 
Col 2
7
 
Col 3
8
 
Col 4
9
Rotary Encoder
A (회전 신호)
12
 
B (회전 신호)
13
 
VCC
5V
 
GND
GND
신호 출력
핀 10 (기존 신호)
10
키패드=엔코더 동일시 ON
핀 11
11

모터 연결 코딩시 목표 치수에서 가감속 기능 첨가 하시면 더 정밀한 재단기 또는 치수를 제어 할 수 있습니다.

치수 오차 0.01

 

아두이노 키패드 및 LCD 엔코더 적용 정밀 치수 확인.txt
0.00MB

 

 

 

 

1. 라이브러리 포함

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

  • Wire.h: I2C 통신을 위한 라이브러리.
  • LiquidCrystal_I2C.h: I2C 방식 LCD 제어용 라이브러리.
  • Keypad.h: 키패드 입력 처리용 라이브러리.

2. 키패드 설정

const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {2, 3, 4, 5}; byte colPins[COLS] = {6, 7, 8, 9}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

  • 4x4 키패드 구성.
  • 각 행과 열 핀 설정.
  • 키패드 객체 생성.

3. LCD 설정

LiquidCrystal_I2C lcd(0x27, 16, 2);

  • I2C 주소 0x27, 16x2 LCD 생성.

4. 입력 및 출력용 변수

char input[17]; // 키패드 입력 저장 byte indexInput = 0; const int signalPin = 10; // 신호 출력용 const int matchPin = 11; // 키패드 숫자와 엔코더 값이 일치 시 ON


5. 엔코더 설정

const int encA = 12; const int encB = 13; int encoderPos = 0; int pinALast; int aVal;

  • 로터리 엔코더 A, B 핀 설정.
  • 엔코더 위치를 encoderPos로 추적.

6. setup() 함수

lcd.init(); lcd.backlight(); pinMode(signalPin, OUTPUT); digitalWrite(signalPin, LOW); pinMode(matchPin, OUTPUT); digitalWrite(matchPin, LOW); pinMode(encA, INPUT_PULLUP); pinMode(encB, INPUT_PULLUP); pinALast = digitalRead(encA); lcd.setCursor(0, 0); lcd.print("Input / Encoder"); lcd.setCursor(0, 1); lcd.print(encoderPos); Serial.begin(9600);

  • LCD 초기화 및 백라이트 켜기.
  • 신호 및 매치 핀 초기화.
  • 엔코더 핀 입력 설정.
  • 초기 LCD 화면: 상단 "Input / Encoder", 하단 엔코더 값 표시.
  • 시리얼 통신 시작.

7. loop() 함수

7-1. 엔코더 처리

aVal = digitalRead(encA); if (aVal != pinALast) { if (digitalRead(encB) != aVal) encoderPos++; else encoderPos--; lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(encoderPos); Serial.print("Encoder: "); Serial.println(encoderPos); } pinALast = aVal;

  • 엔코더 회전 방향 감지 후 encoderPos 증가/감소.
  • LCD와 시리얼 모니터에 실시간 출력.

7-2. 키패드 처리

char key = keypad.getKey(); if (key != NO_KEY) { // 초기화 if (key == 'C' || key == '#' || key == 'D') { ... } // 입력 완료 if (key == '*') { ... } // 신호 출력: B if (key == 'B') { ... } // 숫자 입력 if ((key >= '0' && key <= '9')) { ... } }

  • C, #, D 키: 입력 초기화, LCD와 매치핀 리셋.
  • *: 입력 완료, 입력값 시리얼 출력.
  • B: 입력값 또는 엔코더 값만큼 signalPin에 신호 출력.
  • 0~9 숫자 키: input 배열에 저장, LCD 상단에 표시.

7-3. 키패드 입력과 엔코더 비교

if (indexInput > 0) { int keypadValue = atoi(input); if (keypadValue == encoderPos) digitalWrite(matchPin, HIGH); else digitalWrite(matchPin, LOW); } else { digitalWrite(matchPin, LOW); }

  • 입력값과 엔코더 값이 같으면 matchPin ON, 다르면 OFF.
  • 입력값 없으면 OFF.

✅ 코드 요약

  1. 키패드 입력으로 숫자를 받고 LCD에 표시.
  2. 로터리 엔코더로 값 증가/감소를 실시간 표시.
  3. 입력값과 엔코더 값이 일치하면 특정 핀(matchPin) 활성화.
  4. B키를 눌러 입력값/엔코더 값만큼 신호를 출력(signalPin).
  5. C, #, D 키로 입력 초기화, * 키로 입력 완료.
사업자 정보 표시
이진주방산업 | 김해경 | 경상북도 고령군 다산면 상곡길33.1층(고령공장) | 사업자 등록번호 : 498-30-00242 | TEL : 010-2662-3322 | Mail : fb1234@naver.com | 통신판매신고번호 : 제2016-대구달서-0464 호 | 사이버몰의 이용약관 바로가기