Πίνακας περιεχομένων:

Έργο Arduino Ξυπνητήρι: 14 Βήματα
Έργο Arduino Ξυπνητήρι: 14 Βήματα

Βίντεο: Έργο Arduino Ξυπνητήρι: 14 Βήματα

Βίντεο: Έργο Arduino Ξυπνητήρι: 14 Βήματα
Βίντεο: Εισαγωγή στο tinkercad για υλοποίηση projects arduino uno -#TECHNOLOGYGREECE 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…
  • Piezo Speaker -

Βήμα 1: Οδηγίες σύνδεσης

Οδηγίες σύνδεσης
Οδηγίες σύνδεσης

1. Συνδέστε ένα καλώδιο βραχυκυκλωτήρα από τον πείρο 5V στο Arduino σε μία από τις + ράγες στο ψωμί.

Βήμα 2:

Εικόνα
Εικόνα

2. Συνδέστε ένα καλώδιο βραχυκυκλωτήρα από τον πείρο GND στο Arduino στη ράγα δίπλα στη ράγα + που επιλέξατε στο ψωμί.

Βήμα 3:

Εικόνα
Εικόνα

3. Συνδέστε την οθόνη LCD στην τροφοδοσία, τη γείωση και την ακίδα TX (ακίδα 1).

Βήμα 4:

Εικόνα
Εικόνα

4. Τοποθετήστε 7 κουμπιά στο breadboard με τα πόδια σε όλο το κενό στο breadboard.

Βήμα 5:

Εικόνα
Εικόνα

5. Τοποθετήστε 10 αντιστάσεις kohm από τη ράγα - με τον πείρο GND συνδεδεμένο με αυτό στις κάτω αριστερές ακίδες των κουμπιών.

Βήμα 6:

Εικόνα
Εικόνα

6. Τοποθετήστε καλώδια βραχυκυκλωτήρων μεταξύ του κάτω δεξιού πείρου των κουμπιών και της ράγας 5V στο ψωμί σας.

Βήμα 7:

Εικόνα
Εικόνα

7. Τοποθετήστε τα καλώδια βραχυκυκλωτήρων μεταξύ των ακίδων 6 και στη συνέχεια των 8-13 και τον πείρο στο κουμπί στο οποίο είναι συνδεδεμένη η αντίσταση.

Βήμα 8:

Εικόνα
Εικόνα

8. Στη συνέχεια, τοποθετήστε το ηχείο σας Piezo στο ψωμί και συνδέστε τον πείρο 7 στον πείρο τροφοδοσίας και στη συνέχεια μια αντίσταση 100 ohm στη γείωση.

Βήμα 9: Οδηγίες προγραμματισμού

1. Επισκόπηση: Αυτό το έργο θα ζητήσει από τον χρήστη να ρυθμίσει την τρέχουσα ώρα στην αρχική τροφοδοσία στην οθόνη την τρέχουσα ώρα και την ώρα για την οποία έχει οριστεί ο συναγερμός. Τα κουμπιά που συνδέονται παραπάνω θα χρησιμοποιούνται για ρύθμιση κάθε φορά. Από αριστερά προς τα δεξιά, ορίζονται η τρέχουσα ώρα, ορίζεται το τρέχον λεπτό, ορίζεται η τρέχουσα ώρα ΠΜ ή ΜΜ, ρυθμίζεται η ώρα αφύπνισης, ορίζεται το λεπτό αφύπνισης, ορίζεται ξυπνητήρι ΠΜ ή ΜΜ. Το τελευταίο κουμπί χρησιμοποιείται για να σιγήσει το ξυπνητήρι όταν ακούγεται.

Βήμα 10:

2. Το πρώτο πράγμα που πρέπει να κάνουμε είναι να προετοιμάσουμε τη μεταβλητή μας που πρόκειται να χρησιμοποιήσουμε.

// Αρχικοποίηση μεταβλητών που θα χρησιμοποιηθούν ώρα = 0; // ourρα για την τρέχουσα ώρα int λεπτό = 0; //

Λεπτό για την τρέχουσα ώρα int δευτερόλεπτο = 0; // Δεύτερο για την τρέχουσα ώρα

int hour_a = 0; int // ourρα για ώρα συναγερμού

minute_a = 0; // Λεπτό για την ώρα αφύπνισης

bool am_pm = false; // AM/PM εναλλαγή σημαίας. Λάθος είναι ΠΜ, Αληθινό είναι ΠΜ

bool am_pm_a = false; // AM/PM εναλλαγή σημαίας για συναγερμό. Λάθος είναι ΠΜ, Αληθινό είναι ΠΜ

int set_hr = 13; // Χρησιμοποιήστε τον πείρο 13 για να ρυθμίσετε την ώρα

int set_min = 12; // Χρησιμοποιήστε τον πείρο 12 για να ορίσετε το λεπτό int

set_am_pm = 11; // Χρησιμοποιήστε την καρφίτσα 11 για να ορίσετε π.μ./μ.μ

int set_hr_a = 10; // Χρησιμοποιήστε το pin 10 για να ρυθμίσετε την ώρα για το ξυπνητήρι int set_min_a = 9; // Χρησιμοποιήστε το pin 9 για να ρυθμίσετε το λεπτό για το ξυπνητήρι int set_am_pm_a = 8; // Χρησιμοποιήστε την καρφίτσα 8 για να ορίσετε π.μ./μ.μ. για ξυπνητήρι

int ηχείο = 7; // Καρφίτσωμα για χρήση για speakerint ήσυχο = 6; // Καρφίτσωμα για διακοπή του ηχείου

bool alarm = false; // Επισήμανση για εναλλαγή για να παραμείνετε σε ανησυχία

bool ησυχασαν = ψευτικα? // Δεν έχει πατηθεί η σημαία που δείχνει αθόρυβη

int cur_time = 0; // Μεταβλητή για την τρέχουσα ώρα

int etime = 0; // Μεταβλητή για το χρόνο που έχει παρέλθει

Βήμα 11:

3. Στη συνέχεια, πρέπει να ρυθμίσουμε την οθόνη LCD και να πούμε στο χρήστη να ορίσει την τρέχουσα ώρα. Δεδομένου ότι αυτό πρέπει να γίνει μόνο μία φορά, θα το κάνουμε στη ρουτίνα εγκατάστασης.

void setup () {

// Ρύθμιση οθόνης LCD

Serial.begin (9600); // Αρχικοποίηση Serial σε 9600 baud

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

// Κράτα χρόνο

κράτα χρόνο();

// Ελέγξτε για να δείτε αν ήρθε η ώρα να ειδοποιήσετε!

if ((ώρα == ώρα_α && λεπτό == λεπτό_α &&! ησυχία) || συναγερμός) {τόνος (ηχείο, 2000, 500); // Εξάγετε ήχο 2000 Hz στο ηχείο για 500 ms

καθυστέρηση (500)? // Καθυστέρηση 500 ms εάν (! Συναγερμός) {// Εάν ο συναγερμός είναι απενεργοποιημένος, ενεργοποιήστε τον

}

}

// Εάν ο χρήστης αποσιωπήσει το ξυπνητήρι πατώντας το κουμπί σίγασης, σταματήστε να ανησυχείτε εάν (ξυπνητήρι && αθόρυβο && digitalRead (αθόρυβο)) {

συναγερμός = ψευδής.

σιωπηλός = αλήθεια? }

// Επαναφέρετε το ξυπνητήρι εάν (! Συναγερμός && σιωπή && λεπτό! = Λεπτό_α) {αθόρυβο = ψευδές;

}

// Ελέγξτε για να δείτε αν οι καθορισμένες ακίδες ανεβαίνουν και αν ναι, αυξήστε την αντίστοιχη τιμήif (digitalRead (set_hr) && ώρα <12) {

ώρα ++?

printTimes ();

debounce ();

}

else if (digitalRead (set_hr) && ώρα == 12) {ώρα = 1;

printTimes ();

debounce ();

}

αλλού{}

εάν (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 ();

}

else 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) {

λεπτό_α ++;

printTimes ();

debounce ();

}

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

printTimes ();

debounce ();

}

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

am_pm_a = false;

printTimes ();

debounce ();

}

else if (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 (":");

εάν (δεύτερο <10) {

Serial.print ("0");

}

Serial.print (δεύτερο);

αν (πμ_μμ) {

Serial.print ("PM");

}

αλλού{

Serial.print ("ΠΜ");

}

Serial.write (168);

Serial.print ("Σετ συναγερμού για:");

Serial.write (188);

αν (ώρα_α <10) {

Serial.print ("0");

}

Serial.print (hour_a);

Serial.print (":");

αν (λεπτό_α <10) {

Serial.print ("0");

}

Serial.print (minute_a);

αν (am_pm_a) {

Serial.print ("PM");

}

αλλού{

Serial.print ("ΠΜ");

}

}

// Αυξήστε τις παραμέτρους χρόνου άκυρες

κράτα χρόνο(){

etime = millis () - cur_time;

εάν (etime> = 1000 && δευτερόλεπτο <59) {

δεύτερο ++?

cur_time = millis ();

printTimes ();

}

else if (etime> = 1000 && δεύτερο == 59 && λεπτό <59) {δεύτερο = 0;

λεπτό ++?

cur_time = millis ();

printTimes ();

}

αλλιώς εάν (etime> = 1000 && δεύτερο == 59 && λεπτό == 59 && ώρα <12) {

δεύτερο = 0; λεπτό =

0; ώρα ++? cur_time =

millis (); printTimes ();

}

αλλιώς εάν (etime> = 1000 && δεύτερο == 59 && λεπτό == 59 && ώρα == 12) {

δεύτερο = 0; λεπτό =

0; ώρα = 1? am_pm =

!π.μ. μ.μ;

cur_time = millis ();

printTimes ();

}

αλλού{}

}

Βήμα 14:

6. Αυτό είναι!

Μεταγλωττίστε και ανεβάστε και τελειώσετε!

Συνιστάται: