YAWS, Trạm Thời Tiết Khác Nữa
Dự án trạm thời tiết IoT dựa trên ESP32 và Home Assistant, đo nhiệt độ, độ ẩm, áp suất, gió và mưa. Dự án có tính mô-đun, sử dụng cảm biến BME680, AS5600 và có thể mở rộng. Hướng dẫn in chi tiết và danh sách linh kiện đầy đủ.
2.1K
Lượt Xem
48
Lượt Thích
298
Lượt Tải
Cập Nhật Dec 18, 2025
Mô tả
- Nhờ có @ScruffyOrc_217627 mà mình biết có thể gặp vấn đề với việc kết nối phần tô của cối xay gió với bộ giữ, có thể là do vấn đề khớp nối. Không có gì khó khăn cả! Chỉ cần dùng dao rọc giấy giũa nó một chút thôi! Cập nhật 31/01/24 * Mình bắt đầu phần điện tử hơi trễ. Vấn đề chính là bo mạch của mình (NodeMCU esp32 hoặc esp8266 d1mini) Cả hai đều có dòng điện ngủ sâu khá cao, gần 20mAh, nên chạy bằng pin là điều gần như không thể (mình không thể trèo lên mái nhà mỗi tuần để thay pin). Vì vậy, hiện tại vì vấn đề kinh tế, mình sẽ viết code sử dụng các bo mạch này và cân nhắc cấp nguồn trực tiếp để làm việc với các cảm biến, sau khi kiểm tra chính xong mình sẽ bắt đầu với giao thức deep sleep để cắt điện càng nhiều càng tốt và sử dụng một hoặc hai viên pin Li-ion 18650 cùng một tấm pin năng lượng mặt trời nhỏ. Nhưng mình sẽ làm từng bước một.
- Mình phát hiện ra lỗi với Esp8266, các chỉ số đo gió rất tệ và mình không thể tìm ra giải pháp (Rõ ràng là SAU khi mình làm xong PCB... nên mình phải làm lại với Esp32 NodeMCU). Vì vậy, nếu bạn tìm thấy cách khắc phục cho vấn đề này, VUI LÒNG bình luận để mình có thể thêm tính năng và hai đoạn code khác nhau! Đây là bản BETA của file YAML đọc cảm biến, phần đo mưa vẫn đang được phát triển. esphome: name: esp32-yaws friendly_name: esp32-YAWS includes: - "as5600_sensor.h" libraries: - Wire - "AS5600" esp32: board: nodemcu-32s framework: type: arduino # Kích hoạt ghi nhật ký logger: # Kích hoạt API Home Assistant api: encryption: key: "XXXXXXXXXXXXXXXXX" ota: password: "XXXXXXXXXXXXXXXX" wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Kích hoạt điểm truy cập dự phòng (hotspot) trong trường hợp kết nối wifi thất bại ap: ssid: "XXXXXXX" password: "XXXX" captive_portal: i2c: sda: GPIO21 scl: GPIO22 bme680_bsec: address: 0x77 #Mình chỉ định vì bo mạch của mình không phải 0x76 sensor: - platform: custom lambda: |- auto my_as5600_sensor = new AS5600Sensor(); App.register_component(my_as5600_sensor); return {my_as5600_sensor}; sensors: name: "AS5600" accuracy_decimals: 2 - platform: pulse_counter # phần này dành cho máy đo tốc độ gió. pin: 19 unit_of_measurement: 'm/s' name: 'Wind speed' filters: - multiply: 0.0173833333 update_interval: 60s - platform: bme680_bsec temperature: name: "BME680 Temperature" pressure: name: "BME680 Pressure" humidity: name: "BME680 Humidity" iaq: name: "BME680 IAQ" id: iaq co2_equivalent: name: "BME680 CO2 Equivalent" breath_voc_equivalent: name: "BME680 Breath VOC Equivalent" text_sensor: // Đầu ra cảm biến BME, mình để lại tất cả để kiểm tra. - platform: bme680_bsec iaq_accuracy: name: "BME680 IAQ Accuracy" - platform: template name: "BME680 IAQ Classification" icon: "mdi:checkbox-marked-circle-outline" lambda: |- if ( int(id(iaq).state) <= 50) { return {"Excellent"}; } else if (int(id(iaq).state) >= 51 && int(id(iaq).state) <= 100) { return {"Good"}; } else if (int(id(iaq).state) >= 101 && int(id(iaq).state) <= 150) { return {"Lightly polluted"}; } else if (int(id(iaq).state) >= 151 && int(id(iaq).state) <= 200) { return {"Moderately polluted"}; } else if (int(id(iaq).state) >= 201 && int(id(iaq).state) <= 250) { return {"Heavily polluted"}; } else if (int(id(iaq).state) >= 251 && int(id(iaq).state) <= 350) { return {"Severely polluted"}; } else if (int(id(iaq).state) >= 351) { return {"Extremely polluted"}; } else { return {"error"}; } Cấu hình cảm biến tùy chỉnh. #include "esphome.h" #include <Wire.h> #include "AS5600.h" #define TAG "AS5600" AS5600 as5600; // Địa chỉ i2c mặc định 0x36 class AS5600Sensor: public PollingComponent, public Sensor { public: AS5600 as5600; AS5600Sensor(): PollingComponent(5000) {} void setup() override { as5600.begin(); as5600.setDirection(AS5600_CLOCK_WISE); // Hoặc AS5600_COUNTERCLOCK_WISE } void update() override { if (!as5600.isConnected()) { ESP_LOGE(TAG, "Not connected"); return; } if (!as5600.detectMagnet()) { ESP_LOGE(TAG, "No magnet detected"); return; } if (as5600.magnetTooStrong()) { ESP_LOGE(TAG, "Magnet too strong"); return; } if (as5600.magnetTooWeak()) { ESP_LOGE(TAG, "Magnet too weak"); return; } float angle = as5600.rawAngle() AS5600_RAW_TO_DEGREES; publish_state(angle); } }; Để sử dụng thư viện, hãy dùng AS5600 của RobTillaart, https://github.com/RobTillaart/AS5600 Để triển khai cảm biến, mình tham khảo kho lưu trữ EspHome cho từng cảm biến (BME680 BSEC, DHT22, v.v.). Máy đo tốc độ gió chỉ là một bộ đếm RPM (Pulse counter trong EspHome, nó trả về số xung trong một phút), phép toán dựa trên thiết kế máy đo tốc độ gió của mình nhưng bạn có thể điều chỉnh dựa trên thiết kế của bạn. 1. Đo khoảng cách giữa tâm ổ bi và tâm chén (Bán kính). (0,166m)
- Nhân đôi và tìm đường kính. (0,322m)
- Nhân với 3,1416 và tìm chu vi. (1,0430112m)
- Bây giờ bạn biết một chén đi được bao xa với một vòng quay.
- Sau đó, bạn nhân chu vi với RPM và bạn sẽ biết máy đo tốc độ gió đã đi được bao nhiêu mét trong một phút. (mét trên phút) và chia cho 60 để tìm mét trên giây.
- Để đơn giản hóa phép tính, chúng ta có thể chia chu vi cho khoảng thời gian cập nhật (60) và tìm hằng số cho máy đo tốc độ gió này, hằng số này sẽ được nhân với RPM để cho ra m/s. (0,0173833m). (VÀ NẾU BẠN CÓ NHU CẦU LỚN HƠN THÌ BẠN SẼ SỬ DỤNG HỆ METRIC CHỨ KHÔNG PHẢI EAGLES PER BURGER) (CÂU ĐÙA BA FLAG) Ít nhất, bạn có thể nhân m/s với 3,6 để có Km/h và nhân với 1,94 để có Knots. Sẽ có thêm nhiều cập nhật trong những ngày tới!! Hãy theo dõi nhé!! Cập nhật 23/01/24 * Cập nhật phần Đế Pluvio với một phần yếu hơn (Đánh giá khoảng 10N lực tối đa với biến dạng 0,9mm và mật độ 100) để tiết kiệm filament tốt hơn.
- Cập nhật đế cho Hub Cảm biến và làm bộ chuyển đổi DHT22. (Sẽ có thêm cảm biến theo yêu cầu sớm)
- Mình bắt đầu tối nay phần lập trình và đấu dây. Mình sẽ tải sơ đồ mạch lên trong 4 ngày và code sẽ theo sau. Hãy theo dõi nhé!! Cập nhật 21/01/24 HUYỆN! 1. Mình đã in xong tất cả các bộ phận và nhận ra mình CÓ THỂ đã làm quá mạnh phần giữ pluvio (Nó có thể chịu được ít nhất 3kg với cảm biến 100g... nên đúng là hơi quá). Mình sẽ thiết kế lại tối nay để sáng mai nó sẽ sẵn sàng để in (RTP).
- Các bộ phận vít đầu đã được thiết kế lại hoàn toàn vì mình phát hiện ra một lỗi nhỏ trong quá trình thiết kế, giờ chúng đã được sửa và thiết kế tốt hơn. Hãy cho mình biết suy nghĩ của bạn. (LƯU Ý CHÚNG KHÔNG CÓ REN). Các bộ phận khác lắp khá tốt và mình đã cập nhật một số file ĐÃ SỬA với dung sai và thiết kế làm tốt hơn.
- Nhờ một gợi ý trong bình luận, mình sẽ cập nhật đế hub cảm biến với khả năng lắp ghép mô-đun cho các loại cảm biến nhiệt độ khác nhau. Điều này cho phép bạn thử nghiệm, làm việc và mày mò với bất kỳ cảm biến nào bạn thích! Tuyên bố miễn trừ trách nhiệm: Đây là bản beta, chưa hoàn thành, đang trong quá trình phát triển, là dự án của mình vì mình nghèo nên phải đợi mua linh kiện {CÂU ĐÙA BA FLAG} Vì vậy: CÁC FILE DỰ ÁN CHƯA HOÀN THIỆN VÀ CÓ THỂ CÓ MỘT SỐ VẤN ĐỀ. Nếu bạn tìm thấy bất cứ điều gì sai, không hoạt động hoặc “Có lẽ mình nghĩ cái này tốt hơn vì” hãy bình luận để mình sửa chữa thảm họa của mình và làm cho dự án này phát triển cùng cộng đồng! (Không tưởng? Đúng vậy nhưng tại sao không thử!) Hẹn gặp lại trong vài ngày tới với nhiều cập nhật! LƯU Ý: Tính đến hôm nay mình vẫn đang thiết kế hộp chính và các bộ phận điện tử nên phần này và các phần khác chưa có sẵn. Cập nhật 19/01/24 Phát hành 0.1.1 Mình đã sửa hết các lỗi chính phát hiện khi in và cập nhật Danh sách bộ phận. Vì vậy, chỉ cần chú ý đến các muỗng của máy đo tốc độ gió, phần khớp nối hơi quá khít (Xin lỗi, đó không phải thiết kế của mình, mình sẽ cố gắng sửa). Trong những ngày tới mình sẽ bắt đầu với các bộ phận Điện tử, hãy theo dõi để có thêm cập nhật! 18/01/2024 Phát hành 0.1 Huyệt! Bạn đang tìm kiếm một dự án về trạm thời tiết khác? Bạn thích các dự án IoT? Bạn thích các dự án được làm tốt? Chà... chúng ta sẽ xem mình làm có tốt không! Đây là Y.A.W.S.!!! Được tạo ra vì mình có quá nhiều thời gian rảnh trong kỳ nghỉ đông ở trường đại học... VÀ vì mình thích thu thập dữ liệu thời tiết, giống như bất kỳ dữ liệu nào mà cảm biến có thể xuất ra... Vì vậy, Dự án dựa trên chip ESP32 và các tích hợp Home Assistant như EspHome. Mình không phải là người giỏi nhất trong việc thiết kế mọi cảm biến từ đầu nên mình đã lắp ghép trạm với các bộ phận và bo mạch có sẵn phù hợp với dự án. Đây là dự án ĐANG TRONG QUÁ TRÌNH THỰC HIỆN, mình đang in nó ngay bây giờ nên mình sẽ cập nhật mọi thứ hàng ngày. Trạm hoàn toàn có thể tháo lắp, vì vậy bạn có thể in chỉ những gì bạn cần hoặc muốn sử dụng. Các bộ phận chính là: * Hub Cảm biến Nơi này cung cấp vỏ bọc dưới màn hình Stevenson cho cảm biến chính, mình đã sử dụng BME680.
- Hub Gió Mô-đun này chứa cảm biến Hướng gió và Máy đo tốc độ gió.
- Mưa kế. Vâng, trời đang mưa, nhưng mưa bao nhiêu? Chà, cái này sẽ cho chúng ta biết! Lưu ý: bộ phận này là bản phối lại của một bộ đo mưa dành cho cảm biến cửa ZigBee (Aqara), vì vậy theo một cách nào đó nó có khả năng tương thích với ZigBee. Dự án gốc từ https://smartsolutions4home.com/ss4h-zrg-zigbee-rain-gauge/
- Hộp Điều khiển Chúng ta cần một nơi để đặt tất cả các bộ phận điện tử. Đối với mọi thứ khác, HỎI MÌNH trên Ig tại https://www.instagram.com/bennys_prop/ hoặc ở đây trong phần bình luận. ### Cài đặt In In ở bất kỳ độ cao lớp nào bạn muốn. Có lẽ chỉ các bộ phận giữ nên được in với ít nhất 30% mật độ và 3 lớp tường. In mọi thứ úp xuống hoặc theo hướng tốt nhất cho bạn. Mình chỉ sử dụng hỗ trợ cho Đế dưới Anemo và Đế trên Anemo. Sử dụng Brim nếu bản in của bạn dễ bị cong vênh (hoặc nếu bạn sử dụng vật liệu ASA/ABS chuối {CÂU ĐÙA BA FLAG}) Mình không cần in bất cứ thứ gì trên SLA nên FDM nên làm tốt công việc này, nhưng mình chưa đặt nó ra ngoài trời vào lúc này nên mình sẽ thử nghiệm cả độ bền của PETG. Có lẽ các bộ phận vít đầu có thể được làm bằng nhựa resin để có bề mặt ren tốt hơn (Lưu ý: cả hai vít đầu PHẢI được ren bằng vít và không có ren sẵn theo thiết kế, nếu bạn muốn có ren thì HỎI và mình sẽ tải lên các file có ren). ### Bạn sẽ cần: #### Điện tử: * Một bo mạch dựa trên ESP32, bo mạch bạn thích, mình ban đầu sử dụng ESP 8266 d1mini cũ.
- Một hệ thống Home assistant đang hoạt động để tích hợp mọi thứ. (khá quan trọng)
- Cảm biến nhiệt độ, độ ẩm, áp suất BME680 “và máy pha cà phê {CÂU ĐÙA BA FLAG}”.
- Bộ mã hóa từ AS5600 cho hướng gió.
- Cảm biến hiệu ứng Hall HOẶC công tắc từ, cho máy đo tốc độ gió và bộ đo mưa.
- Dây cáp, rất nhiều dây cáp
- Một hộp chống nước cho thiết bị điện tử #### Vít và đai ốc (Tất cả đều phải bằng thép không gỉ): * 3 x M6 75mm đầu tròn
- 3 x Đai ốc M6
- 3 x M3 10mm đầu tròn
- 3 x Đai ốc M3
- 1 x M5 đầu V 45mm
- 1 x M5 30mm đầu tròn
- 4 x M3 10mm đầu V
- 4 x M5 15mm đầu V
- 12 x Đai ốc M5
- 9 x M5 40mm đầu tròn ##### Linh tinh: * 2 x Ổ bi thép/gốm 608 (Không sử dụng loại có vòng đệm cao su như mình, chúng sẽ không quay...)
- 2 x nam châm Neod. đường kính 10mm x 6mm.
- Cọc chính, có thể từ 30mm đến 40mm tốt hơn nếu là nhôm để giảm trọng lượng, nhưng bạn có thể sử dụng bất cứ thứ gì bạn muốn. Xem thêm các cập nhật trong những ngày tới!! Giữ liên lạc nhé!!
Giấy phép
Tác phẩm này được cấp phép theo
Creative Commons — Attribution — Noncommercial — Share AlikeCC-BY-NC-SA
File mô hình
Đang tải files, vui lòng chờ...
Vui lòng đăng nhập để bình luận.
Vui lòng đăng nhập để khoe bản in của bạn.
Chưa có bản in nào được khoe. Hãy là người đầu tiên!
Chưa có bình luận nào. Hãy là người đầu tiên!