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

Πώς να χρησιμοποιήσετε την αναλογική και ψηφιακή είσοδο/έξοδο του 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) ; 
}

Σχόλια

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

Tmp36GZ θερμόμετρο με LCD οθόνη

 Tmp36GZ με LCD οθόνη // Define to which pin of the Arduino the output of the TMP36 is connected: #include <LiquidCrystal_I2C.h> // Look for LiquidCrystal I2C library by Marco Schwartz LiquidCrystal_I2C lcd ( 0x 27 , 16 , 2 ) ;  // set the LCD address to 0x3F for a 16 chars and 2 line display #define sensorPin A0 void setup () {   // Begin serial communication at a baud rate of 9600:   Serial . begin ( 9600 ) ;   lcd . init () ;   lcd . clear () ;           lcd . backlight () ;      // Make sure backlight is on     // Print a message on both lines of the LCD.   lcd . setCursor ( 2 , 0 ) ;   //Set cursor to character 2 on line 0   lcd . print ( "Hello world!" ) ;     lcd . setCursor ( 2 , 1 ) ;   //Move cursor to character 2 on line 1   lcd . print ( "LCD Tutorial" ) ; } void loop () {   // Get a reading from the temperature sensor:   int reading ...

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

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

Αντιστάσεις pull up, pull down

  Αντιστάσεις pull up (Pull up resistors) Οι αντιστάσεις pull up  είναι πολύ συνηθισμένες όταν χρησιμοποιούνται μικροελεγκτές (MCU) ή οποιαδήποτε συσκευή ψηφιακής λογικής. Θα εξηγήσουμε πότε και πού να χρησιμοποιήσετε αντιστάσεις pull up και, στη συνέχεια, θα κάνουμε έναν απλό υπολογισμό για να δείξουμε γιατί είναι σημαντικά τα pull-ups. Τι είναι μια αντίσταση  Pull up Ας υποθέσουμε ότι έχετε ένα MCU με ένα pin διαμορφωμένο ως είσοδο. Εάν δεν υπάρχει τίποτα συνδεδεμένο με τον ακροδέκτη και το πρόγραμμά σας διαβάζει την κατάσταση του ακροδέκτη, θα είναι ψηλά (τραβηγμένο στο VCC) ή χαμηλό (τραβηγμένο στη γείωση);  Αυτό το φαινόμενο αναφέρεται ως  αιωρούμενο  (floating). Για να αποφευχθεί αυτή η άγνωστη κατάσταση, μια αντίσταση pull-up ή pull-down θα διασφαλίσει ότι η ακίδα βρίσκεται είτε σε υψηλή είτε σε χαμηλή κατάσταση, ενώ χρησιμοποιεί επίσης χαμηλή ποσότητα ρεύματος. Για απλότητα, θα εστιάσουμε στα pull-ups καθώς είναι πιο συνηθισμένα από τα pull-down. Λε...