Voltmeter ammeter sa arduino na may color display. Bluetooth voltmeter batay sa arduino

Inilarawan kung paano mag-assemble ng isang homemade double voltmeter batay sa platform Arduino UNO gamit ang 1602A LCD display. Sa ilang mga kaso, kinakailangan upang sukatin ang dalawang pare-parehong boltahe nang sabay-sabay at ihambing ang mga ito. Maaaring kailanganin ito, halimbawa, kapag nag-aayos o nag-aayos ng stabilizer DC boltahe upang sukatin ang boltahe sa input at output nito, o sa iba pang mga kaso.

Diagram ng eskematiko

Gamit ang isang unibersal na microcontroller ARDUINO module Ang UNO at isang two-line na LCD display type 1602A (batay sa HD44780 controller) ay madaling makagawa ng ganoong device. Sa isang linya ipapakita nito ang boltahe U1, sa kabilang linya - ang boltahe U2.

kanin. 1. Diagram ng eskematiko dobleng voltmeter na may 1602A display sa Arduino UNO.

Ngunit, una sa lahat, nais kong ipaalala sa iyo na ang ARDUINO UNO ay isang medyo murang handa na module - isang maliit na PCB, kung saan matatagpuan ang ATMEGA328 microcontroller, pati na rin ang lahat ng "harness" nito na kinakailangan para sa operasyon nito, kabilang ang isang USB programmer at power supply.

Para sa mga hindi pamilyar sa ARDUINO UNO, ipinapayo ko sa inyo na basahin muna ang mga artikulong L.1 at L.2. Ang circuit ng isang double voltmeter ay ipinapakita sa Fig. 1. Ito ay dinisenyo upang sukatin ang dalawang boltahe mula 0 hanggang 100V (halos hanggang 90V).

Tulad ng makikita mula sa diagram, hanggang sa mga digital port na D2-D7 ARDUINO boards Ang UNO ay konektado sa liquid crystal display module H1 type 1602A. Ang LCD indicator ay pinapagana ng isang 5V voltage stabilizer na matatagpuan sa 5V voltage stabilizer board.

Ang mga sinusukat na boltahe ay ibinibigay sa dalawang analog input na A1 at A2. Mayroong anim na analog input sa kabuuan, A0-A5, maaari kang pumili ng alinman sa dalawa sa mga ito. SA sa kasong ito, A1 at A2 ang napili. Ang boltahe sa mga analog port ay maaari lamang maging positibo at lamang sa hanay mula sa zero hanggang sa microcontroller supply boltahe, iyon ay, sa nominally, hanggang sa 5V.

Ang output ng analog port ay na-convert sa digital form ng ADC ng microcontroller. Upang makuha ang resulta sa mga yunit ng volts, kailangan mong i-multiply ito ng 5 (sa pamamagitan ng reference na boltahe, iyon ay, sa pamamagitan ng supply boltahe ng microcontroller) at hatiin ng 1024.

Upang masukat ang mga boltahe na mas malaki kaysa sa 5V, o sa halip, mas malaki kaysa sa supply ng boltahe ng microcontroller, dahil ang aktwal na boltahe sa output ng 5-volt stabilizer sa ARDUINO UNO board ay maaaring mag-iba sa 5V, at karaniwan ay isang maliit na mas mababa, kailangan mong gumamit ng maginoo resistive divider sa input. Narito ang mga ito ay boltahe dividers sa mga resistors R1, R3 at R2, R4.

Sa kasong ito, upang dalhin ang mga pagbabasa ng aparato sa tunay na halaga ng boltahe ng input, kailangan mong itakda sa programa ang paghahati ng resulta ng pagsukat sa pamamagitan ng division coefficient ng resistive divider. At ang division coefficient, sabihin nating "K," ay maaaring kalkulahin gamit ang sumusunod na formula:

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

ayon sa pagkakabanggit para sa iba't ibang pasukan dobleng voltmeter.

Napaka-interesante na ang mga resistors sa mga divider ay hindi kinakailangang maging mataas ang katumpakan. Maaari kang kumuha ng mga ordinaryong resistor, pagkatapos ay sukatin ang kanilang aktwal na paglaban sa isang tumpak na ohmmeter, at palitan ang mga sinusukat na halaga sa formula. Makukuha mo ang value na "K" para sa isang partikular na divisor, na kakailanganing i-substitute sa formula.

Programa ng Voltmeter

Ang C++ program ay ipinapakita sa Figure 2.

kanin. 2. Source code ng programa.

Para makontrol ang LCD indicator, napagpasyahan na gumamit ng mga port D2 hanggang D7 ng ARDUINO UNO board. Sa prinsipyo, ang iba pang mga port ay posible, ngunit ito ay kung paano ako nagpasya na gamitin ang mga ito.

Upang ang indicator ay makipag-ugnayan sa ARDUINO UNO, kailangan mong mag-load ng subroutine sa program para makontrol ito. Ang ganitong mga gawain ay tinatawag na "mga aklatan", at mayroong maraming iba't ibang "mga aklatan" sa ARDUINO UNO software suite. Upang gumana sa isang LCD indicator batay sa HD44780, kailangan mo ang LiquidCrystal library. Samakatuwid, ang programa (Talahanayan 1) ay nagsisimula sa pamamagitan ng pag-load sa library na ito:

Ang linyang ito ay nagbibigay ng utos na mag-load sa ARDUINO UNO aklatang ito. Susunod, kailangan mong magtalaga ng mga port ng ARDUINO UNO na gagana sa indicator ng LCD. Pinili ko ang mga port D2 hanggang D7. Maaari kang pumili ng iba. Ang mga port na ito ay itinalaga ng linya:

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

Pagkatapos nito, ang programa ay nagpapatuloy sa aktwal na operasyon ng voltmeter. Upang sukatin ang boltahe, napagpasyahan na gumamit ng mga analog input na A1 at A2. Ang mga input na ito ay ibinibigay sa mga linya:

int analogInput=1;

int analogInput1=2;

Upang basahin ang data mula sa mga analog port, gamitin ang analogRead function. Ang pagbabasa ng data mula sa mga analog port ay nangyayari sa mga linya:

vout=analogRead(analogInput);

voutl=analogRead(analoglnput1);

Pagkatapos, ang aktwal na boltahe ay kinakalkula na isinasaalang-alang ang dibisyon ratio ng input boltahe divider:

volt=vout*5.0/1024.0/0.048 ;

volt1=vout1*5.0/1024.0/0.048;

Sa mga linyang ito, ang bilang na 5.0 ay ang boltahe sa output ng stabilizer ng ARDUINO UNO board. Sa isip, ito ay dapat na 5V, ngunit para sa voltmeter upang gumana nang tumpak, ang boltahe na ito ay dapat munang masukat. Ikonekta ang pinagmumulan ng kuryente at sukatin ang boltahe ng +5V sa POWER connector ng board gamit ang isang medyo tumpak na voltmeter. Ano ang mangyayari, pagkatapos ay ipasok ang mga linyang ito sa halip na 5.0, halimbawa, kung mayroong 4.85V, ang mga linya ay magiging ganito:

volt=vout*4.85/1024.0/0.048;

volt1=vout1*4.85/1024.0/0.048;

Sa susunod na yugto, kakailanganin mong sukatin ang aktwal na mga paglaban ng mga resistors R1-R4 at tukuyin ang K coefficients (ipinahiwatig bilang 0.048) para sa mga linyang ito gamit ang mga formula:

K1 = R3 / (R1+R3) at K2 = R4 / (R2+R4)

Sabihin nating K1 = 0.046, at K2 = 0.051, kaya isusulat namin:

volt=vout*4.85/1024.0/0.046 ;

volt1=vout1*4.85/1024.0/0.051;

Kaya, dapat gawin ang mga pagbabago sa teksto ng programa ayon sa aktwal na boltahe sa output ng 5-volt stabilizer ng ARDUINO UNO board at ayon sa aktwal na division coefficient ng resistive divider. Pagkatapos nito, gagana nang tumpak ang device at hindi mangangailangan ng anumang pagsasaayos o pagkakalibrate.

Sa pamamagitan ng pagbabago ng mga dibisyon coefficient ng resistive divider (at, nang naaayon, ang "K" coefficients), maaari kang gumawa ng iba pang mga limitasyon sa pagsukat, at hindi palaging pareho para sa parehong mga input.

Karavkin V. RK-2017-01.

Panitikan:

  1. Karavkin V. - Flasher ng Christmas tree sa ARDUINO bilang isang lunas sa takot sa mga microcontroller. RK-11-2016.
  2. Karavkin V. - Frequency meter sa ARDUINO. RK-12-2016.

Paunang data at rebisyon

Kaya sa puntong ito mayroon kaming pare-parehong boltahe ng boltahe na may limitasyon na 0..20V (tingnan ang nakaraang bahagi). Ngayon ay nagdaragdag kami ng 0..5a ammeter dito. Upang gawin ito, bahagyang binago namin ang circuit - ito ay magiging isang pass-through circuit, iyon ay, mayroon itong parehong input at isang output.

Inalis ko ang bahagi tungkol sa display sa LCD - hindi ito magbabago. Talaga basic bagong elemento- Rx shunt sa 0.1 Ohm. Ang R1-C1-VD1 chain ay nagsisilbing protektahan ang analog input. Makatuwirang i-install ang pareho sa input A0. Dahil ipinapalagay namin na medyo malalaking alon, may mga kinakailangan sa pag-install - ang mga linya ng kuryente ay dapat gawin gamit ang isang medyo makapal na kawad at direktang konektado sa mga shunt terminal (sa madaling salita, soldered), kung hindi man ang mga pagbabasa ay malayo sa katotohanan. Mayroon ding tala sa kasalukuyang - sa prinsipyo, ang isang reference na boltahe ng 1.1V ay nagpapahintulot sa iyo na irehistro ito sa shunt 0.1 Ohm kasalukuyang hanggang sa 11 amperes na may katumpakan na bahagyang mas masahol kaysa sa 0.01a, ngunit kapag ang naturang boltahe ay bumaba sa Rx, ang inilabas na kapangyarihan ay lalampas sa 10 W, na hindi nakakatuwa. Upang malutas ang problema, maaari kang gumamit ng amplifier na may gain na 11 gamit ang mataas na kalidad na op-amp at isang 10 mOhm (0.01 Ohm) shunt. Ngunit sa ngayon ay hindi namin gagawing kumplikado ang aming buhay at limitahan lamang ang kasalukuyang sa 5A (sa kasong ito, ang kapangyarihan ng Rx ay maaaring mapili sa pagkakasunud-sunod ng 3-5 W).

Sa yugtong ito, isang sorpresa ang naghihintay sa akin - lumabas na ang ADC ng controller ay may medyo malaking zero offset - mga -3mV. Iyon ay, ang ADC ay hindi nakakakita ng mga signal na mas mababa sa 3 mV, at ang mga signal ng isang bahagyang mas mataas na antas ay makikita na may katangian na hindi tumpak na -3 mV, na sumisira sa linearity sa simula ng hanay. Ang isang mabilis na paghahanap ay hindi nagbigay ng anumang malinaw na mga sanggunian sa naturang problema (normal ang isang zero offset, ngunit ito ay dapat na makabuluhang mas maliit), kaya ito ay lubos na posible na ito ay isang problema sa isang tiyak na Atmega 328 halimbawa Ang solusyon na pinili ko ay twofold - sa boltahe - isang hakbang ng software sa simula ng hanay (ang display ay nagsisimula sa 0.06 volts), para sa kasalukuyang - isang pull-up na risistor sa 5V bus. Ang risistor ay ipinahiwatig ng isang tuldok na linya.

Source code

Ang buong bersyon ng volt-ampere meter na ito (sa bersyon ng I2C) ay maaaring ma-download mula sa link sa dulo ng artikulo. Susunod na ipapakita ko ang mga pagbabago sa source code. Idinagdag ang pagbabasa ng analog input A1 na may parehong average na para sa voltmeter. Sa esensya, ito ay ang parehong voltmeter, walang divider lamang, at nakakakuha kami ng mga amperes gamit ang formula ng Ohm: I = U / Rx (halimbawa, kung ang boltahe ay bumaba sa Rx = 0.01 V, kung gayon ang kasalukuyang ay 0.1A). Ipinakilala ko rin ang kasalukuyang gain constant na AmpMult - para sa hinaharap. Ang AmpRx constant na may shunt resistance ay malamang na kailangang itugma upang isaalang-alang ang hindi kawastuhan ng shunt resistor. Well, dahil isa na itong volt-ampere meter at may natitira pang espasyo sa 1602 display, nananatili itong ipakita ang kasalukuyang pagkonsumo ng kuryente sa watts, na nakakakuha ng simpleng karagdagang pag-andar.

.... // Analog input #define PIN_VOLT A0 #define PIN_AMP A1 // Internal reference voltage (piliin) const float VRef = 1.10; // Input resistive divider coefficient (Rh + Rl) / Rl. SA 0.2) InVolt += 3;

// Convert to volts (In: 0..1023 -> (0..VRef) scaled by Mult) float Volt = InVolt * VoltMult * VRef / 1023;

  • float Amp = InAmp * VRef / AmpMult / AmpRx / 1023 ;

// Para isaalang-alang ang pagbaba sa shunt, alisin sa komento ang 2 linya //float RxVolt = InAmp * VRef / 1023 / AmpMult; // Volt -= RxVolt; lumutang Watt = Volt * Amp; // Output data lcd.setCursor (8, 0); lcd.print(Watt);


lcd.print("W "); lcd.setCursor(0, 1); lcd.print(Volt);
lcd.print("V ");
lcd.setCursor(8, 1);
lcd.print(Amp);
lcd.print("A "); )
Mga link
LiquidCrystal_I2C library, na nagbibigay-daan sa iyong itakda ang pinout

Hello, Habr! Ngayon gusto kong ipagpatuloy ang paksa ng "pagtawid" sa arduino at android. SA

nakaraang publikasyon
Napag-usapan ko ang tungkol sa bluetooth machine, at ngayon ay pag-uusapan natin ang tungkol sa DIY
bluetooth voltmeter
lumutang R1 = 100000.0; //Baterya Vin-> 100K -> A0
lumutang R2 = 10000.0; //Baterya Gnd -> Arduino Gnd at Arduino Gnd -> 10K -> A0
int value = 0;

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

Void loop() (
halaga = analogRead(analogInput);
val = (value * 4.7) / 1024.0;
boltahe = val / (R2/(R1+R2));
Serial.println(boltahe);
pagkaantala(500);
}


Arduino Uno
Bluetooth module
Pangatlong kaso. Kapag kailangan mong makakuha ng mas tumpak na impormasyon tungkol sa boltahe, dapat mong gamitin bilang isang reference na boltahe hindi ang supply ng boltahe, na maaaring bahagyang mag-iba kapag pinalakas ng isang baterya, halimbawa, ngunit ang boltahe ng panloob na Arduino stabilizer na 1.1 volts Ang circuit ay pareho dito, ngunit ang code ay medyo mas mahaba. Hindi ko susuriin nang detalyado ang pagpipiliang ito, dahil ito ay mahusay na inilarawan sa mga pampakay na artikulo, ngunit ang pangalawang paraan ay sapat na para sa akin, dahil ang aking power supply ay matatag, mula sa USB port ng laptop.
Kaya inayos namin ang pagsukat ng boltahe, ngayon ay lumipat tayo sa ikalawang kalahati ng proyekto: paglikha ng isang Android application. Gagawin namin ang application nang direkta mula sa browser sa visual development environment para sa mga Android application App Inventor 2. Pumunta sa website appinventor.mit.edu/explore, mag-log in gamit ang iyong Google account, i-click ang button na gumawa, bagong proyekto, at sa pamamagitan ng simpleng drag at drop mga elemento na nilikha namin ng isang bagay tulad ng disenyo na ito:

Napakasimple kong ginawa ang mga graphics, kung may gustong mas kawili-wiling mga graphics, hayaan mong ipaalala ko sa iyo na para dito kailangan mong gumamit ng mga .png file na may transparent na background sa halip na .jpeg file.
Pumunta ngayon sa tab na Blocks at lumikha ng logic ng application doon tulad nito:


Kung gumagana ang lahat, maaari mong i-click ang pindutang Bumuo at i-save ang .apk sa aking computer, at pagkatapos ay i-download at i-install ang application sa iyong smartphone, bagama't may iba pang mga paraan upang i-upload ang application. dito ito ay mas maginhawa para sa sinuman. Bilang resulta, natapos ko ang application na ito:


Naiintindihan ko na kakaunti ang gumagamit ng App Inventor 2 visual development environment para sa mga Android application sa kanilang mga proyekto, kaya maraming tanong ang maaaring lumabas tungkol sa pagtatrabaho dito. Upang alisin ang ilan sa mga tanong na ito, ginawa ko detalyadong video, tungkol sa kung paano gumawa ng naturang application "mula sa simula" (upang matingnan ito kailangan mong pumunta sa YouTube):

P.S. Isang koleksyon ng higit sa 100 mga materyal na pang-edukasyon sa Arduino para sa mga nagsisimula at propesyonal

Sa ilang mga karagdagan.

Ang isang maliit na kilalang tampok ng Arduino at marami pang ibang AVR chips ay ang kakayahang sukatin ang panloob na 1.1 V reference voltage. Ang tampok na ito ay maaaring gamitin para sa pagtaas ng katumpakan Mga function ng Arduino - analogRead kapag gumagamit karaniwang boltahe ng sanggunian na 5 V (sa mga platform na may boltahe ng supply na 5 V) o 3.3 V (sa mga platform na may boltahe ng supply na 3.3 V).Maaaring siya rin ginagamit sa pagsukat Inilapat ang Vcc sa chip, na nagbibigay paraan ng kontrol boltahe ng baterya nang hindi gumagamit mahalagang mga analog na pin.

Pagganyak

At least meron hindi bababa sa dalawang dahilan para sa pagsukat supply ng boltahe aming Arduino (Vcc). Isa na rito ang ating battery powered project kung gusto nating subaybayan ang level ng boltahe ng baterya. Bilang karagdagan, kapag ang lakas ng baterya (Vcc) ay hindi maaaring maging 5.0 volts (halimbawa, ang kapangyarihan mula sa 3 mga cell ay 1.5 V), at gusto naming gawin mga sukat ng analog mas tumpak - dapat nating gamitin ang alinman sa panloob na 1.1 V na sanggunian o panlabas na pinagmulan reference na boltahe. Bakit?

Karaniwang ipagpalagay kapag gumagamit ng analogRead() na ang analog supply ng boltahe ng controller ay 5.0 volts, kapag sa katotohanan ay maaaring hindi ito ang kaso sa lahat (halimbawa, isang power supply mula sa 3 elemento ay 1.5 V). Ang opisyal na dokumentasyon ng Arduino ay maaaring humantong sa amin sa maling palagay na ito. Ang punto ay ang kapangyarihan ay hindi kinakailangang 5.0 volts, anuman ang kasalukuyang antas ang kapangyarihang ito ay inilalapat sa Vcc ng chip. Kung ang aming power supply ay hindi na-stabilize o kung kami ay tumatakbo sa lakas ng baterya, ang boltahe na ito ay maaaring mag-iba nang kaunti. Narito ang isang halimbawa ng code na naglalarawan ng problemang ito:

Dobleng Vcc = 5.0; // not necessarily true int value = analogRead(0); / basahin ang mga pagbabasa mula sa A0 double volt = (value / 1023.0) * Vcc; // true lang kung Vcc = 5.0 volts Upang tumpak na masukat ang boltahe, kailangan ng tumpak na reference na boltahe. Karamihan sa mga AVR chip ay nagbibigay ng tatlong sanggunian sa boltahe:

  • 1.1 in mula sa panloob na pinagmulan, sa dokumentasyon ito ay pumasa bilang isang bandgap reference (ang ilan sa mga ito ay 2.56 V, halimbawa ATMega 2560). Ang pagpili ay ginawa ng analogReference() function na may INTERNAL parameter: analogReference(INTERNAL) ;
  • panlabas na pinagmumulan ng reference na boltahe, na may label na AREF sa arduino. Piliin ang: analogReference(EXTERNAL);
  • Ang Vcc ay ang power supply ng controller mismo. Piliin ang: analogReference(DEFAULT).

Sa Arduino hindi mo lang maikonekta ang Vcc sa analog pin nang direkta - bilang default, ang AREF ay konektado sa Vcc at palagi kang makakakuha pinakamataas na halaga 1023, kahit anong boltahe ang ginagamit mo. Ang pagkonekta sa AREF sa isang mapagkukunan ng boltahe na may dating kilala, matatag na boltahe ay nakakatulong, ngunit ito ay dagdag na elemento sa diagram.

Maaari mo ring ikonekta ang Vcc sa AREF sa pamamagitan ng diode: Ang pagbaba ng boltahe sa diode ay alam nang maaga, kaya ang pagkalkula ng Vcc ay hindi mahirap. Gayunpaman, na may tulad na isang circuit sa pamamagitan ng isang diode patuloy na dumadaloy ang kasalukuyang, nagpapaikli sa buhay ng baterya, na hindi rin masyadong maganda.

Ang isang panlabas na sanggunian ng boltahe ay ang pinakatumpak, ngunit nangangailangan ng karagdagang hardware. Ang panloob na ION ay stable ngunit hindi tumpak +/- 10% deviation. Ang Vcc ay ganap na hindi maaasahan sa karamihan ng mga kaso. Ang pagpili ng panloob na sanggunian ng boltahe ay mura at matatag, ngunit kadalasan, gusto naming sukatin ang higit pang boltahe kaysa sa 1.1V, kaya ang paggamit ng Vcc ay ang pinakapraktikal, ngunit posibleng hindi gaanong tumpak. Sa ilang mga kaso maaari itong maging lubhang hindi mapagkakatiwalaan!

Paano ito gagawin

Maraming AVR chips kabilang ang ATmega at ATtiny series ang nagbibigay ng paraan ng pagsukat ng internal reference voltage. Bakit kailangan ito? Ang dahilan ay simple - sa pamamagitan ng pagsukat ng panloob na boltahe, matutukoy natin ang halaga ng Vcc. Ganito:

  1. Itakda ang default na sanggunian ng boltahe: analogReference(DEFAULT); . Ginagamit namin ang Vcc bilang mapagkukunan.
  2. Kumuha ng mga pagbabasa ng ADC para sa panloob na 1.1 V na pinagmulan.
  3. Kalkulahin ang halaga ng Vcc batay sa 1.1 V na pagsukat gamit ang formula:

Vcc * (pagbabasa ng ADC) / 1023 = 1.1 V

Ano ang sumusunod:

Vcc = 1.1 V * 1023 / (pagbabasa ng ADC)

Pagsasama-sama ng lahat at makuha namin ang code:

mahabang readVcc() ( // Basahin ang 1.1V reference laban sa AVcc // itakda ang reference sa Vcc at ang pagsukat sa panloob na 1.1V reference #if tinukoy(__AVR_ATmega32U4__) || tinukoy(__AVR_ATmega1280__) || tinukoy(__AVR_ATmega2560__) ADMUX = . (REFS0) |. _BV(MUX3) |. _BV(MUX1); else ADMUX = _BV(MUX3) |. _BV(MUX1); #endif delay(75); ); ADCL; // dapat basahin muna ang ADCL - pagkatapos ay i-lock ang ADCH uint8_t high = ADCH;<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }

Paggamit

Sinusuri ang Vcc o Boltahe ng Baterya

Maaari mong tawagan ang function na ito readVcc() kung gusto mong subaybayan ang Vcc. Ang isang halimbawa ay ang pagsuri sa antas ng singil ng baterya. Magagamit mo rin ito upang matukoy kung nakakonekta ka sa pinagmumulan ng kuryente o tumatakbo sa lakas ng baterya.

Pagsukat ng Vcc para sa reference na boltahe

Maaari mo ring gamitin ito upang makuha ang tamang halaga ng Vcc para magamit sa analogRead() kapag ginagamit mo ang reference na boltahe (Vcc). Maliban kung gagamit ka ng regulated power supply, hindi ka makatitiyak na Vcc = 5.0 volts. Binibigyang-daan ka ng function na ito na makuha ang tamang halaga. May isang caveat bagaman...

Sa isa sa mga artikulo gumawa ako ng isang pahayag na ang function na ito ay maaaring gamitin upang mapabuti ang katumpakan ng mga analog na sukat sa mga kaso kung saan ang Vcc ay hindi masyadong 5.0 volts. Sa kasamaang palad, ang pamamaraang ito ay hindi magbibigay ng tumpak na resulta. Bakit? Depende ito sa katumpakan ng sanggunian ng panloob na boltahe. Ang pagtutukoy ay nagbibigay ng nominal na boltahe na 1.1 volts, ngunit nagsasabing maaari itong mag-iba ng hanggang 10%. Ang ganitong mga sukat ay maaaring hindi gaanong tumpak kaysa sa aming Arduino power supply!

Ang pagtaas ng katumpakan

Habang ang malalaking tolerance ng panloob na 1.1V power supply ay makabuluhang nililimitahan ang katumpakan ng mga sukat kapag ginamit sa mass production, para sa mga indibidwal na proyekto ay makakamit natin ang higit na katumpakan. Ito ay madaling gawin sa pamamagitan lamang ng pagsukat ng Vcc gamit ang isang voltmeter at ang aming readVcc() function. Susunod, palitan ang constant 1125300L ng bagong variable:

scale_constant = panloob1.1Ref * 1023 * 1000

panloob1.1Ref = 1.1 * Vcc1 (voltmeter_readings) / Vcc2 (readVcc_function_readings)

Ang naka-calibrate na value na ito ay magiging isang magandang indicator para sa mga sukat ng AVR chip, ngunit maaaring maapektuhan ng mga pagbabago sa temperatura. Huwag mag-atubiling mag-eksperimento sa iyong sariling mga sukat.

Konklusyon

Marami kang magagawa sa maliit na feature na ito. Maaari kang gumamit ng stable na reference na boltahe na malapit sa 5.0V nang hindi aktwal na mayroong 5.0V sa Vcc. Maaari mong sukatin ang boltahe ng iyong baterya o kahit na makita kung ikaw ay nasa lakas ng baterya o nakatigil.

Sa wakas, susuportahan ng code ang lahat ng Arduinos, kabilang ang bagong Leonardo, pati na rin ang ATtinyX4 at ATtinyX5 series chips.

Isang kapaki-pakinabang na diagram ang ipinakita para sa mga gustong mag-eksperimento sa Arduino. Ito ay isang simpleng digital voltmeter na mapagkakatiwalaang sukatin ang boltahe ng DC sa hanay na 0 - 30V. Ang Arduino board, gaya ng dati, ay maaaring paandarin ng 9V na baterya.

Tulad ng malamang na alam mo, ang mga analog input ng Arduino ay maaaring gamitin upang sukatin ang boltahe ng DC sa hanay ng 0 - 5V at ang saklaw na ito ay maaaring tumaas,
gamit ang dalawang resistors bilang boltahe divider. Babawasan ng divider ang sinusukat na boltahe sa antas ng mga Arduino analog input. At pagkatapos ay kalkulahin ng programa ang tunay na halaga ng boltahe.

Nakikita ng analog sensor sa Arduino board ang pagkakaroon ng boltahe sa analog input at kino-convert ito sa digital form para sa karagdagang pagproseso ng microcontroller. Sa figure, ang boltahe ay ibinibigay sa analog input (A0) sa pamamagitan ng isang simpleng boltahe divider na binubuo ng mga resistors R1 (100 kOhm) at R2 (10 kOhm).

Sa mga halaga ng divider na ito, ang Arduino board ay maaaring bigyan ng boltahe mula 0 hanggang
55V. Sa input A0 mayroon kaming sinusukat na boltahe na hinati sa 11, ibig sabihin, 55V / 11=5V. Sa madaling salita, kapag nagsusukat ng 55V sa Arduino input, mayroon kaming maximum na pinahihintulutang halaga na 5V. Sa pagsasagawa, mas mainam na isulat ang saklaw na "0 - ​​30V" sa voltmeter na ito upang manatili ito
Safety margin!

Mga Tala

Kung ang mga pagbabasa ng display ay hindi tumutugma sa mga pagbabasa ng isang pang-industriya (laboratoryo) voltmeter, kung gayon kinakailangan upang sukatin ang mga halaga ng paglaban R1 at R2 gamit ang isang tumpak na instrumento at ipasok ang mga halagang ito sa halip na R1=100000.0 at R2= 10000.0 sa program code. Pagkatapos ay dapat mong sukatin ang tunay na boltahe sa pagitan ng 5V at "Ground" na mga pin ng Arduino board gamit ang isang laboratory voltmeter. Ang resulta ay magiging isang halaga na mas mababa sa 5V, halimbawa, ito ay magiging 4.95V. Ang tunay na halaga na ito ay dapat na maipasok sa linya ng code
vout = (value * 5.0) / 1024.0 sa halip na 5.0.
Gayundin, subukang gumamit ng precision resistors na may 1% tolerance.

Ang mga resistors R1 at R2 ay nagbibigay ng ilang proteksyon laban sa tumaas na mga boltahe ng input, gayunpaman, tandaan na ang anumang mga boltahe sa itaas ng 55V ay maaaring makapinsala sa Arduino board. Bilang karagdagan, ang disenyo na ito ay hindi nagbibigay ng iba pang mga uri ng proteksyon (mula sa power surges, mula sa polarity reversal o overvoltage).

Programa ng digital voltmeter

/*
DC Voltmeter
Isang Arduino DVM batay sa konsepto ng divider ng boltahe
T.K.Hareendran
*/
#isama
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
lumutang R1 = 100000.0; // paglaban ng R1 (100K) -tingnan ang teksto!
lumutang R2 = 10000.0; // paglaban ng R2 (10K) - tingnan ang teksto!
int value = 0;
void setup())(
pinMode(analogInput, INPUT);
lcd.begin(16, 2);
lcd.print("DC VOLTMETER");
}
void loop()
// basahin ang halaga sa analog input
halaga = analogRead(analogInput);
vout = (value * 5.0) / 1024.0; // tingnan ang teksto
vin = vout / (R2/(R1+R2));
kung (vin<0.09) {
vin=0.0;//statement para iwaksi ang hindi gustong pagbabasa !
}
lcd.setCursor(0, 1);
lcd.print(“INPUT V= “);
lcd.print(vin);
pagkaantala(500);
}

Schematic diagram ng Arduino-voltmeter

Listahan ng mga sangkap

Arduino Uno board
100 kOhm risistor
10 kOhm risistor
100 ohm risistor
10kOhm Trimmer Resistor
LCD display 16?2 (Hitachi HD44780)