ზუსტი ვოლტმეტრი არდუინოზე. ციფრული ვოლტმეტრი 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 pin-ის საშუალებით, ხოლო Uno გადააქცევს მიღებულ ანალოგურ სიგნალს ციფრულ ფორმაში და ჩაიწერს LCD-ზე. ამ გზით თქვენ შეგიძლიათ ნახოთ ძაბვის მნიშვნელობა მიმდინარე ტევადობის წინააღმდეგობაზე.

LCD1602 აქვს ორი ოპერაციული რეჟიმი: 4-ბიტიანი და 8-ბიტიანი. როდესაც MCU IO არასაკმარისია, შეგიძლიათ აირჩიოთ 4-ბიტიანი რეჟიმი, რომელიც იყენებს მხოლოდ D4~D7 პინებს.

მიჰყევით ცხრილს მათ დასაკავშირებლად.

ნაბიჯი 4: შეაერთეთ პოტენციომეტრი LCD1602-თან

შეაერთეთ პოტენციომეტრის შუა პინი Vo pin-ზე LCD1602-ზე და ნებისმიერი სხვა პინი GND-ს.

შეაერთეთ პოტენციომეტრის შუა პინი A0-ზე SunFounder Uno-დან და ერთი სხვა 5 ვ-ზე, მეორე კი GND-ზე.

ნაბიჯი 6: ატვირთეთ კოდი

ეს კოდი:

#შეიცავს /************************************************ ********** *****/ 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);//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 სერიულ მონიტორზე val-ის რაოდენობა Serial.print ("V" // დაბეჭდეთ ერთეული როგორც V, ძაბვის შემოკლება სერიულ მონიტორზე lcd.setCursor(6,1);//განათავსეთ კურსორი 1-ელ ხაზში, სვეტი); 6. აქედან სიმბოლოები უნდა იყოს ნაჩვენები lcd.print(val);// ამობეჭდეთ val-ების რაოდენობა LCD-ზე lcd.print("V");//შემდეგ დაბეჭდეთ ერთეული როგორც V, მოკლედ ძაბვის ელ. LCD დაყოვნება (200); //დაელოდეთ 200 ms )

დაატრიალეთ პოტენციომეტრი, რათა შეამოწმოთ ძაბვა LCD1602-ზე რეალურ დროში.

აქ არის სახიფათო რამ. კოდის გაშვების შემდეგ LCD ეკრანმა აჩვენა სიმბოლოები. შემდეგ დავარეგულირე ეკრანის კონტრასტი (ეტაპობრივი ცვლილება შავიდან თეთრამდე) პოტენციომეტრის საათის ისრის მიმართულებით ან საათის ისრის საწინააღმდეგოდ შემობრუნებით, სანამ ეკრანზე აშკარად გამოჩნდებოდა სიმბოლოები.

აიღეთ ორი ბატარეა მათი ძაბვის გასაზომად: 1,5 ვ და 3,7 ვ. გახსენით მეორე პოტენციომეტრის კავშირი A0 და GND პინთან, რაც ნიშნავს პოტენციომეტრის ამოღებას წრედიდან. მიამაგრეთ A0 მავთულის ბოლო ბატარეის ანოდზე და GND წრე კათოდზე. არ შეაერთოთ ისინი, წინააღმდეგ შემთხვევაში მიიღებთ მოკლე ჩართვაბატარეაზე. მნიშვნელობა 0V არის საპირისპირო კავშირი.

ამრიგად, ბატარეის ძაბვა ნაჩვენებია LCD ეკრანზე. შეიძლება იყოს გარკვეული შეცდომა მნიშვნელობასა და ნომინალურ მნიშვნელობას შორის, რადგან ბატარეა სრულად არ არის დატენილი. და ამიტომ უნდა გავზომო ძაბვა, რომ გავიგო შემიძლია თუ არა ბატარეის გამოყენება.

PS:თუ თქვენს ეკრანზე დისპლეის პრობლემა გაქვთ - იხილეთ ეს ხშირად დასმული კითხვები LCD ეკრანებისთვის - http://wiki.sunfounder.cc/index.php?title=LCD1602/I2C_LCD1602_FAQ.

იდეა

იდეა ძაბვის, დენის, სიმძლავრის, გამონადენის და შესაძლოა დამუხტვის საზომი მოწყობილობები დიდი ხნის წინ გაჩნდა და არა მარტო ჩემთვის. თქვენ შეგიძლიათ იპოვოთ მრავალი სათამაშო, სახელწოდებით USB Tester (ექიმი) შესამოწმებლად სხვადასხვა მოწყობილობები USB-დან. მე მაინტერესებს გარკვეულწილად უფრო უნივერსალური მოწყობილობა, ინტერფეისისგან დამოუკიდებელი, მაგრამ უბრალოდ შექმნილია გარკვეული ძაბვისა და დენისთვის. მაგალითად, 0 - 20.00v, 0 - 5.00a, 0 - 99.99Ah. რაც შეეხება ფუნქციებს, მე ასე ვხედავ

  • აჩვენებს მიმდინარე ძაბვას და დენს, ანუ ვოლტ-ამპერ მეტრს. პრინციპში, თქვენ შეგიძლიათ დაუყოვნებლივ ასახოთ ძალა.
  • დათვლა და დაგროვილი სიმძლავრის ჩვენება. ამპერ საათებში და დიდი ალბათობით ვატ საათებში.
  • პროცესის დროის ჩვენება
  • და, სავარაუდოდ, რეგულირებადი ქვედა და ზედა ძაბვის გამორთვის ზღურბლები (გამონადენი და დატენვის ლიმიტები)

განვითარება

გამოთვლებისა და გაზომვების განსახორციელებლად გვჭირდება კონტროლერი. ეს იდეა გამახსენდა, როგორც Arduino-სთან გაცნობის ნაწილი, ამიტომ კონტროლერი იქნება მარტივი პოპულარული Atmega328 და ის დაპროგრამდება გარემოში. არდუინო. საინჟინრო თვალსაზრისით არჩევანი ალბათ საუკეთესო არ არის - კონტროლერი ცოტა მსუქანია ამოცანის შესასრულებლად და მის ADC-ს საზომი არ შეიძლება ეწოდოს, მაგრამ... შევეცდებით.

  • ამ პროექტში ბევრს არ დავდებთ. ავიღოთ საფუძვლად მზად მოდული Arduino Pro Mini, საბედნიეროდ, ჩინელები მზად არიან მიაწოდონ ისინი $1.5 საცალო ფასად.
  • დისპლეი იქნება 1602 დისპლეი - კიდევ $1.5. მე მაქვს ვარიანტი I2C ინტერფეისის მოდულით, მაგრამ ამ პროექტში ის ნამდვილად არ არის საჭირო ($0,7).
  • განვითარებისთვის გვჭირდება პურის დაფა. ჩემს შემთხვევაში, ეს არის პატარა BreadBoard 1 დოლარად.
  • რა თქმა უნდა, დაგჭირდებათ მავთულები და სხვადასხვა მნიშვნელობის რეზისტორების რაოდენობა. 1602 დისპლეისთვის I2C გარეშე, თქვენ ასევე უნდა აირჩიოთ კონტრასტი - ეს კეთდება ცვლადი რეზისტორი 2 - 20 kOhm-ზე.
  • ამპერმეტრის განსახორციელებლად დაგჭირდებათ შუნტი. პირველი მიახლოებით, ეს შეიძლება იყოს 0.1 Ohm, 5 W რეზისტორი.
  • ავტომატური გამორთვის განსახორციელებლად, დაგჭირდებათ რელე კონტაქტებით, რომლებიც განკუთვნილია მოწყობილობის მაქსიმალური დენისთვის და მიწოდების ძაბვის ტოლი ძაბვით. რელეს გასაკონტროლებლად გჭირდებათ NPN ტრანზისტორი და დამცავი დიოდი.
  • მოწყობილობა იკვებება გარე კვების წყაროდან, ცხადია, მინიმუმ 5 ვ. თუ ელექტრომომარაგება მნიშვნელოვნად განსხვავდება, მაშინ ასევე საჭირო იქნება 7805 ტიპის ინტეგრირებული სტაბილიზატორი - ის განსაზღვრავს სარელეო ძაბვას.
  • იმ შემთხვევაში Arduino Pro Mini-ს დასჭირდება USB-TTL კონვერტერი, რომ ატვირთოთ firmware.
  • დაყენებისთვის დაგჭირდებათ მულტიმეტრი.

ვოლტმეტრი

მე ვახორციელებ მარტივ ვოლტმეტრს ერთი დიაპაზონით დაახლოებით 0 - 20 ვ. ეს შენიშვნა მნიშვნელოვანია, რადგან ჩვენი კონტროლერის ADC-ს აქვს 10-ბიტიანი სიმძლავრე (1024 დისკრეტული მნიშვნელობა), ამიტომ შეცდომა იქნება მინიმუმ 0.02 ვ (20/1024). ტექნიკის განსახორციელებლად, ჩვენ გვჭირდება კონტროლერის ანალოგური შეყვანა, წყვილი რეზისტორებისგან დამზადებული გამყოფი და რაიმე სახის გამომავალი (ჩვენება მზა ვერსიაში, სერიული პორტი შეიძლება გამოყენებულ იქნას გამართვისთვის).

ADC გაზომვის პრინციპია ანალოგური შეყვანის ძაბვის შედარება VRef მითითებით. ADC გამომავალი ყოველთვის არის მთელი რიცხვი - 0 შეესაბამება 0V, 1023 შეესაბამება ძაბვას VRef. გაზომვა ხორციელდება ძაბვის თანმიმდევრული ჩვენებების სერიის აღებით და ეკრანზე მნიშვნელობის განახლებებს შორის პერიოდის საშუალოდ გაანგარიშებით. საორიენტაციო ძაბვის არჩევა მნიშვნელოვანია, რადგან ის ნაგულისხმევია მიწოდების ძაბვაზე, რომელიც შეიძლება არ იყოს სტაბილური. ეს ჩვენ საერთოდ არ ჯდება - ჩვენ საფუძვლად ავიღებთ სტაბილურ შიდა საცნობარო წყაროს 1.1 ვ ძაბვით, ინიციალიზებით მას analogReference (INTERNAL) გამოძახებით. შემდეგ ჩვენ დავაკალიბრებთ მის მნიშვნელობას მულტიმეტრის ჩვენებების გამოყენებით.

მარცხნივ დიაგრამა აჩვენებს ვარიანტს ეკრანის პირდაპირი კონტროლით (ის უბრალოდ კონტროლდება - იხილეთ სტანდარტული LiquidCrystal\HelloWorld ესკიზი). მარჯვნივ არის I2C ვარიანტი, რომელსაც შემდგომში გამოვიყენებ. I2C საშუალებას გაძლევთ დაზოგოთ მავთულები (მათგან 10 არის ჩვეულ ვერსიაში, განათების გარეშე). მაგრამ ეს მოითხოვს დამატებით მოდულს და უფრო რთულ ინიციალიზაციას. ნებისმიერ შემთხვევაში, ჯერ უნდა შემოწმდეს მოდულზე სიმბოლოების ჩვენება და დაარეგულიროთ კონტრასტი - ამისათვის თქვენ უბრალოდ უნდა აჩვენოთ ნებისმიერი ტექსტი ინიციალიზაციის შემდეგ. კონტრასტი რეგულირდება რეზისტორით R1, ან I2C მოდულის მსგავსი რეზისტორით.

შეყვანა არის 1:19 გამყოფი, რომელიც საშუალებას გაძლევთ მიიღოთ მაქსიმალური ძაბვა დაახლოებით 20 ვ Vref = 1.1 (როგორც წესი, კონდენსატორი + ზენერის დიოდი მოთავსებულია შეყვანის პარალელურად დაცვის მიზნით, მაგრამ ეს ჩვენთვის ჯერ არ არის მნიშვნელოვანი. ). რეზისტორებს აქვთ გავრცელება და ასევე აქვს კონტროლერის მითითება Vref, ამიტომ აწყობის შემდეგ უნდა გავზომოთ ძაბვა (მინიმუმ მიწოდება) ჩვენი მოწყობილობისა და საცნობარო მულტიმეტრის პარალელურად და კოდში ავირჩიოთ Vref, სანამ წაკითხვები არ ემთხვევა. აღსანიშნავია ისიც, რომ ნებისმიერ ADC-ს აქვს ნულოვანი ოფსეტური ძაბვა (რაც აფუჭებს კითხვებს დიაპაზონის დასაწყისში), მაგრამ ჩვენ ამას ჯერ არ შევეხებით.

ასევე მნიშვნელოვანი იქნება მიწოდებისა და საზომი ადგილის გამიჯვნა. ჩვენს ADC-ს აქვს 1 მვ-ზე ოდნავ უარესი გარჩევადობა, რამაც შეიძლება გამოიწვიოს პრობლემები, თუ გაყვანილობა არასწორია, განსაკუთრებით პურის დაფაზე. ვინაიდან მოდულის დაფის განლაგება უკვე შესრულებულია და ჩვენ მხოლოდ ქინძისთავები უნდა ავირჩიოთ. მოდულს აქვს რამდენიმე „დამიწის“ ქინძისთავები, ამიტომ უნდა დავრწმუნდეთ, რომ დენი შედის მოდულში ერთი „მიწის“ მეშვეობით, ხოლო გაზომვები მეორის მეშვეობით. ფაქტობრივად, ცვლილებების შესატანად, მე ყოველთვის ვიყენებ ანალოგურ შეყვანებთან ყველაზე ახლოს დამიწების პინს.

I2C-ის გასაკონტროლებლად გამოიყენება LiquidCrystal_I2C ბიბლიოთეკის ვერსია - ჩემს შემთხვევაში მითითებულია I2C მოდულის კონკრეტული პინი (ჩინელები აწარმოებენ მოდულებს სხვადასხვა კონტროლით). მე ასევე აღვნიშნავ, რომ Arduino-ში I2C მოითხოვს A4 და A5 ქინძისთავების გამოყენებას - Pro Mini დაფაზე ისინი არ არიან განლაგებული ზღვარზე, რაც მოუხერხებელია BreadBoard-ზე პროტოტიპისთვის.

წყაროს კოდი

#შეიცავს #შეიცავს // მარტივი ვოლტმეტრი i2c დისპლეით 1602. V 16.11 // პარამეტრები i2c დისპლეისთვის 1602 არასტანდარტული პინუტით #განსაზღვე LCD_I2C_ADDR 0x27 #განისაზღვროს BACKLIGHT 3 #განსაზღვროს LCD_EN 2 #განსაზღვროს LCD_EN 2 #განსაზღვროს LCD_RW5 #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. IN<-[ 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) ინვოლტი += 3;

// კონვერტაცია ვოლტებად (მნიშვნელობა: 0..1023 -> (0..VRef) მასშტაბირებული Mult-ით) ვოლტი = InVolt * VoltMult * VRef / 1023;


// გამომავალი მონაცემები lcd.setCursor (0, 1); ანდროიდის აპლიკაციების აპლიკაციაგამომგონებელი 2.
წვრილმანი ბლუთუს ვოლტმეტრის გასაკეთებლად ორი შედარებით დამოუკიდებელი პროგრამა უნდა დავწეროთ: ესკიზი Arduino-სთვის და აპლიკაცია Android-ისთვის დავიწყოთ ესკიზით.
პირველ რიგში, უნდა იცოდეთ, რომ Arduino-ს გამოყენებით ძაბვის გაზომვის სამი ძირითადი ვარიანტია, მიუხედავად იმისა, თუ სად გჭირდებათ ინფორმაციის გამოტანა: com პორტში, Arduino-სთან დაკავშირებულ ეკრანზე ან სმარტფონზე.
პირველი შემთხვევა: ძაბვის გაზომვები 5 ვოლტამდე. აქ საკმარისია კოდის ერთი ან ორი ხაზი და ძაბვა მიეწოდება პირდაპირ პინ A0-ს:
int value = analogRead(0) // წაკითხული A0-დან
ძაბვა = (მნიშვნელობა / 1023.0) * 5; // მართალია მხოლოდ იმ შემთხვევაში, თუ Vcc = 5.0 ვოლტი
მეორე შემთხვევა: 5 ვოლტზე მეტი ძაბვის გასაზომად გამოიყენება ძაბვის გამყოფი. წრე ძალიან მარტივია და კოდიც.

ესკიზი

int analogInput = A0;
float val = 0.0;
float ძაბვა = 0.0;
ათწილადი R1 = 100000.0; //Battery Vin-> 100K -> A0
ათწილადი R2 = 10000.0; //ბატარეა Gnd -> Arduino Gnd და Arduino Gnd -> 10K -> A0
int მნიშვნელობა = 0;

Void setup() (
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

Void loop() (
მნიშვნელობა = analogRead(analogInput);
val = (მნიშვნელობა * 4.7) / 1024.0;
ძაბვა = val / (R2/(R1+R2));
Serial.println(ძაბვა);
დაგვიანებით (500);
}


არდუინო უნო
Bluetooth მოდული
მესამე შემთხვევა. როდესაც თქვენ გჭირდებათ უფრო ზუსტი ინფორმაციის მიღება ძაბვის შესახებ, თქვენ უნდა გამოიყენოთ როგორც საცნობარო ძაბვა არა მიწოდების ძაბვა, რომელიც შეიძლება ოდნავ განსხვავდებოდეს, როდესაც იკვებება ბატარეით, არამედ შიდა Arduino სტაბილიზატორის ძაბვა 1.1 ვოლტი წრე აქაც იგივეა, მაგრამ კოდი ცოტა გრძელია. მე არ გავაანალიზებ ამ ვარიანტს დეტალურად, რადგან ის უკვე კარგად არის აღწერილი თემატურ სტატიებში, მაგრამ მეორე მეთოდი ჩემთვის სავსებით საკმარისია, რადგან ჩემი ელექტრომომარაგება სტაბილურია, ლეპტოპის USB პორტიდან.
ასე რომ, ჩვენ დავახარისხეთ ძაბვის გაზომვა, ახლა მოდით გადავიდეთ პროექტის მეორე ნახევარზე: Android აპლიკაციის შექმნაზე. ჩვენ შევქმნით აპლიკაციას პირდაპირ ბრაუზერიდან Android აპლიკაციების ვიზუალური განვითარების გარემოში App Inventor 2. გადადით ვებსაიტზე appinventor.mit.edu/explore, შედით თქვენი Google ანგარიშის გამოყენებით, დააწკაპუნეთ ღილაკზე შექმნა, ახალი პროექტი და შემდეგ უბრალოდ ელემენტების გადათრევით და ჩამოშვებით ჩვენ შევქმნით ამ დიზაინს:

გრაფიკა ძალიან გამარტივდა, თუ ვინმეს უფრო საინტერესო გრაფიკა უნდა, შეგახსენებთ, რომ ამისთვის საჭიროა .jpeg ფაილების ნაცვლად გამოიყენოთ .png ფაილები გამჭვირვალე ფონით.
ახლა გადადით ბლოკების ჩანართზე და შექმენით აპლიკაციის ლოგიკა მსგავსი რამ:


თუ ყველაფერი გამოსწორდა, შეგიძლიათ დააჭიროთ Build ღილაკს და შეინახოთ .apk ჩემს კომპიუტერში, შემდეგ ჩამოტვირთოთ და დააინსტალიროთ აპლიკაცია თქვენს სმარტფონზე, თუმცა აპლიკაციის ატვირთვის სხვა გზებიც არსებობს. აქ ვინმესთვის უფრო მოსახერხებელია. შედეგად, მე დავასრულე ეს აპლიკაცია:


მესმის, რომ რამდენიმე ადამიანი იყენებს App Inventor 2 ვიზუალური განვითარების გარემოს Android აპლიკაციებისთვის თავიანთ პროექტებში, ამიტომ ბევრი კითხვა შეიძლება გაჩნდეს მასში მუშაობის შესახებ. ზოგიერთი ამ კითხვის გადასაჭრელად, მე გავაკეთე დეტალური ვიდეო, თუ როგორ უნდა გააკეთოთ ასეთი აპლიკაცია "ნულიდან" (მის სანახავად უნდა გადახვიდეთ YouTube-ზე):

P.S. 100-ზე მეტი საგანმანათლებლო მასალის კოლექცია Arduino-ზე დამწყებთათვის და პროფესიონალებისთვის

აღწერილია, თუ როგორ უნდა ავაწყოთ ხელნაკეთი ორმაგი ვოლტმეტრი პლატფორმაზე დაფუძნებული Arduino UNO 1602A LCD დისპლეის გამოყენებით. ზოგიერთ შემთხვევაში აუცილებელია ორი მუდმივი ძაბვის ერთდროულად გაზომვა და მათი შედარება. ეს შეიძლება საჭირო გახდეს, მაგალითად, მუდმივი ძაბვის სტაბილიზატორის შეკეთებისას ან დაყენებისას, რათა გაზომოთ ძაბვა მის შემავალ და გამომავალზე, ან სხვა შემთხვევებში.

სქემატური დიაგრამა

უნივერსალური მიკროკონტროლერის გამოყენება ARDUINO მოდული UNO-ს და ორხაზიანი LCD დისპლეის ტიპის 1602A (HD44780 კონტროლერზე დაფუძნებული) ადვილად შეუძლია ასეთი მოწყობილობის დამზადება. ერთ ხაზზე გამოჩნდება ძაბვა U1, მეორეში - ძაბვა U2.

ბრინჯი. 1. სქემატური დიაგრამაორმაგი ვოლტმეტრი დისპლეით 1602A Arduino UNO-ზე.

მაგრამ, პირველ რიგში, მინდა შეგახსენოთ, რომ ARDUINO UNO არის შედარებით იაფი მზა მოდული - პატარა PCB, რომელზედაც განთავსებულია ATMEGA328 მიკროკონტროლერი, ისევე როგორც მისი მუშაობისთვის საჭირო მთელი მისი „აღკაზმულობა“, მათ შორის USB პროგრამისტი და კვების წყარო.

მათთვის, ვინც არ იცნობს ARDUINO UNO-ს, გირჩევთ, ჯერ წაიკითხოთ სტატიები L.1 და L.2. ორმაგი ვოლტმეტრის წრე ნაჩვენებია ნახ. 1. შექმნილია ორი ძაბვის გასაზომად 0-დან 100 ვ-მდე (პრაქტიკულად 90 ვ-მდე).

როგორც სქემიდან ჩანს, ციფრული პორტებისთვის D2-D7 ARDUINO დაფები UNO დაკავშირებულია თხევადკრისტალური დისპლეის H1 ტიპის 1602A მოდულთან. LCD ინდიკატორი იკვებება 5 ვ ძაბვის სტაბილიზატორით, რომელიც მდებარეობს 5 ვ ძაბვის სტაბილიზატორის დაფაზე.

გაზომილი ძაბვები მიეწოდება ორ ანალოგურ შეყვანას A1 და A2. სულ ექვსი ანალოგური შეყვანაა, A0-A5, შეგიძლიათ აირჩიოთ ნებისმიერი ორი მათგანი. ამ შემთხვევაში არჩეულია A1 და A2. ანალოგურ პორტებზე ძაბვა შეიძლება იყოს მხოლოდ დადებითი და მხოლოდ ნულიდან მიკროკონტროლერის მიწოდების ძაბვამდე, ანუ ნომინალურად 5 ვ-მდე.

ანალოგური პორტის გამოსავალი გარდაიქმნება ციფრულ ფორმაში მიკროკონტროლერის ADC-ით. ვოლტების ერთეულებში შედეგის მისაღებად, თქვენ უნდა გაამრავლოთ იგი 5-ზე (საცნობარო ძაბვით, ანუ მიკროკონტროლერის მიწოდების ძაბვით) და გავყოთ 1024-ზე.

იმისათვის, რომ გავზომოთ ძაბვები 5 ვ-ზე მეტი, უფრო სწორად, მიკროკონტროლერის მიწოდების ძაბვაზე მეტი, რადგან ARDUINO UNO დაფაზე 5 ვოლტიანი სტაბილიზატორის გამომავალზე რეალური ძაბვა შეიძლება განსხვავდებოდეს 5 ვ-დან და ჩვეულებრივ ოდნავ დაბლა, თქვენ უნდა გამოიყენოთ ჩვეულებრივი რეზისტენტული გამყოფები შესასვლელში. აქ ეს არის ძაბვის გამყოფები რეზისტორებზე R1, R3 და R2, R4.

ამავდროულად, ინსტრუმენტის ჩვენებები რეალურ მნიშვნელობამდე მიიყვანოთ შეყვანის ძაბვა, პროგრამაში უნდა დააყენოთ გაზომვის შედეგის გაყოფა რეზისტენტული გამყოფის გაყოფის კოეფიციენტზე. და გაყოფის კოეფიციენტი, მოდით აღვნიშნოთ "K", შეიძლება გამოითვალოს შემდეგი ფორმულის გამოყენებით:

K = R3 / (R1+R3) ან K = R4 / (R2+R4),

შესაბამისად ორმაგი ვოლტმეტრის სხვადასხვა შეყვანისთვის.

ძალიან საინტერესოა, რომ გამყოფებში რეზისტორები სულაც არ უნდა იყოს მაღალი სიზუსტით. შეგიძლიათ აიღოთ ჩვეულებრივი რეზისტორები, შემდეგ გაზომოთ მათი რეალური წინააღმდეგობა ზუსტი ომმეტრით და შეცვალოთ ეს გაზომილი მნიშვნელობები ფორმულაში. თქვენ მიიღებთ მნიშვნელობას "K" კონკრეტული გამყოფისთვის, რომელიც უნდა შეიცვალოს ფორმულაში.

ვოლტმეტრის პროგრამა

C++ პროგრამა ნაჩვენებია სურათზე 2.

ბრინჯი. 2. წყაროს კოდიპროგრამები.

LCD ინდიკატორის გასაკონტროლებლად, გადაწყდა ARDUINO UNO დაფის D2-დან D7-მდე პორტების გამოყენება. პრინციპში, სხვა პორტები შესაძლებელია, მაგრამ ასე გადავწყვიტე მათი გამოყენება.

იმისათვის, რომ ინდიკატორმა ურთიერთქმედება ARDUINO UNO-სთან, თქვენ უნდა ჩატვირთოთ პროგრამაში ქვეპროგრამა მის გასაკონტროლებლად. ასეთ რუტინებს უწოდებენ "ბიბლიოთეკებს" და არის მრავალი განსხვავებული "ბიბლიოთეკა" ARDUINO UNO პროგრამულ პაკეტში. HD44780-ზე დაფუძნებულ LCD ინდიკატორთან მუშაობისთვის გჭირდებათ 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);

შემდეგ, ფაქტობრივი ძაბვა გამოითვლება შეყვანის ძაბვის გამყოფის გაყოფის თანაფარდობის გათვალისწინებით:

ვოლტი=ვოლტი*5.0/1024.0/0.048 ;

ვოლტი1=ვოლტი1*5.0/1024.0/0.048;

ამ ხაზებში, ნომერი 5.0 არის ძაბვა ARDUINO UNO დაფის სტაბილიზატორის გამოსავალზე. იდეალურ შემთხვევაში, ის უნდა იყოს 5 ვ, მაგრამ იმისთვის, რომ ვოლტმეტრმა ზუსტად იმუშაოს, ჯერ ეს ძაბვა უნდა გაიზომოს. შეაერთეთ დენის წყარო და გაზომეთ +5V ძაბვა დაფის POWER კონექტორთან საკმაოდ ზუსტი ვოლტმეტრით. რა ხდება, მაშინ შეიყვანეთ ამ ხაზებში 5.0-ის ნაცვლად, მაგალითად, თუ არის 4.85 ვ, ხაზები ასე გამოიყურება:

ვოლტი=ვოლტი*4.85/1024.0/0.048;

ვოლტი1=ვოლტი1*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, ასე რომ, ჩვენ ვწერთ:

ვოლტი=ვოლტი*4.85/1024.0/0.046 ;

ვოლტი1=ვოლტი1*4.85/1024.0/0.051;

ამრიგად, პროგრამის ტექსტში ცვლილებები უნდა განხორციელდეს ARDUINO UNO დაფის 5 ვოლტიანი სტაბილიზატორის გამოსავალზე რეალური ძაბვის მიხედვით და რეზისტენტული გამყოფების რეალური გაყოფის კოეფიციენტების მიხედვით. ამის შემდეგ მოწყობილობა ზუსტად იმუშავებს და არ საჭიროებს რაიმე კორექტირებას ან დაკალიბრებას.

რეზისტენტული გამყოფების გაყოფის კოეფიციენტების შეცვლით (და, შესაბამისად, "K" კოეფიციენტები), შეგიძლიათ გააკეთოთ სხვა საზომი ლიმიტები და არა აუცილებლად იგივე ორივე შეყვანისთვის.

Karavkin V. RK-2017-01.

ლიტერატურა:

  1. Karavkin V. - ნაძვის ხის ციმციმები ARDUINO-ზე, როგორც მიკროკონტროლერების შიშის საშუალება. რკ-11-2016წ.
  2. Karavkin V. - სიხშირის მრიცხველი ARDUINO-ზე. რკ-12-2016წ.

გამარჯობა, ჰაბრ! დღეს მინდა გავაგრძელო არდუინოს და ანდროიდის „გადაკვეთის“ თემა. წინა პუბლიკაციაში მე ვისაუბრე, დღეს კი ვისაუბრებთ წვრილმანი ბლუთუს ვოლტმეტრზე. სხვა ასეთ მოწყობილობას შეიძლება ეწოდოს ჭკვიანი ვოლტმეტრი, "ჭკვიანი" ვოლტმეტრი ან უბრალოდ ჭკვიანი ვოლტმეტრი, ბრჭყალების გარეშე. გვარი რუსული გრამატიკის თვალსაზრისით არასწორია, თუმცა მედიაში ხშირად გვხვდება. სტატიის ბოლოს იქნება კენჭისყრა ამ თემაზე, მაგრამ მე გთავაზობთ დაწყებას მოწყობილობის მუშაობის დემონსტრირებით, რათა გავიგოთ რაზე იქნება სტატია.


უარი პასუხისმგებლობაზე: სტატია განკუთვნილია არდუინოს საშუალო მოყვარულისთვის, რომელიც ჩვეულებრივ არ იცნობს Android-ის პროგრამირებას, ამიტომ, როგორც წინა სტატიაში, ჩვენ შევქმნით აპლიკაციას სმარტფონისთვის ვიზუალური განვითარების გარემოს გამოყენებით Android აპლიკაციებისთვის App Inventor 2.
წვრილმანი ბლუთუს ვოლტმეტრის გასაკეთებლად ორი შედარებით დამოუკიდებელი პროგრამა უნდა დავწეროთ: ესკიზი Arduino-სთვის და აპლიკაცია Android-ისთვის დავიწყოთ ესკიზით.
პირველ რიგში, უნდა იცოდეთ, რომ Arduino-ს გამოყენებით ძაბვის გაზომვის სამი ძირითადი ვარიანტია, მიუხედავად იმისა, თუ სად გჭირდებათ ინფორმაციის გამოტანა: com პორტში, Arduino-სთან დაკავშირებულ ეკრანზე ან სმარტფონზე.
პირველი შემთხვევა: ძაბვის გაზომვები 5 ვოლტამდე. აქ საკმარისია კოდის ერთი ან ორი ხაზი და ძაბვა მიეწოდება პირდაპირ პინ A0-ს:
int value = analogRead(0) // წაკითხული A0-დან
ძაბვა = (მნიშვნელობა / 1023.0) * 5; // მართალია მხოლოდ იმ შემთხვევაში, თუ Vcc = 5.0 ვოლტი
მეორე შემთხვევა: 5 ვოლტზე მეტი ძაბვის გასაზომად გამოიყენება ძაბვის გამყოფი. წრე ძალიან მარტივია და კოდიც.

ესკიზი

int analogInput = A0;
float val = 0.0;
float ძაბვა = 0.0;
ათწილადი R1 = 100000.0; //Battery Vin-> 100K -> A0
ათწილადი R2 = 10000.0; //ბატარეა Gnd -> Arduino Gnd და Arduino Gnd -> 10K -> A0
int მნიშვნელობა = 0;

Void setup() (
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

Void loop() (
მნიშვნელობა = analogRead(analogInput);
val = (მნიშვნელობა * 4.7) / 1024.0;
ძაბვა = val / (R2/(R1+R2));
Serial.println(ძაბვა);
დაგვიანებით (500);
}


არდუინო უნო
Bluetooth მოდული
მესამე შემთხვევა. როდესაც თქვენ გჭირდებათ უფრო ზუსტი ინფორმაციის მიღება ძაბვის შესახებ, თქვენ უნდა გამოიყენოთ როგორც საცნობარო ძაბვა არა მიწოდების ძაბვა, რომელიც შეიძლება ოდნავ განსხვავდებოდეს, როდესაც იკვებება ბატარეით, არამედ შიდა Arduino სტაბილიზატორის ძაბვა 1.1 ვოლტი წრე აქაც იგივეა, მაგრამ კოდი ცოტა გრძელია. მე არ გავაანალიზებ ამ ვარიანტს დეტალურად, რადგან ის უკვე კარგად არის აღწერილი თემატურ სტატიებში, მაგრამ მეორე მეთოდი ჩემთვის სავსებით საკმარისია, რადგან ჩემი ელექტრომომარაგება სტაბილურია, ლეპტოპის USB პორტიდან.
ასე რომ, ჩვენ დავახარისხეთ ძაბვის გაზომვა, ახლა მოდით გადავიდეთ პროექტის მეორე ნახევარზე: Android აპლიკაციის შექმნაზე. ჩვენ შევქმნით აპლიკაციას პირდაპირ ბრაუზერიდან Android აპლიკაციების ვიზუალური განვითარების გარემოში App Inventor 2. გადადით ვებსაიტზე appinventor.mit.edu/explore, შედით თქვენი Google ანგარიშის გამოყენებით, დააწკაპუნეთ ღილაკზე შექმნა, ახალი პროექტი და შემდეგ უბრალოდ ელემენტების გადათრევით და ჩამოშვებით ჩვენ შევქმნით ამ დიზაინს:

გრაფიკა ძალიან გამარტივდა, თუ ვინმეს უფრო საინტერესო გრაფიკა უნდა, შეგახსენებთ, რომ ამისთვის საჭიროა .jpeg ფაილების ნაცვლად გამოიყენოთ .png ფაილები გამჭვირვალე ფონით.
ახლა გადადით ბლოკების ჩანართზე და შექმენით აპლიკაციის ლოგიკა მსგავსი რამ:


თუ ყველაფერი გამოსწორდა, შეგიძლიათ დააჭიროთ Build ღილაკს და შეინახოთ .apk ჩემს კომპიუტერში, შემდეგ ჩამოტვირთოთ და დააინსტალიროთ აპლიკაცია თქვენს სმარტფონზე, თუმცა აპლიკაციის ატვირთვის სხვა გზებიც არსებობს. აქ ვინმესთვის უფრო მოსახერხებელია. შედეგად, მე დავასრულე ეს აპლიკაცია:


მესმის, რომ რამდენიმე ადამიანი იყენებს App Inventor 2 ვიზუალური განვითარების გარემოს Android აპლიკაციებისთვის თავიანთ პროექტებში, ამიტომ ბევრი კითხვა შეიძლება გაჩნდეს მასში მუშაობის შესახებ. ზოგიერთი ამ კითხვის გადასაჭრელად, მე გავაკეთე დეტალური ვიდეო, თუ როგორ უნდა გააკეთოთ ასეთი აპლიკაცია "ნულიდან" (მის სანახავად უნდა გადახვიდეთ YouTube-ზე):

P.S. 100-ზე მეტი საგანმანათლებლო მასალის კოლექცია Arduino-ზე დამწყებთათვის და პროფესიონალებისთვის