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
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.
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.
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ế.
Tóm tắt nội dung tài liệu: 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
XTERNAL): 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). 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 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() 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 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 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 Một số bài toán thực tiễn lập trình trên mạch Arduino Đèn tín hiệu giao thông 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. 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 Sơ đồ thuật toán: Chờ 30 giây Đèn đỏ Chờ 3 giây Đèn vàng Chờ 30 giây Đèn xanh 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 3 Điện trở 3 Bo cắm 1 Dây cắm 7 Nguồn 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); } Nhấn nút còi kêu 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ô,... 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 Sơ đồ thuật toán: Đ Nút được nhấn S Còi dừng kêu Còi kêu 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 Giải quyết bằng lập trình: Code 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); } } Đèn sáng đuổi nhau 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, 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ơ đồ thuật toán: Tắt lần lượt 8 Led Sáng lần lượt 8 Led 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 8 Điện trở 8 Bo cắm 1 Dây cắm 10 Nguồn 2 pin 3,7V 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) 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); 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 } //bật dần 8 led for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, HIGH); delay(200); } } for (int i=0; i <=7; i++) { digitalWrite(led[i], HIGH); delay(200); } } Bật/tắt đèn theo ánh sáng môi trường 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, 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 Sơ đồ thuật toán: Đ Môi trường tối S Led tắt Led sáng Đọc giá trị cảm biến ánh sáng 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 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 Giải quyết vấn đề bằng lập trình: Code 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); } Chữ số trên đồng hồ điện tử (Led 7 thanh) 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,... 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 Sơ đồ thuật toán: Hiển thị số 9 Hiển thị số 8 Hiển thị số 7 Hiển thị số 6 Hiển thị số 5 Hiển thị số 4 Hiển thị số 3 Hiển thị số 2 Hiển thị số 1 Hiển thị số 0 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 Giải quyết bằng lập trình: Code 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() { { 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); } Xe điều khiển từ xa 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ụ; 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 Sơ đồ thuật toán: Đ Tiến S Đ Lùi S Đ Rẽ phải S Cài đặt động cơ trái dừng, động cơ phải quay tiến Cài đặt động cơ phải dừng, động cơ trái quay tiến Cài đặt động cơ trái, phải quay lùi Cài đặt động cơ trái, phải quay tiến 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 R3 1 L298N 1 Bluetooth-HC05 (HC06) 1 Motor 2 Bánh đa hướng 1 Khung xe 1 Dây cắm 20 Nguồn 4 pin 3,7V Giải quyết vấn đề bằng lập trình: Code #include // định nghĩa chân 2 là chân truyền tín hiệu int bluetoothTx = 2; // định nghĩa chân 3 là chân nhận tín hiệu int bluetoothRx = 3; SoftwareSerial bluetooth(bluetoothTx, bluet
File đính kèm:
- sang_kien_kinh_nghiem_giup_hoc_sinh_tiep_can_cac_bai_toan_th.docx
- Nguyễn Thị Hương Trà, Vương Văn Phong-THPT Tương Dương 1-Tin học.pdf