วิธีสร้างนาฬิกาจาก Arduino การเชื่อมต่อนาฬิกาเรียลไทม์ ds1302 กับ Arduino

หนึ่งในโปรเจ็กต์แรกๆ ที่ผู้เริ่มต้นสร้างโดยใช้บอร์ด Arduino คือ นาฬิกาธรรมดา, นับเวลาถอยหลัง โดยพื้นฐานแล้ว นาฬิกาดังกล่าวจะขึ้นอยู่กับโมดูล RTC ที่เชื่อมต่อกับ Arduino ( เรียลไทม์นาฬิกาหรือนาฬิกาเรียลไทม์) ในตลาดวันนี้ ชิ้นส่วนอิเล็กทรอนิกส์มีอยู่ รุ่นที่แตกต่างกัน RTC ที่มีความแม่นยำและราคาแตกต่างกัน รุ่นทั่วไป ได้แก่ DS1302, DS1307, DS3231



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


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


นาฬิกาเรือนนี้สามารถประกอบได้โดยใช้นาฬิกาธรรมดา เขียงหั่นขนมเนื่องจากไม่ต้องการส่วนประกอบมากมาย ลิงค์หลักของเราที่นี่คือบอร์ด Arduino Uno หากต้องการแสดงเวลาคุณสามารถใช้จอ LCD ขนาด 16x2 หากต้องการเปลี่ยนการตั้งค่าเวลา คุณต้องเชื่อมต่อสองปุ่ม (สำหรับชั่วโมงและนาที) ปุ่มต่างๆ เชื่อมต่อกับ Aduino ผ่านตัวต้านทาน 10KΩ หากต้องการเปลี่ยนความสว่างของจอแสดงผล คุณจะต้องมีโพเทนชิออมิเตอร์ 10 kOhm แผนภาพการเชื่อมต่อสำหรับส่วนประกอบทั้งหมดเหล่านี้กับบอร์ด Arduino Uno แสดงไว้ด้านล่าง



ตอนนี้คุณต้องตั้งโปรแกรม Arduino รหัสง่ายๆ (ภาพร่าง) ที่ให้คุณแสดงเวลาบนหน้าจอ LCD มีดังต่อไปนี้


#รวม จอแอลซีดีคริสตัลเหลว (12,11,5,4,3,2); อินท์เอช=12; อินท์เอ็ม; อินท์ส; ธง int; เวลาอินท์; const inths=8; const int ms=9; สถานะ int1; int state2; การตั้งค่าเป็นโมฆะ() ( lcd.begin(16,2); ) void loop() ( lcd.setCursor(0,0); s=s+1; lcd.print("TIME:"); lcd.print(h ); lcd.print("); lcd.print(");<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); ถ้า(ธง==24)ธง=0; ล่าช้า (1,000); จอแอลซีดี.ชัดเจน(); ถ้า(s==60)( s=0; m=m+1; ) ถ้า(m==60) ( m=0; h=h+1; flag=ธง+1; ) ถ้า(h==13 ) (h=1; ) lcd.setCursor(0,1); lcd.print("ขอให้มีวันที่ดี"); //-------เวลา // การตั้งค่า--------// state1=digitalRead(hs); ถ้า (state1==1) (h=h+1; flag=flag+1; if(flag<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); ถ้า(ธง==24)ธง=0; ถ้า(h==13)h=1; ) state2=digitalRead(ms); ถ้า(state2==1)( s=0; m=m+1; ) )

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

สวัสดีตอนบ่าย วันนี้ฉันจะแบ่งปันคำแนะนำในการทำนาฬิกาด้วยเทอร์โมมิเตอร์ในห้อง( นาฬิกา Arduino DIY- นาฬิกาเดินต่อไป Arduino UNO, หน้าจอกราฟิก WG12864B ใช้เพื่อแสดงเวลาและอุณหภูมิ เป็นเซ็นเซอร์อุณหภูมิ - ds18b20 ต่างจากนาฬิกาอื่น ๆ ส่วนใหญ่ฉันจะไม่ใช้ RTS (นาฬิกาเรียลไทม์) แต่จะพยายามทำโดยไม่มีโมดูลเพิ่มเติมนี้

วงจร Arduino มีความโดดเด่นด้วยความเรียบง่าย และใครๆ ก็สามารถเริ่มต้นเรียนรู้ Arduino ได้ คุณสามารถอ่านเกี่ยวกับวิธีเชื่อมต่อไลบรารีและแฟลช Arduino ได้ในบทความของเรา

มาเริ่มกันเลย.

เพื่อสร้างนาฬิกานี้เราจะต้อง:

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

การเตรียมหน้าจอกราฟิก
เมื่อมองแวบแรก การเชื่อมต่อหน้าจอทำให้เกิดปัญหาและความยากลำบากมากมาย แต่ถ้าคุณเข้าใจประเภทของพวกเขาก่อน มันจะง่ายขึ้นและชัดเจนขึ้นมาก มีหน้าจอหลายประเภทและหลายประเภทบนคอนโทรลเลอร์ 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 จอแสดงผลสามารถเชื่อมต่อกับ Arduino ผ่านทางอนุกรมหรือ พอร์ตขนาน- เมื่อใช้งานร่วมกับ Arduino UNO ควรเลือกการเชื่อมต่อผ่าน พอร์ตอนุกรม– จากนั้นเราจะต้องมีเอาต์พุตไมโครคอนโทรลเลอร์เพียง 3 ตัว แทนที่จะเป็นอย่างน้อย 13 เส้นเมื่อเชื่อมต่อผ่านพอร์ตขนาน ทุกอย่างเชื่อมต่อกันค่อนข้างง่าย มีความแตกต่างอีกอย่างหนึ่ง: คุณจะพบตัวเลือกการแสดงผลสองตัวเลือกลดราคาโดยมีโพเทนชิออมิเตอร์ในตัว (เพื่อปรับคอนทราสต์) และไม่มี ฉันเลือกแล้วและฉันแนะนำให้คุณทำเช่นเดียวกันกับอันที่มีอยู่แล้วภายใน


ซึ่งจะช่วยลดจำนวนชิ้นส่วนและเวลาในการบัดกรี นอกจากนี้ยังควรติดตั้งตัวต้านทานจำกัดกระแส 100 โอห์มสำหรับไฟแบ็คไลท์ การต่อไฟ 5 โวลต์โดยตรงอาจมีความเสี่ยงที่ไฟแบ็คไลท์จะไหม้ได้
WG12864B – Arduino UNO
1 (GND) - GND
2 (วีซีซี) - +5V
4 (อาร์เอส) – 10
5 (ขวา/ซ้าย) – 11
6 (จ) – 13
15 (PSB) – GND
19 (BLA) – ผ่านตัวต้านทาน - +5V
20 (BLK) – GND

วิธีที่สะดวกที่สุดคือการประกอบทุกอย่างด้านหลังหน้าจอแล้วดึงสายไฟ 5 เส้นออกมาเชื่อมต่อกับ Arduino UNO ผลลัพธ์ที่ได้ควรมีลักษณะดังนี้:


สำหรับผู้ที่ยังเลือกอยู่ การเชื่อมต่อแบบขนานฉันจะจัดเตรียมตารางการเชื่อมต่อ

และแผนภาพสำหรับหน้าจอตัวเลือก B:



สามารถเชื่อมต่อเซ็นเซอร์หลายตัวเข้ากับสายสื่อสารเส้นเดียวได้ หนึ่งอันก็เพียงพอแล้วสำหรับนาฬิกาของเรา เราเชื่อมต่อสายไฟจากพิน "DQ" ของ ds18b20 กับ "pin 5" ของ Arduino UNO

เตรียมบอร์ดด้วยปุ่มต่างๆ
ในการตั้งเวลาและวันที่บนนาฬิกา เราจะใช้ปุ่มสามปุ่ม เพื่อความสะดวกเราประสานปุ่มสามปุ่มบนแผงวงจรและถอดสายไฟออก


เราเชื่อมต่อดังนี้: เราเชื่อมต่อสายไฟทั่วไปกับปุ่มทั้งสามปุ่มเข้ากับ "GND" ของ Arduino ปุ่มแรกซึ่งใช้เข้าสู่โหมดการตั้งค่าเวลาและสลับตามเวลาและวันที่เชื่อมต่อกับ "พิน 2" ปุ่มที่สองสำหรับเพิ่มค่าคือไปที่ "พิน 3" และปุ่มที่สามคือปุ่มสำหรับลดค่าคือ "พิน 4"

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


ที่ด้านหน้าของหน้าจอตามขอบเราติดเทปโฟมสองหน้าโดยควรเป็นสีดำ


เชื่อมต่อหน้าจอกับ Arduino:


แถมจาก ช่องใส่แบตเตอรี่เชื่อมต่อกับ "VIN" ของ Arduino ลบด้วย "GND" เราวางไว้ด้านหลัง Arduino ก่อนติดตั้งในกล่องอย่าลืมเชื่อมต่อเซ็นเซอร์อุณหภูมิและบอร์ดด้วยปุ่มต่างๆ


การเตรียมและการกรอกแบบร่าง
เซ็นเซอร์อุณหภูมิต้องใช้ไลบรารี OneWire

เอาต์พุตไปที่หน้าจอดำเนินการผ่านไลบรารี U8glib:

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

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

Byte addr=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97); // ที่อยู่ของเซ็นเซอร์ของฉัน

เราจดที่อยู่ของเซ็นเซอร์ของคุณไว้ระหว่าง วงเล็บปีกกาแทนที่ที่อยู่ของเซ็นเซอร์ของฉัน

คลังสินค้า:

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

ทำหน้าที่แสดงวินาทีถัดจากคำจารึก "ข้อมูล" นี่เป็นสิ่งจำเป็นสำหรับ การติดตั้งที่แม่นยำกาลเวลา
หากนาฬิกาเดินเร็วหรือช้ากว่า คุณควรเปลี่ยนค่าในบรรทัด:

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

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

ในบทความนี้ เราจะมาดูวิธีสร้างนาฬิกาที่แม่นยำ ใช้ Arduinoหรือชิปนาฬิกาเรียลไทม์ไมโครคอนโทรลเลอร์ AVR DS1307 เวลาจะแสดงบนจอ LCD

สิ่งที่จำเป็น

  • คอมพิวเตอร์ที่ติดตั้ง Arduino IDE;
  • ชิป DS1307 หรือโมดูล RTC ตามนั้น
  • ส่วนประกอบจากรายการองค์ประกอบ

คุณสามารถแทนที่ได้ บอร์ดอาร์ดูโน่ไปยังคอนโทรลเลอร์ Atmel แต่ตรวจสอบให้แน่ใจว่ามีพินอินพุตและเอาต์พุตเพียงพอ และมีการใช้งานฮาร์ดแวร์ของอินเทอร์เฟซ I2C ฉันใช้ ATMega168A-PU หากคุณจะใช้ไมโครคอนโทรลเลอร์แยกต่างหาก คุณจะต้องมีโปรแกรมเมอร์ เช่น AVR MKII ISP

สันนิษฐานว่าผู้อ่านคุ้นเคยกับ breadboarding การเขียนโปรแกรมใน Arduino IDE และมีความรู้เกี่ยวกับภาษาการเขียนโปรแกรม C บ้างแล้ว ทั้งสองโปรแกรมด้านล่างไม่จำเป็นต้องมีคำอธิบายเพิ่มเติม

การแนะนำ

ไมโครคอนโทรลเลอร์ติดตามเวลาและวันที่ได้อย่างไร ไมโครคอนโทรลเลอร์ทั่วไปมีฟังก์ชันจับเวลาที่เริ่มจากศูนย์เมื่อใช้แรงดันไฟฟ้า จากนั้นจึงเริ่มนับ ในโลก Arduino เราสามารถใช้ฟังก์ชัน millis() เพื่อดูว่าผ่านไปกี่มิลลิวินาทีนับตั้งแต่ใช้แหล่งจ่ายไฟ เมื่อถอดออกแล้วจ่ายไฟใหม่จะเริ่มนับตั้งแต่ต้น สิ่งนี้ไม่สะดวกนักเมื่อต้องทำงานกับนาฬิกาและวันที่

นี่คือจุดที่การใช้ชิป RTC (นาฬิกาเรียลไทม์) จะสะดวก ไมโครวงจรนี้พร้อมแบตเตอรี่ 3V หรือแหล่งพลังงานอื่นจะตรวจสอบเวลาและวันที่ นาฬิกา/ปฏิทินให้ข้อมูลเกี่ยวกับวินาที นาที ชั่วโมง วันในสัปดาห์ วันที่ เดือนและปี ชิปทำงานได้อย่างถูกต้องโดยมีเดือนยาวนาน 30/31 วันและมีปีอธิกสุรทิน การสื่อสารทำได้ผ่านบัส I2C (บัส I2C ไม่ได้กล่าวถึงในบทความนี้)

หากแรงดันไฟฟ้าของรางส่งกำลังหลัก Vcc ลดลงต่ำกว่าแรงดันแบตเตอรี่ Vbat RTC จะสลับไปที่โดยอัตโนมัติ การใช้พลังงานต่ำจากแบตเตอรี่สำรอง แบตเตอรี่สำรอง- โดยปกติจะเป็นแบตเตอรี่ขนาดเล็ก (ในรูปแบบของ "เหรียญ", "แท็บเล็ต") ที่มีแรงดันไฟฟ้า 3 โวลต์เชื่อมต่อระหว่างพิน 3 และตัวเครื่อง ด้วยวิธีนี้ ชิปจะยังคงติดตามเวลาและวันที่ และเมื่อมีการจ่ายไฟให้กับวงจรหลัก ไมโครคอนโทรลเลอร์จะได้รับเวลาและวันที่ปัจจุบัน

ในโครงการนี้เราจะใช้ DS1307 สำหรับชิปนี้ พิน 7 คือพิน SQW/OUT (เอาต์พุตคลื่นสี่เหลี่ยม) คุณสามารถใช้พินนี้เพื่อกะพริบ LED และแจ้งเตือนไมโครคอนโทรลเลอร์ให้จับภาพเวลา เราจะทำทั้งสองอย่าง ด้านล่างนี้เป็นคำอธิบายการทำงานของพิน SQW/OUT

รีจิสเตอร์ควบคุม DS1307 ใช้เพื่อควบคุมการทำงานของพิน SQW/OUT

บิต 7: การควบคุมเอาท์พุต (OUT) บิตนี้ควบคุมระดับเอาท์พุตของพิน SQW/OUT เมื่อปิดเอาท์พุตคลื่นสี่เหลี่ยม ถ้า SQWE = 0 ระดับตรรกะบนพิน SQW/OUT จะเป็น 1 ถ้า OUT = 1 และ 0 ถ้า OUT = 0 ในตอนแรก บิตนี้ปกติจะเป็น 0 บิต 4: Square Wave Enable (SQWE) บิตนี้ เมื่อตั้งค่าเป็นลอจิก 1 จะเปิดใช้งานเอาท์พุตออสซิลเลเตอร์ ความถี่ของพัลส์คลื่นสี่เหลี่ยมขึ้นอยู่กับค่าของบิต RS0 และ RS1 เมื่อตั้งค่าความถี่ของคลื่นสี่เหลี่ยมเป็น 1 Hz การลงทะเบียนนาฬิกาจะได้รับการอัปเดตในช่วงที่คลื่นสี่เหลี่ยมตก ในตอนแรก บิตนี้มักจะตั้งค่าเป็น 0 บิต 1 และ 0: การเลือกความถี่ (RS) บิตเหล่านี้จะควบคุมความถี่ของเอาท์พุตคลื่นสี่เหลี่ยมเมื่อเปิดเอาท์พุตคลื่นสี่เหลี่ยม ตารางต่อไปนี้แสดงรายการความถี่คลื่นสี่เหลี่ยมที่สามารถเลือกได้โดยใช้บิตเหล่านี้ บิตเหล่านี้มักจะถูกตั้งค่าเป็น 1 ในตอนแรก

ตารางนี้จะช่วยคุณในเรื่องความถี่:

DS1307 การเลือกความถี่คลื่นสี่เหลี่ยม
ความถี่พัลส์บิต 7บิต 6บิต 5บิต 4บิต 3บิต 2บิต 1บิต 0
1 เฮิรตซ์0 0 0 1 0 0 0 0
4.096 กิโลเฮิร์ตซ์0 0 0 1 0 0 0 1
8.192 กิโลเฮิร์ตซ์0 0 0 1 0 0 1 0
32.768 กิโลเฮิร์ตซ์0 0 0 1 0 0 1 1

หากคุณเชื่อมต่อ LED และตัวต้านทานเข้ากับพิน 7 และต้องการให้ LED กระพริบที่ความถี่ 1 Hz คุณต้องเขียนค่า 0b00010000 ลงในรีจิสเตอร์ควบคุม หากคุณต้องการพัลส์ 4.096 kHz คุณจะต้องเขียน 0b000100001 ในกรณีนี้ คุณจะต้องใช้ออสซิลโลสโคปเพื่อดูพัลส์ เนื่องจากไฟ LED จะกะพริบเร็วมากจนดูเหมือนเปิดตลอดเวลา เราจะใช้พัลส์ที่มีความถี่ 1 Hz

ฮาร์ดแวร์

แสดงด้านล่าง โครงการโครงสร้างสิ่งที่เราต้องการ

เราต้องการ:

  • ขั้วต่อ ISP (ในการเขียนโปรแกรมระบบ, การเขียนโปรแกรมในวงจร) สำหรับการกระพริบเฟิร์มแวร์ไมโครคอนโทรลเลอร์
  • ปุ่มสำหรับตั้งเวลาและวันที่
  • ไมโครคอนโทรลเลอร์สำหรับการสื่อสารกับ RTC ผ่านบัส I2C
  • เพื่อแสดงวันที่และเวลา

แผนภาพ:


รายการองค์ประกอบ

ด้านล่างเป็นภาพหน้าจอจาก Eagle:


ซอฟต์แวร์

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

ก่อนอื่นเราจะเขียนเวลาและวันที่ลงใน RTC ซึ่งคล้ายกับการตั้งเวลาบนนาฬิกา

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

รหัสต่อไปนี้ตั้งค่าและเขียนลงใน RTC:

#รวม // กำหนดหมุด LCD #define RS 9 #define E 10 #define D4 8 #define D5 7 #define D6 6 #define D7 5 LiquidCrystal lcd (RS, E, D4, D5, D6, D7); // การขัดจังหวะ 0 คือไมโครคอนโทรลเลอร์พิน 4 (พินดิจิตอล Arduino 2) int btnSet = 0; // อินเตอร์รัปต์ 1 คือไมโครคอนโทรลเลอร์พิน 5 (พินดิจิตอล Arduino 3) int btnSel = 1; // ขัดจังหวะการตั้งค่าสถานะระเหย int togBtnSet = false; int ระเหย togBtnSel = false; int ผันผวน counterVal = 0; // ตัวแปรเพื่อติดตามว่าจุดไหนใน "เมนู" ที่เรามีความผันผวน int menuCounter = 0; // อาร์เรย์ของค่าระเหย int menuValues; // 0=ชั่วโมง, 1=นาที, 2=วันของเดือน, 3=เดือน, 4=ปี, 5=วันในสัปดาห์ // ชื่อเมนู char* menuTitles = ( "ตั้งชั่วโมง", "ตั้งนาที", "ตั้งวันที่ ", "ตั้งเดือน ", "ตั้งปี ", "ตั้งวัน (1=จันทร์)" ); // อาร์เรย์ของวันในสัปดาห์ char* days = ( "NA", "Mon", "Tue", "Wed", "Thu", "Fre", "Sat", "Sun" ); การตั้งค่าเป็นโมฆะ () ( // ประกาศการขัดจังหวะ เรียกใช้ฟังก์ชัน addValue/nextItem // บนขอบที่เพิ่มขึ้นบน btnXXXแนบInterrupt(btnSet, เพิ่มมูลค่า, RISING);แนบInterrupt(btnSel, nextItem, RISING); Wire.begin(); lcd.begin ( 16,2); showWelcome(); ) // ฟังก์ชันขัดจังหวะ void addedValue() ( // ตัวแปรคงที่ไม่ได้ลงนามแบบยาว LastInterruptTime = 0; // สร้างการประทับเวลาแบบยาวที่ไม่ได้ลงนาม InterruptTime = มิลลิวินาที (); // หากประทับเวลามากกว่า LastInterruptTime มากกว่า 200 if (interruptTime - LastInterruptTime > 200) ( togBtnSet = true; // เพิ่ม counterVal ขึ้น 1 counterVal++; ) // ตั้งค่า LastInterruptTime เป็นการประทับเวลา // เพื่อให้เรารู้ว่าเราได้ไปไกลกว่านี้แล้ว LastInterruptTime = InterruptTime ) // Interrupt ฟังก์ชั่นสำหรับ; รายการเมนูถัดไปเป็นโมฆะ nextItem() (คงที่ unsigned long LastInterruptTime = 0; unsigned long InterruptTime = millis(); if (interruptTime - LastInterruptTime > 200) ( togBtnSel = true; // เพิ่มตัวนับเมนูดังนั้นเราจึงไปที่ รายการเมนูถัดไป menuCounter++ ; ถ้า (menuCounter > 6) menuCounter = 0; // วาง counterVal ในเมนูตัวนับองค์ประกอบอาร์เรย์ menuValues ​​​​= counterVal; // รีเซ็ต counterVal ตอนนี้เราเริ่มจาก 0 สำหรับรายการเมนูถัดไป counterVal = 0; ) LastInterruptTime = เวลาขัดจังหวะ; ) // ฟังก์ชันการแปลง ตัวเลขทศนิยมเป็น BCD ไบต์ decToBCD(byte val) ( return ((val/10*16) + (val%10)); ) // ฟังก์ชั่นเพื่อตรวจสอบว่ามีการกดปุ่มเมนูหรือไม่ // และอัปเดตชื่อบนจอแสดงผล ถือเป็นโมฆะ checkCurrentMenuItem() ( if (togBtnSel) ( togBtnSel = false; lcd.setCursor(0,0); lcd.print(menuTitles); ) ) // ฟังก์ชั่นเพื่อตรวจสอบว่ามีการกดปุ่มเพิ่มหรือไม่ // และอัพเดตตัวแปร ในความเหมาะสม องค์ประกอบอาร์เรย์, // บวกเอาต์พุตของค่าใหม่ไปยังจอแสดงผล ถือเป็นโมฆะ checkAndUpdateValue() ( // ตรวจสอบว่ามีการทริกเกอร์การขัดจังหวะ = กดปุ่มถ้า (togBtnSet) ( // อัปเดตค่าขององค์ประกอบอาร์เรย์ด้วย counterVal menuValues ​​​​= counterVal; // รีเซ็ตแฟล็กขัดจังหวะ togBtnSet = false; lcd.setCursor(7,1); // พิมพ์ค่าใหม่ lcd.print(menuValues); lcd.print(" "); // ข้อความต้อนรับสั้นๆ ตอนนี้เรารู้แล้วว่าทุกอย่างเรียบร้อยดี void showWelcome() ( lcd. setCursor(2,0); lcd .print("สวัสดีชาวโลก"); lcd.setCursor(3,1); lcd.print("ฉันยังมีชีวิตอยู่"); ล่าช้า (500); lcd.clear() ; ) // เขียนข้อมูลไปยัง RTC เป็นโมฆะ writeRTC() ( Wire.beginTransmission(0x68); Wire.write(0); // ที่อยู่เริ่มต้น Wire.write(0x00); // วินาที Wire.write(decToBCD(menuValues)) ; // แปลงนาทีเป็นโค้ด BCD และเขียน Wire.write(decToBCD(menuValues)); // แปลงชั่วโมงเป็นโค้ด BCD และเขียน Wire.write(decToBCD(menuValues)); รหัส BCD และเขียน Wire.write(decToBCD( menuValues)); // แปลงวันของเดือนเป็นโค้ด BCD และเขียน Wire.write(decToBCD(menuValues)); // แปลงเดือนเป็นโค้ด BCD แล้วเขียน Wire.write(decToBCD(menuValues)); // แปลงปีเป็นโค้ด BCD แล้วเขียน Wire.write(0b00010000); // เปิด พัลส์สี่เหลี่ยม 1 Hz บนพิน 7 Wire.endTransmission(); // ปิดการถ่ายโอน ) // เวลาแสดง // หากต้องการดูว่า RTC ทำงานอยู่ คุณต้องดูโปรแกรมอื่น void showTime() ( lcd.setCursor(0,0); lcd.print(" "); lcd.print (menuValues ​​); lcd.print( ): // ชั่วโมง lcd. print (menuValues ​​); // นาที lcd.setCursor (3,1) ; ; lcd.print(" "); // วันในสัปดาห์ lcd.print(menuValues); // date lcd.print(menuValues); "."); // เรียกใช้ฟังก์ชัน writeRTC writeRTC() ( if (menuCounter)< 6) { checkCurrentMenuItem(); checkAndUpdateValue(); } else { showTime(); } }

โปรแกรมนี้เริ่มต้นด้วยข้อความต้อนรับสั้นๆ ข้อความนี้แจ้งเราว่าเปิดเครื่องอยู่ LCD กำลังทำงาน และโปรแกรมเริ่มทำงานแล้ว เนื่องจากร่างทำหน้าที่เพียงเพื่อแสดงวิธีการเขียนข้อมูลจาก Arduino ไปยัง RTC DS1307 เท่านั้นจึงขาดฟังก์ชันเสริม (ตรวจสอบว่าค่าอยู่ในช่วงที่ยอมรับได้หรือไม่ การวนซ้ำเมื่อกดปุ่มเพื่อเพิ่มค่านั่นคือรีเซ็ตเป็น 0 เมื่อค่า เช่น นาที เกิน 60 เป็นต้น)

// รวมถึงไฟล์ส่วนหัว #include #รวม // กำหนดหมุด LCD #define RS 9 #define E 10 #define D4 8 #define D5 7 #define D6 6 #define D7 5 LiquidCrystal lcd (RS, E, D4, D5, D6, D7); // พินที่จะรับพัลส์จาก RTC int clockPin = 0; // ตัวแปรเวลาและวันที่ไบต์วินาที; ไบต์นาที ไบต์ชั่วโมง; วันไบต์; วันที่ไบต์; เดือนไบต์; ปีไบต์; // อาร์เรย์ของวันในสัปดาห์ char* days = ( "NA", "Mon", "Tue", "Wed", "Thu", "Fre", "Sat", "Sun" ); // ฟังก์ชั่นที่ดำเนินการเฉพาะเมื่อเริ่มต้นการตั้งค่าโมฆะ() ( pinMode(clockPin, INPUT); pinMode(clockPin, LOW); Wire.begin(); lcd.begin(16,2); showWelcome(); ) / / ข้อความต้อนรับสั้นๆ ตอนนี้เรารู้แล้วว่าทุกอย่างเรียบร้อยดี void showWelcome() ( lcd.setCursor(2,0); lcd.print("Hello world."); lcd.setCursor(3,1); lcd.print( " ฉันยังมีชีวิตอยู่"); ล่าช้า (500); lcd.clear(); byte bcdToDec(byte val) ( return ((val/16*10) + (val%16)); ) // สิ่งนี้ถูกดำเนินการ วนซ้ำอย่างต่อเนื่อง () ( // ถ้า clockPin สูงถ้า (digitalRead (clockPin)) ( // เริ่มการส่ง I2C ที่ที่อยู่ 0x68 Wire.beginTransmission (0x68); // เริ่มต้นที่ที่อยู่ 0 Wire.write (0); / / ปิดการถ่ายโอน Wire.endTransmission(); // เริ่มอ่านข้อมูลไบนารี 7 รายการจาก 0x68 Wire.requestFrom(0x68, 7); Second = bcdToDec(Wire.read()); = bcdToDec(Wire.read()); (Wire.read()); เดือน = bcdToDec(Wire.read()); // การจัดรูปแบบและการแสดงเวลา lcd.setCursor(4,0); ถ้า (ชม< 10) lcd.print("0"); lcd.print(hour); lcd.print(":"); if (minute < 10) lcd.print("0"); lcd.print(minute); lcd.print(":"); if (second < 10) lcd.print("0"); lcd.print(second); lcd.setCursor(2,1); // Форматирование и отображение даты lcd.print(days); lcd.print(" "); if (date < 10) lcd.print("0"); lcd.print(date); lcd.print("."); if (month < 10) lcd.print("0"); lcd.print(month); lcd.print("."); lcd.print(year); } }

บทสรุป

ในบทความนี้ เราได้ดูชิป DS1307 จาก Maxim Integrated และเขียนโปรแกรมสาธิตสองโปรแกรม: โปรแกรมหนึ่งสำหรับตั้งเวลาและวันที่ และอีกโปรแกรมสำหรับอ่านเวลาและวันที่ เพื่อตรวจสอบว่ามีการกดปุ่มหรือไม่ เราใช้การขัดจังหวะ ซึ่งกำจัดอิทธิพลของการตีกลับจากการสัมผัสด้วย

ภาพถ่ายและวิดีโอ

การตั้งเวลา

เวลาอ่าน

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

จากบทความนี้คุณจะได้เรียนรู้:

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

ฉันไม่สามารถหยุดคิดถึงเรื่องนี้ได้สักนาที ฉันฝันและเห็นว่าในที่สุดเราจะมาถึงจุดที่ทุกคนสามารถซื้อผู้ช่วยหุ่นยนต์ส่วนตัวได้ ไม่สำคัญว่าเขาจะทำอะไร เก็บขยะ ตัดหญ้า ล้างรถ

ฉันจินตนาการได้เลยว่าเป็นอย่างไร อัลกอริธึมที่ซับซ้อนมันจะต้องมีอยู่ใน “สมอง” ของพวกเขา

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

ชมภาพยนตร์เรื่อง "I Robot", " ปัญญาประดิษฐ์, "สตาร์ วอร์ส".

ชาวญี่ปุ่นได้ดำเนินการพัฒนาของตนมาเป็นเวลานาน ทำไมเราแย่ลง?? เราได้รับความนิยมน้อยมาก ฉันรู้จักนักพัฒนาเพียงไม่กี่คน ฉันสามารถนับมันด้วยนิ้วของฉัน เรากำลังทำอย่างอื่นอยู่ เราเป็นตัวแทนจำหน่าย เราเพียงซื้ออุปกรณ์สำเร็จรูป หุ่นยนต์ ของเล่น และขยะทุกประเภท

ทำไมเราไม่พัฒนาสิ่งนี้:

หรือสิ่งนี้:

ฉันจบความคิดของฉันออกมาดังๆ เรามาพูดถึงการเชื่อมต่อ DS1302 Real Time Clock Timer กับ Arduino กันดีกว่า

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

คอนโทรลเลอร์ Arduino ไม่มีนาฬิกาของตัวเอง ดังนั้นหากจำเป็นจะต้องเสริมด้วยไมโครวงจร DS1302 พิเศษ

สำหรับการจ่ายไฟ บอร์ดเหล่านี้สามารถใช้แบตเตอรี่ของตัวเองหรือจ่ายไฟโดยตรงจากบอร์ด Arduino

ตารางพินเอาท์:

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


วิธีการเขียนโปรแกรม Arduino ให้ทำงานกับ DS1302

จำเป็นต้องดาวน์โหลดไลบรารี่ที่ถูกต้องจากแหล่งที่เชื่อถือได้

ไลบรารีช่วยให้คุณอ่านและเขียนพารามิเตอร์แบบเรียลไทม์ได้ ฉันให้คำอธิบายสั้น ๆ ด้านล่าง:

#รวม // เชื่อมต่อห้องสมุด
iarduino_RTC วัตถุ (ชื่อ [, RST_OUTPUT [, CLK_OUTPUT [, DAT_OUTPUT ]]] ); // สร้างวัตถุ

การทำงาน เริ่ม();// เริ่มต้นการทำงานของโมดูล RTC

การทำงาน ตั้งเวลา(วินาที [, MIN [, ชั่วโมง [, วัน [, เดือน [, ปี [, วัน]]]]]] ); //ตั้งเวลา.

การทำงาน เวลาที่ได้รับ([ เส้น ] ); //อ่านเวลา..

การทำงาน เวลากระพริบตา (พารามิเตอร์ [ความถี่] ); // ทำให้ฟังก์ชัน gettime "กะพริบ" พารามิเตอร์ที่ระบุเวลา.

การทำงาน ระยะเวลา(นาที ); // ระบุระยะเวลาขั้นต่ำในการเข้าถึงโมดูลเป็นนาที

ตัวแปร วินาที// ส่งกลับวินาทีจาก 0 ถึง 59

ตัวแปร นาที// ส่งกลับนาทีจาก 0 ถึง 59

ตัวแปร ชั่วโมง// ส่งกลับชั่วโมงจาก 1 ถึง 12

ตัวแปร ชั่วโมง// ส่งกลับชั่วโมงจาก 0 ถึง 23

ตัวแปร เที่ยงวัน// ส่งกลับเที่ยง 0 หรือ 1 (0-am, 13-pm)

ตัวแปร วัน// ส่งกลับวันของเดือนตั้งแต่ 1 ถึง 31

ตัวแปร วันธรรมดา// ส่งกลับวันในสัปดาห์จาก 0 ถึง 6 (0 คือวันอาทิตย์, 6 คือวันเสาร์)

ตัวแปร เดือน// ส่งกลับเดือนตั้งแต่ 1 ถึง 12

ตัวแปร ปี// ส่งกลับปีจาก 0 ถึง 99

พวกเราเขียน โปรแกรมง่ายๆ- การตั้งเวลาปัจจุบันในโมดูล RTC (DS1302):

อาร์ดูโน่

#รวม เวลา iarduino_RTC (RTC_DS1302,6,7,8); การตั้งค่าเป็นโมฆะ () (ล่าช้า (300); Serial.begin (9600); time.begin (); time.settime (0,51,21,27,10,15,2); // 0 วินาที 51 นาที 21 ชั่วโมง 27 ตุลาคม 2558 วันอังคาร ) void loop())( if(millis()%1000==0)( // หากผ่านไป 1 วินาที Serial.println(time.gettime("d-m-Y, H:i: s, D")); // แสดงการหน่วงเวลา (1); // หยุดชั่วคราวเป็นเวลา 1 ms เพื่อไม่ให้แสดงเวลาหลายครั้งใน 1 ms ) )

#รวม

iarduino_RTCtime(RTC_DS1302, 6, 7, 8);

การตั้งค่าเป็นโมฆะ () (

ล่าช้า (300);

อนุกรม เริ่มต้น(9600);

เวลา. เริ่ม();

เวลา. ตั้งเวลา (0, 51, 21, 27, 10, 15, 2); // 0 วินาที 51 นาที 21 ชั่วโมง 27 ตุลาคม 2558 วันอังคาร

เป็นโมฆะวน() (

ถ้า (มิลลิวินาที() % 1,000 == 0 ) ( // หากผ่านไป 1 วินาที

อนุกรม println (เวลา .gettime ( "dmY, H:i:s, D" ) ) ; //แสดงเวลา

ล่าช้า(1); // หยุดชั่วคราวเป็นเวลา 1 ms เพื่อไม่ให้แสดงเวลาหลายครั้งใน 1 ms

การอ่าน เวลาปัจจุบันจากโมดูล RTC (DS1302) และส่งออกไปยัง "พอร์ตอนุกรม":

#รวม เวลา iarduino_RTC (RTC_DS1302,6,7,8); การตั้งค่าเป็นโมฆะ() ( ล่าช้า (300); Serial.begin(9600); time.begin(); ) void loop())( if(millis()%1000==0)( // ถ้าผ่านไป 1 วินาที Serial .println (time.gettime("d-m-Y, H:i:s, D")); // แสดงการหน่วงเวลา (1); // หยุดชั่วคราวเป็นเวลา 1 ms เพื่อไม่ให้แสดงเวลาหลายครั้งใน 1 ms ) )

ฉันจำเป็นต้องสร้างบางสิ่งที่ยิ่งใหญ่กว่านี้ นาฬิกาแขวนพร้อมปรับความสว่างอัตโนมัติ

นาฬิกาเหล่านี้เหมาะสำหรับห้องขนาดใหญ่ เช่น โถงทางเดินในสำนักงานหรืออพาร์ตเมนต์ขนาดใหญ่

การสร้างนาฬิกาแขวนขนาดใหญ่นั้นไม่ใช่เรื่องยากโดยใช้คำแนะนำเหล่านี้


ในการประมาณขนาดของนาฬิกา คุณสามารถสันนิษฐานได้ว่าส่วนหนึ่งของนาฬิกาจะเป็นขนาดกระดาษ A4 ซึ่งจะทำให้ง่ายต่อการใช้กรอบรูปในขนาดที่เหมาะสม

ขั้นตอนที่ 1. ส่วนประกอบของนาฬิกาแขวนขนาดใหญ่

สายไฟ, บัดกรี, หัวแร้ง, แถบ LED อาร์ดูโน่ นาโน ตัวแปลงไฟ DC-DC LM2596
แถบ LED WS2811 ยาว 4 เมตร เซ็นเซอร์วัดแสง นาฬิกาเรียลไทม์ DS3231
ไมโครสวิตช์

สิ่งที่ฉันใช้สำหรับโครงการนี้:

ขั้นตอนที่ 8 ตั้งโปรแกรมนาฬิกา

หลังจากเล่นซอเล็กน้อย ฉันก็ได้นาฬิกาที่ตอบโจทย์ความต้องการของฉันได้อย่างสมบูรณ์ ฉันแน่ใจว่าคุณสามารถทำได้ดีกว่าฉัน

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

หากต้องการเปลี่ยนสีนาฬิกาแขวนที่ใช้ต้องเปลี่ยนตัวแปรในบรรทัดที่ 22 ( int ledColor = 0x0000FF; // สีที่ใช้ (เป็นฐานสิบหก)- คุณสามารถดูรายการสีและรหัสฐานสิบหกได้ในหน้า: https://github.com/FastLED/FastLED/wiki/Pixel-refe…

หากคุณมีปัญหาในการดาวน์โหลด ให้ใช้มิเรอร์: http://bit.ly/1Qjtgg0

สามารถดาวน์โหลดร่างสุดท้ายของฉันได้

ขั้นตอนที่ 9 สร้างตัวเลขโดยใช้โพลีสไตรีน

ฐานเครื่องตัด การทำงานของเครื่องตัด แบบฟอร์มทั่วไปเครื่องตัด
ผลลัพธ์ของเครื่องตัด

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

คุณสามารถดูว่าฉันทำมันได้อย่างไรในภาพด้านบน

ในการจ่ายไฟให้เครื่องตัดฉันใช้แหล่งจ่ายไฟ 12v

จากการตัดคุณควรได้สี่ส่วน นาฬิกาใหญ่ซึ่งหนึ่งในนั้นปรากฏอยู่ในรูปภาพ

ขั้นตอนที่ 10 ติดตัวเลขและปิดทุกอย่างด้วยตัวกระจายแสง นาฬิกาแขวนขนาดใหญ่ชิ้นสุดท้าย

เปล่งประกายระหว่างวัน เรืองแสงในเวลากลางคืน

หลังจากตัดตัวเลขและจุดทั้งสี่ของนาฬิกาแขวนออกแล้ว ให้ทากาวทั้งหมดลงบนกระดาษแข็งด้วย แถบ LED(ฉันใช้เทปสองหน้าเพื่อทำให้กระบวนการง่ายขึ้น)

เพื่อปัดเป่าความยาก ไฟ LEDฉันใช้กระดาษสองแผ่นทับตัวเลขโพลีสไตรีน เพื่อความสะดวกและสวยงาม ฉันจึงใช้กระดาษขนาด A2 พับครึ่ง

หลังจากทำตามขั้นตอนทั้งหมดนี้แล้ว ฉันจึงวางนาฬิกาแขวนขนาดใหญ่ที่ได้ผลลัพธ์ไว้ในกรอบรูปขนาดใหญ่ที่เข้ากัน

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

ติดต่อกับ