Ένα ιστολόγιο για όσους αγαπούν τις ηλεκτρονικές κατασκευές...

Πέμπτη 26 Δεκεμβρίου 2019

ARDUINO Tutorial: Πως να διαβάσετε μια αναλογική τιμή


Το arduino uno διαθέτει 6 αναλογικές εισόδους 10bit (A0,A1,....A5) το arduino nano διαθέτει 8 αναλογικές είσόδους και το arduino Mega διαθέτει 16 αναλογικές εισόδους.





Πως λειτουργεί μία αναλογική είσοδος.

Κάθε μία αναλογική είσοδος έχει εσωτερικά ένα analog to digital converter 10bit. Δηλαδή η τάση που εμφανίζεται στην αναλογική είσοδο μετατρέπεται σε ένα ψηφιακό αριθμό. Επειδή σε οποιοδήποτε ποδαράκι του  arduino δεν μπορούμε να δώσουμε τάση μεγαλύτερη από 5V αυτό σημαίνει ότι το αναλογικό σήμα που μπορεί να διαβάσει η αναλογική είσοδος θα είναι από 0 έως 5V. Αν υπερβεί αυτή την τάση θα κάψουμε τον μικροελεγκτή. Επομένως θέλει προσοχή και θα πρέπει να λάβουμε τα μέτρα μας ώστε να μην επιτραπεί στην είσοδο να πάρει τιμές μεγαλύτερες από 5V.
Τι συμβαίνει αν θέλουμε να εξετάσουμες αναλογικές τιμές μεγαλύτερες από 5V; Απλά χρησιμοποιούμε ένα διαιρέτη τάσης ώστε να μετράμε ένα μέρος μόνο της αναλογικής τάσης πάντα κάτω από 5V.

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

Ακρίβεια μέτρησης.

Το 10bit που έχουν οι είσοδοι του arduino σημαίνει ότι δυαδική τιμή που μπορεί να πάρει ο ψηφιακός αριθμός είναι 10 ψηφίων, δηλαδή παίρνει τιμές έως 1024.(από 0 έως 1023)  Αυτό σημαίνει ότι μπορεί να διακρίνει 1023 βήματα του αναλογικού σήματος. Αυτό καθορίζει την ακρίβεια της μέτρησης δηλαδή το πιο μικρό ποσό τάσης που μπορεί να διακρίνει ο μετατροπέας. Αν έχουμε σήμα 0-5V θα έχουμε 5/1023 = 0,0048875855327468 δηλαδή το μικρότερο ποσό τάσης που μπορεί να διακρίνει ο μετατροπέας είναι περίπου 5mV.  Αν τώρα θέλουμε να μετρήσουμε μία τάση από 0-30V (μέσω του διαιρέτη τάσης) θα έχουμε 30/1023 = 0,0293255131964809 βλέπουμε δηλαδή ότι η μικρότερη τιμή που μπορεί να διακρίνει ο μετατροπέας είναι περίπου 30mV. Επομένως όσο μεγαλύτερη είναι η τιμή της τάσης του αναλογικού σήματος τόσο  μειώνεται η ακρίβεια.

Αν θέλουμε μεγαλύτερη ακρίβεια από 1024 θα πρέπει να χρησιμοποιήσουμε ένα εξωτερικό μετατροπέα με περισσότερα bit π.χ. 12bit αυτό σημαίνει 4096 βήματα οπότε έχουμε 30/4096 = 0,00732421875‬ δηλαδή περίπου 7mV ακρίβεια.

Παράδειγμα.

Θα διαβάσουμε την τιμή από ένα ποτενσιόμετρο. Έστω ότι θέλουμε να δώσουμε μία ρυθμιζόμενη από τον χρήστη τιμή σε μία μεταβλητή. Ο πιο εύκολος τρόπος είναι να συνδέσουμε την μεσαία λήψη από ένα ποτενσιόμετρο 10KΩ σε μία αναλογική είσοδο και τα άκρα του στην γείωση και τα 5V.  Γυρίζοντας το
ποτενσιόμετρο από την μία έως την άλλη άκρη θα έχουμε στην αναλογική είσοδο από 0 έως 5V δηλαδή μετά τον AD converter θα έχουμε τιμές από 0 έως 1023.
έστω user_var η μεταβλητή που θα ρυθμίζει ο χρήστης.
Διαβάζουμε την τιμή με την εντολή user_var = Analog.read(pin);
H τιμή της user_var θα είναι ανάλογα με την θέση του δρομέα του ποτενσιομέτρου μία τιμή ανάμεσα στο 0 και 1023. Επειδή η τιμή 1023 δεν είναι και πολύ βολική για τις πράξεις που θα χρειαστούμε ή γενικότερα αν θέλουμε η τιμή της μεταβλητής να βρίσκεται μέσα σε ένα διαφορετικό εύρος τιμών π.χ. 0-500 ή ένα εύρος που να μην ξεκινάει από το 0 π.χ. 20-50 μπορούμε να χρησιμοποιήσουμε την εντολή map.
Η τιμή που θα διαβάζει πάντα θα ανήκουν στο εύρος τιμών 0-1023 αλλά το arduino θα αναλάβει να προσαρμόσει τις τιμές αυτές στο εύρος που θέλουμε με την εντολή map.

user_var = map(Analog.read(pin), 0 , 1023, 20 , 50); Αυτό θα αντιστοιχίσει το 0 με την τιμή 20 και το 1023 με την τιμή 50 ενώ ανάλογες θα είναι και οι ενδιάμεσες τιμές.

Με την χρήση του ποτενσιομέτρου μπορούμε να κάνουμε προσομοίωση το διάβασμα μιας μεταβλητής από ένα αισθητήριο. Δηλαδή αντί να συνδέσουμε π.χ. ένα αισθητήριο θερμότητας συνδέουμε το ποτενσιόμετρο.  Έτσι μπορούμε να ελέγξουμε την κατασκευή μας αν ανταποκρίνεται στις προσδοκίες μας στις "διάφορες θερμοκρασίες" που διαβάζει από το ποτενσιόμετρο εύκολα χωρίς να περιμένουμε ένα αισθητήριο θερμοκρασίας να φτάσει την κατάλληλη θερμοκρασία. Στο τέλος αντικαθιστούμε το ποτενσιόμετρο με πραγματικό αισθητήριο.



4 σχόλια:

  1. Μια πληροφορια σε παρακαλω αν γνωριζεις. Ελυσα ενα παναρχαιο τροφοδοτικο για να αλλαξω πυκνωτες και καλωδιωσεις και ατυχως το ενδεικτικο λαμπακι ΝΕΟΝ με αφησε ξεκρεμαστο. Εχω καμμια δεκαρια ενδεικτικα αλλου τυπου τα οποια δεν τα εχω χρησιμοποιησει ποτε και ηρθε η ωρα τους. Κανω να βεβαιωθω οτι ειναι για 230 βολτ, και απο τη μια πλευρα αναγραφει 220 βολτ και απο την αλλη 30 βολτ. Πλαστικο ειναι ολο και εχει μονο αυτες τις δυο ακιδες. Εμεινα χαζος, κοιταξα και τα αλλα τα ιδια αναγραφουν. Δεν εχουν καποιο αλλο μεταλλικο ελασματακι και δεν εχουν σπειρωμα μπαινουν σφηνωτα. Γνωριζεις κατι παραπανω;

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Συνήθως έχουν μέσα μια αντίσταση και συνδέονται στα 230V χωρίς πρόβλημα. Για την διπλή αναγραφή βολτ δεν ξέρω κάτι να σου πω. Πάντως μπορείς να βάλεις οτιδήποτε ενδεικτικό λαμπάκι θέλεις, ακόμη και LED. Δεν είναι απαραίτητο να το τροφοδοτήσεις από τα 230V, μπορείς να το δώσεις τάση από το δευτερεύον του μετασχηματιστή με μια αντίσταση.

      Διαγραφή
  2. Σε ευχαριστω για την αμεσοτητα. Εχει μια αντισταση μεσα αλλα δεν πειραματιζομαι τωρα θα το αφησω για μετεπειτα, τοποθεστησα ενα αλλο λαμπακι Νεον που βρηκα. Λεντακια δεν βαζω γιατι βγαζουν θορυβο και τα τροφοδοτικα μου τις περισσοτερες φορες προοριζονται για ενισχυτακια. Ολα καλα, ευχαριστω και παλι.

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

    ΑπάντησηΔιαγραφή

Count down timer - χρονικό αντίστροφης μέτρησης

Μια απλή κατασκευή χρονομέτρου με αντίστροφη μέτρηση. Μπορεί να μετρήσει μέχρι 100 λεπτά με βήμα του ενός δευτερολέπτου. Είναι ιδανικό για ...