Orodha ya maudhui:

Mradi wa Saa ya Kengele ya Arduino: Hatua 14
Mradi wa Saa ya Kengele ya Arduino: Hatua 14

Video: Mradi wa Saa ya Kengele ya Arduino: Hatua 14

Video: Mradi wa Saa ya Kengele ya Arduino: Hatua 14
Video: Измерьте ток до 500A с помощью шунтирующего резистора с помощью Arduino 2024, Julai
Anonim
Mradi wa Saa ya Alarmino
Mradi wa Saa ya Alarmino

Katika mradi huu, tutatumia Arduino Uno kudhibiti skrini ya LCD kuonyesha wakati na wakati wa sasa ambao kengele imewekwa. Tutatumia vifungo kuweka kila wakati.

Vifaa:

  • Arduino Uno -
  • Bodi ya mkate -
  • Waya za Jumper (x13 +) -
  • Vipinga 10 vya kohm (x4) -
  • Skrini ya LCD -
  • Vifungo 7 -
  • Spika wa Piezo -

Hatua ya 1: Maagizo ya Kuunganishwa

Maagizo ya Kuunganishwa
Maagizo ya Kuunganishwa

1. Unganisha waya ya kuruka kutoka kwa pini ya 5V kwenye Arduino hadi moja ya reli + kwenye ubao wa mkate.

Hatua ya 2:

Picha
Picha

2. Unganisha waya ya kuruka kutoka kwenye pini ya GND kwenye Arduino hadi - reli karibu na reli + uliyochagua kwenye ubao wa mkate.

Hatua ya 3:

Picha
Picha

3. Unganisha skrini ya LCD kwa nguvu, ardhi, na pini ya TX (pin 1).

Hatua ya 4:

Picha
Picha

4. Weka vifungo 7 kwenye ubao wa mkate na miguu kuvuka pengo kwenye ubao wa mkate.

Hatua ya 5:

Picha
Picha

5. Weka vipinga 10 vya kohm kutoka kwa - reli na pini ya GND iliyounganishwa nayo kwa pini za kushoto za chini za vifungo.

Hatua ya 6:

Picha
Picha

6. Weka waya za kuruka kati ya pini ya kulia chini ya vifungo na reli ya 5V kwenye ubao wako wa mkate.

Hatua ya 7:

Picha
Picha

7. Weka waya za kuruka kati ya pini 6, kisha 8-13, na pini kwenye kitufe ambacho kontena imeunganishwa nayo.

Hatua ya 8:

Picha
Picha

8. Halafu, weka spika yako ya Piezo kwenye ubao wa mkate na unganisha pini 7 kwenye pini ya nguvu, halafu kipinga cha 100 ohm chini.

Hatua ya 9: Maagizo ya Programu

1. Muhtasari: Mradi huu utamwuliza mtumiaji kuweka wakati wa sasa kwenye nguvu ya kwanza kwenye onyesho wakati wa sasa na wakati ambao kengele imewekwa. Vifungo vilivyounganishwa hapo juu vitatumika kuweka kila wakati. Kutoka kushoto kwenda kulia, wamewekwa saa ya sasa, weka dakika ya sasa, weka AM au PM ya sasa, weka saa ya kengele, weka dakika ya kengele, weka kengele AM au PM. Kitufe cha mwisho hutumiwa kunyamazisha kengele wakati inalia.

Hatua ya 10:

2. Jambo la kwanza tunalohitaji kufanya ni kuanzisha mabadiliko yetu ambayo tutatumia.

// Anzisha vigezo vitakavyotumikaint hour = 0; // Saa kwa wakati wa sasa wa dakika = 0; //

Dakika kwa wakati wa sasa int pili = 0; // Pili kwa wakati wa sasa

saa_a = 0; int // Saa kwa wakati wa kengele

dakika_a = 0; // Dakika kwa wakati wa kengele

bool am_pm = uongo; // AM / PM kugeuza bendera. Uongo ni AM, kweli ni PM

bool am_pm_a = uongo; // AM / PM kugeuza bendera kwa kengele. Uongo ni AM, kweli ni PM

int set_hr = 13; // Tumia pin 13 kuweka saa

int set_min = 12; // Tumia pin 12 kuweka dakika int

set_am_pm = 11; // Tumia pin 11 kuweka am / pm

int set_hr_a = 10; // Tumia pini 10 kuweka saa kwa kengele int set_min_a = 9; // Tumia pini 9 kuweka dakika kwa kengele int set_am_pm_a = 8; // Tumia pini 8 kuweka asubuhi / jioni kwa kengele

msemaji wa int = 7; // Pini ya kutumia kwa speakerint utulivu = 6; // Bandika ili kusimamisha spika

kengele ya bool = uwongo; // Bendera kugeuza ili kuendelea kutisha

bool imetulia = uongo; // Bendera inayoonyesha utulivu haijasisitizwa

wakati cur_time = 0; // Kubadilika kwa wakati wa sasa

int etime = 0; // Kubadilika kwa muda uliopita

Hatua ya 11:

3. Ifuatayo, tunahitaji kusanidi skrini ya LCD na kumwambia mtumiaji aweke wakati wa sasa. Kwa kuwa hii inahitaji kufanywa mara moja tu, tutaifanya katika utaratibu wa usanidi.

usanidi batili () {

// Weka skrini ya LCD

Kuanzia Serial (9600); // Anzisha Serial kwa baud 9600

Serial.write (17); // Washa taa ya nyuma

Serial.write (24); // Washa onyesho, na mshale na hakuna kupepesa

Serial.write (12); // Futa skrini

Serial.write (128); // Sogeza mshale kwenye kona ya juu kushoto // Weka pinMode ya pinMode ya pin (set_hr, Pembejeo); 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 (spika, OUTPUT);

pinMode (utulivu, INPUT);

// Kwenye nguvu ya awali, uwe na mtumiaji kuweka wakati wa sasa. Serial.print ("Weka wakati wa sasa"); kuchelewa (2000);

Serial.write (12);

Nyakati za kuchapa ();

cur_time = millis (); // Hifadhi wakati wa sasa}

Hatua ya 12:

4. Halafu, katika utaratibu wa kitanzi, tunafuatilia wakati na kusoma hali ya kitufe ili kuona ikiwa mtumiaji anaweka mojawapo ya nyakati.

kitanzi batili () {

// Weka Wakati

KeepTime ();

// Angalia kuona ikiwa ni wakati wa kengele!

ikiwa ((saa == hour_a && dakika == minute_a &&! imetulia) || kengele) {toni (spika, 2000, 500); // Pato la sauti ya 2000 Hz kwa spika kwa 500 ms

kuchelewesha (500); // Kuchelewesha ms 500 ikiwa (! Kengele) {// Ikiwa kengele imezimwa, iwashe

}

}

// Ikiwa mtumiaji atanyamazisha kengele kwa kubonyeza kitufe cha utulivu, acha kutisha ikiwa (kengele &&! Imetuliza && digitalRead (kimya)) {

kengele = uwongo;

kimya = kweli; }

// Weka upya kengele ikiwa (! Kengele && imetulia && dakika! = Dakika_a) {imetulia = uwongo;

}

// Angalia kuona ikiwa pini zilizowekwa zimepanda juu, na ikiwa ni hivyo, ongeza thamani inayolingana (digitalRead (set_hr) && hour <12) {

saa ++;

Nyakati za kuchapa ();

kufuta ();

}

vinginevyo ikiwa (digitalRead (set_hr) && hour == 12) {hour = 1;

Nyakati za kuchapa ();

kufuta ();

}

mwingine {}

ikiwa (digitalRead (set_min) && dakika <59) {

dakika ++; nyakati za kuchapisha ();

kufuta ();

}

vinginevyo ikiwa (digitalRead (set_min) && minute == 59) {minute = 0;

Nyakati za kuchapa ();

kufuta ();

}

vinginevyo {} ikiwa (digitalRead (set_am_pm) && am_pm) {

am_pm = uongo;

Nyakati za kuchapa ();

kufuta ();

}

vinginevyo ikiwa (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; TimesTimes ();

kufuta ();

}

vingine {} ikiwa (digitalRead (set_hr_a) && hour_a <12) {

saa_a ++;

Nyakati za kuchapa ();

kufuta ();

}

vinginevyo ikiwa (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

Nyakati za kuchapa ();

kufuta ();

}

kingine {} ikiwa (digitalRead (set_min_a) && minute_a <59) {

dakika_a ++;

Nyakati za kuchapa ();

kufuta ();

}

vinginevyo ikiwa (digitalRead (set_min) && minute_a == 59) {minute_a = 0;

Nyakati za kuchapa ();

kufuta ();

}

vingine {} ikiwa (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = uwongo;

Nyakati za kuchapa ();

kufuta ();

}

vinginevyo ikiwa (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = kweli;

Nyakati za kuchapa ();

kufuta ();

}

mwingine {}

}

Hatua ya 13:

5. Hapa, utagundua sheria ndogo kadhaa nilizounda - kuondoa () na Nyakati za kuchapisha (). Dondoa () hutumiwa kuhakikisha tunasoma tu vifungo mara moja. Kwa kuwa Arduino inatafuta mara maelfu kwa sekunde, inaweza kufikiria kuwa kitufe kilibonyeza mara kadhaa wakati ulikusudia isomwe mara moja tu. Debounce () itasimamisha programu hiyo mpaka kitufe kitolewe. printTimes () inasasisha skrini ya LCD, lakini kwa kuwa hiyo ilikuwa amri kadhaa, niliichapa mara moja na kisha ninaweza kupiga simu wakati wowote mabadiliko ya thamani ya wakati.

// Wakati vifungo vyovyote vinabanwa, kaa katika kazi hii kisha ucheleweshe 250 ms.

utupu wa kujiondoa () {

wakati (DigitalRead (set_hr) || DigitalRead (set_min) ||

DigitalRead (set_am_pm) || DigitalRead (set_hr_a) ||

DigitalRead (set_min_a) || digitalRead (set_am_pm_a)) {} kuchelewesha (250);

}

// Chapa nyakati zilizosasishwa ikiwa kuna mabadiliko yoyote

Nyakati za kuchapisha batili () {

Serial.write (12);

Serial.print ("Wakati wa Sasa:");

Serial.write (148);

ikiwa (saa <10) {

Serial.print ("0");

}

Printa ya serial (saa);

Serial.print (":");

ikiwa (dakika <10) {

Serial.print ("0");

}

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

ikiwa (pili <10) {

Serial.print ("0");

}

Serial.print (pili);

ikiwa (asubuhi_jioni) {

Serial.print ("PM");

}

mwingine {

Serial.print ("AM");

}

Serial.write (168);

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

Serial.write (188);

ikiwa (saa_a <10) {

Serial.print ("0");

}

Printa ya serial (saa_a);

Serial.print (":");

ikiwa (dakika_a <10) {

Serial.print ("0");

}

Printa ya serial (dakika_a);

ikiwa (am_pm_a) {

Serial.print ("PM");

}

mwingine {

Serial.print ("AM");

}

}

// Kuongeza vigezo vya wakati batili

KeepTime () {

etime = millis () - muda wa cur_;

ikiwa (etime> = 1000 && pili <59) {

++ ya pili;

cur_time = millis ();

Nyakati za kuchapa ();

}

vinginevyo ikiwa (etime> = 1000 && pili == 59 && dakika <59) {pili = 0;

dakika ++;

cur_time = millis ();

Nyakati za kuchapa ();

}

vinginevyo ikiwa (etime> = 1000 && pili == 59 && minute == 59 && hour <12) {

pili = 0; dakika =

0; saa ++; muda wa cur_ =

millis (); Nyakati za kuchapa ();

}

vinginevyo ikiwa (etime> = 1000 && pili == 59 && minute == 59 && hour == 12) {

pili = 0; dakika =

0; saa = 1; asubuhi_juma =

! am_pm;

cur_time = millis ();

Nyakati za kuchapa ();

}

mwingine {}

}

Hatua ya 14:

6. Hiyo tu!

Kusanya na kupakia na umemaliza!

Ilipendekeza: