ĐẠI HỌC BÁCH KHOA NỘI
TRƯỜNG ĐIỆN ĐIỆN TỬ
BÁO CÁO KẾT QUẢ
THỰC TẬP KỸ THUẬT
Đề tài: y dựng game SNAKE trên kit STM32
Đơn vị thực tập
Công ty cố phần Lumi Việt Nam
lớp ET3270
Nhóm 3
Nguyễn Đức Dương 20210259
Trần Xuân Quyến 20214068
Nguyễn Thanh Hải 20210311
Cồ Huy Dũng 20213834
Mục lục:
Lời nói đầu...........................................................................................3
Khái quát về nội dung thực tập ý nghĩa:...................................3
Khó khăn thuận lợi trong quá trình thực tập:............................3
Lời cảm ơn đến đơn vị tạo điều kiện thực tập:...............................3
Chương I. Giới thiệu chức năng, nhiệm vụ, cấu tổ chức của đơn
vị tiếp nhận......................................................................................5
I.1. Giới thiệu Công Ty Cổ Phần Lumi Việt Nam..............................5
I.2. Chức năng nhiệm vụ...........................................................5
I.3. cấu tổ chức.........................................................................5
I.4. Kết luận về tổng quan đơn vị thực tập.....................................6
Chương II. Nội dung thực tập............................................................7
II.1. Các vị trí công việc trong công ty...........................................7
II.2. tả lược công việc được giao trong quá trình thực tập...7
II.2. Các thông tin chi tiết về bài tập lớn Lập trình game Snake. 8
Chương III. Nhận xét, đề xuất.........................................................14
III.1. Về ưu điểm:..........................................................................14
III.2. Về nhược điểm:....................................................................14
III.3. Về đề xuất:...........................................................................14
Kết luận:............................................................................................15
I. Khái quát lại nội dung thực tập:..................................................15
II. Hệ thống nội dung thực tập:.......................................................15
III. Đánh giá lại nội dung thực tập:.................................................15
IV. Tổng kết:....................................................................................16
Tài liệu tham khảo:............................................................................17
1
2
Danh mục hình ảnh
Figure 0.1 Source code game Snake...................................................9
Figure 0.2 Source code game Snake - Cấu hình thời gian.................10
Figure 0.3 Màn hình khởi động..........................................................11
Figure 0.4 Bắt đầu trò chơi................................................................11
Figure 0.5 Đạt được 4 điểm sau 4 lần ăn..........................................12
Figure 0.6 Màn hình kết thúc.............................................................12
Figure 0.7 Lỗi khi hàm sinh thức ăn trả về ERROR............................13
3
Lời nói đầu
Trong thời đại số hóa liên kết hiện nay, lĩnh vực lập trình nhúng
Internet of Things (IoT) đang trở thành một phần quan trọng trong
sự phát triển của công nghiệp cuộc sống hàng ngày. Sự kết hợp
giữa nhúng IoT đã mở ra những hội mới, từ những thiết bị
thông minh tại nhà cho đến các ng dụng trong công nghiệp y tế.
Để thể tham gia vào hành trình này phát triển những kỹ năng
cần thiết, việc tham gia vào đợt thực tập kỹ thuật về lập trình nhúng
IoT trên STM32 tại Công ty Cổ phần Lumi Việt Nam đã trở thành
một trải nghiệm hết sức quý báu đối với chúng tôi.
Khái quát về nội dung thực tập ý nghĩa:
Đợt thực tập này đã mang lại cho chúng tôi hội học hỏi áp
dụng kiến thức thuyết vào thực tế trong lĩnh vực lập trình nhúng
IoT. Chúng tôi đã được tiếp cận với các dán thú vị thách thức
trong việc phát triển các ứng dụng nhúng trên nền tảng STM32, từ
việc lập trình bản cho đến xây dựng các hệ thống IoT phức tạp.
Điều này đã giúp chúng tôi cải thiện kỹ năng kỹ thuật, hiểu sâu hơn
về thiết bị nhúng hệ thống IoT, phát triển khả năng làm việc
theo nhóm.
Ngoài ra, đợt thực tập còn giúp chúng tôi hiểu rõ hơn về quy trình
làm việc trong môi trường công nghiệp tích luỹ được nhiều kinh
nghiệm quý báu trong việc làm việc đội nhóm, quản thời gian,
giải quyết các vấn đề kỹ thuật.
Khó khăn thuận lợi trong quá trình thực tập:
Trong suốt quá trình thực tập, chúng tôi đã phải đối mặt với nhiều
khó khăn thách thức. Việc làm việc với phần cứng nhúng thể
phức tạp đòi hỏi kiên nhẫn sự cẩn thận. Tuy nhiên, nhờ sự hỗ
4
trợ hướng dẫn tận tâm của Công ty Cổ phần Lumi Việt Nam,
chúng i đã hội vượt qua mọi khó khăn, học hỏi phát triển
từ những thử thách đó.
Lời cảm ơn đến đơn vị tạo điều kiện thực tập:
Cuối cùng, chúng tôi xin bày tỏ lòng biết ơn sâu sắc đến Công ty Cổ
phần Lumi Việt Nam đã cung cấp cho chúng tôi hội thực tập
đặc biệt đến tất cả các giảng viên nhà trường cùng nhân viên từ
phía quý công ty đã luôn ủng hộ chia sẻ kiến thức với chúng tôi
trong suốt thời gian này. Sự hỗ trợ của quý công ty đã giúp chúng tôi
tiến bộ phát triển không chỉ về kiến thức còn về duy kỹ
năng làm việc. Chúng tôi cũng xin trân trọng cảm ơn trường Điện
Điện tử đã tạo điều kiện cho chúng tôi thực tập tại quý công ty!
Chúng tôi hy vọng rằng báo cáo thực tập này sẽ thể hiện được những
nỗ lực của chúng tôi trong suốt thời gian thực tập đóng góp nhỏ
vào sự phát triển của lĩnh vực lập trình nhúng IoT trong tương
lai.
5
Chương I. Giới thiệu chức năng, nhiệm vụ,
cấu tổ chức của đơn vị tiếp nhận
I.1. Giới thiệu Công Ty Cổ Phần Lumi Việt Nam
Công ty Cổ phần Lumi Việt Nam một đơn vị hoạt động trong lĩnh
vực công nghệ phát triển sản phẩm dựa trên công nghệ lập trình
nhúng IoT (Internet of Things). Được thành lập với mục tiêu đem
đến các giải pháp thông minh kết nối cho người dùng, Lumi Việt
Nam đã đang đóng góp đáng kể vào sự phát triển của ngành công
nghiệp công nghệ thông tin trí tuệ nhân tạo.
I.2. Chức năng nhiệm vụ
Công ty Cổ phần Lumi Việt Nam chú trọng vào việc nghiên cứu, phát
triển, triển khai các ứng dụng IoT thông minh. sở hạ tầng của
công ty này bao gồm các phòng lab môi trường thử nghiệm tiên
tiến, được trang bị c thiết bị nhúng cảm biến, giúp hỗ trợ việc
phát triển các sản phẩm dự án IoT đa dạng. Nhiệm vụ chính của
Công ty Cổ phần Lumi Việt Nam bao gồm:
Nghiên cứu phát triển sản phẩm IoT: ng ty tham gia vào
việc nghiên cứu phát triển các sản phẩm IoT tiên tiến, bao
gồm các thiết bị thông minh hệ thống kết nối.
Triển khai dự án IoT: Cung cấp dịch vụ triển khai các dự án IoT
cho các công ty tổ chức khác, từ việc thiết kế hệ thống đến
triển khai quản .
Đào tạo nâng cao năng lực: Công ty đóng vai trò quan trọng
trong việc đào tạo nâng cao năng lực trong lĩnh vực IoT
lập trình nhúng thông qua các khóa học đào tạo chuyên
nghiệp.
6
I.3. cấu tổ chức
Công ty Cổ phần Lumi Việt Nam một cấu tổ chức chuyên
nghiệp với các bộ phận vị trí quan trọng bao gồm:
Ban Lãnh đạo: Bao gồm CEO, Giám đốc kỹ thuật, các quản
cấp cao.
Bộ phận Nghiên cứu Phát triển: Đội ngũ chuyên gia kỹ thuật
phần mềm đảm nhận việc nghiên cứu phát triển sản
phẩm dự án IoT.
Bộ phận Kỹ thuật: Chịu trách nhiệm về thiết kế, phát triển
triển khai các giải pháp IoT.
Bộ phận Kinh doanh Tiếp thị: Tập trung vào việc xây dựng
mối quan hệ với khách hàng, tiếp thị sản phẩm dịch vụ,
cũng như quản dự án.
Bộ phận Hỗ trợ kỹ thuật: Đội ngũ chuyên gia hỗ trợ khách hàng
xử sự cố kỹ thuật.
I.4. Kết luận về tổng quan đơn vị thực tập
Công ty Cổ phần Lumi Việt Nam đóng một vai trò quan trọng trong
việc phát triển ứng dụng công nghệ IoT tại Việt Nam. Chúng tôi
rất vinh dự được thực tập tại đơn vị này tin rằng trải nghiệm này
sẽ đóng góp vào s phát triển của chúng tôi trong lĩnh vực lập trình
nhúng IoT.
7
Chương II. Nội dung thực tập
II.1. Các vị trí công việc trong công ty
Trong Công ty Cphần Lumi Việt Nam, nhiều vị trí công việc khác
nhau, nhưng trong phạm vi báo cáo này, chúng tôi sẽ tập trung vào
tả vị trí Kỹ Lập trình nhúng & IoT, vị trí chúng tôi đã thực
tập.
Kỹ Lập trình Nhúng & IoT - Yêu cầu chuyên môn kỹ năng:
Kiến thức bản về lập trình C C++, đặc biệt trong ngữ
cảnh nhúng.
Hiểu biết về kiến thức bản về điện tử vi mạch nhúng.
Khả năng làm việc với các bộ phát triển nhúng như STM32,
Arduino, Raspberry Pi, nền tảng phần mềm liên quan.
Kỹ năng thực hiện việc phát triển, kiểm tra triển khai các
ứng dụng IoT.
Khả năng giải quyết vấn đề phân tích các vấn đề kỹ thuật.
Công ty Cổ phần Lumi Việt Nam hoạt động trong lĩnh vực công nghệ
thông tin trí tuệ nhân tạo, tập trung vào phát triển các giải pháp
IoT thông minh sản phẩm công nghệ thông tin. Các lĩnh vực hoạt
động chuyên môn bao gồm:
Phát triển sản phẩm IoT: ng ty nghiên cứu phát triển các
sản phẩm IoT thông minh, bao gồm các thiết bị kết nối các
ứng dụng điều khiển.
Dự án IoT tùy chỉnh: Cung cấp dịch vụ thiết kế triển khai dự
án IoT tùy chỉnh cho khách hàng từ nhiều lĩnh vực khác nhau,
như gia đình thông minh, công nghiệp, y tế, nhiều lĩnh vực
khác.
Đào tạo hỗ trợ: Đào tạo hỗ trợ khách hàng cũng như các
chuyên gia trở thành chuyên gia trong lĩnh vực IoT lập trình
nhúng.
8
II.2. tả lược công việc được giao trong quá trình thực
tập
Trong đợt thực tập của chúng tôi tại Công ty Cổ phần Lumi Việt Nam,
chúng tôi đã được giao các công việc như sau:
Làm quen s dụng Kit STM32: Ban đầu, chúng tôi đã được
hướng dẫn làm quen với kit phát triển STM32, một nền tảng
phổ biến cho lập trình nhúng. Chúng tôi đã tìm hiểu cách s
dụng các thành phần của kit, bao gồm vi xử STM32, cảm
biến, các mạch nối.
Bài tập lớn - lập trình game Snake: Trong suốt khoảng thời gian
một tháng thực tập, chúng tôi đã phải lựa chọn thực hiện
một bài tập nhóm. Cụ thể, chúng tôi đã được giao nhiệm vụ lập
trình trò chơi Snake trên kit STM32 kit mở rộng của công ty.
Chúng tôi đã sử dụng ngôn ngữ lập trình C để thực hiện dự án
này.
Hướng dẫn thực hành lập trình: Công ty đã thiết lập lịch thực
tập hàng tuần tại thư viện Tạ Quang Bửu. Trong các buổi thực
tập, nhân viên của công ty Lumi đã đến đ hướng dẫn chúng
tôi về lập trình thực hành thông qua các bài học đã chuẩn bị
trước.
Điều này đã giúp chúng tôi áp dụng kiến thức học được từ lớp học
vào thực tế, nắm vững việc sử dụng kit STM32 phát triển ứng
dụng nhúng, cũng n trau dồi kỹ năng làm việc nhóm giải quyết
các vấn đề kỹ thuật trong qtrình thực tập.
9
II.2. Các thông tin chi tiết về bài tập lớn Lập trình game
Snake
II.2.1. Yêu cầu kỹ năng phục vụ đề tài:
Lập trình nhúng C: Biết cách sử dụng STM32 sử dụng ngôn
ngữ lập trình C. Hiểu được cách cấu hình GPIO, timers,
biết cách làm việc với các thiết bị ngoại vi.
Bộ vi điều khiển STM32: Làm quen với bộ vi điều khiển
STM32F401RE, bao gồm bảng datasheet, tài liệu tham
khảo môi trường phát triển (ví dụ: STM32CubeIDE hoặc
Keil). trong đề tài này, chúng tôi sử dụng
STM32CubeIDE.
Logic Game: khả năng thiết kế triển khai logic trò
chơi cho game Snake, bao gồm cách con rắn di chuyển,
dài ra cũng như cách xử các va chạm với tường thức
ăn.
II.2.2. Công việc của các thành viên trong nhóm:
Phạm Hồng Thi: Triển khai thuật toán.
Phạm Minh Quang: Triển khai thuật toán.
Nguyễn Phương Linh: Kiểm thử soát lại logic thuật
toán, kiểm tra khai báo phần cứng.
10
II.2.3. Một số hình ảnh về source code phục vụ quá trình.
Figure 0.1 Source code game Snake
Luồng dữ liệu của thuật toán bao gồm các hàm:
platform_get_control(snake_t * snake) : Nhận tín hiệu di
chuyển từ nút bấm.
snake_move(snake_t* snake): Xác định hướng di chuyển
dựa trên nút bấm đã nhận.
snake_haseaten(snake_t* snake, food_t* food): Kiểm tra
xem trạng thái thức ăn đã được ăn hay chưa.
snake_display(snake_t* snake): Hiển thị con rắn lên màn
hình LCD.
snake_place_food(snake_t* snake, food_t* food, uint32_t
tick): sinh ra thức ăn mới.
Score(): Hiển thị điểm số hiện tại lên LCD.
Delay_ms(speed):tham số delay biểu thị tốc độ di
chuyển con rắn.
Nếu trạng thái của con rắn khác PLAYING=> thoát trò
chơi, lưu lại điểm số lên màn hình.
11
Figure 0.2 Source code game Snake - Cấu hình thời gian
Cấu hình sử dụng Timer(TIM5) để tạo hàm Delay() chương
trình không gây hiện tượng treo( lặp hạn):
Ghi 1 vào bit thứ 3 của thanh ghi APB1ENR => Bật
clock cho Timer5.
Do tần số hoạt động được cấu hình sẵn 84MHz =>
Ghi giá trị vào thanh ghi PSC để xác định giá trị chia
tần nhằm đặt được tần số đếm 1Mhz.
Đặt giá trị tràn của thanh ghi ARR giá trị tối đa của
số 16 bit (có thể sử dụng giá trị 0xffff ffff để tăng độ
chính xác) .
Ghi 1 vào bit 0 thanh ghi CR1 => Bật điều thanh ghi
điều khiển.
Kiểm tra: nếu bit 0 của thanh ghi SR 0 thì Timer5
chưa đếm xong tiếp tục chờ đếm hết chu kỳ định thời
của Timer.
12
Trong hàm Delay_us(), thanh ghi đếm CNT được đặt giá
trị dếm từ 0, mỗi giá trị đếm tăng lên tương ứng 1us
trôi qua.
II.2.4. Một số hình ảnh về game đã hoạt động trên kit
STM32:
Figure 0.3 Màn hình khởi động
Figure 0.4 Bắt đầu trò chơi
13
Figure 0.5 Đạt được 4 điểm sau 4 lần ăn
Figure 0.6 Màn hình kết thúc
14
Figure 0.7 Lỗi khi hàm sinh thức ăn trả về ERROR
15
Chương III. Nhận xét, đề xuất
III.1. Về ưu điểm:
Game đã làm chạy được các chức năng bản như đã tạo ra đồ ăn
ngẫu nhiên, cho phép rắn di chuyển trên dưới trái phải, tăng chiều
dài của rắn sau khi ăn được, thể tăng giảm tốc độ di chuyển của
rắn, thể pause play khi người dùng muốn, bị game over khi
chạm đầu vào tường.
III.2. Về nhược điểm:
Game vẫn còn xử khá chậm, do phản hồi của nút bấm chưa cao.
Giao diện UI trải nghiệm người dùng vẫn chưa thực sự cao.
III.3. Về đề xuất:
Sau khi thực hành viết chương trình game Snake, chúng tôi đưa ra
một số đề xuất để cải thiện game như sau:
Thay tăng tốc độ di chuyển của rắn như thông thường thì
sẽ chia thành 3 mức độ: Easy, Medium, Hard với các tốc độ
phù hợp tương ứng với mức score phợp.
Mở rộng thêm các map với nhiều địa hình thú vị hơn cho
người dùng.
Tăng các trải nghiệm UX. dụ như thay thế các nút button
để dễ dàng cho người sử dụng hơn.
16
Kết luận:
Trong quá trình thực tập kỹ thuật tại Công ty Cổ phần Lumi Việt Nam,
chúng tôi đã hội tiếp cận áp dụng kiến thức thuyết của
môn học vào thực tế trong lĩnh vực lập trình nhúng IoT. Bản kết
luận sau đây sẽ khái quát hệ thống đánh giá lại các nội dung đã
thực tập.
I. Khái quát lại nội dung thực tập:
Trong chương 2 của báo cáo này, chúng tôi đã trình bày về vị trí công
việc của Kỹ lập trình nhúng & IoT tại Công ty Lumi Việt Nam, cũng
như tả các lĩnh vực hoạt động chuyên môn của công ty. Chúng tôi
đã tả chi tiết nhiệm vụ các công việc được giao trong đợt thực
tập, bao gồm làm quen sử dụng kit STM32, lập trình game Snake
trên nền tảng STM32 kit mở rộng của công ty. Chúng tôi cũng đã
nhấn mạnh việc thực tập diễn ra dưới sự hướng dẫn của nhân viên
của công ty Lumi tại thư viện Tạ Quang Bửu.
II. Hệ thống nội dung thực tập:
Trong quá trình thực tập, chúng tôi đã xây dựng một hệ thống kiến
thức kỹ năng quan trọng trong lĩnh vực lập trình nhúng IoT.
Chúng tôi đã nắm vững việc sử dụng kit STM32 phát triển ứng
dụng trên nền tảng này bằng ngôn ngữ lập trình C. Ngoài ra, chúng
tôi cũng đã học được cách làm việc trong môi trường thực tế, từ việc
quản thời gian cho đến cách làm việc theo nhóm giải quyết các
vấn đề kỹ thuật.
17
III. Đánh giá lại nội dung thực tập:
Đợt thực tập tại Công ty Cổ phần Lumi Việt Nam đã đáp ứng được
nhiều mục tiêu quan trọng. Chúng tôi đã hội áp dụng kiến thức
vào thực tế, nắm bắt các kiến thức mới phát triển kỹ năng cần
thiết trong lĩnh vực lập trình nhúng IoT. hình hướng dẫn
thực tập tại thư viện Tạ Quang Bửu đã giúp chúng i tiếp xúc với
môi trường thực tế cải thiện khả năng làm việc nhóm.
Mặc khó khăn thách thức, chúng tôi luôn nhớ đến sự hỗ trợ
sự chỉ dẫn tận tâm của đội ngũ giảng viên nhân viên của Công
ty Lumi Việt Nam. Điều này đã đóng góp đáng kể vào sự phát triển
của chúng tôi trong quá trình thực tập.
IV. Tổng kết:
Chúng tôi xin kết thúc báo cáo thực tập này với lòng biết ơn sâu sắc
đến Công ty Cổ phần Lumi Việt Nam đã cung cấp cho chúng tôi
hội thực tập đến tất cả những người đã hỗ trợ hướng dẫn
chúng tôi trong suốt thời gian này. Đợt thực tập này đã một phần
quan trọng trong hành trình học tập phát triển nghề nghiệp của
chúng tôi, chúng tôi sẽ tiếp tục xây dựng trên nền tảng này trong
tương lai.
18
Tài liệu tham khảo:
1. Tài liệu được công ty cổ phần Lumi Việt Nam cấp trong quá
trình thực tập:
https://drive.google.com/drive/folders/
11O0TtUw7Tlm81DoNII2US_4i8ZAw4hSh?usp=drive_link
2. SDK_NUCLEO_F401RE: https://github.com/HoangNH95/IOT-
Programming-with-Master-Embedded/blob/master/Courseware
%202/SDK_1.0.3_NUCLEO-F401RE.7z
3. RM0368: STM32F401 Reference manual:
https://www.st.com/resource/en/reference_manual/rm0368-
stm32f401xbc-and-stm32f401xde-advanced-armbased-32bit-
mcus-stmicroelectronics.pdf
19

Preview text:

ĐẠI HỌC BÁCH KHOA HÀ NỘI
TRƯỜNG ĐIỆN – ĐIỆN TỬ BÁO CÁO KẾT QUẢ
THỰC TẬP KỸ THUẬT
Đề tài: Xây dựng game SNAKE trên kit STM32 Đơn vị thực tập
Công ty cố phần Lumi Việt Nam Mã lớp ET3270 Nhóm 3 Họ và Tên MSSV Nguyễn Đức Dương 20210259 Trần Xuân Quyến 20214068 Nguyễn Thanh Hải 20210311 Cồ Huy Dũng 20213834 Mục lục:
Lời nói đầu...........................................................................................3
Khái quát về nội dung thực tập và ý nghĩa:...................................3
Khó khăn và thuận lợi trong quá trình thực tập:............................3
Lời cảm ơn đến đơn vị tạo điều kiện thực tập:...............................3
Chương I. Giới thiệu chức năng, nhiệm vụ, cơ cấu tổ chức của đơn
vị tiếp nhận......................................................................................5
I.1. Giới thiệu Công Ty Cổ Phần Lumi Việt Nam..............................5
I.2. Chức năng và nhiệm vụ...........................................................5
I.3. Cơ cấu tổ chức.........................................................................5
I.4. Kết luận về tổng quan đơn vị thực tập.....................................6
Chương II. Nội dung thực tập............................................................7
II.1. Các vị trí công việc trong công ty...........................................7
II.2. Mô tả sơ lược công việc được giao trong quá trình thực tập...7
II.2. Các thông tin chi tiết về bài tập lớn – Lập trình game Snake. 8
Chương III. Nhận xét, đề xuất.........................................................14
III.1. Về ưu điểm:..........................................................................14
III.2. Về nhược điểm:....................................................................14
III.3. Về đề xuất:...........................................................................14
Kết luận:............................................................................................15
I. Khái quát lại nội dung thực tập:..................................................15
II. Hệ thống nội dung thực tập:.......................................................15
III. Đánh giá lại nội dung thực tập:.................................................15
IV. Tổng kết:....................................................................................16
Tài liệu tham khảo:............................................................................17 1 2 Danh mục hình ảnh
Figure 0.1 Source code game Snake...................................................9
Figure 0.2 Source code game Snake - Cấu hình thời gian.................10
Figure 0.3 Màn hình khởi động..........................................................11
Figure 0.4 Bắt đầu trò chơi................................................................11
Figure 0.5 Đạt được 4 điểm sau 4 lần ăn..........................................12
Figure 0.6 Màn hình kết thúc.............................................................12
Figure 0.7 Lỗi khi hàm sinh thức ăn trả về ERROR............................13 3 Lời nói đầu
Trong thời đại số hóa và liên kết hiện nay, lĩnh vực lập trình nhúng
và Internet of Things (IoT) đang trở thành một phần quan trọng trong
sự phát triển của công nghiệp và cuộc sống hàng ngày. Sự kết hợp
giữa nhúng và IoT đã mở ra những cơ hội mới, từ những thiết bị
thông minh tại nhà cho đến các ứng dụng trong công nghiệp và y tế.
Để có thể tham gia vào hành trình này và phát triển những kỹ năng
cần thiết, việc tham gia vào đợt thực tập kỹ thuật về lập trình nhúng
và IoT trên STM32 tại Công ty Cổ phần Lumi Việt Nam đã trở thành
một trải nghiệm hết sức quý báu đối với chúng tôi.
Khái quát về nội dung thực tập và ý nghĩa:
Đợt thực tập này đã mang lại cho chúng tôi cơ hội học hỏi và áp
dụng kiến thức lý thuyết vào thực tế trong lĩnh vực lập trình nhúng
và IoT. Chúng tôi đã được tiếp cận với các dự án thú vị và thách thức
trong việc phát triển các ứng dụng nhúng trên nền tảng STM32, từ
việc lập trình cơ bản cho đến xây dựng các hệ thống IoT phức tạp.
Điều này đã giúp chúng tôi cải thiện kỹ năng kỹ thuật, hiểu sâu hơn
về thiết bị nhúng và hệ thống IoT, và phát triển khả năng làm việc theo nhóm.
Ngoài ra, đợt thực tập còn giúp chúng tôi hiểu rõ hơn về quy trình
làm việc trong môi trường công nghiệp và tích luỹ được nhiều kinh
nghiệm quý báu trong việc làm việc đội nhóm, quản lý thời gian, và
giải quyết các vấn đề kỹ thuật.
Khó khăn và thuận lợi trong quá trình thực tập:
Trong suốt quá trình thực tập, chúng tôi đã phải đối mặt với nhiều
khó khăn và thách thức. Việc làm việc với phần cứng nhúng có thể
phức tạp và đòi hỏi kiên nhẫn và sự cẩn thận. Tuy nhiên, nhờ sự hỗ 4
trợ và hướng dẫn tận tâm của Công ty Cổ phần Lumi Việt Nam,
chúng tôi đã có cơ hội vượt qua mọi khó khăn, học hỏi và phát triển
từ những thử thách đó.
Lời cảm ơn đến đơn vị tạo điều kiện thực tập:
Cuối cùng, chúng tôi xin bày tỏ lòng biết ơn sâu sắc đến Công ty Cổ
phần Lumi Việt Nam đã cung cấp cho chúng tôi cơ hội thực tập và
đặc biệt là đến tất cả các giảng viên nhà trường cùng nhân viên từ
phía quý công ty đã luôn ủng hộ và chia sẻ kiến thức với chúng tôi
trong suốt thời gian này. Sự hỗ trợ của quý công ty đã giúp chúng tôi
tiến bộ và phát triển không chỉ về kiến thức mà còn về tư duy và kỹ
năng làm việc. Chúng tôi cũng xin trân trọng cảm ơn trường Điện –
Điện tử đã tạo điều kiện cho chúng tôi thực tập tại quý công ty!
Chúng tôi hy vọng rằng báo cáo thực tập này sẽ thể hiện được những
nỗ lực của chúng tôi trong suốt thời gian thực tập và đóng góp nhỏ
bé vào sự phát triển của lĩnh vực lập trình nhúng và IoT trong tương lai. 5
Chương I. Giới thiệu chức năng, nhiệm vụ,
cơ cấu tổ chức của đơn vị tiếp nhận
I.1. Giới thiệu Công Ty Cổ Phần Lumi Việt Nam
Công ty Cổ phần Lumi Việt Nam là một đơn vị hoạt động trong lĩnh
vực công nghệ và phát triển sản phẩm dựa trên công nghệ lập trình
nhúng và IoT (Internet of Things). Được thành lập với mục tiêu đem
đến các giải pháp thông minh và kết nối cho người dùng, Lumi Việt
Nam đã và đang đóng góp đáng kể vào sự phát triển của ngành công
nghiệp công nghệ thông tin và trí tuệ nhân tạo.
I.2. Chức năng và nhiệm vụ
Công ty Cổ phần Lumi Việt Nam chú trọng vào việc nghiên cứu, phát
triển, và triển khai các ứng dụng IoT thông minh. Cơ sở hạ tầng của
công ty này bao gồm các phòng lab và môi trường thử nghiệm tiên
tiến, được trang bị các thiết bị nhúng và cảm biến, giúp hỗ trợ việc
phát triển các sản phẩm và dự án IoT đa dạng. Nhiệm vụ chính của
Công ty Cổ phần Lumi Việt Nam bao gồm:
Nghiên cứu và phát triển sản phẩm IoT: Công ty tham gia vào
việc nghiên cứu và phát triển các sản phẩm IoT tiên tiến, bao
gồm các thiết bị thông minh và hệ thống kết nối.
Triển khai dự án IoT: Cung cấp dịch vụ triển khai các dự án IoT
cho các công ty và tổ chức khác, từ việc thiết kế hệ thống đến triển khai và quản lý.
Đào tạo và nâng cao năng lực: Công ty đóng vai trò quan trọng
trong việc đào tạo và nâng cao năng lực trong lĩnh vực IoT và
lập trình nhúng thông qua các khóa học và đào tạo chuyên nghiệp. 6 I.3. Cơ cấu tổ chức
Công ty Cổ phần Lumi Việt Nam có một cơ cấu tổ chức chuyên
nghiệp với các bộ phận và vị trí quan trọng bao gồm:
Ban Lãnh đạo: Bao gồm CEO, Giám đốc kỹ thuật, và các quản lý cấp cao.
Bộ phận Nghiên cứu và Phát triển: Đội ngũ chuyên gia kỹ thuật
và phần mềm đảm nhận việc nghiên cứu và phát triển sản phẩm và dự án IoT.
Bộ phận Kỹ thuật: Chịu trách nhiệm về thiết kế, phát triển và
triển khai các giải pháp IoT.
Bộ phận Kinh doanh và Tiếp thị: Tập trung vào việc xây dựng
mối quan hệ với khách hàng, tiếp thị sản phẩm và dịch vụ,
cũng như quản lý dự án.
Bộ phận Hỗ trợ kỹ thuật: Đội ngũ chuyên gia hỗ trợ khách hàng
và xử lý sự cố kỹ thuật.
I.4. Kết luận về tổng quan đơn vị thực tập
Công ty Cổ phần Lumi Việt Nam đóng một vai trò quan trọng trong
việc phát triển và ứng dụng công nghệ IoT tại Việt Nam. Chúng tôi
rất vinh dự được thực tập tại đơn vị này và tin rằng trải nghiệm này
sẽ đóng góp vào sự phát triển của chúng tôi trong lĩnh vực lập trình nhúng và IoT. 7
Chương II. Nội dung thực tập
II.1. Các vị trí công việc trong công ty
Trong Công ty Cổ phần Lumi Việt Nam, có nhiều vị trí công việc khác
nhau, nhưng trong phạm vi báo cáo này, chúng tôi sẽ tập trung vào
mô tả vị trí Kỹ sư Lập trình nhúng & IoT, vị trí mà chúng tôi đã thực tập.
Kỹ sư Lập trình Nhúng & IoT - Yêu cầu chuyên môn và kỹ năng:
 Kiến thức cơ bản về lập trình C và C++, đặc biệt là trong ngữ cảnh nhúng.
 Hiểu biết về kiến thức cơ bản về điện tử và vi mạch nhúng.
 Khả năng làm việc với các bộ phát triển nhúng như STM32,
Arduino, Raspberry Pi, và nền tảng phần mềm liên quan.
 Kỹ năng thực hiện việc phát triển, kiểm tra và triển khai các ứng dụng IoT.
 Khả năng giải quyết vấn đề và phân tích các vấn đề kỹ thuật.
Công ty Cổ phần Lumi Việt Nam hoạt động trong lĩnh vực công nghệ
thông tin và trí tuệ nhân tạo, tập trung vào phát triển các giải pháp
IoT thông minh và sản phẩm công nghệ thông tin. Các lĩnh vực hoạt
động chuyên môn bao gồm:
Phát triển sản phẩm IoT: Công ty nghiên cứu và phát triển các
sản phẩm IoT thông minh, bao gồm các thiết bị kết nối và các ứng dụng điều khiển.
Dự án IoT tùy chỉnh: Cung cấp dịch vụ thiết kế và triển khai dự
án IoT tùy chỉnh cho khách hàng từ nhiều lĩnh vực khác nhau,
như gia đình thông minh, công nghiệp, y tế, và nhiều lĩnh vực khác.
Đào tạo và hỗ trợ: Đào tạo và hỗ trợ khách hàng cũng như các
chuyên gia trở thành chuyên gia trong lĩnh vực IoT và lập trình nhúng. 8
II.2. Mô tả sơ lược công việc được giao trong quá trình thực tập
Trong đợt thực tập của chúng tôi tại Công ty Cổ phần Lumi Việt Nam,
chúng tôi đã được giao các công việc như sau:
 Làm quen và sử dụng Kit STM32: Ban đầu, chúng tôi đã được
hướng dẫn và làm quen với kit phát triển STM32, một nền tảng
phổ biến cho lập trình nhúng. Chúng tôi đã tìm hiểu cách sử
dụng các thành phần của kit, bao gồm vi xử lý STM32, cảm biến, và các mạch nối.
 Bài tập lớn - lập trình game Snake: Trong suốt khoảng thời gian
một tháng thực tập, chúng tôi đã phải lựa chọn và thực hiện
một bài tập nhóm. Cụ thể, chúng tôi đã được giao nhiệm vụ lập
trình trò chơi Snake trên kit STM32 và kit mở rộng của công ty.
Chúng tôi đã sử dụng ngôn ngữ lập trình C để thực hiện dự án này.
 Hướng dẫn thực hành và lập trình: Công ty đã thiết lập lịch thực
tập hàng tuần tại thư viện Tạ Quang Bửu. Trong các buổi thực
tập, nhân viên của công ty Lumi đã đến để hướng dẫn chúng
tôi về lập trình và thực hành thông qua các bài học đã chuẩn bị trước.
Điều này đã giúp chúng tôi áp dụng kiến thức học được từ lớp học
vào thực tế, nắm vững việc sử dụng kit STM32 và phát triển ứng
dụng nhúng, cũng như trau dồi kỹ năng làm việc nhóm và giải quyết
các vấn đề kỹ thuật trong quá trình thực tập. 9
II.2. Các thông tin chi tiết về bài tập lớn – Lập trình game Snake
II.2.1. Yêu cầu kỹ năng phục vụ đề tài:
 Lập trình nhúng C: Biết cách sử dụng STM32 sử dụng ngôn
ngữ lập trình C. Hiểu được cách cấu hình GPIO, timers, và
biết cách làm việc với các thiết bị ngoại vi.
 Bộ vi điều khiển STM32: Làm quen với bộ vi điều khiển
STM32F401RE, bao gồm bảng datasheet, tài liệu tham
khảo và môi trường phát triển (ví dụ: STM32CubeIDE hoặc
Keil). Ở trong đề tài này, chúng tôi sử dụng STM32CubeIDE.
 Logic Game: Có khả năng thiết kế và triển khai logic trò
chơi cho game Snake, bao gồm cách con rắn di chuyển,
dài ra cũng như cách xử lý các va chạm với tường và thức ăn.
II.2.2. Công việc của các thành viên trong nhóm:
 Phạm Hồng Thi: Triển khai thuật toán.
 Phạm Minh Quang: Triển khai thuật toán.
 Nguyễn Phương Linh: Kiểm thử và rà soát lại logic thuật
toán, kiểm tra khai báo phần cứng. 10
II.2.3. Một số hình ảnh về source code phục vụ quá trình.
Figure 0.1 Source code game Snake
Luồng dữ liệu của thuật toán bao gồm các hàm:
 platform_get_control(snake_t * snake) : Nhận tín hiệu di chuyển từ nút bấm.
 snake_move(snake_t* snake): Xác định hướng di chuyển
dựa trên nút bấm đã nhận.
 snake_haseaten(snake_t* snake, food_t* food): Kiểm tra
xem trạng thái thức ăn đã được ăn hay chưa.
 snake_display(snake_t* snake): Hiển thị con rắn lên màn hình LCD.
 snake_place_food(snake_t* snake, food_t* food, uint32_t
tick): sinh ra thức ăn mới.
 Score(): Hiển thị điểm số hiện tại lên LCD.
 Delay_ms(speed):tham số delay biểu thị tốc độ di chuyển con rắn.
 Nếu trạng thái của con rắn khác “PLAYING” => thoát trò
chơi, lưu lại điểm số lên màn hình. 11
Figure 0.2 Source code game Snake - Cấu hình thời gian
Cấu hình và sử dụng Timer(TIM5) để tạo hàm Delay() chương
trình mà không gây hiện tượng treo( lặp vô hạn):
 Ghi 1 vào bit thứ 3 của thanh ghi APB1ENR => Bật clock cho Timer5.
 Do tần số hoạt động được cấu hình sẵn là 84MHz =>
Ghi giá trị vào thanh ghi PSC để xác định giá trị chia
tần nhằm đặt được tần số đếm 1Mhz.
 Đặt giá trị tràn của thanh ghi ARR là giá trị tối đa của
số 16 bit (có thể sử dụng giá trị 0xffff ffff để tăng độ chính xác) .
 Ghi 1 vào bit 0 thanh ghi CR1 => Bật điều thanh ghi điều khiển.
 Kiểm tra: nếu bit 0 của thanh ghi SR là 0 thì Timer5
chưa đếm xong tiếp tục chờ đếm hết chu kỳ định thời của Timer. 12
 Trong hàm Delay_us(), thanh ghi đếm CNT được đặt giá
trị dếm từ 0, mỗi giá trị đếm tăng lên tương ứng 1us trôi qua.
II.2.4. Một số hình ảnh về game đã hoạt động trên kit STM32:
Figure 0.3 Màn hình khởi động
Figure 0.4 Bắt đầu trò chơi 13
Figure 0.5 Đạt được 4 điểm sau 4 lần ăn
Figure 0.6 Màn hình kết thúc 14
Figure 0.7 Lỗi khi hàm sinh thức ăn trả về ERROR 15
Chương III. Nhận xét, đề xuất III.1. Về ưu điểm:
Game đã làm chạy được các chức năng cơ bản như đã tạo ra đồ ăn
ngẫu nhiên, cho phép rắn di chuyển trên dưới trái phải, tăng chiều
dài của rắn sau khi ăn được, có thể tăng giảm tốc độ di chuyển của
rắn, có thể pause và play khi người dùng muốn, và bị game over khi chạm đầu vào tường.
III.2. Về nhược điểm:
Game vẫn còn xử lý khá chậm, do phản hồi của nút bấm chưa cao.
Giao diện UI và trải nghiệm người dùng vẫn chưa thực sự cao. III.3. Về đề xuất:
Sau khi thực hành viết chương trình game Snake, chúng tôi có đưa ra
một số đề xuất để cải thiện game như sau:
 Thay vì tăng tốc độ di chuyển của rắn như thông thường thì
sẽ chia thành 3 mức độ: Easy, Medium, Hard với các tốc độ
phù hợp tương ứng với mức score phù hợp.
 Mở rộng thêm các map với nhiều địa hình thú vị hơn cho người dùng.
 Tăng các trải nghiệm UX. Ví dụ như thay thế các nút button
để dễ dàng cho người sử dụng hơn. 16 Kết luận:
Trong quá trình thực tập kỹ thuật tại Công ty Cổ phần Lumi Việt Nam,
chúng tôi đã có cơ hội tiếp cận và áp dụng kiến thức lý thuyết của
môn học vào thực tế trong lĩnh vực lập trình nhúng và IoT. Bản kết
luận sau đây sẽ khái quát hệ thống và đánh giá lại các nội dung đã thực tập.
I. Khái quát lại nội dung thực tập:
Trong chương 2 của báo cáo này, chúng tôi đã trình bày về vị trí công
việc của Kỹ sư lập trình nhúng & IoT tại Công ty Lumi Việt Nam, cũng
như mô tả các lĩnh vực hoạt động chuyên môn của công ty. Chúng tôi
đã mô tả chi tiết nhiệm vụ và các công việc được giao trong đợt thực
tập, bao gồm làm quen và sử dụng kit STM32, lập trình game Snake
trên nền tảng STM32 và kit mở rộng của công ty. Chúng tôi cũng đã
nhấn mạnh việc thực tập diễn ra dưới sự hướng dẫn của nhân viên
của công ty Lumi tại thư viện Tạ Quang Bửu.
II. Hệ thống nội dung thực tập:
Trong quá trình thực tập, chúng tôi đã xây dựng một hệ thống kiến
thức và kỹ năng quan trọng trong lĩnh vực lập trình nhúng và IoT.
Chúng tôi đã nắm vững việc sử dụng kit STM32 và phát triển ứng
dụng trên nền tảng này bằng ngôn ngữ lập trình C. Ngoài ra, chúng
tôi cũng đã học được cách làm việc trong môi trường thực tế, từ việc
quản lý thời gian cho đến cách làm việc theo nhóm và giải quyết các vấn đề kỹ thuật. 17
III. Đánh giá lại nội dung thực tập:
Đợt thực tập tại Công ty Cổ phần Lumi Việt Nam đã đáp ứng được
nhiều mục tiêu quan trọng. Chúng tôi đã có cơ hội áp dụng kiến thức
vào thực tế, nắm bắt các kiến thức mới và phát triển kỹ năng cần
thiết trong lĩnh vực lập trình nhúng và IoT. Mô hình hướng dẫn và
thực tập tại thư viện Tạ Quang Bửu đã giúp chúng tôi tiếp xúc với
môi trường thực tế và cải thiện khả năng làm việc nhóm.
Mặc dù có khó khăn và thách thức, chúng tôi luôn nhớ đến sự hỗ trợ
và sự chỉ dẫn tận tâm của đội ngũ giảng viên và nhân viên của Công
ty Lumi Việt Nam. Điều này đã đóng góp đáng kể vào sự phát triển
của chúng tôi trong quá trình thực tập. IV. Tổng kết:
Chúng tôi xin kết thúc báo cáo thực tập này với lòng biết ơn sâu sắc
đến Công ty Cổ phần Lumi Việt Nam đã cung cấp cho chúng tôi cơ
hội thực tập và đến tất cả những người đã hỗ trợ và hướng dẫn
chúng tôi trong suốt thời gian này. Đợt thực tập này đã là một phần
quan trọng trong hành trình học tập và phát triển nghề nghiệp của
chúng tôi, và chúng tôi sẽ tiếp tục xây dựng trên nền tảng này trong tương lai. 18 T
ài liệu tham khảo:
1. Tài liệu được công ty cổ phần Lumi Việt Nam cấp trong quá trình thực tập:
https://drive.google.com/drive/folders/
11O0TtUw7Tlm81DoNII2US_4i8ZAw4hSh?usp=drive_link
2. SDK_NUCLEO_F401RE: https://github.com/HoangNH95/IOT-
Programming-with-Master-Embedded/blob/master/Courseware
%202/SDK_1.0.3_NUCLEO-F401RE.7z
3. RM0368: STM32F401 Reference manual:
https://www.st.com/resource/en/reference_manual/rm0368-
stm32f401xbc-and-stm32f401xde-advanced-armbased-32bit- mcus-stmicroelectronics.pdf 19