산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 핀 절약: 4x3 키패드를 단 3개 연결으로 사용하기

부품 및 소모품

저항 330옴 1개
저항 1k옴 3개
저항 3k옴 1개
4x3 매트릭스 12키 키패드 1개
아두이노 우노 (Arduino UNO) 1개

필수 도구 및 기계

앱 및 온라인 서비스

프로젝트 소개

소개

이 프로젝트의 목적은 숫자 키패드에 필요한 핀 수를 크게 줄이는 것입니다. 아두이노 우노나 나노 보드에서 사용 가능한 I/O 핀보다 더 많은 핀이 필요할 때가 많기 때문입니다.

일반적인 숫자 키패드는 매트릭스 구조입니다. 4x3 키패드는 4+3=7개 아두이노 디지털 핀이 필요합니다. 이를 위한 수많은 라이브러리가 온라인에 있습니다.

제 해결책

제안하는 해결책은 아날로그 입력 3개만 사용하는 회로로 훨씬 효율적입니다 (다음 그림 참조).

각 열마다 4개 키에 해당하는 4개 전압 값과 키 미누름 시 0V가 나옵니다. 등가 회로 (b)에서 R1e는 네 저항 R1-R4 중 하나, R2e는 세 저항 R5-R7 중 하나를 나타냅니다.

가장 넓은 4개 구간을 만드는 방법을 봅시다. 우선 R2e = R5 = R6 = R7로 동일하게 만들고, R1 = 0으로 설정해 첫 번째 줄 출력을 5V로 만듭니다.

R2=330옴, R3=1k옴, R4=3k옴, R5=R6=R7=1k옴으로 설정하면 각 출력에서 다음 구간을 얻습니다:

구간 표 이미지 참조

세 출력 모두에서 가능한 가장 큰 구간을 얻었으며 ±5% 공차의 표준 저항 6개로 구현 가능합니다. 아날로그 입력과 저항 하나를 추가하면 4x4 키보드도 가능합니다. 다음 그림은 아두이노 연결 예시입니다.

회로도에서 저항 R1은 2번 라인에 연결되어 있습니다. 1번 라인 저항은 와이어로 대체돼 저항 번호가 하나씩 밀렸습니다. 핀 할당은 아날로그 설정 가능 핀이면 필요에 따라 수정 가능.

아두이노가 3.3V로 구동돼도 ADC 컨버터가 기본적으로 공급 전압을 기준 전압으로 쓰므로 ADC 값은 변하지 않습니다.

프로그램 테스트를 위해 이런 키패드가 없어 재활용 키로 직접 만들었습니다. 아래 사진이 프로토타입입니다. 오른쪽 5핀 커넥터로 아두이노와 연결.

코드

Analog4x3Keybf.ino

KeyPad() 함수 테스트용 간단 프로그램

/* program Analog4x3Keybf
 * 3개 아날로그 아웃으로 4x3 키 키보드 테스트
 * G. Carrera - 19/11/2018 
 */

// 키보드 출력 값 한계:
const int NADCm100[4] = {923, 669, 412, 156};
const int NADCp100[4] = {1123, 869, 612, 356};
const char key[13] = {'1','4','7','C','2','5','8','0','3','6','9','E'};
int keyval[3];
int i, colp, val;

void setup() {
  Serial.begin(9600); // 시리얼 모니터용
}

void loop() {
  char k;
  k = KeyPad(); // 키패드 읽기
  if (k != 'N') { // 키가 눌림
    Serial.print("key = ");
    Serial.println(k);
    delay(500);
  }
}

/******** 프로그램에서 사용하는 함수들 ********/
char KeyPad() {
  // 키패드 읽고 키 문자 반환, 키 없으면 'N'
  KeyScan(); // 아날로그 키보드 읽기
  if (keyval[0] + keyval[1] + keyval[2] < 40) {
    return 'N';
  } else { // 키가 눌림
    delay(10); // 디바운스
    KeyScan(); // 아날로그 키보드 다시 읽기
    for (i = 0; i < 3; i++) { // 어느 열인지 식별
      if (keyval[i] > 40) {
        colp = i;
        val = keyval[i]; // 해당 열의 값
        for (int j = 0; j < 4; j++) { // 열에서 어떤 키 눌렸는지 식별
          if (val >= NADCm100[j] && val <= NADCp100[j]) {
            return key[colp * 4 + j];
            break;
          }
        }
      }
    }
  }
}

void KeyScan() {
  // 아날로그 키보드 읽기
  keyval[0] = analogRead(A0);
  delay(1);
  keyval[1] = analogRead(A1);
  delay(1);
  keyval[2] = analogRead(A2);
  delay(1);
}

회로도

회로도 이미지 참조

제조공정

  1. 아두이노와 엑셀로 8×8 & 16×16 WS2812 RGB LED 매트릭스 애니메이션 제작 및 프로그래밍
  2. 스마트 식물 갈증 알림기 – DIY 토양 수분 센서로 최적의 수분 관리
  3. 이탈리안 워드 클럭(Word Clock) 제작: 아두이노 나노 + 네오픽셀 + LCD + RTC
  4. 아두이노 MKR Fox 1200으로 신뢰성 높은 시그폭스 kWh 미터 만들기
  5. 블루투스 온도 모니터: 아두이노 나노와 NTC 서미스터로 구현
  6. 터치프리 제스처 잠금장치: APDS-9960과 아두이노로 보안 액세스 구현
  7. 아두이노 나노 컴패니언 키트 – DIY 전자 작업을 위한 필수 부품 및 도구
  8. 아두이노 마이크로/레오나르도용 USB MIDI 어댑터 키트 – 전체 부품 리스트
  9. 아두이노용 절연 아날로그 입력 회로 만들기
  10. 아두이노 우노로 정밀 반응 속도 테스터 만들기