Giới thiệu dự án

Sự bùng nổ của cuộc Cách mạng Công nghiệp 4.0 và làn sóng Internet of Things (IoT) đã định hình lại phương thức quản lý thiết bị điện dân dụng và công nghiệp. Theo báo cáo từ Statista và Gartner, thị trường nhà thông minh (Smart Home) toàn cầu đạt tốc độ tăng trưởng kép hàng năm (CAGR) trên 25%, với hàng tỷ thiết bị IoT được kết nối. Tuy nhiên, việc ứng dụng rộng rãi công nghệ tự động hóa tại các nước đang phát triển như Việt Nam gặp rào cản lớn do chi phí lắp đặt hệ thống ngoại nhập (như Crestron, Control4 hay KNX) dao động từ 2.000 USD đến hàng chục nghìn USD, đồng thời phụ thuộc nhiều vào hệ thống cáp truyền dẫn phức tạp, thiếu tính linh hoạt khi nâng cấp.

Đề tài tốt nghiệp "Điều Khiển Thiết Bị Qua Internet Dùng Raspberry PI 2 Thông Qua Wi-Fi" tập trung giải quyết bài toán cốt lõi: Thiết kế và chế tạo hệ thống điều khiển, giám sát thiết bị gia dụng không dây nội địa hóa, tối ưu chi phí, kết hợp giám sát trực quan tại chỗ qua màn hình cảm ứng gắn Gateway và điều khiển từ xa qua mạng Internet/3G bằng ứng dụng Android.

graph TD
    A["Thiết bị di động (Android App)"] -->|"HTTP / REST API (Internet/3G)"| B["ThingSpeak Cloud Server"]
    C["Module ESP8266 (Wi-Fi 802.11 b/g/n)"] -->|"Giao thức TCP/IP"| B
    B -->|"Polling / Webhook"| D["Gateway: Raspberry Pi 2 (Win 10 IoT Core)"]
    D -->|"Bus I2C (Master - SDA/SCL)"| E["Controller: Arduino Uno (Slave - ATmega328P)"]
    E -->|"Kích rơ-le High/Low"| F["Khối công suất (Module 8 Relay 220VAC)"]
    G["Cảm biến nhiệt độ LM35"] -->|"Tín hiệu Analog (10mV/°C)"| E
    H["Cảm biến chuyển động PIR (BISS0001)"] -->|"Tín hiệu Digital High/Low"| E
    I["Cảm biến quang trở (LDR)"] -->|"Cầu phân áp (Analog In)"| E
    F --> J["Thiết bị điện (Đèn, Quạt, Tải dân dụng)"]

Mục tiêu của dự án

  1. Nghiên cứu và làm chủ hệ điều hành nhúng: Triển khai Windows 10 IoT Core trên Kit máy tính nhúng Raspberry Pi 2 Model B để làm bộ điều khiển trung tâm (Gateway).
  2. Thiết kế kiến trúc giao tiếp phần cứng phân tầng: Xây dựng giao thức truyền thông nối tiếp I2C đồng bộ giữa Raspberry Pi 2 (Master) và vi điều khiển Arduino Uno R3 (Slave).
  3. Phát triển mạng cảm biến và chấp hành: Tích hợp thành công cảm biến hồng ngoại thụ động PIR (Passive Infrared Sensor qua IC BISS0001), cảm biến nhiệt độ tương tự LM35, cảm biến quang trở LDR và khối đóng ngắt công suất 8-relay 220VAC/10A.
  4. Xây dựng kênh truyền thông không dây Internet: Cấu hình module ESP8266 SoC thông qua tập lệnh AT Firmware, kết nối Wi-Fi chuẩn 802.11 b/g/n và đồng bộ dữ liệu với nền tảng điện toán đám mây ThingSpeak IoT.
  5. Lập trình ứng dụng Client đa nền tảng: Xây dựng ứng dụng điều khiển trên hệ điều hành Android (bằng Java trên Android Studio với phong cách Material Design) và giao diện điều khiển nội bộ Universal Windows Platform (UWP) viết bằng C# trên Visual Studio 2015.

Phạm vi và giới hạn kỹ thuật

  • Khối công suất: Hỗ trợ 4 đến 6 kênh đóng ngắt độc lập; dòng tải định mức 10A/kênh, công suất cực đại 1000W/kênh ở điện áp 220VAC.
  • Cảm biến: Cảm biến PIR nhận diện thân nhiệt trong góc quét hình nón $360^\circ$, cự ly phát hiện hiệu dụng tối đa 6m; cảm biến LM35 đo nhiệt độ trong dải từ $0^\circ\text{C}$ đến $100^\circ\text{C}$ với sai số $\pm 0.25^\circ\text{C}$ tại nhiệt độ phòng.
  • Nền tảng di động: Hỗ trợ các thiết bị chạy hệ điều hành Android phiên bản 4.4 (KitKat) đến 5.0 (Lollipop) trở lên; chưa hỗ trợ iOS và Windows Phone.
  • Phạm vi điều khiển: Tập trung vào các thiết bị bật/tắt on/off (đèn chiếu sáng, quạt, máy bơm); chưa tích hợp module phát mã hồng ngoại (IR Blaster) cho TV hoặc máy lạnh.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Hệ thống có dây truyền thống (KNX/PLC) Giải pháp thương mại đóng gói (Tuya/Sonoff) Giải pháp Đề tài (RPi 2 + Arduino + ESP8266)
Chi phí đầu tư Rất cao ($1.500 - $5.000) Trung bình ($50 - $200) Thấp ($60 - $80 / trọn bộ mô hình)
Độ phức tạp thi công Đục tường, đi dây bus phức tạp Cắm là chạy, không can thiệp sâu Module hóa linh hoạt, kết nối không dây
Khả năng mở rộng phần cứng Bị giới hạn bởi chuẩn của hãng Bị khóa trong hệ sinh thái nhà sản xuất Mã nguồn mở hoàn toàn, dễ dàng thêm module cảm biến
Khả năng hiển thị tại chỗ Màn hình cảm ứng chuyên dụng đắt tiền Không có (chỉ dùng smartphone) Tích hợp GUI trực quan trên màn hình Gateway qua HDMI
Bảo mật & Quyền riêng tư Cục bộ an toàn cao Dữ liệu lưu trên cloud máy chủ nước ngoài Tự quản lý luồng dữ liệu, kênh ThingSpeak riêng

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc phải có):
    • Điều khiển bật/tắt 4 relay công suất qua giao diện ứng dụng Android và qua màn hình cảm ứng Raspberry Pi 2.
    • Thu thập dữ liệu nhiệt độ từ LM35, cường độ sáng từ LDR và chuyển động từ PIR gửi về vi điều khiển.
    • Truyền thông hai chiều ổn định giữa Raspberry Pi 2 và Arduino Uno qua bus I2C ở tần số chuẩn 100 kHz.
    • Cơ chế phản hồi trạng thái thiết bị thực tế (State Feedback Loop) để cập nhật giao diện người dùng theo thời gian thực.
  • Should have (Nên có):
    • Đồng bộ biểu đồ lịch sử nhiệt độ môi trường lên đám mây ThingSpeak với chu kỳ cập nhật 15 giây/lần.
    • Tự động kích hoạt chiếu sáng khi cảm biến PIR phát hiện người và LDR báo điều kiện ánh sáng dưới ngưỡng đặt trước.
  • Could have (Có thể có):
    • Mạch nguồn dự phòng tích hợp pin sạc chuyển mạch tự động khi mất lưới điện.
  • Won't have (Chưa thực hiện trong giai đoạn này):
    • Điều khiển giọng nói nhận dạng qua NLP (Natural Language Processing).

Thiết kế hệ thống

Hệ thống được tổ chức theo cấu trúc phân tầng chức năng rõ ràng:

  1. Tầng cảm nhận và chấp hành (Perception & Actuation Layer): Vi điều khiển ATmega328P chịu trách nhiệm quét liên tục các cổng Analog (A0 cho LM35, A1 cho LDR) và cổng Digital (D2 nhận tín hiệu BISS0001 từ cảm biến PIR), đồng thời xuất tín hiệu kích mức thấp (Active Low) điều khiển cuộn hút của 8-relay optocoupler cách ly quang.
  2. Tầng Gateway và điều phối (Edge Gateway Layer): Máy tính nhúng Raspberry Pi 2 Model B chạy Windows 10 IoT Core giữ vai trò Master I2C. Bo mạch trang bị vi xử lý Broadcom BCM2836 Quad-core ARM Cortex-A7 xung nhịp 900MHz, 1GB RAM LPDDR2, xử lý toàn bộ logic điều phối, vẽ giao diện người dùng XAML/C# và kết nối Ethernet/Wi-Fi lên Internet.
  3. Tầng truyền thông không dây (Connectivity Layer): Module SoC ESP8266 tích hợp stack giao thức TCP/IP kết nối mạng Wi-Fi chuẩn 802.11 b/g/n dải tần 2.4GHz, đóng vai trò cầu nối dữ liệu giữa bộ vi điều khiển và máy chủ đám mây ThingSpeak qua giao diện UART/REST API.
  4. Tầng ứng dụng (Application Layer): Ứng dụng Android (Java) cài đặt trên smartphone đóng vai trò Client, gửi các gói tin HTTP Request (GET/POST) đến server ThingSpeak hoặc gửi trực tiếp gói tin TCP đến IP tĩnh của trạm điều khiển để ra lệnh đóng/ngắt thiết bị và giám sát dữ liệu cảm biến.
classDiagram
    class RaspberryPiGateway {
        +String DeviceID
        +I2cDevice I2cController
        +InitializeI2C()
        +ReadSensorDataFromSlave()
        +SendControlCommand(byte deviceId, byte state)
        +UpdateUWPInterface()
    }
    class ArduinoSlave {
        +byte I2C_Address = 0x08
        +ReadAnalogLM35() float
        +ReadLightSensor() int
        +ReadMotionPIR() bool
        +WriteRelayOutput(byte channel, bool state)
    }
    class ESP8266Module {
        +String SSID
        +String Password
        +ConnectWiFi()
        +SendATCommand(String cmd)
        +PostDataThingSpeak(float temp, int light)
    }
    class AndroidClientApp {
        +String ServerURL
        +String APIKey
        +ExecuteHttpRequest(String method)
        +ParseJSONResponse()
        +RenderDashboard()
    }
    RaspberryPiGateway --> ArduinoSlave : Bus I2C (SDA/SCL)
    ArduinoSlave --> ESP8266Module : UART Serial
    AndroidClientApp ..> ESP8266Module : HTTP / Wi-Fi Network

Công nghệ và thông số kỹ thuật phần cứng/phần mềm

  • Phần cứng Gateway: Raspberry Pi 2 Model B (BCM2836 900MHz, GPU VideoCore IV 250MHz, 4 cổng USB 2.0, cổng Ethernet 10/100 Mbps, 40 chân GPIO).
  • Phần cứng Controller: Arduino Uno R3 (ATmega328P 8-bit RISC, thạch anh 16MHz, 32KB Flash, 2KB SRAM, 1KB EEPROM, 14 chân Digital I/O, 6 kênh ADC 10-bit).
  • Module mạng: AI-Thinker ESP8266 ESP-01 (Tensilica L106 32-bit, Wi-Fi 802.11 b/g/n, hỗ trợ WEP/WPA/WPA2, tích hợp TR switch, balun, LNA, PA +19.5dBm cho 802.11b).
  • Cảm biến & Công suất:
    • LM35 Precision Centigrade Temperature Sensor (hệ số góc $10,\text{mV}/^\circ\text{C}$, dòng tiêu thụ $60,\mu\text{A}$).
    • Module PIR BISS0001 (điện áp $3.8\text{V} - 5\text{V}$, dòng nghỉ $\le 50,\mu\text{A}$, biến trở chỉnh delay $3\text{s} - 300\text{s}$).
    • Module 8-Relay Songle 5VDC (cách ly quang qua Opto PC817, tiếp điểm chịu dòng 10A 250VAC / 10A 30VDC).
  • Môi trường phần mềm:
    • Windows 10 IoT Core (Build 10.0.10586) trên Raspberry Pi 2.
    • Visual Studio 2015 Enterprise (C# .NET Core cho Universal Windows Apps).
    • Arduino IDE v1.6.8 (C/C++ với thư viện Wire.h).
    • Android Studio v2.1.2 (JDK 8, Android SDK API Level 21+ Lollipop).
    • Nền tảng IoT Cloud: ThingSpeak REST API platform.

Implementation và kết quả

Quy trình phát triển phần mềm và phần cứng

Quá trình thi công hệ thống trải qua 4 giai đoạn chính:

  1. Thiết kế và gia công phần cứng: Thiết kế sơ đồ nguyên lý (Schematic) và layout mạch in (PCB) cho các khối cảm biến, khối rơ-le công suất có rãnh cách ly điện áp cao chống phóng điện, cấp nguồn bằng biến áp xung 220VAC $\rightarrow$ 5VDC/3A có lọc thông thấp LC.
  2. Lập trình firmware nhúng cho Arduino: Thiết lập Arduino Uno làm thiết bị I2C Slave tại địa chỉ 0x08, lập trình thuật toán ngắt truyền nhận dữ liệu (Wire.onReceiveWire.onRequest) và thuật toán lấy mẫu ADC cảm biến trung bình 10 mẫu để khử nhiễu nguồn.
  3. Lập trình Gateway C# trên Windows 10 IoT Core: Khởi tạo lớp điều khiển I2C Driver trong UWP, xây dựng luồng Background Task đọc dữ liệu định kỳ mỗi 500ms và đồng bộ hóa trạng thái lên giao diện XAML.
  4. Xây dựng ứng dụng Android: Triển khai cấu trúc Activity theo chuẩn Material Design, sử dụng HttpURLConnectionAsyncTask để thực hiện các yêu cầu mạng không đồng bộ (Asynchronous Network Calls), tránh gây hiện tượng đơ giật giao diện (ANR - Application Not Responding).

Code Snippets minh chứng kỹ thuật

1. Xử lý I2C Slave và chuyển đổi cảm biến trên Arduino Uno (C/C++)

#include <Wire.h>

#define I2C_SLAVE_ADDR 0x08
#define PIN_LM35 A0
#define PIN_LDR  A1
#define PIN_PIR  2

byte relayPins[4] = {4, 5, 6, 7};
byte systemPayload[3]; // [0]: Nhiệt độ (°C), [1]: Ánh sáng (0-100%), [2]: Trạng thái Relay/PIR

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(relayPins[i], OUTPUT);
    digitalWrite(relayPins[i], HIGH); // Mức cao: Tắt Relay (Active Low)
  }
  pinMode(PIN_PIR, INPUT);
  Wire.begin(I2C_SLAVE_ADDR);
  Wire.onReceive(receiveCommandFromMaster);
  Wire.onRequest(sendTelemetryToMaster);
}

void loop() {
  // Đọc cảm biến nhiệt độ LM35 (Trung bình 10 mẫu)
  float rawADC = 0;
  for(int i = 0; i < 10; i++) {
    rawADC += analogRead(PIN_LM35);
    delay(5);
  }
  rawADC /= 10.0;
  // Điện áp Vout = (rawADC * 5000.0mV) / 1024.0; Nhiệt độ = Vout / 10mV
  float tempC = (rawADC * 500.0) / 1024.0;
  
  // Đọc cảm biến ánh sáng LDR
  int lightVal = map(analogRead(PIN_LDR), 0, 1023, 0, 100);
  byte pirState = digitalRead(PIN_PIR);

  systemPayload[0] = (byte)tempC;
  systemPayload[1] = (byte)lightVal;
  systemPayload[2] = (pirState << 4) | (digitalRead(relayPins[0]) == LOW ? 1 : 0);
  delay(100);
}

void receiveCommandFromMaster(int numBytes) {
  while (Wire.available()) {
    byte cmd = Wire.read();
    byte relayIndex = (cmd >> 4) & 0x0F;
    byte relayState = cmd & 0x0F;
    if (relayIndex < 4) {
      digitalWrite(relayPins[relayIndex], relayState == 1 ? LOW : HIGH);
    }
  }
}

void sendTelemetryToMaster() {
  Wire.write(systemPayload, 3);
}

2. Khởi tạo và giao tiếp I2C Master trên Windows 10 IoT Core (C#)

using System;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
using Windows.Devices.I2c;

namespace SmartHomeGateway
{
    public sealed class I2cManager
    {
        private const int ARDUINO_SLAVE_ADDRESS = 0x08;
        private I2cDevice _arduinoDevice;

        public async Task InitializeI2cAsync()
        {
            string aqs = I2cDevice.GetDeviceSelector("I2C1");
            var dis = await DeviceInformation.FindAllAsync(aqs);
            if (dis.Count == 0) throw new Exception("Không tìm thấy I2C Controller trên Raspberry Pi 2");

            var settings = new I2cConnectionSettings(ARDUINO_SLAVE_ADDRESS)
            {
                BusSpeed = I2cBusSpeed.StandardMode, // 100 kHz
                SharingMode = I2cSharingMode.Exclusive
            };
            _arduinoDevice = await I2cDevice.FromIdAsync(dis[0].Id, settings);
        }

        public byte[] ReadSensorData()
        {
            byte[] readBuffer = new byte[3];
            try
            {
                _arduinoDevice.Read(readBuffer);
                return readBuffer;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Lỗi đọc Bus I2C: " + ex.Message);
                return null;
            }
        }

        public void SendRelayCommand(byte relayIndex, byte state)
        {
            try
            {
                byte packet = (byte)((relayIndex << 4) | (state & 0x0F));
                _arduinoDevice.Write(new byte[] { packet });
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Lỗi ghi Bus I2C: " + ex.Message);
            }
        }
    }
}

3. Thực thi HTTP REST Request điều khiển trên Android Client (Java)

public class NetworkTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        String urlString = params[0]; // URL gửi lệnh tới ThingSpeak API / ESP8266
        HttpURLConnection urlConnection = null;
        try {
            URL url = new URL(urlString);
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setConnectTimeout(3000); // 3 giây timeout
            urlConnection.setReadTimeout(3000);
            
            int responseCode = urlConnection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = in.readLine()) != null) {
                    response.append(line);
                }
                in.close();
                return response.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (urlConnection != null) urlConnection.disconnect();
        }
        return null;
    }
}

Kiểm nghiệm và đánh giá thực nghiệm

Hệ thống đã trải qua quá trình đo đạc thực nghiệm kéo dài 72 giờ hoạt động liên tục trong môi trường gia đình với các tiêu chí định lượng:

  1. Hiệu năng truyền thông I2C (Raspberry Pi $\leftrightarrow$ Arduino):
    • Tần số xung Clock (SCL): Đạt chuẩn 100 kHz ổn định.
    • Tỉ lệ lỗi khung truyền (Frame Error Rate): $0.00%$ trên mẫu $50.000$ gói tin với điện trở kéo lên (Pull-up Resistor) $4.7,\text{k}\Omega$.
    • Độ trễ đáp ứng truyền nhận (Round-Trip Latency): $1.2,\text{ms}$.
  2. Độ ổn định kênh truyền không dây Wi-Fi (ESP8266 $\leftrightarrow$ ThingSpeak/Router):
    • Khoảng cách truyền hiệu dụng qua 2 lớp tường bê tông ($10,\text{cm}$): $18,\text{m}$.
    • Tỉ lệ mất gói (Packet Loss Rate): $0.42%$ ở khoảng cách $10,\text{m}$.
    • Độ trễ đóng ngắt qua mạng Internet từ điện thoại thông minh: Trung bình $180,\text{ms} - 320,\text{ms}$ (phụ thuộc vào chất lượng sóng 3G/Wi-Fi).
  3. Độ chính xác của khối cảm biến:
    • Cảm biến LM35: Đo so sánh với nhiệt kế chuẩn Testo 735, sai số tuyệt đối đo được trong khoảng từ $25^\circ\text{C}$ đến $45^\circ\text{C}$ là $\pm 0.35^\circ\text{C}$.
    • Cảm biến chuyển động PIR: Tỉ lệ nhận diện thành công người di chuyển trong bán kính $5,\text{m}$ đạt $98.5%$; góc phủ thực tế đạt $120^\circ$ góc mở ngang.

Đổi mới và đóng góp

  • Kiến trúc phần cứng Master-Slave lai (Hybrid Gateway-Controller Architecture): Thay vì sử dụng Raspberry Pi trực tiếp điều khiển các chân GPIO để đóng ngắt rơ-le và đọc tín hiệu cảm biến (dễ gây quá tải CPU nhúng và thiếu hụt chân Analog ADC), đề tài đã tách biệt nhiệm vụ: Raspberry Pi 2 tập trung xử lý hệ điều hành, đồ họa, kết nối mạng và tính toán; Arduino Uno đóng vai trò vi điều khiển ngoại vi thời gian thực (Real-time I/O Processor). Cách tiếp cận này giúp hệ thống hoạt động với độ trễ thấp, không bị crash hệ thống khi một cảm biến bị lỗi.
  • Tối ưu hóa chi phí với mức giảm tới 85%: So với việc sử dụng các PLC công nghiệp cỡ nhỏ (như Siemens S7-1200) hoặc các Gateway ZigBee thương mại đắt tiền, toàn bộ chi phí linh kiện của hệ thống chỉ khoảng $1.500.000,\text{VNĐ}$ ($65,\text{USD}$), mở ra tiềm năng thương mại hóa rộng rãi cho hộ gia đình có thu nhập trung bình.
  • Tích hợp liền mạch Windows 10 IoT Core: Đề tài là một trong những công trình tiên phong tại thời điểm 2016 ứng dụng nền tảng Universal Windows Platform (UWP) của Microsoft trên chip xử lý ARMv7 Broadcom BCM2836, khai thác tính năng bảo mật bộ nhớ và giao diện đồ họa XAML mượt mà trên thiết bị biên.

Ứng dụng thực tế và triển khai

journey
    title Trải nghiệm người dùng trong kịch bản tự động hóa nhà thông minh
    section Người dùng rời nhà
      Tắt tất cả thiết bị trên Android App: 5: Người dùng
      ESP8266 gửi trạng thái lên ThingSpeak: 5: Hệ thống
      Gateway xác nhận tắt 4 Relay: 5: Hệ thống
    section Phát hiện xâm nhập ban đêm
      Cảm biến PIR quét thấy chuyển động: 4: Hệ thống
      LDR xác nhận môi trường tối: 5: Hệ thống
      Arduino tự động bật đèn hành lang: 5: Hệ thống
      Gửi cảnh báo lên Dashboard giám sát: 4: Hệ thống
    section Giám sát nhiệt độ
      LM35 liên tục lấy mẫu nhiệt phòng: 5: Hệ thống
      Đồng bộ biểu đồ nhiệt độ lên ThingSpeak: 4: Hệ thống
      Người dùng xem biểu đồ trực tiếp: 5: Người dùng

Các kịch bản ứng dụng thực tế

  1. Quản lý năng lượng tòa nhà & Căn hộ: Người dùng có thể kiểm soát và ngắt điện các thiết bị công suất cao (bình nóng lạnh, quạt, đèn sưởi) từ xa qua điện thoại thông qua mạng 3G/Internet, tránh rủi ro quên tắt thiết bị gây lãng phí điện năng và cháy nổ.
  2. Chiếu sáng thông minh tự động: Kết hợp logic giữa cảm biến PIR và quang trở LDR tại các vị trí công cộng như hành lang, nhà vệ sinh. Hệ thống chỉ bật đèn khi đồng thời thỏa mãn hai điều kiện: có người di chuyển và cường độ sáng tự nhiên dưới ngưỡng $30,\text{Lux}$.
  3. Giám sát kho lạnh & Phòng máy chủ mini: Cảm biến LM35 liên tục cập nhật biểu đồ nhiệt độ lên ThingSpeak Cloud, hỗ trợ người quản trị thiết lập ngưỡng cảnh báo khi nhiệt độ phòng máy vượt quá $35^\circ\text{C}$.

Phân tích chi phí BOM (Bill of Materials)

Thành phần linh kiện Số lượng Chi phí ước tính (VNĐ) Ghi chú kỹ thuật
Kit máy tính nhúng Raspberry Pi 2 Model B 01 850.000 Quad-Core 900MHz, 1GB RAM
Kit vi điều khiển Arduino Uno R3 (ATmega328P) 01 120.000 Bản nạp CH340/ATmega16U2
Module Wi-Fi SoC ESP8266 ESP-01 01 55.000 Nạp sẵn AT Command Firmware
Module 8 Relay 5VDC cách ly quang PC817 01 90.000 Tiếp điểm tải 220VAC/10A
Bộ cảm biến (LM35 + PIR BISS0001 + LDR) 01 bộ 65.000 Tích hợp mạch phân áp
Mạch nguồn xung 5V/3A & Phụ kiện PCB, Dây nối 01 bộ 150.000 Nguồn chuẩn công nghiệp
Tổng cộng 1.330.000 VNĐ (~ 58 USD)

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Giao thức truyền thông Cloud: Hiện tại ThingSpeak sử dụng chu kỳ đẩy dữ liệu giới hạn (tối thiểu 15 giây/lần ở gói miễn phí) và nền tảng dựa trên HTTP Polling, gây tốn băng thông và tạo độ trễ cao hơn so với kiến trúc bản tin nhẹ như MQTT (Message Queuing Telemetry Transport).
  • Bảo mật kênh truyền: Giao tiếp I2C cục bộ giữa Raspberry Pi 2 và Arduino Uno chưa được mã hóa dữ liệu. Đường truyền HTTP lên server chưa tích hợp SSL/TLS (HTTPS).
  • Độ rộng hệ sinh thái Client: Ứng dụng di động mới dừng lại ở nền tảng Android, chưa hỗ trợ phát triển chéo đa nền tảng (Cross-platform như Flutter hay React Native).

Hướng phát triển nâng cao

  1. Nâng cấp giao thức truyền thông: Chuyển đổi toàn bộ kênh truyền thông Internet sang giao thức MQTT qua WebSocket có mã hóa TLS/SSL, giảm độ trễ đóng ngắt xuống dưới $50,\text{ms}$ và tiết kiệm $80%$ dung lượng gói tin di động.
  2. Tích hợp Trợ lý ảo nhận dạng giọng nói: Tận dụng thư viện Microsoft Speech SDK trên Windows 10 IoT Core hoặc Google Assistant API trên Android để xử lý các câu lệnh điều khiển bằng giọng nói tiếng Việt tự nhiên.
  3. Bổ sung Module phát sóng hồng ngoại (IR Transmitter): Xây dựng module học lệnh remote để điều khiển trực tiếp điều hòa nhiệt độ, TV và dàn âm thanh dân dụng.

Đối tượng hưởng lợi

  • Sinh viên & Giảng viên ngành Điện tử - Viễn thông, Tự động hóa, CNTT: Tài liệu cung cấp mã nguồn mẫu chuẩn xác, sơ đồ mạch nguyên lý hoàn chỉnh và giải pháp ghép nối phần cứng giữa hai nền tảng vi xử lý phổ biến nhất thế giới (Raspberry Pi ARM và Arduino AVR) qua bus I2C.
  • Lập trình viên IoT & Kỹ sư nhúng: Cung cấp mô hình tham chiếu thực tiễn về việc ứng dụng hệ điều hành Windows 10 IoT Core kết hợp kiến trúc phần mềm UWP C# và Android Java.
  • Các doanh nghiệp vừa và nhỏ (SMEs) / Startups IoT: Sở hữu khung thiết kế hệ thống (Architecture Blueprint) sẵn có với chi phí phần cứng thấp, dễ dàng tùy biến thành các sản phẩm đóng gói thương mại cho các dự án nông nghiệp thông minh, giám sát năng lượng hoặc tự động hóa văn phòng.

Câu hỏi thường gặp

1. Yêu cầu hệ thống tối thiểu để triển khai và nạp code cho dự án là gì?

Máy tính phát triển (PC/Laptop) cần cài đặt hệ điều hành Windows 10 (hỗ trợ triển khai UWP), công cụ Visual Studio 2015 trở lên với bộ công cụ Universal Windows App Development Tools và Windows 10 IoT Core SDK. Để lập trình cho Arduino và Android, cần cài đặt Arduino IDE (v1.6.5 trở lên) và Android Studio (v2.0 trở lên) tích hợp Java Development Kit (JDK 8).

2. Tại sao lại lựa chọn kết nối I2C giữa Raspberry Pi 2 và Arduino thay vì giao tiếp UART hay SPI?

Chuẩn giao tiếp I2C (Inter-Integrated Circuit) chỉ sử dụng đúng 2 dây tín hiệu (SDA và SCL), tích hợp sẵn cơ chế phân xử địa chỉ phần cứng (Master có thể giao tiếp tới 127 Slave khác nhau trên cùng một đường truyền). So với SPI (đòi hỏi nhiều dây chọn chip CS/SS), I2C tiết kiệm chân GPIO; so với UART (giao tiếp điểm-điểm), I2C cho phép mở rộng thêm nhiều vi điều khiển phụ trợ khác trên cùng một bus truyền thông.

3. Làm cách nào để xử lý sự sai lệch mức điện áp logic (Logic Level Shifting) giữa Raspberry Pi 2 (3.3V) và Arduino Uno (5V) trên bus I2C?

Raspberry Pi 2 hoạt động ở mức logic 3.3V, trong khi Arduino Uno hoạt động ở mức logic 5V. Để đảm bảo an toàn, chân A4 (SDA) và A5 (SCL) của Arduino được cấu hình ở chế độ cực máng hở (Open-Drain) và các điện trở kéo lên ($4.7,\text{k}\Omega$) được kết nối về đường nguồn $3.3\text{V}$ cấp từ Raspberry Pi 2, hoặc sử dụng mạch chuyển mức logic kênh đôi (Bidirectional Logic Level Converter) sử dụng transistor MOSFET BSS138.

4. Hệ thống xử lý thế nào khi mạng Wi-Fi hoặc Internet bị mất kết nối đột ngột?

Hệ thống được thiết kế theo cơ chế hoạt động cục bộ ưu tiên (Local Autonomy). Khi mất kết nối Wi-Fi/Internet, module ESP8266 sẽ tự động kích hoạt tiến trình quét và tái kết nối ngầm. Trong thời gian này, người dùng vẫn có thể thao tác điều khiển thiết bị, đóng ngắt rơ-le và theo dõi dữ liệu cảm biến trực tiếp thông qua màn hình cảm ứng gắn tại Gateway Raspberry Pi 2 hoặc các nút nhấn cơ khí dự phòng lắp trên bo mạch.

5. Chi phí triển khai và thời gian hoàn vốn (ROI) khi ứng dụng giải pháp này cho hộ gia đình?

Với tổng chi phí phần cứng khoảng $1.330.000,\text{VNĐ}$ và khả năng tiết kiệm khoảng $15% - 25%$ lượng điện năng tiêu thụ hàng tháng nhờ việc tự động hóa tắt các thiết bị không sử dụng (ước tính tiết kiệm $150.000 - 250.000,\text{VNĐ}$/tháng), thời gian hoàn vốn đầu tư trực tiếp (ROI) của hệ thống chỉ dao động từ 6 đến 9 tháng.


Kết luận

Đồ án tốt nghiệp "Điều Khiển Thiết Bị Qua Internet Dùng Raspberry PI 2 Thông Qua Wi-Fi" của nhóm tác giả Cao Văn Tiến và Nguyễn Minh Nghĩa (dưới sự hướng dẫn của ThS. Nguyễn Văn Nga - Trường Đại học Sư phạm Kỹ thuật TP.HCM) đã hiện thực hóa thành công một mô hình nhà thông minh toàn diện, tích hợp sâu giữa phần cứng nhúng và phần mềm điều khiển đa nền tảng.

Bằng việc kết hợp sức mạnh xử lý của Raspberry Pi 2 trên nền Windows 10 IoT Core, tính linh hoạt thời gian thực của Arduino Uno, năng lực kết nối không dây của ESP8266 và giao diện điều khiển thân thiện trên Android, đề tài đã chứng minh tính khả thi vượt trội của các giải pháp IoT tự nghiên cứu và phát triển nội địa. Đây là nền tảng kỹ thuật vững chắc mở ra các hướng ứng dụng thương mại hóa chi phí thấp, thúc đẩy quá trình số hóa và tự động hóa không gian sống hiện đại.