프로그래밍은 항상 재미 있고 Arduino는 임베디드 프로그래밍을 막 시작하는 경우 훌륭한 플랫폼입니다. 이 튜토리얼에서는 Arduino로 자체 계산기를 구축합니다. 값은 키패드 (4x4 키패드) 를 통해 전송 될 수 있으며 결과는 LCD 화면 (16x2 Dot-matrix)에서 볼 수 있습니다. 이 계산기는 정수로 더하기, 빼기, 곱하기 및 나누기와 같은 간단한 작업을 수행 할 수 있습니다. 그러나 개념을 이해하면 Arduino의 내장 기능으로 과학적 기능도 구현할 수 있습니다.
이 프로젝트가 끝나면 Arduino에서 16x2 LCD 및 키패드를 사용하는 방법과 쉽게 사용할 수있는 라이브러리를 사용하여 프로그래밍하는 것이 얼마나 쉬운 지 알게됩니다. 특정 작업을 수행하기 위해 Arduino를 프로그래밍하는 방법도 이해하게됩니다.
필요한 재료:
- Arduino Uno (모든 버전이 작동 함)
- 16 × 2 LCD 디스플레이
- 4 × 4 키패드
- 9V 배터리
- 브레드 보드 및 연결 와이어
회로도:
이 Arduino 계산기 프로젝트 의 전체 회로도 는 위에 나와 있습니다. 회로도에 표시된 + 5V 및 접지 연결은 Arduino의 5V 및 접지 핀에서 얻을 수 있습니다. Arduino 자체는 노트북 또는 12V 어댑터 또는 9V 배터리를 사용하는 DC 잭을 통해 전원을 공급받을 수 있습니다.
Arduino와 함께 4 비트 모드로 LCD를 작동하므로 LCD의 마지막 4 개 데이터 비트 만 Arduino에 연결됩니다. 키보드에는 위와 같이 핀 0에서 핀 7까지 연결해야하는 8 개의 출력 핀이 있습니다. 다음 연결 테이블을 사용하여 Arduino와의 연결을 확인할 수 있으며 Arduino와의 4x4 키패드 인터페이스도 확인할 수 있습니다.
Arduino 핀 이름: |
연결됨: |
D0 |
1 번째 키보드 핀 |
D1 |
키보드의 두 번째 핀 |
D2 |
키보드의 세 번째 핀 |
D3 |
키보드의 4 번째 핀 |
D4 |
키보드의 5 번째 핀 |
D5 |
키보드의 6 번째 핀 |
D6 |
키보드의 7 번째 핀 |
D7 |
키보드의 8 번째 핀 |
D8 |
LCD의 선택 핀 등록 (핀 4) |
D9 |
LCD의 핀 활성화 (핀 6) |
D10 |
데이터 핀 4 (핀 11) |
D11 |
데이터 핀 4 (핀 11) |
D12 |
데이터 핀 4 (핀 11) |
D13 |
데이터 핀 4 (핀 11) |
+ 5V |
LCD의 Vdd 핀에 연결됨 (핀 2) |
바닥 |
LCD의 Vss, Vee 및 RW 핀에 연결 (핀 1,3 및 5) |
일부 아두 이노 보드는 0 번과 1 번 핀에 연결된 것이 있으면 프로그램을 업로드하는 동안 오류가 발생할 수 있으므로 프로그램을 업로드하는 동안 키패드를 제거하기 만하면됩니다.
연결이 완료되면 하드웨어는 다음과 같이 보입니다.
Arduino 계산기 프로그램:
전체 아두 이노 프로그램 이 프로젝트는이 프로젝트의 끝에 제공됩니다. 코드는 의미있는 작은 청크로 분할되어 아래에 설명되어 있습니다.
앞서 말했듯이 라이브러리를 사용하여 LCD와 키패드를 Arduino와 인터페이스 할 것 입니다. 따라서 먼저 Arduino IDE에 추가하겠습니다. LCD 용 라이브러리는 기본적으로 Arduino에 이미 포함되어 있으므로 걱정할 필요가 없습니다. 키패드 라이브러리의 경우 링크를 클릭하여 Github에서 다운로드하십시오. ZIP 파일을 얻은 다음 Sketch-> Include Library-> Add.ZIP 파일로이 lib를 Arduino에 추가하고 다운로드 한 파일의 위치를 가리 킵니다. 완료되면 프로그래밍 준비가 모두 완료되었습니다.
키패드를 사용하기 위해 라이브러리를 사용했지만 Arduino에 키패드에 대한 몇 가지 세부 사항 (아래 참조)을 언급해야합니다. ROWS와 COLS 변수는 키패드에있는 행과 열의 수를 알려주고 키맵은 키보드에 키가있는 순서를 보여줍니다. 이 프로젝트에서 사용하고있는 키패드는 아래의 키 맵과 동일하게 나타납니다.
아래 에서 변수 배열 rowPins 및 colPins를 사용하여 키패드가 연결된 핀에 대해 언급했습니다.
const 바이트 ROWS = 4; // 네 행 const byte COLS = 4; // 세 개의 열 // 키맵 정의 char keys = {{ '1', '2', '3', 'A'}, { '4', '5', '6', 'B'}, { '7', '8', '9', 'C'}, { '*', '0', '#', 'D'}}; 바이트 rowPins = {0, 1, 2, 3}; // 키패드 ROW0, ROW1, ROW2 및 ROW3을이 Arduino 핀에 연결합니다. 바이트 colPins = {4, 5, 6, 7}; // 키패드 COL0, COL1 및 COL2를이 Arduino 핀에 연결합니다.
사용중인 키패드 유형과 연결 방법을 언급했으면 아래 줄을 사용하여 해당 세부 정보를 사용하여 키패드 를 만들 수 있습니다.
키패드 kpd = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS); // 키패드 생성
마찬가지로 우리는 LCD가 연결된 Arduino의 핀에 대해서도 알려야 합니다. 회로도에 따르면 정의는 다음과 같습니다.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // LCD가 연결된 핀 LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // LCD 생성
설정 기능 내부에서 프로젝트 이름 만 표시 한 다음 메인 프로젝트가있는 while 루프로 진행합니다.
기본적으로 키패드에 입력 된 내용이 있는지 확인해야합니다. 입력하면 입력중인 내용을 인식 한 다음 "="를 눌렀을 때 변수로 변환해야합니다. 결과를 계산 한 다음 마지막으로 표시해야합니다. LCD에. 이것은 정확히 아래와 같이 루프 함수 내에서 수행되는 작업입니다.
key = kpd.getKey (); // 눌린 키 값을 문자에 저장 if (key! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult ();
각 함수 내에서 일어나는 일은 주석 줄을 사용하여 설명하고, 아래 전체 코드를 살펴보고, 실제로 작동하는 방식을 이해하기 위해 조작합니다. 특정 라인에 대해 의문이있는 경우 댓글 섹션이나 포럼을 자유롭게 사용하십시오.
Arduino 계산기 시뮬레이션:
Proteus 소프트웨어를 사용하여 프로젝트를 시뮬레이션 할 수도 있습니다. Proteus에는 자체적으로 Arduino 구성 요소가 없지만 쉽게 다운로드하여 라이브러리에 추가 할 수 있습니다. Proteus에 Arduino 구성 요소가 있으면 영숫자 LCD와 키패드를 추가하여 회로도에 표시된대로 연결합니다.
그런 다음 여기에서 16 진수 파일을 다운로드하고 Proteus에서 보드를 두 번 클릭하여 Arduino에 추가하고 다운로드 한 16 진수 파일에 "프로그램 파일"을 지정합니다. 시뮬레이션의 스냅 샷은 아래에 나와 있으며 전체 작업은 아래 비디오에 나와 있습니다.
참고: 제공된 16 진수 파일은 아래 제공된 프로그램의 원본과 동일하지 않습니다. 시뮬레이션 키패드와 실제 하드웨어 키패드의 키맵이 다르기 때문에 수정되었습니다.
Arduino 계산기 작동:
회로도에 따라 연결하고 아래 코드를 업로드하십시오. 오류가 표시되면 위에 제공된 지침에 따라 라이브러리를 추가했는지 확인하십시오. 하드웨어에 문제가 있는지 확인하기 위해 시뮬레이션을 시도 할 수도 있습니다. 모든 것이 예상대로 완료되면 하드웨어가 LCD에 다음과 같이 표시됩니다.
여기에 사용 된 키패드에는 적절한 표시가 없기 때문에 알파벳을 아래 나열된 연산자로 가정했습니다.
키패드의 문자 |
가정 |
"ㅏ" |
더하기 (+) |
"비" |
빼기 (-) |
"씨" |
곱셈 (*) |
"디" |
나눗셈 (/) |
“*” |
클리어 (C) |
"#" |
같음 (=) |
마커를 사용하여 각 버튼이 실제로 나타내는 내용을 쓸 수 있습니다.
완료되면 계산기 사용을 직접 시작할 수 있습니다. 숫자를 입력하고 두 번째 줄에 나타납니다. 피연산자를 누르고 두 번째 숫자를 입력하고 마지막으로 "#"키를 눌러 결과를 얻습니다. 이 터치 스크린 기반 Arduino 계산기를 구축해 볼 수도 있습니다.