Ακριβές βολτόμετρο στο arduino. Ψηφιακό βολτόμετρο σε Arduino με σύνδεση με υπολογιστή μέσω σειριακής θύρας

20.07.2023

Υπάρχουν φορές που θέλετε να ελέγξετε την τάση ή κάποιο σημείο σε ένα κύκλωμα, αλλά δεν έχετε βολτόμετρο ή πολύμετρο στο χέρι; Τρέξτε να αγοράσετε; Είναι μακρύ και ακριβό. Πριν το κάνετε αυτό, τι θα λέγατε να φτιάξετε μόνοι σας ένα βολτόμετρο; Μάλιστα, με απλά υλικά μπορείτε να το φτιάξετε μόνοι σας.

Βήμα 1: Προετοιμάστε τα εξαρτήματα

  • Στο μάθημα χρησιμοποιήσαμε μια πλακέτα συμβατή με το Arduino - SunFounder Uno / Mars (http://bit.ly/2tkaMba)
  • Καλώδιο δεδομένων USB
  • 2 ποτενσιόμετρα (50k)
  • LCD1602 - http://bit.ly/2ubNEfi
  • Πίνακας ανάπτυξης - http://bit.ly/2slvfrB
  • Πολλαπλοί άλτες

Πριν συνδεθείτε, ας καταλάβουμε πρώτα πώς λειτουργεί.

Χρησιμοποιήστε την πλακέτα SunFounder Uno για το κύριο μέρος της επεξεργασίας δεδομένων του βολτόμετρου, LCD1602 ως οθόνη, ένα ποτενσιόμετρο για να ρυθμίσετε την αντίθεση LCD και μια άλλη για να διαιρέσετε την τάση.

Όταν περιστρέφετε το ποτενσιόμετρο που είναι συνδεδεμένο στην πλακέτα Uno, η αντίσταση του ποτενσιόμετρου αλλάζει, μεταβάλλοντας έτσι την τάση σε αυτό. Το σήμα τάσης θα σταλεί στην πλακέτα Uno μέσω του ακροδέκτη A0 και το Uno θα μετατρέψει το λαμβανόμενο αναλογικό σήμα σε ψηφιακή μορφή και θα καταγράψει στην οθόνη LCD. Με αυτόν τον τρόπο μπορείτε να δείτε την τιμή της τάσης στην αντίσταση χωρητικότητας ρεύματος.

Το LCD1602 έχει δύο τρόπους λειτουργίας: 4-bit και 8-bit. Όταν το MCU IO είναι ανεπαρκές, μπορείτε να επιλέξετε λειτουργία 4-bit, η οποία χρησιμοποιεί μόνο τις ακίδες D4~D7.

Ακολουθήστε τον πίνακα για να τα συνδέσετε.

Βήμα 4: Συνδέστε το ποτενσιόμετρο στην οθόνη LCD1602

Συνδέστε τη μεσαία ακίδα του ποτενσιόμετρου στην ακίδα Vo στην οθόνη LCD1602 και οποιαδήποτε άλλη ακίδα στο GND.

Συνδέστε τη μεσαία ακίδα του ποτενσιόμετρου στην ακίδα A0 από το SunFounder Uno και μια από τις άλλες στα 5V ενώ την άλλη στο GND.

Βήμα 6: Ανεβάστε τον κωδικό

Αυτός ο κωδικός:

#include /************************************************ ******* *****/ const int analogIn = A0;//ποτενσιόμετρο προσάρτηση σε A0 LiquidCrystal lcd(4, 6, 10, 11, 12, 13);//lcd(RS,E,D4 ,D5,D6.D7) float val = 0;// ορίστε τη μεταβλητή ως value=0 /**************************** ******* *****************/ void setup() ( Serial.begin(9600);//Initialize the serial lcd.begin(16, 2) ;//ορίστε τη θέση των χαρακτήρων στην οθόνη LCD ως Line 2, Column 16 lcd.print("Voltage Value:");//print "Voltage Value:" ) /*********** ******* **************************************/ void loop() ( val = analogRead (A0);//Διαβάστε την τιμή του ποτενσιόμετρου σε val val = val/1024*5.0;// Μετατρέψτε τα δεδομένα στην αντίστοιχη τιμή τάσης με μαθηματικό τρόπο Serial.print(val);//Print the number of val στη σειριακή οθόνη Serial.print ("V"); εδώ οι χαρακτήρες πρέπει να εμφανίζονται lcd.print(val);//Εκτυπώστε τον αριθμό των val στην οθόνη LCD lcd.print("V");//Στη συνέχεια εκτυπώστε τη μονάδα ως V, συντομογραφία για την τάση στην καθυστέρηση LCD( 200); //Περιμένετε 200 ms)

Περιστρέψτε το ποτενσιόμετρο για να ελέγξετε την τάση στην LCD1602 σε πραγματικό χρόνο.

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

Πάρτε δύο μπαταρίες για να μετρήσετε την τάση τους: 1,5 V και 3,7 V. Αποσυνδέστε τη σύνδεση του δεύτερου ποτενσιόμετρου στον ακροδέκτη A0 και GND, πράγμα που σημαίνει ότι αφαιρείτε το ποτενσιόμετρο από το κύκλωμα. Σφίξτε το άκρο του σύρματος A0 στην άνοδο της μπαταρίας και το κύκλωμα GND στην κάθοδο. ΜΗΝ τα συνδέετε ξανά στην πρίζα διαφορετικά θα τα πάρετε βραχυκύκλωμαστην μπαταρία. Μια τιμή 0V είναι μια αντίστροφη σύνδεση.

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

ΥΓ:Εάν αντιμετωπίζετε προβλήματα με την οθόνη στην οθόνη σας - δείτε αυτές τις Συχνές ερωτήσεις για οθόνες LCD - http://wiki.sunfounder.cc/index.php?title=LCD1602/I2C_LCD1602_FAQ.

Ιδέα

Ιδέα συσκευές μέτρησης τάσης, ρεύματος, χωρητικότητας, εκφόρτισης και ίσως φόρτισης προέκυψαν εδώ και πολύ καιρό και όχι μόνο για μένα. Μπορείτε να βρείτε πολλά παιχνίδια που ονομάζονται USB Tester (Doctor) για δοκιμή διάφορες συσκευέςαπό USB. Ενδιαφέρομαι για μια κάπως πιο καθολική συσκευή, ανεξάρτητη από τη διεπαφή, αλλά απλά σχεδιασμένη για συγκεκριμένες τάσεις και ρεύματα. Για παράδειγμα, 0 - 20,00v, 0 - 5,00a, 0 - 99,99Ah. Όσο για τις λειτουργίες, το βλέπω έτσι

  • Εμφανίζει την τάση και το ρεύμα ρεύματος, δηλαδή ένα μετρητή βολτ-αμπέρ. Κατ 'αρχήν, μπορείτε να αντικατοπτρίσετε αμέσως τη δύναμη.
  • Μέτρηση και εμφάνιση συσσωρευμένης χωρητικότητας. Σε αμπέρ και πιθανότατα σε βατώρες.
  • Εμφάνιση χρόνου διεργασίας
  • Και, πιθανότατα, ρυθμιζόμενα κατώτερα και ανώτερα όρια αποκοπής τάσης (όρια εκφόρτισης και φόρτισης)

Ανάπτυξη

Για την υλοποίηση υπολογισμών και μετρήσεων χρειαζόμαστε έναν ελεγκτή. Θυμήθηκα αυτή την ιδέα ως μέρος της γνωριμίας μου με το Arduino, οπότε το χειριστήριο θα είναι ένα απλό δημοφιλές Atmega328 και θα προγραμματίζεται στο περιβάλλον Arduino. Από μηχανικής άποψης, η επιλογή μάλλον δεν είναι η καλύτερη - ο ελεγκτής είναι λίγο χοντρός για την εργασία και το ADC του δεν μπορεί να ονομαστεί μέτρηση, αλλά... θα προσπαθήσουμε.

  • Δεν θα κολλήσουμε πολύ σε αυτό το έργο. Ας πάρουμε ως βάση έτοιμη ενότητα Arduino Pro Mini, ευτυχώς οι Κινέζοι είναι έτοιμοι να τα προμηθεύσουν για 1,5 $ λιανικής.
  • Η συσκευή προβολής θα είναι οθόνη 1602 - άλλο 1,5 $. Έχω μια επιλογή με μια μονάδα διασύνδεσης I2C, αλλά σε αυτό το έργο δεν χρειάζεται πραγματικά (0,7 $).
  • Για ανάπτυξη χρειαζόμαστε ένα breadboard. Στην περίπτωσή μου, αυτό είναι ένα μικρό BreadBoard για $1.
  • Φυσικά, θα χρειαστείτε καλώδια και μια σειρά από αντιστάσεις διαφορετικών τιμών. Για μια οθόνη 1602 χωρίς I2C, πρέπει επίσης να επιλέξετε την αντίθεση - αυτό γίνεται μεταβλητή αντίστασηστα 2 - 20 kOhm.
  • Για να εφαρμόσετε ένα αμπερόμετρο θα χρειαστείτε μια διακλάδωση. Σε μια πρώτη προσέγγιση, θα μπορούσε να είναι μια αντίσταση 0,1 Ohm, 5 W.
  • Για να εφαρμόσετε την αυτόματη απενεργοποίηση, θα χρειαστείτε ένα ρελέ με επαφές σχεδιασμένες για το μέγιστο ρεύμα της συσκευής και τάση ίση με την τάση τροφοδοσίας. Για να ελέγξετε το ρελέ χρειάζεστε ένα τρανζίστορ NPN και μια προστατευτική δίοδο.
  • Η συσκευή θα τροφοδοτείται από εξωτερική πηγή ρεύματος, προφανώς τουλάχιστον 5 V. Εάν η παροχή ρεύματος ποικίλλει πολύ, τότε θα χρειαστεί επίσης ένας ενσωματωμένος σταθεροποιητής τύπου 7805 - θα καθορίσει την τάση του ρελέ.
  • Σε περίπτωση Το Arduino Pro Mini απαιτεί μετατροπέα USB-TTL για τη μεταφόρτωση του υλικολογισμικού.
  • Για τη ρύθμιση θα χρειαστείτε ένα πολύμετρο.

Βολτόμετρο

Υλοποιώ ένα απλό βολτόμετρο με ένα εύρος περίπου 0 - 20V. Αυτή η σημείωση είναι σημαντική, επειδή το ADC του ελεγκτή μας έχει χωρητικότητα 10 bit (1024 διακριτές τιμές), επομένως το σφάλμα θα είναι τουλάχιστον 0,02 V (20 / 1024). Για την υλοποίηση του υλικού, χρειαζόμαστε μια αναλογική είσοδο του ελεγκτή, ένα διαχωριστικό κατασκευασμένο από ένα ζεύγος αντιστάσεων και κάποιο είδος εξόδου (μια οθόνη στην τελική έκδοση, μια σειριακή θύρα μπορεί να χρησιμοποιηθεί για εντοπισμό σφαλμάτων).

Η αρχή της μέτρησης ADC είναι η σύγκριση της τάσης στην αναλογική είσοδο με την αναφορά VRef. Η έξοδος ADC είναι πάντα ακέραιος - 0 αντιστοιχεί σε 0V, 1023 αντιστοιχεί σε τάση VRef. Η μέτρηση πραγματοποιείται λαμβάνοντας μια σειρά διαδοχικών ενδείξεων τάσης και υπολογίζοντας τον μέσο όρο κατά την περίοδο μεταξύ των ενημερώσεων της τιμής στην οθόνη. Η επιλογή της τάσης αναφοράς είναι σημαντική επειδή είναι προεπιλεγμένη στην τάση τροφοδοσίας, η οποία μπορεί να μην είναι σταθερή. Αυτό δεν μας ταιριάζει καθόλου - θα πάρουμε ως βάση μια σταθερή εσωτερική πηγή αναφοράς με τάση 1,1 V, αρχικοποιώντας την καλώντας analogReference(INTERNAL). Στη συνέχεια θα βαθμονομήσουμε την τιμή του χρησιμοποιώντας τις ενδείξεις του πολύμετρου.

Το διάγραμμα στα αριστερά δείχνει μια παραλλαγή με άμεσο έλεγχο της οθόνης (απλά ελέγχεται - δείτε το τυπικό σκίτσο LiquidCrystal\HelloWorld). Στα δεξιά είναι η επιλογή I2C, την οποία θα χρησιμοποιήσω περαιτέρω. Το I2C σάς επιτρέπει να εξοικονομείτε καλώδια (από τα οποία υπάρχουν 10 στη συνηθισμένη έκδοση, χωρίς να υπολογίζεται ο οπίσθιος φωτισμός). Αλλά αυτό απαιτεί μια πρόσθετη ενότητα και πιο περίπλοκη προετοιμασία. Σε κάθε περίπτωση, πρέπει πρώτα να ελεγχθεί η εμφάνιση των χαρακτήρων στη μονάδα και να ρυθμιστεί η αντίθεση - για να γίνει αυτό, πρέπει απλώς να εμφανίσετε οποιοδήποτε κείμενο μετά την προετοιμασία. Η αντίθεση ρυθμίζεται από την αντίσταση R1 ή μια παρόμοια αντίσταση της μονάδας I2C.

Η είσοδος είναι ένας διαιρέτης 1:19, ο οποίος επιτρέπει, σε Vref = 1,1, να λάβουμε μέγιστη τάση περίπου 20 V (συνήθως τοποθετείται ένας πυκνωτής + δίοδος zener παράλληλα στην είσοδο για προστασία, αλλά αυτό δεν είναι σημαντικό για εμάς προς το παρόν ). Οι αντιστάσεις έχουν εξάπλωση, όπως και η αναφορά Vref του ελεγκτή, οπότε μετά τη συναρμολόγηση πρέπει να μετρήσουμε την τάση (τουλάχιστον την τάση τροφοδοσίας) παράλληλα με τη συσκευή μας και ένα πολύμετρο αναφοράς και να επιλέξουμε Vref στον κωδικό μέχρι να ταιριάζουν οι ενδείξεις . Αξίζει επίσης να σημειωθεί ότι κάθε ADC έχει μηδενική τάση μετατόπισης (η οποία χαλάει τις μετρήσεις στην αρχή του εύρους), αλλά δεν θα ασχοληθούμε προς το παρόν.

Θα είναι επίσης σημαντικό να διαχωριστεί η τροφοδοσία και το έδαφος μέτρησης. Το ADC μας έχει ανάλυση ελαφρώς χειρότερη από 1 mV, κάτι που μπορεί να δημιουργήσει προβλήματα εάν η καλωδίωση είναι λανθασμένη, ειδικά σε μια πλακέτα ψησίματος. Επειδή η διάταξη της πλακέτας της μονάδας έχει ήδη γίνει και δεν έχουμε παρά να επιλέξουμε τις ακίδες. Η μονάδα έχει πολλές ακίδες «γείωσης», επομένως πρέπει να βεβαιωθούμε ότι η ισχύς εισέρχεται στη μονάδα μέσω της μίας «γείωσης» και οι μετρήσεις μέσω της άλλης. Στην πραγματικότητα, για να κάνω αλλαγές, χρησιμοποιώ πάντα τον πείρο γείωσης που βρίσκεται πιο κοντά στις αναλογικές εισόδους.

Για τον έλεγχο του I2C, χρησιμοποιείται μια έκδοση της βιβλιοθήκης LiquidCrystal_I2C - στην περίπτωσή μου, υποδεικνύεται το συγκεκριμένο pinout της μονάδας I2C (οι Κινέζοι παράγουν μονάδες με διαφορετικά χειριστήρια). Σημειώνω επίσης ότι το I2C στο Arduino απαιτεί τη χρήση ακίδων A4 και A5 - στην πλακέτα Pro Mini δεν βρίσκονται στην άκρη, κάτι που είναι άβολο για πρωτότυπο στο BreadBoard.

Πηγαίος κώδικας

#συμπεριλαμβάνω #συμπεριλαμβάνω // Απλό βολτόμετρο με οθόνη i2c 1602. V 16,11 // Ρυθμίσεις για την οθόνη i2c 1602 με μη τυπικό pinout #define LCD_I2C_ADDR 0x27 #define BACKLIGHT 3 #define LCD_EL 2 #define LCD_EL 2 #define LCD_RW 2 #define LCD_RW5 #define LCD_RW5 5 #define LCD_D6 6 #define LCD_D7 7 LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // Χρόνος ενημέρωσης ανάγνωσης, ms (200-2000) #define REFRESH_TIME 330 // Αναλογική είσοδος #define PIN_VOLT A0 // Εσωτερική τάση αναφοράς (επιλογή) const float VRef = 1,10; // Συντελεστής διαίρεσης αντίστασης εισόδου (Rh + Rl) / Rl. ΣΕ<-[ Rh ]--(analogInPin)--[ Rl ]--|GND const float VoltMult = (180.0 + 10.0) / 10.0; float InVolt, Volt; void setup() { analogReference(INTERNAL); // Инициализация дисплея lcd.begin (16, 2); lcd.setBacklightPin(BACKLIGHT, POSITIVE); lcd.setBacklight(HIGH); // включить подсветку lcd.clear(); // очистить дисплей lcd.print("Voltage"); } void loop() { unsigned long CalcStart = millis(); int ReadCnt = 0; InVolt = 0; // Чтение из порта с усреднением while ((millis() - CalcStart) < REFRESH_TIME) { InVolt += analogRead(PIN_VOLT); ReadCnt++; } InVolt = InVolt / ReadCnt; // Смещение 0 для конкретного ADC (подобрать или отключить) if (InVolt >0,2) InVolt += 3;

// Μετατροπή σε βολτ (Τιμή: 0..1023 -> (0..VRef) σε κλίμακα Mult) Volt = InVolt * VoltMult * VRef / 1023;


// Δεδομένα εξόδου lcd.setCursor (0, 1); Εφαρμογές AndroidΕφευρέτης 2.
Για να φτιάξουμε ένα βολτόμετρο bluetooth, πρέπει να γράψουμε δύο σχετικά ανεξάρτητα προγράμματα: ένα σκίτσο για το Arduino και μια εφαρμογή για το Android Ας ξεκινήσουμε με ένα σκίτσο.
Αρχικά, θα πρέπει να γνωρίζετε ότι υπάρχουν τρεις κύριες επιλογές για τη μέτρηση της τάσης χρησιμοποιώντας το Arduino, ανεξάρτητα από το πού πρέπει να εξάγετε τις πληροφορίες: στη θύρα com, σε μια οθόνη συνδεδεμένη στο Arduino ή σε ένα smartphone.
Πρώτη περίπτωση: μετρήσεις τάσης έως 5 βολτ. Εδώ, μία ή δύο γραμμές κώδικα είναι αρκετές και η τάση εφαρμόζεται απευθείας στον ακροδέκτη A0:
int value = analogRead(0);
τάση = (τιμή / 1023,0) * 5; // αληθές μόνο εάν Vcc = 5,0 βολτ
Δεύτερη περίπτωση: για τη μέτρηση τάσεων μεγαλύτερες από 5 βολτ, χρησιμοποιείται διαιρέτης τάσης. Το κύκλωμα είναι πολύ απλό, όπως και ο κώδικας.

Σκίτσο

int analogInput = A0;
float val = 0,0;
float τάση = 0,0;
float R1 = 100000,0; //Battery Vin-> 100K -> A0
float R2 = 10000,0; //Battery Gnd -> Arduino Gnd and Arduino Gnd -> 10K -> A0
τιμή int = 0;

Κενό setup() (
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

Void loop() (
value = analogRead(analogInput);
val = (τιμή * 4,7) / 1024,0;
τάση = val / (R2/(R1+R2));
Serial.println(τάση);
καθυστέρηση (500);
}


Arduino Uno
Μονάδα Bluetooth
Τρίτη περίπτωση. Όταν χρειάζεται να λάβετε πιο ακριβείς πληροφορίες σχετικά με την τάση, θα πρέπει να χρησιμοποιήσετε ως τάση αναφοράς όχι την τάση τροφοδοσίας, η οποία μπορεί να διαφέρει ελαφρώς όταν τροφοδοτείται από μπαταρία, για παράδειγμα, αλλά την τάση του εσωτερικού σταθεροποιητή Arduino 1,1 βολτ Το κύκλωμα είναι το ίδιο εδώ, αλλά ο κωδικός είναι λίγο μεγαλύτερος. Δεν θα αναλύσω λεπτομερώς αυτήν την επιλογή, καθώς έχει ήδη περιγραφεί καλά σε θεματικά άρθρα, αλλά η δεύτερη μέθοδος είναι αρκετά αρκετή για μένα, καθώς η τροφοδοσία μου είναι σταθερή, από τη θύρα USB του φορητού υπολογιστή.
Έτσι, τακτοποιήσαμε τη μέτρηση της τάσης, τώρα ας προχωρήσουμε στο δεύτερο μισό του έργου: τη δημιουργία μιας εφαρμογής Android. Θα δημιουργήσουμε την εφαρμογή απευθείας από το πρόγραμμα περιήγησης στο περιβάλλον οπτικής ανάπτυξης για εφαρμογές Android App Inventor 2. Μεταβείτε στον ιστότοπο appinventor.mit.edu/explore, συνδεθείτε χρησιμοποιώντας τον λογαριασμό σας Google, κάντε κλικ στο κουμπί δημιουργία, νέο έργο και από απλά σύροντας και ρίχνοντας στοιχεία θα δημιουργήσουμε κάτι σαν αυτό το σχέδιο:

Έκανα τα γραφικά πολύ απλά, αν κάποιος θέλει πιο ενδιαφέροντα γραφικά, να σας υπενθυμίσω ότι για αυτό πρέπει να χρησιμοποιήσετε αρχεία .png με διάφανο φόντο αντί για αρχεία .jpeg.
Τώρα μεταβείτε στην καρτέλα Blocks και δημιουργήστε τη λογική της εφαρμογής εκεί κάπως έτσι:


Εάν όλα πάνε καλά, μπορείτε να κάνετε κλικ στο κουμπί Δημιουργία και να αποθηκεύσετε το .apk στον υπολογιστή μου και, στη συνέχεια, να κατεβάσετε και να εγκαταστήσετε την εφαρμογή στο smartphone σας, αν και υπάρχουν άλλοι τρόποι για να ανεβάσετε την εφαρμογή. εδώ είναι πιο βολικό για οποιονδήποτε. Ως αποτέλεσμα, κατέληξα με αυτήν την εφαρμογή:


Κατανοώ ότι λίγοι άνθρωποι χρησιμοποιούν το περιβάλλον οπτικής ανάπτυξης App Inventor 2 για εφαρμογές Android στα έργα τους, οπότε μπορεί να προκύψουν πολλά ερωτήματα σχετικά με την εργασία σε αυτό. Για να απαντήσω σε ορισμένες από αυτές τις ερωτήσεις, έφτιαξα ένα λεπτομερές βίντεο σχετικά με το πώς να φτιάξετε μια τέτοια εφαρμογή "από την αρχή" (για να την δείτε, πρέπει να μεταβείτε στο YouTube):

P.S. Μια συλλογή με περισσότερα από 100 εκπαιδευτικά υλικά για το Arduino για αρχάριους και επαγγελματίες

Περιέγραψε πώς να συναρμολογήσετε ένα σπιτικό διπλό βολτόμετρο με βάση την πλατφόρμα Arduino UNOχρησιμοποιώντας την οθόνη LCD 1602A. Σε ορισμένες περιπτώσεις, είναι απαραίτητο να μετρήσετε δύο σταθερές τάσεις ταυτόχρονα και να τις συγκρίνετε. Αυτό μπορεί να απαιτείται, για παράδειγμα, κατά την επισκευή ή τη ρύθμιση ενός σταθεροποιητή τάσης DC για τη μέτρηση της τάσης στην είσοδο και την έξοδο του ή σε άλλες περιπτώσεις.

Σχηματικό διάγραμμα

Χρησιμοποιώντας έναν γενικό μικροελεγκτή Μονάδα ARDUINOΤο UNO και μια οθόνη LCD δύο γραμμών τύπου 1602A (με βάση τον ελεγκτή HD44780) μπορούν εύκολα να φτιάξουν μια τέτοια συσκευή. Σε μια γραμμή θα δείχνει την τάση U1, στην άλλη - την τάση U2.

Ρύζι. 1. Σχηματικό διάγραμμαδιπλό βολτόμετρο με οθόνη 1602A στο Arduino UNO.

Αλλά, πρώτα απ 'όλα, θέλω να σας υπενθυμίσω ότι το ARDUINO UNO είναι μια σχετικά φθηνή έτοιμη ενότητα - μια μικρή PCB, πάνω στο οποίο βρίσκεται ο μικροελεγκτής ATMEGA328, καθώς και όλη η «πλεξούδα» του που είναι απαραίτητη για τη λειτουργία του, συμπεριλαμβανομένου ενός προγραμματιστή USB και τροφοδοτικού.

Για όσους δεν είναι εξοικειωμένοι με το ARDUINO UNO, σας συμβουλεύω να διαβάσετε πρώτα τα άρθρα L.1 και L.2. Το κύκλωμα ενός διπλού βολτόμετρου φαίνεται στο Σχ. 1. Έχει σχεδιαστεί για να μετράει δύο τάσεις από 0 έως 100V (πρακτικά έως 90V).

Όπως φαίνεται από το διάγραμμα, στις ψηφιακές θύρες D2-D7 Πίνακες ARDUINOΤο UNO είναι συνδεδεμένο στη μονάδα οθόνης υγρών κρυστάλλων H1 τύπου 1602A. Η ένδειξη LCD τροφοδοτείται από έναν σταθεροποιητή τάσης 5V που βρίσκεται στην πλακέτα σταθεροποιητή τάσης 5V.

Οι μετρούμενες τάσεις παρέχονται σε δύο αναλογικές εισόδους Α1 και Α2. Υπάρχουν έξι αναλογικές είσοδοι συνολικά, A0-A5, μπορείτε να επιλέξετε οποιαδήποτε δύο από αυτές. Σε αυτήν την περίπτωση επιλέγονται τα Α1 και Α2. Η τάση στις αναλογικές θύρες μπορεί να είναι μόνο θετική και μόνο στην περιοχή από το μηδέν έως την τάση τροφοδοσίας του μικροελεγκτή, δηλαδή, ονομαστικά, έως και 5 V.

Η έξοδος της αναλογικής θύρας μετατρέπεται σε ψηφιακή μορφή από το ADC του μικροελεγκτή. Για να λάβετε το αποτέλεσμα σε μονάδες βολτ, πρέπει να το πολλαπλασιάσετε με 5 (με την τάση αναφοράς, δηλαδή με την τάση τροφοδοσίας του μικροελεγκτή) και να διαιρέσετε με το 1024.

Για να μπορέσετε να μετρήσετε τάσεις μεγαλύτερες από 5 V, ή μάλλον, μεγαλύτερες από την τάση τροφοδοσίας του μικροελεγκτή, επειδή η πραγματική τάση στην έξοδο του σταθεροποιητή 5 volt στην πλακέτα ARDUINO UNO μπορεί να διαφέρει από 5V και συνήθως λίγο πιο κάτω, πρέπει να χρησιμοποιήσετε συμβατικά ωμικά διαχωριστικά στην είσοδο. Εδώ αυτοί είναι διαιρέτες τάσης στις αντιστάσεις R1, R3 και R2, R4.

Ταυτόχρονα, να φέρει τις ενδείξεις του οργάνου στην πραγματική αξία τάση εισόδου, πρέπει να ορίσετε στο πρόγραμμα τη διαίρεση του αποτελέσματος της μέτρησης με τον συντελεστή διαίρεσης του ωμικού διαιρέτη. Και ο συντελεστής διαίρεσης, ας τον συμβολίσουμε "K", μπορεί να υπολογιστεί χρησιμοποιώντας τον ακόλουθο τύπο:

K = R3 / (R1+R3) ή K = R4 / (R2+R4),

αντίστοιχα για διαφορετικές εισόδους του διπλού βολτόμετρου.

Είναι πολύ ενδιαφέρον ότι οι αντιστάσεις στα διαχωριστικά δεν χρειάζεται απαραίτητα να είναι υψηλής ακρίβειας. Μπορείτε να πάρετε συνηθισμένες αντιστάσεις, στη συνέχεια να μετρήσετε την πραγματική τους αντίσταση με ένα ακριβές ωμόμετρο και να αντικαταστήσετε αυτές τις μετρούμενες τιμές στον τύπο. Θα λάβετε την τιμή "K" για έναν συγκεκριμένο διαιρέτη, ο οποίος θα πρέπει να αντικατασταθεί στον τύπο.

Πρόγραμμα βολτόμετρου

Το πρόγραμμα C++ φαίνεται στην Εικόνα 2.

Ρύζι. 2. Πηγαίος κώδικαςπρογράμματα.

Για τον έλεγχο της ένδειξης LCD, αποφασίστηκε να χρησιμοποιηθούν οι θύρες D2 έως D7 της πλακέτας ARDUINO UNO. Κατ 'αρχήν, άλλες θύρες είναι δυνατές, αλλά έτσι αποφάσισα να τις χρησιμοποιήσω.

Για να αλληλεπιδράσει η ένδειξη με το ARDUINO UNO, πρέπει να φορτώσετε μια υπορουτίνα στο πρόγραμμα για να την ελέγξετε. Τέτοιες ρουτίνες ονομάζονται "βιβλιοθήκες" και υπάρχουν πολλές διαφορετικές "βιβλιοθήκες" στη σουίτα λογισμικού ARDUINO UNO. Για να εργαστείτε με μια ένδειξη LCD που βασίζεται στο HD44780, χρειάζεστε τη βιβλιοθήκη LiquidCrystal. Επομένως, το πρόγραμμα (Πίνακας 1) ξεκινά με τη φόρτωση αυτής της βιβλιοθήκης:

Αυτή η γραμμή δίνει την εντολή για φόρτωση αυτής της βιβλιοθήκης στο ARDUINO UNO. Τότε πρέπει να αναθέσετε Θύρες ARDUINO UNO, το οποίο θα λειτουργεί με την ένδειξη LCD. Επέλεξα τις θύρες D2 έως D7. Μπορείτε να επιλέξετε άλλους. Αυτές οι θύρες εκχωρούνται από τη γραμμή:

LiquidCrystal led(2, 3, 4, 5, 6, 7);

Μετά από αυτό, το πρόγραμμα προχωρά στην πραγματική λειτουργία του βολτόμετρου. Για τη μέτρηση της τάσης, αποφασίστηκε η χρήση αναλογικών εισόδων A1 και A2. Αυτές οι εισροές δίνονται στις γραμμές:

int analogInput=1;

int analogInput1=2;

Για να διαβάσετε δεδομένα από αναλογικές θύρες, χρησιμοποιήστε τη λειτουργία analogRead. Η ανάγνωση δεδομένων από αναλογικές θύρες εμφανίζεται στις γραμμές:

vout=analogRead(analogInput);

voutl=analogRead(analoglnput1);

Στη συνέχεια, η πραγματική τάση υπολογίζεται λαμβάνοντας υπόψη τον λόγο διαίρεσης του διαιρέτη τάσης εισόδου:

volt=vout*5.0/1024.0/0.048 ;

volt1=vout1*5.0/1024.0/0.048;

Σε αυτές τις γραμμές, ο αριθμός 5.0 είναι η τάση στην έξοδο του σταθεροποιητή της πλακέτας ARDUINO UNO. Στην ιδανική περίπτωση, θα πρέπει να είναι 5 V, αλλά για να λειτουργεί με ακρίβεια το βολτόμετρο, πρέπει πρώτα να μετρηθεί αυτή η τάση. Συνδέστε την πηγή ρεύματος και μετρήστε την τάση +5V στο βύσμα POWER της πλακέτας με ένα βολτόμετρο αρκετά ακριβείας. Τι συμβαίνει, τότε εισάγετε αυτές τις γραμμές αντί για 5,0, για παράδειγμα, εάν υπάρχει 4,85 V, οι γραμμές θα μοιάζουν με αυτό:

volt=vout*4,85/1024,0/0,048;

volt1=vout1*4.85/1024.0/0.048;

Στο επόμενο στάδιο, θα χρειαστεί να μετρήσετε τις πραγματικές αντιστάσεις των αντιστάσεων R1-R4 και να προσδιορίσετε τους συντελεστές K (που υποδεικνύονται ως 0,048) για αυτές τις γραμμές χρησιμοποιώντας τους τύπους:

K1 = R3 / (R1+R3) και K2 = R4 / (R2+R4)

Ας πούμε K1 = 0,046 και K2 = 0,051, οπότε γράφουμε:

volt=vout*4.85/1024.0/0.046 ;

volt1=vout1*4.85/1024.0/0.051;

Έτσι, πρέπει να γίνουν αλλαγές στο κείμενο του προγράμματος σύμφωνα με την πραγματική τάση στην έξοδο του σταθεροποιητή 5 volt της πλακέτας ARDUINO UNO και σύμφωνα με τους πραγματικούς συντελεστές διαίρεσης των ωμικών διαχωριστών. Μετά από αυτό, η συσκευή θα λειτουργεί με ακρίβεια και δεν θα απαιτεί καμία ρύθμιση ή βαθμονόμηση.

Αλλάζοντας τους συντελεστές διαίρεσης των διαιρετών αντίστασης (και, κατά συνέπεια, τους συντελεστές "K"), μπορείτε να κάνετε άλλα όρια μέτρησης, και όχι απαραίτητα τα ίδια και για τις δύο εισόδους.

Karavkin V. RK-2017-01.

Λογοτεχνία:

  1. Karavkin V. - Φλας χριστουγεννιάτικων δέντρων στο ARDUINO ως θεραπεία για τον φόβο των μικροελεγκτών. RK-11-2016.
  2. Karavkin V. - Συχνόμετρο στο ARDUINO. RK-12-2016.

Γεια σου, Χαμπρ! Σήμερα θέλω να συνεχίσω το θέμα της «διασταύρωσης» του arduino και του android. Στην προηγούμενη δημοσίευση μίλησα και σήμερα θα μιλήσουμε για ένα βολτόμετρο bluetooth DIY. Μια άλλη τέτοια συσκευή μπορεί να ονομάζεται έξυπνο βολτόμετρο, «έξυπνο» βολτόμετρο ή απλώς έξυπνο βολτόμετρο, χωρίς εισαγωγικά. Το επίθετο είναι λανθασμένο από την άποψη της ρωσικής γραμματικής, ωστόσο, βρίσκεται συχνά στα μέσα ενημέρωσης. Θα υπάρξει ψηφοφορία για αυτό το θέμα στο τέλος του άρθρου, αλλά προτείνω να ξεκινήσετε με μια επίδειξη της λειτουργίας της συσκευής για να καταλάβετε τι θα αφορά το άρθρο.


Αποποίηση ευθύνης: το άρθρο προορίζεται για τον μέσο λάτρη του arduino που συνήθως δεν είναι εξοικειωμένος με τον προγραμματισμό Android, επομένως, όπως και στο προηγούμενο άρθρο, θα δημιουργήσουμε μια εφαρμογή για smartphone χρησιμοποιώντας το περιβάλλον οπτικής ανάπτυξης App Inventor 2 για εφαρμογές Android.
Για να φτιάξουμε ένα βολτόμετρο bluetooth, πρέπει να γράψουμε δύο σχετικά ανεξάρτητα προγράμματα: ένα σκίτσο για το Arduino και μια εφαρμογή για το Android Ας ξεκινήσουμε με ένα σκίτσο.
Αρχικά, θα πρέπει να γνωρίζετε ότι υπάρχουν τρεις κύριες επιλογές για τη μέτρηση της τάσης χρησιμοποιώντας το Arduino, ανεξάρτητα από το πού πρέπει να εξάγετε τις πληροφορίες: στη θύρα com, σε μια οθόνη συνδεδεμένη στο Arduino ή σε ένα smartphone.
Πρώτη περίπτωση: μετρήσεις τάσης έως 5 βολτ. Εδώ, μία ή δύο γραμμές κώδικα είναι αρκετές και η τάση εφαρμόζεται απευθείας στον ακροδέκτη A0:
int value = analogRead(0);
τάση = (τιμή / 1023,0) * 5; // αληθές μόνο εάν Vcc = 5,0 βολτ
Δεύτερη περίπτωση: για τη μέτρηση τάσεων μεγαλύτερες από 5 βολτ, χρησιμοποιείται διαιρέτης τάσης. Το κύκλωμα είναι πολύ απλό, όπως και ο κώδικας.

Σκίτσο

int analogInput = A0;
float val = 0,0;
float τάση = 0,0;
float R1 = 100000,0; //Battery Vin-> 100K -> A0
float R2 = 10000,0; //Battery Gnd -> Arduino Gnd and Arduino Gnd -> 10K -> A0
τιμή int = 0;

Κενό setup() (
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

Void loop() (
value = analogRead(analogInput);
val = (τιμή * 4,7) / 1024,0;
τάση = val / (R2/(R1+R2));
Serial.println(τάση);
καθυστέρηση (500);
}


Arduino Uno
Μονάδα Bluetooth
Τρίτη περίπτωση. Όταν χρειάζεται να λάβετε πιο ακριβείς πληροφορίες σχετικά με την τάση, θα πρέπει να χρησιμοποιήσετε ως τάση αναφοράς όχι την τάση τροφοδοσίας, η οποία μπορεί να διαφέρει ελαφρώς όταν τροφοδοτείται από μπαταρία, για παράδειγμα, αλλά την τάση του εσωτερικού σταθεροποιητή Arduino 1,1 βολτ Το κύκλωμα είναι το ίδιο εδώ, αλλά ο κωδικός είναι λίγο μεγαλύτερος. Δεν θα αναλύσω λεπτομερώς αυτήν την επιλογή, καθώς έχει ήδη περιγραφεί καλά σε θεματικά άρθρα, αλλά η δεύτερη μέθοδος είναι αρκετά αρκετή για μένα, καθώς η τροφοδοσία μου είναι σταθερή, από τη θύρα USB του φορητού υπολογιστή.
Έτσι, τακτοποιήσαμε τη μέτρηση της τάσης, τώρα ας προχωρήσουμε στο δεύτερο μισό του έργου: τη δημιουργία μιας εφαρμογής Android. Θα δημιουργήσουμε την εφαρμογή απευθείας από το πρόγραμμα περιήγησης στο περιβάλλον οπτικής ανάπτυξης για εφαρμογές Android App Inventor 2. Μεταβείτε στον ιστότοπο appinventor.mit.edu/explore, συνδεθείτε χρησιμοποιώντας τον λογαριασμό σας Google, κάντε κλικ στο κουμπί δημιουργία, νέο έργο και από απλά σύροντας και ρίχνοντας στοιχεία θα δημιουργήσουμε κάτι σαν αυτό το σχέδιο:

Έκανα τα γραφικά πολύ απλά, αν κάποιος θέλει πιο ενδιαφέροντα γραφικά, να σας υπενθυμίσω ότι για αυτό πρέπει να χρησιμοποιήσετε αρχεία .png με διάφανο φόντο αντί για αρχεία .jpeg.
Τώρα μεταβείτε στην καρτέλα Blocks και δημιουργήστε τη λογική της εφαρμογής εκεί κάπως έτσι:


Εάν όλα πάνε καλά, μπορείτε να κάνετε κλικ στο κουμπί Δημιουργία και να αποθηκεύσετε το .apk στον υπολογιστή μου και, στη συνέχεια, να κατεβάσετε και να εγκαταστήσετε την εφαρμογή στο smartphone σας, αν και υπάρχουν άλλοι τρόποι για να ανεβάσετε την εφαρμογή. εδώ είναι πιο βολικό για οποιονδήποτε. Ως αποτέλεσμα, κατέληξα με αυτήν την εφαρμογή:


Κατανοώ ότι λίγοι άνθρωποι χρησιμοποιούν το περιβάλλον οπτικής ανάπτυξης App Inventor 2 για εφαρμογές Android στα έργα τους, οπότε μπορεί να προκύψουν πολλά ερωτήματα σχετικά με την εργασία σε αυτό. Για να απαντήσω σε ορισμένες από αυτές τις ερωτήσεις, έφτιαξα ένα λεπτομερές βίντεο σχετικά με το πώς να φτιάξετε μια τέτοια εφαρμογή "από την αρχή" (για να την δείτε, πρέπει να μεταβείτε στο YouTube):

P.S. Μια συλλογή με περισσότερα από 100 εκπαιδευτικά υλικά για το Arduino για αρχάριους και επαγγελματίες