Sisällysluettelo:

Arduino -herätyskelloprojekti: 14 vaihetta
Arduino -herätyskelloprojekti: 14 vaihetta

Video: Arduino -herätyskelloprojekti: 14 vaihetta

Video: Arduino -herätyskelloprojekti: 14 vaihetta
Video: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Marraskuu
Anonim
Arduino -herätyskello -projekti
Arduino -herätyskello -projekti

Tässä projektissa käytämme Arduino Unoa LCD -näytön ohjaamiseen näyttämään kellonaika ja aika, jolle hälytys on asetettu. Käytämme painikkeita asettaaksemme joka kerta.

Materiaalit:

  • Arduino Uno -
  • Breadboard -
  • Hyppyjohdot (x13+) -
  • 10 kohm vastusta (x4) -
  • LCD -näyttö -
  • 7 painiketta-https://vilros.com/collections/raspberry-pi-acces…
  • Pietsokaiutin -

Vaihe 1: Liitäntäohjeet

Liitäntäohjeet
Liitäntäohjeet

1. Kytke hyppyjohto Arduinon 5 V: n nastasta johonkin leipälevyn + kiskoon.

Vaihe 2:

Kuva
Kuva

2. Kytke hyppyjohto Arduinon GND -nastasta leipälaudalla valitsemasi + -kiskon vieressä olevaan - kiskoon.

Vaihe 3:

Kuva
Kuva

3. Liitä nestekidenäyttö virtalähteeseen, maahan ja TX -nastaan (nasta 1).

Vaihe 4:

Kuva
Kuva

4. Aseta 7 painiketta leipälaudalle jalat leipälaudan raon yli.

Vaihe 5:

Kuva
Kuva

5. Aseta 10 kohmin vastusta - kiskosta ja GND -nasta on kytketty siihen painikkeiden vasempaan alakulmaan.

Vaihe 6:

Kuva
Kuva

6. Aseta hyppyjohdot painikkeiden oikean alakulman ja leipälevyn 5 V: n kiskon väliin.

Vaihe 7:

Kuva
Kuva

7. Aseta hyppyjohtimet nastojen 6, sitten 8-13 ja vastuksen liitetyn painikkeen väliin.

Vaihe 8:

Kuva
Kuva

8. Aseta seuraavaksi Piezo -kaiutin leipälevylle ja liitä nasta 7 virtatappiin ja sitten 100 ohmin vastus maahan.

Vaihe 9: Ohjelmointiohjeet

1. Yleiskatsaus: Tämä projekti pyytää käyttäjää asettamaan nykyisen kellonajan käynnistyksen yhteydessä näytölle nykyisen ajan ja hälytyksen asettamisajan. Yllä olevia painikkeita käytetään asettamaan joka kerta. Vasemmalta oikealle asetetaan nykyinen tunti, asetetaan nykyinen minuutti, asetetaan nykyinen AM tai PM, asetetaan herätysaika, asetetaan hälytys minuutti, asetetaan hälytys AM tai PM. Viimeistä painiketta käytetään mykistämään hälytys, kun se soi.

Vaihe 10:

2. Ensimmäinen asia, joka meidän on tehtävä, on alustaa muuttuja, jota aiomme käyttää.

// Alusta käytettävät muuttujattunti = 0; // Tunti nykyiselle ajalle int minuutti = 0; //

Nykyisen ajan minuutti int sekunti = 0; // Toinen ajankohta

int tunti_a = 0; int // Hälytysaika

minuutti_a = 0; // Hälytysajan minuutti

bool am_pm = false; // AM/PM toggle flag. False on AM, True on PM

bool am_pm_a = epätosi; // AM/PM toggle flag for alarm. False on AM, True on PM

int set_hr = 13; // Aseta tunti näppäimellä 13

int set_min = 12; // Määritä minuutti int. Näppäimellä 12

set_am_pm = 11; // Käytä nasta 11 asettaaksesi am/pm

int set_hr_a = 10; // Aseta nasta 10 hälytyksen tunnille int set_min_a = 9; // Aseta nastalla 9 hälytyksen minuutit int set_am_pm_a = 8; // Aseta hälytys am/pm näppäimellä 8

int kaiutin = 7; // Kiinnitin käytettäväksi kaiutinint hiljainen = 6; // Pysäytä kaiutin

bool hälytys = epätosi; // Vaihda merkitsemällä hälytys

bool hiljainen = väärä; // Hiljaisuutta osoittavaa lippua ei ole painettu

int cur_time = 0; // Muuttuja nykyiseen aikaan

int etime = 0; // Muuttuja kuluneelle ajalle

Vaihe 11:

3. Seuraavaksi meidän on asetettava nestekidenäyttö ja kerrottava käyttäjälle, että hän asettaa kellonajan. Koska tämä on tehtävä vain kerran, teemme sen asennusohjelmassa.

void setup () {

// Aseta LCD -näyttö

Sarja.alku (9600); // Alusta sarja 9600 baudilla

Sarja.kirjoitus (17); // Kytke taustavalo päälle

Sarja.kirjoitus (24); // Kytke näyttö päälle ilman kohdistinta

Sarja.kirjoitus (12); // Tyhjennä näyttö

Sarja.kirjoitus (128); // Siirrä kohdistin vasempaan yläkulmaan // Aseta 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 (kaiutin, OUTPUT);

pinMode (hiljainen, INPUT);

// Käynnistä virta, anna käyttäjän asettaa kellonaika. Serial.print ("Aseta nykyinen aika"); viive (2000);

Sarja.kirjoitus (12);

printTimes ();

cur_time = millis (); // Tallenna nykyinen aika}

Vaihe 12:

4. Seuraamme sitten silmukkarutiinissa aikaa ja luemme painikkeen tilan nähdäksemme, onko käyttäjä asettanut kumpaakaan aikaa.

void loop () {

// Pidä aikaa

keepTime ();

// Tarkista, onko aika hälyttää!

if ((tunti == tunti_a && minuutti == minuutti_a &&! hiljentynyt) || hälytys) {ääni (kaiutin, 2000, 500); // Lähettää 2000 Hz: n äänen kaiuttimeen 500 ms

viive (500); // Viive 500 ms, jos (! Hälytys) {// Jos hälytys on pois päältä, kytke se päälle

}

}

// Jos käyttäjä mykistää hälytyksen painamalla hiljaista painiketta, lopeta hälytys, jos (hälytys &&! Hiljainen && digitalRead (hiljainen)) {

hälytys = epätosi;

hiljainen = totta; }

// Nollaa hälytys, jos (! Alarm && quieted && minute! = Minute_a) {quieted = false;

}

// Tarkista, nousevatko nastat korkealle, ja jos on, lisää vastaavaa arvoa if (digitalRead (set_hr) && hour <12) {

tunti ++;

printTimes ();

debounce ();

}

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

printTimes ();

debounce ();

}

muu{}

if (digitalRead (set_min) && minuutti <59) {

minuutti ++; 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 ();

}

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

debounce ();

}

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

tunti_a ++;

printTimes ();

debounce ();

}

muuten jos (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

printTimes ();

debounce ();

}

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

minuutti_a ++;

printTimes ();

debounce ();

}

muuten jos (digitalRead (set_min) && minute_a == 59) {minute_a = 0;

printTimes ();

debounce ();

}

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

am_pm_a = epätosi;

printTimes ();

debounce ();

}

else if (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

debounce ();

}

muu{}

}

Vaihe 13:

5. Täällä huomaat pari luomaani aliohjelmaa - debounce () ja printTimes (). Debounce (): n avulla varmistetaan, että luemme painikkeet vain kerran. Koska Arduino skannaa tuhansia kertoja sekunnissa, se saattaa ajatella, että painiketta painettiin useita kertoja, kun tarkoitit vain sen lukemista. Debounce () pysäyttää ohjelman, kunnes painike vapautetaan. printTimes () päivittää nestekidenäytön, mutta koska se oli useita komentoja, kirjoitin ne kerran ja voin sitten soittaa aliohjelmaan milloin tahansa ajan arvon muuttuessa.

// Kun jotakin painiketta painetaan, pysy tässä toiminnossa ja viivästytä sitten 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)) {} viive (250);

}

// Tulostaa päivitetyt ajat, jos muutoksia tapahtuu

void printTimes () {

Sarja.kirjoitus (12);

Serial.print ("Nykyinen aika:");

Sarja.kirjoitus (148);

jos (tunti <10) {

Serial.print ("0");

}

Sarjajälki (tunti);

Serial.print (":");

jos (minuutti <10) {

Serial.print ("0");

}

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

jos (toinen <10) {

Serial.print ("0");

}

Sarjanjälki (toinen);

jos (am_pm) {

Serial.print ("PM");

}

muu{

Serial.print ("AM");

}

Sarja.kirjoitus (168);

Serial.print ("Alarm Set for:");

Sarja.kirjoitus (188);

jos (tunti_a <10) {

Serial.print ("0");

}

Sarjajälki (tunti_a);

Serial.print (":");

jos (minuutti_a <10) {

Serial.print ("0");

}

Sarjajälki (minuutti_a);

jos (am_pm_a) {

Serial.print ("PM");

}

muu{

Serial.print ("AM");

}

}

// Aikaparametrien lisääminen mitätön

keepTime () {

etime = millis () - cur_time;

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

toinen ++;

cur_time = millis ();

printTimes ();

}

muuten jos (etime> = 1000 && second == 59 && minute <59) {second = 0;

minuutti ++;

cur_time = millis ();

printTimes ();

}

muuten jos (etime> = 1000 && second == 59 && minute == 59 && hour <12) {

toinen = 0; minuutti =

0; tunti ++; cur_time =

millis (); printTimes ();

}

muuten jos (etime> = 1000 && second == 59 && minute == 59 && hour == 12) {

toinen = 0; minuutti =

0; tunti = 1; am_pm =

!aamupäivä iltapäivä;

cur_time = millis ();

printTimes ();

}

muu{}

}

Vaihe 14:

6. Siinä se!

Kokoa ja lähetä ja olet valmis!

Suositeltava: