สารบัญ:

นาฬิกาเกษียณอายุ / นับขึ้น / นาฬิกา Dn: 4 ขั้นตอน (พร้อมรูปภาพ)
นาฬิกาเกษียณอายุ / นับขึ้น / นาฬิกา Dn: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: นาฬิกาเกษียณอายุ / นับขึ้น / นาฬิกา Dn: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: นาฬิกาเกษียณอายุ / นับขึ้น / นาฬิกา Dn: 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: นาฬิกาจับเวลา V009 ตัวเลข 4 นิ้ว 4 Digit - build in Buzzer 2024, กรกฎาคม
Anonim
นาฬิกาเกษียณอายุ / นับขึ้น / นาฬิกา Dn
นาฬิกาเกษียณอายุ / นับขึ้น / นาฬิกา Dn

ฉันมีจอแสดงผล LED dot-matrix ขนาด 8x8 สองสามตัวในลิ้นชักและกำลังคิดว่าจะทำอย่างไรกับมัน ฉันได้รับแรงบันดาลใจจากผู้สอนคนอื่น ฉันมีแนวคิดที่จะสร้างการนับถอยหลัง/ขึ้นแสดงเพื่อนับถอยหลังสู่วันที่/เวลาในอนาคต และหากเวลาเป้าหมายผ่านไป ให้นับขึ้นจากมัน ตอนนี้ฉันทำนาฬิกาเกษียณอายุไว้บนหิ้งแล้ว

ความคิดที่จะใส่มันลงในขวดนั้นเป็นอุบัติเหตุมากกว่าในขณะที่คิดเกี่ยวกับปลอกหุ้ม คนอื่นเอาเรือใส่ขวด ทำไมไม่ใส่นาฬิกาล่ะ?

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

เสบียง

1. Arduino นาโน

2. RTC (ฉันใช้ DS3231 ทั่วไปซึ่งมี EEPROM ด้วย)

3. โมดูลดอทเมทริกซ์ 12x 8x8 (ฉันมีโมดูลสี่ตัวซึ่งง่ายต่อการจัดเรียง)

4. LDR เพื่อปรับความสว่างของจอแสดงผล

5. ตัวต้านทาน 10 kOhm

6. ตัวเก็บประจุ 5x 100 uF ระงับการแหลมจากจอแสดงผล

7. เพื่อเพิ่มความคมชัดของโมดูล 8x8 ฉันใช้ "ฟิล์มหน้าต่าง" สีเข้ม จอแสดงผลจะแสดง LED เป็นจุดสีขาวหากไม่ติดสว่าง ฟิล์มกระจกเปลี่ยนให้เป็นสีดำเงา

ขั้นตอนที่ 1: เชื่อมต่อส่วนประกอบ

เชื่อมต่อส่วนประกอบ
เชื่อมต่อส่วนประกอบ
เชื่อมต่อส่วนประกอบ
เชื่อมต่อส่วนประกอบ

ฉันใช้จอแสดงผลแบบสี่เหลี่ยมสามจอเพื่อประกอบจอแสดงผล หากต้องการแสดงวันที่ด้วยเครื่องหมายทับและเวลาด้วยเครื่องหมายทวิภาค เราต้องการพื้นที่ว่างสำหรับอักขระ 8 ตัว การใช้แบบอักษร 5x7 ทั่วไป เราต้องการบล็อกขนาด 8x8 หกบล็อกต่อแถว ฉันตัดหนึ่งในสี่บล็อกครึ่งและจัดเรียงเป็นสองแถวโดยหกบล็อกดังที่แสดงในแผนผังเขียงหั่นขนม

ขั้นตอนที่ 2: ชิ้นส่วนที่พิมพ์ 3 มิติ

ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ

ในการถือจอแสดงผลสองแถวและวางตำแหน่งเหล่านี้ในขวด ฉันได้พิมพ์วงแหวนระยะห่างแบบกลมสำหรับกรอบแสดงผล ฉันเพิ่มไฟล์ที่ฉันใช้ด้านล่าง เพื่อให้สามารถพิมพ์สิ่งเหล่านี้ได้โดยไม่ต้องมีการสนับสนุน พวกเขาจะถูกแยกเป็นส่วนๆ ภาพหน้าจอแสดงวงแหวนสองวงที่ติดอยู่กับกรอบแสดงผล ฝาครอบคอขวดมีปุ่มสามปุ่มเพื่อสลับระหว่างโหมดการแสดงผลและการตั้งเวลาปัจจุบันและเวลาเป้าหมาย ฝาครอบคอขวดที่ฉันพิมพ์ด้วย TPU ช่วยให้เลื่อนสาย USB เข้าไปในฝาปิดได้โดยไม่ต้องตัดตัวเชื่อมต่อและมัดด้วยลวดสองสามเส้น ฉันลืมบอกไปว่าฉันใช้ขวดไวน์ขนาด 1.5 ลิตรซึ่งฉันผ่าที่ก้นขวด ทุกชิ้นส่วนที่จะพิมพ์จะต้องติดตั้งบนเตียงเครื่องพิมพ์ขนาด 20x20 ซม. (8x8 นิ้ว)

ขั้นตอนที่ 3: รหัส

รหัส Arduino ใช้ไลบรารี่ที่ใช้กันทั่วไปไม่กี่แห่ง

MD_MAX72xx

SPI

ลวด

RTClib

เขตเวลา

TimeLib

มีสองสามบรรทัดในไฟล์ INO ที่อาจต้องเปลี่ยน:

บรรทัดที่ 38: #define HARDWARE_TYPE MD_MAX72XX::FC16_HW <-- ขึ้นอยู่กับโมดูล 8x8 และการวางแนว

แทนที่จะเป็น FC16_HW อาจเป็นหนึ่งใน:

- MD_MAX72XX::PAROLA_HW

- MD_MAX72XX::GENERIC_HW

- MD_MAX72XX::ICSTATION_HW

- MD_MAX72XX::FC16_HW

รหัสกำลังใช้การตั้งค่าสำหรับเวลาส่วนกลางของสหรัฐฯ และจำเป็นต้องปรับเปลี่ยนสำหรับเขตเวลาอื่น:

สาย 53/54:

TimeChangeRule myDST = {"CDT" วินาที อาทิตย์ มี.ค. 2, -300}; // เวลากลางวัน UTC-5TimeChangeRule mySTD = {"CST", ครั้งแรก, อาทิตย์, พ.ย., 2, -360}; // เวลามาตรฐาน UTC -6

นี้ง่ายต่อการปรับ ชื่อ CST/CDT เป็นเพียงการอ้างอิงเท่านั้น ฉันไม่แสดงอักษรย่อสามตัว ดังนั้นจึงไม่สำคัญ พารามิเตอร์ถัดไปหมายถึงวันใดในเดือนที่สวิตช์เกิดขึ้น การปรับค่านี้เป็นนาที ดังนั้นสถานที่ที่ใช้การปรับค่า +/- 30 นาทีก็ใช้ได้เช่นกัน

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

ขั้นตอนที่ 4: การใช้งานและการตั้งค่า

การใช้งานและการตั้งค่า
การใช้งานและการตั้งค่า
การใช้งานและการตั้งค่า
การใช้งานและการตั้งค่า
การใช้งานและการตั้งค่า
การใช้งานและการตั้งค่า

มีสามปุ่ม

1. เมนู / การตั้งค่า

2. ขึ้น

3. ลง

ปุ่มเมนูช่วยให้หมุนผ่านจอแสดงผลสามประเภท: เวลาปัจจุบัน เวลาเป้าหมาย เวลาเดลต้า เวลาเดลต้าแสดงจำนวนวัน HH/MM/SS ระหว่างเวลาปัจจุบันและเวลาเป้าหมาย มันจะแสดง t- และนับถอยหลังหากเป้าหมายอยู่ในอนาคตหรือ t+ และนับขึ้นหากเป้าหมายอยู่ในอดีต

หากต้องการปรับเวลาปัจจุบันหรือเวลาเป้าหมาย ให้เลือกการแสดงเวลาปัจจุบันหรือเวลาเป้าหมาย หากต้องการเปลี่ยนเวลา ให้กดปุ่มเมนูค้างไว้ 2 วินาทีแล้วปล่อยซึ่งจะนำคุณเข้าสู่โหมดการตั้งค่า "/" หรือ ":" ที่อยู่ใกล้เคียงจะเปลี่ยนเป็น "" เพื่อระบุว่าคุณกำลังปรับตัวเลขใด ใช้ปุ่มขึ้น/ลงเพื่อปรับแต่ละ hh/mm/ss และ mm/dd/yy ฉันไม่ได้เพิ่มการตั้งค่าเพื่อสลับระหว่าง mm/dd/yy และ dd/mm/yy สิ่งนี้จำเป็นต้องเปลี่ยนในโค้ดหรืออาจมีบางคนยินดีเพิ่มคุณสมบัตินี้

คุณจะสังเกตเห็นว่าหากคุณก้าวนาทีกว่า 59 หรือต่ำกว่า 00 การแสดงชั่วโมงจะปรับเช่นกัน เช่นเดียวกันกับวินาที ชั่วโมง และวันที่เปลี่ยนค่าที่สูงขึ้นถัดไปหากข้ามต่ำกว่า 0 หรือสูงกว่าค่าสูงสุดของตัวเลขนี้ ฉันทำสิ่งนี้เพื่อหลีกเลี่ยงการตั้งโปรแกรมขีดจำกัดต่างๆ ของแต่ละเดือน และหากเดือนกุมภาพันธ์ต้องการ 29 วันในปีอธิกสุรทิน การปรับเวลาทำได้จริงใน epoch-time วินาทีตั้งแต่ ม.ค.-1-1970

ฉันเพิ่มวิดีโอง่ายๆ เพื่อแสดงการนับ ฉันต้องการทำสิ่งเหล่านี้เหมือนการแสดงวงล้อ หากคุณต้องการปรับระยะเวลาของการเปลี่ยนแปลง บรรทัดที่ 69 ใน INO มีตัวเลือกสองสามอย่างเพื่อเพิ่มความเร็วหรือชะลอการเปลี่ยนแปลง 120ms จะทำให้ตัวเลขเลื่อนช้าพอเพราะจะเป็นวงล้อที่วิ่งต่อเนื่อง

ฉันหวังว่าคุณจะสนุกกับคำแนะนำนี้

Patrick Geschwindner

แนะนำ: