13-stem-robot

Example of the component nguyenduchoai/innoedge v0.1.4
<a id="top"></a>
# 13 — Autonomous STEM Robot: Robot tự hành giao hàng (Smart Delivery Rover)

> 🇻🇳 **Tài liệu Tiếng Việt** (toàn bộ nội dung bên dưới) | [🇬🇧 English Documentation](#english)

Ví dụ giáo dục STEM toàn diện kết hợp **Robotics cơ bản** (động cơ, cảm biến, servo) với **hạ tầng dịch vụ thương mại InnoEdge** (thanh toán VietQR ngân hàng, điều khiển từ xa, an toàn phần cứng).

---

## 💡 Ý Tưởng Dự Án

Thay vì chỉ là một chiếc xe đồ chơi chạy loanh quanh vô mục đích, Robot STEM này được thiết kế thành một **xe giao hàng tự hành mini** phục vụ trong trường học, lớp học hoặc quán cafe:

1. **Khách hàng gọi xe / đặt hàng:** Khách bấm nút trên xe hoặc trên app để xin mã VietQR (10.000 đ).
2. **Khách quét mã QR ngân hàng:** Tiền về tài khoản qua SePAY, PayOS, Pay2S hoặc Tingee.
3. **Robot nhận tín hiệu `on_paid`:**
   * Tự động khởi hành, chạy về phía bàn khách.
   * Cảm biến siêu âm HC-SR04 liên tục quét vật cản — nếu có người chắn đường (< 15cm), xe tự động phanh gấp để chống đâm va.
   * Đến nơi, cơ cấu Servo SG90 tự động mở nắp thùng hàng để khách nhận đồ.
   * Chờ 4 giây, nắp tự đóng lại và Robot gửi báo cáo hoàn thành về Cloud!

---

## 🛠️ Danh Sách Linh Kiện (~250.000 đ – 300.000 đ)

| Linh Kiện | Chân ESP32-S3 | Ghi Chú |
|---|---|---|
| **ESP32-S3 DevKitC-1** | — | Bo điều khiển trung tâm WiFi/BLE |
| **Mạch cầu H L298N / TB6612** | IN1 (GPIO 4), IN2 (GPIO 5) | Động cơ bánh trái |
| | IN3 (GPIO 6), IN4 (GPIO 7) | Động cơ bánh phải |
| **Cảm biến siêu âm HC-SR04** | TRIG (GPIO 15), ECHO (GPIO 16) | Đo khoảng cách né vật cản |
| **Động cơ Servo SG90** | PWM (GPIO 18) | Mở/đóng nắp thùng hàng (0°–90°) |
| **Khung xe 2 bánh mica + Bánh xe** | — | Khung xe tự chế hoặc bộ kit robot STEM phổ thông |
| **Nguồn cấp (2 pin 18650 7.4V)** | Hạ áp LM2596 xuống 5V | Cấp nguồn động cơ và ESP32 |

---

## 🚀 Hướng Dẫn Chạy Thử Nghiệm

### Bước 1: Khởi động Mock Cloud
```bash
cd tools/mock-cloud
go run .
```

### Bước 2: Nạp Firmware cho ESP32
Có 2 cách:
* **Cách 1 (Khuyên dùng cho học sinh):** Mở [InnoEdge Web Flasher](../../tools/web-flasher/index.html) trên Chrome/Edge -> Cắm cáp USB -> Nhấn **"Nạp Firmware"** trong 30 giây.
* **Cách 2 (Dành cho lập trình viên ESP-IDF):**
  ```bash
  cd examples/13-stem-robot
  idf.py set-target esp32s3
  idf.py menuconfig   # Điền WiFi và IP Mock Cloud
  idf.py build flash monitor
  ```

---

## 🎮 Thao Tác Kiểm Chứng

1. Nhấn nút **BOOT** trên bo mạch:
   ```
   I stem-robot: Khách ấn nút gọi xe giao hàng (10.000 đ) -> Tạo VietQR...
   I stem-robot: Mã VietQR gọi Robot giao hàng: 10000 đ | Ref: GTMOCKD...
   ```
2. Trên Web Console `http://localhost:8080/dashboard/`:
   Nhấp nút **Simulate Payment (10,000 đ)** để giả lập ngân hàng báo tiền về.
3. Xe lập tức kích hoạt chu trình giao hàng an toàn:
   ```
   I stem-robot: ✓ XÁC NHẬN TIỀN VỀ: 10000 đ -> BẮT ĐẦU NHIỆM VỤ GIAO HÀNG!
   I stem-robot: 🦾 Servo quay góc 90° (MỞ THÙNG ĐỒ)
   I stem-robot: Nhiệm vụ hoàn tất! Robot sẵn sàng cho lượt tiếp theo.
   ```
4. Đặt tay trước cảm biến siêu âm trong lúc xe đang tiến:
   ```
   W stem-robot: ⚠️ CẢNH BÁO: Phát hiện vật cản ở 11.4 cm -> PHANH GẤP!
   ```

---

## 🧩 Lập Trình Kéo Thả Bằng Scratch / Blockly

Bạn có thể mở công cụ [InnoEdge BlockStudio](../../tools/scratch/index.html) để chỉnh sửa hành vi của robot bằng cách kéo thả trực quan các khối lệnh:
* Khối `Khi nhận thanh toán VietQR [10000] đ`
* Khối `Robot tiến lên tốc độ [80]% trong [2] giây`
* Khối `Quay Servo góc [90] độ`
* Xem mã nguồn C++ và MicroPython tự động sinh ra thời gian thực bên cạnh!

---

<a id="english"></a>
## 🇬🇧 English Documentation

> [🇻🇳 Quay lại Tiếng Việt](#top)

A comprehensive STEM educational project bridging **fundamental robotics** (motors, ultrasonic distance sensors, servo mechanisms) with **commercial IoT services** (mobile banking payments, cloud telemetry, hardware safety).

---

## Project Concept

Rather than a simple toy car driving aimlessly, this STEM robot is an **autonomous mini-delivery rover** designed for schools, classrooms, or cafes:

1. **Summon & Order:** A customer presses the button or scans in the app to request an order (10,000 VND).
2. **Instant QR Payment:** Customer transfers via bank app; webhooks authenticate funds.
3. **Robot Receives `on_paid`:**
   * Automatically departs toward the destination table.
   * HC-SR04 ultrasonic distance sensor continuously scans for obstacles — if an obstacle or pedestrian is detected (<15cm), it automatically emergency brakes to prevent collisions.
   * Upon arrival, an SG90 servo automatically lifts the parcel hatch so the customer can collect their item.
   * After 4 seconds, the hatch closes and the rover dispatches a completion telemetry report to the cloud!

---

## Component List (~$10–$15)

| Component | ESP32-S3 Pin | Purpose |
|---|---|---|
| **ESP32-S3 DevKitC-1** | — | Core MCU with WiFi/BLE |
| **L298N / TB6612 Dual H-Bridge** | IN1 (GPIO 4), IN2 (GPIO 5) | Left motor control |
| | IN3 (GPIO 6), IN4 (GPIO 7) | Right motor control |
| **HC-SR04 Ultrasonic Sensor** | TRIG (GPIO 15), ECHO (GPIO 16) | Collision avoidance |
| **SG90 Micro Servo** | PWM (GPIO 18) | Cargo hatch open/close (0°–90°) |
| **2WD Robot Chassis Kit** | — | Acrylic frame, DC gearmotors, caster |
| **Power Supply (2x 18650 Li-ion)** | LM2596 step-down to 5V | Powers motors and ESP32 |

---

## How to Test

### Step 1: Start Mock-Cloud
```bash
cd tools/mock-cloud
go run .
```

### Step 2: Flash Firmware
* **Browser Option (Zero Install):** Open [Web 1-Click Flasher](../../tools/web-flasher/index.html) in Chrome/Edge, plug in the USB cable, and click **"Flash Firmware"** (30s).
* **CLI Option:**
  ```bash
  cd examples/13-stem-robot
  idf.py set-target esp32s3
  idf.py menuconfig
  idf.py build flash monitor
  ```

Press the **BOOT** button to summon the rover, trigger payment, and watch the obstacle avoidance and servo actuation in action!

To create a project from this example, run:

idf.py create-project-from-example "nguyenduchoai/innoedge=0.1.4:13-stem-robot"

or download archive (~10.87 KB)