[mã nguồn] Xây dựng nhà thông minh với Raspberry Pi 2 and Windows 10 IoT kết hợp với Arduino




Trong thời đại ngày nay, công nghệ có thể nâng cao đời sống con người. Công nghệ đang tiến triển thập kỷ của thập kỷ. Tự động hóa là một khoa học viễn tưởng trước đó nhưng không phải hôm nay. Bằng cách kết hợp công nghệ mới nhất với nhà, chúng tôi có thể xây dựng một ngôi nhà tuyệt vời. Với Raspberry Pi và Windows 10, chúng ta có thể xây dựng một hệ thống tự động hóa, có khả năng của các thiết bị nhà điều hành tự động


Bắt đầu

Trước khi bắt đầu dự án, hãy hiểu cơ bản trước. Hãy xem qua các hình ảnh sau đây (Cấu hình chung)

Một Raspberry Pi 2 sẽ phục vụ như là một thiết bị chủ. Trong mỗi phòng nào muốn tự động hoá, cần sử dụng một module Arduino UNO. Arduino UNO sẽ hoạt động như một bộ điều khiển thứ cấp, nhận lệnh từ Raspberry Pi 2 và điều khiển cho thiết bị cụ thể nào đó. Ở đây, Raspberry Pi 2 và tất cả module Arduino Uno được kết nối với nhau trên bằng giao tiếp I2C. Mỗi Arduino Uno hoạt động như là thiết bị thực thi. Mỗi Arduino UNO có 1 địa chỉ I2C duy nhất trên giao tiếp truyền dẫn. Bạn có thể thêm hoặc bỏ các Arduino Uno tùy nhu cầu sử dụng và được giải thích sau này trong dự án này.

Sơ đồ tổng  thể


Cấu hình cho 1 Phòng 

Bây giờ xem xét tình huống trong 1 phòng, một module Arduino UNO sẽ kiểm soát các thiết bị và đọc dữ liệu cảm biến. Định kỳ, Raspberry Pi gửi yêu cầu cho các dữ liệu cảm biến thu thập bởi Arduino UNO. Hình minh họa "Kiến trúc Phòng" diễn tả làm sao để cho Arduino UNO sẽ kết nối với các thiết bị và cảm biến. Mỗi phòng đều có nhiều thiết bị kiểm soát (tức là Ánh sáng, quạt, ổ cắm điện, vv.. ), một Cảm biến chuyển động PassiveIR (để phát hiện sự hiện diện của con người trong phòng), một bộ cảm biến nhiệt độ (LM35 để thu thập nhiệt độ phòng) và LDR (để phát hiện cường độ ánh sáng gần cửa sổ phòng).








Địa chỉ thiết bị
Phần quan trọng nhất là làm thế nào chúng ta xác định các thiết bị? Đơn giản thôi. Chúng ta sẽ tạo địa chỉ cho thiết bị cách kết hợp số phòng với số lượng thiết bị. Ví dụ như: Số phòng 1 có ba thiết bị. Địa chỉ thiết bị sẽ là:
R1\Dev0
R1\Dev1
R1\Dev2


Vì vậy, bây giờ chúng ta đã biết cấu hình tổng thể. Tóm lại, một Raspberry Pi sẽ hoạt động như bộ điều khiển chính. Mỗi phòng đều có riêng một Arduino UNO của nó mà hành động phục vụ cho Raspberry Pi. Dữ liệu giữa Raspberry Pi Arduino UNO và sẽ được thực hiện bằng cách sử dụng giao tiếp I2C.

Sơ đồ
Để  cho dễ dàng hơn, bắt đầu thực hiện cho căn phòng đầu tiên. Hãy tham khảo sơ đồ kết nối các thành phần trong một cách đúng nhất. Lưu ý: địa chỉ I2C cho Arduino Phòng 1 là 0x40. Bạn có thể thay đổi địa chỉ nhưng chắc chắn phải thay đổi lại trong mã nguồn Aruino và cũng thay đổi luôn địa chỉ của phòng cần quản lý trong các ứng dụng được cung cấp dưới đây. Lưu ý rằng mỗi Arduino phải có 1 địa chỉ duy nhất trên giao tiếp I2C.



Làm thế nào đấu dây  với mạch rờ le? 
Cảnh báo: Cẩn thận với điện khi thao tác nếu sử dụng cho điện cao thế và tránh xa trẻ nhỏ. Nếu có vấn đề nguy hiểm nào, nhớ tắt cầu dao điện chính.


Phần mềm
Dự án này đã bao gồm chương trình cho  Raspberry Pi 2 và Arduino UNO 2. Phần mềm Raspberry Pi phát triển trong Visual Studio 2015. Tôi giả định rằng người đọc đã biết lập trình với Visual Studio 2015. Tôi cũng giả định rằng người dùng có kiến thức về Arduino, Visual C # và Windows Universal  XAML.
Nếu bạn mới biết Arduino và WINDOW IOT  hãy tham khảo thêm

Hãy tìm hiểu phần mềm theo thông tin sau đây:
1.       Giao thức (Làm thế nào Raspberry Pi 2 và Arduino nói chuyện với nhau)
2.       Cấu trúc lớp (bao Raspberry Pi 2 hình thành phức hợp các thiết bị và phòng )
3.       Giao diện người dùng (Wire-frame)

Giao thức I2C
Trước khi đi xa hơn, hãy xem xét Raspberry Pi và Arduino giao tiếp với nhau như thế nào.

Mục tiêu giao tiếp
1. Đọc cảm biến 
2. Đọc trạng thái của thiết bị 
3. Cài đặt trạng thái thiết bị 
Quy tắc giao tiếp là truyền những byte dữ liệu nối tiếp nhau. Tôi đã định nghĩa giao thức cho việc gửi và nhận các byte dữ liệu. Việc gửi byte dữ được cố định trong ba lần gửi của một mảng dữ liệu có 14 byte. 
Hãy tham khảo sơ đồ sau đây để hiểu giao thức đã định nghĩa cho dự án này ('X' biểu thị giá trị ngẫu nhiên hoặc '0', nó sẽ bị bỏ qua trong khi giao tiếp):

Điều khiển các byte giữa RP2 và Arduino

Tuần tự nhận các byte dữ liệu cho các mode các nhau

Mode 0: đọc cảm biến

Mode 1: Đọc thiết bị

Mode 2: Thiết lập trạng thái thiết bị

Lớp có tên 'I2C_Helper'  thực hiện theo giao thức trong PRi2. Lớp này có sẵn trong Universal Windows Project . Để mở nó: vào Solution Explorer> Library> Communication. Về phía Arduino, nó rất dễ dàng để hiểu thư viện I2C.
Tham khảo thêm:
https://ms-iot.github.io/content/en-US/win10/samples/I2CAccelerometer.htm
https://www.arduino.cc/en/Reference/Wire
https://www.hackster.io/phantom_override/arduino-i2c-ommunication-with-raspi-2-wiot
Bây giờ, chúng tôi đã định ra một chương trình giao tiếp thích hợp mà có thể biết được tình trạng và giá trị của cảm biến, thiết bị và cũng cung cấp khả năng thiết lập trạng thái thiết bị.

Class Structure (Raspberry Pi 2 Maintain Objects)
Như đã thảo luận, dự án này được coi là toàn bộ nhà. Nhà gồm nhiều phòng và phòng bao gồm nhiều thiết bị. Như vậy cấu trúc OOP của cấu hình như vậy được hiển thị dưới đây:


Lớp "Home" chính bao gồm nhiều đối tượng phòng như danh sách chung của phòng (List <Room>). Lớp Home cung cấp phương thức tĩnh để tải và lưu đối tượng Home trên Pi để sử dụng sau này. Phòng bao gồm các thiết bị như danh sách chung của các thiết bị (List <Device>) và cấu trúc cảm biến để đóng gói tất cả các cảm biến thành một. Thiết bị bao gồm các chi tiết chúng và chức năng để bật và tắt chúng bằng cách sử dụng giao thức theo Mode - 2. Lớp AmbientLight, PassiveIR và lớp Temperature cung cấp dữ liệu môi trường của căn phòng. Đối tượng Room duy trì dữ liệu cảm biến và định kỳ làm mới chúng bằng cách sử dụng chế độ giao thức Mode - 0.
Lưu ý: Biểu đồ lớp được cung cấp trong dự án. Để xem nó, hãy vào "Solution Explorer" và nhấp đúp chuột vào 'ClassDiagram.cd'.

Giao diện người dùng 
Bất kỳ ứng dụng phải thân thiện. Để làm cho ứng dụng thân thiện, bắt đầu với mô hình wire-frame. Giả sử rằng bạn đang sử dụng ứng dụng của riêng bạn và tìm hiểu những mục tiêu chính và làm thế nào để tích hợp chúng sao cho dễ dàng nhất cho người dùng cuối. 
Trong kịch bản của ứng dụng này, mục tiêu chính của chúng tôi là: 
Quản lý phòng 
Quản lý thiết bị 
Dịch vụ bên ngoài như GSM truyền thông, truyền thông Internet, vv 
Để làm như vậy, tôi đã tách vấn đề thành: 
Home Page: Cung cấp thông tin tình trạng thiết bị cơ bản, ngày-thời gian và khóa 
Thiết bị yêu thích: Truy cập trực tiếp đến các thiết bị yêu thích 
Trang Room: Cung cấp truy cập đến các phòng cấu hình và các thiết bị của chúng 
Máy bơm nước 
Cài đặt / Cấu hình: quản lý của các phòng và các thiết bị

Wire-frame:
Bảng  điều khiển chung

Bảng điều khiển các phòng

Trang chủ

Các chức năng

Các thiết bị trong một phòng


Các thiết bị trong 1 phòng
Hình ảnh thực tế của ứng dụng














Làm thế nào để cấu hình? 

Tôi đã cố gắng để làm cho phần mềm này dễ dàng nhất có thể. Với cấu hình nhỏ, bạn có thể vận hành các thiết bị trực tiếp sử dụng Raspberry Pi 2. Cấu hình từng bước được hiển thị dưới đây:

Chọn Icon config bên phải

Click dấu + để thêm phòng mới

Muốn chon phòng nào thì click lên nó

4a đổi tên phòng, 4b địa chỉ phòng, 4c icon của phòng

Click dấu + để thêm thiết bị

Chọn 6a để đổi tên trong ô 6b, có kết nối đến thiết bị trên arduino ở chân nào trong danh sách 6c. Cuối cùng nhấn lưu ở số 7

Chọn biểu tượng màu tím để mở trang quản lý các phòng vào chọn phòng cần theo dõi

Trong phòng này sẽ thông báo nhiệt độ, độ sáng, trạng thái thiết bị, nhấp đôi lên thiết bị để tắt hoặc mở thiết bị đó

Làm thế nào để triển khai giải pháp  Raspberry Pi 2?
Bạn có thể tham khảo link này để hiểu được quá trình triển khai.
Làm thế nào để đăng ký ứng dụng này là ứng dụng khởi động?
Rất nhiều người  muốn ứng dụng của họ bắt đầu ngay sau khi Raspberry Pi 2 khởi động. Để làm như vậy, đọc bài viết của tôi: Windows 10 IOT Core: Thiết lập Startup App

Các vấn đề đối với Arduino bootup
Khi Arduino khởi động, nó nhấp nháy chân D13. Không kết nối bất kỳ relay trên D13 khi Arduino khởi động hoặc khởi động lại, D13 sẽ được nhấp nháy một lần và nếu bất kỳ thiết bị kết nối với Relay (điều khiển thông qua D13) cũng sẽ nhấp nháy.

Tương lai
Không có giới hạn với tính năng, ý tưởng mới hoặc thậm chí để khắc phục hạn chế hiện có. Nhưng có thể không khả thi với mọi tính năng cùng một lúc. Tại phiên bản này, bài viết này giúp bạn hiểu được sức mạnh thực sự của Raspberry Pi 2 và Windows IOT. Windows Universal XAML là nền tảng tuyệt vời cho Windows 10 IOT & Raspberry Pi 2 có bộ xử lý đồ họa tốt tích hợp sẵn. Bằng cách kết hợp hai điều này, bạn có thể tạo ra nhiều ứng dụng hay. Ngoài ra, Raspberry Pi 2 có tốc 900MHz rất  tuyệt vời cho các giải pháp đa luồng. Đây là dự án cơ bản cho những ai muốn tìm hiểu nguyên tắc cơ bản của hệ thống nhúng và phần mềm (tức là giao tiếp I2C, làm thế nào để vận hành các thiết bị, thiết kế giao thức tùy chỉnh, thiết kế OOP cho ứng dụng thực và wire-frame).
Trong tương lai, chúng ta có thể thêm khả năng để giao tiếp trên thiết bị từ xa bằng cách sử dụng tần số vô tuyến hoặc hồng ngoại thay vì I2C. Cổng thông tin Web quản lý sử dụng Azure có thể được tích hợp cho các thiết bị di động. Hơn nữa việc tự động hóa sẽ được tích hợp như hoạt động sự kiện, hẹn giờ hoạt động với chip RTC. Ví dụ, bật đèn sân sau lúc 07:00 và tắt lúc 10:00 tối; một ví dụ điển hình cho sự kiện là không cho bật đèn vườn khi cường độ ánh sáng môi trường xung quanh giảm xuống dưới mức độ cụ thể. Vì vậy, không có giới hạn cho việc này Windows 10 IOT nền tảng Core mới cho Raspberry Pi 2.
Link tải mã nguồn chương trình bằng C# và Arduino

Dịch từ hackster.io / dientunht.blogspot.com
Back To Top