สร้างนาฬิกา Arduino ที่แม่นยำโดยใช้สายเพียงเส้นเดียว - ไม่จำเป็นต้องใช้ฮาร์ดแวร์ภายนอก!

สร้างนาฬิกา Arduino ที่แม่นยำโดยใช้สายเพียงเส้นเดียว - ไม่จำเป็นต้องใช้ฮาร์ดแวร์ภายนอก!

สารบัญ:

Anonim

วิธีสร้างนาฬิกา Arduino - โดยไม่ใช้ออสซิลเลเตอร์ภายนอกหรือชิพนาฬิกา:

(เพิ่มเติมโครงการของฉันในเว็บไซต์การวิจัยของเรา - คลิกโลโก้ 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 (นาที);

}

}

ตัวอย่างโครงการของฉันในผลงานที่นี่

วัสดุ: