Πίνακας περιεχομένων:

Arduino Precise & Accurate Volt Meter (0-90V DC): 3 βήματα
Arduino Precise & Accurate Volt Meter (0-90V DC): 3 βήματα

Βίντεο: Arduino Precise & Accurate Volt Meter (0-90V DC): 3 βήματα

Βίντεο: Arduino Precise & Accurate Volt Meter (0-90V DC): 3 βήματα
Βίντεο: Amazing arduino project 2024, Ιούλιος
Anonim

Σε αυτό το διδακτικό, έχω δημιουργήσει ένα βολτόμετρο για τη μέτρηση υψηλών τάσεων DC (0-90v) με σχετική ακρίβεια και ακρίβεια χρησιμοποιώντας ένα Arduino Nano.

Οι μετρήσεις δοκιμής που έκανα ήταν αρκετά ακριβείς, κυρίως εντός 0,3v της πραγματικής τάσης που μετρήθηκε με ένα τυπικό βολτόμετρο (χρησιμοποίησα Astro AI DM6000AR). Αυτό είναι αρκετά κοντά για την προβλεπόμενη χρήση της συσκευής.

Για να αρχειοθετήσω αυτό χρησιμοποίησα μια αναφορά τάσης (4.096v) και διαχωριστή τάσης.

Από την πλευρά του κώδικα, χρησιμοποίησα, φυσικά, την επιλογή "εξωτερική αναφορά" για το Arduino Nano και το παράδειγμα "Smoothing" στα μαθήματα Arduino.

Προμήθειες

1 x Arduino Nano - Σύνδεσμος

1 x Oled Display (SSD 1306) - Σύνδεσμος

1 x 1/4W 1% αντιστάσεις - 1k ohm - σύνδεσμος

Αντιστάσεις 1 x 1/4W 1% - 220k ohm - Σύνδεσμος

Αντιστάσεις 1 x 1/4W 1% - 10k ohm - Σύνδεσμος

1 x 4.096v LM4040DIZ -4.1 Αναφορά Τάσης - Σύνδεσμος

Breadboard και σύρματα - Σύνδεσμος

Astro AI DM6000AR - Σύνδεσμος

USB Power Bank - Σύνδεσμος

Μπαταρίες 9V - Σύνδεσμος

Το CanadianWinters συμμετέχει στο πρόγραμμα Amazon Services LLC Associates Program, ένα πρόγραμμα διαφήμισης θυγατρικών που έχει σχεδιαστεί για να παρέχει μέσα στους ιστότοπους να κερδίζουν τέλη συνδέοντας το Amazon.com και συνδεδεμένους ιστότοπους. Χρησιμοποιώντας αυτούς τους συνδέσμους, ως Amazon Associate κερδίζω από κατάλληλες αγορές, ακόμη και αν αγοράζετε κάτι άλλο-και δεν θα σας κοστίσει τίποτα.

Βήμα 1: Τα Σχήματα

Τα Σχήματα
Τα Σχήματα
Τα Σχήματα
Τα Σχήματα

Συνδέσα όλα τα μέρη σύμφωνα με τα παραπάνω σχήματα. Συγκεκριμένα επέλεξα την αναφορά τάσης 4.096 για να μείνω όσο το δυνατόν πιο κοντά στο σήμα των 5v για να αποφύγω την απώλεια ανάλυσης.

Ακολουθώντας το φύλλο δεδομένων, επέλεξα μια αντίσταση 1K ohm για την αναφορά τάσης, παρόλο που θα μπορούσε να χρησιμοποιηθεί διαφορετική τιμή. Η τάση για την αναφορά παρέχεται από τον πείρο Nano 5v.

Η ιδέα του κυκλώματος είναι ότι η τάση DC που θα μετρηθεί περνάει από μια αντίσταση τάσης. Η κλιμακούμενη τάση και μετά μπαίνει στον αναλογικό πείρο του Arduino για δειγματοληψία, εξομάλυνση, εκ νέου κλίμακα και εμφάνιση στην οθόνη OLed.

Προσπάθησα να κρατήσω τα πράγματα απλά:)

Βήμα 2: Υπολογισμοί κώδικα και αντίστασης

Οι τιμές των αντιστάσεων επιλέχθηκαν όπως είναι σκόπιμο (αν δεν κάνω λάθος αυτό είναι στο φύλλο δεδομένων Arduino/Atmega) για να διατηρηθεί η σύνθετη αντίσταση κάτω από 10k ohm.

Για να απλοποιήσω τα πράγματα, έφτιαξα ένα υπολογιστικό φύλλο που αυτοματοποιεί τους υπολογισμούς σε περίπτωση που θέλετε να χρησιμοποιήσετε διαφορετικές τιμές αντίστασης: Σύνδεσμος προς το Φύλλο Google

Εδώ είναι ο κώδικας που χρησιμοποίησα για αυτό το έργο:

#περιλαμβάνω

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (περιστροφή, [επαναφορά]) τάση πλωτήρα = 0; // χρησιμοποιείται για την αποθήκευση της τιμής float Radjust = 0.043459459; // Συντελεστής διαίρεσης τάσης (R2 /R1+R2) float vbat = 0; // τελική τάση μετά από υπολογισμούς- τάση του πλωτήρα μπαταρίας Vref = 4.113; // Αναφορά τάσης - μετρημένη πραγματική τιμή. Ονομαστική τιμή 4.096v const int numReadings = 50; // αριθμός δειγμάτων ανάγνωσης - αύξηση για περισσότερη εξομάλυνση. Μείωση για ταχύτερη ανάγνωση. int αναγνώσεις [numReadings]; // οι ενδείξεις από την αναλογική είσοδο int readIndex = 0; // το ευρετήριο της τρέχουσας ανάγνωσης ανυπόγραφο μακρύ σύνολο = 0; // ο συνολικός τρέχων μέσος όρος int = 0; // μεταβλητές για ανανέωση της οθόνης χωρίς χρήση καθυστέρησης χωρίς υπογραφή πολύ προηγούμενοMillis = 0; // θα αποθηκευτεί την τελευταία φορά που η οθόνη ενημερώθηκε // οι σταθερές δεν θα αλλάξουν: const μεγάλο διάστημα = 50; // διάστημα στο οποίο θα ανανεωθεί η οθόνη (χιλιοστά του δευτερολέπτου) void setup (void) {analogReference (EXTERNAL); // χρησιμοποιήστε το AREF για τάση αναφοράς 4.096. Η πραγματική τάση αναφοράς μου είναι 4.113v u8g2.begin (); για (int thisReading = 0; thisReading = numReadings) {// … τυλίξτε μέχρι την αρχή: readIndex = 0; } // υπολογίστε τον μέσο όρο: μέσος όρος = (σύνολο / αριθμικές αναγνώσεις); τάση = μέσος όρος * (Vref / 1023.0); //4.113 είναι το Vref vbat = τάση/Radjust; // Ρύθμιση της καθυστέρησης για την ανανέωση της οθόνης χρησιμοποιώντας το Millis if (currentMillis - previousMillis> = διάστημα) {// αποθήκευση της τελευταίας φοράς που ενημερώθηκε η οθόνη previousMillis = currentMillis; u8g2.clearBuffer (); // εκκαθάριση της εσωτερικής μνήμης // Ένδειξη τάσης συσκευασίας u8g2.setFont (u8g2_font_fub20_tr); // γραμματοσειρά 20px u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // γραμματοσειρά 10 px u8g2.setCursor (76, 20); u8g2.print ("Volts"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters"); u8g2.setCursor (1, 60); u8g2.print ("Precise Voltage"); } u8g2.sendBuffer (); // μεταφορά εσωτερικής μνήμης στην καθυστέρηση οθόνης (1). }

Λάβετε υπόψη ότι είμαι λίγο σκουριασμένος με την κωδικοποίηση Arduino, οπότε αν βρείτε κάποιο λάθος ή τρόπο βελτίωσης του κώδικα, είμαι ανοιχτός σε προτάσεις:)

Βήμα 3: Ας το δοκιμάσουμε

Ας το δοκιμάσουμε!
Ας το δοκιμάσουμε!
Ας το δοκιμάσουμε!
Ας το δοκιμάσουμε!
Ας το δοκιμάσουμε!
Ας το δοκιμάσουμε!

Για να δοκιμάσω αυτό το βολτόμετρο χρησιμοποίησα μπαταρίες 8x 9v που πήρα σε τοπικό κατάστημα. Σκοπεύω να χρησιμοποιήσω αυτό το βολτόμετρο για να μετρήσω την τάση στις μπαταρίες των ηλεκτρικών ποδηλάτων μου (έχουν τάσεις που κυμαίνονται από 24-60v με τις περιστασιακές 72v).

Μόλις τα ηλεκτρονικά συσκευαστούν σε ένα pcb και ένα μικρό κουτί, αυτό θα κάνει ένα ωραίο και φορητό μετρητή μπαταρίας. Τα γραφικά και οι γραμματοσειρές στο OLED θα μπορούσαν να προσαρμοστούν ώστε να ταιριάζουν στις ανάγκες σας (π.χ. μεγαλύτερη γραμματοσειρά για εύκολη ανάγνωση).

Ο στόχος μου ήταν να έχω μια ένδειξη τάσης στον μετρητή Oled/Arduino όχι πολύ μακριά από τον ψηφιακό μου πολύμετρο. Στόχος μου ήταν το +/- 0, 3v max delta. Όπως μπορείτε να δείτε από το βίντεο, μπόρεσα να το αρχειοθετήσω, εκτός από το επάνω άκρο των μετρήσεων.

Ελπίζω να σας άρεσε αυτό το Instructable και πείτε μου τις σκέψεις σας!

Συνιστάται: