สารบัญ:

โครงการนาฬิกาปลุก Arduino: 14 ขั้นตอน
โครงการนาฬิกาปลุก Arduino: 14 ขั้นตอน

วีดีโอ: โครงการนาฬิกาปลุก Arduino: 14 ขั้นตอน

วีดีโอ: โครงการนาฬิกาปลุก Arduino: 14 ขั้นตอน
วีดีโอ: DIY นาฬิกาปลุกส่วนตัวง่ายๆจาก REKA:BIT 2024, กรกฎาคม
Anonim
โครงการนาฬิกาปลุก Arduino
โครงการนาฬิกาปลุก Arduino

ในโครงการนี้ เราจะใช้ Arduino Uno เพื่อควบคุมหน้าจอ LCD เพื่อแสดงเวลาปัจจุบันและเวลาที่นาฬิกาปลุกตั้งไว้ เราจะใช้ปุ่มต่างๆ ในการตั้งค่าแต่ละครั้ง

วัสดุ:

  • Arduino Uno -
  • เขียงหั่นขนม -
  • สายจัมเปอร์ (x13+) -
  • ตัวต้านทาน 10 kohm (x4) -
  • หน้าจอ LCD -
  • 7 ปุ่ม -
  • ลำโพง Piezo -

ขั้นตอนที่ 1: คำแนะนำในการเชื่อมต่อ

คำแนะนำในการเชื่อมต่อ
คำแนะนำในการเชื่อมต่อ

1. เชื่อมต่อสายจัมเปอร์จากพิน 5V บน Arduino เข้ากับราง + บนเขียงหั่นขนม

ขั้นตอนที่ 2:

ภาพ
ภาพ

2. เชื่อมต่อสายจัมเปอร์จากพิน GND บน Arduino เข้ากับราง - ถัดจากราง + ที่คุณเลือกบนเขียงหั่นขนม

ขั้นตอนที่ 3:

ภาพ
ภาพ

3. เชื่อมต่อหน้าจอ LCD กับแหล่งจ่ายไฟ กราวด์ และพิน TX (พิน 1)

ขั้นตอนที่ 4:

ภาพ
ภาพ

4. วางปุ่ม 7 ปุ่มบนเขียงหั่นขนมโดยให้ขาข้ามช่องว่างในเขียงหั่นขนม

ขั้นตอนที่ 5:

ภาพ
ภาพ

5. วางตัวต้านทาน 10 kohm จากราง - โดยเชื่อมต่อพิน GND เข้ากับพินด้านซ้ายล่างของปุ่ม

ขั้นตอนที่ 6:

ภาพ
ภาพ

6. วางสายจัมเปอร์ระหว่างหมุดด้านล่างขวาของปุ่มและราง 5V บนเขียงหั่นขนมของคุณ

ขั้นตอนที่ 7:

ภาพ
ภาพ

7. วางสายจัมเปอร์ระหว่างพิน 6 จากนั้น 8-13 และพินบนปุ่มที่ต่อตัวต้านทาน

ขั้นตอนที่ 8:

ภาพ
ภาพ

8. ถัดไป วางลำโพง Piezo ของคุณบนเขียงหั่นขนมและเชื่อมต่อพิน 7 กับพินเพาเวอร์ จากนั้นตัวต้านทาน 100 โอห์มลงกราวด์

ขั้นตอนที่ 9: คำแนะนำในการเขียนโปรแกรม

1. ภาพรวม: โปรเจ็กต์นี้จะขอให้ผู้ใช้ตั้งเวลาปัจจุบันของพลังงานเริ่มต้นบนจอแสดงผลเวลาปัจจุบันและเวลาที่ตั้งค่าการเตือนไว้ ปุ่มที่เชื่อมต่อด้านบนจะใช้เพื่อตั้งค่าในแต่ละครั้ง จากซ้ายไปขวา ตั้งชั่วโมงปัจจุบัน ตั้งนาทีปัจจุบัน ตั้ง AM หรือ PM ปัจจุบัน ตั้งเวลาปลุก ตั้งนาทีปลุก ตั้งปลุก AM หรือ PM ปุ่มสุดท้ายใช้เพื่อปิดเสียงปลุกเมื่อมีการส่งเสียง

ขั้นตอนที่ 10:

2. สิ่งแรกที่เราต้องทำคือเริ่มต้นตัวแปรที่เราจะใช้

// เริ่มต้นตัวแปรที่จะใช้int ชั่วโมง = 0; // ชั่วโมงสำหรับเวลาปัจจุบัน int นาที = 0; //

นาทีสำหรับเวลาปัจจุบัน int วินาที = 0; // วินาทีสำหรับเวลาปัจจุบัน

int hour_a = 0; int // ชั่วโมงสำหรับเวลาปลุก

นาที_a = 0; // นาทีสำหรับเวลาปลุก

bool am_pm = เท็จ; // AM/PM สลับแฟล็ก เท็จคือ AM จริงคือ PM

bool am_pm_a = เท็จ; // AM/PM สลับแฟล็กสำหรับการเตือน เท็จคือ AM จริงคือ PM

int set_hr = 13; // ใช้พิน 13 เพื่อตั้งชั่วโมง

int set_min = 12; // ใช้พิน 12 เพื่อตั้งค่านาที int

set_am_pm = 11; // ใช้พิน 11 เพื่อตั้ง am/pm

int set_hr_a = 10; // ใช้พิน 10 เพื่อตั้งเวลาปลุก int set_min_a = 9; // ใช้พิน 9 เพื่อตั้งนาทีสำหรับการเตือน int set_am_pm_a = 8; // ใช้พิน 8 เพื่อตั้ง am/pm สำหรับนาฬิกาปลุก

ลำโพง int = 7; // ปักหมุดเพื่อใช้สำหรับ speakerint แบบเงียบ = 6; // ปักหมุดเพื่อหยุดลำโพง

บูลปลุก = เท็จ; // ตั้งค่าสถานะเพื่อสลับเพื่อให้ตื่นตระหนก

บูลเงียบ = เท็จ; // แฟล็กแสดงความเงียบยังไม่ได้ถูกกด

int cur_time = 0; // ตัวแปรสำหรับเวลาปัจจุบัน

int etime = 0; // ตัวแปรสำหรับเวลาที่ผ่านไป

ขั้นตอนที่ 11:

3. ต่อไป เราต้องตั้งค่าหน้าจอ LCD และบอกให้ผู้ใช้ตั้งเวลาปัจจุบัน เนื่องจากต้องทำเพียงครั้งเดียว เราจะทำในรูทีนการตั้งค่า

การตั้งค่าเป็นโมฆะ () {

// ตั้งค่าหน้าจอ LCD

Serial.begin(9600); // เริ่มต้น Serial ที่ 9600 บอด

Serial.write(17); // เปิดไฟหลัง

Serial.write(24); // เปิดจอแสดงผลโดยมีเคอร์เซอร์และไม่กะพริบตา

อนุกรม.เขียน(12); // ล้างหน้าจอ

Serial.write(128); // เลื่อนเคอร์เซอร์ไปที่มุมซ้ายบน // ตั้งค่า pinModes pinMode(set_hr, ป้อนข้อมูล); โหมดพิน (set_min, INPUT);

pinMode(set_am_pm, INPUT);

pinMode(set_hr_a, INPUT);

pinMode(set_min_a, INPUT);

pinMode(set_am_pm_a, INPUT);

โหมดพิน (ลำโพง, เอาต์พุต);

pinMode(เงียบ, INPUT);

// เมื่อเปิดเครื่องเริ่มต้น ให้ผู้ใช้ตั้งเวลาปัจจุบัน Serial.print("ตั้งเวลาปัจจุบัน"); ล่าช้า (2000);

อนุกรม.เขียน(12);

printTimes();

cur_time = มิลลิวินาที (); // เก็บเวลาปัจจุบัน}

ขั้นตอนที่ 12:

4. จากนั้น ในรูทีนลูป เราจะติดตามเวลาและอ่านสถานะของปุ่มเพื่อดูว่าผู้ใช้ตั้งค่าเวลาใดเวลาหนึ่งหรือไม่

วงเป็นโมฆะ () {

// รักษาเวลา

รักษาเวลา();

// เช็คดูว่าถึงเวลาปลุกหรือยัง!

if((hour == hour_a && minutes == minutes_a && !quieted) || alarm){tone(speaker, 2000, 500); // ส่งสัญญาณเสียง 2000 Hz ไปยังลำโพงเป็นเวลา 500 ms

ล่าช้า (500); // หน่วงเวลา 500 ms if(!alarm){ // ถ้านาฬิกาปลุกปิดอยู่ ให้เปิดขึ้น

}

}

// หากผู้ใช้ปิดเสียงสัญญาณเตือนด้วยการกดปุ่มเงียบ ให้หยุดการเตือนหาก (นาฬิกาปลุก && !quieted && digitalRead(เงียบ)){

ปลุก = เท็จ;

เงียบ = จริง; }

// รีเซ็ตการเตือน if(!alarm && quieted && minutes != minutes_a){ quieted = false;

}

// ตรวจสอบเพื่อดูว่าพินที่ตั้งไว้สูงหรือไม่ และถ้าเป็นเช่นนั้น ให้เพิ่มค่าที่สอดคล้องกันif(digitalRead(set_hr) && hour < 12){

ชั่วโมง++;

printTimes();

ดีบัก();

}

else if (digitalRead(set_hr) && hour == 12){ hour = 1;

printTimes();

ดีบัก();

}

อื่น{}

if(digitalRead(set_min) && นาที < 59){

นาที++;printTimes();

ดีบัก();

}

else if (digitalRead(set_min) && นาที == 59){ นาที = 0;

printTimes();

ดีบัก();

}

อื่น{}if(digitalRead(set_am_pm) && am_pm){

am_pm = เท็จ;

printTimes();

ดีบัก();

}

อื่น if (digitalRead(set_am_pm) && !am_pm){ am_pm = true;printTimes();

ดีบัก();

}

อื่น{}if(digitalRead(set_hr_a) && hour_a < 12){

ชั่วโมง_a++;

printTimes();

ดีบัก();

}

else if (digitalRead(set_hr_a) && hour_a == 12){hour_a = 1;

printTimes();

ดีบัก();

}

อื่น{}if(digitalRead(set_min_a) && minutes_a < 59){

นาที_a++;

printTimes();

ดีบัก();

}

else if (digitalRead(set_min) && minutes_a == 59){minute_a = 0;

printTimes();

ดีบัก();

}

อื่น{}if(digitalRead(set_am_pm_a) && am_pm_a){

am_pm_a = เท็จ;

printTimes();

ดีบัก();

}

อื่น if (digitalRead(set_am_pm_a) && !am_pm_a){am_pm_a = true;

printTimes();

ดีบัก();

}

อื่น{}

}

ขั้นตอนที่ 13:

5. ที่นี่ คุณจะสังเกตเห็นรูทีนย่อยสองสามรายการที่ฉันสร้างขึ้น - debounce() และ printTimes() Debounce() ใช้เพื่อให้แน่ใจว่าเราอ่านปุ่มเพียงครั้งเดียว เนื่องจาก Arduino สแกนหลายพันครั้งต่อวินาที จึงอาจคิดว่ามีการกดปุ่มหลายครั้งเมื่อคุณตั้งใจให้อ่านเพียงครั้งเดียว Debounce() จะหยุดโปรแกรมจนกว่าปุ่มจะถูกปล่อย printTimes() อัปเดตหน้าจอ LCD แต่เนื่องจากเป็นคำสั่งหลายคำสั่ง ฉันจึงพิมพ์เพียงครั้งเดียว จากนั้นจึงเรียกใช้รูทีนย่อยได้ทุกเมื่อที่ค่าของเวลาเปลี่ยนแปลง

// ในขณะที่กำลังกดปุ่มใดๆ อยู่ ให้อยู่ในฟังก์ชันนี้แล้วหน่วงเวลา 250 ms

โมฆะ debounce(){

ในขณะที่(digitalRead(set_hr) || digitalRead(set_min) ||

digitalRead(set_am_pm) || digitalRead(set_hr_a) ||

digitalRead(set_min_a) || digitalRead(set_am_pm_a)){} ล่าช้า (250);

}

// พิมพ์เวลาที่อัปเดตหากมีการเปลี่ยนแปลงใด ๆ

เป็นโมฆะ printTimes(){

อนุกรม.เขียน(12);

Serial.print("เวลาปัจจุบัน:");

Serial.write(148);

ถ้า (ชั่วโมง < 10){

Serial.print("0");

}

Serial.print(ชั่วโมง);

Serial.print(":");

ถ้า (นาที < 10){

Serial.print("0");

}

Serial.print(นาที);Serial.print(":");

ถ้า (วินาที < 10){

Serial.print("0");

}

Serial.print(วินาที);

ถ้า (am_pm){

Serial.print("PM");

}

อื่น{

Serial.print("น");

}

Serial.write(168);

Serial.print("ตั้งปลุกสำหรับ:");

Serial.write(188);

ถ้า(hour_a < 10){

Serial.print("0");

}

Serial.print(hour_a);

Serial.print(":");

ถ้า(นาที_a < 10){

Serial.print("0");

}

Serial.print(นาที_a);

ถ้า (am_pm_a){

Serial.print("PM");

}

อื่น{

Serial.print("น");

}

}

// เพิ่มพารามิเตอร์เวลาเป็นโมฆะ

รักษาเวลา(){

etime = millis() - cur_time;

if(etime >= 1,000 && วินาที <59){

วินาที++;

cur_time = มิลลิวินาที ();

printTimes();

}

อื่น if(etime >= 1000 && วินาที == 59 && นาที <59){ วินาที = 0;

นาที++;

cur_time = มิลลิวินาที ();

printTimes();

}

อื่น if(etime >= 1,000 && วินาที == 59 && นาที == 59 && ชั่วโมง <12){

วินาที = 0; นาที =

0; ชั่วโมง++; cur_time =

มิลลิวินาที(); printTimes();

}

อื่น if(etime >= 1,000 && วินาที == 59 && นาที == 59 && ชั่วโมง == 12){

วินาที = 0; นาที =

0; ชั่วโมง = 1; am_pm =

!am_pm;

cur_time = มิลลิวินาที ();

printTimes();

}

อื่น{}

}

ขั้นตอนที่ 14:

6. แค่นั้นแหละ!

รวบรวมและอัปโหลดและคุณทำเสร็จแล้ว!

แนะนำ: