Mục lục:

Đèn Ramadan - IOT tự động hóa gia đình: 6 bước
Đèn Ramadan - IOT tự động hóa gia đình: 6 bước

Video: Đèn Ramadan - IOT tự động hóa gia đình: 6 bước

Video: Đèn Ramadan - IOT tự động hóa gia đình: 6 bước
Video: Những thứ mình tự động hóa trong nhà - vì sao nên dùng automation cho smarthome 2024, Tháng mười một
Anonim
Đèn Ramadan | IOT tự động hóa gia đình
Đèn Ramadan | IOT tự động hóa gia đình

Khi tháng lễ Ramadan gõ cửa, các thành phố trên toàn thế giới bừng sáng và chuẩn bị cho tháng ăn chay. Đèn được treo ở các quảng trường công cộng và trên khắp các đường phố của thành phố cũng như trên các bức tường bên ngoài của các ngôi nhà được thắp sáng suốt đêm cho đến khi mặt trời mọc vào buổi sáng.

Trong dự án này, tôi muốn chia sẻ đóng góp của mình, trong đó tôi đang tự động hóa việc thắp sáng các đồ trang trí này dựa trên thời gian Adhan và thêm điều này vào hệ thống nhà thông minh của mình.

Bước 1: Lý thuyết

Về cơ bản, việc tự động hóa ánh sáng dựa trên cường độ ánh sáng mặt trời sẽ dễ dàng và dễ áp dụng hơn. Tuy nhiên, tôi muốn điều này đúng với tinh thần của tháng thánh đó là, đèn sẽ sáng miễn là mọi người được phép ăn trong tháng ăn chay. Đặc biệt, đèn được bật bắt đầu từ Maghrib Adhan cho đến Fajr Adhan vào mỗi ngày mà không có bất kỳ sự tương tác nào của con người.

Bước 2: Thiết kế

Dưới đây, tôi sẽ liệt kê các yêu cầu / khả năng của dự án này:

  • Hệ thống sẽ có thể tự động xử lý khi khởi động.
  • Hệ thống sẽ có thể thực hiện định kỳ thuật toán quyết định (ON / OFF).
  • Hệ thống sẽ có thể gọi API hàng ngày.
  • Hệ thống sẽ có thể phục hồi sau khi khởi động lại ngoài kế hoạch.
  • Hệ thống sẽ thực hiện thuật toán quyết định (ON / OFF) khi nhận được dữ liệu ngay lập tức.
  • Hệ thống phải cung cấp một công tắc để bật chế độ lái tự động (Chế độ tự động).
  • Hệ thống phải cung cấp một công tắc để BẬT / TẮT đèn theo cách thủ công.
  • Kích hoạt công tắc thủ công nên đặt chế độ thủ công thành TẮT.
  • Khi chế độ Tự động được BẬT, kết quả của thuật toán quyết định sẽ được phản ánh trên công tắc BẬT / TẮT bằng tay.

Bước 3: Chi tiết kỹ thuật: API

Chi tiết kỹ thuật: API
Chi tiết kỹ thuật: API

Để làm cho lý thuyết có thể áp dụng, cần phải biết thời gian Adhan trên cơ sở hàng ngày kể từ biến số của nó và hành động dựa trên nó để bật / tắt đèn / trang trí.

Vì mục đích này, tôi quyết định sử dụng API dựa trên vị trí để phân phát dữ liệu (thời gian dành cho Adhan)

muslimsalat.com/api/#location

  • API này cung cấp nhiều tùy chọn và thông số cấu hình được mô tả trong liên kết tài liệu ở trên.
  • Bạn nên sử dụng API_key của riêng mình, miễn phí khi đăng ký.
  • Trong thiết kế của mình, tôi quan tâm đến dòng thời gian hàng ngày.
  • Thời gian trả về ở định dạng 12 giờ (AM / PM).
  • Về vị trí, tôi ước nếu API này có thể cung cấp các tùy chọn chính xác hơn cho các vị trí như hệ thống tọa độ địa lý tọa độ (Vĩ độ và Kinh độ). Theo cách này, API này có thể được cung cấp với một tên thành phố chẳng hạn và điều này là khá đủ trong hầu hết các trường hợp. Thật không may, kết quả của thành phố cụ thể của tôi khá sai lệch trong nhiều bài kiểm tra và có vài phút chênh lệch khi so sánh thời gian Adhan giữa kết quả API và thời gian thực tế của Adhan trong thành phố của tôi. Mặt khác, kết quả hoàn toàn trùng khớp khi tôi cung cấp một thành phố gần phía bắc và tôi đã bám sát nó!
  • Url API tôi đang sử dụng là: https://muslimsalat.com/.json? Key =

Bước 4: Chi tiết kỹ thuật: Phần cứng

Chi tiết kỹ thuật: Phần cứng
Chi tiết kỹ thuật: Phần cứng

Để đơn giản hơn, tôi đang loại bỏ phần cứng khỏi quy trình đồng bộ hóa với API và tính toán thời gian bằng cách ủy quyền các hoạt động này cho Hệ thống tự động hóa gia đình của tôi. Điều này sẽ cho phép tôi kiểm soát nhiều hơn nếu tôi muốn điều chỉnh nguồn API và thuật toán tính toán.

Có thể nói, tôi đã sử dụng ESP8266 (NodeMCU) để kết nối với mạng cục bộ qua WIFI và mô-đun chuyển tiếp làm thiết bị truyền động. NodeMCU sẽ sử dụng giao thức MQTT và lắng nghe một chủ đề cụ thể để nhận lệnh tắt / mở rơle. Đơn giản vậy thôi!

Bước 5: Chi tiết kỹ thuật: Kết nối các dấu chấm | Tự động hóa gia đình

Chi tiết kỹ thuật: Kết nối các dấu chấm | Tự động hóa gia đình
Chi tiết kỹ thuật: Kết nối các dấu chấm | Tự động hóa gia đình
Chi tiết kỹ thuật: Kết nối các dấu chấm | Tự động hóa gia đình
Chi tiết kỹ thuật: Kết nối các dấu chấm | Tự động hóa gia đình
Chi tiết kỹ thuật: Kết nối các dấu chấm | Tự động hóa gia đình
Chi tiết kỹ thuật: Kết nối các dấu chấm | Tự động hóa gia đình

RaspberryPi của tôi chứa một phiên bản được gật đầu có khả năng xử lý tất cả những gì tôi cần cho dự án này. Nó cũng có một máy chủ MQTT được cài đặt để xuất bản tin nhắn của chúng tôi.

Lúc đầu, tôi nghĩ rằng tôi có thể tìm nạp dữ liệu API trên cơ sở hàng ngày lúc 9 giờ sáng và trích xuất cả thời gian Fajr và Mahgrib Adhan và tiếp tục so sánh thời gian hiện tại với các biến sau:

mỗi 30 giây:

nếu: Mahgrib <NOW <Fajr true | bật đèn | xuất bản thông báo BẬT cho chủ đề MQTT được chỉ định khác: tắt

Để so sánh thời gian, tôi đang chuyển đổi giờ do API cung cấp từ hh: mm (AM / PM) thành định dạng ngày đầy đủ bằng cách đặt phần ngày thành một ngày không đáng kể trong lịch sử, ví dụ: (1/1/1970) vì chúng tôi đang so sánh thời gian chỉ đến thời điểm hiện tại (phần ngày cũng được chuyển đổi).

Thật không may, điều này sẽ chỉ hoạt động trong các trường hợp chuyển tiếp. Giả sử trường hợp mất điện hoặc hệ thống khởi động lại vì một lý do ngoài ý muốn. Nếu trường hợp này xảy ra trước 12 giờ sáng thì chúng tôi vẫn ở bên an toàn, nhưng sau 12 giờ sáng, điều này sẽ không thành công với thuật toán đơn giản của chúng tôi.

Để làm ví dụ, hãy có Magrib Adhan lúc 7:30 tối và Fajr lúc 4:10 sáng. Khi hệ thống khởi động, nó sẽ gửi một yêu cầu mới để tìm nạp dữ liệu đã đề cập trước đó. Nếu bây giờ là 1:45 sáng, chúng tôi hy vọng thuật toán của mình sẽ trả về true, nhưng thực tế thì không phải vì 1:45 sáng ít hơn Fajr (4:10 sáng) nhưng không lớn hơn Magrib (7:30 tối). Điều này là do chúng tôi hợp nhất ngày giữa tất cả các biến. Dưới đây là phiên bản cuối cùng của thuật toán (cho đến nay):

mỗi 30 giây:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate () + 1); // xử lý các ngày kéo dài endTime if (now.getHours () <= 12) {now.setDate (now.getDate () + 1); // xử lý kéo dài ngày currentTime}} // bên dưới là khối mã trước đó nếu: Mahgrib <NOW <Fajr true | bật đèn | xuất bản một thông báo BẬT cho chủ đề MQTT được chỉ định khác: false | tắt

Toàn bộ quy trình được chú thích trong hình trên.

Về giao diện người dùng, tôi đã thêm 2 công tắc vào giao diện người dùng / giao diện:

  1. Một công tắc để biến quy trình này thành Tự động hoặc Thủ công.
  2. Một công tắc để BẬT / Tắt đèn bằng tay.

Bước 6: Kết thúc.

Thời gian trôi đi không bao giờ được nhớ lại. Thực hiện các dự án đơn giản trong 1 ngày như vậy cho phép bạn bắt kịp con đường nhanh chóng này và giúp bạn phục hồi các kỹ năng mềm của mình theo thời gian.

Tôi đã cố gắng rất nhiều trong dự án này để giữ cho nó đơn giản và có thể tái sử dụng trên toàn cầu.

Vui lòng bình chọn cho hướng dẫn này nếu bạn nghĩ rằng dự án này xứng đáng.

Chúc mừng tháng lễ Ramadan!

Đề xuất: