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

Làm một máy tính đơn giản với Arduino và ma trận phím

  1. 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

  1. 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.

  1. 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.

  1. 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

 

  1. Tham khảo từ

 https://circuitdigest.com/microcontroller-projects/arduino-calculator-using-4×4-keypad