สารบัญ:
- ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น
- ขั้นตอนที่ 2: การเชื่อมต่อนาฬิกา Arduino
- ขั้นตอนที่ 3: รหัสสำหรับนาฬิกา Arduino พร้อม RTC
วีดีโอ: นาฬิกาเรียลไทม์กับ Arduino: 3 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
ในโครงการนี้ เราจะสร้างนาฬิกาด้วยความช่วยเหลือของโมดูล Arduino และ RTC เนื่องจากเราทราบดีว่า Arduino ไม่สามารถแสดงเวลาจริงได้ ดังนั้นเราจะใช้โมดูล RTC เพื่อแสดงเวลาที่เหมาะสมบน LCD อ่านทุกขั้นตอนอย่างระมัดระวัง มันจะช่วยคุณได้มากในการทำเครื่องจักร
รหัส DS3231 Arduino เหมือนกับรหัส DS1307 และใช้งานได้กับทั้งชิป RTC
รหัส Arduino ด้านล่างไม่ได้ใช้ไลบรารีใด ๆ สำหรับ DS3231 RTC ไลบรารี Wire สำหรับการโต้ตอบระหว่าง Arduino และ DS3231 โดยใช้แบบแผน I2C
ใช่! วิศวกรอิเล็กทรอนิกส์หลายคนพึ่งพาโครงการตามเวลา แต่ RTC ไม่น่าเชื่อถืออย่างสมบูรณ์ เป็นแบบใช้แบตเตอรี่และต้องเปลี่ยนไม่ช้าก็เร็ว เมื่อมาถึงโปรเจ็กต์ IoT จะใช้พิน SPI (Serial Peripheral Interface) อันมีค่า และทำให้ยุ่งเหยิงด้วยสายไฟที่พันกัน วิธีแก้ไข….นี่คือ NTP ฮีโร่ของเรา (โปรโตคอลเวลาเครือข่าย) NTP นั้นแม่นยำมากเนื่องจากได้รับเวลาจากอินเทอร์เน็ต เราจะใช้โปรโตคอลนี้โดยใช้โหมดไคลเอนต์ - เซิร์ฟเวอร์ กระบวนการนี้ง่ายมากที่ Nodemcu ของเราทำหน้าที่เป็นไคลเอนต์และขอแพ็กเก็ต NTP จากเซิร์ฟเวอร์โดยใช้ UDP ในทางกลับกัน เซิร์ฟเวอร์ส่งแพ็กเก็ตไปยังไคลเอนต์ซึ่งแยกวิเคราะห์ข้อมูล NTP เป็นโปรโตคอลการซิงโครไนซ์เวลาสากล ตอนนี้เรามาจุดไฟสถานีงานในแล็บกันเถอะ
ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น
- บอร์ด Arduino
- บอร์ด DS3231 RTC
- จอ LCD 16x2
- 2 x ปุ่มกด
- ตัวต้านทานปรับค่าได้ 10K โอห์ม (หรือโพเทนชิออมิเตอร์)
- ตัวต้านทาน 330 โอห์ม
- แบตเตอรี่เซลล์แบบเหรียญ 3V
- เขียงหั่นขนม
- สายจัมเปอร์
โมเลกุล RTC DS3231
เวลาเป็นความรู้สึกที่จำเป็นในโลกที่เร่งรีบของมนุษย์ ในโครงการเรียลไทม์
เราใช้ RTC(A. K. A Real-time clock)
RTC Real-time-clock (RTC) คือวงจรรวม (IC) ที่คอยติดตามเวลาปัจจุบัน RTC ดูแลเวลาในโหมดจริง RTC มักพบในเมนบอร์ดคอมพิวเตอร์และระบบฝังตัวเพื่อให้เข้าถึงได้ทันท่วงที
ขั้นตอนที่ 2: การเชื่อมต่อนาฬิกา Arduino
- เชื่อมต่อพิน SCL กับโมดูล RTC กับ Arduino A5
- เชื่อมต่อพิน SDA กับโมดูล RTC กับ Arduino A4
- เชื่อมต่อ VCC TO 5v และ GND TO GND
- เชื่อมต่อปุ่มกดกับพิน 8
- เชื่อมต่อปุ่มกดอื่นกับพิน 9
- เชื่อมต่อ RS ของ LCD กับขา 2 ของ Arduino
- เชื่อมต่อ E ของ LCD กับขา 3 ของ Arduino
- เชื่อมต่อ D7 ของ LCD กับพิน 7 ของ Arduino
- เชื่อมต่อ D6 ของ LCD กับพิน 6 ของ Arduino
- เชื่อมต่อ D5 ของ LCD กับพิน 5 ของ Arduino
- เชื่อมต่อ D4 ของ LCD กับพิน 4 ของ Arduino
- เชื่อมต่อ VSS & K กับ GND
- เชื่อมต่อ VDD & A กับ 5v
- เชื่อมต่อ vo กับพินเอาต์พุตโพเทนชิออมิเตอร์
ขั้นตอนที่ 3: รหัสสำหรับนาฬิกา Arduino พร้อม RTC
DS3231 ใช้งานได้กับรูปแบบ BCD เท่านั้นและเพื่อแปลง BCD เป็นทศนิยมและในทางกลับกัน ฉันใช้ 2 บรรทัดด้านล่าง (ตัวอย่างเป็นนาที):// แปลง BCD เป็น decimalminute = (นาที >> 4) * 10 + (นาที & 0x0F);
// แปลงทศนิยมเป็น BCDminute = ((นาที / 10) << 4) + (นาที% 10); void DS3231_display(): แสดงเวลาและปฏิทิน ก่อนแสดงข้อมูลเวลาและปฏิทินจะถูกแปลงจาก BCD เป็นรูปแบบทศนิยม void blink_parameter():
// นาฬิกาและปฏิทินแบบเรียลไทม์พร้อมปุ่มตั้งค่าโดยใช้ DS3231 และ Arduino // รวมรหัสไลบรารี LCD #include // รวมรหัสไลบรารีสาย (จำเป็นสำหรับอุปกรณ์โปรโตคอล I2C) #include // การเชื่อมต่อโมดูล LCD (RS, E, D4, D5, D6, D7) LiquidCrystal LCD (2, 3, 4, 5, 6, 7); การตั้งค่าเป็นโมฆะ () { pinMode (8, INPUT_PULLUP); // button1 เชื่อมต่อกับพิน 8 pinMode (9, INPUT_PULLUP); // button2 เชื่อมต่อกับพิน 9 // ตั้งค่าจำนวนคอลัมน์และแถวของ LCD lcd.begin(16, 2); Wire.begin(); // เข้าร่วมบัส i2c } char Time = "TIME::: "; ถ่านปฏิทิน = "DATE: / /20"; ไบต์ i, วินาที, นาที, ชั่วโมง, วันที่, เดือน, ปี; เป็นโมฆะ DS3231_display () { // แปลง BCD เป็นทศนิยมวินาที = (วินาที >> 4) * 10 + (วินาที & 0x0F); นาที = (นาที >> 4) * 10 + (นาที & 0x0F); ชั่วโมง = (ชั่วโมง >> 4) * 10 + (ชั่วโมง & 0x0F); วันที่ = (วันที่ >> 4) * 10 + (วันที่ & 0x0F); เดือน = (เดือน >> 4) * 10 + (เดือน & 0x0F); ปี = (ปี >> 4) * 10 + (ปี & 0x0F); // สิ้นสุดการแปลงเวลา [12] = วินาที % 10 + 48; เวลา [11] = วินาที / 10 + 48; เวลา[9] = นาที % 10 + 48; เวลา[8] = นาที / 10 + 48; เวลา[6] = ชั่วโมง % 10 + 48; เวลา[5] = ชั่วโมง / 10 + 48; ปฏิทิน[14] = ปี % 10 + 48; ปฏิทิน[13] = ปี / 10 + 48; ปฏิทิน[9] = เดือน % 10 + 48; ปฏิทิน[8] = เดือน / 10 + 48; ปฏิทิน[6] = วันที่ % 10 + 48; ปฏิทิน[5] = วันที่ / 10 + 48; lcd.setCursor(0, 0); lcd.print(เวลา); // แสดงเวลา lcd.setCursor(0, 1); lcd.print (ปฏิทิน); // แสดงปฏิทิน } เป็นโมฆะ blink_parameter(){ ไบต์ j = 0; ในขณะที่(j 23) // ถ้าชั่วโมง > 23 ==> ชั่วโมง = 0 พารามิเตอร์ = 0; if(i == 1 && พารามิเตอร์ > 59) // ถ้านาที > 59 ==> นาที = 0 พารามิเตอร์ = 0; if(i == 2 && พารามิเตอร์ > 31) // ถ้า date > 31 ==> date = 1 พารามิเตอร์ = 1; if(i == 3 && พารามิเตอร์ > 12) // ถ้าเดือน > 12 ==> เดือน = 1 พารามิเตอร์ = 1; if(i == 4 && พารามิเตอร์ > 99) // ถ้าปี > 99 ==> ปี = 0 พารามิเตอร์ = 0; sprintf(ข้อความ "%02u" พารามิเตอร์); lcd.setCursor(x, y); lcd.print(ข้อความ); ล่าช้า(200); // รอ 200ms } lcd.setCursor(x, y); lcd.print(" "); // แสดงสองช่องว่าง blink_parameter(); sprintf(ข้อความ "%02u" พารามิเตอร์); lcd.setCursor(x, y); lcd.print(ข้อความ); blink_parameter(); if(!digitalRead(8)){ // หากกดปุ่ม (พิน #8) i++; // เพิ่ม 'i' สำหรับพารามิเตอร์ return พารามิเตอร์ถัดไป // ส่งกลับค่าพารามิเตอร์และออก } } } void loop() { if(!digitalRead(8)){ // ถ้ากดปุ่ม (pin #8) i = 0; ชั่วโมง = แก้ไข (5, 0, ชั่วโมง); นาที = แก้ไข (8, 0, นาที); วันที่ = แก้ไข (5, 1, วันที่); เดือน = แก้ไข (8, 1, เดือน); ปี = แก้ไข (13, 1, ปี); // แปลงทศนิยมเป็นนาที BCD = ((นาที / 10) << 4) + (นาที% 10); ชั่วโมง = ((ชั่วโมง / 10) << 4) + (ชั่วโมง % 10); วันที่ = ((วันที่ / 10) << 4) + (วันที่ % 10); เดือน = ((เดือน / 10) << 4) + (เดือน % 10); ปี = ((ปี / 10) << 4) + (ปี % 10); // สิ้นสุดการแปลง // เขียนข้อมูลไปยัง DS3231 RTC Wire.beginTransmission(0x68); // เริ่มโปรโตคอล I2C ด้วยที่อยู่ DS3231 Wire.write(0); // ส่งที่อยู่ลงทะเบียน Wire.write(0); // รีเซ็ต sesonds และเริ่ม oscillator Wire.write (นาที); // เขียนนาที Wire.write(ชั่วโมง); // เขียนชั่วโมง Wire.write(1); // เขียนวัน (ไม่ได้ใช้) Wire.write (วันที่); // เขียนวันที่ Wire.write (เดือน); // เขียนเดือน Wire.write(ปี); // เขียนปี Wire.endTransmission(); // หยุดการส่งและปล่อยความล่าช้าของบัส I2C (200); // รอ 200ms } Wire.beginTransmission(0x68); // เริ่มโปรโตคอล I2C ด้วยที่อยู่ DS3231 Wire.write(0); // ส่งที่อยู่ลงทะเบียน Wire.endTransmission(เท็จ); // I2C รีสตาร์ท Wire.requestFrom(0x68, 7); // ขอ 7 ไบต์จาก DS3231 และปล่อยบัส I2C เมื่อสิ้นสุดการอ่านวินาที = Wire.read(); // อ่านวินาทีจากการลงทะเบียน 0 นาที = Wire.read(); // อ่านนาทีจากการลงทะเบียน 1 ชั่วโมง = Wire.read(); // อ่านชั่วโมงจากการลงทะเบียน 2 Wire.read(); // อ่านวันจากการลงทะเบียน 3 (ไม่ได้ใช้) วันที่ = Wire.read(); // อ่านวันที่จากการลงทะเบียน 4 เดือน = Wire.read(); // อ่านเดือนจากการลงทะเบียน 5 ปี = Wire.read(); // อ่านปีจากทะเบียน 6 DS3231_display(); // แสดงเวลาและปฏิทินล่าช้า (50); // รอ 50ms }
แนะนำ:
การออกแบบเกมในการสะบัดใน 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++)
Arduino ที่ถูกที่สุด -- Arduino ที่เล็กที่สุด -- Arduino Pro Mini -- การเขียนโปรแกรม -- Arduino Neno: 6 ขั้นตอน (พร้อมรูปภาพ)
Arduino ที่ถูกที่สุด || Arduino ที่เล็กที่สุด || Arduino Pro Mini || การเขียนโปรแกรม || Arduino Neno:…………………………… โปรดสมัครสมาชิกช่อง YouTube ของฉันสำหรับวิดีโอเพิ่มเติม……. โปรเจ็กต์นี้เกี่ยวกับวิธีเชื่อมต่อ Arduino ที่เล็กที่สุดและถูกที่สุดเท่าที่เคยมีมา Arduino ที่เล็กที่สุดและถูกที่สุดคือ arduino pro mini คล้ายกับ Arduino