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
https://www.arduino.cc/en/Tutorial/HomePage
http://ms-iot.github.io/content/en-U...SetupPCRPI.htm
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-...elerometer.htm
https://www.arduino.cc/en/Reference/Wire
https://www.hackster.io/phantom_over...h-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
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
https://www.arduino.cc/en/Tutorial/HomePage
http://ms-iot.github.io/content/en-U...SetupPCRPI.htm
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-...elerometer.htm
https://www.arduino.cc/en/Reference/Wire
https://www.hackster.io/phantom_over...h-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
Comment