SÁNG KIẾN KINH NGHIỆM Giúp học sinh tiếp cận các bài toán thực tiễn khi dạy lập trình C++ thông qua nền tảng Arduino Lĩnh vực: Tin học
1
MỤC LỤC
PHẦN I. ĐẶT VẤN ĐỀ............................................................................................................................................... 5
I. Lý do chọn đề tài ................................................................................................................................................. 5
II. Mục đích nghiên cứu ......................................................................................................................................... 6
III. Đối tượng nghiên cứu....................................................................................................................................... 6
IV. Phạm vi nghiên cứu .......................................................................................................................................... 6
V. Phương pháp nghiên cứu .................................................................................................................................. 6
VI. Tính mới của đề tài........................................................................................................................................... 6
PHẦN II. NỘI DUNG NGHIÊN CỨU ..................................................................................................................... 7
I. Cơ sở lí luận ......................................................................................................................................................... 7
1. Khái niệm năng lực ........................................................................................................................................ 7
2. Năng lực đặc thù môn Tin học theo CT CDPT 2018 .................................................................................. 7
3. Năng lực “Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông” ......................... 10
II. Cơ sở thực tiễn ................................................................................................................................................. 10
1. Việc dạy và học lập trình ở các trường THPT hiện nay ........................................................................... 10
2. Các cuộc thi khoa học kỹ thuật ................................................................................................................... 11
3. Khảo sát đánh giá thực trạng về mức độ yêu thích học lập trình và mối quan tâm của học sinh về các
ứng dụng của lập trình trong thực tiễn. ......................................................................................................... 11
III. Nền tảng Ardunio ........................................................................................................................................... 11
1. Arduino là gì? ............................................................................................................................................... 11
2. Cấu tạo của Arduino .................................................................................................................................... 12
3. Khả năng kết nối của Arduino .................................................................................................................... 12
4. Ứng dụng của nền tảng Arduino ................................................................................................................ 12
5. Arduino mang lại gì cho nền giáo dục? ...................................................................................................... 13
6. Một số IDE thông dụng ............................................................................................................................... 13
7. Tổng hợp các lệnh hữu ích để code Arduino ............................................................................................. 13
IV. Một số bài toán thực tiễn lập trình trên mạch Arduino .............................................................................. 16
1. Đèn tín hiệu giao thông ................................................................................................................................ 16
2. Nhấn nút còi kêu .......................................................................................................................................... 17
3. Đèn sáng đuổi nhau ...................................................................................................................................... 19
4. Bật/tắt đèn theo ánh sáng môi trường ........................................................................................................ 21
2
5. Chữ số trên đồng hồ điện tử (Led 7 thanh) ................................................................................................ 23
6. Xe điều khiển từ xa ...................................................................................................................................... 26
7. Xe tránh vật cản ........................................................................................................................................... 30
V. Thực nghiệm sư phạm ..................................................................................................................................... 34
1. Mục đích thực nghiệm ................................................................................................................................. 34
2. Nội dung thực nghiệm.................................................................................................................................. 34
2.1. Dạy học kết hợp ví dụ mô phỏng các bài toán thực tiễn sử dụng mạch Arduino trong các tiết học. ..... 34
2.2. Hướng dẫn học sinh tìm hiểu bài toán thực tiễn qua internet ................................................................ 35
2.3. Giới thiệu và chia sẻ cho học sinh biết đến các sản phẩm có tính ứng dụng thực tiễn cao trong các cuộc
thi về nghiên cứu khoa học. ........................................................................................................................... 36
3. Tổ chức thực nghiệm ................................................................................................................................... 38
4. Kết quả đạt được .......................................................................................................................................... 38
5. Một số lưu ý an toàn khi làm việc với các linh kiện .................................................................................. 39
6. Một số bài toán thực tiễn lập trình trên mạch Arduino đã được thực hiện trong quá trình thực nghiệm.
........................................................................................................................................................................... 40
PHẦN III. KẾT LUẬN ............................................................................................................................................. 41
I. Quá trình nghiên cứu ........................................................................................................................................ 41
II. Ý nghĩa của đề tài ............................................................................................................................................ 41
III. Kiến nghị, đề xuất .......................................................................................................................................... 41
IV. Kết luận khoa học ........................................................................................................................................... 42
TÀI LIỆU THAM KHẢO ......................................................................................................................................... 43
PHỤ LỤC ................................................................................................................................................................... 43
3
CÁC TỪ VIẾT TẮT
STT Từ viết tắt Ý nghĩa
Khoa học kĩ thuật 1 KHKT
Phương pháp dạy học 2 PPDH
Học sinh 3 HS
Giáo viên 4 GV
Trung học phổ thông 5 THPT
Giáo dục và đào tạo 6 GD&ĐT
Chương trình 7 CT
4
Giáo dục phổ thông 8 GDPT
PHẦN I. ĐẶT VẤN ĐỀ
I. Lý do chọn đề tài
Giáo dục Việt Nam trong những năm gần đây đang tập trung đổi mới, hướng tới một nền giáo dục tiến bộ, hiện đại, bắt kịp xu hướng của các nước trong khu vực và trên thế giới. Một trong những mục tiêu lớn của giáo dục nước ta hiện nay đó là hoạt động giáo dục phải gắn liền với thực tiễn.
Chính vì vậy, GDPT nước ta hiện nay đang thực hiện bước chuyển từ chương trình giáo dục tiếp cận nội dung sang tiếp cận năng lực của người học, nghĩa là từ chỗ quan tâm đến việc học sinh học được cái gì đến chỗ học sinh vận dụng được cái gì qua việc học. Để đảm bảo được điều đó, nhất định phải thực hiện thành công việc chuyển từ phương pháp dạy học theo lối “truyền thụ một chiều” sang dạy cách học, cách vận dụng kiến thức, rèn luyện kỹ năng hình thành năng lực và phẩm chất; đồng thời phải chuyển cách đánh giá kết quả giáo dục từ nặng về kiểm tra trí nhớ sang kiểm tra, đánh giá năng lực vận dụng kiến thức giải quyết vấn đề.
Trong quá trình đổi mới căn bản, toàn diện giáo dục và đào tạo, công tác nghiên cứu khoa học là hoạt động không thể thiếu trong trường phổ thông. Đây là một hoạt động giúp học sinh áp dụng những kiến thức đã học vào cuộc sống, học đi đôi với hành; đồng thời là cách tiếp cận, làm quen với phương pháp, kỹ năng nghiên cứu khoa học, rèn luyện cách làm việc độc lập, làm việc nhóm và phát huy tính tích cực, chủ động, tạo hứng thú trong học tập. Từ đó, phát hiện các tài năng, là cơ sở để xây dựng và phát triển đội ngũ nhân lực chất lượng cao cho xã hội.
Chương trình Tin học 11 hiện nay còn một số hạn chế: Áp dụng công thức toán học quá nhiều; Học sinh phải có kiến thức tốt về toán học thì mới giải được các bài tập trong sách giáo khoa; Học sinh chưa hiểu được lập trình để làm gì ngoài việc tính toán với các con số; Học sinh sẽ tự hỏi lập trình có ứng dụng như thế nào trong thực tế bởi đa phần các bài tập trong sách đều liên quan đến tính toán hoặc thuần túy về toán học, không gắn liền với thực tiễn… Vì thế để học sinh có thể vận dụng kiến thức của môn học vào giải quyết những vấn đề thực tiễn là rất khó nếu chỉ căn cứ vào lý thuyết thuần túy do giáo viên truyền đạt.
5
Từ thực tiễn công tác giảng dạy, tôi nhận thấy khi dạy lập trình, môn học mà đòi hỏi phải tư duy sáng tạo nhiều thì cần phải có một phương pháp dạy học phù hợp nhằm đạt hiệu quả cao, giúp học sinh có những trải nghiệm thú vị hơn với môn học. Vì vậy việc áp dụng các phương pháp để tạo sự hứng thú, yêu thích môn học, làm cho học sinh có thể nắm được nội dung bài học ngay tại lớp, nắm bắt kiến thức một cách logic và có hệ thống,… đặc biệt giúp học sinh biết cách tiếp cận ngôn ngữ lập trình để giải quyết các bài toán ứng dụng vào thực tiễn, khơi dậy niềm đam mê nghiên cứu khoa học trong mỗi học sinh. Qua đây tôi muốn chia sẻ một kinh nghiệm nhỏ mà bản thân đã có được trong quá trình dạy học, đó là “Giúp học sinh tiếp cận các bài toán thực tiễn khi dạy lập trình C++ thông qua nền tảng Arduino”.
II. Mục đích nghiên cứu
- Giúp học sinh tiếp cận bài toán thực tiễn thông qua ngôn ngữ lập trình.
- Rèn luyện cho các em khả năng biết vận dụng các kiến thức đã học về lập
trình để giải quyết một số bài toán thực tiễn đời sống hàng ngày thường gặp.
- Hình thành dần cho các em một thói quen biết đặt (giải quyết) những vấn đề cuộc sống dưới góc độ tin học với câu hỏi: Nguồn gốc của bài toán (hay tình huống thực tiễn, bài toán thực tiễn) xuất phát từ đâu? Vận dụng kiến thức nào để giải quyết nó?
- Từng bước tạo ra niềm đam mê và xóa bỏ dần tâm lý e ngại của các em học
sinh khi học lập trình.
- Khơi dậy niềm đam mê nghiên cứu khoa học; kích thích sự sáng tạo của học sinh; từng bước hướng các em biết nghiên cứu và vận dụng kiến thức của các môn học vào giải quyết những vấn đề của thực tiễn đời sống.
III. Đối tượng nghiên cứu
Học sinh lớp 11 trường THPT Tương Dương 1
IV. Phạm vi nghiên cứu
- Nghiên cứu việc dạy và học ngôn ngữ lập trình C++ trong chương trình phổ
thông
- Một số bài toán thực tiễn áp dụng khi dạy lập trình.
V. Phương pháp nghiên cứu
- Nghiên cứu lý luận: Tìm hiểu, nghiên cứu các tài liệu về các vấn đề liên quan
đến đề tài sáng kiến kinh nghiệm.
- Điều tra quan sát: Thực trạng về việc dạy học lập trình ở trường THPT và khả
năng tiếp cận bài toán thực tiễn của học sinh trung học phổ thông.
- Thực nghiệm sư phạm: Tổ chức thực nghiệm sư phạm để xem xét tính khả thi
và hiệu quả của các biện pháp sư phạm đã đề xuất.
VI. Tính mới của đề tài
- Góp phần thực hiện thành công đổi mới CT GDPT 2018 về phát triển năng lực tin học cho học sinh, đặc biệt là năng lực “Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông”.
- Giúp học sinh thấy được mối quan hệ tương hỗ giữa tin học với thực tiễn và
ngược lại.
6
- Góp phần đổi mới phương pháp giáo dục phát huy tính tích cực, chủ động, sáng tạo của học sinh, bồi dưỡng cho học sinh phương pháp tự học, vận dụng kĩ năng, vận dụng kiến thức,… đem lại niềm vui, hứng thú và trách nhiệm học tập cho
học sinh.
- Khơi gợi niềm đam mê nghiên cứu khoa học và giúp học sinh phát hiện khả
năng của bản thân.
- Giúp cho HS có những hiểu biết và hình dung ban đầu về trí tuệ nhân tạo.
- Góp phần định hướng giáo dục STEM trong Tin học.
- Sáng kiến có thể được sử dụng làm tài liệu tham khảo cho giáo viên Tin nhằm
góp phần nâng cao hiệu quả dạy học môn Tin ở trường trung học phổ thông.
PHẦN II. NỘI DUNG NGHIÊN CỨU
I. Cơ sở lí luận
1. Khái niệm năng lực
Năng lực là thuộc tính cá nhân được hình thành, phát triển nhờ vào các tố chất và quá trình học tập, rèn luyện, cho phép con người huy động tổng hợp các kinh nghiệm, kĩ năng và các thuộc tính cá nhân khác như hứng thú, niềm tin, ý chí,... thực hiện đạt kết quả các hoạt động trong những điều kiện cụ thể.
Chương trình giáo dục phổ thông 2018 đã xác định mục tiêu hình thành và phát triển cho học sinh các năng lực cốt lõi bao gồm các năng lực chung và các năng lực đặc thù. Năng lực chung là những năng lực cơ bản, thiết yếu hoặc cốt lõi, làm nền tảng cho mọi hoạt động của con người trong cuộc sống và lao động nghề nghiệp. Năng lực đặc thù là những năng lực được hình thành và phát triển trên cơ sở các năng lực chung theo định hướng chuyên sâu, riêng biệt trong các loại hình hoạt động, công việc hoặc tình huống, môi trường đặc thù, cần thiết cho những hoạt động chuyên biệt, đáp ứng yêu cầu của một hoạt động như toán học, âm nhạc, mĩ thuật, thể thao...
- Các năng lực chung được hình thành, phát triển thông qua các môn học và hoạt động giáo dục: năng lực tự chủ và tự học, năng lực giao tiếp và hợp tác, năng lực giải quyết vấn đề và sáng tạo;
- Các năng lực đặc thù được hình thành, phát triển chủ yếu thông qua một số môn học và hoạt động giáo dục nhất định: năng lực ngôn ngữ, năng lực tính toán, năng lực khoa học, năng lực công nghệ, năng lực tin học, năng lực thẩm mĩ và năng lực thể chất.
2. Năng lực đặc thù môn Tin học theo CT CDPT 2018
Năng lực tin học bao gồm năm thành phần năng lực sau đây:
- NLa: Sử dụng và quản lí các phương tiện công nghệ thông tin và truyền thông;
- NLb: Ứng xử phù hợp trong môi trường số;
- NLc: Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông;
7
- NLd: Ứng dụng công nghệ thông tin và truyền thông trong học và tự học;
- NLe: Hợp tác trong môi trường số
* Chương trình môn Tin học ở cấp THPT
Chương trình môn Tin học ở cấp trung học phổ thông thể hiện sự phân hoá sâu hơn về định hướng nghề nghiệp. Do vậy, chương trình có các yêu cầu cần đạt chung về năng lực tin học bắt buộc đối với mọi học sinh và có các yêu cầu bổ sung riêng tương ứng với học sinh chọn định hướng Tin học ứng dụng hoặc Khoa học máy tính.
Biểu hiện
a) Yêu cầu chung Thành phần năng lực
NLa
Phối hợp và sử dụng được đúng cách các hệ thống kĩ thuật số thông dụng; mô tả được chức năng các bộ phận chính bên trong máy tính, những thông số cơ bản của các thiết bị số; bước đầu tuỳ chỉnh được chế độ hoạt động cho máy tính; trình bày được khái quát mối quan hệ giữa phần cứng, hệ điều hành và chương trình ứng dụng; biết sử dụng một số chức năng chủ yếu trong hệ điều hành để nâng cao hiệu quả sử dụng máy tính; so sánh được mạng LAN và Internet, biết được khái niệm IoT; giới thiệu được chức năng cơ bản của một số thiết bị và giao thức mạng thông dụng, sử dụng được một số ứng dụng thiết thực trên mạng; nhận biết được vai trò quan trọng của các hệ thống tự động hoá xử lí và truyền thông tin trong xã hội tri thức.
NLb
Trình bày và nêu được ví dụ minh họa một số quy định về quyền thông tin và bản quyền, tránh được những vi phạm khi sử dụng thông tin, tài nguyên số; hiểu khái niệm, cơ chế phá hoại, lây lan của phần mềm độc hại và cách phòng chống; biết cách tự bảo vệ thông tin, dữ liệu và tài khoản cá nhân; hiểu được rõ ràng hơn những mặt trái của Internet, nhận diện được những hành vi lừa đảo, thông tin mang nội dung xấu và biết cách xử lí phù hợp; thể hiện tính nhân văn khi tham gia thế giới ảo; có hiểu biết tổng quan về nhu cầu nhân lực, tính chất công việc của các ngành nghề trong lĩnh vực tin học cũng như các ngành nghề khác có sử dụng ICT; sẵn sàng, tự tin, có tinh thần trách nhiệm và sáng tạo khi tham gia các hoạt động tin học.
NLc
8
Biết được các cấu trúc dữ liệu cơ bản, các thuật toán sắp xếp và tìm kiếm cơ bản, viết được chương trình, tạo được trang web đơn giản; biết khái niệm hệ cơ sở dữ liệu, biết kiến trúc hệ cơ sở dữ liệu tập trung và phân tán; sử dụng được máy tìm kiếm để khai thác thông tin một cách hiệu quả, an toàn và hợp pháp; tìm kiếm, lựa chọn được
thông tin phù hợp và tin cậy; sử dụng được các công cụ kĩ thuật số để tổ chức, chia sẻ dữ liệu và thông tin trong quá trình phát hiện và giải quyết vấn đề; có những hiểu biết và hình dung ban đầu về trí tuệ nhân tạo và nêu được một số ứng dụng điển hình của trí tuệ nhân tạo.
NLd
Khai thác được các dịch vụ tra cứu và trao đổi thông tin, các nguồn học liệu mở để cập nhật kiến thức, hỗ trợ học tập và tự học; sử dụng được một số phần mềm hỗ trợ học tập, tự tin, sẵn sàng tìm hiểu những phần mềm tương tự, qua đó có ý thức và khả năng tìm kiếm tri thức mới, tìm hiểu về nghề mình quan tâm.
NLe
Biết cách hợp tác trong công việc; sử dụng được phần mềm để lập kế hoạch, phân chia và quản lí công việc; lựa chọn và sử dụng được những kênh phù hợp để trao đổi thông tin, thảo luận, hợp tác và mở mang tri thức; giao tiếp, hoà nhập được một cách an toàn trong môi trường số, biết tránh các tác động xấu thông qua một số biện pháp phòng tránh cơ bản.
b) Yêu cầu bổ sung theo định hướng ICT và CS
Biểu hiện
Định hướng ICT Định hướng CS Thành phần năng lực
NLa và
– Kết nối được PC với các thiết bị số thông dụng
NLc
– Hiểu biết được nguyên lí hoạt động của hệ thống thông tin bao gồm máy tính và các thiết bị số khác.
– Biết tổ chức lưu trữ, khai thác được dữ liệu phục vụ bài toán quản lí đơn giản trong thực tế.
– Sử dụng được một số chức năng cơ bản của phần mềm quản lí dự án. – Hiểu được các phép toán nhị phân cơ bản và ứng dụng hệ nhị phân trong tin học.
– Trình bày được sơ lược
9
việc thiết kế mạng. – Biết bảo vệ dữ liệu, cài đặt hay gỡ bỏ được phần mềm trên máy tính và thiết bị di động khi cần thiết.
– Biết được mục tiêu và một số thành tựu của Khoa học dữ liệu và Học máy.
– Biết được vai trò của phần mềm mô phỏng.
– Sử dụng được các phần mềm thiết kế đồ hoạ, chỉnh sửa ảnh và làm phim hoạt hình để tạo ra sản phẩm số phục vụ học tập và đáp ứng sở thích của cá nhân. – Sử dụng thành thạo các phần mềm tin học văn phòng, tạo được sản phẩm số có chất lượng thông qua các dự án giải quyết vấn đề thực tế. –Phân tích được dữ liệu với phần mềm bảng tính.
3. Năng lực “Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông”
- Biết được các cấu trúc dữ liệu cơ bản, các thuật toán sắp xếp và tìm kiếm cơ
bản, viết được chương trình, tạo được trang web đơn giản;
- Biết khái niệm hệ cơ sở dữ liệu, biết kiến trúc hệ cơ sở dữ liệu tập trung và phân tán; sử dụng được máy tìm kiếm để khai thác thông tin một cách hiệu quả, an toàn và hợp pháp;
- Tìm kiếm, lựa chọn được thông tin phù hợp và tin cậy;
- Sử dụng được các công cụ kĩ thuật số để tổ chức, chia sẻ dữ liệu và thông tin
trong quá trình phát hiện và giải quyết vấn đề;
- Có những hiểu biết và hình dung ban đầu về trí tuệ nhân tạo và nêu được một
số ứng dụng điển hình của trí tuệ nhân tạo.
II. Cơ sở thực tiễn
1. Việc dạy và học lập trình ở các trường THPT hiện nay
Việc dạy học lập trình ở các trường THPT phần lớn đang chú trọng giải quyết các bài toán về toán học. Học sinh chưa hiểu được lập trình để làm gì ngoài việc tính toán với các con số; Học sinh sẽ tự hỏi lập trình có ứng dụng như thế nào trong thực tế bởi đa phần các bài tập trong sách đều liên quan đến tính toán hoặc thuần túy về toán học, không gắn liền với thực tiễn,… Vì thế để học sinh có thể vận dụng kiến thức của môn học vào giải quyết những vấn đề thực tiễn là rất khó nếu chỉ căn cứ vào lý thuyết thuần túy do giáo viên truyền đạt.
10
Khi dạy học để mô phỏng kiến thức bài học giáo viên chủ yếu dựa vào các phần mềm để test thử các câu lệnh mà chưa có ví dụ trực quan để mô phỏng. Vì thế học sinh rất khó khăn trong việc tiếp thu kiến thức và cảm thấy rất nhàm chán khi học về lập trình.
2. Các cuộc thi khoa học kỹ thuật
Trong những năm gần đây các cuộc thi khoa học kỹ thuật, sáng tạo thanh thiếu niên nhi đồng, kiến tạo tương lai, đề án 1655,… ngày càng được lan tỏa khắp các vùng miền với sự tham gia đông đảo của các em học sinh. Cuộc thi nhằm khuyến khích học sinh trung học nghiên cứu khoa học; sáng tạo kĩ thuật, công nghệ và vận dụng kiến thức của các môn học vào giải quyết những vấn đề thực tiễn; góp phần đổi mới hình thức tổ chức dạy học gắn với phát triển văn hóa đọc; thúc đẩy giáo viên tự bồi dưỡng nâng cao năng lực chuyên môn, nghiệp vụ,...
Cuộc thi là minh chứng điển hình cho việc thực hành, trải nghiệm, ứng dụng kiến thức vào giải quyết một đề tài cụ thể có tính ứng dụng thực tiễn. Điều đó khích lệ, tạo động lực cho giáo viên thay đổi để học sinh cũng thay đổi trong việc học đi đôi với hành.
Tại trường THPT Tương Dương 1 số lượng học sinh biết đến và tham gia vào các cuộc thi về khoa học kĩ thuật là chưa nhiều, đặc biệt là lĩnh vực lập trình còn rất hạn chế.
3. Khảo sát đánh giá thực trạng về mức độ yêu thích học lập trình và mối
quan tâm của học sinh về các ứng dụng của lập trình trong thực tiễn.
Trên đây là kết quả sát thực trạng tại trường THPT Tương Dương 1. Nhìn vào kết quả khảo sát ở trên ta thấy rằng mức độ yêu thích học lập trình và mối quan tâm của học sinh về những ứng dụng của lập trình trong thực tiễn là chưa nhiều.
III. Nền tảng Ardunio
1. Arduino là gì?
Arduino là nền tảng tạo mẫu điện tử mã nguồn mở, được sử dụng nhằm xây dựng các ứng dụng điện tử tương tác với nhau hoặc với môi trường được thuận tiện, dễ dàng hơn.
11
Nền tảng mẫu này giống như một máy tính thu nhỏ, giúp người dùng lập trình và thực hiện các dự án điện tử mà không cần phải đến các công cụ chuyên dụng để phục vụ việc nạp code.
Phần mềm này tương tác với thế giới bên ngoài thông qua các cảm biến điện
tử, đèn và động cơ.
2. Cấu tạo của Arduino
Phần cứng Arduino là bảng mạch nguồn mở, cùng bộ vi xử lý và chân đầu vào/ đầu ra (I/ O) để liên lạc, điều khiển các đối tượng vật lý (LED, servo, nút, v.v.). Bảng mạch thường được cấp nguồn qua USB hoặc nguồn điện bên ngoài, cho phép cung cấp năng lượng cho các phần cứng, cảm biến khác.
Là phần mềm nguồn mở tương tự như C++. Môi trường phát triển tích hợp Arduino (IDE – Integrated Development Environment) cho phép bạn soạn thảo, biên dịch code, nạp chương trình cho board.
3. Khả năng kết nối của Arduino
- Arduino hoạt động độc lập.
- Kết nối với một máy tính, cho phép truy cập dữ liệu cảm biến từ thế giới bên
ngoài và cung cấp thông tin phản hồi.
- Các Arduino có thể liên kết với nhau.
- Mạch điều khiển Arduino có thể kết nối với các thiết bị điện tử khác.
- Arduino có khả năng kết nối với các chip điều khiển.
- Lập trình Arduino IDE có thể kết nối với nhiều nền tảng. Điều này đồng nghĩa với việc bạn có thể khởi động trên Windows, Macintosh OSX điều hành Linux (các hệ thống vi điều khiển khác chỉ chạy Windows).
4. Ứng dụng của nền tảng Arduino
Một số ứng dụng của Arduino trong đời sống phải kể đến như:
- Điều khiển các thiết bị cảm biến âm thanh, ánh sáng.
- Làm máy in 3D.
- Làm đàn bằng ánh sáng.
- Làm lò nướng bánh biết tweet thông báo khi bánh đã chín.
- Arduino có khả năng đọc các thiết bị cảm biến, điều khiển động cơ,… Chính vì thế mà mã nguồn mở này được dùng để làm bộ xử lý trung tâm của rất nhiều loại robot.
- Arduino còn có thể được sử dụng để tương tác với Joystick, màn hình,… khi
chơi các game như Tetrix, phá gạch, Mario,…
- Dùng để chế tạo ra máy bay không người lái.
- Điều khiển đèn giao thông, làm hiệu ứng đèn Led nhấp nháy trên các biển
12
quảng cáo,…
- Ngoài ra, Arduino còn rất nhiều ứng dụng hữu ích khác tùy thuộc vào sự sáng
tạo của người sử dụng.
5. Arduino mang lại gì cho nền giáo dục?
Với sự phát triển nhanh chóng của mã nguồn mở Arduino IDE, việc học đã không còn là khó khăn cho những bạn đam mê về điện tử, lập trình. Vì vậy, hiện nay Arduino đã được các trường THCS, THPT, Cao Đẳng, Đại Học đưa vào giảng dạy và làm các đề tài và hoạt động ngoại khóa của nhà trường. Là tiền đề thúc đẩy sự ham mê học hỏi và tiếp cận đến công nghệ một cách nhanh nhất.
Với những ý tưởng từng lóe lên trong đầu (làm một chú Robot nhện, xe điều khiển từ xa, ngôi nhà thông minh…) và nếu muốn thực hiện nó mà chưa biết bắt đầu từ đầu, thì Arduino là một giải pháp hoàn hảo. Không cần phải là một coder chuyên nghiệp cũng có thể làm được tất, đó là điều vi diệu mà Arduino IDE mang lại.
6. Một số IDE thông dụng
- Arduino IDE: Hỗ trợ ngôn ngữ C/C++. Bất kỳ đoạn code nào của C/C++ thì Arduino IDE đều có thể nhận dạng, giúp các lập trình viên thuận tiện trong việc thiết kế chương trình cho các bo mạch Arduino (Các ví dụ trong bài viết sử dụng IDE này).
- Makeblock IDE và VEXcode IDE: Hỗ trợ ngôn ngữ lập trình Python và ngôn
ngữ lập trình trực quan Scratch.
- EasyCode IDE: Hỗ trợ ngôn ngữ lập trình trực quan Blocky. Ngôn ngữ lập trình trực quan đóng vai trò trung gian giữa người lập trình và các ngôn ngữ như C/C++.
7. Tổng hợp các lệnh hữu ích để code Arduino
7.1. Những lệnh Arduino IDE cơ bản: Ngay khi bạn mở Arduino IDE, bạn sẽ được chào đón bởi các lệnh setup() và loop(). Đây là hai ví dụ duy nhất về sketch mà bạn tìm thấy trong hầu hết tất cả các code Arduino.
Setup(): Mỗi khi sketch bắt đầu, lệnh setup sẽ giúp bạn khởi tạo các biến và bắt
đầu sử dụng các thư viện.
Loop(): Một vòng lặp theo sau setup và thực sự là trái tim của chương trình,
khiến nó phản hồi vô hạn với bất kỳ logic nào.
Break: Nếu bạn muốn thoát khỏi một lệnh, bạn cần nhấn break
If: Các lệnh logic khởi tạo một hành động mỗi khi một điều kiện được thỏa
mãn.
return: Trả về một giá trị nhất định.
13
while: Một vòng lặp khác diễn ra liên tục trong một điều kiện nhất định.
goto: Đúng như tên gọi của nó, lệnh này cho phép bạn đi đến một dòng nhất
định trong code
7.2. Boolean và các toán tử số học
Bên cạnh sketch và các lệnh kiểm soát, bạn phải biết một số Boolean và toán
tử số học để chỉ huy các chương trình.
Các toán hạng: Bằng (=), phép cộng (+), phép trừ (-), phép nhân (*) và phép
chia (/).
Các toán hạng nâng cao: Không bằng (!=), Nhỏ hơn hoặc bằng (<=), lớn hơn
hoặc bằng (>=), phần dư (%).
Các biến quan trọng: Trong một số trường hợp, bạn cần đưa ra một vài biến để
xử lý những phép toán logic khác nhau. Những biến quan trọng là:
HIGH|LOW: Điều này mang lại giá trị cuối cùng cao và thấp cho các hằng số.
LED_BUILTIN: Đưa ra số lượng chân LED (LED pin)
7.3. Các hàm Arduino tích hợp sẵn
digitalRead(): Đọc giá trị từ một pin kỹ thuật số nhất định. Ngoài ra còn
có digitalWrite().
pinMode(PIN_NUMBER, INPUT/OUTPUT): Thiết lập pin tại vị trí
PIN_NUMBER thành INPUT hoặc OUTPUT.
pinMode(PIN_NUMBER, INPUT_PULLUP): Thiết lập pin tại vị trí PIN_NUMBER trở thành đầu vào bằng cách sử dụng điện trở kéo lên (pull-up resistor) tích hợp của bo mạch Arduino.
analogRead(PIN_NUMBER): Đọc số chân analog PIN_NUMBER và trả về
một số nguyên từ 0 đến 1023.
analogWrite(PIN_NUMBER, VALUE): Giả lập analog output VALUE bằng cách sử dụng PWM trên PIN_NUMBER (Lưu ý: Chỉ khả dụng trên các chân 3, 5, 6, 9, 10 và 11).
analogReference(DEFAULT): Sử dụng điện áp tham chiếu mặc định (5V hoặc
3.3V tùy thuộc vào điện áp bo mạch).
analogReference(INTERNAL): Sử dụng điện áp tham chiếu bên trong (1.1v
cho ATmega168/328p, 2.56 cho ATmega 32U4/8).
analogReference(EXTERNAL): Sử dụng điện áp được áp dụng cho chân
AREF làm điện áp tham chiếu (Lưu ý: chỉ 0-5V).
7.4. Các hàm toán học
min(i, j): Trả về giá trị thấp nhất trong hai giá trị i và j
14
max(i, j): Trả về giá trị cao nhất trong hai giá trị i và j
abs(i): Trả về giá trị tuyệt đối của i
sin(angle): Trả về sin của một góc tính bằng radian
cos(angle): Trả về cosin của một góc tính bằng radian
tan(angle): Trả về tang của một góc tính bằng radian
sqrt(i): Trả về căn bậc hai của i
pow(cơ số, số mũ): Tính lũy thừa bậc (số mũ) của (cơ số).
constrain(i, minval, maxval): Ràng buộc giá trị i giữa minval (giá trị nhỏ nhất)
và maxval (giá trị lớn nhất)
map (val, fromL, fromH, toL, toH): Chuyển đổi val từ phạm vi này sang phạm
vi khác
random(i): Trả về một số nguyên dài ngẫu nhiên nhỏ hơn i
random(i, j): Trả về một số nguyên dài ngẫu nhiên giữa i và j
randomSeed(k): Sử dụng giá trị k để seed hàm random()
7.5. Giao tiếp nối tiếp (serial communication)
Serial.begin(speed): Bắt đầu giao tiếp nối tiếp ở tốc độ xác định
Serial.end(): Kết nối giao tiếp nối tiếp
Serial.print(DATA): Xuất DATA vào cổng nối tiếp. DATA có thể là ký tự,
chuỗi, số nguyên và số thực dấu phẩy động (floating point number)
Serial.available(): Trả về số ký tự có sẵn để đọc trong bộ đệm nối tiếp
Serial.read(): Đọc ký tự đầu tiên trong bộ đệm nối tiếp (trả về -1 nếu không có
dữ liệu)
Serial.write(DATA): Ghi DATA vào bộ đệm nối tiếp. DATA có thể là một ký
tự, số nguyên hoặc array (mảng)
Serial.flush(): Xóa bộ đệm nối tiếp sau khi giao tiếp chiều đi hoàn tất
7.6. Servo
Servo myServo: Tạo biến myServo của loại Servo
myServo.attach(PIN_NUMBER): myServo được liên kết với pin tại vị trí
PIN_NUMBER
myServo.write(angle): Ghi một góc từ 0 đến 180 cho servo gắn với myServo
myServo.writeMicroseconds(uS): Ghi một giá trị tính bằng micro giây vào
servo được gắn với myServo (thường từ 1000 đến 2000 với 1500 là điểm giữa)
myServo.read(): Trả về một số nguyên chứa góc hiện tại của servo trong
15
khoảng từ 0 - 180
myServo.attached(): Trả về true nếu servo được gắn vào pin
myServo.detach(): Tách myServo bằng một pin đính kèm
IV. Một số bài toán thực tiễn lập trình trên mạch Arduino
1. Đèn tín hiệu giao thông
1.1. Mô hình thực tế: Đèn tín hiệu giao thông đóng vai trò quan trọng trong hệ thống giao thông đô thị. Hệ thống này thường được lắp đặt tại các ngã 3, ngã 4 hay các cung đường vị trí đường đặc biệt. Cột đèn thường sẽ có 3 màu đèn gồm: Đỏ, Vàng, Xanh. Mỗi màu chứa đựng một hiệu lệnh riêng. Hệ thống đèn giao thông sẽ thay lực lượng cảnh sát giao thông phân luồng chỉ dẫn. Người tham gia giao thông chỉ cần quan sát và tuân thủ đúng theo hiệu lệnh chỉ dẫn này.
1.2. Mô hình Tin học: Lập trình điều khiển LED tín hiệu giao thông.
Bắt đầu
Cài đặt chức năng của các chân
Đèn xanh
Chờ 30 giây
Đèn vàng
Chờ 3 giây
Đèn đỏ
Chờ 30 giây
1.3. Sơ đồ thuật toán:
1.4. Các linh kiện cần thiết và sơ đồ đấu nối:
Tên linh kiện Số lượng Sơ đồ đấu nối
16
Arduino Uno 1
Led 3
Điện trở 3
Bo cắm 1
Dây cắm 7
Nguồn
1.5. Giải quyết vấn đề bằng lập trình:
Code
void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); } void loop() { digitalWrite(11, HIGH); delay(30000); //Chờ 30 giây digitalWrite(11, LOW); digitalWrite(12, HIGH); delay(3000); //Chờ 3 giây digitalWrite(12, LOW); digitalWrite(13, HIGH); delay(30000); //Chờ 30 giây digitalWrite(13, LOW); }
2. Nhấn nút còi kêu
2.1. Mô hình thực tế: Còi điện thường được sử dụng trong hệ thống báo động,
chuông cửa, chuông ở trường học, các còi xe máy, ô tô,...
17
2.2. Mô hình Tin học: Lập trình điều khiển còi kêu bằng nút nhấn.
Bắt đầu
Cài đặt chức năng của các chân
Đ
Nút được nhấn
Còi kêu
S
Còi dừng kêu
2.3. Sơ đồ thuật toán:
2.4. Các linh kiện cần thiết và sơ đồ đấu nối:
Tên linh kiện Số lượng Sơ đồ đấu nối
Arduino Uno 1
Nhút nhấn 1
Còi Buzzer 5VDC 1
Bo cắm 1
Dây cắm 4
Nguồn 2 pin 3,7V
2.5. Giải quyết bằng lập trình:
Code
18
int button = 11; int coi = 13;
void setup() { pinMode(coi,OUTPUT); pinMode(button,OUTPUT); } void loop() { int buttonStatus = digitalRead(button); if (buttonStatus == HIGH) { digitalWrite(coi, HIGH); } else { digitalWrite(coi, LOW); } }
3. Đèn sáng đuổi nhau
3.1. Mô hình thực tế: Đèn nháy được sử dụng rất nhiều để trang trí vào dịp giáng sinh, lễ tết,... Đèn nháy có rất nhiều hiệu ứng: đèn sáng đuổi nhau, nháy liên hồi, đổi màu,…
3.2. Mô hình tin học: Lập trình điều khiển đèn led sáng dần tắt dần.
Bắt đầu
Cài đặt chức năng của các chân
Sáng lần lượt 8 Led
Tắt lần lượt 8 Led
3.3. Sơ đồ thuật toán:
3.4. Các linh kiện cần thiết và sơ đồ đấu nối:
Tên linh kiện Số lượng Sơ đồ đấu nối
Arduino Uno 1
19
Led 8
Điện trở
8
Bo cắm 1
Dây cắm 10
Nguồn 2 pin 3,7V
3.5. Giải quyết bằng lập trình:
Code
Dùng vòng lặp for (Sử dụng trong trường hợp kết nối liền mạch) Dùng mảng 1 chiều (Sử dụng trong trường hợp kết nối không liền mạch)
20
const char led[8]={1,3,4,5,6,7,9,10}; void setup() { for (int i=0; i <=7; i++) { pinMode(led[i], OUTPUT); } } void loop() { //tắt dần 8 led for (int i=0; i <=7; i++) { digitalWrite(led[i], LOW); delay(200); } //bật dần 8 led int BASE = 2; //led nối tới chân số 2 int NUM = 8; //số led void setup() { for (int i = BASE; i < BASE + NUM; i ++) { pinMode(i, OUTPUT); } } void loop() { //tắt dần 8 led for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, LOW); delay(200);
for (int i=0; i <=7; i++) { digitalWrite(led[i], HIGH); delay(200); } }
} //bật dần 8 led for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, HIGH); delay(200); } }
4. Bật/tắt đèn theo ánh sáng môi trường
4.1. Mô hình thực tế: Khi trời tối đèn tự động sáng, khi trời sáng đèn tự động tắt. Mô hình này thường được sử dụng điều khiển đèn ngủ trong các hộ gia đình, hệ thống đèn đường, sân vườn,…
4.2. Mô hình Tin học: Lập trình tự động bật/tắt đèn LED theo ánh sáng môi
trường.
Bắt đầu
Cài đặt chức năng các chân
Đọc giá trị cảm biến ánh sáng
Đ
Môi trường tối
Led sáng
S
Led tắt
4.3. Sơ đồ thuật toán:
4.4. Các linh kiện cần thiết và sơ đồ đấu nối:
Tên linh kiện Số lượng Sơ đồ đấu nối
Arduino Uno 1
21
Cảm biến ánh sáng 1
Led 1
Điện trở 2
Bo cắm 1
Dây cắm 5
Nguồn 2 pin 3,7V
4.5. Giải quyết vấn đề bằng lập trình:
Code
22
int sensorPin = A0; int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int sensorValue= analogRead(sensorPin); if(sensorValue < 300) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } delay(300);
}
5. Chữ số trên đồng hồ điện tử (Led 7 thanh)
5.1. Mô hình thực tế: Led 7 thanh (7 đoạn) là thiết bị hiển thị điện tử để hiển thị số. Led 7 thanh được sử dụng rộng rãi trong đồng hồ số, đồng hồ đo điện tử, hiển thị số tại các cột đèn giao thông, máy tính,...
5.2. Mô hình tin học: Lập trình điều khiển led 7 thanh (7 đoạn) hiển thị các số
từ 0 đến 9.
Bắt đầu
Cài đặt chức năng của các chân
Hiển thị số 0
Hiển thị số 1
Hiển thị số 2
Hiển thị số 3
Hiển thị số 4
Hiển thị số 5
Hiển thị số 6
Hiển thị số 7
Hiển thị số 8
Hiển thị số 9
23
5.3. Sơ đồ thuật toán:
5.4. Các linh kiện cần thiết và sơ đồ đấu nối:
Tên linh kiện Số lượng Sơ đồ đấu nối
Arduino Uno 1
Led 7 thanh 1
Điện trở 7
Bo cắm 1
Dây cắm 9
Nguồn 2 pin 3,7V
5.5. Giải quyết bằng lập trình:
Code
24
const int aPin = 2; const int bPin = 3; const int cPin = 4; const int dPin = 5; const int ePin = 6; const int fPin = 7; const int gPin = 8; void setup() { pinMode(aPin, OUTPUT); pinMode(bPin, OUTPUT); pinMode(cPin, OUTPUT); pinMode(dPin, OUTPUT); pinMode(ePin, OUTPUT); pinMode(fPin, OUTPUT); pinMode(gPin, OUTPUT); } void loop() // Hiển thị số 4 void display4() { allOn(); digitalWrite(aPin, LOW); digitalWrite(dPin, LOW); digitalWrite(ePin, LOW); } // Hiển thị số 5 void display5() { allOn(); digitalWrite(bPin, LOW); digitalWrite(ePin, LOW); } // Hiển thị số 6 void display6() {
25
{ display0(); delay(1000); display1(); delay(1000); display2(); delay(1000); display3(); delay(1000); display4(); delay(1000); display5(); delay(1000); display6(); delay(1000); display7(); delay(1000); display8(); delay(1000); display9(); delay(1000); } //Hiển thị số 0 void display0() { allOn(); digitalWrite(gPin, LOW); } // Hiển thị số 1 void display1() { allOff(); digitalWrite(bPin, HIGH); digitalWrite(cPin, HIGH); } // Hiển thị số 2 void display2() { allOn(); digitalWrite(fPin, LOW); digitalWrite(cPin, LOW); } // Hiển thị số 3 void display3() { allOn(); allOn(); digitalWrite(bPin, LOW); } // Hiển thị số 7 void display7() { allOff(); digitalWrite(aPin, HIGH); digitalWrite(bPin, HIGH); digitalWrite(cPin, HIGH); } // Hiển thị số 8 void display8() { allOn(); } // Hiển thị số 9 void display9() { display8(); digitalWrite(ePin, LOW); } void allOn() { digitalWrite(aPin, HIGH); digitalWrite(bPin, HIGH); digitalWrite(cPin, HIGH); digitalWrite(dPin, HIGH); digitalWrite(ePin, HIGH); digitalWrite(fPin, HIGH); digitalWrite(gPin, HIGH); } void allOff() { digitalWrite(aPin, LOW); digitalWrite(bPin, LOW);
digitalWrite(ePin, LOW); digitalWrite(fPin, LOW); }
digitalWrite(cPin, LOW); digitalWrite(dPin, LOW); digitalWrite(ePin, LOW); digitalWrite(fPin, LOW); digitalWrite(gPin, LOW); }
6. Xe điều khiển từ xa
6.1. Mô hình thực tế: Điều khiển từ xa được ứng dụng rất nhiều trong thực tế: Các thiết bị dân dụng trong gia đình; trong các trò chơi điện tử; ô tô, máy bay điều khiển từ xa; trong quân đội; trong vũ trụ;…
6.2. Mô hình Tin học: Lập trình điều khiển xe ô tô bằng Bluetooth.
Bắt đầu
Cài đặt chức năng các chân
Đ
Tiến
Cài đặt động cơ trái, phải quay tiến
S
Đ
Lùi
Cài đặt động cơ trái, phải quay lùi
S
Đ
Rẽ phải
Cài đặt động cơ phải dừng, động cơ trái quay tiến
S
Cài đặt động cơ trái dừng, động cơ phải quay tiến
6.3. Sơ đồ thuật toán:
6.4. Các linh kiện cần thiết và sơ đồ đấu nối:
Sơ đồ đấu nối Tên linh kiện
Số lượng
26
Arduino Uno R3 1
L298N 1
1
Bluetooth-HC05 (HC06)
Motor 2
Bánh đa hướng 1
Khung xe 1
Dây cắm 20
Nguồn
4 pin 3,7V
6.5. Giải quyết vấn đề bằng lập trình:
Code
27
motor_left( spd-20 , 0);
motor_right( spd , 0);
}
void rightforw () // quay phai nhanh
{
Serial.println("motor cua trai nhanh ");
motor_left( spd , 0);
motor_right( spd-20 , 0);
}
void rightback () // quay phai nhanh
{
Serial.println("motor cua trai nhanh ");
motor_left( spd , 1);
motor_right( spd-20 , 1);
}
void leftback () // quai phai nhanh
{
Serial.println("motor cua trai nhanh ");
motor_left( spd-20 , 1);
motor_right( spd , 1);
} #include
28
delay(100); bluetooth.println("U,9600,N"); bluetooth.begin(9600); Serial.begin(9600); // định nghĩa chân tín hiệu in & out pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } // dieu khien motor trai void motor_left(int spd, byte dir) { if (dir == 0) // motor trái quay tới { digitalWrite(in2, LOW); digitalWrite(in1, HIGH); } else if (dir == 1) // motor trái quay lùi { digitalWrite(in2, HIGH); digitalWrite(in1, LOW); } else if (dir == 2)// motor trái đứng yên { digitalWrite(in1, LOW); digitalWrite(in2,LOW); } // băm xung cho motor trái analogWrite(enA, spd ); } // dieu khien motor phai void motor_right(int spd, byte dir) { if (dir == 0) // motor phải quay tới { void tack() { motor_left( spd , 2); motor_right( spd , 2); } void robot_android() { if ( bluetooth.available() ) { blue =bluetooth.read(); Serial.println("gia tri cua blue la "); Serial.println(blue); } switch (blue ) { case('0'): spd = 70; case('1'): spd = 80; break; case('2'): spd = 100; break; case('3'): spd = 110; break; case('4'): spd = 127; break; case('5'): spd = 140; break; case('6'): spd = 160; break; case('7'):
29
digitalWrite(in4, LOW); digitalWrite(in3, HIGH); } else if (dir == 1)//motor phải quay lùi { digitalWrite(in4, HIGH); digitalWrite(in3, LOW); } else if (dir ==2)//motor phải dứng lùi { digitalWrite(in3, LOW); digitalWrite(in4, LOW); } analogWrite(enB, spd ); } void forw () // chay { Serial.println("motor di thang"); motor_right(spd , 0); motor_left( spd , 0); } void back () // chay lui { Serial.println("motor di lui"); motor_right(spd , 1); motor_left( spd , 1); } void right () // quay trai { Serial.println("motor cua trai"); motor_right(spd , 0); motor_left( spd , 2); } void left () // quai phai { Serial.println("motor cua phai"); spd = 200; break; case('8'): spd = 230; break; case('9'): spd = 255; break; case ('S'): tack(); break; case ('F'): forw(); break; case ('B'): back(); break; case ('L'): left(); break; case ('R'): right(); break; case ('H'): leftback(); break; case ('J'): rightback(); break; case ('I'): rightforw(); break; case ('G'): leftforw(); break; }
} void loop() { robot_android(); }
cua phai
motor_left( spd , 0); motor_right( spd , 2); } void leftforw () // quai phai cham { Serial.println("motor nhanh");
7. Xe tránh vật cản
7.1. Mô hình thực tế: Các robot trong các nhà máy với khả năng tìm đường và tránh vật cản sẽ thực hiện nhiệm vụ chính xác và an toàn hoặc các dòng ô tô mới hiện đại luôn có hệ thống cảnh báo trước va chạm hoặc xe ô tô đồ chơi của trẻ con cũng có thể tự động tránh vật cản khi chạy,…
7.2. Mô hình Tin học: Lập trình xe ô tô tự động tránh vật cản.
Bắt đầu
Cài đặt chức năng các chân
Đọc giá trị cảm biến siêu âm
Đ
Cài đặt động cơ trái, phải quay tiến
Khoảng cách tới vật cản lớn hơn 20cm
S
Cài đặt động cơ trái, phải quay lùi
7.3. Sơ đồ thuật toán:
7.4. Các linh kiện cần thiết và sơ đồ đấu nối:
Sơ đồ đấu nối Tên linh kiện
Số lượng
30
Arduino Uno R3 1
1 L298N
1
Cảm biến siêu âm HC-SR04 (SR05)
1 Động cơ servo
2 Motor
1 Bánh đa hướng
1 Khung xe
Dây cắm 23
Nguồn
4 pin 3,7V
6.5. Giải quyết vấn đề bằng lập trình:
Code
31
#include
32
Servo servo_motor; //our servo name void setup() { Serial.begin(9600); pinMode(RightMotorForward, OUTPUT); pinMode(LeftMotorForward, OUTPUT); pinMode(LeftMotorBackward, OUTPUT); pinMode(RightMotorBackward, OUTPUT); pinMode(ena, OUTPUT); pinMode(enb, OUTPUT); servo_motor.attach(9); //our servo pin servo_motor.write(90); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); analogWrite(ena, 200); // chinh toc do dong co ben trai analogWrite(enb, 200); // chinh toc do dong co ben trai } void loop() { int distanceRight = 0; int distanceLeft = 0; delay(50); if (distance <= 20){ moveStop(); // dung lai { digitalWrite(RightMotorForward, LOW); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); digitalWrite(LeftMotorBackward, LOW); } // di thang void moveForward(){ if(!goesForward) { goesForward=true; digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); } } void moveBackward() { goesForward=false; digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorBackward, HIGH); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorForward, LOW); } void turnRight()
33
delay(300); moveBackward(); // lui ve sau delay(400); moveStop();// dung lai delay(300); distanceRight = lookRight(); // lay khoang cach ben trai delay(300); distanceLeft = lookLeft(); // lay khoang cach ben phai delay(300); // neu khoang cach toi da >= khoang cach ben trai if (distance >= distanceLeft){ turnRight(); //re phai moveStop(); } else{ // ko thi turnLeft(); // re trai moveStop(); } } else{ moveForward(); // ko phai 2 truong hop tren thi chay thang } distance = readPing(); } // nhin phai lay khoang cach int lookRight(){ servo_motor.write(10); delay(500); int distance = readPing(); delay(100); servo_motor.write(90); return distance; } { digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorBackward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorForward, LOW); delay(300); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); } void turnLeft(){ digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); delay(300); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); }
V. Thực nghiệm sư phạm
1. Mục đích thực nghiệm
Thực nghiệm sư phạm để kiểm nghiệm tính khả thi và hiệu quả của việc lựa chọn một số ví dụ có nội dung phù hợp để phát triển kĩ năng lập trình cho học sinh thông qua tiếp cận các bài toán thực tiễn, đồng thời cũng nhằm kiểm nghiệm tính đúng đắn của đề tài.
Thực nghiệm sử dụng các bài tập có nội dung thực tiễn về cấu trúc rẽ nhánh, cấu trúc lặp, mảng một chiều, chương trình con,... được viết trên nền tảng Arduino sử dụng ngôn ngữ C++.
Đưa vào những bài toán với số lượng và mức độ phù hợp với bài dạy, quỹ thời gian thực hiện, phù hợp với trình độ nhận thức chung của học sinh, có tính thực tiễn cao.
2. Nội dung thực nghiệm
2.1. Dạy học kết hợp ví dụ mô phỏng các bài toán thực tiễn sử dụng mạch
Arduino trong các tiết học.
a) Thực trạng:
Là học sinh miền núi do ít được tiếp cận với công nghệ thông tin nên hầu hết học sinh học chưa thực sự hiểu lập trình là gì và ứng dụng của nó như thế nào. Vì thế đa số các em chưa định hướng được học lập trình để làm gì và nó có ứng dụng quan trọng như thế nào trong đời sống. Vì vậy khi dạy học về lập trình giáo viên thường nghe câu “thầy (cô) ơi, học cái này để làm gì?”.
Trong các tiết dạy lập trình thường giáo viên chỉ chăm chăm dạy các câu lệnh và rèn luyện cho học sinh kĩ năng giải các bài toán thuần túy về toán học sử dụng câu lệnh đã học. Ít khi giáo viên để ý và liên hệ cho học sinh các bài toán thực tiễn sử dụng câu lệnh đó như thế nào.
Khi tiếp cận các câu lệnh trong lập trình thường học sinh chủ yếu thực hành giải quyết các bài toán thông qua các phần mềm mà chưa có mô hình mô phỏng một cách trực quan nhất về các câu lệnh. Vì thế học sinh thường không có hứng thú với môn học, cảm thấy môn học rất tẻ nhạt.
b) Giải pháp:
34
Từ các bài toán thực tiễn rất gần gũi trong cuộc sống hằng ngày, tùy vào kiến thức và kĩ năng cần đạt của mỗi tiết học mà giáo viên thực hiện lồng ghép giới thiệu để học sinh tiếp cận với các ứng dụng của lập trình trong thực tiễn. Kết hợp với phương pháp lập trình trên mạch Arduino tạo mô hình thực tế giáo viên đã thực hiện để học sinh quan sát, kiểm nghiệm tính đúng đắn, hiệu quả và thực thi của các câu lệnh. Với cấu trúc tuần tự học sinh sẽ được làm quen với bài toán “Đèn tín hiệu giao thông”. Cấu trúc rẽ nhánh giáo viên sử dụng một số bài toán thực tiễn như: “Nhấn nút còi kêu”; “Bật/tắt đèn theo ánh sáng môi trường” là những ví dụ trực quan rất
rõ ràng về cấu trúc rẽ nhánh. Cấu trúc lặp học sinh được làm quen với bài toán “Đèn sáng đuổi nhau”. Từ bài toán “Đèn sáng đuổi nhau” sử dụng câu lệnh for giáo viên phát triển sang kiểu mảng một chiều. Đối với chương trình con GV sử dụng bài toán “Led 7 thanh”. Ngoài các ví dụ tiếp cận kiến thức bài học, HS được làm quen với ví dụ nâng cao hơn về tự động hóa và điều khiển đó là “Xe điều khiển từ xa bằng Bluetooth” và “Xe tránh vật cản”.
c) Hiệu quả:
- Qua các ví dụ mô phỏng trong cuộc sống thường nhật sẽ cung cấp một kết nối tự nhiên và chân thực cho việc tiếp thu kiến thức của học sinh. Học sinh sẽ hiểu được các câu lệnh sẽ được sử dụng như thế nào, trong trường hợp nào, bài toán nào và ứng dụng vào bài toán thực tiễn ra sao.
- Học sinh hiểu về môn học, thấy được ý nghĩa và mục đích của việc học lập
trình từ đó có sự đam mê, hứng thú hơn đối với môn học.
- Thấy được tầm quan trọng của ngôn ngữ lập trình trong học tập, trong đời
sống, xã hội,…
- Giúp học sinh có những trải nghiệm thú vị với môn học.
- Là tiền đề thúc đẩy sự đam mê học hỏi và tiếp cận đến công nghệ cho HS.
- Giúp HS có những hiểu biết và hình dung ban đầu về trí tuệ nhân tạo.
2.2. Hướng dẫn học sinh tìm hiểu bài toán thực tiễn qua internet
a) Thực trạng:
Thời lượng của các tiết học, bài học là rất ít nên không thể giới thiệu hết tất cả
các bài toán thực tiễn đến học sinh.
Học sinh muốn học hỏi kinh nghiệm và tìm hiểu thêm về các bài toán thực tiễn
nhưng không biết lấy thông tin từ đâu.
Một số học sinh có ý tưởng và thực hiện các bài toán thực tiễn nhưng chưa biết
nên bắt đầu như thế nào.
b) Giải pháp:
Giáo viên tìm hiểu và chia sẻ cho học sinh các trang tài liệu chính thống, mang tính giáo dục cao để học sinh tìm hiểu và nghiên cứu. Một số trang web hỗ trợ học sinh tìm hiểu về lập trình, về các bài toán thực tiễn, về khoa học công nghệ, về sáng chế KHKT, về phát triển ý tưởng khởi nghiệp:
1. Dành cho những người chưa hề biết gì về lập trình/điện tử hoặc đã có kinh
nghiệm: http://arduino.vn/
2. Tìm hiểu về phần cứng, hướng dẫn cài đặt phần mềm và lập trình Arduino
https://www.youtube.com/channel/UCpxWS5h_Pv8VWKIo9-N4nHw/playlists
35
Hoặc https://arduinokit.vn/
3. Kênh sáng tạo trẻ:
https://www.youtube.com/c/K%C3%AAnhS%C3%A1ngT%E1%BA%A1oTr%E1 %BA%BB0902/featured?app=desktop
4. Kênh Sáng Tạo .COM: Từ những nguyên vật liệu đơn giản thường thấy hằng
ngày tạo nên những đồ vật hữu ích và thiết thực.
https://www.youtube.com/channel/UCyhbCnDC6BWUdH8m-RUJHug
5. Make: Những sáng chế thú vị và hữu ích trong cuộc sống
https://www.youtube.com/user/makemagazine
6. Robot cho mọi người.
https://www.youtube.com/channel/UCk7DBrxA4J8qSKYrCcTn4qQ
Sự nỗ lực, chịu khó cộng với niềm đam mê nghiên cứu đã giúp em Trần Hữu Phúc lớp 11E trường THPT Tương Dương 1 thành công với sản phẩm “Cánh tay Robot thông minh” (Giải nhất) và “Thiết bị điều hướng pin mặt trời” (Giải khuyến khích) cuộc thi Sáng tạo thanh thiếu niên nhi đồng Nghệ An 2018-2019.
…
c) Hiệu quả:
- Nâng cao khả năng tự học, tự tìm tòi nghiên cứu của học sinh, khuyến khích
học tập suốt đời.
- HS biết thêm những kiến thức, kĩ năng về lập trình, cơ khí, điện, điện tử và
điều khiển tự động.
- Khơi dậy niềm đam mê nghiên cứu, sáng tạo, phát triển ý tưởng phục vụ cuộc
sống.
2.3. Giới thiệu và chia sẻ cho học sinh biết đến các sản phẩm có tính ứng
dụng thực tiễn cao trong các cuộc thi về nghiên cứu khoa học.
a) Thực trạng:
36
Thực tế các sản phẩm của học sinh đạt giải tại các cuộc thi về nghiên cứu khoa học hoặc các dự án khởi nghiệp chưa được học sinh biết đến nhiều. Một phần vì học sinh ít quan tâm và một phần cũng vì việc tuyên truyền chưa thật tốt.
b) Giải pháp:
Để truyền cảm hứng cho HS tìm tòi, nghiên cứu, tìm kiếm ý tưởng cho bản thân. Giáo viên chia sẻ đến học sinh biết về các cuộc thi và các sản phẩm có tính thực tiễn cao đạt giải tại các cuộc thi thông qua các tiết học hoặc các trang Zalo, Facebook,... của lớp.
1. Cuộc thi KHKT
- Dự án “Sử dụng Adunio xây dựng cảnh báo chặt phá rừng”. Giải nhất cuộc
thi KHKT Nghệ An năm 2020-2021.
- Dự án “Sử dụng tinh bột và Gelatin để sản xuất vật liệu bao gói hữu cơ đựng gia vị” lĩnh vực Hóa học các tác giả Lê Huy Thành và Trần Phương Linh, học sinh Trường THCS Đặng Thai Mai - thành phố Vinh. Giải nhất cuộc thi KHKT Nghệ An năm 2020-2021. Giải nhất cuộc thi KHKT Nghệ An năm 2020-2021.
- Dự án “Nghiên cứu tách và sử dụng sợi thiên nhiên từ lá cây lưỡi hổ” thuộc lĩnh vực Khoa học vật liệu của các tác giả Nguyễn Thị Anh Thư và Nguyễn Thị Lê Na, học sinh Trường THCS Hòa Hiếu 1 - Thị xã Thái Hòa. Giải nhất cuộc thi KHKT Nghệ An năm 2020-2021. Giải nhất cuộc thi KHKT Nghệ An năm 2020-2021.
- Dự án “Cải tiến xe lăn bổ trợ dụng cụ phục hồi chức năng” của nhóm tác giả Trương Văn An, Phan Quỳnh Trang - học sinh lớp 8 Trường THCS Trà Lân (Con Cuông) là 1 trong 9 dự án đạt giải Nhất cuộc thi Sáng tạo KHKT dành cho học sinh trung học tỉnh Nghệ An.
2. Cuộc thi sáng tạo thanh thiếu niên nhi đồng
- Dự án “Cánh tay robot”. Giải nhất cuộc thi sáng tạo thanh thiếu niên nhi đồng
Nghệ An 2018-2019 của em Trần Hữu Phúc trường THPT Tương Dương 1.
- Dự án "Guồng nước đa năng". Giải nhất cuộc thi sáng tạo thanh thiếu niên
nhi đồng toàn quốc năm 2020 của học sinh Trường THCS Diễn Hải (Diễn Châu).
- Dự án “Bee tracking system – Hệ thống theo dõi ong” của em Trần Thị Hồng Thắm HS trường THPT Anh Sơn 2 giải ba cuộc thi sáng tạo thanh thiếu niên nhi đồng toàn quốc lần thứ 17, năm 2020-2021.
3. Cuộc thi “Solve for Tomorrow” (Kiến tạo tương lai).
- Dự án “Thiết bị truyền dịch thông minh” áp dụng trong lĩnh vực y tế của HS Trường PTDTNT-THCS Tương Dương năm 2021 đạt giải cộng đồng cuộc thi “Solve for Tomorrow” (Kiến tạo tương lai).
4. Đề án khởi nghiệp quốc gia dành cho học sinh, sinh viên https://dean1665.vn/
- Dự án “Phở khô rau củ quả” của các học sinh Lê Hồ Phương Linh, Võ Minh Anh, Lê Nguyễn Thùy Linh, Vi Xuân Thái - Trường THCS thị trấn Quỳ Hợp. Đạt đạt giải ba tại ngày hội khởi nghiệp quốc gia năm 2022.
37
…
Dự án “Thiết bị truyền dịch thông minh” đạt giải cộng đồng cuộc thi “Solve for Tomorrow”
Dự án “Phở khô rau củ quả” đạt giải ba tại ngày hội khởi nghiệp quốc gia năm 2022.
c) Hiệu quả:
- Truyền cảm hứng đến HS
- Lan tỏa tinh thần nghiên cứu khoa học
- Giúp HS thay đổi tư duy, nhận thức, dám nghĩ, dám làm và có khát vọng lớn
để biến ước mơ, ý tưởng thành hiện thực.
3. Tổ chức thực nghiệm
Thực nghiệm sư phạm được tiến hành tại một số lớp ở Trường THPT Tương
Dương 1 năm học 2021-2022.
Thời gian thực nghiệm được tiến hành vào khoảng thời gian từ đầu tháng 10
đến đầu tháng 4.
Giáo viên dạy lớp thực nghiệm: Nguyễn Thị Hương Trà.
Giáo viên dạy lớp đối chứng: Nguyễn Thị Nhàn.
Kết quả học tập của các lớp là tương đương.
4. Kết quả đạt được
Theo dõi tiến trình thực nghiệm sư phạm, chúng tôi thấy rằng: Nhìn chung đa số học sinh học tập tích cực, sôi nổi hơn, thích thú với những bài toán có nội dung thực tiễn. Sự hấp dẫn của các bài toán có nội dung thực tiễn cũng chính là ở chỗ gắn các kiến thức lập trình với các ứng dụng trong học tập cũng như trong đời sống, lao động, sản xuất. Điều đó kích thích sự hứng thú của giáo viên lẫn HS trong thời gian thực nghiệm.
Giúp học sinh có những trải nghiệm thú vị hơn với môn học, đặc biêt là lan tỏa hơn tinh thần nghiên cứu, sáng tạo KHKT. Từ đó giúp cho học sinh phát triển trí tuệ, rèn luyện khả năng lao động sáng tạo, tham gia giờ học tích cực và đặc biệt là yêu thích, hứng thú hơn trong việc tiếp cận với lập trình, khơi dậy niềm đam mê nghiên cứu khoa học trong mỗi học sinh.
Góp phần quan trọng trong việc đổi mới dạy học, gắn dạy học lý luận vào thực
38
tiễn.
Nhận định chung cho rằng, điều khó khăn nhất cần và có thể vượt qua nếu ý tưởng này được triển khai về sau là lựa chọn được một hệ thống bài tập có nội dung thực tiễn thích hợp cho mỗi tiết học để phát triển khả năng lập trình cho học sinh.
Qua các tiết dạy các thầy giáo, cô giáo hãy tiếp tục khuyến khích các em tự xây dựng các đề tài nghiên cứu xuất phát từ chính suy nghĩ, ý tưởng của mình. Thành quả đạt được chính là sự năng động, tích cực, sáng tạo không chỉ trong học tập mà còn có ý nghĩa trong cuộc sống sau này.
* Khảo sát sau khi thực nghiệm:
Như vậy, so với kết quả khảo sát trước khi chưa thực nghiệm đã phần nào làm thay đổi nhận thức và kiến thức của học sinh. Mức độ HS yêu thích học lập trình, HS quan tâm và muốn tìm hiểu, muốn thực hiện các bài toán thực tiễn tăng lên. HS dần xác định được mục tiêu và định hướng học tập cho bản thân.
5. Một số lưu ý an toàn khi làm việc với các linh kiện
a) An toàn về điện
- Dùng các dây nối có vỏ bọc, không để mạch điện bị đoản khi va chạm.
- Không chạm vào thiết bị khi tay, chân bị ướt.
- Sửa chữa hoặc thay thế ngay các thiết bị điện bị hỏng.
- Không cấp nguồn vượt quá ngưỡng điện áp của linh kiện
- Khi kết nối các bộ phận điện tử cần đặc biệt lưu ý các chân âm, dương. Nếu
kết nối nhầm các chân sẽ làm hỏng linh kiện.
b) An toàn về cơ học
- Bảo vệ các thiết bị không bị va chạm mạnh, rơi,…
- Tránh dùng tay hoặc chân cản đường đi hoặc sự vận động của các thiết bị.
Nếu cần dừng hãy sử dụng công tắc nguồn.
39
- Các thiết bị có thể hoạt động ngay sau khi nạp chương trình, cần vô hiệu hóa khả năng di chuyển bằng cách không cho bánh xe tiếp xúc với bề mặt di chuyển (mặt đất, mặt bản,…).
6. Một số bài toán thực tiễn lập trình trên mạch Arduino đã được thực
Cảm biến ánh sáng
Led giao thông
Led sáng dần tắt dần
Nhấn nút còi kêu
Led 7 thanh
Xe tránh vật cản
Xe điều khiển từ xa bằng bluetooth
40
hiện trong quá trình thực nghiệm.
PHẦN III. KẾT LUẬN
I. Quá trình nghiên cứu
- Từ 06/09/2021 đến 15/10/2021: Chọn đề tài, viết đề cương nghiên cứu.
- Từ 16/10/2021 đến 02/12/2021: Đọc tài liệu lý thuyết, viết cơ sở lý luận.
- Từ 03/12/2021 đến 01/04/2022: Áp dụng đề tài vào thực tiễn.
- Từ 02/04/2022 đến 10/04/2022: Viết báo cáo, trình bày báo cáo trước tổ
chuyên môn và xin ý kiến đóng góp.
- Từ 11/04/2022 đến 20/04/2022: Hoàn thiện đề tài.
II. Ý nghĩa của đề tài
- Đề tài có ý nghĩa quan trọng trong việc phát triển tư duy sáng tạo, kĩ năng lập trình cũng như kỹ năng sống cho các em học sinh. Bước đầu đã hình thành cho các em một thói quen tự học, tự nghiên cứu, tự khám phá, đồng thời giúp các em linh hoạt hơn, chủ động hơn và không rập khuôn máy móc trong việc học lập trình. Mặt khác, qua nội dung của đề tài sẽ góp phần vào việc khơi gợi niềm đam mê lập trình, nghiên cứu khoa học, biết áp dụng kiến thức vào thực tiễn để giải quyết nhiều tình huống trong đời sống.
- Đề tài đã làm rõ được vai trò quan trọng của việc rèn luyện cho học sinh năng lực vận dụng kiến thức lập trình vào thực tiễn. Đồng thời đã xây được một số bài toán có nội dung thực tiễn nhằm phát triển kĩ năng lập trình cho học sinh.
- Đề tài góp phần vào dạy học STEM, định hướng nghiên cứu khoa học, sáng
chế các thiết bị hữu ích phục vụ đời sống.
- Từng bước phấn đấu thực hiện thành công CT GDPT 2018 với mục tiêu phát
triển năng lực và phẩm chất người học.
- Thúc đẩy giáo viên tự bồi dưỡng, nâng cao năng lực chuyên môn nghiệp vụ,
đáp ứng thực hiện hiệu quả CT GDPT 2018.
III. Kiến nghị, đề xuất
- Bồi dưỡng thường xuyên cho giáo viên về đổi mới phương pháp dạy học.
- Tăng cường đầu tư cơ sở vật chất, trang thiết bị phù hợp đáp ứng các hình
thức dạy học tích cực.
- Tăng cường đầu tư về thiết bị đáp ứng nhu cầu dạy học tin học ở các trường
học.
- Đề xuất phát triển phương pháp này trong toàn khối lớp 11 của trường, nhân
rộng ra các trường bạn.
41
- Mặc dù bản thân cũng đã cố gắng tìm tòi và đúc rút kinh nghiệm, trao đổi đồng nghiệp nhưng chắc chắn đề tài còn nhiều thiếu sót. Để đề tài có tác dụng tích cực trong việc dạy học phát triển năng lực cho học sinh, kính mong hội đồng khoa
học và quý thầy (cô) góp ý bổ sung để đề tài ngày một hoàn thiện hơn, có ứng dụng rộng hơn trong quá trình dạy học ở Trường THPT.
IV. Kết luận khoa học
42
Quá trình nghiên cứu được thực hiện nghiêm túc, đảm bảo cơ sở khoa học, mang tính khách quan, huy động được nguồn lực về tài liệu, con người đảm bảo tính pháp lý và độ tin cậy cao. Đề tài được vận dụng có hiệu quả tại một số lớp ở Trường THPT Tương Dương 1 trong học năm học 2021-2022 và được chỉnh sửa, bổ sung thêm phù hợp với thực tiễn hơn, có hiệu quả cao hơn đối với các trường THPT.
TÀI LIỆU THAM KHẢO
1. Chương trình GDPT 2018 tổng thể
2. Chương trình GDPT 2018 môn Tin học
3. Tài liệu tập huấn C++, Sở Giáo dục Nghệ An
4. Sách chuyên đề Khoa học máy tính 10 bản mẫu NXB Đại học sư phạm - Hồ Sĩ Đàm (Tổng chủ biên)
5. Trang web http://arduino.vn/ , https://arduinokit.vn/
6. Một số tài liệu trên mạng internet.
PHỤ LỤC
PHIẾU THĂM DÒ Ý KIẾN
(Mẫu: Dành cho học sinh trường THPT Tương Dương 1)
Phiếu số 1: Em thích học lập trình vì?
1. Bài học sinh động dễ hiểu, gắn liền với thực tiễn
2. Được thực hành trên máy tính
3. Bình thường
4. Không thích vì trừu tượng, khó hiểu
Phiếu số 2: Mối quan tâm của em về ứng dụng của lập trình trong thực tiễn?
1. Không quan tâm
2. Mới chỉ nghe nói đến
3. Rất muốn tìm hiểu
4. Đang tìm hiểu
43
5. Đang thực hiện