Φως νύχτας από μια παλιά λάμπα, βασισμένη σε Arduino και WS2812. Εργασίες για ανεξάρτητη λύση

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

Τώρα είμαι φοιτητής 4ου έτους στο BSUIR και όταν μας είπαν ότι ένα πρόγραμμα μαθημάτων στη σχεδίαση κυκλωμάτων μπορεί να γίνει όχι σε χαρτί, αλλά σε ένα κομμάτι υλικού, μου ήρθε το φως της νύχτας: το νυχτερινό φως που τόσο επιθυμούσα ένα παιδί μπορεί να γίνει μόνος μου. Επιπλέον, φτιάξτε όχι απλώς ένα αντικείμενο που θα φωτίζει το δωμάτιο στο σκοτάδι, αλλά μια συσκευή που μπορεί εύκολα να ελεγχθεί για να ταιριάζει σε κάθε διάθεση. Γιατί όχι? Αποφάσισα να προσθέσω τη δυνατότητα να αλλάζω χρώματα χρησιμοποιώντας τα χέρια μου: όσο πιο κοντά είναι το χέρι μου στο νυχτερινό φως, τόσο πιο φωτεινό ανάβει ένα από τα χρώματα (RGB). Θα ήθελα επίσης να ελέγξω το φως νύχτας χρησιμοποιώντας το τηλεχειριστήριο.

Θα παραδεχτώ αμέσως ότι εντόπισα την ιδέα στον ιστότοπο cxem.net. Εν συντομία, αυτό το παράδειγμα χρησιμοποίησε έναν πίνακα RGB, ο οποίος ελεγχόταν χρησιμοποιώντας καταχωρητές μετατόπισης και αισθητήρες απόστασης υπερήχων. Αλλά νόμιζα ότι η μήτρα λάμπει μόνο προς μία κατεύθυνση, αλλά ήθελα το νυχτερινό φως να λάμπει στα πλάγια.

Αιτιολόγηση των στοιχείων του κυκλώματος


Έστρεψα την προσοχή μου στους μικροελεγκτές Arduino. Το UNO είναι μια αρκετά κατάλληλη επιλογή για την ιδέα μου, πρώτον επειδή είναι η πιο δημοφιλής πλατφόρμα και ο αριθμός των ακίδων δεν είναι πολύ μεγάλος, σε αντίθεση με το Mega, και δεύτερον, μπορείτε να συνδέσετε μια εξωτερική πηγή ρεύματος σε αυτό, στην περίπτωσή μου είναι 12 V , σε αντίθεση με τον Nano , τρίτον... λοιπόν, νομίζω ότι μπορούμε να σταματήσουμε σε αυτά τα δύο σημεία. Η πλατφόρμα είναι εξαιρετικά δημοφιλής σε όλο τον κόσμο λόγω της ευκολίας και της απλότητας της γλώσσας προγραμματισμού, καθώς και της ανοιχτής αρχιτεκτονικής και του κώδικα προγράμματος.

Περισσότερο λεπτομερείς πληροφορίεςΜπορείτε εύκολα να βρείτε πληροφορίες σχετικά με αυτόν τον πίνακα στο Διαδίκτυο, επομένως δεν θα υπερφορτώσω το άρθρο.

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

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

Οι πιο δημοφιλείς αποστασιομετρητές σε λειτουργία αυτή τη στιγμήΑυτά είναι τα Sharp GP2Y0A21YK και HC-SR04. Το Sharp GP2Y0A21YK είναι ένας ανιχνευτής απόστασης υπερύθρων. Είναι εξοπλισμένο με πομπό υπερύθρων και δέκτη υπερύθρων: ο πρώτος χρησιμεύει ως πηγή της δέσμης, η ανάκλαση της οποίας πιάνεται από τον δεύτερο. Ταυτόχρονα, οι ακτίνες IR του αισθητήρα είναι αόρατες στο ανθρώπινο μάτι και σε τέτοια ένταση είναι αβλαβείς.

Σε σύγκριση με τον αισθητήρα υπερήχων HC-SR04, αυτός ο αισθητήρας έχει τόσο πλεονεκτήματα όσο και μειονεκτήματα. Τα πλεονεκτήματα περιλαμβάνουν την ουδετερότητα και την αβλαβή. Τα μειονεκτήματα είναι η μικρότερη εμβέλεια και η εξάρτηση από εξωτερικές παρεμβολές, συμπεριλαμβανομένων ορισμένων τύπων φωτισμού.

Χρησιμοποιούνται ως αισθητήρες απόστασης για το έργο: αποστασιομετρητές υπερήχων HC-SR04.
Η αρχή λειτουργίας του HC-SR04 βασίζεται στο γνωστό φαινόμενο της ηχοεντοπισμού. Κατά τη χρήση του, ο πομπός παράγει ένα ακουστικό σήμα, το οποίο, αφού αντανακλάται από το εμπόδιο, επιστρέφει στον αισθητήρα και καταγράφεται από τον δέκτη. Γνωρίζοντας την ταχύτητα διάδοσης του υπερήχου στον αέρα (περίπου 340 m/s) και τον χρόνο καθυστέρησης μεταξύ του εκπεμπόμενου και του λαμβανόμενου σήματος, είναι εύκολο να υπολογιστεί η απόσταση από το ακουστικό φράγμα.

Η είσοδος TRIG συνδέεται σε οποιαδήποτε ακίδα του μικροελεγκτή. Πρέπει να εφαρμοστεί ένας παλμός σε αυτόν τον πείρο. ψηφιακό σήμαδιάρκεια 10 μs. Με βάση το σήμα στην είσοδο TRIG, ο αισθητήρας στέλνει ένα πακέτο παλμών υπερήχων. Μετά τη λήψη του ανακλώμενου σήματος, ο αισθητήρας παράγει ένα σήμα παλμού στον ακροδέκτη ECHO, η διάρκεια του οποίου είναι ανάλογη της απόστασης από το εμπόδιο.

Αισθητήρας υπερύθρων. Φυσικά, το σήμα που απαιτείται για το τηλεχειριστήριο θα διαβάζεται και θα αποκωδικοποιείται από αυτόν τον αισθητήρα. Τα TSOP18 διαφέρουν μεταξύ τους μόνο στη συχνότητα. Ο αισθητήρας VS1838B TSOP1838 επιλέχθηκε για το έργο.

Το έργο βασίστηκε στην ιδέα του φωτισμού του δωματίου σε οποιοδήποτε χρώμα, πράγμα που σημαίνει ότι θα χρειαστείτε 3 βασικά χρώματα από τα οποία θα ληφθεί ο φωτισμός: κόκκινο, πράσινο, μπλε. Ως εκ τούτου, επιλέχθηκε το μοντέλο LED SMD 5050RGB, το οποίο θα ανταπεξέλθει τέλεια στην εργασία.

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

Οι ταινίες LED που χρησιμοποιούνται στο έργο τροφοδοτούνται από 12V.

Λόγω του γεγονότος ότι η τάση στα LED σε κατάσταση "απενεργοποίησης" είναι 6V και είναι απαραίτητο να ρυθμιστεί η παροχή ρεύματος, η οποία υπερβαίνει τα 5 V, είναι απαραίτητο να προσθέσετε τρανζίστορ στο κύκλωμα στη λειτουργία μεταγωγής. Η επιλογή μου έπεσε στο μοντέλο BC547c.

Ας εξετάσουμε εν συντομία, για όσους έχουν ξεχάσει, την αρχή της λειτουργίας τρανζίστορ npn. Εάν δεν εφαρμόσετε καθόλου τάση, αλλά απλώς βραχυκυκλώσετε τους ακροδέκτες βάσης και εκπομπού, ακόμα κι αν όχι βραχυκύκλωμα, αλλά μέσω μιας αντίστασης πολλών ohms, αποδεικνύεται ότι η τάση βάσης-εκπομπού είναι μηδέν. Κατά συνέπεια, δεν υπάρχει ρεύμα βάσης. Το τρανζίστορ είναι κλειστό, το ρεύμα συλλέκτη είναι αμελητέα μικρό, ακριβώς το ίδιο αρχικό ρεύμα. Σε αυτή την περίπτωση, το τρανζίστορ λέγεται ότι βρίσκεται στην κατάσταση αποκοπής. Η αντίθετη κατάσταση ονομάζεται κορεσμός: όταν το τρανζίστορ είναι εντελώς ανοιχτό, έτσι ώστε να μην υπάρχει πουθενά να ανοίξει περαιτέρω. Με αυτόν τον βαθμό ανοίγματος, η αντίσταση του τμήματος συλλέκτη-εκπομπού είναι τόσο χαμηλή που είναι απλά αδύνατο να ενεργοποιήσετε το τρανζίστορ χωρίς φορτίο στο κύκλωμα συλλέκτη· θα καεί αμέσως. Σε αυτή την περίπτωση, η υπολειπόμενη τάση στον συλλέκτη μπορεί να είναι μόνο 0,3...0,5V.

Αυτές οι δύο καταστάσεις, ο κορεσμός και η αποκοπή, χρησιμοποιούνται όταν το τρανζίστορ λειτουργεί σε λειτουργία μεταγωγής, όπως μια κανονική επαφή ρελέ. Η κύρια έννοια αυτής της λειτουργίας είναι ότι ένα μικρό ρεύμα βάσης ελέγχει ένα μεγάλο ρεύμα συλλέκτη, το οποίο είναι αρκετές δεκάδες φορές μεγαλύτερο από το ρεύμα βάσης. Λαμβάνεται μεγάλο ρεύμα συλλέκτη λόγω εξωτερική πηγήενέργειας, αλλά και πάλι το σημερινό κέρδος, όπως λένε, είναι προφανές. Στην περίπτωσή μας, το μικροκύκλωμα, του οποίου η τάση λειτουργίας είναι 5V, περιλαμβάνει 3 λωρίδες με LED που λειτουργούν από 12V.

Ας υπολογίσουμε τον τρόπο λειτουργίας του καταρράκτη κλειδιών. Είναι απαραίτητο να υπολογίσετε την τιμή της αντίστασης στο κύκλωμα βάσης έτσι ώστε τα LED να καίγονται με πλήρη ισχύ. Απαραίτητη προϋπόθεση κατά τον υπολογισμό είναι το κέρδος ρεύματος να είναι μεγαλύτερο ή ίσο με το πηλίκο διαίρεσης του μέγιστου δυνατού ρεύματος συλλέκτη με το ελάχιστο δυνατό ρεύμα βάσης:

Επομένως, οι λωρίδες μπορούν να έχουν τάση λειτουργίας 220V και το κύκλωμα βάσης μπορεί να ελεγχθεί από ένα μικροκύκλωμα με τάση 5V. Εάν το τρανζίστορ είναι σχεδιασμένο να λειτουργεί με τέτοια τάση στον συλλέκτη, τότε τα LED θα ανάψουν χωρίς προβλήματα.
Η πτώση τάσης στη διασταύρωση βάσης-εκπομπού είναι 0,77 V, με την προϋπόθεση ότι το ρεύμα βάσης είναι 5 mA και το ρεύμα συλλέκτη είναι 0,1 Α.
Η τάση στην αντίσταση βάσης θα είναι:

Σύμφωνα με τον νόμο του Ohm:

Από το τυπικό εύρος αντιστάσεων επιλέγουμε μια αντίσταση 8,2 kOhm. Αυτό ολοκληρώνει τον υπολογισμό.

Θα ήθελα να επιστήσω την προσοχή σας σε ένα πρόβλημα που αντιμετώπισα. Κατά τη χρήση της βιβλιοθήκης IRremote, το Arduino πάγωσε κατά την προσαρμογή του μπλε χρώματος. Μετά από μια μακρά και ενδελεχή αναζήτηση στο Διαδίκτυο, αποδείχθηκε ότι αυτή η βιβλιοθήκη χρησιμοποιεί το Timer 2 από προεπιλογή για αυτό το μοντέλο Arduino. Τα χρονόμετρα χρησιμοποιούνται για τον έλεγχο των εξόδων PWM.

Χρονοδιακόπτης 0 (χρόνος συστήματος, PWM 5 και 6);
Χρονοδιακόπτης 1 (PWM 9 και 10);
Χρονοδιακόπτης 2 (PWM 3 και 11).

Αρχικά, χρησιμοποίησα το PWM 11 για να ρυθμίσω το μπλε χρώμα. Επομένως, να είστε προσεκτικοί όταν εργάζεστε με PWM, χρονόμετρα και βιβλιοθήκες τρίτων που ενδέχεται να τα χρησιμοποιούν. Είναι περίεργο αυτό αρχική σελίδαΔεν ειπώθηκε τίποτα για αυτήν την απόχρωση στο Github. Εάν θέλετε, μπορείτε να αποσχολιάσετε τη γραμμή με το χρονόμετρο 1 και να σχολιάσετε το 2.

Η σύνδεση των στοιχείων στο breadboard μοιάζει με αυτό:

Μετά τη δοκιμή στο breadboard, ξεκίνησαν οι φάσεις "Τοποθέτηση στοιχείων στην πλακέτα" και "Εργασία με συγκολλητικό σίδερο". Μετά την πρώτη δοκιμή της τελικής σανίδας, μια σκέψη σέρνεται στο κεφάλι μου: κάτι πήγε στραβά. Και εδώ ξεκινά η φάση, γνωστή σε πολλούς, «Επίπονη δουλειά με τον ελεγκτή». Ωστόσο, τα προβλήματα (πολλές γειτονικές επαφές συγκολλήθηκαν κατά λάθος) εξαλείφθηκαν γρήγορα και εδώ είναι το πολυαναμενόμενο κακό φως των LED.

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

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

Για τη σύνδεση των λωρίδων με LED, μπήκε ένας σωλήνας στο επάνω κάλυμμα από τον οποίο περνούσαν τέλεια όλα τα καλώδια.

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

Τι θα ήθελες να πεις τελικά;

Τι πρέπει να αλλάξω στο έργο; Για την παροχή του σήματος TRIG στους αισθητήρες απόστασης, θα μπορούσε κανείς να χρησιμοποιήσει μία έξοδο Arduino αντί για τρεις. Θα έδινα επίσης μια τρύπα για τον αισθητήρα υπερύθρων (τον οποίο ξέχασα), ο οποίος, δυστυχώς, είναι ακόμα κρυμμένος στην θήκη από την οποία, φυσικά, δεν μπορεί να διαβάσει σήματα από το τηλεχειριστήριο. Ωστόσο, ποιος είπε ότι δεν μπορείτε να κολλήσετε ή να τρυπήσετε τίποτα;

Θα ήθελα να σημειώσω ότι αυτό ήταν ένα ενδιαφέρον εξάμηνο και μια εξαιρετική ευκαιρία να προσπαθήσω να κάνω κάτι όχι στα χαρτιά, χάρη στο οποίο μπορώ να βάλω ένα άλλο σημάδι δίπλα στο στοιχείο "παιδικό όνειρο". Και αν νομίζετε ότι είναι δύσκολο να δοκιμάσετε κάτι νέο και δεν ξέρετε τι να κάνετε πρώτα, μην ανησυχείτε. Πολλοί άνθρωποι έχουν μια σκέψη στο κεφάλι τους: από πού να ξεκινήσουν και πώς μπορεί να γίνει αυτό; Υπάρχουν πολλά καθήκοντα στη ζωή από τα οποία μπορεί να μπερδευτείτε, αλλά μόλις προσπαθήσετε, θα παρατηρήσετε ότι με μια λάμψη στα μάτια σας μπορείτε να μετακινήσετε βουνά, ακόμα κι αν χρειαστεί να προσπαθήσετε λίγο για αυτό.

Για μια επιπλέον εργασία

    1 ακόμη LED

    1 ακόμη αντίσταση με ονομαστική τιμή 220 Ohms

    2 ακόμη καλώδια

Σχηματικό διάγραμμα

Σχέδιο στο breadboard

Σημείωση

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

    Προσπαθήστε να τοποθετήσετε τα εξαρτήματα έτσι ώστε το LED να μην ανάβει τη φωτοαντίσταση.

Σκίτσο

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT) ; ) void loop() ( // διαβάστε το επίπεδο φωτός. Παρεμπιπτόντως, ανακοινώστε // μπορείτε να αντιστοιχίσετε μια μεταβλητή και μια τιμή ταυτόχρονα int lightness = analogRead(LDR_PIN) ; // διαβάστε την τιμή από το ποτενσιόμετρο με το οποίο ρυθμίζουμε // τιμή κατωφλίου μεταξύ υπό όρους σκοταδισμού και φωτός int threshold = analogRead(POT_PIN) ; // δηλώνει μια δυαδική μεταβλητή και της εκχωρεί μια τιμή // "Είναι σκοτεινά τώρα." Boolean μεταβλητές, σε αντίθεση με // ακέραιοι, μπορεί να περιέχει μόνο μία από τις δύο τιμές: // σωστό ή λάθος. Τέτοιες αξίες // ονομάζεται επίσης boolean. boolean tooDark = (ελαφρότητα< threshold) ; // χρήση διακλάδωσης προγράμματος: ο επεξεργαστής θα εκτελέσει ένα από τα // δύο μπλοκ κώδικα ανάλογα με την εκτέλεση της συνθήκης. // Αν (αγγλικά «αν») είναι πολύ σκοτεινό...αν (πολύ σκοτεινό) ( // ...ανάψτε το φωτισμό digitalWrite(LED_PIN, HIGH) ; ) άλλο ( // ... διαφορετικά το φως δεν χρειάζεται - σβήστε το digitalWrite(LED_PIN, LOW) ; ) )

Επεξηγήσεις για τον κώδικα

    Χρησιμοποιούμε έναν νέο τύπο μεταβλητής - boolean, η οποία αποθηκεύει μόνο τις τιμές true (true, 1) ή false (false, 0). Αυτές οι τιμές είναι το αποτέλεσμα της αξιολόγησης Boolean παραστάσεων. Σε αυτό το παράδειγμα, η έκφραση Boolean είναι ελαφρότητα< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

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

    Στο πείραμά μας, η δυαδική έκφραση θα είναι αληθής όταν η τιμή ελαφρότητας είναι μικρότερη από την τιμή κατωφλίου επειδή χρησιμοποιήσαμε τον τελεστή< . Мы можем использовать операторы > , <= , >= , == , != , που σημαίνουν «μεγαλύτερο από», «λιγότερο ή ίσο με», «μεγαλύτερο ή ίσο με», «ίσο με», «όχι ίσο με», αντίστοιχα.

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

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

    Η λογική έκφραση ελαφρότητα< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

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

αν (ελαφρότητα< threshold) { // ... }

    Πίσω υπό όρους χειριστήεάν ακολουθεί απαραίτητα ένα μπλοκ κώδικα που εκτελείται εάν η λογική έκφραση είναι αληθής. Μην ξεχνάτε και τα δύο σγουρά σιδεράκια ()!

    Εάν, εάν η έκφραση είναι αληθής, χρειάζεται μόνο να την εκτελέσουμε έναςοδηγία, μπορεί να γραφτεί αμέσως μετά εάν (...) χωρίς άγκιστρα:

αν (ελαφρότητα< threshold) digitalWrite(LED_PIN, HIGH) ;

    Η εντολή if μπορεί να επεκταθεί με μια κατασκευή else. Το μπλοκ κώδικα ή η μεμονωμένη πρόταση που ακολουθεί, θα εκτελεστεί μόνο εάν η έκφραση Boole in if αξιολογηθεί ως false. Οι κανόνες σχετικά με τα σγουρά τιράντες είναι οι ίδιοι. Στο πείραμά μας, γράψαμε «αν είναι πολύ σκοτεινό, ανάψτε το LED, διαφορετικά απενεργοποιήστε το LED».

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

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

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

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

Ποιες φωτοαντιστάσεις μπορούν να αγοραστούν σε ηλεκτρονικά καταστήματα

Το πιο δημοφιλές και προσιτή επιλογήΟι αισθητήρες στην αγορά είναι μοντέλα μαζικής παραγωγής από κινεζικές εταιρείες, κλώνοι προϊόντων από τον κατασκευαστή VT. Δεν είναι πάντα δυνατό να καταλάβουμε ποιος και τι ακριβώς παράγει αυτός ή αυτός ο προμηθευτής, αλλά για να ξεκινήσετε με φωτοαντιστάσεις, η απλούστερη επιλογή είναι αρκετά κατάλληλη.

Ένας αρχάριος χρήστης του Arduino μπορεί να συμβουλευτεί να αγοράσει μια έτοιμη ενότητα φωτογραφιών που μοιάζει με αυτό:


Αυτή η ενότητα περιέχει ήδη όλα τα απαραίτητα στοιχεία για εύκολη σύνδεσηφωτοαντίσταση στην πλακέτα Arduino. Ορισμένες μονάδες εφαρμόζουν ένα κύκλωμα σύγκρισης και παρέχουν μια ψηφιακή έξοδο και μια αντίσταση περικοπής για έλεγχο.

Ένας Ρώσος ραδιοερασιτέχνης μπορεί να συμβουλευτεί να στραφεί στον ρωσικό αισθητήρα PA. Διαθέσιμα προς πώληση είναι τα FR1-3, FR1-4 κ.λπ. - παρήχθησαν στη σοβιετική εποχή. Όμως, παρόλα αυτά, το FR1-3 είναι μια πιο ακριβής λεπτομέρεια. Από αυτό προκύπτει η διαφορά στην τιμή.Για FR δεν ζητούν περισσότερα από 400 ρούβλια. Το FR1-3 θα κοστίσει περισσότερα από χίλια ρούβλια το ένα.

Σήμανση φωτοαντίστασης

Η σύγχρονη επισήμανση των μοντέλων που παράγονται στη Ρωσία είναι αρκετά απλή. Τα δύο πρώτα γράμματα είναι PhotoResistor, οι αριθμοί μετά την παύλα δείχνουν τον αριθμό ανάπτυξης. FR -765 - φωτοαντίσταση, ανάπτυξη 765. Συνήθως σημειώνεται απευθείας στο σώμα του εξαρτήματος

Ο αισθητήρας VT έχει ένα εύρος αντίστασης που υποδεικνύεται στο διάγραμμα σήμανσης. Για παράδειγμα:

  • VT83N1 - 12-100kOhm (12K – φωτισμένο, 100K – στο σκοτάδι)
  • VT93N2 - 48-500kOhm (48K – φωτισμένο, 100K – στο σκοτάδι).

Μερικές φορές, για να διευκρινιστούν πληροφορίες σχετικά με τα μοντέλα, ο πωλητής παρέχει ένα ειδικό έγγραφο από τον κατασκευαστή. Εκτός από τις παραμέτρους λειτουργίας, εκεί υποδεικνύεται και η ακρίβεια του εξαρτήματος. Όλα τα μοντέλα έχουν εύρος ευαισθησίας στο ορατό τμήμα του φάσματος. Περισυλλογή αισθητήρας φωτόςΠρέπει να καταλάβετε ότι η ακρίβεια της λειτουργίας είναι μια σχετική έννοια. Ακόμη και για μοντέλα από τον ίδιο κατασκευαστή, την ίδια παρτίδα ή την ίδια αγορά, μπορεί να διαφέρει κατά 50% ή περισσότερο.

Στο εργοστάσιο, τα εξαρτήματα ρυθμίζονται σε μήκη κύματος που κυμαίνονται από κόκκινο έως πράσινο φως. Οι περισσότεροι άνθρωποι «βλέπουν» επίσης υπέρυθρη ακτινοβολία. Τα ιδιαίτερα ακριβή εξαρτήματα μπορούν να ανιχνεύσουν ακόμη και το υπεριώδες φως.

Πλεονεκτήματα και μειονεκτήματα του αισθητήρα

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

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

Σύνδεση φωτοαντίστασης στο Arduino

Σε έργα arduinoΗ φωτοαντίσταση χρησιμοποιείται ως αισθητήρας φωτός. Λαμβάνοντας πληροφορίες από αυτό, η πλακέτα μπορεί να ενεργοποιήσει ή να απενεργοποιήσει τα ρελέ, να εκκινήσει κινητήρες και να στείλει μηνύματα. Φυσικά, πρέπει να συνδέσουμε σωστά τον αισθητήρα.

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

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

Η εγκατάσταση της ίδιας της πλακέτας δεν πρέπει να προκαλεί δυσκολίες. Δεδομένου ότι η φωτοαντίσταση δεν έχει πολικότητα, μπορεί να συνδεθεί από οποιαδήποτε πλευρά· μπορεί να συγκολληθεί στην πλακέτα, να συνδεθεί με καλώδια χρησιμοποιώντας μια πλακέτα κυκλώματος ή να χρησιμοποιηθεί με συνηθισμένα κλιπ (κλιπ κροκόδειλου) για σύνδεση. Η πηγή ενέργειας στο κύκλωμα είναι το ίδιο το Arduino. Φωτοαντίστασητο ένα πόδι συνδέεται με τη γείωση, το άλλο συνδέεται με την πλακέτα ADC (στο παράδειγμά μας - AO). Συνδέουμε μια αντίσταση 10 kOhm στο ίδιο πόδι. Φυσικά, μπορείτε να συνδέσετε μια φωτοαντίσταση όχι μόνο στην αναλογική ακίδα A0, αλλά και σε οποιαδήποτε άλλη.

Λίγα λόγια για την πρόσθετη αντίσταση 10 Κ. Έχει δύο λειτουργίες στο κύκλωμά μας: περιορισμό του ρεύματος στο κύκλωμα και σχηματισμό απαιτούμενη τάσησε κύκλωμα με διαχωριστή. Ο περιορισμός ρεύματος είναι απαραίτητος σε μια κατάσταση όπου μια πλήρως φωτισμένη φωτοαντίσταση μειώνει απότομα την αντίστασή της. Και η παραγωγή τάσης είναι για προβλέψιμες τιμές στην αναλογική θύρα. Στην πραγματικότητα για κανονική λειτουργίαΜε τις φωτοαντιστάσεις μας αρκεί μια αντίσταση 1Κ.

Αλλάζοντας την τιμή της αντίστασης μπορούμε να "μετατοπίσουμε" το επίπεδο ευαισθησίας στη "σκοτεινή" και "ελαφριά" πλευρά. Άρα, 10 K θα δώσει γρήγορη εναλλαγήτην έναρξη του φωτός. Στην περίπτωση του 1K, ο αισθητήρας φωτός θα ανιχνεύσει με μεγαλύτερη ακρίβεια τα υψηλά επίπεδα φωτός.

Εάν χρησιμοποιείτε έτοιμη ενότητααισθητήρα φωτός, τότε η σύνδεση θα είναι ακόμα πιο απλή. Συνδέουμε την έξοδο της μονάδας VCC στην υποδοχή 5V στην πλακέτα, το GND στη γείωση. Συνδέουμε τις υπόλοιπες ακίδες στις υποδοχές Arduino.

Εάν η πλακέτα έχει ψηφιακή έξοδο, τότε τη στέλνουμε σε ψηφιακές ακίδες. Εάν είναι αναλογικό, τότε πηγαίνετε στο αναλογικό. Στην πρώτη περίπτωση, θα λάβουμε ένα σήμα σκανδάλης - το επίπεδο φωτισμού έχει ξεπεραστεί (το όριο σκανδάλης μπορεί να ρυθμιστεί χρησιμοποιώντας μια αντίσταση ρύθμισης). Από τους αναλογικούς ακροδέκτες θα μπορούμε να λάβουμε μια τιμή τάσης ανάλογη με το πραγματικό επίπεδο φωτισμού.

Ένα παράδειγμα σκίτσου ενός αισθητήρα φωτός σε μια φωτοαντίσταση

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

Η σύνταξη ενός σκίτσου για έναν αισθητήρα φωτός είναι αρκετά απλή. Χρειάζεται μόνο να αφαιρέσουμε την τρέχουσα τιμή τάσης από την αναλογική ακίδα στην οποία είναι συνδεδεμένος ο αισθητήρας. Αυτό γίνεται χρησιμοποιώντας τη συνάρτηση analogRead() που όλοι γνωρίζουμε. Στη συνέχεια μπορούμε να εκτελέσουμε κάποιες ενέργειες ανάλογα με το επίπεδο φωτός.

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

Ο αλγόριθμος λειτουργίας είναι ο εξής:

  • Προσδιορίστε τη στάθμη του σήματος από την αναλογική ακίδα.
  • Συγκρίνουμε το επίπεδο με την τιμή κατωφλίου. Η μέγιστη τιμή θα αντιστοιχεί στο σκοτάδι, η ελάχιστη τιμή θα αντιστοιχεί στο μέγιστο φωτισμό. Ας επιλέξουμε μια τιμή κατωφλίου ίση με 300.
  • Εάν το επίπεδο είναι μικρότερο από το όριο, είναι σκοτεινό, πρέπει να ανάψετε το LED.
  • Διαφορετικά, απενεργοποιήστε το LED.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial. ifn val< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

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

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

Αισθητήρας φωτός και ομαλή αλλαγή στη φωτεινότητα του οπίσθιου φωτισμού

Μπορείτε να τροποποιήσετε το έργο έτσι ώστε η φωτεινότητα του LED να αλλάζει ανάλογα με το επίπεδο φωτισμού. Θα προσθέσουμε τις ακόλουθες αλλαγές στον αλγόριθμο:

  • Θα αλλάξουμε τη φωτεινότητα του λαμπτήρα μέσω PWM, στέλνοντας τιμές από 0 έως 255 στην ακίδα με το LED χρησιμοποιώντας το analogWrite().
  • Για να μετατρέψουμε την ψηφιακή τιμή του επιπέδου φωτός από τον αισθητήρα φωτός (από 0 έως 1023) στο εύρος PWM φωτεινότητας LED (από 0 έως 255), θα χρησιμοποιήσουμε τη συνάρτηση map().

Παράδειγμα σκίτσου:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() (int val = analogRead(PIN_PHOTO_SENSOR); Serial.Pos intnl; = map(val, 0, 1023, 0, 255); // Μετατρέψτε την προκύπτουσα τιμή στο επίπεδο σήματος PWM. Όσο χαμηλότερη είναι η τιμή φωτισμού, τόσο λιγότερη ισχύς πρέπει να παρέχουμε στο LED μέσω PWM. analogWrite(PIN_LED, ledPower) ; // Αλλαγή φωτεινότητας)

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

Int val = 1023 – analogRead(PIN_PHOTO_RESISTOR);

Κύκλωμα αισθητήρα φωτός με χρήση φωτοαντίστασης και ρελέ

Παραδείγματα σκίτσων για εργασία με ρελέ δίνονται στο άρθρο σχετικά με τον προγραμματισμό ρελέ στο Arduino. Σε αυτή την περίπτωση, δεν χρειάζεται να κάνουμε πολύπλοκες κινήσεις: αφού προσδιορίσουμε το "σκοτάδι", απλά ενεργοποιούμε το ρελέ και εφαρμόζουμε την αντίστοιχη τιμή στον πείρο του.

#define PIN_RELAY 10 #define PIN_PHOTO_SENSOR A0 void setup() ( pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); ) void loop() (int val = analogRead(PIN_PHOTO_val (PIN_PHOTO_val) αν);< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

συμπέρασμα

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

Σε αυτό το πείραμα, το LED θα πρέπει να ανάβει όταν το επίπεδο φωτός πέσει κάτω από ένα όριο που έχει οριστεί από ένα ποτενσιόμετρο.

ΚΑΤΑΛΟΓΟΣ ΜΕ ΜΕΡΗ ΓΙΑ ΤΟ ΠΕΙΡΑΜΑ

- 1 πλακέτα Arduino Uno.

- 1 breadboard χωρίς συγκόλληση

- 1 LED;

- 1 φωτοαντίσταση

- 1 αντίσταση με ονομαστική τιμή 220 Ohms, 1 αντίσταση με ονομαστική τιμή 10 kOhms.

- 1 μεταβλητή αντίσταση (ποτενσιόμετρο).

- 10 σύρματα αρσενικό-αρσενικό.

ΣΤΟΙΧΕΙΑ ΓΙΑ ΕΠΙΠΛΕΟΝ ΕΡΓΑΣΙΑ

1 ακόμη LED;

Άλλη 1 αντίσταση με ονομαστική τιμή 220 Ohms.

2 ακόμη καλώδια.

ΔΙΑΓΡΑΜΜΑ ΚΥΚΛΩΜΑΤΟΣ

ΔΙΑΓΡΑΜΜΑ ΣΕ ΠΛΑΚΑ

ΣΚΙΤΣΟ

κατεβάστε το σκίτσο για το Arduino IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // διαβάστε το επίπεδο φωτός. Παρεμπιπτόντως, // μπορείτε να δηλώσετε μια μεταβλητή και να εκχωρήσετε μια τιμή σε αυτό ταυτόχρονα int lightness = analogRead(LDR_PIN); // ανάγνωση της τιμής από το ποτενσιόμετρο, το οποίο χρησιμοποιούμε για να προσαρμόσουμε // την τιμή κατωφλίου μεταξύ υπό όρους σκοταδισμού και ανοιχτού κατωφλίου int = analogRead(POT_PIN); // δηλώνουμε ένα λογική μεταβλητή και ορίστε της την τιμή // «είναι σκοτεινό τώρα». Οι μεταβλητές Boole, σε αντίθεση με τις // ακέραιες μεταβλητές, μπορούν να περιέχουν μόνο μία από τις δύο τιμές: // true ή false. Τέτοιες τιμές // ονομάζονται επίσης boolean. boolean tooDark = (ελαφρότητα< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

ΕΞΗΓΗΣΕΙΣ ΓΙΑ ΤΟΝ ΚΩΔ

  • Χρησιμοποιούμε έναν νέο τύπο μεταβλητών − boolean, τα οποία αποθηκεύουν μόνο τιμές αληθής (αλήθεια, 1) ή ψευδής (ψευδής, 0). Αυτές οι τιμές είναι το αποτέλεσμα της αξιολόγησης Boolean παραστάσεων. Σε αυτό το παράδειγμα, η έκφραση Boolean είναι ελαφρότητα< threshold . Στην ανθρώπινη γλώσσα αυτό ακούγεται σαν: «φωτισμός κάτω από το επίπεδο κατωφλίου». Μια τέτοια δήλωση θα ισχύει όταν ο φωτισμός είναι κάτω από το επίπεδο κατωφλίου. Ο μικροελεγκτής μπορεί να συγκρίνει τις τιμές των μεταβλητών ελαφρότηταΚαι κατώφλι, που με τη σειρά τους είναι τα αποτελέσματα της μέτρησης και υπολογίζουν την αλήθεια της λογικής έκφρασης.
  • Βάζουμε αυτή τη λογική έκφραση σε παρενθέσεις μόνο για λόγους σαφήνειας. Είναι πάντα καλύτερο να γράφετε ευανάγνωστο κώδικα. Σε άλλες περιπτώσεις, οι παρενθέσεις μπορούν να επηρεάσουν τη σειρά των πράξεων, όπως στη συνηθισμένη αριθμητική.
  • Στο πείραμά μας, μια Boolean έκφραση θα είναι αληθής όταν η τιμή ελαφρότηταμικρότερη από την αξία κατώφλιεπειδή χρησιμοποιήσαμε τον χειριστή < . Μπορούμε να χρησιμοποιήσουμε τελεστές > , <= , >= , = = , != , που σημαίνει «μεγαλύτερο από», «λιγότερο ή ίσο με», «μεγαλύτερο ή ίσο με», «ίσο με», «όχι ίσο με», αντίστοιχα.
  • Να είστε ιδιαίτερα προσεκτικοί με τον λογικό τελεστή = = και μην το συγχέετε με τον τελεστή εκχώρησης = . Στην πρώτη περίπτωση, συγκρίνουμε τις τιμές των παραστάσεων και παίρνουμε μια λογική τιμή (αληθής ή ψευδής) και στη δεύτερη περίπτωση, εκχωρούμε την τιμή του δεξιού τελεστή στον αριστερό τελεστή. Ο μεταγλωττιστής δεν γνωρίζει τις προθέσεις μας και δεν θα εκδώσει σφάλμα, αλλά μπορούμε κατά λάθος να αλλάξουμε την τιμή κάποιας μεταβλητής και στη συνέχεια να αφιερώσουμε πολύ χρόνο ψάχνοντας για ένα σφάλμα.
  • Υπό όρους χειριστή ανΑν") είναι ένα από τα βασικά στις περισσότερες γλώσσες προγραμματισμού. Με τη βοήθειά του, μπορούμε να εκτελέσουμε όχι μόνο μια αυστηρά καθορισμένη ακολουθία ενεργειών, αλλά και να λάβουμε αποφάσεις σχετικά με τον κλάδο του αλγορίθμου που θα ακολουθήσουμε, ανάλογα με ορισμένες συνθήκες.
  • Για μια λογική έκφραση ελαφρότητα< threshold υπάρχει ένα νόημα: αληθήςή ψευδής. Το υπολογίσαμε και το τοποθετήσαμε σε μια μεταβλητή boolean πολύ σκοτεινά("πολύ σκοτεινά") Έτσι, φαίνεται να λέμε "αν είναι πολύ σκοτεινό, τότε ανάψτε το LED"
  • Με την ίδια επιτυχία θα μπορούσαμε να πούμε "αν ο φωτισμός είναι μικρότερος από το επίπεδο κατωφλίου, τότε ανάψτε το LED", δηλ. μεταφέρω σε ανόλη η λογική έκφραση:
αν (ελαφρότητα< threshold) { // ... }
  • Πίσω από τη δήλωση υπό όρους ανΠρέπει να υπάρχει ένα μπλοκ κώδικα που εκτελείται εάν η λογική έκφραση είναι αληθής. Μην ξεχνάτε και τα δύο σγουρά τιράντες {} !
  • Εάν, εάν η έκφραση είναι αληθής, χρειάζεται μόνο να την εκτελέσουμε ένας οδηγίες, μπορεί να γραφτεί αμέσως μετά αν (…)χωρίς σγουρά τιράντες:
αν (ελαφρότητα< threshold) digitalWrite(LED_PIN, HIGH);
  • Χειριστής ανμπορεί να επεκταθεί με σχεδιασμό αλλού("σε διαφορετική περίπτωση"). Ένα μπλοκ κώδικα ή μια μεμονωμένη πρόταση μετά από αυτό θα εκτελεστεί μόνο εάν η λογική έκφραση είναι μέσα ανέχει το νόημα ψευδής , « ψέμα" Οι κανόνες σχετικά με τα σγουρά τιράντες είναι οι ίδιοι. Στο πείραμά μας, γράψαμε «αν είναι πολύ σκοτεινό, ανάψτε το LED, διαφορετικά απενεργοποιήστε το LED».

ΕΡΩΤΗΣΕΙΣ ΓΙΑ ΝΑ ΔΟΚΙΜΑΣΕΤΕ ΤΟΝ ΕΑΥΤΟ ΣΑΣ

  1. Εάν εγκαταστήσουμε μια φωτοαντίσταση μεταξύ της αναλογικής εισόδου και της γείωσης, η συσκευή μας θα λειτουργήσει αντίστροφα: το LED θα ανάψει όταν αυξηθεί η ποσότητα φωτός. Γιατί;
  2. Τι αποτέλεσμα από τη λειτουργία της συσκευής θα έχουμε αν το φως από το LED πέσει στη φωτοαντίσταση;
  3. Εάν εγκαταστήσουμε τη φωτοαντίσταση όπως αναφέρθηκε στην προηγούμενη ερώτηση, πώς πρέπει να αλλάξουμε το πρόγραμμα ώστε η συσκευή να λειτουργεί σωστά;
  4. Ας πούμε ότι έχουμε τον κωδικό αν (προϋπόθεση) (δράση;). Σε ποιες περιπτώσεις θα γίνει; δράση ?
  5. Σε ποιες αξίες yέκφραση x + y > 0θα είναι αλήθεια αν x > 0 ?
  6. Είναι απαραίτητο να υποδείξετε ποιες εντολές θα εκτελεστούν εάν η συνθήκη βρίσκεται στη δήλωση ανψευδής?
  7. Ποια είναι η διαφορά μεταξύ του χειριστή = = από τον χειριστή = ?
  8. Αν χρησιμοποιήσουμε την κατασκευή αν (προϋπόθεση) ενέργεια1; αλλιώς δράση2?, θα μπορούσε να υπάρξει μια κατάσταση όπου καμία από τις ενέργειες δεν εκτελείται; Γιατί;

ΚΑΘΗΚΟΝΤΑ ΓΙΑ ΑΝΕΞΑΡΤΗΤΗ ΛΥΣΗ

  1. Ξαναγράψτε το πρόγραμμα χωρίς να χρησιμοποιήσετε τη μεταβλητή πολύ σκοτεινάδιατηρώντας παράλληλα τη λειτουργικότητα της συσκευής.
  2. Προσθέστε ένα άλλο LED στο κύκλωμα. Ολοκληρώστε το πρόγραμμα έτσι ώστε όταν ο φωτισμός πέσει κάτω από την τιμή κατωφλίου, ανάβει ένα LED και όταν ο φωτισμός πέσει κάτω από τη μισή τιμή κατωφλίου, ανάβουν και τα δύο LED.
  3. Αλλάξτε το κύκλωμα και προγραμματίστε έτσι ώστε τα LED να ανάβουν σύμφωνα με την ίδια αρχή, αλλά να ανάβουν όσο πιο έντονα τόσο λιγότερο φως πέφτει στη φωτοαντίσταση.




Μπλουζα