Съдържание:

Проект за будилник Arduino: 14 стъпки
Проект за будилник Arduino: 14 стъпки

Видео: Проект за будилник Arduino: 14 стъпки

Видео: Проект за будилник Arduino: 14 стъпки
Видео: Бионический будильник на Arduino Uno за 5 простых шагов. Мини-проекты Амперки 2024, Ноември
Anonim
Проект за будилник Arduino
Проект за будилник Arduino

В този проект ще използваме Arduino Uno за управление на LCD екран, за да покажем текущото време и час, за които е зададена аларма. Всеки път ще използваме бутони за настройка.

Материали:

  • Arduino Uno -
  • Breadboard -
  • Jumper Wires (x13+) -
  • 10 kohm резистора (x4) -
  • LCD екран -
  • 7 бутона-https://vilros.com/collections/raspberry-pi-acces…
  • Пиезо говорител -

Стъпка 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 hour = 0; // Час за текущо време int минута = 0; //

Минута за текущо време int секунда = 0; // Втори за текущото време

int час_а = 0; int // Час за алармено време

минута_а = 0; // Минута за алармено време

bool am_pm = false; // Флаг за превключване AM/PM. False е AM, True е PM

bool am_pm_a = false; // AM/PM превключващ флаг за аларма. False е AM, True е 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 quiet = 6; // Закрепване за спиране на високоговорителя

bool alarm = false; // Флаг за превключване, за да поддържате тревога

bool quieted = false; // Флагът, показващ тишината, не е натиснат

int cur_time = 0; // Променлива за текущото време

int etime = 0; // Променлива за изминало време

Стъпка 11:

3. След това трябва да настроим LCD екрана и да кажем на потребителя да зададе текущия час. Тъй като това трябва да се направи само веднъж, ще го направим в рутината за настройка.

void setup () {

// Настройване на LCD екран

Serial.begin (9600); // Инициализиране на Serial при 9600 бода

Serial.write (17); // Включете задното осветление

Serial.write (24); // Включете дисплея, с курсор и без мигане

Serial.write (12); // Изчистете екрана

Serial.write (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 (тих, ВХОД);

// При първоначално захранване потребителят трябва да настрои текущото време. Serial.print ("Задаване на текущия час"); забавяне (2000);

Serial.write (12);

printTimes ();

cur_time = millis (); // Съхранявайте текущото време}

Стъпка 12:

4. След това, в цикъла на цикъла, ние следим времето и четем състоянието на бутона, за да видим дали потребителят задава някое от часовете.

void loop () {

// Спазвайте времето

keepTime ();

// Проверете дали е време за аларма!

ако ((час == час_а && минута == минута_а &&! тихо) || аларма) {тон (високоговорител, 2000, 500); // Извежда звук от 2000 Hz към високоговорителя за 500 ms

забавяне (500); // Забавяне 500 ms, ако (! Аларма) {// Ако алармата е изключена, включете я

}

}

// Ако потребителят заглуши алармата, като натисне бутона за тих режим, спрете да алармирате ако (аларма &&! Тихо && digitalRead (тихо)) {

аларма = невярно;

тихо = вярно; }

// Нулиране на алармата, ако (! Alarm && quieted && minute! = Minute_a) {quieted = false;

}

// Проверете дали зададените щифтове са високи и ако е така, увеличете съответната стойностif (digitalRead (set_hr) && час <12) {

час ++;

printTimes ();

debounce ();

}

иначе if (digitalRead (set_hr) && час == 12) {час = 1;

printTimes ();

debounce ();

}

друго {}

if (digitalRead (set_min) && минута <59) {

минута ++; printTimes ();

debounce ();

}

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

printTimes ();

debounce ();

}

else {} if (digitalRead (set_am_pm) && am_pm) {

am_pm = false;

printTimes ();

debounce ();

}

иначе if (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

debounce ();

}

else {} if (digitalRead (set_hr_a) && hour_a <12) {

час_а ++;

printTimes ();

debounce ();

}

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

printTimes ();

debounce ();

}

else {} if (digitalRead (set_min_a) && minute_a <59) {

minute_a ++;

printTimes ();

debounce ();

}

иначе ако (digitalRead (set_min) && minute_a == 59) {minute_a = 0;

printTimes ();

debounce ();

}

else {} if (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = невярно;

printTimes ();

debounce ();

}

иначе ако (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

debounce ();

}

друго {}

}

Стъпка 13:

5. Тук ще забележите няколко подпрограми, които създадох - debounce () и printTimes (). Debounce () се използва, за да сме сигурни, че четем бутоните само веднъж. Тъй като Arduino сканира хиляди пъти в секунда, може да си помисли, че бутонът е натиснат няколко пъти, когато сте имали намерение да го прочетете само веднъж. Debounce () ще замрази програмата, докато бутонът бъде освободен. printTimes () актуализира LCD екрана, но тъй като това бяха няколко команди, аз ги въведох веднъж и след това мога да извикам подпрограмата всеки път, когато стойността на времето се промени.

// Докато някой от бутоните е натиснат, останете в тази функция и след това забавете 250 ms.

void debounce () {

while (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 () {

Serial.write (12);

Serial.print ("Текущо време:");

Serial.write (148);

ако (час <10) {

Serial.print ("0");

}

Serial.print (час);

Serial.print (":");

ако (минута <10) {

Serial.print ("0");

}

Serial.print (минута); Serial.print (":");

if (втори <10) {

Serial.print ("0");

}

Serial.print (втори);

ако (am_pm) {

Serial.print ("PM");

}

иначе {

Serial.print ("AM");

}

Serial.write (168);

Serial.print ("Алармен набор за:");

Serial.write (188);

ако (час_а <10) {

Serial.print ("0");

}

Serial.print (час_а);

Serial.print (":");

ако (минута_а <10) {

Serial.print ("0");

}

Serial.print (minute_a);

ако (am_pm_a) {

Serial.print ("PM");

}

иначе {

Serial.print ("AM");

}

}

// Увеличаване на времевите параметри void

keepTime () {

etime = millis () - cur_time;

if (etime> = 1000 && second <59) {

втори ++;

cur_time = millis ();

printTimes ();

}

else if (etime> = 1000 && second == 59 && minute <59) {second = 0;

минута ++;

cur_time = millis ();

printTimes ();

}

иначе ако (etime> = 1000 && секунда == 59 && минута == 59 && час <12) {

втори = 0; минута =

0; час ++; cur_time =

милис (); printTimes ();

}

иначе ако (etime> = 1000 && секунда == 59 && минута == 59 && час == 12) {

втори = 0; минута =

0; час = 1; am_pm =

! am_pm;

cur_time = millis ();

printTimes ();

}

друго {}

}

Стъпка 14:

6. Това е всичко!

Компилирайте и качете и сте готови!

Препоръчано: