![สร้างนาฬิกา Arduino ที่แม่นยำโดยใช้สายเพียงเส้นเดียว - ไม่จำเป็นต้องใช้ฮาร์ดแวร์ภายนอก! สร้างนาฬิกา Arduino ที่แม่นยำโดยใช้สายเพียงเส้นเดียว - ไม่จำเป็นต้องใช้ฮาร์ดแวร์ภายนอก!](https://img.gwsigeps.com/img/circuits/make-an-accurate-arduino-clock-using-only-one-wire-no-external-hardware-needed-1.jpg)
สารบัญ:
(เพิ่มเติมโครงการของฉันในเว็บไซต์การวิจัยของเรา - คลิกโลโก้ arduino ด้านบนของหน้าแรก)
คุณจะต้องการ:
บอร์ด Arduino (เกือบทุกรสชาติจะทำงานได้ดี) และซอฟต์แวร์
1 LED
1 Jumper Wire
(ตัวอย่างการเดินสายอัปเดตด้านล่าง …)
ฉันเป็นวิศวกรไฟฟ้ามากกว่า 20 ปีและเพิ่งค้นพบแพลตฟอร์ม Arduino เมื่อไม่กี่เดือนที่ผ่านมา ไม่จำเป็นต้องบอกว่าฉันตกหลุมรักมันและตอนนี้ฉันก็ติดโครงการ สำหรับคริสต์มาสในปีนี้ฉันต้องการมอบของขวัญที่ไม่เหมือนใครสำหรับพ่อแม่ของฉัน สำหรับแม่ของฉันมันเป็นการออกแบบนาฬิกาแบบ 'หนึ่งใน' อย่างแน่นอน ฉันไม่ได้กังวลเกี่ยวกับการปรับเวลาตามฤดูกาลหรือการกระโดดข้ามปี - เพียงแค่รักษาวันและเวลาอย่างแม่นยำ
จะสร้างสัญญาณนาฬิกาในลักษณะที่แปลกใหม่ แต่แม่นยำอย่างไร? แน่นอนว่าฉันสามารถใช้นาฬิกาฝัง IC แฟนซีหรือออสซิลเลเตอร์คริสตัล 32,768 ทั่วไปได้ แต่ฉันต้องการบางอย่างที่แตกต่างจากที่เหลือ ฉันเริ่มใช้ตัวจับเวลา 555 เพื่อส่งออกคลื่นสี่เหลี่ยมที่มั่นคง 100Hz มันใช้งานได้ดี แต่ฉันเสียประมาณ 1 วินาทีต่อชั่วโมง ไม่มีปัญหา - ฉันเพิ่งเขียนอัลกอริทึมเพื่อแก้ไขวินาทีที่หายไปในซอฟต์แวร์ ฉันมีความสุข. จากนั้นฉันก็ค้นพบว่าแม้ว่าตัวจับเวลาภายในของ Arduino ไม่น่าเชื่อถือโดยสิ้นเชิงสำหรับการรักษาเวลา แต่เอาต์พุต PWM แบบอะนาล็อกก็มีคลื่นสี่เหลี่ยมที่เสถียรมากที่ 490Hz รอบการทำงานจะถูกกำหนดโดยค่าที่เขียนไปยังขาอะนาล็อก (เช่น 0 - 0 เป็นศูนย์โวลท์ 127 คือวัฏจักรหน้าที่ 50%, 255 เป็นลอจิกสูง / 5V)
ฉันตัดสินใจลองเอาท์พุทแบบอะนาล็อก PWM เข้ากับอินเตอร์รัปต์พิน 2 โดยตรงและใช้งานได้ดี! นอกจากนี้มันยังทำงานได้อย่างสมบูรณ์แบบด้วยนาฬิกาเรียลไทม์ของคอมพิวเตอร์ของฉันไปเป็นวินาทีโดยไม่จำเป็นต้องมีการชดเชยซอฟต์แวร์ ฉันใช้งานมาหลายวันแล้วและมันก็ยังคงทำงานเหมือนที่ฉันหวังไว้ …. ทั้งหมดมีเพียงสายเดียวและบางรหัส
ของขวัญที่เสร็จแล้วจะมี PCB แบบกำหนดเองของ Eagle CAD สำหรับแหล่งจ่ายไฟและตรรกะซึ่งอยู่ในกล่องหุ้มลูกแก้ว ชุดรูปแบบทั้งหมดเป็นไฟ LED สีฟ้าน้ำแข็งเพื่อจำลองนาฬิกาอะนาล็อก ในขณะที่กล่องหุ้มมีสีขาวบนจอ LCD สีน้ำเงินแสดงวันเวลาและอุณหภูมิห้องสายเคเบิลอนุกรมเชื่อมต่อจากกล่องโครงการไปยังนาฬิกาจริง ด้วยการใช้เคาน์เตอร์ 12 บิตทศวรรษเซอร์โวและไฟ LED สีฟ้าจำนวนมากฉันให้แสงส่วนชั่วโมงที่เหมาะสมบนหน้าปัดนาฬิกาแบบอะนาล็อกที่ออกแบบเองที่พิมพ์บนลูกแก้ว เซอร์โวติดตั้งอยู่ตรงกลางของหน้าปัดนาฬิกาและมีกระดองติดกับ LED ติดตั้งเพื่อส่องสว่างด้านหลังกระจก (แต่ละนาทีเซอร์โวเปลี่ยนเป็น 6 องศาส่องสว่างในนาทีที่เหมาะสม) ฉันหวังว่าจะเสร็จเร็ว ๆ นี้และจะสร้างวิดีโอของผลิตภัณฑ์ขั้นสุดท้าย …. ฉันหวังว่าเธอจะรักมัน !!
แผนภาพการเดินสาย Arduino อย่างง่ายและรหัสการสาธิตที่จะทำให้นาฬิกาของคุณเองโดยใช้วิธีนี้ นอกจากนี้ยังมีลิงก์ไปยัง Circuit Lab ซึ่งแสดงวิธีการใช้วิธี 555 timer @ 100Hz หากคุณเลือก
รหัสและลิงก์ด้านล่าง …
555 วงจร Oscillator Timer (หากคุณต้องการลองวิธีนี้)
www.circuitlab.com/circuit/b575r9/555-100hz-oscillator/
รหัสการสาธิตนาฬิกา:
/ * ตัวอย่างนาฬิกาภายในอย่างง่าย: โดย Joseph Unik aka Relic1974
ใช้เอาต์พุต PWM แบบอะนาล็อกที่ 490Hz พร้อมรอบการทำงาน 50% ถึง
ให้เวลาที่แม่นยำมาก;) เชื่อมต่อ LED เพื่อ pin 13 to
ดูวินาทีกะพริบ เชื่อมต่อจัมเปอร์จาก Analog pin 0
ถึง Digital Pin 2 (ขัดจังหวะ 0) นาทีที่ส่งออกไปยังอนุกรม
หน้าจอ http://www.planetxresearch.com โลโก้ 'Arduino'
สำหรับโครงการและลูกเล่นเพิ่มเติม …
(อย่าลังเลที่จะใช้รหัสนี้เพื่อขยายไปสู่การใช้งานได้อย่างสมบูรณ์
นาฬิกาหรือโครงการอื่น ๆ ภายใต้ Creative Commons;)
*/
int clockInt = 0; // digital pin 2 ถูกขัดจังหวะเป็น 0
int masterClock = 0; // นับสัญญาณนาฬิกาขอบที่สูงขึ้น
int วินาที = 0; // ตัวแปร
int นาที = 0; // ตัวแปร
int ledPin = 13;
การตั้งค่าเป็นโมฆะ ()
{
AttachInterrupt (clockInt, clockCounter, RISING);
// clockInt เป็นการขัดจังหวะของเราฟังก์ชัน clockCounter จะถูกเรียกเมื่อ
// เรียกใช้บนขอบนาฬิกา RISING
analogReference (Default);
pinMode (ledPin, OUTPUT);
Serial.begin (57600);
analogWrite (0, 127); // นี่เริ่ม 'นาฬิกา' ของ PWM ด้วยรอบการทำงาน 50%
}
เป็นโมฆะ clockCounter () // เรียกโดยขัดจังหวะ
{
masterClock ++; // ด้วยการเพิ่มขึ้นของนาฬิกาแต่ละครั้งเพิ่ม 1 ถึงจำนวน masterclock
ถ้า (masterClock == 489) // 490Hz ถึงแล้ว
{
วินาที ++; // หลังจากหนึ่งรอบ 490Hz เพิ่ม 1 วินาที;)
masterClock = 0; // รีเซ็ตหลังจากครบ 1 วินาที
เสียง (13, 100, 500) // ใช้โทนเพื่อพัลส์ LED โดยไม่ชักช้า;)
}
กลับ;
}
เป็นโมฆะห่วง ()
{
ถ้า (วินาที == 60) // ตอนนี้เข้าสู่ช่วงเวลาจริงให้
{
นาที ++; // เพิ่มนาทีโดย 1
วินาที = 0; // รีเซ็ตตัวแปรวินาที
Serial.print ("Minutes =");
Serial.println (นาที);
}
}
ตัวอย่างโครงการของฉันในผลงานที่นี่