Vi điều khiển hoạt động theo chương trình đã nạp sẵn, đọc các tín hiệu từ bên ngoài vào sau đó lưu trữ và xử lý, trên cơ sở đó đưa ra các thông báo, tín hiệu điều khiển các thiết bị ngoà
Trang 1LỜI NÓI ĐẦU
Ngày nay đại đa só các lĩnh vực sản xuất, điều khiển, giám sát, đo lường, đều được trang bị hệ thống tự động hóa Một trong số vi mạch được sử dụng đó là kỹ thuật vi điều khiển Nhờ tính năng ưu việt của bộ vi điều khiển như: khả năng lập trình phù hợp với thiết kế nhỏ và lớn cũng như khả năng giao tiếp với các thiết bị ngoại vi cà máy tính
đã đem lại sự hoàn hảo, độ chính xác cao và tính mềm dẻo cao thông qua các giao tiếp giữa người và máy.
Vi điều khiển quản lý và điều khiển hoạt động của hệ thống thông qua phần mềm, nhờ vậy mà có thể mở rộng và thay đổi hoạt động một cách dễ dàng bằng cách thay đổi một số thông số của chương trình Vi điều khiển hoạt động theo chương trình đã nạp sẵn, đọc các tín hiệu từ bên ngoài vào sau đó lưu trữ và xử lý, trên cơ sở đó đưa ra các thông báo, tín hiệu điều khiển các thiết bị ngoài theo đúng thông số yêu cầu của hệ thống.
Với đồ án vi điểu khiển, đề tài của em là “game mini trên trên LCD Nokia 5110”
sử dụng vi điều khiển atmega 328 tích hợp sẵn trong arduino nano.
Nội dung báo cáo đề tài gồm 5 phần:
1 Giới thiệt về đề tài
2 Giới thiệu vi điều khiển và các vi mạch liên quan
3 Thiết kế và thi công mạch
Trang 2CHƯƠNG 2: GIỚI THIỆU VĐK VÀ CÁC VI MẠCH LIÊN QUAN 7
3.7 Một số hình ảnh quá trình thi công đề tài 16
Trang 3CHƯƠNG 1: GIỚI THIỆU VỀ ĐỀ TÀI
1.1 Giới thiệu sơ lược đề tài
- Đề tài: Làm game mini trên LCD Nokia 5110
Hiện nay, các mạch ứng dụng sử dụng LCD để hiển thị rất phổ biến, chúng ta có thể bắt gặp ở các máy in 3D, máy cắt lazer, các mạch ứng dụng thực tế : đồng hồ, khóa điện tử, các thiết bị quan trắc,…
Các mạch ứng dụng sử dụng LCD để hiển thị các tùy chọn và thông số nhằm mục đích làm mạch nhỏ gọn hơn nhưng vẫn hiển thị đầy đủ các yêu cầu, chi phí rẻ và dễ dàng giao tiếp.
Với đề tài làm game mini trên LCD Nokia 5110 giúp em học cách giao tiếp và hiển thị LCD 5110 nói riêng và LCD, GLCD nói chung để sau này ứng dụng vào thực tiễn Đồng thời nâng cao khả năng lập trình, thiết kế mạch và tạo ra sản phẩm nhằm mục đích giải trí.
1.2 Sơ đồ khối hệ thống
Hình 1: Sơ đồ khối mạch game mini trên LCD 5110
Thành phần và chức năng của các khối:
- Khối nguồn:
+ Thành phần: Pin 9V, led báo nguồn.
+ Chức năng: cấp và kiểm tra nguồn cho tất cả các khối trong mạch.
Trang 4- Khối điều khiển:
+ Thành phần: gồm 8 nút nhấn 4 chân.
+ Chức năng: điều khiển đối tượng game bằng cách thay đổi trạng thái nút nhấn để đưa tín hiệu vào khối xử lý.
- Khối xử lý:
+ Thành phần: arduino nano sử dụng chíp atmega 328.
+ Chức năng: nhận tín hiệu từ khối điều khiển, xử lý dữ liệu, xuất tín hiệu hiển thị game ra khối hiển thị và tín hiệu thông báo đến khối tín hiệu báo.
- Khối hiển thị:
+ Thành phần: LCD Nokia 5110.
+ Chức năng: hiển thị các đối tượng và bối cảnh game.
- Khối tín hiệu báo:
+ Thành phần: buzzer, led báo.
+ Chức năng: buzzer và led thay đổi trạng thái khi được điểm hoặc khi kết thúc game.
1.3 Hình ảnh sản phẩm
Hình 1.2: Các kí hiệu nút nhấn của sản phẩm
Trang 5- Chơi game:
Dùng các nút (left), (right), (up), (down) để di chuyển đối tượng tùy thuộc vào từng game.
Led sẽ nhấp nháy và buzzer phát ra tiếng còi khi người chơi tăng điểm số.
Khi muốn trở lại màn hình chọn game ta nhấn nút (D).
Dùng nút (A) khi muốn tạm dừng trò chơi (Pause).
Trang 6Chương 2: GIỚI THIỆU VI ĐIỀU KHIỂN VÀ
2.1 Giới thiệu về mạch điều khiển arduino nano:
2.1.1 Giới thiệu tổng quan về arduino nano:
Arduino Nano là 1 bo mạch thiết kế với bộ xử lý trung tâm là vi điều khiển AVR temega328 Cấu tạo chính của Arduino Nano bao gồm các phần sau:
Hình 2.1: Board Arduino Nano
+ Cổng USB: đây là cổng giao tiếp để upload code từ PC lên vi điều khiển Đồng thời nó cũng là giao tiếp serial để truyền dữ liệu giữa vi điều khiển và máy tính + Có 14 chân vào/ra số đánh thứ tự từ 0 đến 13, ngoài ra có chân nối đất GND và chân điện áp tham chiếu AREF.
+ Vi điều khiển AVR: đây là bộ xử lý trung tâm của toàn board mạch Ở con Arduino Nano thì sử dụng Atmega 328.
2.1.2 Cấu tạo, sơ đồ chân arduino nano
+ Chân RX0, TX0: dùng để giao tiếp UART, ngoài ra nó còn có thể sử dụng như chân vào/ra dạng số.
+ Chân Reset: dùng để reset vi điều khiển khi cần thiết, trạng thái bình thường ở mức cao, khi chân RST ở mức thấp thì vi điều khiển được reset.
+ Chân GND: nối đất.
+ Chân D2-D13: là ngõ vào/ra dạng số, trong đó có 6 chân D3, D5, D6, D9, D10, D11 có thể xuất tín hiệu PWM ngõ ra.
+ Chân D2: INT0 ngắt ngoài 0.
+ Chân D2: INT1 ngắt ngoài 1.
+ Chân VIN: chân cấp nguồn cho arduino nano, điện áp giới hạn đầu vào 6-20V + Chân +5V: dùng để lấy nguồn 5V từ arduino nano hoặc cấp nguồn đúng 5V cho arduino nano hoạt động.
Trang 7+ Chân A0 – A7: chân ngõ vào dạng analog (tín hiệu tương tự).
+ Chân AREF: chân điện áp tham chiếu.
+ Chân 3V3: chân lấy nguồn 3V3 từ arduino nano.
+ Ngoài ra các chân còn có chức nawg khác như hỗ trợ giao tiếp I2C, SPI như hình.
Hình 2.2: Chức năng các chân arduino nano
2.1.3 Thông số kĩ thuật chi tiết:
+ Điện áp đầu vào kiến nghị: 7-12V
+ Điện áp đầu vào giới hạn: 6-20V
+ Dòng điện mỗi chân vào/ra 40mA
Trang 82.2 Giới thiệu LCD Nokia 5110
2.2.1 Giới thiệu tổng quan về LCD Nokia 5110
LCD Nokia 5110 thuộc dòng sản phầm Graphic LCD 84x48.
Hình 2.3: LCD Nokia 5110
LCD Nokia 5110 là màn hình LCD Graphic đơn giản với nhiều ứng dụng khác nhau Nguồn gốc màn hình này thực chất là từ các thế hệ điện thoại di động trước đây Nó
đã được gắn trên một bô PCB dễ dàng hàn gắn với các board khác.
LCD Nokia 5110 sử dụng vi điều khiển PCD8544, được sử dụng cùng với Nokia
3310 LCD trước đây PCD8544 là dạng low power CMOS controller/driver, được thiết kế vơi chế độ hiển thị màn hình graphic là 84 cột và 48 hàng Tất cả các chức năng cơ bản
đã được tích hợp sẵn trên chip, từ đó cho ta hiệu quả về một thiết bị ngoại vi chiếm ít nguồn tiêu thụ PCD8544 giao tiếp với vi điều khiển của chúng ta qua một loạt các chân bus đã được cung cấp sẵn.
2.2.2 Cấu tạo, sơ đồ chân LCD Nokia 5110
Qua sơ đồ trên, ta thấy được LCD Nokia 5110 được điều khiển toàn bộ bởi 5 cổng đầu vào, và 3 cổng nguồn, dưới dạng giao tiếp SPI, gồm:
Trang 9+ RST – Tín hiệu Reset, giúp khởi động, reset màn hình.
+ CE – Tín hiệu Chip Select, giúp đưa ra tín hiệu chọn chip hoạt động ở mức tích cực thấp.
+ DC – Tín hiệu Data/Command giúp ta chọn chế độ đưa lệnh vào PCD8544 là lệnh điều khiển, hay dữ liệu hiển thị.
+ DIN – Dữ liệu đầu vào có thể là lệnh điều khiển hoặc dữ liệu hiển thị màn hình + CLK – Xung Clock điều khiển.
+ VCC – Nguồn nuôi.
+ LIGHT – Đất cho đèn LED Backlight.
+ GND – Đất cho nguồn nuôi.
2.2.3 Giao tiếp với LCD Nokia 5110
Quá trình gửi dữ liệu từ vi điều khiển đến LCD NOKIA 5110 được chia làm 2 chế
độ Chế độ gửi lệnh điiều khiển LCD và chế độ gửi dữ liệu hiển thị ra LCD Đường tín hiệu DC cho phép chọn 1 trong 2 chế độ này.
- Nếu DC=0: dữ liệu gửi đến LCD được lưu vào thanh ghi Command Thanh ghi Command lưu trữ và thực thi các lệnh dùng để điều khiển sự hoạt động của Nokia LCD (dữ liệu này không được hiển thị ra màn hình).
- Nếu DC=1: dữ liệu gửi đến LCD được lưu vào thanh ghi Data Thanh ghi Data lưu trữ các giá trị dữ liệu hiển thị lên màn hình LCD.
Tín hiệu reset LCD được tạo ra khi chân RST được kéo xuống mức thâp (tức
RST=0) Khi đang truyền dữ liệu, nếu có tín hiệu reset LCD thì quá trình truyền sẽ bị hủy Cho đến khi chân RST ở mức cao (tức RST=1), trong chu kì xung clock tiếp theo,
Trang 10quá trinh truyền dữ liệu của byte vừa bị hủy sẽ được thực hiện lại.
Khi đường tín hiệu CE ở mức cao (tức CE=1), thì LCD sẽ không chấp nhận bất kỳ một dữ liệu nào từ VĐK gửi đến hay mọi dữ liệu hoặc lệnh lúc này đều không ảnh hưởng đến LCD.
Khi đường tín hiệu CE ở mức thấp (tức CE=0) thì data gửi đến LCD sẽ được chấp nhận cứ Sau mỗi chu kì của xung clock (xung cạnh lên) thì 1 bit dữ liệu được dịch vào LCD trên chân DIN.
Chân CE phải được giữ ở mức thấp(tức CE=0) cho tới khi việc gửi dữ liệu đến LCD hoàn tất.
Trang 11Chương 3: THIẾT KẾ VÀ THI CÔNG MẠCH
3.1 Sơ đồ mạch
Hình 3.1: Sơ đồ nguyên lý mạch
Hình 3.2: Sơ đồ mạch xử lý trung tâm và mạch tích hợp trong arduino nano
Trang 123.2 Khối điều khiển trung tâm
Arduino nano dử dụng chip vi điều khiển atmega328 có sơ đồ kết nối hình 3.2 Cấp nguồn Vcc = +5V cho vi điều khiển hoạt động, nguồn cần gắn thêm tụ để tránh mất dòng đột ngột cho vi điều khiển
Bộ dao động thạch anh có tác dụng tạo xung nhịp với tần số 16MHz cho VĐK hoạt động Hai đầu này được nối vào 2 chân XTAL1 và XTAL2 của atmega328.
Bộ RESET có tác dụng đưa vi điều khiển về trạng thái ban đầu Khi nút Reset được ấn điện áp +5V từ nguồn được nối vào chân Reset của vi điều khiển được chạy thẳng xuống đất lúc này điện áp tại chân vi điều khiển thay đổi đột ngột về 0, VĐK nhận biết được sự thay đổi này và khởi động lại trạng thái ban đầu cho hệ thống.
Hình 3.3: Sơ đồ mạch atmega328
3.3 Kết nối LCD Nokia 5110
LCD dùng để hiển thị, tối đa 48x84 pixel.
Trang 13Bàn phím là thiết bị đầu vào được kết nối với vi điều khiển, cung cấp tín hiệu cho
bộ xử lý trung tâm, sau khi phân tích tính hiệu và so sánh thì cho ra tín hiệu điều khiển tương ứng.
Trang 14Có 8 nút nhấn được kết nối với chân D8-11, A0-3 với âm nguồn có sử dụng điện trở nội lấy tín hiệu điều khiển số.
3.5 Kết nối buzzer và led tín hiệu
Buzzer và led tín hiệu được dùng để đưa ra tín hiệu thông báo.
Buzzer được nối tiếp với cực C của BJT C1815 lên Vcc, cực E bjt nối với GND, cực BJT B nối qua trở hạn dòng 4k7 và vào chân A4 của arduino, điều khiển theo tín hiệu ngõ ra dạng số, BJT hoạt động vùng dẫn bão hòa.
Cực âm led báo tín hiệu được nối với chân D13 của arduino, chân dương được nối với trở hạn dòng 220Ω lên Vcc Dòng qua led từ 10 – 20 mA.
Trang 15Hình 3.6: Mạch hạ áp LM1117 tích hợp sẵn trong arduino nano
3.7 Một số hình ảnh quá trình thi công đề tài
Hình 3.7: Vẽ mạch in 2 lớp
Trang 16Hình 3.8: Gia công mạch
Hình 3.9: Hàn linh kiện
Trang 17Hình 3.10: Gắn các linh kiện
Hình 3.11: Kiểm tra mạch
Trang 18Hình 3.12: Thiết kế và gia công khung
Hình 3.13: Sản phẩm hoàn thiện
Trang 19CHƯƠNG 4: LẬP TRÌNH VI ĐIỀU KHIỂN
4.1 Lưu đồ thuật toán
Hình 4.1: Sơ đồ thuật toán tổng quan
Phần lập trình, đề tài được chia làm 2 phần ứng với 2 sơ đồ thuật toán hình 4.1:
+ Phần khởi động và chọn game:
Dùng lệnh switch – case để chọn game.
Dùng lệnh if để kiểm tra điều kiện nút nhất.
+ Phần hàm game:
Đối tượng và bối cảnh được chia thành các lớp (class) khác nhau và được gọi
trong hàm chính bằng ngôn ngữ C++.
Trang 20Đối tượng được thay đổi vị trí dựa vào tác động của nút nhấn, bối cảnh được xuất hiện ngẫu nhiên và chuyển động với một phương trình cho sẵn Việc thay đổi vị trí của đối tượng và bối cảnh tức là thay đổi tọa độ của ảnh trên LCD.
Hàm va chạm để kiểm tra đối tượng này có chạm vào đối tượng kia hay không Sử dụng phương pháp kiểm tra hình chử nhật , kiểm tra 1 đỉnh của hình chữ nhật này có ở trong hình chữ nhật kia hay không Nếu có trả về Đúng, không trả về Sai.
Điểm số được cộng dồn khi kiểm tra đối tượng có va chạm với bối cảnh hay không, nếu có thì tăng điểm số, nếu không thì số mạng sẽ bị trừ, nếu số mạng bằng 0 thì
kết thúc – sử dụng lệnh if.
4.2 Các thư viện sử dụng trong chương trình
Thư viện dùng để giao tiếp với LCD Nokia 5110:
- Thư viện <Adafruit_PCD8544.h> thư viện dùng cho việc vẽ ảnh lên LCD Đây là thư viện được viết sẵn dành cho việc làm game trên arduino kết nối màn hình LCD.
- Ngoài ra cần có thư viện <Adafruit_GFX.h> , vì thư viện
<Adafruit_PCD8544.h> kế thừa thư viện này.
- Sử dụng thư viện:
+ Để sử dụng thư viện <Adafruit_PCD8544.h> ta khai báo :
1 #include <Adafruit_GFX.h>
2 #include <Adafruit_PCD8544.h>
+ Khởi tạo kết nối LCD với Arduino:
1 Adafruit_PCD8544 display = Adafruit_PCD8544( ,6 5 4 3);
+ Các hàm sử dụng trong thư viện:
display.setContrast(52); : Điều chỉnh độ tương phản
display.clearDisplay(); : Xóa màn hình và bộ đệm
display.drawBitmap(18,0,logo,48,48,1); : Hiển thị hình ảnh dạng bitmap
Trang 21display.setTextColor(BLACK); : Màu của chữ (đen hoặc trắng)
- Nguồn thư viện:
https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
4.3 Code chương trình
Code chương trình được trình bày trong phần Phụ lục.
Trang 22CHƯƠNG 5: KẾT LUẬN
5.1 Đánh giá đề tài
Qua quá trình thực hiện để hoàn thiện đề tài, tuy gặp nhiều khó khăn nhưng em đã
cố gắng hoàn thành các mục đích ban đầu, hệ thống hoạt động ổn định, các linh kiện hoạt động bình thường và không có dấu hiệu quá tải khi sử dụng lâu Phần thiết kế tương đối
ổn định, vững chắc, độ cơ động và linh hoạt cao vì có thế cầm tay, chính vì thế thiết bị có thế đáp ứng nhu cầu giải trí như ban đầu đặt ra Về chương trình, ngôn ngữ lập trình theo C++ nên có bố cục rõ ràng, dễ kiểm tra và kiểm soát, các lớp (class) có tính kế thừa nên thuận lợi cho việc phát triển và mở rộng khi viết các trò chơi sau này
Tuy nhiên, bên cạnh đó, đề tài còn có nhiều hạn chế và nhược điểm Ví dụ như chỉ
có ít game vì tiêu tốn nhiều bộ nhớ của vi điều khiển, thiết bị còn khá nặng vì sử dụng khung mica và pin,
5.2 Hướng phát triển đề tài
Do thời gian tìm hiểu và thực hiện đồ án có hạn, nên thiết bị còn nhiều thiếu sót Muốn đưa vào thực tế để sử dụng phổ biến, đề tài cần có các hướng phát triển:
+ Giao tiếp với thẻ nhớ SD để lưu các chương trình trò chơi từ đó có thể tăng số lượng và sự đa dạng của các trò chơi.
+ Sử dụng khung nhựa thay mica để giảm chi phí và khối lượng.
+ Thay thế các linh kiện sao cho phù hợp, đồng thời tiết kiệm được chi phí.
+ Phần thiết kế cần gọn nhẹ hơn, tháo gỡ để thay lắp các thiết bị dễ dàng, ví dụ: thay pin, vệ sinh thiết bị, sửa chữa thay thế,
Trang 23const int button1= 9;
const int button2= 8;
const int button3= 11;
const int button4= 10;
const int buttonA= A3;
const int buttonB= A2;
const int buttonC= A0;
const int buttonD= A1;
const int ledPoint= 12;
const int buzzer= A4;
Trang 26switch(Game) // chon game
Trang 29Chương trình class “Bia.h”
class Bia:public Object
Trang 30Chương trình class “ChaiBia.h”
class ChaiBia:public Object
Trang 32virtual void Update();
Chương trình class “Frame.h”
static const unsigned char PROGMEM bia [] = {
0xFF, 0xFF, 0xC0, 0xB0, 0x03, 0x40, 0xEC, 0x99, 0xC0, 0xAA, 0x25, 0x40, 0xEC, 0xA5, 0xC0, 0xAA, 0xBD, 0x40, 0xEC, 0xA5, 0xC0, 0xF0, 0x03, 0xC0, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0x80,
};
Trang 330x00, 0x3C, 0xFC, 0xFE, 0xA1, 0xBF, 0xE3, 0xFC, 0xFC, 0xF8, 0x92, 0xBF, 0xE3, 0xFC, 0xFC, 0xF8,
0x8C, 0xBF, 0xE3, 0xFD, 0xFC, 0xF8, 0x80, 0xBF, 0xE3, 0xFD, 0xFC, 0xF8, 0x80, 0xBF, 0xE3, 0xFD,
0xFC, 0xFE, 0x80, 0x5F, 0xE3, 0xFF, 0xF9, 0xFF, 0x81, 0x5F, 0xE3, 0xFF, 0xF9, 0xFF, 0x82, 0x4F,
0xE3, 0xFF, 0xF3, 0xFE, 0x46, 0x6F, 0xE3, 0xFF, 0xF3, 0xFE, 0x49, 0x27, 0x80, 0xFF, 0xE3, 0xFE,
0x4F, 0xB3, 0x80, 0xFF, 0xC7, 0xFE, 0x60, 0x11, 0xFF, 0xFF, 0x8F, 0xE4, 0x20, 0xE8, 0xFF, 0xFF,
0x1F, 0xC0, 0x31, 0xB6, 0x7F, 0xFE, 0x3F, 0x80, 0x11, 0x11, 0x3F, 0xFC, 0x7F, 0x80, 0x19, 0xB2,
Trang 340xC7, 0xE0, 0xFF, 0xC0, 0x0C, 0xE6, 0x30, 0x07, 0xFF, 0xE0, 0x06, 0x0C, 0x8F, 0xFF, 0xFF, 0xC0,
0x0E, 0x00, 0x07, 0xFF, 0xC8, 0xAF, 0x91, 0x00, 0x0F, 0xBB, 0xE2, 0x3F, 0xC0, 0x00, 0x0F, 0x93,
0xE7, 0x3F, 0xCC, 0x00, 0x0F, 0x83, 0xE7, 0x3F, 0xCE, 0x00, 0x1F, 0x83, 0xEF, 0xB9, 0xDE, 0x00,
0x1F, 0x83, 0xEF, 0xB9, 0xDF, 0x00, 0x1F, 0x83, 0xEF, 0xB9, 0xDF, 0x00, 0x1F, 0x83, 0xEF, 0xB9,
0xDF, 0x00, 0x1F, 0x83, 0xEF, 0xB9, 0x9F, 0x00, 0x0F, 0x83, 0xCF, 0x91, 0x1F, 0x00, 0x03, 0x01,
0x8F, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF,