Სარჩევი:

Arduino ზუსტი და ზუსტი ვოლტმეტრი (0-90V DC): 3 ნაბიჯი
Arduino ზუსტი და ზუსტი ვოლტმეტრი (0-90V DC): 3 ნაბიჯი

ვიდეო: Arduino ზუსტი და ზუსტი ვოლტმეტრი (0-90V DC): 3 ნაბიჯი

ვიდეო: Arduino ზუსტი და ზუსტი ვოლტმეტრი (0-90V DC): 3 ნაბიჯი
ვიდეო: Melexis MLX90614 ინფრაწითელი თერმომეტრის გამოყენებით Arduino 2024, ივლისი
Anonim

ამ ინსტრუქციულად, მე ავაშენე ვოლტმეტრი, რომ გავზომოთ მაღალი ძაბვები DC (0-90v) შედარებით სიზუსტით და სიზუსტით არდუინო ნანოს გამოყენებით.

ტესტის გაზომვები, რომლებიც მე ავიღე, საკმაოდ ზუსტი იყო, ძირითადად სტანდარტული ვოლტმეტრით გაზომილი ფაქტობრივი ძაბვის 0.3 ვ ფარგლებში (მე გამოვიყენე Astro AI DM6000AR). ეს საკმაოდ ახლოსაა მოწყობილობის ჩემი დანიშნულებისამებრ გამოყენებისთვის.

ამის არქივირებისთვის გამოვიყენე ძაბვის ცნობა (4.096 ვ) და ძაბვის გამყოფი.

კოდის მხარეს, რა თქმა უნდა, გამოვიყენე "გარე მითითების" ვარიანტი არდუინო ნანოსთვის და "დამარბილებელი" მაგალითი არდუინოს გაკვეთილებში.

მარაგები

1 x Arduino Nano - ბმული

1 x Oled ეკრანი (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 ძაბვის ცნობა - ბმული

პურის დაფა და მავთულები - ბმული

Astro AI DM6000AR - ბმული

USB დენის ბანკი - ბმული

9V ბატარეები - ბმული

CanadianWinters არის Amazon Services LLC Associates პროგრამის მონაწილე, შვილობილი სარეკლამო პროგრამა, რომელიც შექმნილია იმისთვის, რომ უზრუნველყოს საიტებზე საფასურის გამომუშავება Amazon.com– თან და მასთან დაკავშირებულ საიტებთან დაკავშირებით. ამ ბმულების გამოყენებით, როგორც ამაზონის ასოცირებული, მე ვიღებ შემოსავალს შესარჩევი შესყიდვებიდან, თუნდაც სხვა რამის ყიდვა-და ეს არაფერს დაგიჯდებათ.

ნაბიჯი 1: სქემა

სქემატიკა
სქემატიკა
სქემატიკა
სქემატიკა

მე დავაკავშირე ყველა ნაწილი ზემოთ მოცემული სქემის მიხედვით. კერძოდ, მე ავირჩიე 4.096 ძაბვის მითითება, რომ მაქსიმალურად ახლოს ვიყო 5 ვ ნიშნულთან, რათა არ დამეკარგა რეზოლუცია.

მონაცემთა ცხრილის შემდეგ, მე ავირჩიე 1K ohm რეზისტორი ძაბვის მითითებისთვის, მიუხედავად იმისა, რომ განსხვავებული მნიშვნელობის გამოყენება შეიძლება. მითითების ძაბვა მიეწოდება ნანო 5 ვ პინიდან.

სქემის იდეა იმაში მდგომარეობს, რომ DC ძაბვა, რომელიც უნდა გაიზომოს, გადის ძაბვის რეზისტორში. გაფართოებული ძაბვა და შემდეგ შედის Arduino– ს ანალოგიურ პინში, რათა მოხდეს მისი შერჩევა, გათლილება, ხელახალი მასშტაბირება და ჩვენება OLed ეკრანზე.

ვეცადე ყველაფერი მარტივი ყოფილიყო:)

ნაბიჯი 2: კოდი და რეზისტორის გამოთვლები

რეზისტორების მნიშვნელობები შეირჩა ისე, როგორც მიზანშეწონილია (თუ არ ვცდები ეს არის Arduino/Atmega მონაცემთა ცხრილში), რომ წინაღობა შევინარჩუნოთ 10k ohm– ზე ქვემოთ.

რამის გასამარტივებლად, მე შევქმენი ცხრილი, რომელიც ავტომატიზირებს გამოთვლებს იმ შემთხვევაში, თუ გსურთ გამოიყენოთ სხვადასხვა რეზისტორული მნიშვნელობები: ბმული Google Sheet– ზე

აქ არის კოდი, რომელიც გამოვიყენე ამ პროექტისთვის:

#ჩართეთ

#მოიცავს 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 (); for (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 ("ვოლტი"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters"); u8g2.setCursor (1, 60); u8g2.print ("ზუსტი ძაბვა"); } u8g2.sendBuffer (); // შიდა მეხსიერების გადატანა ჩვენების დაყოვნებაზე (1); }

გთხოვთ გაითვალისწინოთ, რომ მე ოდნავ ჟანგიანი ვარ Arduino კოდირებით, ასე რომ, თუ თქვენ აღმოაჩენთ რაიმე შეცდომას ან კოდის გაუმჯობესების გზას, მე მზად ვარ წინადადებებისთვის:)

ნაბიჯი 3: მოდით გამოვცადოთ ეს

მოდით გამოვცადოთ ის!
მოდით გამოვცადოთ ის!
მოდით გამოვცადოთ ის!
მოდით გამოვცადოთ ის!
მოდით გამოვცადოთ ის!
მოდით გამოვცადოთ ის!

ამ ვოლტმეტრის შესამოწმებლად გამოვიყენე 8x 9v ბატარეები, რომლებიც მივიღე ადგილობრივ მაღაზიაში. მე ვგეგმავ გამოვიყენო ეს ვოლტმეტრი, რომ გავზომო ძაბვა ჩემს ელექტრო ველოსიპედის ბატარეებზე (მათ აქვთ ძაბვა 24-60 ვ-დან, ზოგჯერ 72 ვ).

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

ჩემი მიზანი იყო ძაბვის კითხვა Oled/Arduino მეტრზე არც ისე შორს ჩემი ციფრული მულტიმეტრისგან. მე ვცდილობდი +/- 0, 3v max დელტაზე. როგორც ვიდეოდან ხედავთ, მე შევძელი ამის არქივირება, გაზომვების ზედა ნაწილის გარდა.

ვიმედოვნებ, რომ მოგეწონათ ეს ინსტრუქცია და გამაგებინეთ თქვენი აზრი!

გირჩევთ: