สารบัญ:
- ขั้นตอนที่ 1: แผนผัง
- ขั้นตอนที่ 2: เค้าโครง
- ขั้นตอนที่ 3: "ลอจิก" ของ "Wort-Uhr"
- ขั้นตอนที่ 4: ข้อมูลโค้ด
- ขั้นตอนที่ 5: ที่อยู่อาศัย
วีดีโอ: Wort-Uhr: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
สวัสดีด้วยกัน!
นี่จะเป็นการสอนครั้งแรกของฉัน และหากคุณมีความคิดที่จะปรับปรุงหรือทำให้เข้าใจง่ายขึ้น โปรดอย่าลังเลที่จะติดต่อฉัน!
ตอนแรก "นาฬิกา" แบบนี้ไม่ใช่ความคิดของฉัน! ฉันเคยเห็นอินเทอร์เน็ตจำนวนมาก และสามารถสั่งซื้อได้ในราคาเพียงสองสามเหรียญในเว็บสโตร์ที่แตกต่างกัน แต่ฉันไม่ต้องการซื้อ ฉันต้องการทำด้วยตัวเองเพื่อเรียนรู้และเข้าใจว่ามันทำงานอย่างไร
คำเดียวสำหรับสมาชิก "ที่ไม่ใช่ชาวเยอรมัน"… ขออภัยสำหรับข้อเท็จจริงที่ว่านี่เป็นเพียง "German Wort Uhr" มันอาจจะแปลงเป็นภาษาอังกฤษหรือภาษาอื่น ๆ ได้อย่างง่ายดาย แต่เมื่อฉันเป็นภาษาเยอรมัน ฉันจึงทำให้มันเป็นภาษาของฉัน หากคุณต้องการความช่วยเหลือเกี่ยวกับภาษาของคุณ โปรดติดต่อฉัน และฉันจะพยายามช่วยเหลือคุณ
มาเริ่มกันเลย…
ขั้นตอนที่ 1: แผนผัง
แผนผังนั้นตรงไปตรงมาและหากภาพอ่านไม่ดีก็มีไฟล์ PDF ด้วย
มาเริ่มกันที่มุมล่างซ้ายกัน มีแหล่งจ่ายไฟอย่างง่ายโดยใช้ LM7805 เพื่อสร้างเอาต์พุต 5V ที่เสถียรสำหรับ PIC, shift register (74HC164) และชิปเรียลไทม์ DS3231 ไฟ LED ทั้งหมดยังมาจากส่วนนี้ D22 ที่ด้านขวาสุดมีไว้สำหรับระบุแหล่งจ่ายไฟและสามารถแยกออกจากกันได้หากไม่ต้องการ
คุณสามารถใช้แหล่งจ่ายไฟ DC ใดก็ได้สำหรับนาฬิกาที่มีกำลังไฟน้อยกว่า 40V แต่คุณควรเลือกค่าที่เหมาะสมสำหรับ C7 ควรมีระดับแรงดันไฟฟ้าอย่างน้อยสองเท่าของแรงดันไฟฟ้าขาเข้า และจำไว้ว่าคุณกำลังสร้างความร้อนใน LM7805 ดังนั้น คุณควรพยายามรักษาแรงดันไฟฟ้าขาเข้าให้ต่ำที่สุดเท่าที่จะเป็นไปได้ เพราะอย่างอื่นเป็นเพียงการสิ้นเปลืองพลังงาน ความพอดีที่ดีที่สุดคือบางอย่างระหว่าง 9V ถึง 12V DC
ไม่ต้องกังวลเรื่องขั้วของแหล่งจ่ายไฟของคุณ… p-channel MOSFET (Q1) ทำหน้าที่เป็นตัวป้องกันขั้วที่ผิดพลาด และนาฬิกาจะไม่ทำงานและไม่ได้รับความเสียหายใดๆ คุณสามารถตรวจสอบสิ่งนี้บน "ไฟ" LED D22 หากติดตั้ง
ทางด้านขวาของแผนผังคือรีจิสเตอร์กะแบบขนานในอนุกรมเข้า ฉันตัดสินใจใช้มันเพราะฉันไม่ต้องการใช้ PIC ขนาดใหญ่ที่มี I/O-Port จำนวนมาก ฉันต้องการใช้อันที่เล็กกว่าและยังมี 16F1829 อยู่ที่บ้าน ดังนั้นตัวเลือกจึงชัดเจนอยู่แล้ว ข้อมูล (IN_1, IN_2 และ IN_3) มาจาก PIC (ดูส่วนรหัสด้านล่าง) และ REGISTER_CLK ด้วย เพื่อความง่ายในโค้ดและเลย์เอาต์ PCB ฉันใช้ 74HC164 สองตัวเป็นเวลาหลายชั่วโมงและตัวสุดท้ายสำหรับ "ตรรกะ"
ที่มุมซ้ายบนคือ PIC และชิ้นส่วนที่จำเป็นทั้งหมด ฉันใช้นาฬิกาภายในจึงไม่จำเป็นต้องใช้ออสซิลเลเตอร์ ตัวต้านทานเพียงสามตัวสำหรับ SCL, SDA และ MCLR สำหรับความจริงที่ว่าฉันใช้ 32kHz เป็นตัวบ่งชี้ "วินาทีที่แน่นอน" ไม่จำเป็นต้องใช้ความถี่ที่ค่อนข้างเสถียรและแม่นยำสำหรับ PIC
ตรงกลางมี DS3231 พร้อมชิ้นส่วนภายนอกขั้นต่ำ อันที่จริงฉันใช้เฉพาะอินพุต SDA และ SCL สำหรับการสื่อสารผ่าน I²C และเอาต์พุต 32kHZ เป็นการอ้างอิงนาฬิกาภายนอกสำหรับ Timer1 ของ PIC16F1829 สำหรับผลลัพธ์นี้ เอกสารข้อมูลระบุว่าจำเป็นต้องใช้ตัวต้านทานแบบดึงขึ้นภายนอก เอาต์พุตอื่นๆ ที่ฉันไม่ได้ใช้ในโปรเจ็กต์นี้และปล่อยให้ไม่เชื่อมต่อ
นอกจากนี้ ตรงกลาง LED… ตามที่คุณสามารถอ่านได้ในแผนผัง ฉันใช้ไฟ LED สีน้ำเงิน (ที่มีตัวเรือนที่ชัดเจน) และค่าตัวต้านทาน 1k โอห์ม หากคุณตั้งใจจะทำโครงการนี้ด้วยตัวเอง คุณควรเลือกค่าของตัวต้านทานเหล่านี้ตามสีและประเภทของ LED ที่คุณเลือก โปรดจำไว้ว่าคุณต้องการตั้งนาฬิกาไว้ที่ใด ของฉันยืนอยู่ในห้องนอนของฉันดังนั้นฉันจึงไม่ต้องการให้ไฟ LED สว่างเกินไปและเลือกค่าตัวต้านทานที่มากขึ้น ลองใช้เขียงหั่นขนมพร้อมไฟ LED และค่าตัวต้านทานก่อนทำการติดตั้งบน PCB
ขั้นตอนที่ 2: เค้าโครง
หลังจากทำแผนผังเสร็จแล้วก็ถึงเวลากำหนดเส้นทาง PCB เพื่อที่ฉันใช้ KiCAD (สำหรับแผนผังด้วย) ไม่มีอะไรจะพูดมาก แค่กำหนดเส้นทาง
สำหรับการที่ฉันพิมพ์ตัวเรือนนาฬิกาด้วยตัวเอง มันค่อนข้างสำคัญที่ตำแหน่งของไฟ LED ที่ชั้นบนสุด ฉันใส่ LED และตัวต้านทานไว้ที่ชั้นบนสุดเท่านั้นเพราะฉันสั่งให้ PCB ของฉันติดตั้งบางส่วน (ชิ้นส่วน SMD ทั้งหมด) และเนื่องจาก บริษัท ที่ฉันเลือกให้วางชิ้นส่วนไว้เพียงด้านเดียวไม่ใช่สองด้าน
คุณสามารถดูการวางในรูปภาพสามมิติสองมิติที่ฉันสร้างจาก KiCAD ได้
หากคุณสนใจ… เป็นไปได้ที่จะส่งออก KiCAD PCB ไปยัง Eagle จากนั้นจึงสร้างตัวเรือนได้ง่าย เนื่องจากคุณมีข้อมูลอ้างอิงจาก PCB
ขั้นตอนที่ 3: "ลอจิก" ของ "Wort-Uhr"
ส่วนที่ใหญ่ที่สุดสำหรับโครงการนี้คือรหัสสำหรับ PIC…
ตอนแรกค้นหา "ตรรกะ" ของเวลาที่พูดในภาษาเยอรมันและแปลเป็นรหัส
ขออภัย ไม่สามารถอัปโหลดไฟล์ Excel โดยตรงได้ แต่ฉันหวังว่าการส่งออก PDF จะอ่านได้เพียงพอสำหรับคุณ ถ้าไม่ โปรดติดต่อฉัน และฉันจะส่งไฟล์ Excel ต้นฉบับให้คุณ ใน PDF คุณสามารถดูว่าฉันตั้งค่าลอจิกสำหรับนาฬิกาได้อย่างไร คุณสามารถดูว่าฉันผ่านขั้นตอนต่างๆ อย่างไรและการสะกดคำเป็นอย่างไร การคำนวณภายในโค้ด (ส่วนใหญ่เป็นคำสั่ง if-else) สามารถได้มาจากข้อมูลทางด้านขวาของตาราง ส่วนหนึ่งเป็นนาทีและอีกส่วนหนึ่งเป็นชั่วโมง
อย่างที่คุณเห็นนี่ไม่ใช่เวทมนตร์และสามารถเขียนโค้ดได้ง่ายใน C จุดที่ "ยากที่สุด" ในตรรกะคือวิธีจัดการชั่วโมงอย่างที่คุณเห็นในไฟล์ที่แสดงเฉพาะชั่วโมงจริงในตอนต้นชั่วโมงเท่านั้น. ในภาษาเยอรมัน (อาจเป็นเฉพาะภาษาบาวาเรียเท่านั้น) "ชั่วโมงหน้า" จะใช้ค่อนข้างเร็ว
สำหรับการเข้ารหัส ฉันใช้ MPLABX เป็น IDE ที่ฉันเลือก
ขั้นตอนที่ 4: ข้อมูลโค้ด
ฉันจะไม่โพสต์โค้ดของฉันที่นี่ แต่ถ้าคุณตั้งใจจะเขียนโค้ดของคุณเอง ฉันจะบอกใบ้ถึงสิ่งที่ฉัน "สะดุด" ระหว่างการพัฒนา…
ขั้นแรกให้กรอก "ลงทะเบียน":
หากคุณถ่ายโอนข้อมูลใหม่ไปยังรีจิสเตอร์บ่อยเกินไป และในรอบที่สั้นเกินไป ฉันทำการทดลองนั้น ไฟ LED ก็เริ่มกะพริบ ดังนั้นฉันจึงสร้าง "การปิดกั้นการตั้งค่าสถานะ" ซึ่งทุกนาทีจะมี "การคำนวณ" ของเวลาพูดใหม่และทำการลงทะเบียนอัปเดต
รหัสสำหรับกรอกทะเบียนอยู่ในภาพด้านบน อย่างที่คุณเห็นฉันกรอกทั้ง 3 รีจิสเตอร์แบบขนานดังนั้นฉันต้องการ PIC 3 พินสำหรับข้อมูลและ 1 พินสำหรับ CLK 74HC164 เข้ามาแทนที่ข้อมูลใหม่ในการเปลี่ยนแปลงที่บรรทัด CLK จาก 0 เป็น 1
โค้ดที่เหลือส่วนใหญ่ขึ้นอยู่กับ PIC ตรรกะ "เวลาที่พูด" และการจัดการการสื่อสารและปุ่มต่างๆ การสื่อสารส่วนใหญ่มาจาก Microchip MPLABX เพราะฉันใช้โมดูล MSSP
ความคิดที่ดีคือการอ่านแผ่นข้อมูลของ DS3231 เนื่องจากข้อมูลถูกเก็บไว้ภายในเป็น BCD ดังนั้นคุณอาจต้อง "แปลง" สิ่งนี้ในโค้ดของคุณ เท่าที่ฉันกังวล ฉันเป็นคนที่ "เรียนรู้โดยการทำ" และแน่นอนว่าไม่ได้อ่านเอกสารข้อมูล… ทำให้ฉันกังวลและหลายชั่วโมงมาก
อย่างที่คุณอาจสังเกตเห็น มีสองวิธีในการ "รักษาเวลาให้ตรงเวลา" ในการใช้งานนี้
- คุณสามารถอ่านเวลาจริงจาก DS3231
- คุณสามารถ "นับวินาที" ใน PIC ได้และเพียงแค่ซิงโครไนซ์เวลากับ DS3231 เป็นครั้งคราว
ขึ้นอยู่กับคุณและทั้งสองวิธีสามารถปฏิบัติได้จริงและตรงไปตรงมา ฉันใช้ตัวเลือกแรกและซิงโครไนซ์เฉพาะเวลาเมื่อปรับเวลาผ่านปุ่ม (เวลาเขียนเป็น DS3231) หรือทุก ๆ 24 ชั่วโมง (เวลาอ่านจาก DS3231) เพราะฉันต้องการใช้ตรรกะเพิ่มเติมด้วยตัวเอง ฉันยังหมุนนาฬิกาในตอนกลางคืน (23:00 น. ถึง 05:00 น.) เพื่อให้ง่ายขึ้นเล็กน้อยในความคิดของฉัน
ขั้นตอนที่ 5: ที่อยู่อาศัย
สุดท้ายแต่ไม่ท้ายสุด ได้เวลาดูตัวเรือนสั้น ๆ แล้ว
ดังที่ได้กล่าวไว้ข้างต้น ฉันสร้างเคสด้วยตัวเอง (โดยใช้ Eagle) และพิมพ์ด้วยเครื่องพิมพ์ 3 มิติของฉัน ดังนั้นฉันจึงต้องคอยดูตำแหน่งของไฟ LED ต่างๆ
แนบคุณสามารถค้นหาไฟล์ STL หากคุณต้องการใช้
หวังว่าคำแนะนำนี้จะช่วยคุณในการสร้าง "Wort-Uhr" ของคุณเอง หากยังมี "คำถามที่เปิดอยู่" อย่าลังเลที่จะติดต่อฉัน วิธีที่ดีที่สุดในการแสดงความคิดเห็นด้านล่าง เพราะคุณอาจไม่ใช่คนเดียวที่มีคำถามเฉพาะ
แนะนำ:
การออกแบบเกมในการสะบัดใน 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++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง