Làm một máy tính đơn giản với Arduino và ma trận phím
Làm một máy tính đơn giản với Arduino và ma trận phím
- Linh kiện và giới thiệu mô hình
16 button
1 LCD 16×2
1 board Arduino Uno
1 test board và nhiều dây cắm test board
Pin 9v,đế pin và jack kết nối pin với Arduino
Đối với các bạn học sinh phổ thông,có lẽ chiếc máy tính cầm tay là 1 dụng cụ học tập không thể thiếu không chỉ trong môn toán mà còn rất nhiều môn khác nữa, ngoài ra,đây cũng là một thiết bị được sử dụng trong cuộc sống thường ngày đối với những tiểu thương,những người kinh doing,kỹ sư,.. đấy là một thiết bị quan trọng,tiện dụng và không thể thiếu,trong thời đại mà cuộc sống gắn liền với những con số và tính toán.
Trong bài này,đây sẽ là một ứng dụng hết sức thú vị khi ta mô phỏng hoạt động của một chiếc máy tính cầm tay đơn giản chỉ với 1 board Arduino đơn giản,kết hợp với ma trận phím và hiển thị trên màn hình LCD 16×2
- Sơ đồ toàn mạch
III.Kết nối các linh kiện
Đối với ma trận phím ta sẽ lần lượt kết nối 8 chân C1-C4 và R1-R4 với các chân digital từ 0-7
Còn LCD sẽ được kết nối qua các chân digital từ 8-13
Arduino Pin Name: | Connected to: |
D0 | 1st pin of the keyboard |
D1 | 2nd pin of the keyboard |
D2 | 3rd pin of the keyboard |
D3 | 4th pin of the keyboard |
D4 | 5th pin of the keyboard |
D5 | 6th pin of the keyboard |
D6 | 7th pin of the keyboard |
D7 | 8th pin of the keyboard |
D8 | Register select pin of LCD (pin 4) |
D9 | Enable pin of LCD (pin 6) |
D10 | Data pin 4 (pin 11) |
D11 | Data pin 4 (pin 11) |
D12 | Data pin 4 (pin 11) |
D13 | Data pin 4 (pin 11) |
+5V | Connected to Vdd pin of LCD (pin 2) |
Ground | Connected to Vss,Vee and RW pin of LCD (pin 1,3 and 5) |
III. Giải thích các linh kiện
Arduino Uno,nhận lệnh từ ma trận phím và xử lý lệnh,hiển thị trên LCD
LCD 16×2,nhận tín hiệu từ Arduino hiển thị một cách trực quan các phép tính
Ma trận phím 4×4 gồm 16 nút nhấn được kết nối với nhau như hình bên dưới
Ta quy định mỗi phím tương ứng với mỗi tọa độ là 1 chức năng cụ thể
10 số từ 0-9,các phép toán (+,-,x,/),phím chức năng ON,dấu(=) để đưa kết quả phép toán.
- Giải thích nguyên lý mạch
8 ngõ ra,kết nối với 8 chân digital trên Arduino chia làm 4 dòng,4 cột,hiển thị số theo tín hiệu điện áp có được khi ta nhấn phím theo tọa độ của phím nhấn qua chương trình.
Một thư viện gọi là “Keypad” sẽ được dùng để tìm ra phím nào được nhấn,ta phải tải riêng thư viện này và thêm vào ARDUINO IDE
Khi đã xác định được phím,các hoạt động liên quan sẽ được xác định như cộng,trừ,nhân,chia sẽ được thực hiện và hiển thị trõ trên màn hình LCD
Hàng bàn phím đươc kết nối từ chân 0 đến 3 của digital,cột bàn phím được kết nối từ 4 đến 7 của digital
Khi khởi động,tất cả các chân hàng được cấp mức logic cao,còn các chân cột được cấp mức logic thấp. Khi bấm button thì ngõ digital ở mức cao được kết nối với mức thấp,sự chênh lệch điện áp sẽ tạo thành 1 xung qua đó tạo ra một tín hiệu dựa trên vị trí tọa độ của nút nhấn trên ma trận phím và code trên thư viện keypad mà ta lập trình sẽ tạo nên một con số cụ thể.
Bấm phím 0-9 để chọn số cho vế trước của phép tính,sau đó bấm phím (+,-,x,/) để chọn phép toán số học mà ta cần,sau đó bấm tiếp số cho vế sau tương tự vế trước,cuối cùng bấm phím = để hiển thị ra kết quả cần tính.
- Giới thiệu về chương trình
_Như đã đề cập như trên,ma trấn phím sẽ được lập trình dựa trên thư viện Keypad đã được ad vào thư viện của IDE, những gì cần làm là khai báo và sử dụng các giá trị mảng của Pins cột và Pins hàng
onst byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
byte rowPins[ROWS] = { 0, 1, 2, 3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
_Để đưa thư viện Keypad ra ta cần khởi tạo keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad _Các chân kết nối giữa Arduino và LCD cũng là các chân digita từ 8 đến 13,dựa trên đó,ta sẽ khai báo các kiểu giá trị của từng biến và khởi tạo thư viện LiquidCrystal lcdconst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connectedLiquidCrystal lcd(rs, en, d4, d5, d6, d7); //create the LCD
_Ngoài những hàm đã nên trên,ta cần phải khởi tạo 1 vòng lặp trong phần void loop()
key = kpd.getKey(); //storing pressed key value in a char if (key!=NO_KEY)DetectButtons(); if (result==true)CalculateResult(); DisplayResult();
_Cuối cùng ta có được 1 chương trình hoàn chỉnh
/*
* Arduino Keypad calculator Program
*/
#include <LiquidCrystal.h> //Header file for LCD from https://www.arduino.cc/en/Reference/LiquidCrystal
#include <Keypad.h> //Header file for Keypad from https://github.com/Chris–A/Keypad
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
{‘7′,’8′,’9′,’D’},
{‘4′,’5′,’6′,’C’},
{‘1′,’2′,’3′,’B’},
{‘*’,’0′,’#’,’A’}
};
byte rowPins[ROWS] = { 0, 1, 2, 3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1,Num2,Number;
char key,action;
boolean result = false;
void setup() {
lcd.begin(16, 2); //We are using a 16*2 LCD display
lcd.print(“DIY Calculator”); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print(“-CircuitDigest”); //Display a intro message
- Tham khảo từ
https://circuitdigest.com/microcontroller-projects/arduino-calculator-using-4×4-keypad