Microphone và âm thanh số
Bài 3 trong khóa Robot Thế hệ 4 — Điều khiển giọng nói và tương tác thông minh

G4 02 - Microphone và âm thanh số
Linh kiện cần chuẩn bị
- 1 ESP32-S3 DevKit.
- 1 module cảm biến âm thanh analog có chân AO.
- Dây jumper, breadboard, cáp USB data.
- Máy tính có Arduino IDE hoặc Arduino CLI, Serial Monitor 115200 baud.
- Bảng log gồm: min, max, peak_to_peak, level_pct, điều kiện âm thanh.
Code bài này chỉ dùng ESP32-S3 và sound sensor AO. Không dùng LED, buzzer, motor hoặc module khác.
Bài này giúp bạn làm được gì?
Raw analog thay đổi rất nhanh. Nếu chỉ đọc một mẫu, robot dễ hiểu sai. Bài này đọc nhiều mẫu trong 50 ms, lấy min/max và tính peak_to_peak để biểu diễn mức âm lượng.
Kết quả cuối bài:
- Đọc được cửa sổ âm thanh 50 ms.
- In
min,max,peak_to_peak,level_pct. - Biết vì sao tiếng vỗ tay tạo peak lớn hơn tiếng nói nhẹ.
Pin map
| Chức năng | ESP32-S3 | Thiết bị | Ghi chú |
|---|---|---|---|
| Sound AO | GPIO4 | AO của sound sensor | Tín hiệu analog |
| 3V3 | 3V3 | VCC sensor | Giữ AO trong 0-3.3V |
| GND | GND | GND sensor | Bắt buộc |
Thực hành từng bước
Bước 1: Upload code
Code hoàn chỉnh nằm tại:
code/g4-02-microphone-va-am-thanh-so/g4-02-microphone-va-am-thanh-so.ino
Log:
G4 02 sound window reader
time_ms,min,max,peak_to_peak,level_pct
Bước 2: Ghi 3 điều kiện
Ghi ít nhất 10 dòng cho mỗi điều kiện:
| Điều kiện | Dự đoán |
|---|---|
| Yên lặng | peak_to_peak thấp |
| Nói gần microphone | peak_to_peak trung bình |
| Vỗ tay | peak_to_peak cao |
Bước 3: Vẽ bảng nhanh
Tạo bảng trung bình level_pct cho 3 điều kiện. Không cần đồ thị đẹp; điều quan trọng là số liệu có phân biệt được âm lượng.
Giải thích code
Code đọc liên tục trong 50 ms:
while (millis() - startMs < SAMPLE_WINDOW_MS) {
int raw = analogRead(PIN_SOUND);
minValue = min(minValue, raw);
maxValue = max(maxValue, raw);
}
peak_to_peak = max - min cho biết dao động âm thanh trong cửa sổ đó.
Kiểm thử thật
| Test | Thao tác | Kết quả mong đợi | Pass? |
|---|---|---|---|
| 1 | Yên lặng | level_pct thấp | |
| 2 | Nói “robot” | level_pct tăng | |
| 3 | Vỗ tay | level_pct cao nhất | |
| 4 | Đưa microphone xa miệng hơn | Level giảm | |
| 5 | Ghi 30 dòng | Có dữ liệu đủ để lấy trung bình |
Lỗi thường gặp và cách sửa
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
peak_to_peak luôn 0 | AO không nối hoặc sensor hỏng | Kiểm dây AO/GND/VCC |
level_pct luôn 100 | Module quá nhạy hoặc nhiễu nguồn | Giảm biến trở độ nhạy, dây ngắn |
| Số nhảy mạnh khi yên lặng | Bàn rung, dây lỏng | Cố định sensor, kiểm jumper |
Checklist debug
- Có log min/max.
peak_to_peakphân biệt được yên lặng và vỗ tay.- Có bảng trung bình 3 điều kiện.
- Học viên giải thích được vì sao dùng cửa sổ 50 ms.
Thử thách nhỏ
Đổi SAMPLE_WINDOW_MS thành 20 ms và 100 ms, đo lại level. Chọn cửa sổ phù hợp và giải thích bằng log.
Checklist hoàn thành
- Đọc được âm lượng dạng số.
- Có bảng so sánh điều kiện âm thanh.
- Sẵn sàng sang G4 03 kiểm wiring AO/DO và event âm thanh.
Bài tiếp theo
G4 03 sẽ kiểm tra cả ngõ analog AO và ngõ digital DO của module để biết khi nào âm thanh được coi là một event.
Điều hướng bài học
Bài tiếp theo: G4 03 - Kết nối microphone I2S hoặc voice module
Bài trước: G4 01 - Robot biết nghe là gì