Μετάβαση στο κύριο περιεχόμενο

 

ΠΩΣ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΕΤΕ ΦΩΤΟΑΝΤΙΣΤΑΣΕΙΣ ΓΙΑ ΝΑ ΑΝΙΧΝΕΥΣΕΤΕ ΦΩΣ ΣΕ ΕΝΑ ARDUINO
















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


Οι φωτοαντιστάσεις είναι ιδανικές για την κατασκευή διακοπτών με έλεγχο φωτός. Μια κοινή εφαρμογή των φωτοαντιστάσεων είναι ο έλεγχος ρελέ 5 volt για να ανάβουν μια λάμπα όταν πέφτει το σκοτάδι. Χρησιμοποιούνται επίσης για την παρακολούθηση του φωτός της ημέρας σε μετεωρολογικούς σταθμούς και συστήματα περιβαλλοντικής παρακολούθησης.

ΠΩΣ ΛΕΙΤΟΥΡΓΟΥΝ ΟΙ ΦΩΤΟΑΝΤΙΣΤΑΣΕΙΣ

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

Ηλεκτρόδια φωτοαντίστασης και ανθεκτικό υλικό.jpg

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

ΠΩΣ ΝΑ ΡΥΘΜΙΣΕΤΕ ΜΙΑ ΦΩΤΟΑΝΤΙΣΤΑΣΗ ΣΤΟ ARDUINO

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

Διαιρέτης τάσης φωτοαντίστασης Schematic.png

Η τάση εξόδου (V out ) του διαιρέτη τάσης αλλάζει όταν αλλάζει η αντίσταση της φωτοαντίστασης. Χωρίς φως να χτυπά τη φωτοαντίσταση, η αντίσταση της φωτοαντίστασης είναι υψηλή, επομένως η τάση εξόδου είναι χαμηλή. Όταν το φως χτυπά τη φωτοαντίσταση, η αντίσταση μειώνεται και η τάση εξόδου αυξάνεται.

Αυτά είναι τα μέρη που θα χρειαστείτε για να συνδέσετε μια φωτοαντίσταση σε ένα Arduino:

Ακολουθήστε αυτό το διάγραμμα καλωδίωσης για να συνδέσετε το διαιρέτη τάσης φωτοαντίστασης στο Arduino:

ΔΙΑΓΡΑΜΜΑ ΚΑΛΩΔΙΩΣΗΣ Φωτοαντίστασης

ΠΩΣ ΝΑ ΠΡΟΓΡΑΜΜΑΤΙΣΕΤΕ ΜΙΑ ΦΩΤΟΑΝΤΙΣΤΑΣΗ ΣΤΟ ARDUINO

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

int photoPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int light = analogRead(photoPin);
  Serial.println(light);
  delay(100);
}

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

Αρχικά, δηλώνουμε μια μεταβλητή int που ονομάζεται photoPinκαι την ορίζουμε ίση με την αναλογική ακίδα A0. Αυτή είναι η ακίδα που συνδέεται στο κέντρο του διαιρέτη τάσης.

Στην setup()ενότητα, αρχικοποιούμε τη σειριακή οθόνη. Στην loop()ενότητα, δηλώνουμε μια τοπική μεταβλητή int που ονομάζεται lightκαι την ορίζουμε ίση με την αναλογική ανάγνωση του photoPinΣτη συνέχεια εκτυπώνουμε σειριακά τη lightμεταβλητή στη σειριακή οθόνη και καθυστερούμε για 100 χιλιοστά του δευτερολέπτου για να κάνουμε την έξοδο πιο ευανάγνωστη. Έτσι, το πρόγραμμα  θα χρησιμοποιήσει τη analogRead()συνάρτηση για να μετρήσει την τάση εξόδου στο κέντρο του διαιρέτη τάσης, να τη μετατρέψει σε ακέραιο αριθμό μεταξύ 0 και 1023 και να εκτυπώσει αυτόν τον αριθμό στη σειριακή οθόνη.

Μόλις συνδεθεί το κύκλωμα και ανέβει ο κωδικός στο Arduino, τοποθετήστε τη φωτοαντίσταση στο σκοτάδι. Οι analogRead()τιμές στη σειριακή οθόνη θα πρέπει να μειωθούν. Όταν τοποθετείτε τη φωτοαντίσταση στο φως, οι analogRead()τιμές θα πρέπει να αυξηθούν:

Δεδομένα φωτοαντίστασης στο Serial Monitor.png

ΠΩΣ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΕΤΕ ΜΙΑ ΦΩΤΟΑΝΤΙΣΤΑΣΗ ΓΙΑ ΝΑ ΕΛΕΓΞΕΤΕ ΠΡΑΓΜΑΤΑ

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

Αυτά είναι τα μέρη που θα χρειαστείτε:

Συνδέστε το κύκλωμα ως εξής:

Φωτοαντίσταση και ΔΙΑΓΡΑΜΜΑ ΚΑΛΩΔΙΩΣΗΣ LED

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΦΩΤΟΑΝΤΙΣΤΑΣΗΣ ΓΙΑ ΕΛΕΓΧΟ ΠΡΑΓΜΑΤΩΝ

Μόλις συνδεθεί το κύκλωμα, ανεβάστε αυτόν τον κωδικό στο Arduino:

int photoPin = A0;
int ledPin = 7;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int lightRaw = analogRead(photoPin);
  int light = map(lightRaw, 1023, 0, 10, 0);

  if (light < 5) {
    digitalWrite(ledPin, HIGH);
  }

  else {
    digitalWrite(ledPin, LOW);
  }
}

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

Ξεκινάμε δηλώνοντας μια μεταβλητή για το photoPin, και την ορίζουμε ίση με την αναλογική ακίδα A0. Στη συνέχεια, δηλώνουμε μια μεταβλητή για το ledPinκαι την ορίζουμε ίση με την ψηφιακή ακίδα 7.

Στην setup()ενότητα, ορίσαμε τη λειτουργία pin του ledPinως OUTPUTΣτην loop()ενότητα, παίρνουμε μια αναλογική ανάγνωση του photoPin, και αποθηκεύουμε την ανάγνωση σε μια τοπική μεταβλητή που ονομάζεται lightRawΓια να κάνουμε τις ακατέργαστες τιμές ADC από τη φωτοαντίσταση λίγο πιο εύκολο να απεικονιστούν, χρησιμοποιούμε τη map()συνάρτηση για να μετατρέψουμε τις τιμές σε αριθμούς μεταξύ μηδέν και δέκα. Οι αντιστοιχισμένες τιμές αποθηκεύονται σε μια νέα τοπική μεταβλητή που ονομάζεται light.


Η if elseδήλωση ορίζει μια τιμή κατωφλίου που καθορίζει πότε θα ανάβει και θα σβήνει το LED. Όταν η τιμή που είναι αποθηκευμένη στο lightείναι μικρότερη από 5, ο κώδικας στη ifδήλωση θα εκτελεστεί. Εφόσον θέλουμε το LED να ανάβει όταν το φως πέσει κάτω από το κατώφλι, γράφουμε ψηφιακά το ledPinυψηλό.


Η elseεντολή εκτελείται όταν lightδεν είναι μικρότερη από 5. Έτσι στην elseεντολή γράφουμε ψηφιακά το ledPinχαμηλό για να το απενεργοποιήσουμε.

Αφού φτιάξετε το κύκλωμα και ανεβάσετε το σκίτσο, θα πρέπει να δείτε το LED να ανάβει στο σκοτάδι και να σβήνει στο φως.

Φωτοαντίσταση και LED Circuit.jpg

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




Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Σερβοκινητήρας

  Βασικός έλεγχος σερβομηχανισμού Θα μάθουμε πώς να ελέγχετε έναν τυπικό σερβοκινητήρα, να πηγαίνει εμπρός και πίσω κατά 180 μοίρες, χρησιμοποιώντας ένα «βρόχο for()». Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης Servo, η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση). . Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης  Servo     , η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση).      Χρειαζόμαστε τα παρακάτω:     Arduino IDE Arduino UNO  Σερβοκινητήρας 4,8V - 6V  Καλώδια βραχυκυκλωτήρα. Τυπικοί σερβοκινητήρες Οι τυπικοί σερβοκινητήρες είναι ενεργοποιητές που επιτρέπουν τον ακριβή έλεγχο της θέσης (γωνία). Χαρακτηριστικό  είναι ότι η γωνία του κινητήρα είναι 0 - 180 μοίρες. Με άλλα λόγια, μπορεί να κάνει το μισό μιας περιστροφής. Ένας τυπικός σερβοκινητήρας, όπως και άλλοι κινητήρες, είναι ουσιαστικά απλώς ένας...

Φωτοαντιστάτης

int a; // εδώ θα κρατάμε την τιμή που διαβάζουμε από τον φωτοαντιστάτη float b; // εδώ θα αποθηκεύουμε την τάση που έχει ο φωτοαντιστάτης στα άκρα του float c; // εδώ θα αποθηκεύουμε την τιμή της αντίστασης του φωτοαντιστάτη int d; // εδώ θα αποθηκεύσουμε την τιμή-όριο πάνω από την οποία θα ανάβουμε το void setup() { Serial.begin(9600); // ξεκινάμε το σειριακό μόνιτορ του Arduino IDE  d=500; // τιμή πάνω από την οποία θα ανάβουμε το LED pinMode(6, OUTPUT); // το πιν 6 θα είναι ή ΕΞΟΔΟΣ που θα συνδέσουμε το LED } void loop() { a=analogRead(A0); // διάβασε την αναλογική είσοδο A0 και βάλε την τιμή στην a  Serial.print("Τιμή: "); // απεικόνισε την τιμή της a στο σειριακό μόνιτορ του Arduino IDΕ Serial.print(a); Serial.print("\t"); b=a*5.0/1023; // υπολόγισε την τιμή της τάσης στα άκρα του φωτοαντιστάτη Serial.print("Τάση: "); Serial.print(b); // απεικόνισε την τιμή της τάσης Serial.print(" V \t"); c=b*10.0/(5-b); // υπολόγισε την αντίσταση του φωτοα...

esp32-bluetooth

  #include "BluetoothSerial.h" BluetoothSerial SerialBT; const int ledPin= 2 ; void setup () {   // put your setup code here, to run once: SerialBT . begin ( "ESP32-Bluetooth20250402Β" ) ; pinMode ( ledPin,OUTPUT ) ; } void loop () {   // put your main code here, to run repeatedly: if ( SerialBT . available ()) {   char c= SerialBT . read () ;   if ( c=='1' ){     digitalWrite ( ledPin, 1 ) ;   } else if ( c=='0' ) {     digitalWrite ( ledPin, 0 ) ;   } } }