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

Πώς να χρησιμοποιήσετε την αναλογική και ψηφιακή είσοδο/έξοδο του Arduino

 

Πώς να χρησιμοποιήσετε την αναλογική και ψηφιακή είσοδο/έξοδο του Arduino (I/O)


Το Arduino μπορεί να εισάγει και να εξάγει αναλογικά σήματα καθώς και ψηφιακά σήματα.

Το Arduino μπορεί να εισάγει και να εξάγει αναλογικά σήματα καθώς και ψηφιακά σήματα.

Ένα αναλογικό σήμα είναι αυτό που μπορεί να λάβει οποιονδήποτε αριθμό τιμών, σε αντίθεση με ένα ψηφιακό σήμα που έχει μόνο δύο τιμές: HIGH και LOW. Για τη μέτρηση της τιμής των αναλογικών σημάτων, το Arduino διαθέτει ενσωματωμένο μετατροπέα αναλογικού σε ψηφιακό (ADC). Το ADC μετατρέπει την αναλογική τάση σε ψηφιακή τιμή. Η συνάρτηση που χρησιμοποιείτε για να λάβετε την τιμή ενός αναλογικού σήματος είναι analogRead(pin). Αυτή η συνάρτηση μετατρέπει την τιμή της τάσης σε μια αναλογική ακίδα εισόδου και επιστρέφει μια ψηφιακή τιμή από 0 σε 1023, σε σχέση με την τιμή αναφοράς. Η προεπιλεγμένη τάση αναφοράς είναι 5 V (για πλακέτες Arduino 5 V) ή 3,3 V (για πλακέτες Arduino 3,3 V). Έχει μια παράμετρο που είναι ο αριθμός pin.

Το Arduino δεν διαθέτει ενσωματωμένο μετατροπέα ψηφιακού σε αναλογικό (DAC), αλλά μπορεί να διαμορφώσει πλάτος παλμού (PWM) ένα ψηφιακό σήμα για να επιτύχει ορισμένες από τις λειτουργίες μιας αναλογικής εξόδου. Η λειτουργία που χρησιμοποιείται για την έξοδο ενός σήματος PWM είναι η αναλογική εγγραφή (ακίδα, τιμή). pin είναι ο αριθμός pin που χρησιμοποιείται για την έξοδο PWM. Η τιμή είναι ένας αριθμός ανάλογος με τον κύκλο λειτουργίας του σήματος. Όταν τιμή = 0, το σήμα είναι πάντα σβηστό. Όταν τιμή = 255, το σήμα είναι πάντα αναμμένο. Στις περισσότερες πλακέτες Arduino, η λειτουργία PWM είναι διαθέσιμη στις ακίδες 3, 5, 6, 9, 10 και 11. Η συχνότητα του σήματος PWM στις περισσότερες ακίδες είναι περίπου 490 Hz. Στις πλακέτες Uno και σε παρόμοιες, οι ακίδες 5 και 6 έχουν συχνότητα περίπου 980 Hz. Οι ακίδες 3 και 11 στο Leonardo λειτουργούν επίσης στα 980 Hz.

Για να αντιστοιχίσετε μια αναλογική τιμή εισόδου, η οποία κυμαίνεται από 0 έως 1023 έως ένα σήμα εξόδου PWM, το οποίο κυμαίνεται από 0 - 255, μπορείτε να χρησιμοποιήσετε τη  λειτουργία χάρτη (τιμή, από Χαμηλή, από Υψηλή, προς Χαμηλή, προς Υψηλή) . Αυτή η συνάρτηση  έχει πέντε παραμέτρους, η μία είναι η μεταβλητή στην οποία αποθηκεύεται η αναλογική τιμή, ενώ οι άλλες είναι 0, 1023, 0 και 255 αντίστοιχα. 

Πείραμα 1: Έλεγχος της φωτεινότητας ενός LED

Σε αυτό το πείραμα, θα ελέγξουμε τη φωτεινότητα του LED με ένα σήμα PWM σε μια αναλογική ακίδα εξόδου

 

Απαιτείται υλικό

  • 1 x LED
  • 1 x αντίσταση
  • 1 x Arduino UNO R3
  • 1 x breadboard
  • 2 x καλώδια βραχυκυκλωτήρα

 

Διάγραμμα καλωδίωσης

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

 

Κώδικας

const int pwm = 2 ; 		//initializing pin 2 as ‘pwm’ variable
void setup()
{
     pinMode(pwm,OUTPUT) ; 	//Set pin 2 as output
}
void loop()
{
     analogWrite(pwm,25) ; 		 //setting pwm to 25 
     delay(50) ; 			//delay of 50 ms
     analogWrite(pwm,50) ; 	
     delay(50) ; 
     analogWrite(pwm,75) ; 
     delay(50) ; 
     analogWrite(pwm,100) ; 
     delay(50) ; 
     analogWrite(pwm,125) ; 
     delay(50) ; 
     analogWrite(pwm,150) ; 
     delay(50) ; 
     analogWrite(pwm,175) ; 
     delay(50) ;
     analogWrite(pwm,200) ; 
     delay(50) ; 
     analogWrite(pwm,225) ; 
     delay(50) ; 
     analogWrite(pwm,250) ; 
}


Πείραμα 2: Έλεγχος φωτεινότητας LED με χρήση ποτενσιόμετρου

Σε αυτό το πείραμα, θα ελέγξουμε τη φωτεινότητα του LED χρησιμοποιώντας ένα ποτενσιόμετρο. Θα κάνουμε τη συνάρτηση analogRead() για την ανάγνωση μιας τάσης και τη συνάρτηση analogWrite() για την έξοδο ενός σήματος PWM, του οποίου ο κύκλος λειτουργίας είναι ανάλογος της αναλογικής τάσης.

Απαιτούμενο υλικό


  • 1 x ποτενσιόμετρο
  • 1 x LED
  • 1 x αντίσταση
  • 1 x Arduino Uno R3
  • 1 x breadboard
  • 6 x καλώδια βραχυκυκλωτήρα

Διάγραμμα καλωδίωσης

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

Κώδικας

const int pwm = 2 ;	  //naming pin 2 as ‘pwm’ variable 
const int adc = 0 ; 	//naming pin 0 of analog input side as ‘adc’
void setup()
{
     pinMode(pwm,OUTPUT) ; 	//setting pin 2 as output
}
void loop()
{
     int adc  = analogRead(0) ; 	 //reading analog voltage and storing it in an integer 
     adc = map(adc, 0, 1023, 0, 255);  
/*
----------map συνάρτηση------------Η παραπάνω συνάρτηση μετατρέπει την έξοδο του  adc, που είναι 10 bit και δίνει τιμές μεταξύ 0 και 1023, σε τιμές μεταξύ 0 και 255  για την συνάρτηση  analogWrite που δέχεται μόνο τιμές στην περιοχή 0 μέχρι */
     analogWrite(pwm,adc) ; 
}

Σχόλια

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

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

  Βασικός έλεγχος σερβομηχανισμού Θα μάθουμε πώς να ελέγχετε έναν τυπικό σερβοκινητήρα, να πηγαίνει εμπρός και πίσω κατά 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 ) ;   } } }