คำแนะนำในการก่อสร้างและปรับปรุง

สถานีตรวจอากาศทำเอง

มันเป็นช่วงเย็น ไม่มีอะไรทำหลังจากปีใหม่ ตามปกติในช่วงวันหยุดปีใหม่ฤดูหนาวฉันต้องการใช้สมองและมือกับสิ่งที่มีประโยชน์และสร้างสรรค์ ในช่วงวันหยุดปีใหม่เหล่านี้ ฉันตัดสินใจสร้างสถานีตรวจอากาศด้วยมือของตัวเอง ฉันเริ่มเตรียมตัวล่วงหน้า ซื้อและประกอบส่วนประกอบทั้งหมดก่อนปีใหม่ และเขียนโปรแกรมหลักในช่วงวันหยุด

(ใต้คัทมีรูปเยอะมาก!)

ก่อนอื่น ฉันจะอธิบายส่วนประกอบต่างๆ ฉันจะไม่ให้ลิงก์ เนื่องจากบน eBay (ใน บัญชีส่วนตัว) สินค้าเข้าไปในที่เก็บถาวร ฉันซื้อส่วนประกอบหลายอย่างอย่างสบายๆ บนอีเบย์ ฉันลองประมูลเป็นครั้งแรก ก่อนที่ฉันจะซื้อ "ซื้อเลย" เสมอ ฉันจะพูดอะไรได้บ้างถ้าคุณไม่รีบไปซื้อของ คุณสามารถซื้อส่วนประกอบบางอย่างได้ถูกกว่า (บางครั้งความแตกต่างก็เป็นสองเท่า)

เซ็นเซอร์วัดแรงดัน VMR085
นี่คือเซ็นเซอร์หลัก เมื่อฉันเห็นมันบน eBay ฉันรู้ว่าฉันต้องการสร้างสถานีตรวจอากาศที่บ้าน
เซ็นเซอร์มาในซองธรรมดาซึ่งมีแผ่นกันกระแทกอยู่ข้างใน

ภายในซองจดหมายมีนามบัตรของผู้ขายและเซ็นเซอร์ บรรจุในถุงป้องกันไฟฟ้าสถิตและห่อด้วยพลาสติกกันกระแทกอีกชั้น

ถุงป้องกันไฟฟ้าสถิตถูกปิดผนึกเพื่อไม่ให้ความชื้นระหว่างการบินคุกคามเซ็นเซอร์

เรานำเซ็นเซอร์ออกมา ด้านหนึ่งมีหน้าสัมผัสแบบบัดกรีซึ่งสอดเข้าไปในโฟมเพื่อป้องกันไม่ให้โค้งงอ อีกด้านหนึ่งมีเซ็นเซอร์และเครื่องหมายหน้าสัมผัส




ทุกอย่างจะเรียบร้อยดี แต่มีการใช้เครื่องหมายหน้าสัมผัสในภาพสะท้อนในกระจก
เซ็นเซอร์เชื่อมต่อผ่านบัส I2C และใช้พลังงาน 3.3 V นั่นคือสำหรับการทำงานปกติคุณต้องใช้สายไฟ 4 เส้น (+, -, SDA, SCL)
คุณสามารถสอบปากคำเซ็นเซอร์ได้ 2 วิธี: ผ่านห้องสมุด หรือใช้ฟังก์ชันโดยตรงในภาพร่าง
โปรแกรมตัวอย่าง:

#รวม

#define BMP085_ADDRESS 0x77 // ที่อยู่ I2C ของ BMP085

Const ถ่าน OSS ที่ไม่ได้ลงนาม = 0; // การตั้งค่าการสุ่มตัวอย่างมากเกินไป

// ค่าการสอบเทียบ
อินท์ ac1;
อินท์ ac2;
อินท์ ac3;
int ac4 ที่ไม่ได้ลงนาม;
int ac5 ที่ไม่ได้ลงนาม;
int ac6 ที่ไม่ได้ลงนาม;
อินท์ b1;
อินท์บี2;
int เมกะไบต์;
อินท์ เอ็มซี;
อินท์ เอ็มดี;

อุณหภูมิสั้น
แรงกดดันที่ยาวนาน

การตั้งค่าเป็นโมฆะ()
{
อนุกรมเริ่มต้น(9600);
Wire.begin();
bmp085การสอบเทียบ();
}

เป็นโมฆะวน()
{
อุณหภูมิ = bmp085GetTemperature(bmp085ReadUT());
ความดัน = bmp085GetPressure(bmp085ReadUP());
Serial.print("อุณหภูมิ: „);
Serial.พิมพ์ (อุณหภูมิ/10.0,DEC);
Serial.println("C");
Serial.print("ความดัน: „);
Serial.พิมพ์ (ความดัน/133.322,DEC);
Serial.println("มม.ปรอท");
อนุกรม.println();
ล่าช้า (1,000);
}

โมฆะ bmp085 การสอบเทียบ ()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
MB = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}

สั้น bmp085GetTemperature (ไม่ได้ลงนาม int ut)
{
ยาวx1,x2;
x1 = (((ยาว)ut - (ยาว)ac6)*(ยาว)ac5) >> 15;
x2 = ((ยาว)ไมโครกรัม<< 11)/(x1 + md);
b5 = x1 + x2;

กลับ ((b5 + 8)>>4);
}

Long bmp085GetPressure (ไม่ได้ลงชื่อนานขึ้น)
{
ยาว x1, x2, x3, b3, b6, p;
ยาวที่ไม่ได้ลงนาม b4, b7;
b6 = b5 - 4000;
// คำนวณ B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((ยาว)ac1)*4 + x3)<>2;
// คำนวณ B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (ยาวไม่ได้ลงนาม)(x3 + 32768))>>15;
b7 = ((ยาวไม่ได้ลงนาม)(ขึ้น - b3) * (50000>>OSS));
ถ้า (b7< 0x80000000)
พี = (ข7<<1)/b4;
อื่น
พี = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * พี)>>16;
พี += (x1 + x2 + 3791)>>4;
กลับพี;
}

// อ่าน 1 ไบต์จาก BMP085 ที่ "ที่อยู่"
ถ่าน bmp085Read (ที่อยู่ถ่านที่ไม่ได้ลงนาม)
{
ข้อมูลถ่านที่ไม่ได้ลงนาม

Wire.write (ที่อยู่);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
ในขณะที่(!Wire.available())
;
กลับ Wire.read();
}

Int bmp085ReadInt (ที่อยู่ถ่านที่ไม่ได้ลงนาม)
{
ถ่าน msb ที่ไม่ได้ลงนาม, lsb;
Wire.beginTransmission (BMP085_ADDRESS);
Wire.write (ที่อยู่);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
ในขณะที่(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();
กลับ (int) msb<<8 | lsb;
}

// อ่านค่าอุณหภูมิที่ไม่มีการชดเชย
int bmp085ReadUT() ที่ไม่ได้ลงนาม
{
int ut ที่ไม่ได้ลงนาม;
// เขียน 0x2E ลงในรีจิสเตอร์ 0xF4
// นี่ขอการอ่านอุณหภูมิ
Wire.beginTransmission (BMP085_ADDRESS);
ลวด.write(0xF4);
ลวดเขียน(0x2E);
Wire.endTransmission();
// รออย่างน้อย 4.5ms
ล่าช้า(5);
// อ่านสองไบต์จากรีจิสเตอร์ 0xF6 และ 0xF7
ut = bmp085ReadInt(0xF6);
กลับ;
}

// อ่านค่าความดันที่ไม่มีการชดเชย
bmp085ReadUP แบบยาวที่ไม่ได้ลงนาม ()
{
ถ่าน msb, lsb, xlsb ที่ไม่ได้ลงนาม;
ไม่ได้ลงนามนานขึ้น = 0;
// เขียน 0x34+(OSS<<6) into register 0xF4
// ขอการอ่านค่าความดันด้วยการตั้งค่าการสุ่มตัวอย่างเกิน
Wire.beginTransmission (BMP085_ADDRESS);
ลวด.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
// รอการแปลง เวลาหน่วงขึ้นอยู่กับ OSS
ความล่าช้า(2 + (3<// อ่านรีจิสเตอร์ 0xF6 (MSB), 0xF7 (LSB) และ 0xF8 (XLSB)
Wire.beginTransmission (BMP085_ADDRESS);
ลวด.write(0xF6);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 3);
// รอให้ข้อมูลพร้อมใช้งาน
ในขณะที่(Wire.available()< 3)
;
msb = Wire.read();
lsb = Wire.read();
xlsb = Wire.read();
up = (((ยาวไม่ได้ลงชื่อ) msb<< 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
กลับขึ้นมา;
}


นอกจากนี้ เซ็นเซอร์ยังมีเซ็นเซอร์ความร้อนของตัวเองสำหรับการชดเชยแรงดันและเครื่องวัดระยะสูง

อาร์ดูโน่ นาโน v3.0
นี่คือหัวใจของสถานีตรวจอากาศทั้งหมด พูดง่ายๆ ก็คือ คอนโทรลเลอร์มีขนาดเล็ก
ฉันซื้อ
ฉันจะไม่พูดรายละเอียดเกี่ยวกับคอนโทรลเลอร์เนื่องจากสิ่งนี้ได้ทำไปแล้วต่อหน้าฉัน:


แพ็คเกจ lightake ได้รับการจัดเตรียมไว้ล่วงหน้า คอนโทรลเลอร์มาในแพ็คเกจพร้อมสาย USB และ Arduino ในถุงป้องกันไฟฟ้าสถิตที่ปิดสนิท

เพื่อประเมินขนาด ฉันวางเหรียญ 1 รูเบิลไว้ข้าง Arduino

บอร์ดควบคุมปิดตัวลง



สาย USB อย่างดี มีวงแหวนเฟอร์ไรต์ Arduino ใช้พลังงานจากสาย USB สามารถดาวน์โหลดสภาพแวดล้อมการพัฒนาได้ (หน้าดาวน์โหลด) ภาษาก็เหมือนกับภาษา "C" ไม่มีปัญหาในการใช้งานเพราะฉันเขียนโปรแกรมในที่ทำงานเยอะมาก

หน้าจอแอลซีดี
ที่ทำงาน ฉันพบหน้าจอ LCD 1602 ที่ใช้ร่วมกันได้อยู่ในถังขยะ ฉันต้องแก้ไขการเชื่อมต่อ เนื่องจากฉันไม่พบเอกสารข้อมูลสำหรับการเชื่อมต่อนั้น เป็นผลให้จอ LCD เริ่มทำงาน

แต่หลังจากใช้งานไปไม่นาน ฉันสังเกตเห็นว่าหน้าจอนี้ไม่เพียงพอสำหรับฉัน และไม่สามารถแสดงข้อมูลเพิ่มเติมได้ เนื่องจากหน้าจอนี้มีเพียง 2 บรรทัด บรรทัดละ 16 ตัวอักษร ในตอนแรกดูเหมือนว่าพารามิเตอร์เหล่านี้เพียงพอแล้ว แต่เมื่อคุณเริ่มการเขียนโปรแกรม คุณจะพบว่าค่าสูงสุดที่คุณสามารถบีบได้คือ 3-4 พารามิเตอร์ และถ้าคุณสร้างเมนู (ฉันกำลังคิดที่จะทำเมนูบนหน้าจอนี้) ก็เหลือพารามิเตอร์ว่างเพียง 1-2 ตัวเท่านั้น
เป็นผลให้ฉันเริ่มมองหาหน้าจออื่น ตอนแรกฉันดูหน้าจอกราฟิกของ Nokia 3310 อย่างใกล้ชิดและยังเข้าร่วมการประมูลใน eBay เพื่อซื้อมันด้วยซ้ำ แต่มันก็ไม่ได้ผล (ซึ่งฉันดีใจมาก) ดังนั้นฉันจึงต้องละทิ้งหน้าจอนี้ ตอนนี้ฉันเข้าใจแล้วว่ามันจะเล็กเกินไปสำหรับจุดประสงค์ของฉันเนื่องจากมีบางอย่างที่จะเปรียบเทียบ
ในขณะที่สุ่มดูโล่บน Arduino ฉันบังเอิญเจอหน้าจอกราฟิก 12864 บนคอนโทรลเลอร์ ST7920 หน้าจอนี้มีขนาดที่เหมาะสมและมีความละเอียดเหมาะสมกับความต้องการของฉัน (128x64) นั่นคือคุณสามารถวาง 6-7 บรรทัดจาก 20 ตัวอักษรในแบบอักษรที่อ่านได้ตามปกติ เนื่องจากหน้าจอเป็นแบบกราฟิก นอกเหนือจากข้อความแล้ว จึงสามารถวางกราฟิกเป็นแบบอักษรต่างๆ ได้ กล่าวโดยสรุป นี่คือสิ่งที่ฉันต้องการจริงๆ ทุกอย่างปรากฏบนหน้าจอนี้ ดังนั้นฉันจึงอดใจไม่ไหวและสั่งมัน
พัสดุมาถึงอย่างรวดเร็วและได้รับการบรรจุตามมาตรฐาน: ซองกันกระแทก ด้านในมีแผ่นกันกระแทกอีกชั้นและมีตะแกรงในถุงป้องกันไฟฟ้าสถิต:






เพื่อประมาณขนาด ฉันวางเหรียญ 1 รูเบิลไว้ข้างจอ LCD




หากต้องการเชื่อมต่อหน้าจอกับ Arduino อย่างรวดเร็ว ฉันจึงบัดกรีสายหน้าสัมผัสเข้ากับพิน LCD สามารถเชื่อมต่อ LCD ผ่านทางบัสอนุกรมหรือบัสขนานได้ ฉันเลือกตัวเลือกแรกเนื่องจากมีผู้ติดต่อ Arduino ฟรีอยู่แล้วไม่กี่ราย
การเชื่อมต่อ (นำมาจากเว็บ):

- ขา 1 (GND) ต่อเข้ากับบัสทั่วไป
- พิน 2 (VCC) เชื่อมต่อกับบัสจ่ายไฟ +5V และการสิ้นเปลืองกระแสไฟค่อนข้างน้อย และจอแสดงผลสามารถจ่ายไฟจากโคลง Arduino ในตัว
- พิน 4, 5 และ 6 เชื่อมต่อกับเอาต์พุตดิจิตอล Arduino สร้างอินเทอร์เฟซแบบอนุกรม SPI:
พิน 4 – (RS) – สอดคล้องกับเส้น CS (เช่น 7)
พิน 5 – (RW) – สอดคล้องกับเส้น MOSI (เช่น 8)
พิน 6 – (E) – สอดคล้องกับเส้น SCK (ตัวอย่าง 3)
หมายเลขติดต่อ Arduino อาจเป็นอะไรก็ได้สิ่งสำคัญคืออย่าลืมระบุให้ถูกต้องในข้อความโปรแกรมเมื่อเริ่มต้นการแสดงผล
- ขา 15 (PSB) ต่อเข้ากับบัสทั่วไป
- หน้าสัมผัส 19 (A) และ 20 (K) เป็นแหล่งจ่ายไฟแบ็คไลท์ (+5V และ GND ตามลำดับ) หากต้องการปรับความสว่างของไฟแบ็คไลท์ คุณสามารถใช้ตัวต้านทานปรับค่าได้ 10 kOhm ที่เชื่อมต่อระหว่างพาวเวอร์บัสและ GND แรงดันไฟฟ้าจากเครื่องยนต์ถูกจ่ายไปที่พิน 19 ของจอแสดงผล
ตามคำแนะนำเหล่านี้ ฉันเชื่อมต่อทุกอย่างแล้ว ยกเว้นไฟแบ็คไลท์ ฉันใช้ Arduino PWM เพื่อจ่ายไฟแบ็คไลท์
ในการเชื่อมต่อ LCD กับ Arduino โดยทางโปรแกรมจะใช้ไลบรารี u8glib คุณสามารถดาวน์โหลดได้ หากมีปัญหาในการดาวน์โหลด ฉันสามารถอัปโหลดไลบรารี่ไปที่ narod.ru ได้
ไลบรารี่นั้นไม่ซับซ้อนและช่วยให้คุณสามารถแสดงข้อความในแบบอักษรต่าง ๆ วาดเส้น วาดรูปทรงเรขาคณิตง่ายๆ (สี่เหลี่ยม วงกลม) และแสดงรูปภาพของคุณเองที่เตรียมไว้ในลักษณะพิเศษ โดยหลักการแล้ว เครื่องมือนี้เพียงพอสำหรับงานส่วนใหญ่
นี่คือผลลัพธ์ของโปรแกรมง่ายๆ:

ตัวโปรแกรมเอง:

#รวม "U8glib.h"

U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE); // SPI E = 3, RW = 9, RS = 8

// รูทีนย่อยสำหรับกำหนดหน่วยความจำว่าง
int freeRam() (
ภายนอก int __heap_start, *__brkval;
อินท์วี;
กลับ (int) &v - (__brkval == 0? (int) &__heap_start: (int) __brkval);
}

การตั้งค่าเป็นโมฆะ(เป็นโมฆะ) (
u8g.setFont(u8g_font_6x10); // แบบอักษร
u8g.setRot180(); //พลิกหน้าจอ
อะนาล็อกเขียน(6, 115); // ตั้งค่าความสว่างหน้าจอ (ขั้วบวกแบ็คไลท์ที่ 6 พิน)
}

โมฆะวน(เป็นโมฆะ) (
u8g.หน้าแรก();
ทำ (

u8g.setPrintPos(1, 12); // ตำแหน่ง
u8g.print("สวัสดีครับ!!!"); // ข้อความที่ส่งออก
u8g.drawBox(0,22,128,9); // ทาสีสี่เหลี่ยมผืนผ้าเป็นสีขาว
u8g.setColorIndex(0); //หมึกขาวพื้นหลังสีดำ
u8g.setPrintPos(1, 30); // ตำแหน่ง
u8g.print("คำ..."); // ข้อความที่ส่งออก

U8g.setColorIndex(1); //หมึกขาวพื้นหลังสีดำ
u8g.setPrintPos(1, 50); // ตำแหน่ง
u8g.print("หลังจากเริ่ม ="); // ข้อความที่ส่งออก
u8g.setPrintPos(85, 50); // ตำแหน่ง
u8g.print(มิลลิวินาที() / 1,000); // ส่งออกจำนวนวินาทีหลังจากเริ่มต้น
u8g.setPrintPos(1, 64); // ตำแหน่ง
u8g.print(ฟรีแรม()); // ส่งออกจำนวนหน่วยความจำที่ถูกครอบครอง
) ในขณะที่(u8g.nextPage());

ความล่าช้า(200);
}

นาฬิกาเรียลไทม์ DS1307
องค์ประกอบอื่นสำหรับสถานีตรวจอากาศของฉัน เกราะป้องกันนี้ใช้นาฬิกาแบบเรียลไทม์ ฉันสั่งพวกมันบนอีเบย์ ผู้ขายส่งผ้าพันคอนาฬิกามาในกล่องขนาดใหญ่ที่ไม่สมจริง


ภายในกล่องมีแผ่นโฆษณา A4 สองแผ่น และผ้าเช็ดหน้านาฬิกาห่อด้วยกระดาษแก้ว


ฉันต้องการทราบว่าค่าธรรมเนียมไม่เกิน 2 รูเบิล เหรียญและกล่องขนาด 13x15x5 ซม.
กระดานถูกบรรจุในถุงป้องกันไฟฟ้าสถิต

ผ้าคลุมไหล่อย่างใกล้ชิด



ฉันต้องคนจรจัดกับโมดูลนี้ ประการแรก มีปัญหาในการเชื่อมต่อ และประการที่สอง ไม่มีควอตซ์บนกระดานนี้ ถ้าฉันรู้ว่าฉันจะใช้เวลามากกับโมดูล ฉันคงจะประกอบมันขึ้นมาเอง เนื่องจากอินเทอร์เน็ตเต็มไปด้วยไดอะแกรม วงจรที่ง่ายที่สุดประกอบด้วยส่วนประกอบ 4-5 ชิ้น
เกี่ยวกับการเชื่อมต่อ ฉันพบห้องสมุดที่บอกว่าอินเทอร์เฟซ I2C สามารถเชื่อมต่อได้ไม่ใช่กับอินพุตอะนาล็อก Arduino ปกติ (A4 และ A5) แต่กับอินพุตแยกส่วนใด ๆ ฉันทำตามที่เขียนไว้ ในตอนแรกไม่มีอะไรทำงาน แต่หลังจากเต้นรำกับแทมบูรีนมาเป็นเวลานาน นาฬิกาก็เริ่มทำงาน ฉันคิดว่าแค่นั้นปัญหาก็จบลงแล้ว แต่หลังจากที่ฉันพยายามเชื่อมต่อโมดูลเดียวกันกับ Arduino อื่น การเต้นรำกับแทมบูรีนก็ดำเนินต่อไป ฉันใช้เวลาส่วนใหญ่มองหาวิธีแก้ไขปัญหานี้ และเกือบทุกที่พบว่ามีการเชื่อมต่อที่ไม่ถูกต้องหรือไม่มีตัวต้านทานแบบดึงขึ้นบนหน้าสัมผัส SCL และ SDA ฉันอยากจะเข้าไปในบอร์ดด้วยหัวแร้งแล้ว แต่ในฟอรัมหนึ่งฉันบังเอิญเจอรหัสที่มีการกล่าวกันว่าเชื่อมต่อ SCL และ SDA กับพอร์ต I2C มาตรฐานบน Arduino หลังจากการเชื่อมต่อแบบมาตรฐาน ทุกอย่างทำงานได้ทันที
ตอนนี้เกี่ยวกับควอตซ์ ฉันไม่รู้ว่าคนจีนใส่ควอตซ์แบบไหน แต่นาฬิกาที่มีควอตซ์แบบนั้นวิ่งหายไป 10-11 วินาทีต่อวัน ข้อผิดพลาดนี้คือ 5 นาทีต่อเดือน และ 1 ชั่วโมงต่อปี ไม่จำเป็นต้องมีนาฬิกาแบบนี้ ฉันต้องออนไลน์อีกครั้งและค้นหาวิธีแก้ไขข้อบกพร่องนี้ วิธีแก้ปัญหาแรกที่เกิดขึ้นบอกว่าคุณต้องกราวด์ควอตซ์ ฉันทำไปแล้ว - ผลลัพธ์คือศูนย์ ฉันยังพบบางที่ที่ฉันต้องค้นหาเมนบอร์ดเก่าและถอดนาฬิกาควอทซ์ออกจากที่นั่น ฉันทำไปแล้ว - มันได้ผล ตอนนี้นาฬิกาเดินเร็วขึ้นไม่ใช่ 10-11 วินาที แต่ 1.5 วินาทีต่อวัน สมมติว่ามันดีขึ้น แต่ก็ยังห่างไกลจากอุดมคติ เนื่องจากฉันไม่รู้สึกอยากเล่นซอกับหัวแร้งอีกต่อไปจึงตัดสินใจปรับนาฬิกาโดยทางโปรแกรมนั่นคือปรับนาฬิกาให้เป็นค่าที่ต้องการวันละครั้ง หลังจากผ่านไป 10 วัน นาฬิกาก็เดินออกไปไม่ถึงหนึ่งวินาที วิธีนี้ดี แต่เมื่ออุปกรณ์ซิงโครไนซ์ Arduino เชื่อมต่อกับพลังงานเท่านั้น ไม่เช่นนั้นนาฬิกาจะทำงานโดยใช้พลังงานจากแบตเตอรี่และยังคงทำงานต่อไป
โปรแกรมทดสอบขนาดเล็ก:

#รวม"Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // SDA A4, SCL A5

ไบต์ decToBcd (ไบต์ val)
{
กลับ ((ค่า/10*16) + (ค่า%10));
}

ไบต์ bcdToDec (ไบต์ val)
{
กลับ ((ค่า/16*10) + (ค่า%16));
}

เป็นโมฆะ setDateDs1307 (ไบต์วินาที // 0-59
ไบต์นาที // 0-59
ไบต์ชั่วโมง) // 0-99
{

ลวด.write(0);
Wire.write(decToBcd(วินาที));
Wire.write(decToBcd(นาที));
Wire.write(decToBcd(ชั่วโมง));
Wire.endTransmission();
}

เป็นโมฆะ getDateDs1307 (ไบต์ * วินาที
ไบต์*นาที
ไบต์ *ชั่วโมง)
{

Wire.beginTransmission (DS1307_I2C_ADDRESS);
ลวด.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 3);

*วินาที = bcdToDec(Wire.read());
*นาที = bcdToDec(Wire.read());
*ชั่วโมง = bcdToDec(Wire.read());
}

การตั้งค่าเป็นโมฆะ()
{
ไบต์วินาที นาที ชั่วโมง
Wire.begin();
อนุกรมเริ่มต้น(9600);

ที่สอง = 45;
นาที = 5;
ชั่วโมง = 16;

SetDateDs1307(วินาที นาที ชั่วโมง);
}

เป็นโมฆะวน()
{
ไบต์วินาที นาที ชั่วโมง

GetDateDs1307(&วินาที, &นาที, &ชั่วโมง);
Serial.print (ชั่วโมง ธ.ค. );
Serial.พิมพ์(::);
Serial.print (นาที ธ.ค. );
Serial.พิมพ์(::);
Serial.println (วินาที, ธ.ค. );

ความล่าช้า(1,000);
}


ที่นี่ไม่ได้ใช้ไลบรารี และฟังก์ชันสำหรับการอ่านและการเขียนจะถูกตัดทอนลง

เซ็นเซอร์อุณหภูมิและความชื้น DHT11
ไม่มีอะไรจะบอกเกี่ยวกับเซ็นเซอร์นี้ ฉันจะไม่ใช้มันถ้าไม่ต้องการความชื้น เสียดายตอนรับไม่ได้ถ่ายรูปไว้ เลยไม่มีรูปมาให้ดู สามารถดูรูปถ่ายของเซ็นเซอร์ได้ที่ด้านล่าง ซึ่งฉันเชื่อมต่อกับ Arduino การเชื่อมต่อเซ็นเซอร์ทำได้ง่าย (+, เอาต์พุตดิจิตอล, -) โดยทั่วไปแล้วเซ็นเซอร์จะประกอบด้วยพินสี่พิน ด้วยฟอร์มแฟคเตอร์นี้ พินที่สามจึงไม่ได้เชื่อมต่อกับสิ่งใดเลย
คุณสามารถใช้ไลบรารีเพื่อเชื่อมต่อกับ Arduino คุณสามารถดาวน์โหลดได้
โปรแกรมทดสอบขนาดเล็กที่มีข้อมูลเอาต์พุตบนจอ LCD 1602:

// รวมรหัสห้องสมุด:
#รวม
#รวม

// ประกาศวัตถุ
dht11 DHT11;
จอแอลซีดีลิควิดคริสตัล (12, 11, 6, 5, 4, 3);

#กำหนด DHT11PIN 7
ฉัน;

การตั้งค่าเป็นโมฆะ()
{
จอแอลซีดี. เริ่มต้น (16, 2);
lcd.print("สถานะ: „);
ฉัน=0;
}

เป็นโมฆะวน()
{
int chk = DHT11.อ่าน(DHT11PIN);
จอแอลซีดี setCursor (8, 0);
สวิตช์ (CHK)
{
กรณีที่ 0: lcd.print (“ตกลง ”); แตก;// lcd.setCursor(11, 0); จอแอลซีดีพิมพ์(มิลลิวินาที()/2000); หยุดพัก;
กรณี -1: lcd.print (“ข้อผิดพลาดการตรวจสอบ”); mErr(); หยุดพัก;
กรณี -2: lcd.print ("ข้อผิดพลาดการหมดเวลา"); mErr(); หยุดพัก;
ค่าเริ่มต้น: lcd.print("ข้อผิดพลาดที่ไม่ทราบสาเหตุ"); mErr(); หยุดพัก;
}
ล่าช้า (500);
จอแอลซีดี setCursor (15, 0);
สวิตช์ (ฉัน)
{
กรณีที่ 0: lcd.print("^"); จอแอลซีดี setCursor (15, 1); lcd.print(" ");แตก;
กรณีที่ 1: lcd.print("v"); จอแอลซีดี setCursor (15, 1); lcd.print(" ");แตก;
ค่าเริ่มต้น: lcd.setCursor(15, 1); จอแอลซีดีพิมพ์("E"); หยุดพัก;
}
ฉัน=ฉัน+1;
ถ้า (i>1) i=0;
จอแอลซีดี setCursor (0, 1);
จอแอลซีดีพิมพ์("H =");
จอแอลซีดี setCursor (2, 1);
lcd.print((ลอย)DHT11.ความชื้น, 0);
จอแอลซีดี setCursor (4, 1);
จอแอลซีดีพิมพ์("%");
จอแอลซีดี setCursor (8, 1);
จอแอลซีดีพิมพ์("T =");
จอแอลซีดี setCursor (10, 1);
lcd.print((ลอย)DHT11.อุณหภูมิ, 0);
จอแอลซีดี setCursor (12, 1);
จอแอลซีดีพิมพ์("C");

เป็นโมฆะ mErr()
{
จอแอลซีดี setCursor (2, 1);
จอแอลซีดีพิมพ์("**");
จอแอลซีดี setCursor (10, 1);
จอแอลซีดีพิมพ์("**");
ผม=5;
}


เซ็นเซอร์มีข้อเสียบางประการ - ข้อมูลจากเซ็นเซอร์เป็นจำนวนเต็มเท่านั้นและช่วงไม่ชัดเจน

ดูเหมือนว่าฉันจะเขียนเกี่ยวกับส่วนประกอบทั้งหมด สิ่งที่เหลืออยู่คือการรวบรวมทุกอย่างให้เป็นหนึ่งเดียว
อ๊ะ ฉันเกือบลืม! ในการประกอบอุปกรณ์ คุณต้องมีตัวเครื่อง ฉันยังสั่งเคสนี้บน Ebay ด้วย ผู้ขายกลายเป็นจากอังกฤษ พัสดุมาถึงอย่างรวดเร็วแต่ฉันไม่ได้ถ่ายรูปไว้ ภาพถ่ายทั้งหมดของคดีอยู่ด้านล่าง

ก่อนอื่น ฉันประกอบทุกอย่างไว้บนโต๊ะโดยใช้สายไฟแบบพิเศษ ฉันเขียนโปรแกรมทดสอบและอัปโหลดไปยังคอนโทรลเลอร์



ที่จริงแล้วสีน้ำเงินของแบ็คไลท์นั้นสว่างกว่ามาก แม้จะใช้ความสว่างต่ำสุด (สว่าง=5) เฟรมก็ยังสว่างอยู่

ในการประกอบทุกอย่างแบบไร้สาย จึงตัดสินใจสร้างมาเธอร์บอร์ดขนาดเล็ก โดยมีการติดบอร์ด Arduino และโล่ไว้ที่ตัวเชื่อมต่อ หากมีสิ่งใดเกิดขึ้น ก็สามารถลบออกได้อย่างรวดเร็วและง่ายดาย ฉันยังตัดสินใจติดหน้าจอ LCD และปุ่มควบคุมเข้ากับขั้วต่อเพื่อบัดกรีเซ็นเซอร์อุณหภูมิบนสายไฟเท่านั้น
ผ้าพันคอจึงออกมาเป็นแบบนี้



ในรูปสุดท้ายฉันไม่ได้ล้างฟลักซ์ออกจนหมด ฉันติดยางที่มีรูพรุนไว้ใต้แผงป้องกันถัดจากขั้วต่อเพื่อให้มีการรองรับเป็นอย่างน้อย แม้ว่าในความเป็นจริงแล้วโล่ในขั้วต่อบนหน้าสัมผัสจะยึดได้ดีก็ตาม

เมนบอร์ดพร้อมแผงป้องกันและบอร์ด Arduino

นี่คือลักษณะของการเชื่อมต่อกับเมนบอร์ดโดยสมบูรณ์


แทนที่จะใช้ปุ่มฉันใช้โล่แบบโฮมเมดที่บัดกรีบนเขียงหั่นขนม ฉันใช้ปุ่มจากหนูตัวเก่าเป็นปุ่ม
อย่างที่คุณเห็นจำนวนสายไฟลดลง

ปัญหาหลักของการจัดวางเคสคือการตัดร่องจอ LCD ให้เรียบ ไม่ว่าฉันพยายามแค่ไหน มันก็ยังไม่สมบูรณ์แบบ ช่องว่างในบางจุดมากกว่า 1 มม. เล็กน้อย เพื่อให้ทุกอย่างดูเรียบร้อย ฉันจึงเอาน้ำยาซีลตู้ปลาสีดำมาอุดรอยแตกทั้งหมด ในขณะเดียวกันก็ติดตะแกรงเข้ากับน้ำยาซีลนี้ด้วย หลังจากกาวยาแนวแห้งแล้ว ฉันจึงตัดส่วนที่เกินจากด้านนอกออก ในแสงจ้าจะมองเห็นสารเคลือบหลุมร่องฟัน แต่ในแสงปกติทุกอย่างจะรวมเข้ากับร่างกาย
นี่คือลักษณะของเคสจากด้านในเมื่อติดตั้งหน้าจอ LCD และมาเธอร์บอร์ดแล้ว

นี่คือลักษณะที่ปรากฏเมื่อมองจากภายนอกในที่มีแสงจ้า (ขออภัยเรื่องลายนิ้วมือ ฉันเห็นมันตอนที่กำลังจัดรูปภาพ)

คิดอยู่นานว่าจะใส่ปุ่มต่างๆ เข้ากับเคสยังไงดี และที่สำคัญคือจะใช้ปุ่มอะไร...
ในร้านขายวิทยุอิเล็กทรอนิกส์ พวกเขาชอบปุ่มที่มีหมุดยาวและส่วนปลายที่พอดีกับหมุดนี้ ปุ่มเหล่านี้ใช้สำหรับบัดกรีเข้ากับบอร์ด ทุกอย่างคงจะดี แต่มีข้อเสีย - จังหวะการกดมีขนาดเล็กและดังมาก
เราต้องวางปุ่มต่างๆ ออกเป็นสองขั้นตอน ขั้นตอนแรกคือการวางปุ่มบนกระดาน ขั้นตอนที่สองคือติดบอร์ดนี้ไว้บนบอร์ดอื่น จากนั้นใส่ทั้งหมดนี้ลงในเนื้อหาบนไกด์

นี่คือลักษณะของผ้าพันคอที่มีกระดุม:



นี่คือลักษณะของบอร์ดยึด:


ที่นี่คุณสามารถดูคำแนะนำในการใส่บอร์ดพร้อมปุ่มได้ องค์ประกอบบางอย่างถูกบัดกรีเพื่อให้บอร์ดมีความแข็งแกร่ง

ตอนนี้เราใส่ทุกอย่างเข้าไปในร่างกายแล้ว
โดยไม่ต้องเชื่อมต่อปุ่ม:


ด้วยการเชื่อมต่อปุ่ม:

ปิดเคสแล้วเปิดเครื่อง ทุกอย่างใช้งานได้ดี ปุ่มต่างๆ ทำงานได้ตามปกติ

ในตอนท้ายฉันโพสต์วิดีโอสั้น ๆ ของอุปกรณ์ที่ทำงานในโหมดต่างๆ:
http://www.youtube.com/watch?v=KsiVaUWkXNA&feature=youtu.be
สำหรับผู้ที่ไม่เห็นวิดีโอที่นี่ นี่คือลิงค์ไป

ถึงเวลาที่จะสิ้นสุดการทบทวน
ฉันจะเขียนเกี่ยวกับโปรแกรมเล็กน้อย จากนั้นจึงสรุปสั้นๆ ตอนที่ฉันเขียนโปรแกรม ฉันไม่คิดว่าฉันจะถึงขีดจำกัด 30,720 ไบต์อย่างรวดเร็ว


ฉันต้องปรับโค้ดให้เหมาะสม ฉันย้ายโค้ดหลายส่วนไปไว้ในรูทีนย่อย ฉันไม่เคยคิดเลยว่าคำสั่ง switch...case ในรูปแบบที่คอมไพล์จะใช้พื้นที่มากกว่าคำสั่ง if...else หลายๆ คำสั่ง การประกาศตัวแปรที่ถูกต้องยังช่วยประหยัดพื้นที่อีกด้วย หากคุณประกาศอาร์เรย์แบบยาว แม้ว่าจะค่อนข้างเป็นไปได้ที่จะได้รับเป็นไบต์ก็ตาม หน่วยความจำเกินจะสูงถึง 500 ไบต์ ขึ้นอยู่กับขนาดของอาร์เรย์ เมื่อคุณเขียนโปรแกรม คุณจะไม่ได้คิดถึงมัน และต่อมาเมื่อคุณวิเคราะห์โปรแกรม คุณจะรู้ว่าคุณทำบางอย่างผิด และคุณเริ่มปรับโค้ดให้เหมาะสม หลังจากที่ปัญหาเกี่ยวกับขนาดของโปรแกรมได้รับการแก้ไข ฉันพบข้อจำกัดของ RAM นี่แสดงให้เห็นความจริงที่ว่าโปรแกรมเริ่มค้างหลังจากโหลด ฉันต้องแนะนำรูทีนย่อยสำหรับการคำนวณ RAM ที่ว่าง เป็นผลให้ฉันถูกบังคับให้ละทิ้งอัลกอริธึมการพยากรณ์อากาศหนึ่งอัลกอริธึมเนื่องจากจะต้องแสดงไอคอนบนหน้าจอ อัลกอริธึมทำงานได้ แต่ต้องบันทึกเอาต์พุตของไอคอน ฉันยังมีแนวคิดเกี่ยวกับวิธีการเพิ่มประสิทธิภาพโค้ด แต่ในอนาคตอันใกล้นี้ ฉันจะปล่อยให้อุปกรณ์ทำงานตามที่เป็นอยู่เพื่อประเมินประสิทธิภาพและระบุจุดบกพร่องทั้งหมด

ตอนนี้ได้ข้อสรุปบางอย่างแล้ว
ข้อเสีย
1) ราคา. เหตุผลสำหรับข้อเสียนี้คืองานอดิเรกไม่เคยถูก

ข้อดี
1) ฟังก์ชั่นที่ยอดเยี่ยมของอุปกรณ์
2) ฟังก์ชั่นที่เพิ่มขึ้นจะถูกจำกัดโดยคอนโทรลเลอร์ที่ใช้และความต้องการของคุณเองเท่านั้น
3) ความสุขอันสวยงามจากการใคร่ครวญและความพึงพอใจทางศีลธรรมจากการที่ในที่สุดฉันก็ประกอบอุปกรณ์นี้เสร็จ

ฉันกำลังวางแผนที่จะซื้อ +85 เพิ่มในรายการโปรด ฉันชอบรีวิว +137 +304
  • “สถานีตรวจอากาศแบบทำเอง” นี้ได้รับการออกแบบมาให้ทำงานในสภาพสนาม ไม่ใช่ในอาคารหรือกลางแจ้ง ดังที่ระบุไว้ในตอนต้นของบทความ แบตเตอรี่จอของตัวเอง การใช้แล็ปท็อปสำหรับสิ่งนี้จะง่ายกว่าและสะดวกกว่ามาก
  • ฉันไม่สามารถดาวน์โหลดเฟิร์มแวร์ได้:(คุณช่วยโพสต์ไว้ที่อื่นได้ไหม หรือส่งไปที่ allmail@ mail.ru
  • ทุกอย่างค่อนข้างซับซ้อนและมีราคาแพงเล็กน้อย
  • ฉันยอมรับว่ามันยุ่งยาก แต่คุณสามารถเทียบเคียงได้ (ในแง่ของเงิน) กับนักพยากรณ์อากาศของจีน และฉันแนะนำให้พิจารณาอุปกรณ์นี้เป็นหนึ่งใน "ลูกบาศก์" ของบ้านอัจฉริยะ โดยการแก้ไขเฟิร์มแวร์เล็กน้อย ข้อมูลก็สามารถทำได้ สามารถถ่ายโอนผ่าน RS232 ไปยังพีซีที่ใช้เป็นศูนย์ควบคุมโฮมกรอบรูปหรือ PDA
  • อย่างไรก็ตาม เฟิร์มแวร์และซอร์สโค้ดจะถูกดาวน์โหลดตามปกติจากหน้าภาษาอังกฤษของโครงการ
  • ฉันมีความคิดที่คลุมเครือว่าทำไมในชีวิตประจำวันถึงมีความซับซ้อนเช่นนี้ สถานีที่เจ๋งที่สุดจะไม่สามารถพยากรณ์ได้เทียบเท่ากับที่ได้จากการถ่ายภาพอวกาศ เว้นแต่ - ในการเดินทางไปยังถิ่นทุรกันดารดังกล่าวซึ่งไม่มีอินเทอร์เน็ตบนมือถือหรือวิทยุ และนั่นก็ไม่น่าเป็นไปได้: บริษัทที่จริงจังทุกแห่งซึ่งชีวิตอาจขึ้นอยู่กับสภาพอากาศ (นักบินเครื่องร่อน นักปีนเขา) มีเครื่องนำทางผ่านดาวเทียม ซึ่งหมายความว่าพวกเขาสามารถเข้าถึงการพยากรณ์ได้
  • ดังนั้นอุปกรณ์นี้จึงไม่พยากรณ์ แต่แสดงค่าปัจจุบันของพารามิเตอร์สภาพอากาศ และจุดประสงค์หลักไม่ใช่การตั้งแคมป์ แต่เช่นการวัดพารามิเตอร์ในเรือนกระจกและถ่ายโอนไปที่บ้าน โดยวิธีการเริ่มต้นของบทความสามารถแปลได้ดังนี้: “สถานีตรวจอากาศที่มีการวัดความดัน, ความชื้นสัมพัทธ์, การวัดอุณหภูมิภายในและภายนอกระยะไกล” ซึ่งไม่ได้พูดถึงห้อง
  • โครงการนี้ค่อนข้างยุ่งยากเล็กน้อย แต่น่าสนใจ และจะใช้ในชีวิตประจำวันและการผลิต เพื่อตรวจสอบพารามิเตอร์ของสถานที่ เพื่อทำให้กระบวนการใด ๆ เป็นแบบอัตโนมัติ
  • ขอให้เป็นวันที่ดี! หากใครดาวน์โหลดไฟล์ซีลและเฟิร์มแวร์แล้วกรุณาส่งมาที่ฟอรั่มหรือที่ [ป้องกันอีเมล]- ขอบคุณล่วงหน้า!
  • ถ้าไม่มีใครมีไฟล์เฟิร์มแวร์และแผงวงจรพิมพ์บอกฉันหน่อยว่าครีตินตัวไหนลบไฟล์เหล่านี้ทั้งหมด?
  • ฉันแนะนำให้คุณใจเย็น ๆ รู้สึกเหมือนว่าทั้งโลกเป็นหนี้คุณอยู่จนตาย ดูที่มาที่หน้าhttp://www.elxproject.com/elx/news.php?readmore=36
  • ฉันมีหนึ่งในนั้นที่มีเซ็นเซอร์อุณหภูมิและความชื้นแบบไร้สายมาสองปีแล้ว
  • ไม่ ไม่มีใครเป็นหนี้ฉันเลย แน่นอน ฉันขอโทษสำหรับความรุนแรง ฉันเพิ่งติดตามลิงก์นี้ ฉันได้รับความรู้สึกว่าฉันจำเป็นต้องลงทะเบียนบน Face Book อย่างเด็ดขาด และนี่เป็นสิ่งที่ "น่ารำคาญ" มาก ฉันไม่สามารถดาวน์โหลดได้ กรุณาถ้าใครมีไฟล์เก็บถาวรที่ดาวน์โหลดกรุณาส่งไปที่ฟอรั่มถ้าไม่ยาก ขอขอบคุณล่วงหน้า. ป.ล. ฉันคิดอย่างนั้น นอกเหนือจากหน้าที่หลักแล้ว ยังมีฟอรัมเพื่อช่วยผู้คนจากโรคริดสีดวงทวาร - ดูโฆษณาโง่ ๆ และบังคับให้ลงทะเบียนบนโซเชียลเน็ตเวิร์ก ฯลฯ
  • กรุณาแนบเอกสารแนบมาด้วย แบบแผน ซีล แหล่งที่มา เฟิร์มแวร์ คุณไม่ควรคำนึงถึงเรื่องนี้ แต่สำหรับอนาคต คุณไม่ควรสาบานและขุ่นเคืองในทันที เช่นเดียวกับผู้ใช้ฟอรัมหลายคน เข้าใจดีว่าคุณต้องการข้อมูล ไฟล์ ไดอะแกรม และอาจต้องการมันอย่างเร่งด่วนด้วยซ้ำ แต่คุณไม่ได้รับมันทันทีเสมอไป ฉันเห็นคำขอของคุณในข้อความลงวันที่ 28 กรกฎาคม 2013 แต่ฉันไม่สามารถตอบหรือช่วยเหลือใด ๆ ได้จนถึงวันนี้ (ผู้ใช้ฟอรัมอื่นอาจมีสถานการณ์คล้ายกัน) หากผู้ดูแลระบบไม่เข้าไปแทรกแซงอย่างรวดเร็ว อาจเป็นไปได้ว่าข้อความและ คำพูดต่างๆ คงจะตกลงมาที่คุณ "ในทิศทางหนึ่ง" แล้วเกิด "ปฏิกิริยาลูกโซ่" ด้วยการสบถ และผลที่ตามมาคือ การสนทนา (หัวข้อ) ขยายออกไปเกินประเด็น และความคิดเห็นที่แย่มากๆ ยังคงอยู่เกี่ยวกับฟอรัมดังกล่าว ทั้งหมด... โชคดี! หากคุณต้องการอะไร ถามมาได้เลย เราจะช่วยทุกวิถีทางที่ทำได้!
  • สวัสดีตอนบ่าย VADZZ! ขอบคุณสำหรับผู้จัดเก็บ!

หลักการทำงาน

ข้อมูลที่รวบรวมจากเซ็นเซอร์ความเร็วลมและทิศทางและเซ็นเซอร์อื่นๆ จะถูกส่งโดยตัวควบคุมแบบไร้สายผ่านเครือข่าย GPRS ไปยังเซิร์ฟเวอร์ของเราหรือของคุณบนอินเทอร์เน็ต ซึ่งสามารถดูได้แบบเรียลไทม์และดาวน์โหลดเป็นไฟล์เก็บถาวรที่สมบูรณ์

ฟังก์ชั่นพื้นฐาน

การรวบรวม การสะสม และการส่งข้อมูลสภาพอากาศไปยังเซิร์ฟเวอร์บนอินเทอร์เน็ตทุกนาที
การรวบรวมและการส่งระดับแรงดันไฟฟ้าอินพุตไปยังเซิร์ฟเวอร์
อินพุตสำหรับเชื่อมต่อเซ็นเซอร์เตือนภัยในตัวแบบปิดตามปกติ / เครื่องส่งเสียงเหตุการณ์

ต้นทุนการดำเนินงาน

ค่าใช้จ่ายในการรับส่งข้อมูล GPRS ต่อเดือนอยู่ที่ประมาณ 100 รูเบิล
คอนโทรลเลอร์ไม่ต้องการการบำรุงรักษา มีการป้องกันความล้มเหลวสองระดับ
คอนโทรลเลอร์มีมาตรฐานอุตสาหกรรมในด้านคุณภาพการออกแบบและการผลิต โดยคำนึงถึงความทนทานต่อความชื้น ฝุ่น และอุณหภูมิ

ปริมาณที่วัดได้

GPRS เครื่องวัดความเร็วลม:


- อุณหภูมิ (ไม่มีการป้องกันรังสีจากแสงแดด)

สถานีตรวจอากาศ GPRS:

ความเร็วและทิศทางลม
- อุณหภูมิ
- ความกดอากาศ
- ความชื้น

ความแม่นยำ

ทิศทางลม - 16 ภาค
ความเร็วลม - จาก 0 ถึง 66 m/s - 5%
ความดันบรรยากาศ - 2%
ความชื้น - 2%
อุณหภูมิ - 2%

เงื่อนไขการใช้งาน

อุณหภูมิในการทำงานตั้งแต่ -40 ถึง +60 องศาเซลเซียส
อุปกรณ์ดังกล่าวได้รับการออกแบบสำหรับการติดตั้งกลางแจ้งหรือในร่ม

แหล่งจ่ายไฟ

อินพุตกำลังไฟลำดับความสำคัญสองรายการ:

อินพุต - 5 โวลต์จากแหล่งจ่ายไฟภายนอกหรือ USB

การสนับสนุนด้านเทคนิค

ลูกค้าทุกคนจะได้รับการสนับสนุนทางเทคนิคและการรับประกันเต็มรูปแบบ

รับประกัน 1 ปี

อุปกรณ์

1. เซ็นเซอร์ความเร็วลมและทิศทางของเดวิสพร้อมการติดตั้งเสา
2. หน่วยรวบรวมและส่งข้อมูลพร้อมเซ็นเซอร์
3. พาวเวอร์ซัพพลาย 220/ยูเอสบี
4. สายไฟที่จำเป็นทั้งหมด
5. พื้นที่บนเซิร์ฟเวอร์สำหรับการดูและจัดเก็บข้อมูล
6. ความช่วยเหลือในการติดตั้งและการว่าจ้าง
7. ความช่วยเหลือในการสร้างเว็บไซต์ของคุณเพื่อรวบรวมและจัดเก็บข้อมูล

คุณสมบัติเพิ่มเติม (ไม่รวมอยู่ในมาตรฐาน)

อินพุตที่ 2 5 - 30 โวลต์จากแผงโซลาร์เซลล์หรือแบตเตอรี่ภายนอก / แหล่งจ่ายไฟ (ตัวเลือก)

การทำสำเนาข้อมูลที่รวบรวมไว้ในการ์ดหน่วยความจำ micro SD ในตัว

การถ่ายโอนข้อมูลไปยังคอมพิวเตอร์ผ่านสายเคเบิลในระยะทางไกล
มาตรฐานสำหรับการเชื่อมต่อกับคอมพิวเตอร์คืออินเทอร์เฟซ RS232 หรือ USB

การเชื่อมต่อมิเตอร์วัดความเร็วลมตัวที่สองเข้ากับคอนโทรลเลอร์
การเชื่อมต่อกับตัวควบคุมเซ็นเซอร์ความเร็วและเครื่องวัดวามเร็วในตัว

การกำหนดค่าอินพุตคอนโทรลเลอร์เป็นมิเตอร์ความถี่และโวลต์มิเตอร์สำหรับเชื่อมต่ออุปกรณ์อื่นๆ เช่น เครื่องวัดความเร็วลมแบบมืออาชีพที่มีเอาต์พุตแบบอะนาล็อก

ระบบทำความร้อนในตัวเพื่อขยายช่วงอุณหภูมิการทำงานที่ต่ำกว่า

ขอแสดงความนับถือ,
ทีมงานของบริษัท

สถานีตรวจอากาศได้รับการออกแบบมาเพื่อตรวจสอบสภาพอากาศเป็นหลัก ดูอุณหภูมิ ความชื้น และความดันบรรยากาศในปัจจุบัน สิ่งนี้สะดวกมากสำหรับชาวประมง ฉันตัดสินใจสร้างสถานีตรวจอากาศของตัวเองโดยใช้ Arduino แต่มีการแสดงข้อมูลบนโทรศัพท์มือถือ


หลักการทำงานของแอปพลิเคชันคือเราเปิดใช้งานบนโทรศัพท์ที่ใช้ระบบปฏิบัติการ Android เชื่อมต่อกับบอร์ด Arduino ผ่าน Bluetooth และโดยการคลิกที่ไอคอนเราจะได้แสดงข้อมูลต่างๆ

หลักการทำงานของสถานีตรวจอากาศนั้นเรียบง่าย เมื่อรับจากโทรศัพท์ 1 เราจะสำรวจเซ็นเซอร์อุณหภูมิ DS18B20 ซึ่งตั้งอยู่ด้านนอกและส่งข้อมูลไปยังโทรศัพท์ เมื่อได้รับ 2 เราจะสำรวจเซ็นเซอร์อุณหภูมิ DS18B20 ซึ่งตั้งอยู่ในห้องแล้วส่งข้อมูลไปยังโทรศัพท์ เมื่อเราได้รับ 3 เราจะสำรวจเซ็นเซอร์ BMP085 และเมื่อได้รับ 4 เราจะสำรวจเซ็นเซอร์ความชื้นและส่งข้อมูลด้วย

ฉันจะตอบคำถามทันทีว่า “ทำไมต้องแสดงข้อมูลบนโทรศัพท์มือถือ” สะดวกกว่าสำหรับฉัน โดยเฉพาะอย่างยิ่งเมื่อฉันประหยัดค่าซื้อจอแสดงผล ซื้อปุ่ม และหน่วยความจำภายในของไมโครคอนโทรลเลอร์ ความเกียจคร้านยังคงเป็นกลไกของความก้าวหน้า

ภาพหน้าจอจากหน้าจอโทรศัพท์มือถือ

การวัดอุณหภูมิกลางแจ้งเป็นองศาเซลเซียส:

การวัดอุณหภูมิห้องเป็นองศาเซลเซียส:

การวัดความดันบรรยากาศภายนอก หน่วยเป็น มม. ปรอท ศิลปะ.:

การวัดความชื้นในอากาศเป็น %

หลังจากภาพรวมคร่าวๆ ของงานแล้ว เรามาดูส่วนทางเทคนิคของโครงการกันดีกว่า

แผนภาพการเชื่อมต่อเซ็นเซอร์

แผนภาพการเชื่อมต่อสำหรับเซ็นเซอร์อุณหภูมิ DS18B20

ต้องเชื่อมต่อเซ็นเซอร์อุณหภูมิแบบขนาน

แผนภาพการเชื่อมต่อเซ็นเซอร์ BMP085:

แผนภาพการเชื่อมต่อเซ็นเซอร์ DHT11:

แผนภาพการเชื่อมต่อสำหรับโมดูลบลูทูธ HC-05:


หลังจากเชื่อมต่อเซ็นเซอร์ทั้งหมดสำเร็จแล้ว ให้อัปโหลดภาพร่าง

ร่าง

#รวม #รวม #รวม #รวม #รวม #รวม #รวม #กำหนด ONE_WIRE_BUS 4 OneWire oneWire(ONE_WIRE_BUS); เซ็นเซอร์อุณหภูมิดัลลัส(&oneWire); เทอร์โมมิเตอร์ที่อยู่อุปกรณ์1 = ( 0x28, 0x00, 0x54, 0xB6, 0x04, 0x00, 0x00, 0x92 ); เทอร์โมมิเตอร์ที่อยู่อุปกรณ์3 = ( 0x28, 0x94, 0xAC, 0xDF, 0x02, 0x00, 0x00, 0xB5 );


BMP085 dps = BMP085();

ยาว อุณหภูมิ = 0, ความดัน = 0, ระดับความสูง = 0; DHT dht(8, DHT11);ถ่านขาเข้าByte; อินท์x=0; การตั้งค่าเป็นโมฆะ() ( sensors.begin(); sensors.setResolution(Thermometer1, 10); sensors.setResolution(Thermometer3, 10); Wire.begin(); dps.init(MODE_ULTRA_HIGHRES, 21000, จริง); dht.begin( ); Serial.begin(9600); ) โมฆะ printTemperature (DeviceAddress deviceAddress) ( float tempC = sensors.getTempC(deviceAddress); Serial.println(tempC,1); ) void loop() (sensors.requestTemperatures(); dps. getPressure(&ความดัน); int h = dht.readHumidity(); float t = dht.readTemperature(); if (Serial.available() > 0) ( incomingByte = Serial.read(); if(incomingByte == "1" ) ( x=2; ) if(incomingByte == "2") ( x=1; ) if(incomingByte == "3") ( x=3; ) if(incomingByte == "4") ( x=4 ; ) ) หน่วงเวลา(100); สวิตช์ (x) ( กรณีที่ 1: printTemperature(Thermometer1); แตก; กรณีที่ 2: printTemperature(Thermometer3); แตก; กรณีที่ 3: Serial.println(Pressure/133.3,1); แตก; กรณี 4: Serial.println(h); แตก;แอปพลิเคชันโทรศัพท์ WSAB ทำงานบน Android OS 2.3 และสูงกว่า
บทความนี้นำเสนอโครงการสำหรับสถานีตรวจอากาศอัตโนมัติที่ทำงานแบบเรียลไทม์ อุปกรณ์รวบรวมข้อมูลอะนาล็อกหรือดิจิทัลและส่งไปยังเว็บเซิร์ฟเวอร์ผ่านช่องทางการสื่อสาร GPRS หากคุณใช้แผงโซลาร์เซลล์และแบตเตอรี่ สถานีจะสามารถทำให้เป็นอิสระได้อย่างสมบูรณ์ อุปกรณ์รองรับอินพุตแบบอะนาล็อกหรือดิจิทัล 3 ช่อง หัวใจของวงจรคือไมโครคอนโทรลเลอร์ PIC16F877A ไมโครคอนโทรลเลอร์ยังโต้ตอบกับโมดูล GSM/GPRS

ซิม900

หรือ

ฉันเลือก SIM900/300 ยอดนิยมเป็นโมดูล GSM เชื่อมต่อโดยใช้ UART และการโต้ตอบเกิดขึ้นโดยใช้คำสั่ง AT แรงดันไฟฟ้าของโมดูลคือ 3.6V เสาอากาศภายนอกเชื่อมต่อกับโมดูล โมดูลนี้มีตัวควบคุมเครื่องชาร์จในตัว ซึ่งมีประโยชน์มากเมื่อใช้แบตเตอรี่และแผงโซลาร์เซลล์หรือเครื่องกำเนิดลมเพื่อชาร์จใหม่
วงจรใช้ไฟ LED แสดงสถานะ LED1 ซึ่งแสดงสถานะ GSM (กะพริบ) โมดูลเปิด/ปิดโดยใช้ปุ่ม S3

หมายเหตุ 1: ในระหว่างการพัฒนาโครงการ โมดูล SIM300 ถูกยกเลิกและแทนที่ด้วย SIM900 รุ่นใหม่ แผนภาพด้านบนออกแบบมาสำหรับ SIM300 สำหรับโมดูล SIM900 องค์ประกอบบางอย่างระหว่างโมดูลและซิมการ์ดจะถูกลบออก (ดูเอกสารข้อมูล)

หมายเหตุ 2 สวิตช์ S3 ได้รับการออกแบบมาเพื่อเปิด/ปิดโมดูล GSM แต่สามารถเปลี่ยนได้ด้วยทรานซิสเตอร์ที่เชื่อมต่อกับพินไมโครคอนโทรลเลอร์ สิ่งนี้จะช่วยให้คุณสามารถเปิดหรือปิดโมดูล GSM โดยใช้คำสั่งจาก MK นี่เป็นโซลูชันการออกแบบวงจรที่ถูกต้องมากขึ้น

หมายเหตุ 3: โมดูลทำงานอย่างถูกต้องเมื่อใช้แรงดันไฟฟ้า >4V กับพิน Vbat

โครงการสถานีตรวจอากาศด้วย MK PIC 16F877A:

ดังนั้นตัวหลักคือไมโครคอนโทรลเลอร์ PIC 16F877A ที่ทำงานที่ความถี่ 16 MHz MK ขับเคลื่อนโดย Vbat เช่นเดียวกับโมดูล GSM พิน RA0,1,2 ใช้เป็นอินพุตแบบอะนาล็อก แรงดันไฟฟ้าอินพุตจากพินเหล่านี้ถูกแปลงโดยใช้ภายใน ADC พร้อม Vref=3.1V ซึ่งได้มาจากซีเนอร์ไดโอด 3.1V ขั้วต่ออินพุตยังส่งสัญญาณ Vbat และ GND เพื่อจ่ายไฟให้กับเซ็นเซอร์ภายนอก (หากจำเป็น) ทรานซิสเตอร์ Q3 (BC547) ใช้สำหรับควบคุมความสว่าง PWM ของหน้าจอ LCD ปุ่ม S4 ใช้เพื่อรีเซ็ตไมโครคอนโทรลเลอร์ และ R1 ใช้เป็นตัวต้านทานแบบดึงขึ้น อุปกรณ์ยังใช้ตัวเชื่อมต่อ PIC-ICSP เพื่อมอบความสามารถในการตั้งโปรแกรมในวงจร

หน้าจอ LCD 16×2 HD44780:

หน้าจอ LCD ใช้เพื่อแสดงข้อมูลสถานะ วงจรใช้สวิตช์ Power-LCD เพื่อปิดไฟแบ็คไลท์ของหน้าจอ ซึ่งช่วยประหยัดพลังงานของวงจร นอกจากนี้ เอาต์พุตจากสวิตช์ยังเชื่อมต่อกับไมโครคอนโทรลเลอร์ LCD-INT เพื่อให้ MK รู้ว่าเมื่อใดที่ LCD เปิด (ไมโครคอนโทรลเลอร์ดำเนินขั้นตอนการเริ่มต้นสำหรับ LCD เพื่อส่งข้อมูลออกไป) ด้วยเหตุนี้ คุณจึงสามารถยกเลิกการเชื่อมต่อและเชื่อมต่อโมดูล LCD ในขณะที่วงจรสถานีตรวจอากาศหลักกำลังทำงานอยู่

ภาพถ่ายบางส่วนของอุปกรณ์:

โปรเจ็กต์บน GitHub (เฟิร์มแวร์เวอร์ชันล่าสุด, ไฟล์ PCB, PDF ฯลฯ)



หากคุณสังเกตเห็นข้อผิดพลาด ให้เลือกส่วนของข้อความแล้วกด Ctrl+Enter
แบ่งปัน:
คำแนะนำในการก่อสร้างและปรับปรุง