Mục lục:

Trạm thời tiết nhỏ với Attiny85: 6 bước (có hình ảnh)
Trạm thời tiết nhỏ với Attiny85: 6 bước (có hình ảnh)

Video: Trạm thời tiết nhỏ với Attiny85: 6 bước (có hình ảnh)

Video: Trạm thời tiết nhỏ với Attiny85: 6 bước (có hình ảnh)
Video: RÁP TRẠM SÚNG KHÒ 858D THÔNG MINH VÀ HIỆN ĐẠI (PHẦN 2 : HOÀN THIỆN VÀ HƯỚNG DẪN CÀI ĐẶT) 2024, Tháng bảy
Anonim
Trạm thời tiết nhỏ với Attiny85
Trạm thời tiết nhỏ với Attiny85
Trạm thời tiết nhỏ với Attiny85
Trạm thời tiết nhỏ với Attiny85
Trạm thời tiết nhỏ với Attiny85
Trạm thời tiết nhỏ với Attiny85

Trong một Indigod0g có thể hướng dẫn gần đây đã mô tả một trạm thời tiết nhỏ hoạt động khá tốt, sử dụng hai Arduinos. Có lẽ không phải ai cũng muốn hy sinh 2 Arduinos để có được các chỉ số về độ ẩm và nhiệt độ và tôi nhận xét rằng có thể thực hiện một chức năng tương tự với 2 Attiny85. Tôi đoán nói chuyện rất dễ dàng, vì vậy tốt hơn là tôi nên đặt tiền của mình vào nơi miệng của tôi.

Trên thực tế, nếu tôi kết hợp hai hướng dẫn trước đó, tôi đã viết:

Giao diện LCD 2 dây cho Arduino hoặc Attiny và Nhận và gửi dữ liệu giữa Attiny85 (Arduino IDE 1.06) thì hầu hết công việc đã được thực hiện. Chỉ cần phần mềm thích ứng một chút.

Tôi đã chọn giải pháp màn hình LCD hai dây với thanh ghi ca thay vì LCD I2C vì trên Attiny thanh ghi ca dễ thực hiện hơn bus I2C. Tuy nhiên, nếu bạn muốn đọc cảm biến áp suất BMP180 hoặc BMP085 chẳng hạn, bạn cần I2C cho điều đó, vì vậy bạn cũng có thể sử dụng màn hình LCD I2C. TinyWireM là một thư viện tốt cho I2C trên Attiny (nhưng nó yêu cầu thêm dung lượng).

BOM Máy phát: DHT11 Attiny85 10 k điện trở 433MHz Mô-đun máy phát

Bộ thu Attiny85 điện trở 10k Mô-đun bộ thu 433 MHz

Màn hình hiển thị 74LS164 thanh ghi dịch chuyển 1N4148 diode điện trở 2x1k Biến trở 1x1k một màn hình LCD 2x16

Bước 1: Trạm thời tiết nhỏ với Attiny85: Máy phát

Trạm thời tiết nhỏ với Attiny85: Máy phát
Trạm thời tiết nhỏ với Attiny85: Máy phát
Trạm thời tiết nhỏ với Attiny85: Máy phát
Trạm thời tiết nhỏ với Attiny85: Máy phát
Trạm thời tiết nhỏ với Attiny85: Máy phát
Trạm thời tiết nhỏ với Attiny85: Máy phát
Trạm thời tiết nhỏ với Attiny85: Máy phát
Trạm thời tiết nhỏ với Attiny85: Máy phát

Máy phát là một cấu hình rất cơ bản của Attiny85 với một điện trở kéo lên trên đường đặt lại. Mô-đun máy phát được gắn vào chân kỹ thuật số '0' và chân dữ liệu DHT11 gắn vào chân kỹ thuật số 4. Gắn một dây dài 17,2 cm làm ăng-ten (để có một ăng-ten tốt hơn nhiều, hãy xem bước 5). Phần mềm như sau:

// sẽ hoạt động trên Attiny // RF433 = D0 chân 5

// DHT11 = D4 pin 3 // các thư viện #include // Từ Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // chân nơi kết nối bộ truyền của bạn // biến float h = 0; float t = 0; int truyền_t = 0; int truyền_h = 0; int truyền_dữ_liệu = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. độ ẩm; t = DHT11. nhiệt độ; // Tôi biết, tôi đang sử dụng 3 biến số nguyên ở đây // nơi tôi có thể sử dụng 1 // nhưng đó chỉ là vì vậy dễ dàng hơn để làm theo truyền_hóa = 100 * (int) h; truyền_t = (int) t; truyền_dữ liệu = truyền_h + truyền_t; man.transmit (truyền_dữ liệu); chậm trễ (500); }

Phần mềm sử dụng mã Manchester để gửi dữ liệu. Nó đọc DHT11 và lưu trữ nhiệt độ và độ ẩm trong 2 phao riêng biệt. Vì mã Manchester không gửi float mà là một số nguyên, tôi có một số tùy chọn: 1- chia các float thành hai số nguyên và gửi chúng các số nguyên lại trôi nổi trong máy thu và tôi phải xác định số nguyên nào là số nào, làm cho mã trở nên dài dòng. Với tùy chọn 2, tôi vẫn cần xác định số nguyên nào là độ ẩm và số nguyên nào dành cho nhiệt độ. Tôi không thể đi theo trình tự một mình trong trường hợp một số nguyên bị mất trong quá trình truyền, vì vậy tôi sẽ cần gửi một số nhận dạng được đính kèm với số nguyên. Với tùy chọn 3, tôi chỉ có thể gửi một số nguyên. Rõ ràng là điều này làm cho các kết quả đọc kém chính xác hơn một chút - trong vòng 1 độ - và người ta không thể gửi dưới nhiệt độ 0, nhưng nó chỉ là một mã đơn giản và có nhiều cách để giải quyết vấn đề đó. Bây giờ nó chỉ là về nguyên tắc. Vì vậy, những gì tôi làm là tôi biến phao thành số nguyên và tôi nhân độ ẩm với 100. Sau đó, tôi thêm nhiệt độ vào độ ẩm nhân. số tối đa tôi sẽ nhận được là 9900. Với thực tế là nhiệt độ cũng sẽ không quá 100 độ, số tối đa sẽ là 99, do đó số cao nhất tôi sẽ gửi là 9999 và điều đó dễ dàng tách biệt ở phía bộ thu. phép tính của tôi trong đó tôi sử dụng 3 số nguyên là quá mức cần thiết vì nó có thể dễ dàng được thực hiện với 1 biến. Tôi chỉ muốn làm cho mã dễ theo dõi hơn. Mã hiện được biên dịch thành:

Kích thước phác thảo nhị phân: 2, 836 byte (tối đa 8, 192 byte) để phù hợp với Attiny 45 hoặc 85 LƯU Ý thư viện dht.h tôi sử dụng là thư viện từ Rob Tillaart. Thư viện đó cũng phù hợp với DHT22. Tôi đang sử dụng phiên bản 1.08. Tuy nhiên Attiny85 có thể gặp sự cố khi đọc DHT22 với các phiên bản thư viện thấp hơn. Tôi đã xác nhận rằng 1.08 và 1.14 - mặc dù hoạt động trên Arduino thông thường - nhưng vẫn gặp sự cố khi đọc DHT22 trên Attiny85. Nếu bạn muốn sử dụng DHT22 trên Attiny85, hãy sử dụng phiên bản 1.20 của thư viện này. Tất cả đều liên quan đến thời gian. Phiên bản 1.20 của thư viện có tốc độ đọc nhanh hơn. (Cảm ơn vì trải nghiệm người dùng đó Jeroen)

Bước 2: Trạm thời tiết nhỏ với Attiny85: Bộ thu

Trạm thời tiết nhỏ với Attiny85: Bộ thu
Trạm thời tiết nhỏ với Attiny85: Bộ thu

Một lần nữa Attiny85 được sử dụng trong cấu hình cơ bản với chân Reset được kéo lên cao với điện trở 10 k. Mô-đun Bộ thu được gắn vào chân số 1 (chân 6 trên chip). Màn hình LCD được gắn vào các chân kỹ thuật số 0 và hai. Gắn một dây dài 17,2 cm làm ăng ten. Mã như sau:

#bao gồm

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = chân vật lý 6 void setup () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Humid:"); lcd.print (m / 100); lcd.setCursor (0, 1); lcd.print ("Nhiệt độ"); lcd.print (m% 100); }}

Mã này khá đơn giản: số nguyên được truyền được nhận và lưu trữ trong biến 'm', nó được chia cho 100 để cung cấp độ ẩm và modulo của 100 cho nhiệt độ. Vì vậy, giả sử số nguyên nhận được là 33253325/100 = 333325% 100 = 25 Mã này biên dịch dưới dạng 3380 byte và do đó chỉ có thể được sử dụng với attiny85, không được sử dụng với 45

Bước 3: Trạm thời tiết nhỏ với Attiny85 / 45: Màn hình

Trạm thời tiết nhỏ với Attiny85 / 45: Màn hình
Trạm thời tiết nhỏ với Attiny85 / 45: Màn hình
Trạm thời tiết nhỏ với Attiny85 / 45: Màn hình
Trạm thời tiết nhỏ với Attiny85 / 45: Màn hình

Đối với màn hình hiển thị, tốt nhất là tôi nên tham khảo tài liệu hướng dẫn của tôi trên màn hình hai dây. Tóm lại, màn hình 16x2 phổ biến sử dụng một thanh ghi dịch chuyển để nó có thể hoạt động với hai chân kỹ thuật số. cũng có thể, nhưng sau đó bạn cần triển khai giao thức I2C trên Attiny. Giao thức Tinywire có thể làm được điều đó. Mặc dù một số nguồn nói rằng điều đó mong đợi một đồng hồ 1 Mhz, tôi đã không gặp bất kỳ khó khăn nào (trong một dự án khác) để sử dụng nó trên 8Mhz.

Bước 4: Trạm thời tiết nhỏ với Attiny85 / 45: Khả năng / Kết luận

Trạm thời tiết nhỏ với Attiny85 / 45: Khả năng / Kết luận
Trạm thời tiết nhỏ với Attiny85 / 45: Khả năng / Kết luận
Trạm thời tiết nhỏ với Attiny85 / 45: Khả năng / Kết luận
Trạm thời tiết nhỏ với Attiny85 / 45: Khả năng / Kết luận
Trạm thời tiết nhỏ với Attiny85 / 45: Khả năng / Kết luận
Trạm thời tiết nhỏ với Attiny85 / 45: Khả năng / Kết luận

Như đã nói, tôi thực hiện hướng dẫn này để cho thấy rằng người ta có thể tạo một trạm thời tiết mini với hai attiny85 (thậm chí với một attiny85 + 1 attiny45). Nó chỉ gửi độ ẩm và nhiệt độ bằng cách sử dụng DHT11. Tuy nhiên, Attiny có 5 chân kỹ thuật số để sử dụng, 6 ngay cả với một số thủ thuật. Do đó, có thể gửi dữ liệu từ nhiều cảm biến hơn. Mặc dù vậy, hạn chế khi sử dụng attiny85 làm bộ thu là việc trình bày dữ liệu theo phong cách hào nhoáng. Do bộ nhớ có hạn: Các nội dung như 'Nhiệt độ, Độ ẩm, mức độ ánh sáng, đối tượng tiếp cận' sẽ lấp đầy không gian bộ nhớ quý giá khá nhanh. Tuy nhiên, không có lý do gì để sử dụng hai Arduino chỉ để gửi / nhận nhiệt độ và độ ẩm. để máy phát chuyển sang chế độ ngủ và chỉ cần nó thức dậy để gửi dữ liệu cứ 10 phút một lần và do đó cấp dữ liệu từ một ô nút. các chỉ số độ ẩm của đất, hoặc thêm một máy đo gió, hoặc máy đo mưa

Bước 5: Trạm thời tiết nhỏ: Ăng-ten

Trạm thời tiết nhỏ: Antenna
Trạm thời tiết nhỏ: Antenna

Ăng-ten là một phần quan trọng của bất kỳ thiết lập 433Mhz nào. Tôi đã thử nghiệm với ăng-ten 'que' tiêu chuẩn 17,2 cm và có một đoạn ngắn với ăng-ten cuộn, Điều dường như hoạt động tốt nhất là một ăng-ten được tải bằng cuộn dây rất dễ chế tạo. Thiết kế là của Ben Schueler và dường như đã được xuất bản trên tạp chí 'Elektor'. Dễ dàng theo dõi một tệp PDF có mô tả 'Ăng-ten 433 MHz được làm mát bằng không khí'. (Liên kết đã biến mất, hãy kiểm tra tại đây)

Bước 6: Thêm BMP180

Thêm BMP180
Thêm BMP180

Bạn muốn thêm cảm biến áp suất khí quyển như BMP180? kiểm tra hướng dẫn khác của tôi về điều đó.

Đề xuất: