ตัวเลือกของบรรณาธิการ:

การโฆษณา

บ้าน - ความปลอดภัย
เซ็นเซอร์สถานีตรวจอากาศบน Arduino สถานีตรวจอากาศไร้สาย

การดูสภาพอากาศเป็นกิจกรรมที่น่าตื่นเต้นมาก ฉันตัดสินใจสร้างสถานีตรวจอากาศของตัวเองตามความนิยม .

ต้นแบบสถานีตรวจอากาศมีลักษณะดังนี้:

ฟังก์ชั่นของสถานีตรวจอากาศของฉัน:

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


ฐานสิบหก
-ไฟล์
เฟิร์มแวร์สำหรับ (ฉบับลงวันที่ 9 พฤษภาคม 2561) - .
วิธีการแฟลช ฐานสิบหก- ไฟล์ไปที่บอร์ด อาร์ดูโน่ฉันอธิบายแล้ว

ไมโครคอนโทรลเลอร์ อาร์ดูโน่ นาโน 3.0

"หัวใจ" ของสถานีตรวจอากาศของฉันคือไมโครคอนโทรลเลอร์ อีเบย์):

เพื่อควบคุมการแสดงผลและการโพลของเซ็นเซอร์ ฉันใช้ตัวจับเวลา 1 อาร์ดูโน่ทำให้เกิดการหยุดชะงักด้วยความถี่ 200 Hz (คาบ - 5 ms)

ตัวบ่งชี้

ฉันเชื่อมต่อเพื่อแสดงการอ่านค่าเซ็นเซอร์ที่วัดได้และเวลาปัจจุบัน อาร์ดูโน่สี่หลัก ไฟ LED แสดงสถานะ ลานหน้าบ้าน FYQ-5643BHด้วยขั้วบวกทั่วไป (ขั้วบวกของส่วนที่เหมือนกันของการปล่อยทั้งหมดจะรวมกัน)
ตัวบ่งชี้ประกอบด้วยตัวเลขเจ็ดหลักสี่หลักและจุดแยก (ชั่วโมง) สองจุด:

แอโนดตัวบ่งชี้เชื่อมต่อผ่านตัวต้านทานจำกัดกระแสเข้ากับขั้วต่อ อาร์ดูโน่:

ปล่อย 1 2 3 4
บทสรุป A3 A2 D3 D9

แคโทดของเซ็กเมนต์เชื่อมต่อกับพิน อาร์ดูโน่:

ส่วน พี
บทสรุป D7 D12 D4 D5 D6 D11 D8 D13

ส่วนตัวบ่งชี้จะสว่างขึ้นหากมีศักยภาพสูงที่ขั้วบวกของการคายประจุที่สอดคล้องกัน (1) และมีศักยภาพต่ำที่แคโทด (0)

ฉันใช้ ตัวบ่งชี้แบบไดนามิกเพื่อแสดงข้อมูลบนตัวบ่งชี้ - มีเพียงตัวเลขเดียวเท่านั้นที่ใช้งานได้ตลอดเวลา การคายประจุที่ใช้งานอยู่สลับกับความถี่ 200 Hz (ระยะเวลาการแสดงผล 5 ms) ในเวลาเดียวกันการกะพริบของปล้องนั้นไม่สามารถมองเห็นได้ด้วยตา

เซ็นเซอร์อุณหภูมิ DS18x20

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

เอาท์พุทเซ็นเซอร์ วีซีซี ดีเอที จีเอ็นดี
บทสรุป อาร์ดูโน่ 5V A1 จีเอ็นดี

ระหว่างหมุด วีซีซีและ ดีเอทีฉันรวมตัวต้านทานแบบดึงขึ้น 4.7 kOhm

หากต้องการแปลงระหว่างองศาเซลเซียสและฟาเรนไฮต์ คุณสามารถใช้ตารางต่อไปนี้:

ฉันวางเซ็นเซอร์ไว้นอกหน้าต่างบ้านในกล่องปากกาลูกลื่นพลาสติก:

\

สถานีตรวจอากาศมืออาชีพใช้หน้าจอ Stevenson เพื่อปกป้องเทอร์โมมิเตอร์จากแสงแดดโดยตรง และรับประกันการไหลเวียนของอากาศ หน้าจอสตีเวนสัน):

เซ็นเซอร์ความดันและอุณหภูมิ BMP280

บารอมิเตอร์แบบปรอทและบารอมิเตอร์แบบแอนรอยด์มักใช้ในการวัดความดันบรรยากาศ

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

ใน บารอมิเตอร์แบบแอนรอยด์ใช้การบีบอัดและขยายกล่องภายใต้ความดันบรรยากาศ:

ในการวัดความดันบรรยากาศและอุณหภูมิห้องในสถานีตรวจอากาศที่บ้าน ฉันใช้เซ็นเซอร์ - เล็ก เอสเอ็มดี-เซนเซอร์ขนาด 2 x 2.5 มม. ใช้เทคโนโลยีพายโซรีซิสทีฟ:

ซื้อผ้าพันคอพร้อมเซ็นเซอร์ที่ แพลตฟอร์มการซื้อขาย อีเบย์:

เซ็นเซอร์เชื่อมต่อกับบัส ไอทูซี(รายละเอียดการติดต่อ- เอสดีเอ/เอสดีไอ, ติดต่อการซิงโครไนซ์ - เอสซีแอล/เอสซีเค):

เอาท์พุทเซ็นเซอร์ วีซีซี จีเอ็นดี เอสดีไอ เอสซีเค
บทสรุป อาร์ดูโน่ 3V3 จีเอ็นดี A4 A5

อดาฟรุ๊ต- ไฟล์ Adafruit_Sensor.h, อดาฟรุต_BMP280.h, อดาฟรุต_BMP280.cpp.

หน่วยความดันบรรยากาศ

เซ็นเซอร์ผ่านฟังก์ชั่น อ่านความดันแสดงความดันบรรยากาศเป็นปาสคาล หน่วยพื้นฐานของการวัดความดันบรรยากาศคือ เฮกโตปาสคาล(hPa) (1 hPa = 100 Pa) อะนาล็อกซึ่งเป็นหน่วยที่ไม่ใช่ระบบ " มิลลิบาร์" (mbar) (1 mbar = 100Pa = 1hPa) สำหรับการแปลงระหว่างหน่วยแรงดันนอกระบบที่ใช้กันทั่วไป " มิลลิเมตรปรอท" (mmHg) และเฮกโตปาสคาล ใช้อัตราส่วนต่อไปนี้:
1 hPa = 0.75006 มิลลิเมตรปรอท ศิลปะ. ➤ 3/4 มม.ปรอท; 1 มิลลิเมตรปรอท =1.3332 เฮกโตพาสคาล พรีเมี่ยม 4/3 เฮกปาสคาล

การขึ้นอยู่กับความดันบรรยากาศต่อระดับความสูงเหนือระดับน้ำทะเล

ความกดอากาศสามารถแสดงได้ทั้งในรูปแบบสัมบูรณ์และแบบสัมพัทธ์
แรงกดดันล้วนๆ คิวเอฟอี(ภาษาอังกฤษ) ความดันสัมบูรณ์) คือความกดอากาศในปัจจุบัน ซึ่งไม่ได้คำนึงถึงการแก้ไขเหนือระดับน้ำทะเล
ความกดอากาศลดลงประมาณ 1 hPa โดยมีระดับความสูงเพิ่มขึ้น 1 เมตร:

สูตรความกดอากาศช่วยให้คุณกำหนดการแก้ไขการอ่านค่าบารอมิเตอร์เพื่อให้ได้แรงดันสัมพัทธ์ (เป็น mmHg):
$\Delta P = 760 \cdot (1 - (1 \over (10^ ( (0.0081350 \cdot H) \over (T + 0.00178308 \cdot H) ))))$ ,
โดยที่ $T$ คืออุณหภูมิอากาศเฉลี่ยในระดับ Rankin, ° รา, $H$ - ความสูงเหนือระดับน้ำทะเล, ฟุต
การแปลงองศาเซลเซียสเป็นองศาแรงคิน:
$^(\circ)Ra = (^(\circ)C \cdot 1.8) + $491.67
สูตรความกดอากาศใช้สำหรับการปรับระดับความกดอากาศ - การกำหนดความสูง (โดยมีข้อผิดพลาด 0.1 - 0.5%) สูตรนี้ไม่คำนึงถึงความชื้นในอากาศและการเปลี่ยนแปลงความเร่งโน้มถ่วงตามความสูง สำหรับความสูงที่แตกต่างกันเล็กน้อย การพึ่งพาเอ็กซ์โปเนนเชียลนี้สามารถประมาณได้อย่างแม่นยำเพียงพอโดยการพึ่งพาเชิงเส้น
ความดันสัมพัทธ์ คิวเอ็นเอช(ภาษาอังกฤษ) ความดันสัมพัทธ์, Q-code ความสูงทางทะเล) คือความดันบรรยากาศที่ปรับเป็นระดับน้ำทะเลเฉลี่ย ระดับน้ำทะเลเฉลี่ย เอ็มเอสแอล) (สำหรับ อสและอุณหภูมิ 15 องศาเซลเซียส) และในขั้นต้นจะกำหนดโดยคำนึงถึงระดับความสูงที่สถานีตรวจอากาศตั้งอยู่ สามารถดูได้จากข้อมูลบริการสภาพอากาศ ค่าที่อ่านได้จากเครื่องมือที่ปรับเทียบแล้วในที่สาธารณะ สนามบิน (จากรายงาน) เมต้า) จากอินเทอร์เน็ต
ตัวอย่างเช่น สำหรับสนามบินโกเมลที่อยู่ใกล้เคียง ( อืม) ฉันสามารถดูรายงานสภาพอากาศจริงได้ เมต้าที่ ru.allmetsat.com/metar-taf/russia.php?icao=UMGG:
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD//NOSIG ,
ที่ไหน Q1014- ความดัน คิวเอ็นเอชที่สนามบินคือ 1014 hPa
ประวัติความเป็นมาของรายงาน เมต้าดูได้ที่ Aviationwxchartsarchive.com/product/metar
สำหรับความกดอากาศสัมพัทธ์ปกติ คิวเอ็นเอชสมมติว่ามีความดัน 760 mmHg ศิลปะ. หรือ 1,013.25 hPa (ที่อุณหภูมิ 0°С ที่ละติจูด 45° ของซีกโลกเหนือหรือซีกโลกใต้)
ฉันตั้งค่าความดันสำหรับบารอมิเตอร์แบบแอนรอยด์ คิวเอ็นเอชโดยใช้สกรูปรับความไว:

พยากรณ์อากาศ

การวิเคราะห์การเปลี่ยนแปลงของแรงดันทำให้คุณสามารถสร้างการพยากรณ์อากาศได้ และความแม่นยำของมันจะสูงขึ้น ความกดดันก็จะเปลี่ยนแปลงอย่างรวดเร็วยิ่งขึ้น ตัวอย่างเช่น กฎทั่วไปเก่าสำหรับกะลาสีเรือคือความดันลดลง 10 hPa (7.5 มม. ปรอท) ในช่วงเวลา 8 ชั่วโมงบ่งชี้ว่าลมกำลังพัดเข้ามา

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

ในอุตุนิยมวิทยา ทิศทางของลมถือเป็นทิศทางที่ลมพัด:

ทิศทางนี้ลงมาเหลือแปดจุด

อัลกอริทึมมักใช้ในการพยากรณ์อากาศตามความกดอากาศและทิศทางลม ซัมเบรตติ.

เซ็นเซอร์ความชื้น

ฉันใช้โมดูลนี้เพื่อตรวจสอบความชื้นสัมพัทธ์ในอากาศ DHT11(ซื้อมาจากตลาดนัด. อีเบย์):

เซ็นเซอร์ความชื้น DHT11มีเอาต์พุต 3 ช่อง - แหล่งจ่ายไฟ ( + ), ข้อมูล ( ออก), โลก ( - ):

เอาท์พุทเซ็นเซอร์ + ออก -
บทสรุป อาร์ดูโน่ 5V D10 จีเอ็นดี

เพื่อทำงานกับเซ็นเซอร์ที่ฉันใช้ห้องสมุดจาก อดาฟรุ๊ต- ไฟล์ DHT.h, DHT.cpp.

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

สำหรับมนุษย์ช่วงความชื้นในอากาศที่เหมาะสมคือ 40 ... 60%

นาฬิกาเรียลไทม์

ฉันใช้โมดูลเป็นนาฬิกาเรียลไทม์ RTC DS1302(ซื้อผ้าพันคอพร้อมนาฬิกาบนแพลตฟอร์มการซื้อขาย อีเบย์):

โมดูล DS1302เชื่อมต่อกับรถบัส 3-Wire- หากต้องการใช้โมดูลนี้ร่วมกับ อาร์ดูโน่ห้องสมุดได้รับการพัฒนา iarduino_RTC (จาก iarduino.ru).

บอร์ดพร้อมโมดูล DS1302มีพินห้าพินที่ฉันเชื่อมต่อกับพินบอร์ด อาร์ดูโน่ นาโน:

บทสรุป อาร์ทีซี วีซีซี จีเอ็นดี พ.ศ ซีแอลเค ดีเอที
บทสรุป อาร์ดูโน่ 5V จีเอ็นดี D2 D1 D0

เพื่อรักษาการอ่านนาฬิกาให้ถูกต้องเมื่อปิดเครื่อง ฉันจึงใส่แบตเตอรี่เข้าไปในช่องบนบอร์ด CR2032.

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

การถ่ายโอนข้อมูลไปยังคอมพิวเตอร์และทำงานผ่านโปรโตคอล MQTT

เพื่อถ่ายโอนข้อมูลผ่านการเชื่อมต่อแบบอนุกรมไปยัง อาร์ดูโน่เชื่อมต่อ ยูเอสบี-ยูอาร์ทีตัวแปลง:

บทสรุป อาร์ดูโน่ใช้ในการส่งข้อมูลในรูปแบบ 8N1(8 บิตข้อมูล ไม่มีพาริตี 1 บิตหยุด) ที่ 9600 bps ข้อมูลจะถูกส่งเป็นแพ็กเก็ต โดยมีความยาวแพ็กเก็ต 4 ตัวอักษร การถ่ายโอนข้อมูลดำเนินการใน " บิตปังโหมด " โดยไม่ต้องใช้ฮาร์ดแวร์ พอร์ตอนุกรม อาร์ดูโน่.

รูปแบบข้อมูลที่ส่ง:

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

มคต

โกลังแอปพลิเคชันไคลเอ็นต์โปรโตคอล มคตส่งข้อมูลที่ได้รับจากสถานีตรวจอากาศไปยังเซิร์ฟเวอร์ ( มคต-นายหน้า) :

บริการ ช่วยให้คุณสร้างบัญชีได้ฟรี แผนภาษี "" (จำกัด: 10 การเชื่อมต่อ, 10 Kb/s):

คุณสามารถใช้เพื่อตรวจสอบการอ่านสถานีตรวจอากาศได้ หุ่นยนต์-แอปพลิเคชัน :

โภชนาการ

เพื่อขับเคลื่อนสถานีตรวจอากาศที่ฉันใช้ ที่ชาร์จจากเก่า โทรศัพท์มือถือ โมโตโรล่าสร้างแรงดันไฟ 5 V กระแสสูงสุด 0.55 A และต่อเข้ากับหน้าสัมผัส 5V(+) และ จีเอ็นดี (-):

คุณยังสามารถใช้แบตเตอรี่ขนาด 9 โวลต์ที่เชื่อมต่อกับหน้าสัมผัสเพื่อจ่ายไฟได้ วิน(+) และ จีเอ็นดี (-).

การดำเนินงานของสถานีตรวจอากาศ

เมื่อเริ่มต้น เซ็นเซอร์จะถูกเตรียมใช้งานและทดสอบ

ในกรณีที่ไม่มีเซ็นเซอร์ DS18x20ข้อผิดพลาด "E1" ปรากฏขึ้นเมื่อไม่มีเซ็นเซอร์ - ข้อผิดพลาด "E3"

จากนั้นวงจรการทำงานของสถานีตรวจอากาศจะเริ่มต้นขึ้น:

  • การวัดและแสดงอุณหภูมิภายนอก
  • การวัดและการแสดงอุณหภูมิห้อง
  • การวัดและการแสดงความดันบรรยากาศและแนวโน้ม
  • การวัดและการแสดงความชื้นสัมพัทธ์ในอากาศ
  • การแสดงเวลาปัจจุบัน
  • การแสดงข้างขึ้นข้างแรมและวันจันทรคติ


วิดีโอการทำงานของสถานีตรวจอากาศของฉันมีอยู่ในของฉัน -channel: https://youtu.be/vVLbirO-FVU

แสดงอุณหภูมิ

เมื่อวัดอุณหภูมิ จะแสดงตัวเลขอุณหภูมิสองหลัก และสำหรับอุณหภูมิลบจะมีเครื่องหมายลบ (โดยมีสัญลักษณ์องศาอยู่ที่หลักขวาสุด)
สำหรับอุณหภูมิภายนอก เครื่องหมายองศาจะแสดงที่ด้านบน:


สำหรับอุณหภูมิห้อง - ต่ำกว่า:

จอแสดงผลความดัน

เมื่อวัดความดันจะแสดงความดันสามหลักเป็น mmHg (มีสัญลักษณ์ " " ในตำแหน่งที่ถูกต้องสุด):

หากความดันลดลงอย่างรวดเร็ว ให้ใช้สัญลักษณ์แทน " “สัญลักษณ์ทางด้านขวาสุดปรากฏขึ้น” “ถ้ามันโตเร็วขนาดนั้น” ชม" เกณฑ์สำหรับความคมชัดของการเปลี่ยนแปลงคือ 8 มม. ปรอทใน 8 ชั่วโมง:

เนื่องจากสถานีตรวจอากาศของฉันแสดงความกดอากาศสัมบูรณ์ ( คิวเอฟอี) จากนั้นการอ่านกลับกลายเป็นว่าประเมินต่ำเกินไปเมื่อเทียบกับข้อมูลในรายงาน เมต้า(ซึ่งให้ คิวเอ็นเอช) (14 UTC วันที่ 28 มีนาคม 2018):

อัตราส่วนความดัน (ตาม เอทิส) มีจำนวน $(1,015 \over 998) = $1.017 ระดับความสูงของสนามบินโกเมล (รหัส ICAO อืม) เหนือระดับน้ำทะเล 143.6 ม. อุณหภูมิตามมาตรฐาน ATIS คือ 1 ° .

ค่าที่อ่านได้จากสถานีตรวจอากาศของฉันเกือบจะใกล้เคียงกับความกดดันสัมบูรณ์ คิวเอฟอีตามข้อมูล เอทิส!

ความดันสูงสุด/ต่ำสุด ( คิวเอฟอี) ซึ่งบันทึกโดยสถานีตรวจอากาศของฉันตลอดระยะเวลาการสังเกต:

จอแสดงผลความชื้นสัมพัทธ์

ความชื้นสัมพัทธ์ในอากาศจะแสดงเป็นเปอร์เซ็นต์ (สัญลักษณ์เปอร์เซ็นต์จะแสดงเป็นตัวเลขด้านขวาสองหลัก):

แสดงเวลาปัจจุบัน

เวลาปัจจุบันจะแสดงบนตัวบ่งชี้ในรูปแบบ "HH:MM" โดยมีโคลอนแยกจะกะพริบหนึ่งครั้งต่อวินาที:

การแสดงข้างขึ้นข้างแรมและวันข้างขึ้นข้างแรม

ตัวเลขสองหลักแรกแสดงข้างขึ้นข้างแรมปัจจุบัน และอีกสองหลักถัดไปคือวันจันทรคติปัจจุบัน:

ดวงจันทร์มีแปดระยะ (ระบุชื่อภาษาอังกฤษและรัสเซีย (สีน้ำเงิน - ไม่ถูกต้อง)):

เฟสจะแสดงบนตัวบ่งชี้ตามรูปสัญลักษณ์:

เฟส รูปสัญลักษณ์
เคียวที่กำลังเติบโต (เสี้ยว)
เคียวข้างแรม (เสี้ยว)

การถ่ายโอนข้อมูลไปยังคอมพิวเตอร์

หากคุณเชื่อมต่อสถานีตรวจอากาศด้วย ยูเอสบี-ยูอาร์ทีตัวแปลง (ตัวอย่างเช่น อิงจากไมโครวงจร ซีพี2102) เชื่อมต่อกับ ยูเอสบี- พอร์ตคอมพิวเตอร์ คุณสามารถใช้โปรแกรมเทอร์มินัลเพื่อดูข้อมูลที่ส่งโดยสถานีตรวจอากาศ:

ฉันพัฒนาด้วยภาษาโปรแกรม โกลังโปรแกรมที่เก็บบันทึกการสังเกตสภาพอากาศและส่งข้อมูลไปยังบริการ และสามารถดูได้ที่ หุ่นยนต์-สมาร์ทโฟนที่ใช้แอพพลิเคชั่น :

ตามบันทึกการสังเกตสภาพอากาศ คุณสามารถสร้างกราฟการเปลี่ยนแปลงของความกดอากาศได้ เช่น
ตัวอย่างกราฟที่มีแรงกดต่ำสุดที่เห็นได้ชัดเจน


ตัวอย่างกราฟที่มีความกดดันเพิ่มขึ้นเล็กน้อย

การปรับปรุงตามแผน:

  • เพิ่มเซ็นเซอร์ทิศทางลมและความเร็ว

ในสถานีตรวจอากาศ เครื่องวัดความเร็วลมสามถ้วย (1) ใช้ในการวัดความเร็วลม และใช้ใบพัดตรวจอากาศ (2) เพื่อกำหนดทิศทางลม:

ใช้ในการวัดความเร็วลมด้วย เครื่องวัดความเร็วลมแบบลวดร้อน(ภาษาอังกฤษ) เครื่องวัดความเร็วลมแบบลวดร้อน- ในฐานะที่เป็นลวดให้ความร้อนคุณสามารถใช้ไส้หลอดทังสเตนจากหลอดไฟที่มีกระจกแตกได้ ในเครื่องวัดความเร็วลมแบบลวดร้อนที่ผลิตในอุตสาหกรรม เซ็นเซอร์มักจะติดตั้งอยู่บนท่อยืดไสลด์:

หลักการทำงานของอุปกรณ์นี้คือความร้อนจะถูกลบออกจากองค์ประกอบความร้อนเนื่องจากการพาความร้อนโดยการไหลของอากาศ - ลม ในกรณีนี้ ความต้านทานของเส้นใยจะถูกกำหนดโดยอุณหภูมิของเส้นใย กฎแห่งการเปลี่ยนแปลงความต้านทานของไส้หลอด $R_T$ ขึ้นอยู่กับอุณหภูมิ $T$ มีรูปแบบ:
$R_T = R_0 \cdot (1 + (\alpha \cdot (T - T_0)))$ ,
โดยที่ $R_0$ คือความต้านทานของไส้หลอดที่อุณหภูมิ $T_0$, $\alpha$ คือค่าสัมประสิทธิ์อุณหภูมิของความต้านทาน (สำหรับทังสเตน $\alpha = 4.5\cdot(10^(-3) (^(\circ)( ค^( -1))))$)

เมื่อความเร็วการไหลของอากาศเปลี่ยนแปลง อุณหภูมิจะเปลี่ยนไปตามกระแสไส้หลอดคงที่ (เครื่องวัดความเร็วลมด้วย ดี.ซี, ภาษาอังกฤษ ซีซีเอ- หากอุณหภูมิขององค์ประกอบความร้อนคงที่ กระแสไฟฟ้าที่ไหลผ่านองค์ประกอบจะเป็นสัดส่วนกับความเร็วของการไหลของอากาศ (เครื่องวัดความเร็วลมอุณหภูมิคงที่ ภาษาอังกฤษ) ซีทีเอ).

ที่จะดำเนินต่อไป

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

ในกระบวนการสร้างผลิตภัณฑ์โฮมเมดเราจะต้อง:

Arduino UNO (หรือบอร์ดที่รองรับ Arduino อื่น ๆ )
- หน้าจอกราฟิก WG12864B
- เซ็นเซอร์อุณหภูมิ ds18b20 2 ชิ้น
- แหล่งจ่ายไฟ 6 – 12 V
- ตัวต้านทาน 4.7 Kom 0.25 W, 2 ชิ้น
- ตัวต้านทาน 100 โอห์ม 0.25 W
- ช่องใส่แบตเตอรี่สำหรับแบตเตอรี่ AAA “พิ้งกี้” จำนวน 4 ก้อน
- กล่องตลับ SEGA
- เทปพันสายไฟ
- การต่อสายไฟ
- แผงวงจร
- ปุ่ม
- มีดเครื่องเขียน
- หัวแร้ง
- บัดกรีขัดสน
- เทปสองหน้า

ขั้นตอนที่ 1 เตรียม WG12864B3.
ผู้ที่ไม่เคยทำงานกับหน้าจอมาก่อนอาจรู้สึกหวาดกลัวกับการดัดแปลงหน้าจอที่ดูเหมือนเหมือนกันจำนวนมาก ให้ฉันอธิบายเล็กน้อย หน้าจอประเภทนี้ส่วนใหญ่ทำงานบนชิป ks0107/ks0108 หน้าจอทั้งหมดสามารถแบ่งออกเป็น 4 ประเภท:

ตัวเลือก A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T

ตัวเลือก B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ แสดง AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, 4F, 2, 12864J-1

ตัวเลือก C: เซินเจิ้น Jinghua Displays Co Ltd. JM12864

ตัวเลือก D: Wintek-Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS19264/HD61202

พวกเขาดูเกือบจะเหมือนกัน แต่หมุดเชื่อมต่อนั้นแตกต่างกัน ฉันเลือกและแนะนำให้คุณ WG12864B3 V2.0 แต่หากหน้าจอที่คุณได้รับแตกต่างออกไปหรือคุณไม่มีหน้าจอในมือ คุณสามารถค้นหาได้อย่างง่ายดายโดยใช้ตาราง:

ลักษณะโดยย่อ:

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

สำหรับการเชื่อมต่อแบบอนุกรมที่เราจะใช้ แผนภาพจะเป็นดังนี้:

WG12864B – Arduino UNO 1 (GND) – GND 2 (VCC) – +5V 4 (RS) – 10 5 (R/W) – 11 6 (E) – 13 15 (PSB) – GND 19 (BLA) – ผ่านตัวต้านทาน 100 โอห์ม - +5V 20 (BLK) – GND

หากต้องการปรับคอนทราสต์ จะต้องมีโพเทนชิออมิเตอร์บนหน้าจอ มีหน้าจอที่ไม่มีมัน แต่ตอนนี้หายากแล้ว:

จำเป็นต้องใช้ตัวต้านทาน 100 โอห์มเพื่อให้แรงดันไฟฟ้า 5 โวลต์ไม่ทำให้ไดโอดแบ็คไลท์ไหม้โดยไม่ตั้งใจ

ขั้นตอนที่ 2 การสร้างร่างกาย
สำหรับเคสนี้ ให้นำกล่องจากตลับคอนโซล Sega หากคุณไม่พบกล่องนี้ คุณสามารถใช้กรณีอื่นได้ สิ่งสำคัญคือหน้าจอและ Arduino พอดี

ตัดฟิล์มใสที่ด้านบนของกล่องออกเพื่อไม่ให้เหลือชิ้น:

จากนั้นใช้มีดอเนกประสงค์ตัดหน้าต่างขนาด 37x69 สำหรับหน้าจอออก

ที่ด้านหลังตามขอบของช่องเจาะเราใช้เทปกาวสองหน้าโดยควรเป็นสีดำ:

เรานำกระดาษป้องกันออกจากเทปแล้วติดหน้าจอของเราไว้:

จากภายนอกควรมีลักษณะดังนี้:

ด้านล่างหน้าจอด้วยเทปสองหน้าเราจึงติด Arduino โดยที่เคยทำการตัดมาก่อนหน้านี้ พอร์ต USBและปลั๊กไฟ:

ต้องทำช่องเจาะสำหรับซ็อกเก็ต Arduino ทั้งสองด้านของกล่องเพื่อให้สามารถปิดได้อย่างอิสระ:

ขั้นตอนที่ 3 เซ็นเซอร์อุณหภูมิ
เราจะใช้เซนเซอร์วัดอุณหภูมิแบบดิจิตอล DS18B20 การใช้เครื่องมือนี้ทำให้เราได้รับความแม่นยำในการวัดมากขึ้น โดยมีข้อผิดพลาดไม่เกิน 0.5 °C ในช่วงอุณหภูมิกว้าง -55 ... + 125 °C นอกจากนี้เซ็นเซอร์ยังเป็นดิจิทัลและทำการคำนวณทั้งหมดเองและ Arduino ก็รับการอ่านแบบสำเร็จรูป เมื่อเชื่อมต่อเซ็นเซอร์นี้ อย่าลืมตัวต้านทานแบบดึงขึ้นพิกัด 4.7 KOhm ระหว่างหน้าสัมผัส DQ และ VDD มีตัวเลือกการเชื่อมต่อหลายแบบให้เลือก ด้วยอำนาจภายนอกในความคิดของฉัน ตัวเลือกที่ดีที่สุดเราจะใช้มัน:

สำหรับตัวเลือกแหล่งจ่ายไฟใดๆ เซ็นเซอร์จะเชื่อมต่อแบบขนาน:

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

เราเชื่อมต่อสายไฟทั่วไปจากทั้งสองปุ่มเข้ากับ GND เชื่อมต่อสายไฟจากปุ่มแรกไปที่ A0 จากปุ่มที่สองถึง A1
เราติดมันด้วยเทปสองหน้าติดกับ Arduino:

ควรเลือกเซ็นเซอร์ที่ควรวางไว้นอกห้องในตัวเรือนโลหะ กันฝุ่น และกันน้ำ:

คำนวณสายไฟตามความยาวที่ต้องการเพื่อให้คุณสามารถแขวนเซ็นเซอร์ไว้นอกหน้าต่างได้ สิ่งสำคัญคือต้องไม่เกิน 5 เมตร หากคุณต้องการความยาวที่ยาวกว่านี้ คุณจะต้องลดค่าของการดึงขึ้น ตัวต้านทาน

เราเชื่อมต่อสายไฟจากบัสข้อมูล DQ ของเซ็นเซอร์ทั้งสองตัวเข้ากับขา 5 ของ Arduino
Vdd - +5 Arduino
GND - GND Arduino

ขั้นตอนที่ 4 โภชนาการ
สำหรับแหล่งจ่ายไฟ คุณสามารถใช้แหล่งจ่ายไฟที่มีแรงดันไฟฟ้า 6 ถึง 12 โวลต์ ที่ปลายสายไฟให้บัดกรีปลั๊กที่เหมาะกับปลั๊กไฟ Arduino:

หรือคุณสามารถวางช่องใส่แบตเตอรี่ไว้ในกล่องใส่แบตเตอรี่ AAA สี่ก้อนได้ และเชื่อมต่อสายบวกจากช่องเข้ากับ Vin Arduino และสายลบเข้ากับ GND

ขั้นตอนที่ 5 เตรียมสภาพแวดล้อมการเขียนโปรแกรม
ก่อนอื่นคุณต้องดาวน์โหลดและติดตั้ง Arduino IDE จากเว็บไซต์อย่างเป็นทางการ

และยังเพิ่มไลบรารีสองแห่งที่จำเป็นสำหรับการร่างภาพด้วย OneWire - จำเป็นสำหรับการสื่อสารกับเซ็นเซอร์ ds18b20:

U8glib – ใช้เพื่อแสดงข้อมูลบนหน้าจอ:

กำลังดาวน์โหลดไลบรารี่ จากนั้นเราจะแตกไฟล์เก็บถาวรและย้ายเนื้อหาของไฟล์เก็บถาวรไปยังโฟลเดอร์ "ไลบรารี" ซึ่งอยู่ในโฟลเดอร์ที่ติดตั้ง Arduino IDE คุณยังสามารถเพิ่มไลบรารีผ่าน Arduino IDE ได้ หากต้องการทำสิ่งนี้โดยไม่ต้องคลายไฟล์เก็บถาวรให้เปิด Arduino IDE แล้วเลือก Sketch - เชื่อมต่อไลบรารีจากเมนู ที่ด้านบนสุดของรายการแบบเลื่อนลง ให้เลือก “ไลบรารี Add.Zip” เราระบุตำแหน่งของไฟล์เก็บถาวรที่ดาวน์โหลด หลังจากทำตามขั้นตอนทั้งหมดแล้ว คุณต้องรีสตาร์ท Arduino IDE

ขั้นตอนที่ 6 การแก้ไขร่าง
เซ็นเซอร์วัดอุณหภูมิทำงานโดยใช้โปรโตคอล One Wire และมี ที่อยู่ที่ไม่ซ้ำกันสำหรับแต่ละอุปกรณ์ - รหัส 64 บิต ไม่แนะนำให้เพิ่มคำสั่งค้นหาเซ็นเซอร์ลงในแบบร่าง ไม่จำเป็นต้องโหลด Arduino ทุกครั้งที่เซ็นเซอร์เกิดอาการสะอึก ดังนั้นก่อนอื่นเมื่อรวบรวมทุกอย่างเข้าด้วยกันแล้วจึงอัปโหลดภาพร่างลงใน Arduino ซึ่งอยู่ในเมนู ไฟล์ - ตัวอย่าง - อุณหภูมิดัลลาส - OneWireSearch จากนั้นเปิดเครื่องมือ - Port Monitor Arduino จะต้องค้นหาเซ็นเซอร์ของเรา เขียนที่อยู่ และการอ่านอุณหภูมิ ที่อยู่เหล่านี้จำเป็นต้องเขียนหรือคัดลอกไว้ที่ใดที่หนึ่ง ตอนนี้เปิดภาพร่าง Ard_Tic_Tak_WG12864B_2_x_Term_Serial แล้วมองหาบรรทัด:

ไบต์ addr1=(0x28, 0xFF, 0x75, 0x4E, 0x87, 0x16, 0x5, 0x63); // ที่อยู่ภายใน ไบต์ addr2=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97); // ที่อยู่ภายนอก เซ็นเซอร์

เราแทนที่ที่อยู่ของตำแหน่งเซ็นเซอร์ที่เกี่ยวข้องด้วยที่อยู่ของเรา
นาฬิกาของเราไม่ได้ใช้โมดูล RTC (นาฬิกาเรียลไทม์) ดังนั้นจึงจำเป็นต้องปรับอัตรานาฬิกา เพื่อความสะดวก ให้ยกเลิกการใส่เครื่องหมายบรรทัด (วินาทีจะปรากฏบนหน้าจอ):

//u8g.setPrintPos(44, 50); u8g.print(วินาที); // ส่งออกวินาทีเพื่อควบคุมความถูกต้องของการเคลื่อนไหว

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

หากนาฬิกาเร่งรีบ เราจะเปลี่ยนค่าให้มากขึ้น ฉันแนะนำให้ทดลองเพิ่มทีละ 100 หน่วย หากฉันล้าหลัง ฉันควรลดค่าในบรรทัด:

ถ้า (micros() - prevmicros >494000) ( // เปลี่ยนเป็นอย่างอื่นเพื่อแก้ไขให้ถูกต้องคือ 500000

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

ฉันอยากมีสถานีตรวจอากาศเป็นของตัวเอง ซึ่งจะส่งการอ่านค่าจากเซ็นเซอร์ไปยังแผนที่ตรวจสอบสาธารณะ (ค้นหาบน Google ใน 5 วินาที) ปรากฎว่ามันไม่ยากอย่างที่คิด มาดูกันว่าได้ทำอะไรไปบ้าง

สำหรับ ของการกระทำนี้ฉันเอามันไปเอง อาร์ดูโน่ อูโน่และ Ethernet Shield w5100 สำหรับมัน ทั้งหมดนี้สั่งจากจีนใน Aliexpress

ฉันยังสั่งเซ็นเซอร์ที่นั่นด้วย: DHT22, DHT11, DS18B20, BMP280 (มีการวางแผนเซ็นเซอร์ก๊าซและควันด้วย...)

หลังจากค้นหาฟอรัม, Google, Yandex ฉันพบร่างเวอร์ชันที่ดี - https://student-proger.ru/2014/11/meteostanciya-2-1/

ในความคิดเห็นมีคนโพสต์ภาพร่างที่เสร็จสมบูรณ์พร้อมเซ็นเซอร์แสงและก๊าซ ฉันเอาพวกมันมาเป็นพื้นฐาน

ในภาพร่างเหล่านั้นไม่มีการรองรับเซ็นเซอร์ความดันที่ 280 เราได้พูดคุยกับผู้เขียนเขาแทนที่ 180 ด้วย 280 ทุกอย่างทำงานได้อย่างสมบูรณ์แบบ (ขอบคุณเขามากสำหรับสิ่งนี้)

ด้านล่างนี้เป็นตัวอย่างของภาพร่างสุดท้ายที่ฉันคิดขึ้นมา

ใน ในขณะนี้ฉันได้เชื่อมต่อเซ็นเซอร์แล้ว:
DHT22 - 1 ชิ้น
DHT11 - 1 ชิ้น
BMP280 - 1 ชิ้น
DS18B20 - 2 ชิ้น

ความสนใจ! ก่อนอัพโหลดภาพร่างอย่าลืมเปลี่ยนที่อยู่ MAC ของอุปกรณ์เพื่อไม่ให้รบกวนผู้อื่น (เช่น นำที่อยู่ Mac ของโทรศัพท์มือถือของคุณไปเปลี่ยนตัวอักษร/ตัวเลขตัวสุดท้ายในนั้น ซึ่งจะไม่ “รบกวน” ” เครือข่ายท้องถิ่นของคุณ!

แผนภาพการเชื่อมต่อโดยประมาณ (ภาพที่ถ่ายจากภาพร่างนี้บนอินเทอร์เน็ต):

ด้วยเหตุผลทางเทคนิค ฉันไม่สามารถโพสต์ภาพร่างโดยตรงที่นี่ได้ ฉันใส่มันไว้ในเอกสารสำคัญ ลิงค์ไปอยู่ในบรรทัดด้านบน

อย่างที่คุณเห็น มีการอ่านค่าและมันทำงานอย่างถูกต้อง ตัวอย่างเช่น ฉันจะโพสต์ภาพหน้าจอสองสามภาพจากเซ็นเซอร์ของฉัน:

ขอแนะนำให้ดาวน์โหลดเฟิร์มแวร์ก่อนเชื่อมต่อส่วนประกอบเพื่อให้แน่ใจว่าบอร์ดใช้งานได้ หลังจากประกอบแล้วคุณสามารถแฟลชได้อีกครั้งบอร์ดควรจะกระพริบอย่างราบรื่น ในโครงการที่มีผู้บริโภคที่ทรงพลังในวงจรจ่ายไฟของบอร์ด 5V (ระบุแอดเดรสได้ แถบนำ,เซอร์โว,มอเตอร์ ฯลฯ) จำเป็นต้องจ่ายไฟ 5V ภายนอกเข้าวงจรก่อน กำลังเชื่อมต่อ Arduinoไปยังคอมพิวเตอร์ เนื่องจาก USB จะไม่จ่ายกระแสไฟที่ต้องการ เช่น เทปต้องการ นี่อาจทำให้ไดโอดป้องกันบนบอร์ด Arduino ไหม้ได้ คำแนะนำในการดาวน์โหลดและอัพโหลดเฟิร์มแวร์อยู่ใต้สปอยเลอร์ในบรรทัดถัดไป

เนื้อหาของโฟลเดอร์ในไฟล์เก็บถาวร

  • ห้องสมุด– ห้องสมุดโครงการ แทนที่เวอร์ชันที่มีอยู่
  • เฟิร์มแวร์– เฟิร์มแวร์สำหรับ Arduino
  • แผนงาน– แผนภาพการเชื่อมต่อส่วนประกอบ

นอกจากนี้

  • จากการทดลองพบว่าเซ็นเซอร์อุณหภูมิด้านนอกเคสแสดงน้อยกว่าด้านใน 0.5 องศา! จำเป็นต้องจัดเรียงอุปกรณ์อิเล็กทรอนิกส์ กำจัด และป้องกันความร้อนจากองค์ประกอบความร้อน...

  • หากจอแสดงผลสลัวเกินไป/บนพื้นหลังสีขาว
    มีปุ่มปรับคอนทราสต์บนบอร์ดไดรเวอร์จอแสดงผล (ซึ่งต่อสายไฟไว้) ด้วยความช่วยเหลือคุณสามารถปรับคอนทราสต์ให้เป็นค่าที่ต้องการได้ นอกจากนี้ คอนทราสยังขึ้นอยู่กับมุมมองของจอแสดงผล (เป็น LCD) และคุณสามารถตั้งค่าให้จอแสดงผลแสดงได้ชัดเจนแม้ในมุม "การแสดงผลที่ระดับสะดือ มองจากด้านบน" และความเปรียบต่างนั้นขึ้นอยู่กับแหล่งจ่ายไฟอย่างมาก: จาก 5V จอแสดงผลจะแสดงได้ชัดเจนและสว่างที่สุดเท่าที่จะเป็นไปได้ในขณะที่เมื่อขับเคลื่อนจาก USB ผ่าน Arduino แรงดันไฟฟ้าจะอยู่ที่ประมาณ 4.5V (ส่วนหนึ่งตกอยู่ที่ไดโอดป้องกันตามสาย USB ) และจอแสดงผลไม่สว่างอีกต่อไป ปรับเอาต์พุตโดยใช้ปุ่มหมุนที่มีแหล่งจ่ายไฟภายนอกตั้งแต่ 5V!

  • หากเซ็นเซอร์ CO2 ทำงานไม่ถูกต้อง (ข้อมูลจาก Evgeniy Ivanov)
    มีภาพร่างสำหรับการสอบเทียบอยู่ในโฟลเดอร์ไลบรารีเซ็นเซอร์ตามตัวอย่าง นอกจากนี้ยังสามารถเริ่มต้นด้วยการลัดวงจรขั้วต่อ "HD" ลงกราวด์เป็นเวลา 7+ วินาทีแบบสุ่มสี่สุ่มห้า
    แน่นอน คุณไม่จำเป็นต้องทำสิ่งนี้ขณะอยู่ข้างนอกท่ามกลางอากาศเย็น... คุณเพียงแค่เติมอากาศบริสุทธิ์ลงในขวดโดยมีเซ็นเซอร์อยู่ข้างในแล้วปิดผนึก การสอบเทียบใช้เวลาอย่างน้อย 20 นาที
    ตามค่าเริ่มต้น เซ็นเซอร์จะมาพร้อมกับการสอบเทียบอัตโนมัติที่เปิดอยู่ ซึ่งเกิดขึ้นทุกวัน และหากใช้เซ็นเซอร์ในห้องที่ไม่มีอากาศถ่ายเท การสอบเทียบนี้จะย้ายค่าที่เกินมาตรฐานอย่างรวดเร็ว จึงต้องปิดการใช้งาน
    เอกสารประกอบ

  • การสอบเทียบเซ็นเซอร์อัตโนมัติ CO2 ถูกปิดการใช้งานในร่าง!

  • ถ้าคุณมี เซ็นเซอร์ BME280 ไม่ทำงานเป็นไปได้มากว่าที่อยู่ของเขาจะแตกต่างออกไป โปรเจ็กต์ใช้ไลบรารี Adafruit_BME280 ซึ่งไม่มีฟังก์ชันแยกต่างหากสำหรับการเปลี่ยนที่อยู่ ดังนั้นที่อยู่จึงถูกตั้งค่าด้วยตนเองในไฟล์ไลบรารี Adafruit_BME280.h เกือบจะอยู่ที่จุดเริ่มต้นของไฟล์ ( อยู่ในโฟลเดอร์ Adafruit_BME280 ในโฟลเดอร์ไลบรารีของคุณ คุณควรติดตั้งไว้ที่นั่น) โมดูลของฉันมีที่อยู่ 0x76 ฉันจะค้นหาที่อยู่ของโมดูล BME280 ของฉันได้อย่างไร มีภาพร่างพิเศษที่เรียกว่าเครื่องสแกน i2c คุณ google ก็ได้ คุณก็ทำได้ คุณฉายภาพร่างนี้ เปิดพอร์ตและรับรายการที่อยู่ของอุปกรณ์ที่เชื่อมต่อกับบัส i2c เพื่อให้โมดูลอื่นๆ ไม่รบกวนคุณ คุณสามารถปิดการใช้งานโมดูลเหล่านั้นและเหลือไว้เพียง BME280 เท่านั้น เราระบุที่อยู่ที่ได้รับในห้องสมุด บันทึกไฟล์ และโหลดเฟิร์มแวร์ของนาฬิกาสภาพอากาศ ทั้งหมด!

  • หากนาฬิกาเดินช้าปัญหาน่าจะอยู่ที่แหล่งจ่ายไฟของวงจรมากที่สุด หากปัญหาไม่หายไปเมื่อคุณเปลี่ยนแหล่งจ่ายไฟเป็นแหล่งจ่ายไฟที่ดีกว่า ให้ติดตัวเก็บประจุเพื่อจ่ายไฟให้กับโมดูล RTC (บัดกรีเข้ากับบอร์ดโดยตรงที่ VCC และ GND): เซรามิกเสมอ 0.1-1 µF (ทำเครื่องหมาย 103 หรือ 104 , ดูตารางการทำเครื่องหมาย) คุณยังสามารถจ่ายอิเล็กโทรไลต์ได้ (6.3V, 47-100 uF)

การตั้งค่าเฟิร์มแวร์

#define RESET_CLOCK 0 // รีเซ็ตนาฬิกาในขณะที่กำลังโหลดเฟิร์มแวร์ (สำหรับโมดูลที่มีแบตเตอรี่แบบถอดไม่ได้) อย่าลืมใส่ 0 แล้วแฟลชอีกครั้ง! #define SENS_TIME 30000 // อัปเดตเวลาการอ่านเซ็นเซอร์บนหน้าจอ มิลลิวินาที #define LED_MODE 0 // ประเภท LED RGB: 0 - แคโทดหลัก, 1 - แอโนดหลัก #define LED_BRIGHT 255 // ความสว่าง LED CO2 (0 - 255) # กำหนด BLUE_YELLOW 1 // สีเหลืองแทนที่จะเป็นสีน้ำเงิน (1 ใช่, 0 ไม่ใช่) แต่เนื่องจากคุณสมบัติการเชื่อมต่อสีเหลืองจึงไม่สว่างนัก #define DISP_MODE 1 // แสดงผลที่มุมขวาบน: 0 - ปี, 1 - วัน ของสัปดาห์ 2 - วินาที #define WEEK_LANG 1 // ภาษาของวันในสัปดาห์: 0 - อังกฤษ, 1 - รัสเซีย (ทับศัพท์) #define DEBUG 0 // แสดงบันทึกการเริ่มต้นเซ็นเซอร์เมื่อเริ่มต้น #define PRESSURE 1 // 0 - กราฟความดัน, 1 - กราฟพยากรณ์ฝน (แทนความกดดัน) อย่าลืมปรับขีดจำกัดกราฟ // แสดงขีดจำกัดของกราฟ #define TEMP_MIN 15 #define TEMP_MAX 35 #define HUM_MIN 0 #define HUM_MAX 100 #define PRESS_MIN -100 #define PRESS_MAX 100 #define CO2_MIN 300 #define CO2_MAX 2000

วันหนึ่ง ขณะเดินไปรอบๆ เมือง ฉันเห็นร้านอุปกรณ์วิทยุอิเล็กทรอนิกส์แห่งใหม่เปิดขึ้น พอเข้าไปก็เจอโล่สำหรับ Arduino เยอะมาก เพราะ... ฉันมี Arduino Uno และ Arduino Nano ที่บ้าน และไอเดียนี้ก็มาเล่นกับเครื่องส่งสัญญาณจากระยะไกลทันที ฉันตัดสินใจซื้อเครื่องส่งและตัวรับสัญญาณที่ถูกที่สุดที่ 433 MHz:

เครื่องส่งสัญญาน.


เครื่องรับสัญญาณ.

เมื่อเขียนร่างการส่งข้อมูลอย่างง่าย (ตัวอย่างที่นำมาจากที่นี่) ปรากฎว่าอุปกรณ์ส่งสัญญาณอาจค่อนข้างเหมาะสำหรับการส่งข้อมูลอย่างง่าย เช่น อุณหภูมิ ความชื้น

เครื่องส่งสัญญาณมีลักษณะดังต่อไปนี้:
1. รุ่น: MX-FS - 03V
2. ระยะ (ขึ้นอยู่กับการมีวัตถุขวางกั้น): 20-200 เมตร
3. แรงดันไฟฟ้า: 3.5 -12V
4. ขนาดโมดูล: 19 * 19 มม
5. การปรับสัญญาณ: น
6. กำลังส่ง: 10mW
7. ความถี่: 433 เมกะเฮิรตซ์
8. ความยาวที่ต้องการของเสาอากาศภายนอก: 25 ซม
9. เชื่อมต่อง่าย (เพียงสามสายเท่านั้น): DATA ; วีซีซี ; โลก.

รับลักษณะโมดูล:
1. แรงดันไฟฟ้า: DC 5V
2. ปัจจุบัน: 4mA
3.ความถี่ในการทำงาน: 433.92 MHz
4. ความไว: - 105dB
5. ขนาดโมดูล: 30 * 14 * 7 มม
6. จำเป็น เสาอากาศภายนอก: 32 ซม.

อินเทอร์เน็ตบอกว่าช่วงการส่งข้อมูลที่ 2Kb/วินาทีสามารถเข้าถึงได้สูงสุด 150 เมตร ฉันไม่ได้ตรวจสอบด้วยตัวเอง แต่ในอพาร์ทเมนต์สองห้องก็เป็นที่ยอมรับทุกที่

ฮาร์ดแวร์สถานีตรวจอากาศที่บ้าน

หลังจากการทดลองหลายครั้ง ฉันตัดสินใจเชื่อมต่อเซ็นเซอร์อุณหภูมิ ความชื้น และเครื่องส่งสัญญาณเข้ากับ Arduino Nano


เซ็นเซอร์อุณหภูมิ DS18D20 เชื่อมต่อกับ Arduino ดังนี้:

1) GND ไปที่ลบของไมโครคอนโทรลเลอร์
2) DQ ผ่านตัวต้านทานแบบดึงขึ้นลงกราวด์และเพื่อปักหมุด D2 ของ Arduino
3) Vdd ถึง +5V

โมดูลเครื่องส่งสัญญาณ MX-FS - 03V ใช้พลังงาน 5 โวลต์ เอาต์พุตข้อมูล (ADATA) เชื่อมต่อกับพิน D13

เชื่อมต่อกับ Arduino Uno จอ LCDและบารอมิเตอร์ BMP085


แผนภาพการเชื่อมต่อกับ Arduino Uno

ตัวรับสัญญาณเชื่อมต่อกับขา D10

โมดูล BMP085 - เซ็นเซอร์ความดันบรรยากาศแบบดิจิตอล เซ็นเซอร์ช่วยให้คุณวัดอุณหภูมิ ความดัน และความสูงเหนือระดับน้ำทะเลได้ อินเทอร์เฟซการเชื่อมต่อ: I2C แรงดันไฟจ่ายเซ็นเซอร์ 1.8-3.6 V

โมดูลนี้เชื่อมต่อกับ Arduino ในลักษณะเดียวกับอุปกรณ์ I2C อื่นๆ:

  • วีซีซี - วีซีซี (3.3 โวลต์);
  • GND - GND;
  • SCL - ถึงพินอะนาล็อก 5;
  • SDA - เป็นพินอะนาล็อก 4
  • ต้นทุนต่ำมาก
  • กำลังไฟและ I/O 3-5 V
  • การหาค่าความชื้น 20-80% ด้วยความแม่นยำ 5%
  • การตรวจจับอุณหภูมิ 0-50 องศา ด้วยความแม่นยำ 2%
  • ความถี่ในการโพลไม่เกิน 1 Hz (ไม่เกินหนึ่งครั้งทุกๆ 1 วินาที)
  • ขนาด 15.5มม. x 12มม. x 5.5มม
  • 4 พิน ระยะห่างระหว่างพิน 0.1"

DHT มี 4 พิน:

  1. วีซีซี (แหล่งจ่ายไฟ 3-5V)
  2. ข้อมูลออก - ข้อมูลออก
  3. ไม่ได้ใช้
  4. ทั่วไป

เชื่อมต่อกับ D8 ของ Arduino

ส่วนซอฟต์แวร์ของสถานีตรวจอากาศภายในบ้าน

โมดูลส่งสัญญาณจะวัดและส่งอุณหภูมิทุกๆ 10 นาที

ด้านล่างนี้เป็นโปรแกรม:

/* Sketch version 1.0 ส่งอุณหภูมิทุกๆ 10 นาที */ #include #include #include #define ONE_WIRE_BUS 2 // Pin สำหรับเชื่อมต่อเซ็นเซอร์ Dallas OneWire oneWire(ONE_WIRE_BUS); เซ็นเซอร์อุณหภูมิดัลลัส(&oneWire); ที่อยู่อุปกรณ์ภายในเทอร์โมมิเตอร์; การตั้งค่าเป็นโมฆะ (เป็นโมฆะ) ( //Serial.begin(9600); vw_set_ptt_inverted (จริง); // จำเป็นสำหรับ DR3100 vw_setup (2000); // ตั้งค่าอัตรารับส่งข้อมูล (บิต / s) เซ็นเซอร์เริ่มต้น (); ถ้า (! เซ็นเซอร์ .getAddress (ภายในเครื่องวัดอุณหภูมิ 0)); printAddress (ภายในเครื่องวัดอุณหภูมิ); : "); //Serial.println(tempC); // การก่อตัวของข้อมูลสำหรับการส่ง int number = tempC; char symbol = "c"; // สัญลักษณ์บริการสำหรับการพิจารณาว่านี่คือเซ็นเซอร์ String strMsg = "z"; strMsg +=; strMsg += " "; strMsg += " "; strMsg.toCharArray(msg, 255); / รอจนกระทั่งการถ่ายโอนเสร็จสิ้น (200); ; เจ<= 6; j++) { sensors.requestTemperatures(); printTemperature(insideThermometer); delay(600000); } } //Определение адреса void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16); //Serial.print("0"); //Serial.print(deviceAddress[i], HEX); } }

อุปกรณ์รับสัญญาณจะรับข้อมูล วัดความดัน และอุณหภูมิในห้อง และส่งไปยังจอแสดงผล

#include #include จอแอลซีดี LiquidCrystal(12, 10, 5, 4, 3, 2); #รวมเซ็นเซอร์dht11; #กำหนด DHT11PIN 8 #รวม #รวม BMP085 dps = BMP085(); ยาว อุณหภูมิ = 0, ความดัน = 0, ระดับความสูง = 0; การตั้งค่าเป็นโมฆะ() ( Serial.begin(9600); vw_set_ptt_inverted(true); // จำเป็นสำหรับ DR3100 vw_setup(2000); // ตั้งค่าความเร็วในการรับ vw_rx_start(); // เริ่มการตรวจสอบการออกอากาศ lcd.begin (16, 2) ; Wire.begin(); //lcd.setCursor(14,0); //lcd.write(0)); ลูป() ( uint8_t buf; // บัฟเฟอร์สำหรับข้อความ uint8_t buflen = VW_MAX_MESSAGE_LEN ; // ความยาวบัฟเฟอร์ if (vw_get_message(buf, &buflen)) // หากได้รับข้อความ ( // เริ่มการแยกวิเคราะห์ int i; // หากข้อความไม่ได้ส่งถึงเรา ให้ออกถ้า (buf != "z") ( return; ) คำสั่ง char = buf; // คำสั่งอยู่ที่ดัชนี 2 // พารามิเตอร์ตัวเลขเริ่มต้นที่ดัชนี 4 i = 4; // เนื่องจากการส่งข้อมูลเป็นแบบอักขระต่ออักขระ ดังนั้นคุณต้องแปลงชุด ของตัวอักษรเป็นตัวเลข while (buf[i] != " ") ( number *= 10; number += buf[i] - "0"; i++; ) dps.getPressure(&Pressure); (&Altitude); getTemperature(&อุณหภูมิ); //Serial.print(คำสั่ง);

จอแอลซีดีพิมพ์("T =");
จอแอลซีดี setCursor (2,0);
จอแอลซีดีพิมพ์(หมายเลข);
จอแอลซีดี setCursor (5,0);
จอแอลซีดีพิมพ์("P =");

จอแอลซีดีพิมพ์(ความดัน/133.3);

จอแอลซีดีพิมพ์("mmH");

จอแอลซีดีsetCursor(0,1); จอแอลซีดีพิมพ์("T ="); จอแอลซีดี พิมพ์ (อุณหภูมิ * 0.1); จอแอลซีดีพิมพ์("H ="); จอแอลซีดีพิมพ์(เซ็นเซอร์ความชื้น);จอแอลซีดี.บ้าน();//ล่าช้า(2000);
int chk = เซ็นเซอร์อ่าน (DHT11PIN);
สวิตช์ (chk) ( case DHTLIB_OK: //Serial.println("OK"); break; case DHTLIB_ERROR_CHECKSUM: //Serial.println("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: //Serial.println("หมดเวลา error"); break; default: //Serial.println("Unknown error"); break; ) ) )

ป.ล. ในอนาคตฉันวางแผนที่จะเพิ่มสิ่งต่อไปนี้:

1 - เซ็นเซอร์ความชื้นไปยังเครื่องส่งสัญญาณ ทำอัลกอริธึมการส่งข้อมูลใหม่
- เซ็นเซอร์วัดความเร็วและทิศทางลม

- เพิ่มจอแสดงผลอื่นให้กับอุปกรณ์รับ

1 - เซ็นเซอร์ความชื้นไปยังเครื่องส่งสัญญาณ ทำอัลกอริธึมการส่งข้อมูลใหม่
- ถ่ายโอนเครื่องรับและเครื่องส่งสัญญาณไปยังไมโครคอนโทรลเลอร์แยกต่างหาก

ด้านล่างเป็นรูปถ่ายของสิ่งที่เกิดขึ้น:

1 - เซ็นเซอร์ความชื้นไปยังเครื่องส่งสัญญาณ ทำอัลกอริธึมการส่งข้อมูลใหม่
รายชื่อธาตุกัมมันตภาพรังสีการกำหนด1 - เซ็นเซอร์ความชื้นไปยังเครื่องส่งสัญญาณ ทำอัลกอริธึมการส่งข้อมูลใหม่
พิมพ์
สวิตช์ (chk) ( case DHTLIB_OK: //Serial.println("OK"); break; case DHTLIB_ERROR_CHECKSUM: //Serial.println("Checksum error"); break; case DHTLIB_ERROR_TIMEOUT: //Serial.println("หมดเวลา error"); break; default: //Serial.println("Unknown error"); break; ) ) )

อาร์ดูโน่ อูโน่

1 - เซ็นเซอร์ความชื้นไปยังเครื่องส่งสัญญาณ ทำอัลกอริธึมการส่งข้อมูลใหม่
ตัวต้านทานทริมเมอร์ 1 - เซ็นเซอร์ความชื้นไปยังเครื่องส่งสัญญาณ ทำอัลกอริธึมการส่งข้อมูลใหม่
- ถ่ายโอนเครื่องรับและเครื่องส่งสัญญาณไปยังไมโครคอนโทรลเลอร์แยกต่างหาก


 


อ่าน:


ใหม่

วิธีฟื้นฟูรอบประจำเดือนหลังคลอดบุตร:

รหัสโปรโมชั่น Pandao สำหรับคะแนน

รหัสโปรโมชั่น Pandao สำหรับคะแนน

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

การติดตั้ง RAM เพิ่มเติม

การติดตั้ง RAM เพิ่มเติม

“หลักการของการท่องจำตามธรรมชาตินั้นขึ้นอยู่กับการเชื่อมต่อของเส้นประสาทที่สร้างขึ้นในสมอง” Olga Zimnyakova นักประสาทวิทยากล่าว...

จะทำอย่างไรถ้าหูฟังไม่สร้างเสียงบนแล็ปท็อป

จะทำอย่างไรถ้าหูฟังไม่สร้างเสียงบนแล็ปท็อป

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

ไดเรกทอรีไดโอด ไดโอดเรียงกระแสกำลังสูง 220V

ไดเรกทอรีไดโอด ไดโอดเรียงกระแสกำลังสูง 220V

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

ฟีดรูปภาพ อาร์เอสเอส