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

ADC στο Arduino (Αναλογικές είσοδοι)

 

ADC στο Arduino

ADC στο Arduino

Εισαγωγή στο ADC

  • Όταν διασυνδέουμε αισθητήρες με τον μικροελεγκτή, η έξοδος του αισθητήρα πολλές φορές είναι αναλογικής φύσης. Αλλά ο μικροελεγκτής επεξεργάζεται ψηφιακά σήματα.
  • Ως εκ τούτου, χρησιμοποιούμε ADC μεταξύ του αισθητήρα και του μικροελεγκτή. Μετατρέπει ένα αναλογικό σήμα σε ψηφιακό και το δίνει στον μικροελεγκτή.
  • Υπάρχουν πολλές εφαρμογές του ADC όπως σε μια βιομετρική εφαρμογή, παρακολούθηση περιβάλλοντος, ανίχνευση διαρροής αερίου κ.λπ.

Το Arduino Uno διαθέτει 6 κανάλια ADC 0n-board που μπορούν να χρησιμοποιηθούν για την ανάγνωση αναλογικού σήματος στην περιοχή 0-5V. 
Διαθέτει ADC 10-bit που σημαίνει ότι θα δώσει ψηφιακή τιμή στην περιοχή από 0 – 1023 (2^10). Αυτό ονομάζεται ανάλυση που υποδεικνύει τον αριθμό των διακριτών τιμών που μπορεί να παράγει στο εύρος των αναλογικών τιμών.

Υπολογισμός τιμής ψηφιακής εξόδου

Ανάλυση ADC = Vref / ((2^n) - 1)

Ψηφιακή έξοδος = Vin / Ανάλυση

Οπου,

Vref - Η τάση αναφοράς είναι η μέγιστη τιμή που μπορεί να μετατρέψει το ADC.

Για να κρατήσουμε τα πράγματα απλά, ας θεωρήσουμε ότι το Vref είναι 5V,

           Για 0 Vin, ψηφιακή τιμή o/p = 0

           Για 5 Vin, ψηφιακή τιμή o/p = 1023 (10-bit)

           Για 2,5 Vin, ψηφιακή τιμή o/p = 512 (10-bit)

ADC Pins του Arduino Uno

Διάγραμμα pin ADC Arduino

Αναλογικές λειτουργίες για Arduino ADC

  • analogRead (pin)

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

pin- αριθμός αναλογικής ακίδας που θέλουμε να διαβάσουμε

returns- ψηφιακή τιμή 0 – 1023

e.g. analogRead(A0) //read analog value at A0 channel
  • analogReference (type)

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

 

Ας δούμε πώς να διαβάζετε τις αναλογικές τιμές χρησιμοποιώντας το Arduino

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

 

Διασύνδεση ποτενσιόμετρου με Arduino Uno

Διασύνδεση POT Arduino ADC
Συνδεδεμένο ποτενσιόμετρο Arduino ADC Channel

 

Κωδικός Arduino για ανάγνωση αναλογικής τιμής

int sensorPin = A0;  // input pin for the potentiometer
int digitalValue = 0;// variable to store the value coming from the sensor

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

void loop() {
  digitalValue = analogRead(sensorPin);// read the value from the analog channel
  Serial.print("digital value = ");
  Serial.println(digitalValue);        //print digital value on serial monitor
  delay(1000);
}

 

Έξοδος σε σειριακή οθόνη

εμφάνιση εξόδου ADC

 

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

Διαβάστε την Αναλογική τάση χρησιμοποιώντας το Arduino Uno

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

Aout = ψηφιακή τιμή * (Vref/2^n – 1)

π.χ. ψηφιακή τιμή = 512 και το ADC είναι 10-bit με 5V Vref. Όμως, θέλουμε να ξέρουμε ότι για ποια αναλογική τάση δίνει αντίστοιχη ψηφιακή τιμή. Τότε,

Aout = 512 * (5 V / 1023)

          = 2,5 V

 

Κώδικας ανάγνωσης αναλογικής τάσης χρησιμοποιώντας Arduino

int sensorPin = A0;   // select the input pin for the potentiometer
int digitalValue = 0;  // variable to store the value coming from the sensor
float analogVoltage = 0.00;

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

void loop() {
  digitalValue = analogRead(sensorPin);// read the value from the analog channel
  Serial.print("digital value = ");
  Serial.print(digitalValue);        //print digital value on serial monitor
  //convert digital value to analog voltage
  analogVoltage = (digitalValue * 5.00)/1023.00;
  Serial.print("  analog voltage = ");
  Serial.println(analogVoltage);
  delay(1000);
}

 

Έξοδος σε σειριακό παράθυρο

οθόνη αναλογικής τάσης εισόδου


Σχόλια

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

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. Λε...