สารบัญ:

สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: 6 ขั้นตอน (พร้อมรูปภาพ)
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: พาทัวร์ สถานีตรวจวัดอากาศ (Weather Station) 2024, กรกฎาคม
Anonim
สถานีอากาศขนาดเล็กพร้อม Attiny85
สถานีอากาศขนาดเล็กพร้อม Attiny85
สถานีอากาศขนาดเล็กพร้อม Attiny85
สถานีอากาศขนาดเล็กพร้อม Attiny85
สถานีอากาศขนาดเล็กพร้อม Attiny85
สถานีอากาศขนาดเล็กพร้อม Attiny85

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

อันที่จริง ถ้าฉันรวมสองคำสั่งก่อนหน้าฉันเขียน:

2-Wire LCD interface สำหรับ Arduino หรือ Attiny และการรับและส่งข้อมูลระหว่าง Attiny85 (Arduino IDE 1.06) งานส่วนใหญ่ก็เสร็จเรียบร้อยแล้ว ต้องปรับซอฟต์แวร์เพียงเล็กน้อยเท่านั้น

ฉันเลือกโซลูชัน LCD แบบสองสายพร้อม shift register แทนที่จะเป็น I2C LCD เพราะใน Attiny การลงทะเบียน shift นั้นง่ายกว่าบัส I2C อย่างไรก็ตาม… หากคุณต้องการอ่านเซ็นเซอร์ความดัน BMP180 หรือ BMP085 คุณต้องมี I2C สำหรับสิ่งนั้นอยู่แล้ว ดังนั้นคุณอาจใช้ I2C LCD ได้เช่นกัน TinyWireM เป็นห้องสมุดที่ดีสำหรับ I2C บน Attiny (แต่ต้องการพื้นที่เพิ่มเติม)

BOM ตัวส่งสัญญาณ: DHT11 Attiny85 10 k ตัวต้านทาน 433MHz โมดูลตัวส่งสัญญาณ

ตัวรับ Attiny85 10k ตัวต้านทาน 433 MHz โมดูลตัวรับ

จอแสดงผล 74LS164 shift register 1N4148 ตัวต้านทานไดโอด 2x1k ตัวต้านทานตัวแปร 1x1k และจอ LCD 2x16

ขั้นตอนที่ 1: สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง

สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: เครื่องส่ง

ตัวส่งสัญญาณเป็นโครงแบบพื้นฐานของ Attiny85 พร้อมตัวต้านทานแบบดึงขึ้นบนสายรีเซ็ต โมดูลตัวส่งสัญญาณติดอยู่กับพินดิจิตอล '0' และพินข้อมูล DHT11 ติดกับพินดิจิทัล 4.ต่อสายอากาศขนาด 17.2 ซม. เป็นเสาอากาศ (สำหรับเสาอากาศที่ดีกว่ามาก ดูขั้นตอนที่ 5) ซอฟต์แวร์มีดังนี้:

//จะทำงานบน Attiny//RF433=D0 พิน 5

//DHT11=D4 ขา 3 // ไลบรารี #include //จาก Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // ปักหมุดตำแหน่งที่เครื่องส่งสัญญาณของคุณเชื่อมต่อ //ตัวแปรลอย h=0; ลอย t=0; int ส่ง_t = 0; int ส่ง_h = 0; int send_data = 0; การตั้งค่าเป็นโมฆะ () { pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } วงเป็นโมฆะ () { int chk = DHT11.read11 (DHT11PIN); ชั่วโมง=DHT11.ความชื้น; t=DHT11.อุณหภูมิ; // ฉันรู้ ฉันกำลังใช้ตัวแปรจำนวนเต็ม 3 ตัวที่นี่ // โดยที่ฉันสามารถใช้ 1 // แต่นั่นก็เพื่อให้ง่ายต่อการติดตาม send_h=100* (int) h; ส่ง_t=(int) t; send_data=transmit_h+transmit_t; man.transmit(transmit_data); ล่าช้า (500); }

ซอฟต์แวร์ใช้รหัสแมนเชสเตอร์ในการส่งข้อมูล มันอ่าน DHT11 และเก็บอุณหภูมิและความชื้นใน 2 ทุ่นแยกกัน เนื่องจากรหัสแมนเชสเตอร์ไม่ส่งจำนวนลอย แต่เป็นจำนวนเต็ม ฉันจึงมีหลายทางเลือก: 1- แบ่งการลอยตัวเป็นจำนวนเต็มสองตัวแต่ละตัวแล้วส่ง2- ส่งแต่ละทุ่นเป็นจำนวนเต็ม3- ส่งทุ่นสองลอยเป็นจำนวนเต็มเดียวด้วยตัวเลือกที่ 1 ฉันต้องรวม จำนวนเต็มลอยเข้าไปในตัวรับอีกครั้งและฉันต้องระบุว่าจำนวนเต็มใดทำให้รหัสยาวขึ้นด้วยตัวเลือก 2 ฉันยังต้องระบุว่าจำนวนเต็มใดสำหรับความชื้นและอุณหภูมิ ฉันไม่สามารถไปตามลำดับโดยลำพังได้ในกรณีที่จำนวนเต็มหายไปในการส่ง ดังนั้นฉันจะต้องส่งตัวระบุที่แนบมากับจำนวนเต็มด้วยตัวเลือก 3 ฉันสามารถส่งจำนวนเต็มได้เพียงตัวเดียว เห็นได้ชัดว่าสิ่งนี้ทำให้การอ่านค่ามีความแม่นยำน้อยลง - ภายใน 1 องศา- และไม่สามารถส่งอุณหภูมิต่ำกว่าศูนย์ได้ แต่เป็นเพียงรหัสธรรมดาและมีวิธีแก้ไข สำหรับตอนนี้มันเป็นแค่หลักการเท่านั้น ดังนั้นสิ่งที่ฉันทำคือเปลี่ยนจำนวนเต็มเป็นจำนวนเต็มและคูณความชื้นด้วย 100 จากนั้นฉันก็เพิ่มอุณหภูมิให้กับความชื้นที่คูณด้วยความจริงที่ว่าความชื้นจะไม่มีวัน 100% จำนวนสูงสุดที่ฉันจะได้รับคือ 9900 เนื่องจากอุณหภูมิจะไม่สูงกว่า 100 องศา จำนวนสูงสุดจะเป็น 99 ดังนั้นจำนวนสูงสุดที่ฉันจะส่งคือ 9999 และแยกได้ง่ายที่ฝั่งผู้รับแน่นอน การคำนวณของฉันที่ฉันใช้จำนวนเต็ม 3 ตัวนั้นเกินความจริงเพราะสามารถทำได้ง่ายด้วย 1 ตัวแปร ฉันแค่ต้องการทำให้โค้ดติดตามได้ง่ายขึ้น ตอนนี้โค้ดคอมไพล์เป็น:

ขนาดร่างไบนารี: 2, 836 ไบต์ (สูงสุด 8, 192 ไบต์) เพื่อให้พอดีกับ Attiny 45 หรือ 85NOTE ไลบรารี dht.h ที่ฉันใช้คือไลบรารีจาก Rob Tillaart ห้องสมุดนั้นเหมาะสำหรับ DHT22 ด้วย ฉันใช้เวอร์ชัน 1.08 อย่างไรก็ตาม Attiny85 อาจมีปัญหาในการอ่าน DHT22 ด้วยไลบรารีเวอร์ชันที่ต่ำกว่า ฉันได้รับการยืนยันแล้วว่า 1.08 และ 1.14 - แม้ว่าจะทำงานกับ Arduino ปกติก็ตาม แต่ก็มีปัญหาในการอ่าน DHT22 บน Attiny85 หากคุณต้องการใช้ DHT22 บน Attiny85 ให้ใช้ไลบรารี่เวอร์ชัน 1.20 นี้ ทั้งหมดเกี่ยวข้องกับเวลา ไลบรารีเวอร์ชัน 1.20 มีการอ่านที่เร็วขึ้น (ขอบคุณสำหรับประสบการณ์ผู้ใช้นั้น Jeroen)

ขั้นตอนที่ 2: สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: ผู้รับ

สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: ตัวรับ
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85: ตัวรับ

อีกครั้ง Attiny85 ใช้ในการกำหนดค่าพื้นฐานโดยดึงพินรีเซ็ตสูงด้วยตัวต้านทาน 10 k โมดูลตัวรับติดอยู่กับพินดิจิตอล 1 (พิน 6 บนชิป) LCD ติดอยู่กับหมุดดิจิตอล 0 และ 2 ติดสาย 17.2 ซม. เป็นเสาอากาศรหัสมีดังนี้:

#รวม

#include LiquidCrystal_SR lcd(0, 2, TWO_WIRE); #define RX_PIN 1 //= พินจริง 6 ตั้งค่าเป็นโมฆะ () { lcd.begin (16, 2); lcd.home(); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive(); } วงเป็นโมฆะ () { ถ้า (man.receiveComplete ()) { uint16_t m = man.getMessage (); man.beginReceive(); lcd.print("ชื้น: "); lcd.print(m/100); lcd.setCursor(0, 1); lcd.print("อุณหภูมิ"); lcd.print(m%100); } }

รหัสค่อนข้างง่าย: รับจำนวนเต็มที่ส่งและเก็บไว้ในตัวแปร 'm' มันถูกหารด้วย 100 เพื่อให้ความชื้นและโมดูโล 100 ให้อุณหภูมิ ดังนั้นสมมติว่าจำนวนเต็มที่ได้รับคือ 33253325/100=333325 % 100 =25โค้ดนี้คอมไพล์เป็น 3380 ไบต์ ดังนั้นจึงสามารถใช้ได้กับ attiny85 เท่านั้น ไม่สามารถใช้กับ a 45

ขั้นตอนที่ 3: สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: จอแสดงผล

สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: จอแสดงผล
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: จอแสดงผล
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: จอแสดงผล
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: จอแสดงผล

สำหรับจอแสดงผล เป็นการดีที่สุดที่ฉันอ้างถึงคำสั่งของฉันบนจอแสดงผลสองสาย กล่าวโดยย่อ จอแสดงผลขนาด 16x2 ทั่วไปใช้ shiftregister เพื่อให้สามารถทำงานได้ด้วยหมุดดิจิทัลสองตัว แน่นอนถ้าคุณต้องการใช้จอแสดงผลพร้อม I2C นั่นคือ เป็นไปได้เช่นกัน แต่คุณต้องใช้โปรโตคอล I2C บน Attiny โปรโตคอล Tinywire สามารถทำได้ แม้ว่าบางแหล่งกล่าวว่าคาดว่าจะมีนาฬิกา 1 Mhz แต่ฉันไม่มีปัญหา (ในโครงการอื่น) ที่จะใช้บน 8Mhz อย่างไรก็ตามฉันไม่ได้กังวลที่นี่และใช้ shift register

ขั้นตอนที่ 4: สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: ความเป็นไปได้/ข้อสรุป

สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: ความเป็นไปได้/ข้อสรุป
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: ความเป็นไปได้/ข้อสรุป
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: ความเป็นไปได้/ข้อสรุป
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: ความเป็นไปได้/ข้อสรุป
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: ความเป็นไปได้/ข้อสรุป
สถานีตรวจอากาศขนาดเล็กพร้อม Attiny85/45: ความเป็นไปได้/ข้อสรุป

ดังที่กล่าวไว้ ฉันได้จัดทำคำสั่งนี้เพื่อแสดงให้เห็นว่าใครๆ ก็สามารถสร้างสถานีตรวจอากาศขนาดเล็กที่มี Attiny85 สองอัน (แม้จะมี Attiny85 + 1 Attiny45 หนึ่งอัน) โดยจะส่งเฉพาะความชื้นและอุณหภูมิโดยใช้ DHT11 อย่างไรก็ตาม Attiny มีพินดิจิทัล 5 อันให้ใช้, 6 ถึงแม้จะมีกลอุบายบางอย่าง ดังนั้นจึงเป็นไปได้ที่จะส่งข้อมูลจากเซ็นเซอร์จำนวนมากขึ้น ในโครงการของฉัน - ดังที่เห็นในภาพบนกระดานแถบและบน PCB แบบมืออาชีพ (OSHPark) - ฉันส่ง/รับข้อมูลจาก DHT11 จาก LDR และจาก PIR ทั้งหมดโดยใช้ two attiny85's ข้อจำกัดในการใช้ attiny85 เป็นตัวรับ แต่เป็นการนำเสนอข้อมูลในรูปแบบที่ฉูดฉาด เนื่องจากหน่วยความจำมีจำกัด ข้อความอย่าง 'อุณหภูมิ ความชื้น ระดับแสง วัตถุที่กำลังใกล้เข้ามา' จะเติมพื้นที่หน่วยความจำอันมีค่าอย่างรวดเร็ว อย่างไรก็ตาม ไม่มีเหตุผลที่จะใช้ Arduino สองตัวเพียงเพื่อส่ง/รับอุณหภูมิและความชื้น นอกจากนี้ ยังเป็นไปได้ ให้เครื่องส่งเข้าสู่โหมดสลีปและให้เครื่องตื่นขึ้นเท่านั้นเพื่อส่งข้อมูลโดยบอกทุกๆ 10 นาที และป้อนจากเซลล์ปุ่ม เห็นได้ชัดว่าไม่เพียงแต่สามารถส่งข้อมูลอุณหภูมิหรือความชื้นได้ แต่ยังสามารถส่งเครื่องส่งสัญญาณขนาดเล็กจำนวนมากได้ การอ่านค่าความชื้นในดินด้วยหรือเพิ่มเครื่องวัดความเร็วลมหรือเครื่องวัดปริมาณน้ำฝน

ขั้นตอนที่ 5: สถานีอากาศขนาดเล็ก: เสาอากาศ

สถานีอากาศขนาดเล็ก: เสาอากาศ
สถานีอากาศขนาดเล็ก: เสาอากาศ

เสาอากาศเป็นส่วนสำคัญของการตั้งค่า 433Mhz ใดๆ ฉันได้ทดลองกับเสาอากาศ 'ก้าน' มาตรฐาน 17.2 ซม. และมีความเจ้าชู้สั้น ๆ กับเสาอากาศแบบขดลวด สิ่งที่ดูเหมือนจะทำงานได้ดีที่สุดคือเสาอากาศแบบขดลวดที่ง่ายต่อการสร้าง การออกแบบมาจาก Ben Schueler และเห็นได้ชัดว่าได้รับการตีพิมพ์ในนิตยสาร 'Elektor' PDF พร้อมคำอธิบายของ 'เสาอากาศ 433 MHz ระบายความร้อนด้วยอากาศ' นี้ง่ายต่อการติดตาม (ลิงค์หายไป ตรวจสอบที่นี่)

ขั้นตอนที่ 6: การเพิ่ม BMP180

การเพิ่ม BMP180
การเพิ่ม BMP180

ต้องการเพิ่มเซ็นเซอร์ความดันบรรยากาศเช่น BMP180 หรือไม่? ตรวจสอบคำแนะนำอื่น ๆ ของฉันเกี่ยวกับสิ่งนั้น

แนะนำ: