Η οικοδόμηση ενός ελεγκτή φανών Arduino σας βοηθά να αναπτύξετε βασικές δεξιότητες κωδικοποίησης!  Σας ξεκινήσαμε.

Arduino Προγραμματισμός για αρχάριους: Εργαλείο Ελέγχου Εσωτερικού Ελέγχου

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

Διαφήμιση

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

Αν προτιμάτε να το παρακολουθήσετε ως εκπαιδευτικό ως βίντεο, έχετε καλύψει:

Τι χρειάζεστε για να χτίσετε έναν ελεγκτή φωτισμού κυκλοφορίας Arduino

Εκτός από το βασικό Arduino, θα χρειαστείτε:

  • 1 x 10k-ohm αντίσταση
  • 1 διακόπτης μπουτόν
  • 6 x 220-ohm αντιστάσεις
  • Ένα πιρούνι
  • Σύνδεση καλωδίων
  • Κόκκινα, κίτρινα και πράσινα LED

Σχεδόν όλοι οι Arduino θα δουλέψουν για αυτό το έργο, εφόσον έχουν αρκετά καρφίτσες. Βεβαιωθείτε ότι έχετε διαβάσει τον οδηγό αγορών μας Arduino Arduino Οδηγός αγοράς: Ποιο συμβούλιο πρέπει να πάρετε; Arduino οδηγός αγοράς: Ποιο συμβούλιο πρέπει να πάρετε; Υπάρχουν τόσα πολλά διαφορετικά είδη σανίδων Arduino εκεί έξω, θα συγχωρεθήκατε για σύγχυση. Ποια θα πρέπει να αγοράσετε για το έργο σας; Ας βοηθήσουμε, με αυτόν τον οδηγό αγοράς Arduino! Διαβάστε περισσότερα αν δεν είστε σίγουροι για το μοντέλο που χρειάζεστε. Μπορεί να έχετε ήδη αυτά τα εξαρτήματα στο κιτ εκκίνησης Arduino Τι είναι το κιτ εκκίνησης Arduino; [Arduino Beginners] Τι είναι το κιτ εκκίνησης Arduino; [Arduino Beginners] Αντιμετωπίζοντας ένα κουτί γεμάτο ηλεκτρονικά εξαρτήματα, είναι εύκολο να κατακλυστεί. Εδώ είναι ένας οδηγός για το τι ακριβώς θα βρείτε στο κιτ σας. Διαβάστε περισσότερα .

Φως κυκλοφορίας Arduino: Τα βασικά

Ας ξεκινήσουμε λίγο. Ένα βασικό, ενιαίο φανάρι είναι ένα καλό μέρος για να ξεκινήσετε. Εδώ είναι το κύκλωμα:

Διάγραμμα κυκλώματος για βασικό φωτισμό του Arduino

Συνδέστε την άνοδο (μακρύ πόδι) κάθε LED σε ψηφιακούς ακροδέκτες οκτώ, εννέα και δέκα (μέσω μιας αντίστασης 220 ohm). Συνδέστε τις κάθοδοι (κοντό σκέλος) στο έδαφος του Arduino.

Κωδικός για το φως της κυκλοφορίας Arduino

Αρχίστε με τον ορισμό των μεταβλητών έτσι ώστε να μπορείτε να απευθυνθείτε στα φώτα με το όνομα και όχι με έναν αριθμό. Ξεκινήστε ένα νέο έργο Arduino και ξεκινήστε με αυτές τις γραμμές:

 int red = 10; int yellow = 9; int green = 8; 

Στη συνέχεια, προσθέστε τη λειτουργία ρύθμισης, όπου θα ρυθμίσετε τις κόκκινες, κίτρινες και πράσινες λυχνίες LED για έξοδο. Δεδομένου ότι έχετε δημιουργήσει μεταβλητές που αντιπροσωπεύουν τους αριθμούς pin, μπορείτε τώρα να ανατρέξετε στις καρφίτσες με το όνομα:

 void setup(){ pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); } 

Η λειτουργία pinMode ρυθμίζει το Arduino να χρησιμοποιεί μια δεδομένη ακίδα ως έξοδο. Πρέπει να το κάνετε για να δουλέψετε όλα τα LED σας. Τώρα για την πραγματική λογική του φανάρι. Εδώ είναι ο κωδικός που χρειάζεστε. Προσθέστε αυτό κάτω από τους ορισμούς των μεταβλητών σας και τη λειτουργία ρύθμισης:

 void loop(){ changeLights(); delay(15000); } void changeLights(){ // green off, yellow on for 3 seconds digitalWrite(green, LOW); digitalWrite(yellow, HIGH); delay(3000); // turn off yellow, then turn red on for 5 seconds digitalWrite(yellow, LOW); digitalWrite(red, HIGH); delay(5000); // red and yellow on for 2 seconds (red is already on though) digitalWrite(yellow, HIGH); delay(2000); // turn off red and yellow, then turn on green digitalWrite(yellow, LOW); digitalWrite(red, LOW); digitalWrite(green, HIGH); delay(3000); } 

Μεταφορτώστε αυτόν τον κώδικα στο Arduino και εκτελέστε το (βεβαιωθείτε ότι έχετε επιλέξει τη σωστή πλακέτα και τη θύρα από τα εργαλεία > Διοικητικό Συμβούλιο και Εργαλεία > Λιμένα μενού). Θα πρέπει να έχετε ένα φανάρι εργασίας που αλλάζει κάθε 15 δευτερόλεπτα, όπως αυτό (επιτάχυνε):

Arduino φανάρι στη δράση

Ας σπάσουμε αυτόν τον κώδικα. Η λειτουργία changeLights εκτελεί όλη τη σκληρή δουλειά. Αυτό περιστρέφει το φανάρι με κίτρινο και κόκκινο χρώμα και μετά με πράσινο χρώμα. Καθώς αυτό αποκαλείται μέσα στη λειτουργία του βρόχου, ο Arduino θα τρέξει τον κώδικα για πάντα, με μια παύση 15 δευτερολέπτων κάθε φορά.

Η συνάρτηση changeLights αποτελείται από τέσσερα ξεχωριστά βήματα:

  • Πράσινο, κίτρινο
  • Κίτρινο, κόκκινο
  • Κίτρινο, κόκκινο
  • Πράσινο, κόκκινο, κίτρινο

Αυτά τα τέσσερα βήματα αντιγράφουν τη διαδικασία που χρησιμοποιείται στα πραγματικά φανάρια. Για κάθε βήμα, ο κώδικας είναι πολύ παρόμοιος. Η κατάλληλη λυχνία LED ενεργοποιείται ή απενεργοποιείται χρησιμοποιώντας τη λειτουργία digitalWrite . Αυτή είναι μια λειτουργία Arduino που χρησιμοποιείται για να ρυθμίσετε τις ακίδες εξόδου σε HIGH (για on) ή LOW (για off).

Αφού ενεργοποιήσετε ή απενεργοποιήσετε τις απαιτούμενες λυχνίες LED, η καθυστέρηση καθιστά το Arduino να περιμένει για ένα δεδομένο χρονικό διάστημα. Τρία δευτερόλεπτα σε αυτή την περίπτωση.

Πηγαίνοντας βαθύτερα: Crossing πεζών Arduino

Τώρα που ξέρετε τα βασικά, ας τα βελτιώσουμε. Προσθέστε ένα κουμπί για τους πεζούς για να αλλάξετε το φως όποτε θέλετε:

Διάγραμμα κυκλώματος για το πέρασμα των πεζών του Arduino

Παρατηρήστε πώς το φανάρι είναι ακριβώς το ίδιο με το προηγούμενο παράδειγμα. Συνδέστε το κουμπί με τον ψηφιακό ακροδέκτη 12. Θα παρατηρήσετε ότι ο διακόπτης έχει μια αντίσταση 10k-ohm υψηλής αντίστασης συνδεδεμένη με αυτό και ίσως να αναρωτιέστε γιατί. Αυτή είναι μια αντιστάθμιση πίεσης.

Ένας διακόπτης είτε αφήνει την ροή ρεύματος είτε όχι. Αυτό φαίνεται αρκετά απλό, αλλά σε ένα λογικό κύκλωμα, το ρεύμα πρέπει πάντα να ρέει είτε σε υψηλή είτε σε χαμηλή κατάσταση (θυμηθείτε, 1 ή 0, ΥΨΗΛΗ ή ΧΑΜΗΛΗ). Μπορεί να υποθέσετε ότι ένας διακόπτης πιέσεως που δεν πιέζεται στην πραγματικότητα θα είναι σε χαμηλή κατάσταση, αλλά στην πραγματικότητα λέγεται ότι είναι «πλωτός», επειδή δεν ρέει καθόλου ρεύμα.

Σε αυτή την πλωτή κατάσταση, είναι πιθανό ότι θα υπάρξει μια λανθασμένη ανάγνωση καθώς κυμαίνεται με ηλεκτρικές παρεμβολές. Με άλλα λόγια, ένας πλωτός διακόπτης δεν δίνει αξιόπιστη ανάγνωση HIGH ούτε LOW. Μια αντίσταση pull-down διατηρεί ένα μικρό ποσό ρεύματος που ρέει όταν ο διακόπτης κλείσει, εξασφαλίζοντας έτσι μια ακριβή χαμηλή κατάσταση ανάγνωσης.

Σε άλλα λογικά κυκλώματα, μπορεί να βρείτε αντίστασης pull-up αντίστασης, και αυτό λειτουργεί με την ίδια αρχή, αλλά αντίστροφα, διασφαλίζοντας ότι η συγκεκριμένη λογική πύλη είναι προεπιλεγμένη σε υψηλά επίπεδα.

Τώρα, στο βρόχο του κώδικα, αντί να αλλάζετε τα φώτα κάθε 15 δευτερόλεπτα, θα διαβάζετε την κατάσταση του διακόπτη του κουμπιού και θα αλλάζετε μόνο τα φώτα όταν είναι ενεργοποιημένο.

Κωδικός για το πέρασμα πεζών Arduino

Ξεκινήστε προσθέτοντας μια νέα μεταβλητή για να αποθηκεύσετε την ακίδα του κουμπιού σας:

 int button = 12; // switch is on pin 12 

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

 pinMode(button, INPUT); digitalWrite(green, HIGH); 

Αλλαγή ολόκληρης της συνάρτησης βρόχου προς την ακόλουθη:

 void loop() { if (digitalRead(button) == HIGH){ delay(15); // software debounce if (digitalRead(button) == HIGH) { // if the switch is HIGH, ie. pushed down - change the lights! changeLights(); delay(15000); // wait for 15 seconds } } } 

Αυτό πρέπει να το κάνει. Μπορεί να αναρωτιέστε γιατί ο έλεγχος του κουμπιού συμβαίνει δύο φορές ( ψηφιακή ανάγνωση (κουμπί) ), που χωρίζονται με μικρή καθυστέρηση. Αυτό είναι debouncing. Ομοίως με την αντίσταση συρρίκνωσης του κουμπιού, αυτός ο απλός έλεγχος σταματάει τον κωδικό να ανιχνεύει δευτερεύουσες παρεμβολές με το πάτημα ενός κουμπιού.

Περιμένοντας στο εσωτερικό της εντολής if για 15 δευτερόλεπτα, τα φανάρια δεν μπορούν να αλλάξουν για τουλάχιστον αυτή τη διάρκεια. Μόλις ολοκληρωθούν 15 δευτερόλεπτα, ο βρόχος επανεκκινείται. Κάθε επανεκκίνηση του βρόχου, διαβάζει ξανά την κατάσταση του κουμπιού, αλλά αν δεν πατηθεί, η εντολή if δεν ενεργοποιείται ποτέ, τα φώτα δεν αλλάζουν ποτέ και το πρόγραμμα ξαναρχίζει.

Δείτε πώς φαίνεται αυτό (επιτάχυνε):

Arduino διάβαση πεζών σε δράση

Φως κυκλοφορίας Arduino με το σύνδεσμο

Ας δοκιμάσουμε ένα πιο προηγμένο μοντέλο. Αντί για τη διέλευση πεζών, αλλάξτε το κύκλωμά σας για να έχετε δύο φανάρια:

Διάγραμμα Cricuit για φανάρια Arduino με διασταύρωση

Συνδέστε το δεύτερο φανάρι στις ψηφιακές ακίδες 11, 12 και 13.

Κωδικός για το φως κυκλοφορίας Arduino με το σύνδεσμο

Κατ 'αρχάς, ορίστε τις νέες καρφίτσες της κυκλοφορίας στις μεταβλητές και τις ρυθμίστε ως έξοδο, όπως στο πρώτο παράδειγμα:

 // light one int red1 = 10; int yellow1 = 9; int green1 = 8; // light two int red2 = 13; int yellow2 = 12; int green2 = 11; void setup(){ // light one pinMode(red1, OUTPUT); pinMode(yellow1, OUTPUT); pinMode(green1, OUTPUT); // light two pinMode(red2, OUTPUT); pinMode(yellow2, OUTPUT); pinMode(green2, OUTPUT); } 

Τώρα, ενημερώστε τον βρόχο σας για να χρησιμοποιήσετε τον κώδικα από το πρώτο παράδειγμα (αντί της διάβασης πεζών):

 void loop(){ changeLights(); delay(15000); } 

Για άλλη μια φορά, όλη η εργασία πραγματοποιείται στη λειτουργία changeLights . Αντί να πας κόκκινο > κόκκινο & κίτρινο > πράσινο, αυτός ο κωδικός θα εναλλάσσει τα φανάρια. Όταν κάποιος είναι πράσινος, ο άλλος είναι κόκκινος. Εδώ είναι ο κώδικας:

 void changeLights(){ // turn both yellows on digitalWrite(green1, LOW); digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); delay(5000); // turn both yellows off, and opposite green and red digitalWrite(yellow1, LOW); digitalWrite(red1, HIGH); digitalWrite(yellow2, LOW); digitalWrite(red2, LOW); digitalWrite(green2, HIGH); delay(5000); // both yellows on again digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); digitalWrite(green2, LOW); delay(3000); // turn both yellows off, and opposite green and red digitalWrite(green1, HIGH); digitalWrite(yellow1, LOW); digitalWrite(red1, LOW); digitalWrite(yellow2, LOW); digitalWrite(red2, HIGH); delay(5000); } 

Εδώ είναι αυτό που μοιάζει με (επιτάχυνση):

Arduino φανάρι με διασταύρωση σε δράση

Arduino Light Traffic Επόμενα βήματα

Αυτά για σήμερα. Η νέα σας κατανόηση των LED και κουμπιών Arduino ισχύει για όλα τα είδη διαφορετικών έργων. Εάν θέλετε να επεκτείνετε αυτά τα φανάρια, γιατί να μην οικοδομήσουμε μια τετράστρωση (ή περισσότερες) διασταύρωση, πλήρης με πολλές διαβάσεις πεζών και φώτα κυκλοφορίας πεζών;

Ή γιατί να μην επεκτείνετε τις νέες δεξιότητές σας με ένα μεγαλύτερο έργο όπως αυτό το DIY MIDI controller ή το ρομπότ Arduino με το Xod; Μπορείτε επίσης να ρίξετε μια ματιά στην κωδικοποίηση Arduino με κωδικό VS και PlatformIO Better Arduino Κωδικοποίηση με κώδικα VS και PlatformIO Καλύτερη κωδικοποίηση Arduino με κωδικό VS και PlatformIO Θέλετε έναν εύκολο τρόπο για να ξεκινήσετε την κωδικοποίηση του Arduino; Με τον κώδικα PlatformIO και VS, μπορείτε να απλοποιήσετε τα έργα του Arduino και να μάθετε γρηγορότερα. Διαβάστε περισσότερα .

Πιστοποίηση εικόνας: androsvector / Shutterstock

Εξερευνήστε περισσότερα σχετικά με: Arduino, DIY Project Tutorials, Προγραμματισμός.