Talaan ng mga Nilalaman:

Arduino Alarm Clock Project: 14 Mga Hakbang
Arduino Alarm Clock Project: 14 Mga Hakbang

Video: Arduino Alarm Clock Project: 14 Mga Hakbang

Video: Arduino Alarm Clock Project: 14 Mga Hakbang
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Hulyo
Anonim
Project ng Arduino Alarm Clock
Project ng Arduino Alarm Clock

Sa proyektong ito, gagamitin namin ang Arduino Uno upang makontrol ang isang LCD screen upang maipakita ang kasalukuyang oras at oras na itinakda para sa isang alarma. Gumagamit kami ng mga pindutan upang maitakda sa bawat oras.

Mga Materyales:

  • Arduino Uno -
  • Breadboard -
  • Jumper Wires (x13 +) -
  • 10 kohm resistors (x4) -
  • LCD screen -
  • 7 Mga Pindutan -
  • Piezo Speaker -

Hakbang 1: Mga Tagubilin sa Hookup

Mga Tagubilin sa Hookup
Mga Tagubilin sa Hookup

1. Ikonekta ang isang jumper wire mula sa 5V pin sa Arduino sa isa sa mga + riles sa breadboard.

Hakbang 2:

Larawan
Larawan

2. Ikonekta ang isang jumper wire mula sa pin ng GND sa Arduino patungo sa - riles sa tabi ng + riles na iyong pinili sa breadboard.

Hakbang 3:

Larawan
Larawan

3. Ikonekta ang LCD screen sa lakas, lupa, at ang TX pin (pin 1).

Hakbang 4:

Larawan
Larawan

4. Ilagay ang 7 mga pindutan sa breadboard na may mga binti sa kabuuan ng puwang sa breadboard.

Hakbang 5:

Larawan
Larawan

5. Maglagay ng 10 kohm resistors mula sa - riles na may koneksyon na GND na nakakonekta dito sa ibabang kaliwang mga pin ng mga pindutan.

Hakbang 6:

Larawan
Larawan

6. Ilagay ang mga wire ng jumper sa pagitan ng kanang kanang pin ng mga pindutan at ang 5V rail sa iyong breadboard.

Hakbang 7:

Larawan
Larawan

7. Ilagay ang mga wire ng jumper sa pagitan ng mga pin 6, pagkatapos ay 8-13, at ang pin sa pindutan na konektado ang risistor.

Hakbang 8:

Larawan
Larawan

8. Susunod, ilagay ang iyong Piezo speaker sa breadboard at ikonekta ang pin 7 sa power pin, pagkatapos ay isang resistor na 100 ohm sa lupa.

Hakbang 9: Mga Tagubilin sa Programming

1. Pangkalahatang-ideya: Hihilingin sa proyektong ito ang gumagamit na itakda ang kasalukuyang oras sa paunang kapangyarihan sa pagpapakita ng kasalukuyang oras at ang oras na itinakda ang alarma. Ang mga pindutan na konektado sa itaas ay gagamitin upang maitakda sa bawat oras. Mula kaliwa hanggang kanan, itinakda ang mga ito kasalukuyang oras, itakda ang kasalukuyang minuto, itakda ang kasalukuyang AM o PM, itakda ang oras ng alarma, itakda ang minuto ng alarma, itakda ang alarma AM o PM. Ginagamit ang huling pindutan upang patahimikin ang alarma kapag tumunog ito.

Hakbang 10:

2. Ang unang bagay na kailangan nating gawin ay gawing simula ang aming variable na gagamitin namin.

// Initialize variable na gagamitin oras = 0; // Hour para sa kasalukuyang oras int minuto = 0; //

Minuto para sa kasalukuyang oras int segundo = 0; // Pangalawa para sa kasalukuyang oras

int hour_a = 0; int // Oras para sa oras ng alarma

minuto_a = 0; // Minuto para sa oras ng alarma

bool am_pm = false; // AM / PM toggle flag. Mali ang AM, Totoo si PM

bool am_pm_a = false; // AM / PM toggle flag para sa alarma. Mali ang AM, Totoo si PM

int set_hr = 13; // Gumamit ng pin 13 upang magtakda ng oras

int set_min = 12; // Gumamit ng pin 12 upang maitakda ang minuto int

set_am_pm = 11; // Gumamit ng pin 11 upang itakda ang am / pm

int set_hr_a = 10; // Gumamit ng pin 10 upang magtakda ng oras para sa alarm int set_min_a = 9; // Gumamit ng pin 9 upang magtakda ng minuto para sa alarm int set_am_pm_a = 8; // Gumamit ng pin 8 upang itakda ang am / pm para sa alarma

int speaker = 7; // Pin upang magamit para sa speakerint tahimik = 6; // I-pin upang ihinto ang nagsasalita

bool alarm = false; // I-flag upang magpalipat-lipat upang mapanatili ang alarma

pinatahimik ang bool = false; // Flag na nagpapakita ng tahimik ay hindi na pinindot

int cur_time = 0; // Variable para sa kasalukuyang oras

int etime = 0; // Variable para sa lumipas na oras

Hakbang 11:

3. Susunod, kailangan naming i-set up ang LCD screen at sabihin sa gumagamit na itakda ang kasalukuyang oras. Dahil kailangan lang itong gawin nang isang beses, gagawin namin ito sa gawain sa pag-set up.

walang bisa ang pag-setup () {

// I-set up ang LCD screen

Serial.begin (9600); // Initialize Serial at 9600 baud

Serial.write (17); // Buksan ang ilaw sa likuran

Serial.write (24); // I-on ang display, na may cursor at walang blink

Serial.write (12); // I-clear ang screen

Serial.write (128); // Ilipat ang cursor sa kaliwang sulok sa itaas // Itakda ang pinModes pinMode (set_hr, INPUT); 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 (speaker, OUTPUT);

pinMode (tahimik, INPUT);

// Sa paunang lakas, itakda ng gumagamit ang kasalukuyang oras. Serial.print ("Itakda ang kasalukuyang oras"); pagkaantala (2000);

Serial.write (12);

printTimes ();

cur_time = millis (); // Itago ang kasalukuyang oras}

Hakbang 12:

4. Pagkatapos, sa gawain ng loop, sinusubaybayan namin ang oras at binasa ang katayuan ng pindutan upang makita kung ang gumagamit ay nagtatakda ng alinman sa mga oras.

void loop () {

// Panatilihin ang Oras

keepTime ();

// Suriin upang makita kung oras na upang mag-alarma!

kung ((oras == hour_a && minuto == minuto_a &&! tumahimik) || alarma) {tone (speaker, 2000, 500); // Output isang tunog na 2000 Hz sa speaker para sa 500 ms

pagkaantala (500); // Delay 500 ms if (! Alarm) {// Kung naka-off ang alarm, i-on ito

}

}

// Kung patahimikin ng gumagamit ang alarma sa pamamagitan ng pagpindot sa tahimik na pindutan, ihinto ang pag-alarma kung (alarm &&! Natahimik && digitalRead (tahimik))

alarm = false;

natahimik = totoo; }

// Reset the alarm if (! Alarm && matahimik && minuto! = Minuto_a) {tahimik = maling;

}

// Suriin upang makita kung ang mga itinakdang pin ay mataas, at kung gayon, dagdagan ang kaukulang halaga (digitalRead (set_hr) && oras <12) {

oras ++;

printTimes ();

debounce ();

}

kung hindi man (digitalRead (set_hr) && hour == 12) {hour = 1;

printTimes ();

debounce ();

}

iba pa {}

kung (digitalRead (set_min) && minuto <59) {

minuto ++; printTime ();

debounce ();

}

kung hindi man kung (digitalRead (set_min) && minuto == 59) {minuto = 0;

printTimes ();

debounce ();

}

iba pa {} kung (digitalRead (set_am_pm) && am_pm) {

am_pm = false;

printTimes ();

debounce ();

}

kung hindi man (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

debounce ();

}

iba pa {} kung (digitalRead (set_hr_a) && hour_a <12) {

oras_a ++;

printTimes ();

debounce ();

}

kung hindi man (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

printTimes ();

debounce ();

}

iba pa {} kung (digitalRead (set_min_a) && minuto_a <59) {

minuto_a ++;

printTimes ();

debounce ();

}

kung hindi man kung (digitalRead (set_min) && minuto_a == 59) {minuto_a = 0;

printTimes ();

debounce ();

}

iba pa {} kung (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = false;

printTimes ();

debounce ();

}

kung hindi man (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

debounce ();

}

iba pa {}

}

Hakbang 13:

5. Dito, mapapansin mo ang isang pares ng mga subroutine na aking nilikha - debounce () at printTimes (). Ginagamit ang Debounce () upang matiyak na isang beses lang natin nabasa ang mga pindutan. Dahil ang Arduino ay nag-i-scan ng libu-libong beses bawat segundo, maaaring isipin na ang pindutan ay pinindot nang maraming beses kung nilalayon mo lamang na mabasa ito nang isang beses. I-freeze ng Debounce () ang programa hanggang sa mailabas ang pindutan. nai-update ng printTimes () ang screen ng LCD, ngunit dahil maraming mga utos iyon, na-type ko ang mga ito nang isang beses at pagkatapos ay maaaring tumawag sa subroutine anumang oras na nagbago ang halaga ng oras.

// Habang ang alinman sa mga pindutan ay pinindot, manatili sa pagpapaandar na ito pagkatapos ay antalahin ang 250 ms.

void debounce () {

habang (digitalRead (set_hr) || digitalRead (set_min) ||

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

digitalRead (set_min_a) || digitalRead (set_am_pm_a)) {} pagkaantala (250);

}

// Nagpi-print ng na-update na oras kung mayroong anumang mga pagbabago

walang bisa ang mga printTime () {

Serial.write (12);

Serial.print ("Kasalukuyang Oras:");

Serial.write (148);

kung (oras <10) {

Serial.print ("0");

}

Serial.print (oras);

Serial.print (":");

kung (minuto <10) {

Serial.print ("0");

}

Serial.print (minuto); Serial.print (":");

kung (pangalawa <10) {

Serial.print ("0");

}

Serial.print (pangalawa);

kung (am_pm) {

Serial.print ("PM");

}

iba pa {

Serial.print ("AM");

}

Serial.write (168);

Serial.print ("Itakda ang Alarm para sa:");

Serial.write (188);

kung (oras_a <10) {

Serial.print ("0");

}

Serial.print (oras_a);

Serial.print (":");

kung (minuto_a <10) {

Serial.print ("0");

}

Serial.print (minuto_a);

kung (am_pm_a) {

Serial.print ("PM");

}

iba pa {

Serial.print ("AM");

}

}

// Palakihin ang mga parameter ng oras na walang bisa

keepTime () {

etime = millis () - cur_time;

kung (etime> = 1000 && segundo <59) {

pangalawang ++;

cur_time = millis ();

printTimes ();

}

kung hindi man (etime> = 1000 && segundo == 59 && minuto <59) {segundo = 0;

minuto ++;

cur_time = millis ();

printTimes ();

}

kung hindi man (etime> = 1000 && segundo == 59 && minuto == 59 && oras <12) {

pangalawa = 0; minuto =

0; oras ++; cur_time =

millis (); printTimes ();

}

kung hindi man (etime> = 1000 && segundo == 59 && minuto == 59 && oras == 12) {

pangalawa = 0; minuto =

0; oras = 1; am_pm =

! am_pm;

cur_time = millis ();

printTimes ();

}

iba pa {}

}

Hakbang 14:

6. Iyon lang!

Mag-compile at mag-upload at tapos ka na!

Inirerekumendang: