18...สร้างนาฬิกาดิจิตอลด้วยบอร์ด Arduino

สร้างนาฬิกาดิจิตอลด้วยบอร์ด Arduino


เมื่อ 3 ปีที่ผ่านมา


โดย เจ้าของร้าน



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

การตั้งเวลาจะทำผ่าน Serial Monitor เนื่องจากเป็นโค้ดง่ายๆ สำหรับเรียนรู้การใช้โมดูล RTC กับโมดูล Clock Display และเรียนรู้การอ่านข้อมูลที่ส่งผ่าน Serial

วงจร

 

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

ต่อขา VCC ของ RTC เข้ากับ 5V ของ Arduino


ต่อขา GND ของ RTC เข้ากับ GND ของ Arduino


ต่อขา SCL ของ RTC เข้ากับ SCL หรือขา A5 ของ Arduino


ต่อขา SDA ของ RTC เข้ากับ SDA หรือขา A4 ของ Arduino


ต่อขา VCC ของโมดูล Clock Display เข้ากับ 5V ของ Arduino


ต่อขา GND ของโมดูล Clock Display เข้ากับ GND ของ Arduino


ต่อขา CLK ของโมดูล Clock Display เข้ากับ D2 ของ Arduino


ต่อขา DIO ของโมดูล Clock Display เข้ากับ D3 ของ Arduino


โค้ด

/* DigitalClockRTC1307 By IOXhop.com */ #include <Wire.h> #include <Time.h> #include <DS1307RTC.h> #include <TM1637Display.h> // Module connection pins (Digital Pins) #define CLK 2 #define DIO 3 unsigned long previousMillis; bool showdot = false; String SerialGET = ""; TM1637Display display(CLK, DIO); void setup() {   Serial.begin(9600); } void loop() {   tmElements_t tm;   if (!RTC.read(tm)) {     tm.Hour = 0;     tm.Minute = 0;     tm.Second = 0;     RTC.write(tm);   }   display.write(tm.Hour/10, 0);   display.write(tm.Hour%10, 1);   display.write(tm.Minute/10, 2);   display.write(tm.Minute%10, 3);   // Dot blink   unsigned long currentMillis = millis();   if (currentMillis-previousMillis>500){     previousMillis = currentMillis;     display.dotShow(showdot=!showdot);   }   while (Serial.available()) {     char c = Serial.read();     if (c == '\n') {       int Hour, Min, Sec;       if (sscanf(SerialGET.c_str(), "%d:%d:%d", &Hour, &Min, &Sec) == 3) {         tm.Hour = Hour;         tm.Minute = Min;         tm.Second = Sec;         RTC.write(tm);         Serial.print("Set to ");         Serial.print(Hour);         Serial.print(":");         Serial.print(Min);         Serial.print(":");         Serial.print(Sec);         Serial.println();       }else{         Serial.println("Invalid format, Please enter Hour:Min:Sec");       }       SerialGET = "";     }     else       SerialGET += c;   } }

หรือสามารถดาว์โหลดได้ที่ DigitalClockRTC1307.zip

ดาว์โหลดไลบารี่

Time.zip


TM1637 (By IOXhop.com)


DS1307 Arduino library


คลายไฟล์ แล้วจึงนำไฟล์ไปใส่ในโฟลเดอร์ Documents\Arduino\libraries ปิดโปรแกรม Arduino แล้วเปิดขึ้นมาใหม่เพื่อให้โปรแกรมอัพเดทไลบารี่

การตั้งเวลา

หลังอัพโหลดโค้ดและต่อวงจรเรียบร้อยแล้ว เปิด Serial Monitor จากนั้นปรับตามรูป

กรอกชั่วโมง นาที และวินาที ตามรูปแบบดังนี้

ชั่วโมง:นาที:วินาที

เช่น

22:19:00

หากกรอกถูกรูปแบบ จะขึ้นว่า Set .... ตามรูป

ขอให้สนุกกับการทดลองครับผม :-D

------------------------------------------------------------------------

รายการอุปกรณ์

Arduino Uno R3 พร้อมสาย USB (Compatible) หรือ Arduino Uno R3 SMD พร้อมสาย USB (Compatible)


DS1307 RTC I2C Modules


Clock Display 4 Bits Digital Tube LED Display Module


ความคิดเห็น

บทความที่ได้รับความนิยม