Satura rādītājs:

Arduino precīzs un precīzs voltu mērītājs (0-90V DC): 3 soļi
Arduino precīzs un precīzs voltu mērītājs (0-90V DC): 3 soļi

Video: Arduino precīzs un precīzs voltu mērītājs (0-90V DC): 3 soļi

Video: Arduino precīzs un precīzs voltu mērītājs (0-90V DC): 3 soļi
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Novembris
Anonim

Šajā pamācībā esmu izveidojis voltmetru, lai relatīvi precīzi un precīzi izmērītu augstspriegumu līdzstrāvu (0-90v), izmantojot Arduino Nano.

Manis veiktie testa mērījumi bija pietiekami precīzi, galvenokārt 0,3 V robežās no faktiskā sprieguma, kas izmērīts ar standarta voltmetru (es izmantoju Astro AI DM6000AR). Tas ir pietiekami tuvu manam paredzētajam ierīces lietojumam.

Lai to arhivētu, es izmantoju sprieguma atskaiti (4.096v) un sprieguma dalītāju.

Koda pusē es, protams, izmantoju opciju "ārējā atsauce" Arduino Nano un piemēru "Izlīdzināšana" Arduino apmācībās.

Piegādes

1 x Arduino Nano - saite

1 x Oled displejs (SSD 1306) - saite

1 x 1/4W 1% Rezistori - 1k omi - Saite

1 x 1/4W 1% Rezistori - 220k omi - Saite

1 x 1/4W 1% Rezistori - 10k omi - Saite

1 x 4.096v LM4040DIZ -4.1 Sprieguma atsauce - saite

Maizes dēlis un vadi - saite

Astro AI DM6000AR - saite

USB barošanas banka - saite

9V baterijas - saite

CanadianWinters ir dalībnieks Amazon Services LLC Associates programmā - saistītajā reklāmas programmā, kuras mērķis ir nodrošināt vietnēm iespēju nopelnīt maksu, izveidojot saiti uz vietni Amazon.com un saistītajām vietnēm. Izmantojot šīs saites, es kā Amazon asociētais partneris nopelnu no kvalificētiem pirkumiem, pat ja jūs pērkat kaut ko citu-un tas jums neko nemaksās.

1. darbība: shēmas

Shēmas
Shēmas
Shēmas
Shēmas

Es savienoju visas detaļas saskaņā ar iepriekš minēto shēmu. Jo īpaši es izvēlējos 4.096 sprieguma atskaiti, lai paliktu pēc iespējas tuvāk 5v atzīmei, lai izvairītos no izšķirtspējas zaudēšanas.

Pēc datu lapas es izvēlējos sprieguma atsaucei 1K omu rezistoru, lai gan varētu izmantot citu vērtību. Spriegums atsaucei tiek piegādāts no Nano 5v tapas.

Ķēdes ideja ir tāda, ka mērāmais līdzstrāvas spriegums iet caur sprieguma rezistoru. Mērogotais spriegums un pēc tam nokļūst Arduino analogajā tapā, lai ņemtu paraugus, izlīdzinātu, mainītu mērogu un parādītu OLed displejā.

Es centos visu padarīt vienkāršu:)

2. solis: koda un rezistoru aprēķini

Rezistoru vērtības tika izvēlētas, kā ieteicams (ja nemaldos, tas ir norādīts Arduino/Atmega datu lapā), lai pretestība būtu zemāka par 10 k omi.

Lai vienkāršotu lietas, es izveidoju izklājlapu, kas automatizē aprēķinus, ja vēlaties izmantot dažādas rezistoru vērtības: Saite uz Google lapu

Šeit ir kods, ko izmantoju šim projektam:

#iekļaut

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (rotācija, [atiestatīšana]) pludiņa spriegums = 0; // izmanto sprieguma vērtības pludiņa saglabāšanai Radjust = 0,043459459; // Sprieguma dalītāja koeficients (R2 /R1+R2) pludiņš vbat = 0; // gala spriegums pēc kalciem- akumulatora pludiņa spriegums Vref = 4.113; // Sprieguma atsauce - izmērītā reālā vērtība. Nominālā vērtība 4,096v const int numReadings = 50; // lasāmo paraugu skaits - palieliniet, lai panāktu lielāku izlīdzināšanu. Samazināt ātrākai lasīšanai. int rādījumi [numReadings]; // nolasījumi no analogās ieejas int readIndex = 0; // pašreizējā nolasījuma indekss neparakstīts garais kopējais = 0; // skriešanas kopējais int vidējais = 0; // mainīgie ekrāna atsvaidzināšanai, neizmantojot kavēšanos unsigned long previousMillis = 0; // saglabās pēdējo reizi, kad ekrāns tika atjaunināts // konstantes nemainīsies: const long interval = 50; // intervāls, kurā atsvaidzināt ekrānu (milisekundes) void setup (void) {analogReference (EXTERNAL); // atsauces spriegumam 4.096 izmantojiet AREF. Mans atsauces reālais spriegums ir 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… ietiniet līdz sākumam: readIndex = 0; } // aprēķināt vidējo: vidējais = (kopā / numReadings); spriegums = vidējs * (Vref / 1023.0); //4.113 ir Vref vbat = spriegums/Radjust; // Ekrāna atsvaidzināšanas aizkaves iestatīšana, izmantojot Millis if (currentMillis - previousMillis> = intervāls) {// saglabāt pēdējo reizi, kad ekrāns tika atjaunināts iepriekšMillis = currentMillis; u8g2.clearBuffer (); // notīrīt iekšējo izvēlni // Pack Voltage display u8g2.setFont (u8g2_font_fub20_tr); // 20 pikseļu fonts u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px fonts u8g2.setCursor (76, 20); u8g2.print ("Volti"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Precīzs spriegums"); } u8g2.sendBuffer (); // pārsūtīt iekšējo atmiņu uz displeja aizkavi (1); }

Lūdzu, ņemiet vērā, ka esmu nedaudz sarūsējis ar Arduino kodēšanu, tādēļ, ja atrodat kādu kļūdu vai veidu, kā uzlabot kodu, esmu atvērts ieteikumiem:)

3. darbība: pārbaudīsim

Pārbaudīsim!
Pārbaudīsim!
Pārbaudīsim!
Pārbaudīsim!
Pārbaudīsim!
Pārbaudīsim!

Lai pārbaudītu šo voltmetru, es izmantoju 8x 9v baterijas, kuras es saņēmu vietējā veikalā. Es plānoju izmantot šo voltmetru, lai izmērītu spriegumu manos elektrisko velosipēdu akumulatoros (tiem ir spriegums no 24 līdz 60 V ar neregulāriem 72 V spriegumiem).

Kad elektronika ir iesaiņota PCB un nelielā kastē, tas padarīs jauku un pārnēsājamu akumulatora mērītāju. OLED grafiku un fontus var pielāgot jūsu vajadzībām (piemēram, lielāks fonts ērtai lasīšanai).

Mans mērķis bija panākt sprieguma nolasīšanu Oled/Arduino skaitītājā, kas nav pārāk tālu no mana digitālā multimetra. Man bija mērķis +/- 0, 3v max delta. Kā redzat no videoklipa, es varēju to arhivēt, izņemot mērījumu augšējo galu.

Es ceru, ka jums patika šī pamācība un dariet man zināmu savas domas!

Ieteicams: