เป็นเวลานานที่ฉันต้องการที่จะสร้างสถานีอากาศขนาดเล็กเหนื่อยกับการมองออกไปนอกหน้าต่างเพื่อดูเครื่องวัดอุณหภูมิด้านหลังกระจก อุปกรณ์นี้จะแทนที่ไฮโกรมิเตอร์บารอมิเตอร์และเครื่องวัดอุณหภูมิและยังแสดงเวลาปัจจุบัน ในโพสต์นี้ฉันจะบอกวิธีการประกอบสถานีอากาศขนาดเล็กบน Arduino อย่างรวดเร็วและง่ายดาย พื้นฐานจะเป็นคณะกรรมการ Arduino นาโนสามารถใช้บอร์ดอื่น ๆ - Arduino Uno, Arduino Pro mini) เราจะได้รับข้อมูลความดันบรรยากาศและอุณหภูมิจากเซ็นเซอร์ BMP180 และความชื้นและอุณหภูมิภายนอกจากเซ็นเซอร์ DHT11 นาฬิกาเรียลไทม์ DS1302 จะแสดงเวลาปัจจุบัน ข้อมูลทั้งหมดจะแสดงบนจอแสดงผล LCD1602 สองบรรทัด
DHT11 ส่งข้อมูลผ่านสายเดียวไปยังอาร์ดิโน มันขับเคลื่อนด้วยแรงดันไฟฟ้า 5 V มันวัดความชื้นในช่วง 20 ถึง 80% วัดอุณหภูมิในช่วง 0 ถึง 50เกี่ยวกับเอส
เซ็นเซอร์ BMP180 วัดความดันบรรยากาศในช่วง 300-1100 hPa อุณหภูมิในช่วง -40 +85เกี่ยวกับC. แรงดันไฟฟ้าคือ 3.3 V. เชื่อมต่อผ่านโปรโตคอลสื่อสาร I2C
นาฬิกาเรียลไทม์ DS1302 ใช้พลังงาน 5 V และเชื่อมต่อผ่านโปรโตคอลสื่อสาร I2C เมื่อติดตั้งในช่องเสียบที่เหมาะสมแบตเตอรี่ CR2032 จะสนับสนุนนาฬิกาเมื่อปิดไฟหลัก
จอแสดงผล LCD1602 ใช้พลังงานจากแรงดันไฟฟ้า 5 โวลต์และเชื่อมต่อผ่านโปรโตคอลสื่อสาร I2C
นี้ สินค้าทำที่บ้าน ทำขึ้นบนพื้นฐานของบอร์ดและเซ็นเซอร์สำเร็จรูปดังนั้นจึงสามารถทำซ้ำกับคนรักมือใหม่ที่จะทำงานกับหัวแร้ง ในเวลาเดียวกันคุณสามารถรับพื้นฐานของการเขียนโปรแกรม Arduino ฉันตั้งโปรแกรมสถานีตรวจอากาศนี้ในโปรแกรมการเขียนโปรแกรมภาพ FLPROG ใน 15 นาที ไม่จำเป็นต้องร่างเองเป็นเวลาหลายชั่วโมงโปรแกรมนี้ช่วยผู้เริ่มต้น (และไม่เพียง แต่) เรียนรู้พื้นฐานของอุปกรณ์การเขียนโปรแกรมอย่างรวดเร็วตามแพลตฟอร์ม Arduino
ใครบ้างที่ขี้เกียจเกินกว่าที่คนจรจัดจะใช้โปรแกรม - ร่าง (เพียง แต่จำเป็นต้องตั้งเวลาปัจจุบันของนาฬิกา):
#include
#include "DHT_NEW.h"
#include
#include
#include
BMP085 _bmp085 = BMP085 ();
long _bmp085P = 0;
ยาว _bmp085T = 0;
ยาว _bmp085A = 0;
LiquidCrystal_I2C _lcd1 (0x3f, 16, 2);
int _dispTempLength1 = 0;
บูลีน _isNeedClearDisp1;
DHT _dht1;
iarduino_RTC _RTC1 (RTC_DS1302, 7, 5, 6);
ยาวไม่ลงนาม _dht1LRT = 0UL;
ยาวไม่ลงนาม _dht1Tti = 0UL;
int _disp1oldLength = 0;
ยาวไม่ได้ลงนาม _bmp0852Tti = 0UL;
สตริง _RTC1_GetTime2_StrOut;
int _disp2oldLength = 0;
การตั้งค่าเป็นโมฆะ ()
{
Wire.begin ();
ล่าช้า (10);
_bmp085.init (MODE_ULTRA_HIGHRES, 116, จริง);
_RTC1.begin ();
_RTC1.period (1);
_lcd1.init ();
_lcd1.backlight ();
_dht1.setup (4);
_dht1LRT = millis ();
_dht1Tti = millis ();
}
เป็นโมฆะห่วง ()
{if (_isNeedClearDisp1) {_lcd1.clear (); _isNeedClearDisp1 = 0;}
if (_isTimer (_bmp0852Tti, 1,000)) {
_bmp0852Tti = millis ();
_bmp085.getAltitude (& _ bmp085A);
_bmp085.getPressure (& _ bmp085P);
_bmp085.getTemperature (& _ bmp085T);
}
// ค่าธรรมเนียม: 1
ถ้า (1) {
_dispTempLength1 = (((((สตริง ("T:")) + + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) (+ สตริง ("*"))) + ((สตริง ("*"))) + (( "P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (สตริง ("*"))) + ((สตริง ("")) + (_floatToStringWitRaz (_dht1) .humidity, 0))) + (สตริง ("%"))))) ความยาว ();
if (_disp1oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 0);
_lcd1.print ((((((สตริง ("T:"))) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (สตริง ("*"))) + ((สตริง ("P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (สตริง ("*")))) + ((สตริง ("")) + (_floatToStringWitRaz () _dht1.humidity, 0))) + (สตริง ("%")))));
} อื่น {
if (_disp1oldLength> 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
if (_isTimer (_dht1Tti, 2000)) {
if (_isTimer (_dht1LRT, (_dht1.getMinimumSamplingPeriod ()))) {
_dht1.readSensor ();
_dht1LRT = millis ();
_dht1Tti = millis ();
}
}
ถ้า (1) {
_dispTempLength1 = ((((((สตริง ("t:")) + ((_floatToStringWitRaz (_dht1.temperature, 0)) + (String ("*"))) + (_RTC1_GetTime2_StrOut))) );
if (_disp2oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 1);
_lcd1.print ((((((สตริง ("t:")))) + ((_floatToStringWitRaz (_dht1.temperature, 0)) + (String ("*")))) + (_RTC1_GetTime2_StrOut))))
} อื่น {
if (_disp2oldLength> 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
_RTC1_GetTime2_StrOut = _RTC1.gettime ("H: i: sD");
}
String _floatToStringWitRaz (ค่าทศนิยม, int raz)
{
ส่งคืนสตริง (ค่า raz);
}
บูล _isTimer (startTime ยาวที่ไม่ได้ลงชื่อ, ระยะเวลาที่ไม่ได้ลงชื่อ)
{
ไม่ได้ลงนามยาว currentTime;
currentTime = millis ();
ถ้า (currentTime> = startTime) {return (currentTime> = (startTime + รอบระยะเวลา));} else {return (currentTime> = (4294967295-startTime + รอบระยะเวลา));}
}
คุณสามารถใช้อุปกรณ์ดังกล่าวได้ทุกที่หรือที่บ้านในลักษณะหรือสถานที่ รถ. มันเป็นไปได้ที่จะจ่ายไฟให้กับวงจรจากแบตเตอรี่โดยใช้บอร์ดชาร์จในท้ายที่สุดจะเป็นแบบพกพา รูปแบบ สถานีตรวจอากาศ
ข้อมูลทั้งหมดสามารถรับได้โดยดูวิดีโอ:
รายการวัสดุและเครื่องมือ
Arduino Nano Board
จอแสดงผล LCD1602 สองบรรทัด;
- นาฬิกาเวลาจริง DS1302;
- ความดันบรรยากาศและเซ็นเซอร์อุณหภูมิ BMP180;
- เซ็นเซอร์อุณหภูมิและความชื้น DHT11;
บล็อกการชาร์จจากโทรศัพท์;
- ที่อยู่อาศัยที่เหมาะสมใด ๆ
-pintset;
กรรไกร;
หัวแร้ง;
-kembrik;
ทดสอบ;
- เชื่อมต่อสายไฟ
สี่สายสำหรับเซ็นเซอร์ระยะไกล
ขั้นตอนแรก การสร้างอาคารสำหรับสถานีอากาศ
ฉันหยิบกล่องพลาสติกขึ้นมาจากร้าน Fix Price (รวม 17p) Pre cut window สำหรับแสดงที่ฝา จากนั้นเขาก็ตัดพาร์ติชั่นในกล่องบางส่วนทำรูสำหรับขั้วต่อ USB ของบอร์ด Arduino เปิดสำหรับเซ็นเซอร์ BMP180 เซ็นเซอร์ BMP180 จะอยู่ด้านนอกเคสเพื่อป้องกันความร้อนมากเกินไปจาก อิเล็กทรอนิกส์ รสชาติด้านใน หลังจากที่ฉันทาสีร่างผลิตภัณฑ์โฮมเมดจากด้านในเพราะพลาสติกใส กล่องปิดด้วยสลักและองค์ประกอบทั้งหมดเข้ากันได้ดี
ขั้นตอนที่สอง แผนภาพการชุมนุมของอุปกรณ์
รูปแบบภาพถ่าย
ถัดไปคุณจะต้องเชื่อมต่อบอร์ดและเซ็นเซอร์ทั้งหมดของสถานีตรวจอากาศตามแบบแผน เราทำสิ่งนี้โดยใช้การติดตั้งสายไฟด้วยตัวเชื่อมต่อที่เหมาะสม ฉันไม่ได้ทำการเชื่อมต่อประสานดังนั้นในอนาคตเมื่อโมดูลล้มเหลว (หรือด้วยเหตุผลอื่น ๆ ) คุณสามารถแทนที่ได้อย่างง่ายดาย ที่ขั้วต่อสกรูสายเซ็นเซอร์ DHT11 ที่ไปยังถนนจะเชื่อมต่ออยู่ สามารถจ่ายกำลังไฟจากขั้วต่อ USB ของบอร์ด Arduino ไปยังคอมพิวเตอร์หรือส่งแรงดันไฟฟ้า 7-12V ไปยังขา VIN และ GND
ก่อนอื่นฉันประกอบวงจรนอกตู้และตั้งโปรแกรมและดีบั๊กในโปรแกรม FLPROG
Photo block diagram ในโปรแกรม FLPROG
เมื่อฉันตั้งโปรแกรมและเปิดวงจรสถานีอากาศมันทำงานได้ ตอนนี้มันเป็นไปได้ที่จะมีข้อมูลสภาพอากาศลงน้ำและในห้อง โดยทั่วไปสถานีอากาศในบ้านที่น่าสนใจซึ่งมีฟังก์ชั่นต่าง ๆ มากมายเปิดออก
ภาพถ่ายเสร็จสมบูรณ์
การออกแบบที่ทำในบ้านที่ดีถูกรวมตัวกันในช่วงสุดสัปดาห์ มันเป็นเรื่องที่น่าตื่นเต้นที่จะสร้างอุปกรณ์ที่น่าสนใจและมีประโยชน์ด้วยตัวคุณเอง ในการสร้างอุปกรณ์ด้วยตัวเองฉันคิดว่าแม้แต่มือใหม่ก็สามารถทำได้ไม่ต้องใช้เวลาและเงินมาก คุณสามารถนำไปใช้ที่ใดก็ได้ที่คุณต้องการในบ้านในกระท่อมในชนบท สำหรับงานทั้งหมดสองคืนสุดสัปดาห์ไปฉันก็เอาอุปกรณ์อิเล็กทรอนิกส์ทั้งหมดไปที่ Aliexpress ส่วนที่เหลือของวัสดุที่ฉันพบในชอปเปอร์ ขึ้นอยู่กับแพลตฟอร์ม Arduino คุณสามารถรวบรวมอุปกรณ์ที่มีประโยชน์มากมาย
ขอบคุณสำหรับความสนใจของคุณฉันขอให้คุณประสบความสำเร็จและโชคดีทั้งในชีวิตของคุณและในการทำงานของคุณ!