Სარჩევი:

Arduino მაღვიძარა პროექტი: 14 ნაბიჯი
Arduino მაღვიძარა პროექტი: 14 ნაბიჯი

ვიდეო: Arduino მაღვიძარა პროექტი: 14 ნაბიჯი

ვიდეო: Arduino მაღვიძარა პროექტი: 14 ნაბიჯი
ვიდეო: Lesson 22: Using Seven Segment Display with Arduino and Electronic Dice | SunFounder Robojax 2024, ნოემბერი
Anonim
Arduino მაღვიძარა პროექტი
Arduino მაღვიძარა პროექტი

ამ პროექტში ჩვენ გამოვიყენებთ Arduino Uno– ს LCD ეკრანის გასაკონტროლებლად, რათა ნახოთ მიმდინარე დრო და დრო, რომლისთვისაც განგაშია დაყენებული. ჩვენ გამოვიყენებთ ღილაკებს ყოველ ჯერზე დასაყენებლად.

მასალები:

  • Arduino Uno -
  • პურის დაფა -
  • Jumper Wires (x13+) -
  • 10 კომის რეზისტორი (x4) -
  • LCD ეკრანი -
  • 7 ღილაკი-https://vilros.com/collections/raspberry-pi-acces…
  • პიეზო სპიკერი -

ნაბიჯი 1: დაკავშირების ინსტრუქცია

დაკავშირების ინსტრუქცია
დაკავშირების ინსტრუქცია

1. შეაერთეთ ჯუმბერის მავთული არდუინოს 5V პინიდან პურის დაფაზე ერთ + რელსზე.

ნაბიჯი 2:

გამოსახულება
გამოსახულება

2. შეაერთეთ ჯამპერის მავთული არდუინოს GND პინიდან რკინიგზით + სარკინიგზო მაგისტრალის გვერდით, რომელიც თქვენ შეარჩიეთ პურის დაფაზე.

ნაბიჯი 3:

გამოსახულება
გამოსახულება

3. შეაერთეთ LCD ეკრანი დენის, მიწისა და TX პინის (პინი 1).

ნაბიჯი 4:

გამოსახულება
გამოსახულება

4. მოათავსეთ 7 ღილაკი პურის დაფაზე, ხოლო ფეხები გადააჭარბეთ პურის დაფაზე არსებულ უფსკრულს.

ნაბიჯი 5:

გამოსახულება
გამოსახულება

5. მოათავსეთ 10 კომის რეზისტორი რკინიგზადან - სარკინიგზო მაგისტრალური GND პინით, რომელიც დაკავშირებულია ღილაკების ქვედა მარცხენა ქინძისთავებთან.

ნაბიჯი 6:

გამოსახულება
გამოსახულება

6. მოათავსეთ ჯუმბერის მავთულები ღილაკების ქვედა მარჯვენა პინსა და 5V სარკინიგზო ხაზს შორის თქვენს დაფაზე.

ნაბიჯი 7:

გამოსახულება
გამოსახულება

7. მოათავსეთ ჯუმბერის მავთულები ქინძისთავებს შორის 6, შემდეგ 8-13 და პინი ღილაკზე, რომელსაც რეზისტორი უკავშირდება.

ნაბიჯი 8:

გამოსახულება
გამოსახულება

8. შემდეგი, მოათავსეთ თქვენი Piezo სპიკერი პურის დაფაზე და დაუკავშირეთ pin 7 დენის კავშირს, შემდეგ 100 ოჰმიანი რეზისტორი მიწასთან.

ნაბიჯი 9: პროგრამირების ინსტრუქციები

1. მიმოხილვა: ეს პროექტი სთხოვს მომხმარებელს დააყენოს მიმდინარე დრო ეკრანზე საწყის ენერგიაზე მიმდინარე დრო და დრო, რომლისთვისაც განგაშია დაყენებული. ზემოთ დაკავშირებული ღილაკები გამოყენებული იქნება ყოველ ჯერზე დასაყენებლად. მარცხნიდან მარჯვნივ, მათ აქვთ მითითებული მიმდინარე საათი, მითითებული მიმდინარე წუთი, მითითებული მიმდინარე AM ან PM, მაღვიძარა, საათის მაღვიძარა, მაღვიძარა AM ან PM. ბოლო ღილაკი გამოიყენება სიგნალის გასაჩუმებლად, როდესაც ის ჟღერს.

ნაბიჯი 10:

2. პირველი რაც ჩვენ უნდა გავაკეთოთ არის ჩვენი ცვლადის ინიციალიზაცია, რომელსაც ჩვენ გამოვიყენებთ.

// ცვლადების ინიციალიზაცია გამოსაყენებლად საათში = 0; // საათი მიმდინარე დრო int წუთი = 0; //

წუთი მიმდინარე დრო int მეორე = 0; // მეორე მიმდინარე დროისთვის

int საათი_ა = 0; int // საათი მაღვიძარაზე

წუთი_ა = 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; // გამოიყენეთ pin 12 წუთში int- ის დასაყენებლად

set_am_pm = 11; // გამოიყენეთ pin 11 დილის/საღამოს დასაყენებლად

int set_hr_a = 10; // გამოიყენეთ pin 10 განგაშის საათის დასაყენებლად int set_min_a = 9; // გამოიყენეთ pin 9 მაღვიძარას წუთის დასაყენებლად int set_am_pm_a = 8; // გამოიყენეთ pin 8 დილის/საღამოს სიგნალიზაციის დასაყენებლად

int სპიკერი = 7; // ჩამაგრება, რათა გამოიყენოთ speakerint მშვიდი = 6; // ჩაამაგრეთ სპიკერის შესაჩერებლად

bool განგაში = ყალბი; // დროშის გადართვა განგაშის შესანარჩუნებლად

ბოლი გაჩუმდა = ყალბი; // მშვიდი დროშის ჩვენება არ არის დაჭერილი

int cur_time = 0; // ცვლადი მიმდინარე დროისათვის

int etime = 0; // ცვლადი გასული დროის განმავლობაში

ნაბიჯი 11:

3. შემდეგი, ჩვენ უნდა დავაყენოთ LCD ეკრანი და ვუთხრათ მომხმარებელს დააყენოს მიმდინარე დრო. ვინაიდან ეს მხოლოდ ერთხელ უნდა გაკეთდეს, ჩვენ ამას გავაკეთებთ დაყენების რუტინაში.

void setup () {

// LCD ეკრანის დაყენება

სერიული.დაწყება (9600); // სერიალის ინიციალიზაცია 9600 baud– ზე

სერიული. დაწერე (17); // ჩართეთ უკანა შუქი

სერიული. დაწერე (24); // ჩართეთ ეკრანი კურსორით და დახუჭვის გარეშე

სერიული. დაწერე (12); // ეკრანის გასუფთავება

სერიული. დაწერე (128); // კურსორის გადატანა მარცხენა ზედა კუთხეში // დააყენეთ pinModes pinMode (set_hr, შეყვანა); pinMode (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 (სპიკერი, OUTPUT);

pinMode (მშვიდი, INPUT);

// საწყის ენერგიაზე, მომხმარებლისთვის დააყენეთ მიმდინარე დრო. Serial.print ("მიმდინარე დროის დაყენება"); დაგვიანება (2000);

სერიული. დაწერე (12);

printTimes ();

cur_time = მილი (); // შეინახეთ მიმდინარე დრო}

ნაბიჯი 12:

4. შემდეგ, მარყუჟის რუტინაში, ჩვენ თვალყურს ვადევნებთ დროს და ვკითხულობთ ღილაკის სტატუსს, რომ ნახოთ არის თუ არა მომხმარებელი მითითებული რომელიმე დროს.

ბათილი მარყუჟი () {

// შეინახეთ დრო

KeepTime ();

// შეამოწმეთ დროა განგაშის დრო იყოს!

თუ ((საათი == საათი_ა && წუთი == წუთი_ა &&! ჩუმად) || განგაში) {ტონი (სპიკერი, 2000, 500); // გამოსცეს 2000 Hz ხმა დინამიკს 500 ms

დაგვიანება (500); // დააგვიანეთ 500 ms, თუ (! განგაში) {// თუ მაღვიძარა გამორთულია, ჩართეთ იგი

}

}

// თუ მომხმარებელი გააჩუმებს სიგნალს მშვიდი ღილაკის დაჭერით, შეწყვიტეთ განგაში, თუ (სიგნალი &&! ჩუმად && digitalRead (მშვიდი)) {

განგაში = ყალბი;

გაჩუმდა = მართალია; }

// აღადგინეთ განგაში, თუ (! სიგნალი && ჩუმდება && წუთი! = წუთი_ა) {ჩუმდება = ყალბი;

}

// შეამოწმეთ თუ არა მითითებული ქინძისთავები მაღალი და თუ ასეა, გაზარდეთ შესაბამისი მნიშვნელობა თუ (digitalRead (set_hr) && საათი <12) {

საათი ++;

printTimes ();

დებუნსი ();

}

else if (digitalRead (set_hr) && საათი == 12) {საათი = 1;

printTimes ();

დებუნსი ();

}

სხვა {}

თუ (digitalRead (set_min) && წუთი <59) {

წუთი ++; printTimes ();

დებუნსი ();

}

else if (digitalRead (set_min) && წუთი == 59) {წუთი = 0;

printTimes ();

დებუნსი ();

}

სხვა {} თუ (digitalRead (set_am_pm) && am_pm) {

am_pm = ყალბი;

printTimes ();

დებუნსი ();

}

else if (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

დებუნსი ();

}

სხვა {} if (digitalRead (set_hr_a) && hour_a <12) {

საათი_ა ++;

printTimes ();

დებუნსი ();

}

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

printTimes ();

დებუნსი ();

}

სხვა {} თუ (digitalRead (set_min_a) && minute_a <59) {

წუთი_ა ++;

printTimes ();

დებუნსი ();

}

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

printTimes ();

დებუნსი ();

}

სხვა {} თუ (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = ყალბი;

printTimes ();

დებუნსი ();

}

სხვა შემთხვევაში თუ (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

დებუნსი ();

}

სხვა {}

}

ნაბიჯი 13:

5. აქ, თქვენ შეამჩნევთ ჩემს მიერ შექმნილ რამოდენიმე ქვეპროგრამას - debounce () და printTimes (). Debounce () გამოიყენება იმისათვის, რომ დავრწმუნდეთ, რომ ჩვენ მხოლოდ ერთხელ ვკითხულობთ ღილაკებს. მას შემდეგ, რაც არდუინო წამში ათასობითჯერ სკანირებს, შეიძლება ფიქრობდეს, რომ ღილაკი რამდენჯერმეა დაჭერილი, როდესაც თქვენ მხოლოდ ერთხელ აპირებთ მის წაკითხვას. Debounce () გაყინავს პროგრამას ღილაკის გამოშვებამდე. printTimes () აახლებს LCD ეკრანს, მაგრამ ვინაიდან ეს იყო რამდენიმე ბრძანება, მე ერთხელ ავკრიფე ისინი და შემდეგ შემიძლია გამოვიძახო ქვეჯგუფში ნებისმიერ დროს, როცა დროის მნიშვნელობა იცვლება.

// სანამ რომელიმე ღილაკს იჭერს, დარჩით ამ ფუნქციაში, შემდეგ გადადეთ 250 ms.

void 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);

}

// ბეჭდავს განახლებულ დროს, თუ რაიმე ცვლილებაა

void printTimes () {

სერიული. დაწერე (12);

Serial.print ("მიმდინარე დრო:");

სერიული. დაწერე (148);

თუ (საათი <10) {

Serial.print ("0");

}

სერიული. ბეჭდვა (საათი);

Serial.print (":");

თუ (წუთი <10) {

Serial.print ("0");

}

Serial.print (წუთი); Serial.print (":");

თუ (მეორე <10) {

Serial.print ("0");

}

სერიული. ბეჭდვა (მეორე);

თუ (am_pm) {

Serial.print ("PM");

}

სხვა {

Serial.print ("AM");

}

სერიული. დაწერეთ (168);

Serial.print ("მაღვიძარა დაყენებულია:");

სერიული. დაწერა (188);

თუ (საათი_ა <10) {

Serial.print ("0");

}

სერიული. ბეჭდვა (საათი_ა);

Serial.print (":");

თუ (წუთი_ა <10) {

Serial.print ("0");

}

სერიული. ბეჭდვა (წუთი_ა);

თუ (am_pm_a) {

Serial.print ("PM");

}

სხვა {

Serial.print ("AM");

}

}

// დროის პარამეტრების ბათილად გაზრდა

KeepTime () {

ეტიმე = მილი () - cur_time;

if (etime> = 1000 && მეორე <59) {

მეორე ++;

cur_time = მილი ();

printTimes ();

}

else if (etime> = 1000 && მეორე == 59 && წუთი <59) {მეორე = 0;

წუთი ++;

cur_time = მილი ();

printTimes ();

}

სხვა შემთხვევაში (etime> = 1000 && მეორე == 59 && წუთი == 59 && საათი <12) {

მეორე = 0; წუთი =

0; საათი ++; cur_time =

მილილი (); printTimes ();

}

სხვა შემთხვევაში (etime> = 1000 && მეორე == 59 && წუთი == 59 && საათი == 12) {

მეორე = 0; წუთი =

0; საათი = 1; am_pm =

!შუადღემდე შუაღამემდე;

cur_time = მილი ();

printTimes ();

}

სხვა {}

}

ნაბიჯი 14:

6. ეს არის ის!

შეადგინეთ და ატვირთეთ და ყველაფერი დასრულებულია!

გირჩევთ: