Robot biết nghe là gì
Bài 2 trong khóa Robot Thế hệ 4 — Điều khiển giọng nói và tương tác thông minh

G4 01 - Robot biết nghe là gì
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, ví dụ KY-038/KY-037 hoặc module microphone analog tương đương.
- 1 LED trạng thái nối GPIO2 qua điện trở 220 ohm, hoặc LED có sẵn trên board nếu phù hợp.
- 1 buzzer active 3.3V nối GPIO15.
- 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: time_ms, raw, level, led, nhận xét âm thanh.
Code bài này chỉ dùng ESP32-S3, sound sensor AO, LED và buzzer. Không dùng motor, WiFi, camera, OLED hoặc module voice command.
Bài này giúp bạn làm được gì?
Robot “biết nghe” không có nghĩa là hiểu câu nói ngay lập tức. Bước đầu tiên là đọc được tín hiệu âm thanh thật, thấy số thay đổi khi có tiếng vỗ tay hoặc tiếng nói gần microphone.
Kết quả cuối bài:
- ESP32-S3 đọc analog từ sound sensor.
- LED bật khi âm thanh vượt ngưỡng lớn.
- Serial in raw value và mức LOW/MID/HIGH.
- Học viên biết phân biệt “đọc âm thanh” và “hiểu lệ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 0-3.3V |
| LED | GPIO2 | LED + điện trở | Bật khi âm thanh lớn |
| Buzzer | GPIO15 | Buzzer active | Bíp khi boot |
| 3V3 | 3V3 | VCC sensor | Không cấp 5V vào AO nếu AO vượt 3.3V |
| GND | GND | GND sensor/buzzer | Bắt buộc chung GND |
Thực hành từng bước
Bước 1: Lắp mạch
Nối AO của sound sensor vào GPIO4. Nếu module có biến trở chỉnh độ nhạy, để ở mức giữa. Không nối motor trong bài này để tránh nhiễu nguồn.
Bước 2: Upload code
Code hoàn chỉnh nằm tại:
code/g4-01-robot-biet-nghe-la-gi/g4-01-robot-biet-nghe-la-gi.ino
Log khởi động:
G4 01 sound bring-up ready
time_ms,raw,level,led
Bước 3: Tạo âm thanh kiểm thử
- Giữ phòng yên lặng 5 giây, ghi raw nền.
- Nói “robot” cách microphone 20 cm.
- Vỗ tay nhẹ một lần.
- Ghi xem
levelđổi từ LOW/MID/HIGH thế nào.
Giải thích code
Code đọc analog trực tiếp:
int raw = analogRead(PIN_SOUND);
LED bật khi raw vượt ngưỡng lớn:
bool loud = raw > 2200;
digitalWrite(PIN_LED, loud ? HIGH : LOW);
Ngưỡng 2200 chỉ là điểm bắt đầu. Mỗi module có độ nhạy khác nhau, nên cần log trước khi tuning.
Kiểm thử robot thật
| Test | Thao tác | Kết quả mong đợi | Pass? |
|---|---|---|---|
| 1 | Phòng yên lặng | Raw tương đối ổn định | |
| 2 | Nói gần microphone | Raw thay đổi | |
| 3 | Vỗ tay | Level lên HIGH ít nhất một dòng | |
| 4 | Che microphone | Raw ít thay đổi hơn | |
| 5 | Rút AO | Raw bất thường, nhóm nhận biết lỗi |
Lỗi thường gặp và cách sửa
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
| Raw luôn 0 hoặc 4095 | Sai dây AO/VCC/GND | Kiểm lại pin map |
| LED không sáng | Ngưỡng quá cao hoặc LED ngược cực | Ghi raw khi vỗ tay, kiểm điện trở LED |
| Raw nhiễu mạnh | Nguồn USB yếu hoặc dây dài | Dùng dây ngắn, tránh đặt gần motor |
| Buzzer không kêu lúc boot | Buzzer sai loại hoặc sai chân | Dùng buzzer active 3.3V, kiểm GPIO15 |
Checklist debug
- Serial Monitor ở 115200 baud.
- Raw đổi khi tạo âm thanh.
- LED phản hồi khi âm thanh lớn.
- Có bảng raw yên lặng/nói/vỗ tay.
Thử thách nhỏ
Tìm ngưỡng bật LED phù hợp với phòng học của bạn. Ghi ngưỡng cũ, ngưỡng mới và lý do chọn.
Checklist hoàn thành
- Đọc được tín hiệu âm thanh thật.
- LED phản hồi với âm thanh lớn.
- Biết âm thanh raw chưa phải lệnh giọng nói.
- Sẵn sàng sang G4 02 đo mức âm lượng theo cửa sổ thời gian.
Bài tiếp theo
G4 02 sẽ đo âm thanh bằng min/max trong một cửa sổ ngắn để có peak_to_peak và level_pct ổn định hơn raw tức thời.
Điều hướng bài học
Bài tiếp theo: G4 02 - Microphone và âm thanh số
Bài trước: Không có