Thông báo

Collapse
No announcement yet.

[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

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [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
    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


  • #2
    Hình ảnh thực tế của ứng dụng














    Comment


    • #3
      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.
      http://ms-iot.github.io/content/en-U...les/Blinky.htm
      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
      https://www.hackster.io/AnuragVasanw...ng-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

      https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-/zipball/master

      Dịch từ hackster.io / dientunht.blogspot.com
      - See more at: http://dientunht.blogspot.com/2015/1....vxbQ97qF.dpuf

      Comment


      • #4
        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.
        http://ms-iot.github.io/content/en-U...les/Blinky.htm
        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
        https://www.hackster.io/AnuragVasanw...ng-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

        https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-/zipball/master

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

        Comment


        • #5
          Kì công quá, cám ơn tác giả.

          Comment


          • #6
            Nguồn bản tiếng anh: https://www.hackster.io/AnuragVasanw...omation-0dcefc
            AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
            Xem thêm tại Online Store ---> Click here
            Mob: 0982.083.106

            Comment


            • #7
              Thanks bác VNarmy , em là một coder. Qua bài này em biết làm thế nào để RPi nối với Arduno, và làm thê nào để từ tín hiệu số điều khiển bật tắt.

              Comment


              • #8
                Nguyên văn bởi doime Xem bài viết
                Thanks bác VNarmy , em là một coder. Qua bài này em biết làm thế nào để RPi nối với Arduno, và làm thê nào để từ tín hiệu số điều khiển bật tắt.
                Cái này cổ rồi. Bây giờ dùng MQTT chứ ai làm thế này nữa.
                AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                Xem thêm tại Online Store ---> Click here
                Mob: 0982.083.106

                Comment

                Về tác giả

                Collapse

                nhtrung1980 Tìm hiểu thêm về nhtrung1980

                Bài viết mới nhất

                Collapse

                Đang tải...
                X