สารบัญ:
- ขั้นตอนที่ 1: เซ็นเซอร์สภาพอากาศ
- ขั้นตอนที่ 2: ตัวรับสัญญาณ RF
- ขั้นตอนที่ 3: เสาอากาศ RF
- ขั้นตอนที่ 4: โปรโตคอลการสื่อสาร RF
- ขั้นตอนที่ 5: ข้อมูลเวลา
- ขั้นตอนที่ 6: เขตเวลา
- ขั้นตอนที่ 7: แผนผัง
- ขั้นตอนที่ 8: ซอฟต์แวร์ LCD
- ขั้นตอนที่ 9: ซอฟต์แวร์นาฬิกา
- ขั้นตอนที่ 10: ซอฟต์แวร์สภาพอากาศ
- ขั้นตอนที่ 11: แสดง
วีดีโอ: Arduino 3-in-1 การแสดงเวลาและสภาพอากาศ: 11 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
โดย Boomer48ติดตามเพิ่มเติมโดยผู้เขียน:
ฉันชอบไมโครคอนโทรลเลอร์ PIC และฉันชอบการเขียนโปรแกรมในภาษาแอสเซมบลี อันที่จริง ในช่วงสองสามปีที่ผ่านมา ฉันได้โพสต์ประมาณ 40 โครงการบนเว็บไซต์ของฉันตามการรวมกันนั้น เมื่อเร็วๆ นี้ ฉันกำลังสั่งซื้อชิ้นส่วนจากผู้ขายรายหนึ่งในสหรัฐอเมริกาที่ฉันชื่นชอบ และฉันเห็น Arduino Nano พร้อมสายเคเบิลสำหรับโปรแกรม ซึ่งมากกว่าชิปตัวประมวลผล ATMEGA328 เปล่าเพียง 1.20 เหรียญเท่านั้น ดังนั้นฉันจึงซื้อสองสามตัว จากนั้นฉันดาวน์โหลด Arduino IDE และกำจัดหน่วยความจำของการเขียนโปรแกรม 'C++'
โปรเจ็กต์นี้เป็นการรวมนาฬิกาที่ใช้ GPS ในการจับเวลา และตัวรับสัญญาณ RF ที่ถอดรหัสข้อความสภาพอากาศจากเซ็นเซอร์ AcuRite ทั่วไป ผลที่ได้คือการแสดงเวลาและอุณหภูมิในขนาดเล็ก นาฬิกา GPS และกิจวัตรสภาพอากาศได้รับการตั้งค่าเป็นไฟล์แยกกัน ดังนั้นจึงง่ายที่จะเข้าสู่กิจวัตรหลักและกำหนดค่าให้ทำเฉพาะฟังก์ชันนาฬิกาหรือฟังก์ชันสภาพอากาศ เพียงยกเลิกการใส่เครื่องหมาย #define ที่เหมาะสมที่ด้านบนของรูทีนหลัก หากคุณต้องการเพียงฟังก์ชันใดฟังก์ชันหนึ่ง
หากใช้ทั้งสองฟังก์ชัน บรรทัดบนสุดของ LCD จะแสดงเวลาท้องถิ่น และบรรทัดล่างสุดของ LCD จะแสดงความชื้นและอุณหภูมิทั้งแบบเซลเซียสและฟาเรนไฮต์ หากใช้เพียงฟังก์ชันนาฬิกา บรรทัดบนสุดจะแสดงเวลาท้องถิ่นและบรรทัดล่างสุดจะแสดง UTC หากใช้เพียงฟังก์ชันสภาพอากาศ บรรทัดบนสุดจะแสดงเซ็นเซอร์ตัวแรกที่ได้รับ และบรรทัดล่างสุดจะแสดงเซ็นเซอร์อื่นๆ ที่ได้รับ ฉันเพิ่มความสามารถนั้นเพราะฉันมีเซ็นเซอร์สภาพอากาศสองตัว
ขั้นตอนที่ 1: เซ็นเซอร์สภาพอากาศ
เซ็นเซอร์สภาพอากาศ AcuRite ที่ใช้ในที่นี้จะส่งข้อมูลอุณหภูมิและความชื้นทุกๆ 16 วินาที ด้านหลังแสดงหมายเลขรุ่น 000592TXR แต่โดยทั่วไปจะโฆษณาเป็นรุ่น 06002M เซ็นเซอร์นี้ถูกใช้โดยสถานีตรวจอากาศรุ่นต่างๆ มากมาย ดังนั้นจึงหาได้ง่าย และฉันสามารถซื้อบน eBay ได้ในราคาต่ำกว่า $20 AcuRite ขายเซ็นเซอร์ที่มีลักษณะคล้ายกันสำหรับสถานีตรวจอากาศบางแห่ง แต่อาจเป็นไปตามโปรโตคอลการสื่อสารเดียวกันหรือไม่ก็ได้ มีข้อบ่งชี้บางอย่างบนเว็บว่าเซ็นเซอร์อุณหภูมิเท่านั้น 00606 ใช้รูปแบบข้อความเดียวกัน แต่มีไบต์ความชื้นที่ไม่ถูกต้อง
ดังที่เห็นในรูปคลื่นแรกที่แสดงด้านบน ข้อความสภาพอากาศจะถูกส่งเป็นชุดโดยมีช่องว่าง 2ms ระหว่างข้อความที่ต่อเนื่องกัน รูปคลื่นที่สองที่แสดงด้านบนจะขยายส่วนหนึ่งของข้อความหนึ่งข้อความเพื่อดูระยะเวลาและรูปแบบบิต มีสี่บิตการซิงค์ที่สูงประมาณ 600us ตามด้วยต่ำ 600us บิตข้อมูลแสดงโดยสูง 400us ตามด้วย 200us ต่ำ (1) หรือสูง 200us ตามด้วย 400us ต่ำ (0)
รูปแบบข้อความประกอบด้วยข้อมูล 7 ไบต์ สองไบต์แรกคือ ID เซ็นเซอร์และจะไม่เปลี่ยนแปลง (เช่น ไม่ใช้รหัสการเลื่อน) ไบต์สุดท้ายคือผลรวมการตรวจสอบแบบง่ายของหกไบต์แรก ไบต์ที่สามเป็นตัวบ่งชี้ระดับแบตเตอรี่และควรเป็นเลขฐานสิบหก 44 เสมอหากแบตเตอรี่ดี ไบต์ที่สี่คือความชื้นและเป็นค่าที่ไม่ได้ปรับขนาดระหว่าง 0 ถึง 99 สิ่งสำคัญคือต้องจำไว้ว่าบิตที่สำคัญที่สุดของไบต์ 4, 5 และ 6 เป็นบิตพาริตีและไม่ได้เป็นส่วนหนึ่งของการวัด ค่า ไบต์ที่ 5 และ 6 คืออุณหภูมิที่ปรับขนาด (เซลเซียส) โดยที่ 4 บิตที่ต่ำกว่าของไบต์ 5 จะถูกรวมเข้ากับ 7 บิตที่ต่ำกว่าของไบต์ 6 เพื่อสร้างค่า 11 บิต อุณหภูมิจะแสดงเป็นจำนวนบวกเสมอและจะกลายเป็นลบก็ต่อเมื่อมีการใช้มาตราส่วน มาตราส่วนคือ (C / 10) - 100 จำเป็นต้องหารด้วย 10 เนื่องจากความละเอียดของอุณหภูมิมีค่าเท่ากับหนึ่งในสิบขององศา จำเป็นต้องมีการลบเนื่องจากเซ็นเซอร์เพิ่ม 100 เพื่อให้ค่าที่ส่งเป็นบวก
ขั้นตอนที่ 2: ตัวรับสัญญาณ RF
โมดูล RF ที่ฉันใช้สำหรับโครงการนี้คือ RXB6 มันเป็นตัวรับ super heterodyne เมื่อเทียบกับตัวรับ super regenerative ที่ไม่พึงปรารถนาน้อยกว่า หากคุณดูที่โมดูล RF ราคาถูกคุณจะพบว่าบอร์ดตัวส่งและตัวรับมักจะถูกรวมเข้าด้วยกัน รีซีฟเวอร์แบบรวมกลุ่มส่วนใหญ่เป็นประเภทที่เกิดใหม่มาก ดังนั้นจึงมีแนวโน้มที่จะมีลักษณะการทำงานที่ต่ำกว่ามาก (รวมถึงช่วง) มากกว่ารีซีฟเวอร์ซูเปอร์เฮเทอโรไดน์ เราต้องการโมดูลตัวรับสำหรับโครงการนี้เท่านั้นเพราะเราจะรับสัญญาณจากเครื่องส่งเซ็นเซอร์สภาพอากาศ
ขั้นตอนที่ 3: เสาอากาศ RF
RXB6 ไม่ได้มาพร้อมกับเสาอากาศ คุณสามารถซื้อเสาอากาศแบบเกลียวได้ในราคาถูก แต่ก็ยังง่ายต่อการสร้างเสาอากาศของคุณเอง อันที่จริง สายจัมเปอร์เขียงหั่นขนมสามารถเสียบเข้ากับขาเสาอากาศของโมดูลได้หากคุณไม่ต้องการจินตนาการมากเกินไป ตามหลักการแล้วเสาอากาศแบบลวดตรงจะมีความยาวคลื่น 1/4 ซึ่งใช้งานได้ประมาณ 6.8 นิ้ว ตอนแรกฉันทำสายจัมเปอร์และไม่มีปัญหาในการหยิบเซ็นเซอร์ภายนอกของฉันแม้ว่าโรงงานอิเล็กทรอนิกส์ของฉันจะอยู่ในห้องใต้ดินของฉัน
ความเป็นไปได้อีกประการหนึ่งคือการสร้างเสาอากาศแบบเกลียวของคุณเอง มีแผนที่หลากหลายสำหรับสิ่งนั้นบนเว็บ แต่แผนที่ที่แสดงในภาพด้านบนคือสิ่งที่ฉันทำ ฉันใช้ลวดแกนแข็งจากชิ้นส่วนของสายเคเบิลอีเทอร์เน็ตแล้วพันรอบก้านเรียบของดอกสว่าน 5/32 นิ้ว เปิดฉนวนทิ้งไว้ ยกเว้นส่วนปลายที่บัดกรีกับบอร์ด RF คุณจะต้อง 20 รอบ คุณสามารถใช้ดอกสว่านขนาด 7/32 นิ้วและพันรอบได้ 17 รอบแทน สิ่งเหล่านี้อาจทำงานได้ดีสำหรับช่วงที่คุณน่าจะมีสำหรับเซ็นเซอร์ของคุณ กุญแจสำคัญคือการมีเครื่องรับ RF ที่ดีในการเริ่มต้น เซ็นเซอร์ AcuRite ยังมีตัวส่งสัญญาณที่ค่อนข้างแรง
ขั้นตอนที่ 4: โปรโตคอลการสื่อสาร RF
มีเทคนิคการมอดูเลตที่แตกต่างกันสองสามแบบสำหรับการส่งข้อมูล แต่เซ็นเซอร์เหล่านี้ใช้วิธีที่ง่ายที่สุดคือ OOK (เปิด-ปิด-คีย์) หรือ ASK (แอมพลิจูด-ชิฟต์-คีย์) เนื่องจากเรากำลังจัดการกับบิตข้อมูล 0/1 ในตัวอย่างนี้ แอมพลิจูดจึงเต็มหรือเต็ม ดังนั้น เพื่อจุดประสงค์ของเรา OOK และ ASK จึงเหมือนกันเพราะ OOK หมายความว่าผู้ให้บริการ RF เต็มหรือเต็ม รูปแบบข้อความถูกกำหนดโดยผู้ผลิตอุปกรณ์ส่งสัญญาณโดยทั่วไป และสามารถใช้อัตราการส่ง รูปแบบการจัดรูปแบบบิต และความยาวของข้อความได้แทบทุกรูปแบบ แบนด์ 433 เมกะเฮิรตซ์เต็มไปด้วยการส่งสัญญาณสำหรับสิ่งต่าง ๆ เช่นสมาร์ทมิเตอร์ ฯลฯ ดังนั้นจึงต้องปรับซอฟต์แวร์เพื่อกรองเฉพาะรูปแบบข้อความที่เราต้องการใช้
ขั้นตอนที่ 5: ข้อมูลเวลา
ฉันใช้หน่วย GPS ราคาถูกเพื่อรับข้อมูลเวลาที่แม่นยำซึ่งจะรีสตาร์ทโดยอัตโนมัติหลังจากไฟฟ้าดับ ฉันมีหน่วย GPS หลายเครื่อง (ไม่มีจอแสดงผล) ที่ส่งออกประโยค NMEA มาตรฐาน แต่หน่วยที่เล็กที่สุดและราคาถูกที่สุดที่ฉันมีคือ NEO-6M โมดูล NEO-6M นั้นง่ายต่อการเชื่อมต่อกับ Arduino เนื่องจากใช้พอร์ตอนุกรมระดับ TTL ข้อแตกต่างที่แท้จริงเพียงอย่างเดียวคือมาตรฐาน NMEA ระบุอัตราบอดแบบอนุกรมที่ 4800 แต่ค่าเริ่มต้น NEO-6M เป็น 9600 บอด คุณสามารถเรียกใช้โปรแกรม "u-center" ฟรีเพื่อเปลี่ยนอัตรารับส่งข้อมูลได้ แต่ฉันเพิ่งปล่อยให้เป็นค่าเริ่มต้นจากโรงงาน นอกจากนี้ยังมีโปรแกรมยูทิลิตี้ฟรีที่เรียกว่า GPSInfo (เผยแพร่โดย Globalsat) ซึ่งมีประโยชน์มากสำหรับการดูข้อมูล GPS บนพีซี คุณสามารถเชื่อมต่อหน่วย GPS กับสาย USB มาตรฐานกับ TTL เพื่อตรวจสอบหรือตั้งค่าโดยใช้พีซี โปรดทราบว่าชิป GPS บนโมดูลทำงานจริงที่ 3.3 โวลต์ (ผ่านตัวควบคุมแรงดันไฟฟ้าออนบอร์ด) ดังนั้นหากคุณต้องการเชื่อมต่อกับพอร์ต RXD คุณควรลดระดับลงจาก 5 โวลต์ พอร์ต TXD สามารถเชื่อมต่อโดยตรงกับ Arduino หรือพีซี
ขั้นตอนที่ 6: เขตเวลา
การแสดงเวลา GPS เป็นเรื่องง่ายที่จะทำตราบเท่าที่คุณต้องการแสดง UTC (Universal Time Coordinated) ประโยค NMEA ประกอบด้วยอักขระ ASCII ซึ่งสามารถส่งออกไปยัง LCD ได้โดยตรง ส่วนของเวลาอยู่ในรูปแบบ HHMMSS. FF (ชั่วโมง นาที วินาที และเศษส่วนวินาที) สำหรับนาฬิกาของเรา ส่วนที่เป็นเศษส่วนไม่มีประโยชน์ ดังนั้นสิ่งที่เราต้องจัดการคืออักขระหกตัว ปัญหาคือคุณต้องแปลงเป็นเวลาท้องถิ่นของคุณและเป็นรูปแบบ AM/PM 12 ชั่วโมงหากคุณต้องการ แต่บางครั้งปัญหาคือสิ่งที่ทำให้ชีวิตน่าสนใจ นั่นคือส่วนนั้นของซอฟต์แวร์เป็นเรื่องเกี่ยวกับ
สำหรับเขตเวลา คุณอาจคิดว่าจะมีเพียง 24 แห่ง โดย 12 แห่งอยู่ทางตะวันออกของตำแหน่ง UTC (+ โซน) และ 12 แห่งอยู่ทางตะวันตกของตำแหน่ง UTC (- โซน) อันที่จริงมีลูกบอลคี่สองสามชั่วโมงที่เป็นเศษส่วนและอีกสองสามอันที่เกิน "ขีด จำกัด " 12 ชั่วโมง หากคุณบังเอิญอาศัยอยู่ในพื้นที่เหล่านั้น ฉันขอโทษเพราะซอฟต์แวร์ของฉันมีบัญชีสำหรับโซนทั้ง 24 ชั่วโมงเท่านั้น มีพวกเราบางคนที่ใช้ Daylight Savings Time ส่วนหนึ่งของปี แต่ไม่ได้นับรวมในซอฟต์แวร์โดยอัตโนมัติ ซึ่งจะต้องมีตารางค้นหาวันที่ในอนาคต ความซับซ้อนเพิ่มเติมในซอฟต์แวร์ และความจำเป็นในการอัปเดตซอฟต์แวร์หากสัปดาห์ของปีสำหรับการเปลี่ยนผ่านเปลี่ยนไป แต่ฮาร์ดแวร์จะใช้สวิตช์สัมผัสชั่วขณะเพื่อให้ตั้งค่าเขตเวลาได้ง่าย (ออฟเซ็ต UTC)
ขั้นตอนที่ 7: แผนผัง
แผนผังแสดงไว้ด้านบนและรวมการเชื่อมต่อสำหรับอินเทอร์เฟซ LCD ขนาด 4 บิต 1602 ข้อมูลอนุกรมจากเครื่องรับ RF อยู่ที่ระดับลอจิกดิจิตอล ดังนั้นจึงเชื่อมต่อโดยตรงกับพินอินพุตข้อมูล Arduino ตัวใดตัวหนึ่ง พินได้รับการกำหนดค่าในซอฟต์แวร์เพื่อทำหน้าที่ขัดจังหวะเมื่อเปลี่ยนเพื่อให้เราสามารถวัดความกว้างของพัลส์ได้ เอาต์พุต GPS TXD เชื่อมต่อโดยตรงกับอินพุต Arduino RX
มีสวิตช์สองตัวที่ใช้ ดังที่กล่าวไว้ก่อนหน้านี้ สวิตช์สัมผัสชั่วขณะช่วยให้สามารถตั้งค่าออฟเซ็ต UTC ได้ สามารถกดสวิตช์เมื่อใดก็ได้เพื่อเข้าสู่โหมดตั้งค่า เริ่มแรก หน้าจอจะแสดงค่าชดเชย UTC ที่ไม่ถูกต้องเป็น “+77” โปรดดูส่วน “ซอฟต์แวร์นาฬิกา” สำหรับคำแนะนำการตั้งค่าออฟเซ็ต UTC
สวิตช์ที่สองเป็นสวิตช์เปิด/ปิดอย่างง่าย ในตำแหน่ง "ปิด" เวลาจะแสดงในรูปแบบ 12 ชั่วโมง (AM/PM) และในตำแหน่ง "เปิด" เวลาจะแสดงในรูปแบบ 24 ชั่วโมง สวิตช์นี้สามารถเปลี่ยนแปลงได้ตลอดเวลาเพื่อสลับระหว่างรูปแบบต่างๆ
หากต้องการเพียงแค่ฟังก์ชันนาฬิกา ก็ไม่จำเป็นต้องเชื่อมต่อโมดูลตัวรับสัญญาณ RF หากต้องการเพียงแค่ฟังก์ชันสภาพอากาศ ก็ไม่จำเป็นต้องเชื่อมต่อ GPS และสวิตช์ทั้งสอง
ขั้นตอนที่ 8: ซอฟต์แวร์ LCD
ฉันมักจะใช้อินเทอร์เฟซ LCD แบบใดแบบหนึ่งจากสองประเภท หนึ่งคืออินเทอร์เฟซ 4 บิตมาตรฐานและอีกอันคืออินเทอร์เฟซ 3 สายที่ใช้ shift register ฉันออกแบบอินเทอร์เฟซนั้นเมื่อทำงานกับไมโครคอนโทรลเลอร์ PIC ขนาดเล็กที่มีพิน I/O ในจำนวนจำกัด ฉันใช้อินเทอร์เฟซ 4 บิตสำหรับโปรเจ็กต์นี้ แต่มีไฟล์รวม LCD ของตัวเอง แทนที่จะใช้ไลบรารี Arduino LCD ทั่วไป ซึ่งช่วยลดการใช้หน่วยความจำและความซับซ้อนของโค้ด และยังช่วยให้ฉันปรับแต่งโค้ดสำหรับโปรเจ็กต์เฉพาะเช่นนี้ได้
ขั้นตอนที่ 9: ซอฟต์แวร์นาฬิกา
หน่วย GPS ส่งออกประโยคมาตรฐาน NMEA-0183 ซึ่งเป็นสตริง ASCII ที่มีข้อมูลหลากหลาย สำหรับแอปพลิเคชันนี้ ฉันเลือกประโยค GGA เพื่อรับข้อมูลเวลา เพราะนั่นคือประโยคที่ฉันใช้สำหรับโครงการ GPS ก่อนหน้า เขตข้อมูลในประโยค NMEA จะถูกคั่นด้วยเครื่องหมายจุลภาค ดังนั้น หลังจากที่ตรวจพบส่วนหัวของประโยค GGA ซอฟต์แวร์จะนับเครื่องหมายจุลภาคและเรียกรูทีนที่เหมาะสมสำหรับแต่ละเขตข้อมูลที่ต้องการของข้อมูล GPS เฉพาะข้อมูลเวลาเท่านั้นที่จำเป็นที่นี่และที่อยู่ในฟิลด์หลังเครื่องหมายจุลภาคแรก ดังนั้นจึงไม่จำเป็นต้องนับ
หกหลักเวลา (HHMMSS) จะถูกบัฟเฟอร์และประมวลผลหลังจากได้รับทั้งหมดแล้ว GPS อาจแสดงข้อความที่ไม่สมบูรณ์บางส่วนตั้งแต่เนิ่นๆ ดังนั้นรูทีนการบัฟเฟอร์จะตรวจสอบว่าอักขระแต่ละตัวเป็นค่าตัวเลข ASCII หากได้รับอักขระที่ไม่ถูกต้อง ข้อความจะถูกยกเลิก สิ่งนี้อาจเกิดขึ้นได้น้อยมากในระหว่างการทำงานปกติ โดยเฉพาะอย่างยิ่งหากการสื่อสารพอร์ตอนุกรมลดลงเล็กน้อย ฉันเคยเห็นสิ่งนี้เพียงครั้งเดียวและทั้งหมดที่เกิดขึ้นคือเวลาหยุดชั่วคราวหนึ่งวินาทีแล้วเพิ่มขึ้นสองวินาทีแทนที่จะเป็นหนึ่งครั้ง
หากซอฟต์แวร์ได้รับการกำหนดค่าให้แสดงเวลาเท่านั้น บรรทัดแรกของ LCD จะแสดงเวลาท้องถิ่นและบรรทัดที่สองจะแสดง UTC สำหรับ UTC ซอฟต์แวร์เพียงแค่ส่งอักขระ ASCII ไปยังรูทีนการแสดงผลโดยตรง โดยใส่เครื่องหมายทวิภาค (:) อย่างเหมาะสม
ในการแปลง UTC เป็นเวลาท้องถิ่น ต้องใช้ออฟเซ็ต UTC (เขตเวลา) เนื่องจากเวลา UTC จาก GPS อยู่ในรูปแบบ ASCII ซอฟต์แวร์จึงแปลงอักขระชั่วโมง ASCII เป็นทศนิยม แล้วจึงเพิ่มออฟเซ็ต UTC ออฟเซ็ต UTC ถูกเก็บไว้เป็นค่า BCD บวกกับบิตเครื่องหมาย ดังนั้นมันจึงถูกแปลงเป็นค่าจำนวนเต็มก่อนแล้วจึงลบล้างหากบิตเครื่องหมายถูกตั้งค่าไว้ เมื่อคำนวณค่าชั่วโมงตามเวลาท้องถิ่นแล้ว ตารางค้นหาจะถูกใช้เพื่อแปลงเป็น BCD จากนั้น BCD จะถูกแปลงกลับเป็น ASCII เพื่อแสดงผล ตารางค้นหาต้องรองรับรูปแบบ UTC แบบ 24 ชั่วโมงและเขตเวลา +/- 12 ในการดำเนินการนี้ เวลา UTC จาก 0000 ถึง 2300 จะใช้ 24 รายการตรงกลางในตารางโดยมี 12 รายการก่อนหน้าและ 12 รายการหลังจากนั้น เพื่อพิจารณาเขตเวลา ตารางหนึ่งอยู่ในรูปแบบ 12 ชั่วโมง ดังนั้นฉันจึงเพิ่มตารางค้นหาสำหรับส่วน AM/PM ของจอแสดงผลด้วย อีกตารางหนึ่งอยู่ในรูปแบบ 24 ชั่วโมง ดังที่ได้กล่าวไว้ก่อนหน้านี้ สวิตช์เปิด/ปิดช่วยให้สามารถเลือกรูปแบบ 12 ชั่วโมงหรือ 24 ชั่วโมงได้
โซนเวลาถูกดึงมาจาก EEPROM ระหว่างการเริ่มต้นและแสดงชั่วครู่ หากไม่ได้ตั้งค่าไว้อย่างน้อยหนึ่งครั้ง ระบบจะเรียกรูทีนการตั้งค่า รูทีนการตั้งค่าสามารถเรียกได้ตลอดเวลาโดยกดสวิตช์หน้าสัมผัสชั่วขณะ ขั้นตอนการตั้งค่าจะเริ่มต้นการแสดงผลเป็น “UTC OFFSET +77” กดสวิตช์สั้น ๆ จะเปลี่ยนค่าเป็น "-00" หากจำเป็นต้องใช้เขตเวลาที่เป็นบวก การกดสั้นๆ อีกครั้งจะเปลี่ยนค่าเป็น “+00” กดค้าง (> 1 วินาที) จะเป็นการย้ายโหมดการตั้งค่าไปยังขั้นตอนถัดไป ณ จุดนี้การกดสั้นๆ แต่ละครั้งจะเพิ่มค่าเวลาสูงสุด 12 หลังจากถึงโซนเวลาที่ต้องการแล้ว ให้กดสวิตช์ค้างไว้นานกว่า 1 วินาทีแล้วปล่อย ซอฟต์แวร์จะบันทึกค่า UTC ใน EEPROM และแสดง “OFFSET SAVED” สั้นๆ หากคุณทำผิดพลาดระหว่างการเข้าออก ให้ออกแล้วกดสวิตช์อีกครั้งเพื่อรีเซ็ต
NEO-6M ไม่ต้องการตำแหน่งที่ดีในการส่งสัญญาณเวลา ดังนั้นควรส่งข้อความทันทีที่ได้รับดาวเทียมหนึ่งดวง ก่อนหน้านั้นหน้าจอจะอ่านว่า "NO DATA"
ขั้นตอนที่ 10: ซอฟต์แวร์สภาพอากาศ
ไมโครคอนโทรลเลอร์ PIC มีความสามารถในการเปิด/ปิดตัวจับเวลาโดยใช้พัลส์ภายนอก พัลส์อินพุตเดียวกันนั้นสามารถใช้เป็นอินเทอร์รัปต์ภายนอกเพื่อส่งสัญญาณการอ่านระยะเวลาของพัลส์ Arduino ไม่มีความสามารถที่แน่นอนนั้น ฉันจึงใช้ฟังก์ชันขัดจังหวะเมื่อเปลี่ยน ที่ขอบด้านหนึ่งของพัลส์ข้อความ RF เวลาไมโครวินาทีปัจจุบันจะถูกบันทึกโดยตัวจัดการการขัดจังหวะ ที่ขอบด้านตรงข้าม เวลาที่ผ่านไปจะถูกคำนวณเพื่อกำหนดความกว้างพัลส์
ซอฟต์แวร์มีการกำหนด "DEBUG" ที่อนุญาตให้แสดงรูปแบบข้อมูลดิบของข้อความที่ได้รับ นอกจากนี้ยังมีการกำหนดเพื่อระบุพินอินพุต Arduino สำหรับสตรีมอนุกรมจากเครื่องรับ RF ซอฟต์แวร์ได้รับการตั้งค่าให้คำนวณการตั้งค่าการลงทะเบียนการขัดจังหวะเมื่อเปลี่ยนที่เหมาะสมตามคำจำกัดความนี้ การคำนวณใช้ได้กับพินดิจิตอล Arduino เท่านั้น สามารถใช้พินอะนาล็อกแทนได้ แต่จะต้องมีการเข้ารหัสค่ารีจิสเตอร์อย่างหนัก
ตัวจัดการขัดจังหวะกำหนดว่าจำนวนที่จับได้นั้นยาวพอที่จะเป็นพัลส์เริ่มต้นหรือไม่ ดังที่กล่าวไว้ก่อนหน้านี้ ช่องว่างระหว่างหลายข้อความคือ 2ms นั่นคือสิ่งที่ซอฟต์แวร์มองหา เนื่องจากการรับส่งข้อมูล 433 MHz ทั้งหมด การคัดกรองเบื้องต้นในซอฟต์แวร์ทำให้แน่ใจได้ว่าเวลาที่วัดได้อย่างน้อย 1.8 มิลลิวินาที แต่ไม่เกิน 2.4 มิลลิวินาที หลังจากตรวจพบการเริ่มต้น ซอฟต์แวร์จะค้นหาบิตซิงค์ (600us) และนับเพื่อให้แน่ใจว่าได้รับสี่บิต เมื่อผ่านการทดสอบเหล่านี้ ซอฟต์แวร์จะค้นหาบิตไทม์ที่เหมาะสมที่ 200us และ 400us
บิตที่ได้รับจะถูกสร้างเป็นไบต์และแต่ละไบต์จะถูกบันทึก หลังจากเจ็ดไบต์ได้รับการตรวจสอบข้อความจะถูกตรวจสอบก่อนที่จะอนุญาตให้ดำเนินการต่อไปได้ หากจะส่งออกไบต์ดิบ (โหมดดีบัก) ไบต์จะถูกแปลงเป็นอักขระ ASCII และส่งออกไปยัง LCD หากต้องการเอาท์พุตความชื้นและอุณหภูมิ จะทำการแปลงที่เหมาะสม
ข้อมูลเซนติเกรดสองไบต์ในข้อความ RF ถูกผสมเข้าด้วยกันเพื่อสร้างค่า 11 บิต ส่วนล่างถูกเลื่อนไปทางซ้ายหนึ่งบิตเพื่อกำจัดพาริตีบิตและจัดตำแหน่งให้ตรงกับบิตในส่วนบน สองไบต์ถูกสร้างเป็นตัวแปรคำ 16 บิต จากนั้นสิ่งทั้งหมดจะถูกเลื่อนไปทางขวาหนึ่งบิตเพื่อรับการจัดตำแหน่งบิตสุดท้าย ตัวแปรคำจะถูกแปลงเป็นตัวแปรจุดลอยตัวสำหรับการคำนวณทางคณิตศาสตร์
ข้อดีอย่างหนึ่งของการใช้ C++ บน Arduino กับภาษาแอสเซมบลีบน PIC คือทำให้การคำนวณทางคณิตศาสตร์ง่ายขึ้น ดังที่ได้กล่าวไว้ก่อนหน้านี้การแปลงเซนติเกรดคือ (C / 10) -100 ผลลัพธ์จะถูกแปลงเป็นสตริงและส่งไปยัง LCD เพื่อแสดงผล การคำนวณฟาเรนไฮต์คือ (C * 1.8) + 32 ผลลัพธ์จะถูกแปลงเป็นสตริงอีกครั้งและส่งไปยัง LCD เพื่อแสดงผล ในทั้งสองกรณี การแปลงสตริงจะมีเครื่องหมายลบ (หากเหมาะสม) และจุดทศนิยม มีการตรวจสอบจุดทศนิยมเพื่อให้แน่ใจว่ามีเพียงอักขระเดียวหลังจากจุดทศนิยมถูกส่งไปยังจอแสดงผล จำเป็นต้องมีการตรวจสอบเนื่องจากสตริงสามารถมีความยาวได้ตั้งแต่ 3 ถึง 5 อักขระ
ฉันมีเซ็นเซอร์ AcuRite สองตัว ดังนั้นฉันจึงเพิ่มการตรวจสอบในซอฟต์แวร์เพื่อให้แน่ใจว่าข้อมูลสำหรับตัวหนึ่งจะไม่เขียนทับข้อมูลของอีกตัวหนึ่ง หากซอฟต์แวร์ถูกตั้งค่าให้ทำหน้าที่เกี่ยวกับสภาพอากาศเท่านั้น เซ็นเซอร์ตัวแรกที่ได้รับหลังจากเปิดเครื่องจะแสดงในบรรทัดที่ 1 และอีกอันแสดงขึ้นในบรรทัดที่ 2 โดยใช้โหมดดีบัก ฉันสามารถดูว่า ID คืออะไรสำหรับเซ็นเซอร์แต่ละตัว ฉันจึงสามารถตรวจสอบโค้ดง่ายๆ ได้หากฉันเท่านั้น ต้องการประมวลผลข้อมูลจากหนึ่งในนั้น
ซอฟต์แวร์ตรวจสอบสถานะแบตเตอรี่ (byte3) และแสดงข้อความหากแสดงว่าแบตเตอรี่เหลือน้อย ข้อความนี้จะเขียนทับข้อมูลอื่นๆ ทั้งหมดสำหรับเซ็นเซอร์นั้น
ขั้นตอนที่ 11: แสดง
ต่อไปนี้คือตัวอย่างบางส่วนที่แสดงสำหรับฟังก์ชันต่างๆ ฉันมี Instructables อื่น ๆ สองสามตัว แต่โครงการไมโครคอนโทรลเลอร์ PIC ส่วนใหญ่ของฉันสามารถพบได้บนเว็บไซต์ของฉันที่: www.boomerrules.wordpress.com
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
Arduino ที่ถูกที่สุด -- Arduino ที่เล็กที่สุด -- Arduino Pro Mini -- การเขียนโปรแกรม -- Arduino Neno: 6 ขั้นตอน (พร้อมรูปภาพ)
Arduino ที่ถูกที่สุด || Arduino ที่เล็กที่สุด || Arduino Pro Mini || การเขียนโปรแกรม || Arduino Neno:…………………………… โปรดสมัครสมาชิกช่อง YouTube ของฉันสำหรับวิดีโอเพิ่มเติม……. โปรเจ็กต์นี้เกี่ยวกับวิธีเชื่อมต่อ Arduino ที่เล็กที่สุดและถูกที่สุดเท่าที่เคยมีมา Arduino ที่เล็กที่สุดและถูกที่สุดคือ arduino pro mini คล้ายกับ Arduino