Dự án STEM THPT với cảm biến và màn hình: gợi ý theo môn, dự án mẫu đo gia tốc g bằng con lắc đơn

Gợi ý dự án STEM THPT theo môn với cảm biến và màn hình; dự án mẫu Vật lý đo gia tốc trọng trường bằng con lắc đơn, cổng quang, ESP32, OLED, tính sai số và viết báo cáo.

Ở THPT, học sinh đã đủ kiến thức để làm những dự án STEM có số đo thật, có xử lý sai số và có báo cáo, chứ không chỉ lắp cho chạy. Bài này dành cho giáo viên THPT: gợi ý dự án theo từng môn với cảm biến và màn hình, rồi đi trọn một dự án mẫu môn Vật lý là đo gia tốc trọng trường g bằng con lắc đơn: ESP32 đo chu kỳ bằng cổng quang chính xác tới micro giây, hiện kết quả trên màn hình OLED, xuất số liệu cho bảng tính và tự tính sai số.

1. Ba hình thức giáo dục STEM ở trường trung học

Công văn 3089/BGDĐT-GDTrH ngày 14/8/2020 của Bộ GD&ĐT nêu ba hình thức tổ chức giáo dục STEM:

  • Dạy học các môn khoa học theo bài học STEM: hình thức chủ yếu, gắn với nội dung chương trình, thường vài tiết và một khoảng thời gian làm ở nhà.
  • Tổ chức hoạt động trải nghiệm STEM: ngày hội, câu lạc bộ, tham quan, tìm hiểu ứng dụng khoa học kỹ thuật.
  • Tổ chức hoạt động nghiên cứu khoa học, kỹ thuật: học sinh làm dự án dài, có thể dự cuộc thi khoa học kỹ thuật dành cho học sinh trung học.

Dự án mẫu trong bài dùng được cho hình thức thứ nhất (2–3 tiết thực hành) và mở rộng thành đề tài nghiên cứu nhỏ cho hình thức thứ ba.

2. Gợi ý dự án theo môn

Bảng gợi ý: Vật lý đo g bằng con lắc đơn, đo tốc độ âm thanh bằng hai micro, kiểm chứng định luật Boyle; Hóa học phản ứng tỏa nhiệt thu nhiệt; Sinh học hô hấp của hạt nảy mầm đo CO2; Công nghệ hệ thống tưới, nhà kính; Tin học trạm đo gửi dữ liệu lên web
Dự án STEM THPT theo môn, cảm biến và kiến thức liên quan.

Điểm chung của các dự án tốt: có câu hỏi đo được (bao nhiêu, nhanh hay chậm, phụ thuộc vào gì), có số liệu lặp lại nhiều lần để tính trung bình và sai số, và có so sánh với lý thuyết hoặc giá trị tham khảo.

3. Dự án mẫu: đo gia tốc trọng trường bằng con lắc đơn

Với góc lệch nhỏ, chu kỳ con lắc đơn là T = 2π√(L/g), nên đo được chiều dài L và chu kỳ T thì tính được g = 4π²L/T². Bấm đồng hồ bằng tay sai số khoảng 0,1–0,2 giây mỗi lần bấm; cổng quang và ESP32 ghi thời điểm chính xác tới micro giây, học sinh có thể tập trung vào phần quan trọng hơn: sai số đến từ đâu, làm sao giảm.

Kiến thức liên quan: dao động điều hòa, con lắc đơn (Vật lý 11), sai số phép đo (Vật lý 10). Giá trị g ở Việt Nam khoảng 9,78 m/s², thay đổi theo vĩ độ và độ cao.

Bố trí thí nghiệm

Con lắc đơn treo trên giá cố định, góc lệch không quá 10 độ, chiều dài L đo từ điểm treo tới tâm quả nặng, cổng quang đặt ở vị trí thấp nhất
Cổng quang đặt ở vị trí thấp nhất của quả nặng.

Chuẩn bị cho mỗi nhóm

Sơ đồ nối: cảm biến cổng quang VCC 3V3, GND, OUT D27; OLED GND, VCC 3V3, SCL D22, SDA D21
Cổng quang ở GPIO27, OLED qua I2C.

Chương trình

Cần thư viện Adafruit SSD1306 (cài qua Library Manager) cho màn hình. Phần đo thời gian chỉ dùng ngắt và micros() của ESP32.

// PYWORLD.VN - Dự án STEM Vật lý: đo gia tốc trọng trường g bằng con lắc đơn, cổng quang hồng ngoại và ESP32, hiện kết quả trên OLED
// PYWORLD.VN - Cảm biến OUT vào GPIO27 (xuống mức thấp khi quả nặng che tia); OLED SDA D21, SCL D22; bấm BOOT để đo lại từ đầu
// PYWORLD.VN - Gõ L0.800 trên Serial Monitor để nhập chiều dài con lắc (m); mỗi chu kỳ in một dòng CSV, đủ 20 chu kỳ thì in tổng kết

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

const int CHAN_CONG = 27, CHAN_NUT = 0;
const int SO_CHU_KY = 20;
const uint32_t BO_QUA_US = 100000;         // 0,1 s sau mỗi lần qua cổng: bỏ các cạnh dội của tín hiệu
const float SAI_SO_L = 0.002;              // m: sai số khi đo chiều dài bằng thước (tùy thước và cách đo)

Adafruit_SSD1306 oled(128, 64, &Wire, -1);
float chieuDai = 0.800;                    // m, từ điểm treo tới tâm quả nặng
volatile uint32_t lucQua[2 * SO_CHU_KY + 1];
volatile int soLanQua = 0;
volatile uint32_t lanQuaCuoi = 0;
int daXuLy = 0;                            // số chu kỳ đã tính
double tbT = 0, m2 = 0;                    // trung bình và tổng bình phương độ lệch (cách Welford)
float tCuoi = NAN;

// Mỗi lần quả nặng che tia (cạnh xuống) ghi thời điểm, tính bằng micro giây.
void IRAM_ATTR ngatCong() {
  uint32_t t = micros();
  if (t - lanQuaCuoi < BO_QUA_US || soLanQua > 2 * SO_CHU_KY) return;
  lanQuaCuoi = t;
  lucQua[soLanQua] = t;
  soLanQua = soLanQua + 1;
}

float gTu(float t) {                       // T = 2π√(L/g)  →  g = 4π²L/T²
  return 4 * PI * PI * chieuDai / (t * t);
}

void batDauLai() {
  noInterrupts();
  soLanQua = 0;
  lanQuaCuoi = micros();
  interrupts();
  daXuLy = 0;
  tbT = m2 = 0;
  tCuoi = NAN;
  Serial.printf("# Do moi: L = %.3f m, %d chu ky. Keo con lac lech khoang 5-10 do roi tha\n", chieuDai, SO_CHU_KY);
  Serial.println("chu_ky,T_s,g_m_s2");
}

void veOled() {
  oled.clearDisplay();
  oled.setTextColor(SSD1306_WHITE);
  oled.setTextSize(1);
  oled.setCursor(0, 0);
  oled.printf("L=%.3f m  %d/%d", chieuDai, daXuLy, SO_CHU_KY);
  oled.setCursor(0, 14);
  if (isnan(tCuoi)) oled.print("Cho con lac qua cong");
  else oled.printf("T vua do: %.4f s", tCuoi);
  if (daXuLy > 0) {
    oled.setCursor(0, 28);
    oled.printf("T tb: %.4f s", tbT);
    oled.setTextSize(2);
    oled.setCursor(0, 44);
    oled.printf("g=%.3f", gTu(tbT));
  }
  oled.display();
}

void tongKet() {
  double doLech = sqrt(m2 / (daXuLy - 1));             // độ lệch chuẩn của T
  double saiSoT = doLech / sqrt((double)daXuLy);       // sai số ngẫu nhiên của giá trị trung bình
  float g = gTu(tbT);
  float saiSoG = g * (SAI_SO_L / chieuDai + 2 * saiSoT / tbT);
  Serial.printf("# T trung binh = %.5f s, do lech chuan = %.5f s, sai so cua trung binh = %.5f s\n", tbT, doLech, saiSoT);
  Serial.printf("# g = %.3f +/- %.3f m/s2 (L = %.3f +/- %.3f m)\n", g, saiSoG, chieuDai, SAI_SO_L);
}

void setup() {
  Serial.begin(115200);
  pinMode(CHAN_CONG, INPUT_PULLUP);
  pinMode(CHAN_NUT, INPUT_PULLUP);
  Wire.begin(21, 22);
  if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) Serial.println("# Khong thay OLED 0x3C (van do, xem tren Serial)");
  attachInterrupt(digitalPinToInterrupt(CHAN_CONG), ngatCong, FALLING);
  batDauLai();
}

void loop() {
  if (Serial.available()) {
    String lenh = Serial.readStringUntil('\n');
    lenh.trim();
    if ((lenh[0] == 'L' || lenh[0] == 'l') && lenh.substring(1).toFloat() > 0.05f) {
      chieuDai = lenh.substring(1).toFloat();
      batDauLai();
    }
  }
  if (digitalRead(CHAN_NUT) == LOW) {
    delay(300);
    batDauLai();
  }
  // Một chu kỳ = hai lần qua vị trí thấp nhất: T(k) = lúc qua lần 2k trừ lúc qua lần 2k−2.
  while (daXuLy < SO_CHU_KY && soLanQua >= 2 * (daXuLy + 1) + 1) {
    int k = daXuLy + 1;
    tCuoi = (lucQua[2 * k] - lucQua[2 * k - 2]) / 1e6f;
    daXuLy = k;
    double lech = tCuoi - tbT;
    tbT += lech / k;
    m2 += lech * (tCuoi - tbT);
    Serial.printf("%d,%.5f,%.3f\n", k, tCuoi, gTu(tCuoi));
    if (k == SO_CHU_KY) tongKet();
  }
  static uint32_t lanVe = 0;
  if (millis() - lanVe >= 200) {
    lanVe = millis();
    veOled();
  }
}
  • ngatCong() chạy ngay khi chân OUT xuống thấp (quả nặng che tia) và ghi thời điểm. Trong 0,1 giây sau đó các cạnh dội bị bỏ qua.
  • Quả nặng qua vị trí thấp nhất hai lần mỗi chu kỳ, nên chu kỳ thứ k là thời điểm lần qua thứ 2k trừ lần thứ 2k−2.
  • Trung bình và độ lệch chuẩn tính dần theo cách Welford, không cần lưu hết số liệu. Đủ 20 chu kỳ, chương trình in sai số của chu kỳ trung bình và sai số của g theo công thức Δg/g = ΔL/L + 2ΔT/T.
  • Gõ L0.750 trên Serial Monitor để đổi chiều dài; bấm BOOT để đo lại.
Tín hiệu chân OUT của cổng quang xuống 0 mỗi lần quả nặng đi qua, đánh số lần 0 tới lần 4; chu kỳ T1 từ lần 0 tới lần 2 bằng 1,7975 giây, T2 từ lần 2 tới lần 4 bằng 1,7996 giây
Từ tín hiệu cổng quang tới chu kỳ (lần đo mô phỏng).

4. Kết quả và sai số

Đồ thị 20 chu kỳ đo được quanh 1,798 giây với đường trung bình; bảng: chu kỳ trung bình 1,79814 s, độ lệch chuẩn 0,68 ms, sai số của trung bình 0,15 ms, g bằng 9,768 m/s² sai số 0,026, hiệu chỉnh biên độ 7 độ được 9,786 m/s²
Kết quả 20 chu kỳ của lần đo mô phỏng (L = 0,800 m).
Serial Monitor in dòng CSV từng chu kỳ và hai dòng tổng kết chu kỳ trung bình, g bằng 9,768 cộng trừ 0,026 m/s²; màn hình OLED hiện chiều dài, số chu kỳ 20/20, chu kỳ vừa đo, chu kỳ trung bình và g
Serial Monitor và màn hình OLED khi đo xong (theo lần đo mô phỏng).

Những điểm đáng thảo luận với học sinh, nhìn từ kết quả:

  • Sai số chủ yếu từ chiều dài: chu kỳ đo chính xác tới phần mười mili giây, còn chiều dài đo bằng thước sai vài mi-li-mét. Muốn kết quả tốt hơn thì đo L kỹ hơn (đo nhiều lần, xác định tâm quả nặng), đo thêm chu kỳ gần như không giúp gì.
  • Sai số hệ thống do biên độ: công thức chỉ đúng với góc nhỏ. Ở 7–8°, chu kỳ dài hơn khoảng 0,1 % nên g tính ra nhỏ hơn khoảng 0,2 %. Học sinh có thể kiểm chứng bằng cách đo ở 5°, 10°, 20° và so sánh.
  • Đường thẳng T² theo L: đo ở 4–5 chiều dài khác nhau, vẽ T² theo L, độ dốc bằng 4π²/g. Cách này ít phụ thuộc vào việc xác định đúng tâm quả nặng hơn.

5. Từ số đo tới báo cáo

Một báo cáo dự án ngắn gọn nên có: câu hỏi nghiên cứu; cơ sở lý thuyết; dụng cụ và cách bố trí (kèm ảnh chụp); cách đo (bao nhiêu lần, điều kiện); bảng số liệu và đồ thị; kết quả kèm sai số; thảo luận nguồn sai số và cách cải tiến; kết luận. Các tiêu chí chấm điểm cụ thể ở bài chấm điểm dự án STEM trong cùng nhóm bài cho giáo viên.

6. Lỗi hay gặp

Hiện tượngNguyên nhân thường gặpCách xử lý
Chu kỳ đo được gấp đôi giá trị mong đợiCổng quang đặt lệch về một bên, quả nặng chỉ qua cổng một lần mỗi chu kỳDời cổng quang về đúng vị trí cân bằng
Chu kỳ dao động thất thườngTín hiệu dội, quả nặng chỉ che nửa tiaChỉnh biến trở module, hạ cổng quang cho quả nặng che hẳn
g lệch nhiều (sai 1–3 %)Đo L tới mép quả nặng thay vì tâm, dây giãn, giá treo rungĐo L tới tâm; giá treo chắc; dây không giãn
Quả nặng dao động thành hình elipThả có lực đẩy ngangThả nhẹ từ tay, chờ ổn định rồi bấm BOOT đo lại

7. Xem thêm


Tin tức liên quan

Cách đọc giấy chứng nhận hiệu chuẩn: sai số, độ không đảm bảo, số hiệu chính và điểm cần kiểm tra
Cách đọc giấy chứng nhận hiệu chuẩn: sai số, độ không đảm bảo, số hiệu chính và điểm cần kiểm tra

Cách đọc giấy chứng nhận hiệu chuẩn: các phần bắt buộc theo ISO/IEC 17025, bảng sai số chiều tăng giảm, độ không đảm bảo và hệ số phủ k, áp dụng số hiệu chính và lỗi hay gặp.

Máy CNC là gì: nguyên lý, các loại máy CNC mini và lộ trình tự làm CNC, laser
Máy CNC là gì: nguyên lý, các loại máy CNC mini và lộ trình tự làm CNC, laser

Máy CNC là gì, hoạt động thế nào từ bản vẽ tới đường cắt, ba trục X Y Z, các loại máy CNC mini, laser, máy vẽ cho người tự làm, nên bắt đầu từ đâu và lộ trình 20 bài.

IC 555: chế độ dao động và đơn ổn, cách tính tần số và thời gian
IC 555: chế độ dao động và đơn ổn, cách tính tần số và thời gian

IC 555 là gì, sơ đồ chân và cấu tạo bên trong, mạch đơn ổn tạo trễ và mạch dao động nháy LED, nguồn gốc công thức t = 1,1RC và f = 1,44/((R1 + 2R2)C), bảng giá trị và mạch tạo trễ relay.

Module relay 1, 2, 4 kênh: kích mức thấp hay cao, opto cách ly, jumper JD-VCC, chọn 5 V hay 12 V
Module relay 1, 2, 4 kênh: kích mức thấp hay cao, opto cách ly, jumper JD-VCC, chọn 5 V hay 12 V

Module relay 1, 2, 4 kênh: bên trong một kênh có opto, kích mức thấp hay mức cao, jumper JD-VCC để cách ly với ESP32, chọn bản 5 V hay 12 V và đấu tải 220 V qua COM, NO an toàn.

Vẽ đa giác và hoa văn bằng lập trình: học góc trong môn Toán với Scratch
Vẽ đa giác và hoa văn bằng lập trình: học góc trong môn Toán với Scratch

Dùng nhóm lệnh Bút vẽ của Scratch để vẽ đa giác đều, ngôi sao, hoa văn, xoắn ốc; hiểu vì sao xoay góc ngoài 360 : n, góc trong, và liên hệ với môn Toán ở tiểu học.

Mạch RC: tụ nạp xả, hằng số thời gian và đo điện dung bằng ESP32
Mạch RC: tụ nạp xả, hằng số thời gian và đo điện dung bằng ESP32

Tụ nạp và xả qua điện trở, hằng số thời gian τ = R × C, các mốc 63,2 % và 5τ, ứng dụng lọc thông thấp, lọc PWM, chống dội nút nhấn, thí nghiệm đo τ và điện dung tụ bằng ESP32.

Số nhị phân cho trẻ: đếm bằng 5 thẻ chấm, giải mật thư như máy tính
Số nhị phân cho trẻ: đếm bằng 5 thẻ chấm, giải mật thư như máy tính

Dạy trẻ số nhị phân bằng 5 thẻ chấm 1, 2, 4, 8, 16: viết số, đếm và tìm quy luật, giải mật thư chữ cái, liên hệ với bit, màn hình và mạch ESP32. Hoạt động không cần máy tính.

Shield mở rộng cho Arduino Nano: đế Terminal hay Nano Sensor Shield, nối cảm biến, servo, nguồn
Shield mở rộng cho Arduino Nano: đế Terminal hay Nano Sensor Shield, nối cảm biến, servo, nguồn

So sánh đế ra chân Terminal cọc vít và Nano Sensor Shield V1.0 cho Arduino Nano: cách nối cảm biến, servo, màn hình I2C vào cụm G-V-S, cổng UART và cách cấp nguồn ngoài.


Bình luận
Đã thêm vào giỏ hàng