สวัสดีตอนบ่ายฉันทำต่อไป Arduino ในเวลาว่างของเขาและเวลานี้เขาเขียนคำแนะนำสำหรับการผลิตของสถานีอากาศขนาดเล็ก มันจะทำหน้าที่เป็นนาฬิกาที่มีวันที่และแสดงอุณหภูมิภายในและภายนอกห้อง ในฐานะผู้ควบคุมหลักเราจะใช้ Arduino UNO แต่บอร์ดอื่นที่มี Atmega328p บนบอร์ดจะทำ สำหรับการแสดงผลเราใช้หน้าจอกราฟิก WG12864B เรายังเชื่อมต่อเซ็นเซอร์วัดอุณหภูมิ ds18b20 สองตัว หนึ่งในอาคารเราจะเอาสิ่งที่สองออกไปข้างนอก เริ่มกันเลย
ในกระบวนการผลิต ทำที่บ้าน เราจะต้อง:
- Arduino UNO (หรือบอร์ดอื่น ๆ ที่เข้ากันได้กับ Arduino)
- หน้าจอกราฟิก WG12864B
- เซ็นเซอร์อุณหภูมิ ds18b20, 2pcs
- แหล่งจ่ายไฟ 6 - 12 V
- ตัวต้านทาน 4.7 Kom 0.25 W, 2 ชิ้น
- ตัวต้านทาน 100 โอห์ม 0.25 W
- ช่องใส่แบตเตอรี่สำหรับแบตเตอรี่“ pinky” ขนาด AAA 4 ก้อน
- กล่องจากคาร์ทริดจ์ของ SEGA console
- เทปไฟฟ้า
- สายเชื่อมต่อ
- แผงวงจร
- ปุ่มต่างๆ
- มีดเครื่องเขียน
- หัวแร้ง
- บัดกรีขัดสน
- เทปสองด้าน
ขั้นตอนที่ 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 SG128646JJ1, QY 2
ตัวเลือก C: เซินเจิ้นจิงหัวแสดง จำกัด 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 kΩระหว่างหน้าสัมผัส DQ และ VDD ตัวเลือกการเชื่อมต่อหลายตัวก็เป็นไปได้ ด้วยพลังจากภายนอกฉันคิดว่าเป็นตัวเลือกที่ดีที่สุดเราจะใช้มัน:
หากคุณต้องการคุณสามารถใช้โหมดพลังงานปรสิต:
หรือตัวเลือกอาหารกาฝากที่ดีขึ้น:
ด้วยแหล่งจ่ายไฟใด ๆ เซ็นเซอร์จะเชื่อมต่อแบบขนาน:
เราจะวางเซ็นเซอร์วัดอุณหภูมิลงบนกระดานขนาดเล็กพร้อมกับสองปุ่มซึ่งเราจะใช้เพื่อตั้งเวลาและวันที่ของนาฬิกา:
สายสามัญจากทั้งสองปุ่มเชื่อมต่อกับ GND สายจากปุ่มแรกเชื่อมต่อกับ A0 จากที่สองถึง A1
ยึดกับเทปกาวสองหน้าติดกับ Arduino:
เซ็นเซอร์ที่ควรวางไว้ด้านนอกห้องควรเลือกที่อยู่อาศัยที่เป็นโลหะฝุ่นและความชื้น:
คำนวณลวดตามความยาวที่ต้องการเพื่อให้เซ็นเซอร์สามารถแขวนอยู่นอกหน้าต่างสิ่งสำคัญคือมันไม่ควรเกิน 5 เมตรถ้าคุณต้องการความยาวเพิ่มคุณจะต้องลดค่าของตัวต้านทานแบบดึงขึ้น
สายจากบัสข้อมูล DQ ของเซ็นเซอร์ทั้งสองเชื่อมต่อกับขา 5 ของ Arduino
Vdd - +5 Arduino
GND - GND Arduino
ขั้นตอนที่ 4 พลังงาน
สำหรับพลังงานคุณสามารถใช้แหล่งจ่ายไฟที่มีแรงดันไฟฟ้า 6 ถึง 12 โวลต์ ในตอนท้ายของสายไฟเปลวไฟบัดกรีปลั๊กเหมาะสำหรับซ็อกเก็ตไฟ Arduino:
หรือคุณสามารถใส่ช่องใส่แบตเตอรี่สำหรับแบตเตอรี่“ AAA”,“ pinky” สี่ก้อนในเคส และเชื่อมต่อสายบวกจากช่องไปยัง Vin Arduino และลบด้วย GND
ขั้นตอนที่ 5 การเตรียมสภาพแวดล้อมการเขียนโปรแกรม
ก่อนอื่นคุณต้องดาวน์โหลดและติดตั้ง Arduino IDE ด้วย เว็บไซต์อย่างเป็นทางการ
และเพิ่มลงในไลบรารีทั้งสองที่จำเป็นสำหรับร่าง OneWire - จำเป็นสำหรับการสื่อสารกับเซ็นเซอร์ ds18b20:
U8glib - ใช้เพื่อแสดงข้อมูลบนหน้าจอ:
ดาวน์โหลดไลบรารี่ จากนั้นเราก็คลายการจัดเก็บลงสื่อถาวรและย้ายเนื้อหาของไฟล์เก็บถาวรไปยังโฟลเดอร์“ ไลบรารี” ที่อยู่ในโฟลเดอร์ที่ติดตั้ง Arduino IDE คุณสามารถเพิ่มไลบรารีผ่าน Arduino IDE ในการทำเช่นนี้โดยไม่ต้องเปิดไฟล์เก็บถาวรเรียกใช้ Arduino IDE เลือก Sketch - Connect Library จากเมนู Sketch ที่ด้านบนสุดของรายการดรอปดาวน์เลือกรายการ "เพิ่ม. ห้องสมุดซิป" เราระบุตำแหน่งของไฟล์เก็บถาวรที่ดาวน์โหลด หลังจากทำตามขั้นตอนทั้งหมดแล้วคุณต้องเริ่มต้น Arduino IDE ใหม่
ขั้นตอนที่ 6 แก้ไขร่างภาพ
เซ็นเซอร์อุณหภูมิทำงานโดยใช้โปรโตคอล One Wire และมีที่อยู่เฉพาะสำหรับแต่ละอุปกรณ์ - รหัส 64 บิต ไม่แนะนำให้เพิ่มคำสั่งค้นหาเซ็นเซอร์ในแบบร่าง ไม่จำเป็นต้องโหลดเซ็นเซอร์ hiccup Arduino ทุกครั้งดังนั้นก่อนอื่นให้รวมทุกอย่างเข้าด้วยกันเติมร่างใน Arduino ซึ่งอยู่ในเมนูไฟล์ - ตัวอย่าง - Dallas Temperature - OneWireSearch จากนั้นเรียกใช้เครื่องมือ - การตรวจสอบพอร์ต Arduino ควรหาเซ็นเซอร์ของเราเขียนที่อยู่และอ่านอุณหภูมิ ที่อยู่เหล่านี้จำเป็นต้องเขียนลงไปหรือคัดลอกที่ไหนสักแห่ง ตอนนี้เปิดแบบร่าง Ard_Tic_Tak_WG12864B_2_x_Term_Serial และค้นหาบรรทัด:
byte addr1 [8] = {0x28, 0xFF, 0x75, 0x4E, 0x87, 0x16, 0x5, 0x63}; // ที่อยู่ภายใน
byte addr2 [8] = {0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97}; // ที่อยู่ของเซ็นเซอร์ภายนอก
เราแทนที่ที่อยู่ที่สอดคล้องกับตำแหน่งของเซ็นเซอร์ด้วยที่อยู่ของเรา
นาฬิกาของเราไม่ใช้โมดูล RTC (นาฬิกาเรียลไทม์) ดังนั้นคุณต้องปรับนาฬิกา เพื่อความสะดวกให้ยกเลิกการใส่เครื่องหมายบรรทัด (วินาทีจะปรากฏบนหน้าจอ):
//u8g.setPrintPos (44, 50); u8g.print (sek); // พิมพ์วินาทีเพื่อตรวจสอบความถูกต้องของหลักสูตร
ตั้งเวลาที่ถูกต้องผ่านการตรวจสอบพอร์ต เมื่อต้องการทำสิ่งนี้ให้เปิดมอนิเตอร์พอร์ตรอจนกระทั่งการวัดอุณหภูมิเริ่มต้นเสร็จสมบูรณ์และป้อนวันที่และเวลาปัจจุบันในรูปแบบ "วัน, เดือน, ปี, ชั่วโมง, นาที, วินาที" ไม่มีช่องว่างแบ่งตัวเลขด้วยเครื่องหมายจุลภาคหรือจุด
หากนาฬิกากำลังรีบเปลี่ยนค่าเป็นนาฬิกาที่ใหญ่กว่าฉันขอแนะนำให้ทดลองเพิ่มหน่วยละ 100 หาก lagging ให้ลดค่าในบรรทัด:
if (micros () - prevmicros & gt; 494000) {// เปลี่ยนเป็นอื่นเพื่อปรับค่า 500,000
กำหนดจำนวนที่นาฬิกามีความแม่นยำ เพื่อตรวจสอบความถูกต้องของหลักสูตรและต้องการวินาทีสรุป หลังจากปรับตัวเลขให้ถูกต้องแล้วสามารถออกความคิดเห็นเป็นวินาทีและนำออกจากหน้าจอ
เติมร่าง