Γεια σε όλους! Είμαι ο Artem Luzhetsky και θα κάνω μια σειρά άρθρων αφιερωμένων στο " έξυπνο σπίτι"και IoT (Αγγλικά - Internet of Things, Internet of things). Θα γνωρίσουμε καταπληκτικούς τρόπους δημιουργίας οικιακό δίκτυοαπό μια ποικιλία συσκευών που θα λειτουργούν είτε αυτόνομα είτε με τη βοήθεια ενός ατόμου. Καλά? Ας αρχίσουμε!

Το πρώτο άρθρο είναι εισαγωγικό, θέλω να καταλάβετε ότι θα δουλέψω με τους πιο συνηθισμένους πίνακες και ενότητες, ώστε οι περισσότεροι να μπορούν να δοκιμάσουν τις δυνάμεις τους στην ανάπτυξη του IoT.

Έτσι, για αρχή, χρειαζόμαστε δύο μικροελεγκτές που θα χρησιμοποιήσουμε: και.

Arduino UNO

Δεν νομίζω ότι χρειάζεται να σας παρουσιάσω αυτόν τον πίνακα, είναι πολύ δημοφιλής στους αρχάριους και στους λάτρεις των DIY. Θα πω μόνο ότι οι δυνατότητες αυτού του πίνακα είναι περιορισμένες και το UNO δεν μπορεί να λειτουργήσει με το πρωτόκολλο https, δεν υπάρχει αρκετό υπολογιστική ισχύςΜικροελεγκτής ATmega328P, οπότε όταν πρέπει να δουλέψουμε με τον μικροελεγκτή και το πρωτόκολλο https, θα προγραμματίσουμε το ESP8266.

ESP8266

Θα δουλέψω με τη μονάδα Troyka ESP8266 από την Amperka, αλλά μπορείτε να χρησιμοποιήσετε με ασφάλεια την κανονική μονάδα ESP 8266, ουσιαστικά δεν έχουν διαφορές, το κύριο πράγμα κατά τη σύνδεση είναι να κοιτάξετε την αξία των ακίδων και να θυμάστε ότι το ESP λειτουργεί σύμφωνα σε 3,3 βολτ λογική, επομένως πρέπει είτε να συνδεθείτε μέσω 5 βολτ, αλλά να συνδέσετε έναν ρυθμιστή τάσης στο κύκλωμα ή απλά να χρησιμοποιήσετε έναν πείρο με τροφοδοσία τάσης 3,3 βολτ.

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

Επιπλέον Λεπτομέρειες

Θα χρειαστεί επίσης να δημιουργήσουμε όλα τα πειράματα:

  1. LED
  2. φωτοαντίσταση
  3. Θερμίστορ
  4. αποστασιόμετρο υπερήχων
  5. Piezo ηχείο
  6. Mini Servo
  7. Αισθητήρας υπερύθρων
  8. IR τηλεχειριστήριο

Δεν είναι απαραίτητο να έχουμε όλες αυτές τις ενότητες για να δουλέψουμε με το IoT, αλλά για να κάνουμε όλα τα μελλοντικά έργα, θα πρέπει τελικά να τα αγοράσουμε όλα.

Προγράμματα και Βιβλιοθήκες

Πρώτα - κατεβάστε τη βιβλιοθήκη που θα σας βοηθήσει να εργαστείτε πολύ πιο εύκολα στο Arduino IDE εάν χρησιμοποιείτε το ESP8266 - http://wiki.amperka.ru/_media/iot-m:iot-m-libs.zip

Δεύτερον, για να εξοικειωθούμε καλύτερα με το IoT, θα χρειαστούμε ιστότοπους που θα μας παρέχουν τη δυνατότητα να στέλνουμε δεδομένα σε αυτούς.

  1. www.dweet.io
  2. maker.iftt.com
  3. narodmon.ru
  4. και τα λοιπά.

Τρίτον - θα χρειαστούμε επίσης διάφορες εφαρμογέςστο android για να μπορούμε να ελέγχουμε ένα έξυπνο σπίτι με τη βοήθεια ενός τηλεφώνου.

  1. ανοιχτό κέντρο
  2. Αναβοσβήνω
  3. και τα λοιπά.

Θα εξοικειωθούμε με όλες τις μεθόδους, τα προγράμματα και τις τοποθεσίες αναλυτικά στα επόμενα έργα.

2. Φτιάχνοντας μια «έξυπνη λάμπα»

Σας έχω κάνει ήδη να βαρεθείτε; Ας κάνουμε το πιο απλό έξυπνη λάμπαπου θα ανάψει αν το δωμάτιο είναι σκοτεινό.

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

Εάν δεν είστε σίγουροι ότι είστε έτοιμοι να εργαστείτε με ηλεκτρισμό 220 βολτ, χρησιμοποιήστε ένα κανονικό LED αντί για φακό. Στην αρχή πήρα το δικό μου παλιά λάμπα TLI - 204, υπάρχουν σχεδόν σε οποιοδήποτε κατάστημα (αποσυνδεδεμένο από το δίκτυο εκ των προτέρων).

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

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

Το γενικό ηλεκτρικό κύκλωμα πρέπει να μοιάζει με αυτό:

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

Ας συνδέσουμε μια φωτοαντίσταση στο arduino. Το σχήμα μοιάζει με αυτό:

3. Κωδικός για "έξυπνη λάμπα"

Τώρα ας γράψουμε τον κωδικό με τον οποίο θα μεταδώσουμε ρεύμα στο ρελέ αν το δωμάτιο είναι σκοτεινό.

#define SHINE 5 //PIN ON PHOTORESISTOR #define REL 13 //PIN ON RELAY void setup()( pinMode(SHINE, INPUT); pinMode(REL, OUTPUT); Serial.begin(9600); ) void loop()( if (αναλογικήΑνάγνωση(SHINE)<600) // Если света в комнате мало, то включаем лампу { digitalWrite(REL, HIGH) } else // если много, то выключаем { digitalWrite(REL, LOW); } Serial.printIn(analogRead(SHINE)); selay(500); }

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

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

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

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

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

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

- 1 LED;

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

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

- 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 threshold = analogRead(POT_PIN); // δήλωση μιας μεταβλητής boolean και του εκχωρήστε την τιμή // "is it dark now". Οι μεταβλητές Boole, σε αντίθεση με τις // ακέραιες, μπορούν να περιέχουν μόνο μία από τις δύο τιμές: // true (eng. true) ή false (eng. false). Τέτοιες τιμές ​​// ονομάζονται επίσης boolean (eng. boolean).boolean tooDark = (ελαφρότητα< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

ΕΞΗΓΗΣΕΙΣ ΚΩΔΙΚΟΥ

  • Χρησιμοποιούμε έναν νέο τύπο μεταβλητών − boolean, τα οποία αποθηκεύουν μόνο τιμές αληθής (αλήθεια, 1) ή ψευδής (ψευδής, 0). Αυτές οι τιμές είναι το αποτέλεσμα της αξιολόγησης των δυαδικών εκφράσεων. Σε αυτό το παράδειγμα, η δυαδική έκφραση είναι ελαφρότητα< 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 να ανάβουν με τον ίδιο τρόπο, αλλά να ανάβουν όσο πιο δυνατά, τόσο λιγότερο φως πέφτει στη φωτοαντίσταση.

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

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

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

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


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

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

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

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

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

Σε σύγκριση με τον μορφοτροπέα υπερήχων 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,5 V.

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

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

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

Νόμος του Ohm:

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

Θέλω να επιστήσω την προσοχή σας σε ένα πρόβλημα που αντιμετώπισα. Όταν χρησιμοποιείτε τη βιβλιοθήκη IRremote, το Arduino θα κρεμόταν κατά την προσαρμογή του μπλε χρώματος. Μετά από μια μακρά και προσεκτική αναζήτηση στο Διαδίκτυο, αποδείχθηκε ότι δεδομένη βιβλιοθήκηχρησιμοποιεί τον προεπιλεγμένο χρονοδιακόπτη 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 αντί για τρεις. Θα έδινα και μια τρύπα για τον αισθητήρα υπερύθρων (τον οποίο ξέχασα), η οποία, δυστυχώς, είναι κρυμμένη στη θήκη από την οποία φυσικά δεν μπορεί να διαβάσει σήματα από το τηλεχειριστήριο. Ωστόσο, ποιος είπε ότι δεν μπορείτε να κολλήσετε και να τρυπήσετε τίποτα;

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αλλάζοντας την τιμή της αντίστασης, μπορούμε να "μετατοπίσουμε" το επίπεδο ευαισθησίας στη "σκοτεινή" και "ελαφριά" πλευρά. Έτσι, 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); } }

συμπέρασμα

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

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

Η αντίσταση μιας φωτοαντίστασης εξαρτάται από το φως που την χτυπά. Χρήση φωτοαντίστασης σε συνδυασμό με συμβατική αντίσταση 4,7 kOhm, παίρνουμε έναν διαιρέτη τάσης στον οποίο η τάση που διέρχεται από τη φωτοαντίσταση ποικίλλει, ανάλογα με το επίπεδο φωτισμού.

Την τάση από τον διαιρέτη, εφαρμόζουμε στην είσοδο ADC του Arduino. Εκεί συγκρίνουμε τη λαμβανόμενη τιμή με ένα συγκεκριμένο όριο και ανάβουμε ή απενεργοποιούμε τη λάμπα.

Το διάγραμμα κυκλώματος του διαιρέτη φαίνεται παρακάτω. Όταν αυξάνεται ο φωτισμός, η αντίσταση της φωτοαντίστασης πέφτει και, κατά συνέπεια, αυξάνεται η τάση στην έξοδο του διαιρέτη (και στην είσοδο του ADC). Όταν το φως πέφτει, ισχύει το αντίθετο.

Η παρακάτω φωτογραφία δείχνει συναρμολογημένο κύκλωμαστο breadboard. Οι τάσεις 0V και 5V λαμβάνονται από το Arduino. Ο ακροδέκτης A0 χρησιμοποιείται ως είσοδος ADC.

Το σκίτσο του Arduino φαίνεται παρακάτω. Σε αυτό το σεμινάριο, απλά ανάβουμε και σβήνουμε το LED που είναι ενσωματωμένο στην πλακέτα Arduino. Μια πιο φωτεινή λυχνία LED, μπορείτε να συνδέσετε στον ακροδέκτη 13 (μέσω μιας αντίστασης ~220 ohm). Εάν συνδέσετε ένα πιο ισχυρό φορτίο, όπως μια λάμπα πυρακτώσεως, τότε θα πρέπει να συνδεθεί μέσω ρελέ ή θυρίστορ.

Υπάρχουν σχολιασμένες ενότητες στον κώδικα του προγράμματος, χρησιμεύουν για εντοπισμό σφαλμάτων. Θα είναι δυνατός ο έλεγχος της τιμής ADC (από 0 έως 1024). Επίσης, πρέπει να αλλάξετε την τιμή 500 στον κωδικό (κατώφλι ενεργοποίησης και απενεργοποίησης) σε αυτήν που επιλέγετε εμπειρικά αλλάζοντας τον φωτισμό.

/* ** Νυχτερινό φως ** ** www.hobbytronics.co.uk */ int sensorPin = A0; // ορισμός ποδιού εισόδου για ανυπόγραφο ADC int sensorValue = 0; // ψηφιακή αξία photoresistor void setup() ( pinMode(13, OUTPUT); Serial.begin(9600); // έναρξη εξόδου σειριακών δεδομένων (για δοκιμή) ) void loop() ( sensorValue = analogRead(sensorPin); // ανάγνωση τιμής από φωτοαντίσταση εάν (τιμή αισθητήρα<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }