Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • TV (Smart TV)
  • Voltmetër dixhital në Arduino me lidhje me PC nëpërmjet portës serike. Voltmetër sekret në Arduino - matja e tensionit të baterisë duke përdorur një mikrokontrollues

Voltmetër dixhital në Arduino me lidhje me PC nëpërmjet portës serike. Voltmetër sekret në Arduino - matja e tensionit të baterisë duke përdorur një mikrokontrollues

A ka raste kur dëshironi të kontrolloni tensionin ose ndonjë pikë në një qark, por nuk keni një voltmetër ose multimetër në dispozicion? Vraponi për të blerë? Është e gjatë dhe e shtrenjtë. Përpara se ta bëni këtë, si të bëni voltmetrin tuaj? Në fakt, me komponentë të thjeshtë, mund ta bëni vetë.

  • Në tutorial, ne përdorëm një tabelë të pajtueshme me Arduino - SunFounder Uno / Mars (http://bit.ly/2tkaMba)
  • Kabllo USB të dhënash
  • 2 potenciometra (50k)
  • LCD1602 - http://bit.ly/2ubNEfi
  • Breadboard - http://bit.ly/2slvfrB
  • Kërcim të shumëfishtë

Para se të lidhemi, le të kuptojmë fillimisht se si funksionon.

Përdorni tabelën SunFounder Uno për pjesën kryesore të përpunimit të të dhënave të voltmetrit, LCD1602 si ekran, një potenciometër për të rregulluar kontrastin LCD dhe tjetrën për të ndarë tensionin.

Kur rrotulloni një potenciometër të lidhur me tabelën Uno, rezistenca e potenciometrit ndryshon, duke ndryshuar kështu tensionin në të. Sinjali i tensionit do të dërgohet në bordin Uno përmes pinit A0, dhe Uno do të konvertojë sinjalin analog të marrë në formë dixhitale dhe do të shkruajë në LCD. Kështu që ju mund të shihni vlerën e tensionit në rezistencën e kapacitetit aktual.

LCD1602 ka dy mënyra funksionimi: 4-bit dhe 8-bit. Kur IO e MCU është e pamjaftueshme, mund të zgjidhni modalitetin 4-bit, i cili përdor vetëm kunjat D4 ~ D7.

Ndiqni tabelën për t'i lidhur ato.

Hapi 4: Lidhni potenciometrin me LCD1602

Lidhni kunjin e mesit të potenciometrit me pinin Vo në LCD1602 dhe cilindo nga kunjat e tjera me GND.

Lidhni kunjin e mesit të potenciometrit me pinin A0 të SunFounder Uno dhe njërën nga të tjerat në 5V ndërsa tjetra është me GND.

Hapi 6: Ngarkimi i kodit

Kodi si ky:

#përfshi /************************************************ ***** *****/ const int analogIn = A0;//potenciometër bashkëngjitni LCD-në A0 LiquidCrystal (4, 6, 10, 11, 12, 13);//LCd(RS,E,D4,D5 ,D6.D7) float val = 0;// përcaktoni variablin si vlerë=0 /******************************** ***** *****************/ void setup() ( Serial.begin(9600);//Inicializoni serialin lcd.begin(16, 2);/ / vendosni pozicionin e karaktereve në LCD si Linja 2, Kolona 16 lcd.print("Vlera e tensionit:");//print "Vlera e tensionit:" ) /**************** ***** ****************************************/ void loop() ( val = analogLexo (A0);//Lexo vlerën e potenciometrit në val val = val/1024*5.0;// Konverto të dhënat në vlerën përkatëse të tensionit në mënyrë matematikore Serial.print(val);//Print numrin e val në monitorin serik Serial.print ("V"); // printoni njësinë si V, shkurt për tension në monitorin serik LCD setCursor(6,1); // Vendoseni kursorin në rreshtin 1, kolona 6. Nga këtu duhet të shfaqen karakteret lcd.print(val);//Print numrin e v al në LCD lcd.print("V");//Më pas printoni njësinë si V, shkurt për tension në vonesën LCD(200); //Prisni për 200 ms)

Rrotulloni potenciometrin për të kontrolluar tensionin në LCD1602 në kohë reale.

Këtu është një e ndërlikuar. Pasi ekzekutova kodin, LCD tregoi simbole. Më pas rregullova kontrastin e ekranit (ndryshimi gradual nga e zeza në të bardhë) duke e rrotulluar potenciometrin në drejtim të akrepave të orës ose në të kundërt derisa ekrani t'i shfaqte qartë karakteret.

Merrni dy bateri për të matur tensionin e tyre: 1,5 V dhe 3,7 V. Shkëputni lidhjen e potenciometrit të dytë me pinin A0 dhe GND, që do të thotë të hiqni potenciometrin nga qarku. Mbërtheni fundin e telit A0 në anodin e baterisë dhe qarkun GND në katodë. MOS i lidhni sërish në prizë përndryshe do të lidhni të shkurtër baterinë. Vlera 0V është lidhja e kundërt.

Pra, voltazhi i baterisë shfaqet në LCD. Mund të ketë ndonjë gabim midis vlerës dhe asaj nominale sepse bateria nuk është e ngarkuar plotësisht. Dhe kjo është arsyeja pse unë duhet të masë tensionin për të kuptuar nëse mund ta përdor baterinë apo jo.

PS: Nëse keni probleme me ekranin, shihni këtë FAQ për LCD - http://wiki.sunfounder.cc/index.php?title=LCD1602/I2C_LCD1602_FAQ.

Ky artikull tregon se si të lidhni Arduino dhe PC dhe të transferoni të dhëna nga ADC në PC. Programi Windows është shkruar duke përdorur Visual C++ 2008 Express. Programi i voltmetrit është shumë i thjeshtë dhe ka shumë vend për përmirësim. Qëllimi i tij kryesor ishte të tregonte punën me portën COM dhe shkëmbimin e të dhënave midis kompjuterit dhe Arduino.

Komunikimi midis Arduino dhe PC:

  • Marrja e leximeve nga ADC fillon kur kompjuteri dërgon komandat 0xAC dhe 0x1y te Arduino. – Numri i kanalit ADC (0-2);
  • Leximi ndalon pasi Arduino merr komandat 0xAC dhe 0x00;
  • Gjatë leximit, Arduino dërgon komandat 0xAB 0xaa 0xbb në kompjuter çdo 50 ms, ku aa dhe bb janë matjet maksimale dhe minimale.

Program për Arduino

Mund të lexoni më shumë rreth komunikimit serial në arduino.cc. Programi është mjaft i thjeshtë, shumica e tij punon me një port paralel. Pas përfundimit të leximit të të dhënave nga ADC, marrim një vlerë të tensionit 10-bit (0x0000 - 0x0400) në formën e variablave 16-bit (INT). Porta serike (RS-232) ju lejon të transferoni të dhëna në pako me 8 bit. Është e nevojshme të ndahen variablat 16-bit në 2 pjesë me 8 bit.

Serial.print(voltage>>8,BYTE);

Serial.print(voltage%256,BYTE);

I zhvendosim bajtët e ndryshores 8 bit djathtas dhe më pas i ndajmë me 256 dhe rezultatin e dërgojmë në kompjuter.

Mund të shkarkoni kodin e plotë burimor për softuerin Arduino

Visual C++

Unë jam duke supozuar se ju tashmë keni një njohuri bazë të programimit C++ për Windows, nëse jo atëherë përdorni Google. Interneti është plot me mësime për fillestarët.

Gjëja e parë që duhet të bëni është të shtoni portën serike nga shiriti i veglave në formën e poshtme. Kjo do t'ju lejojë të ndryshoni disa parametra të rëndësishëm të portës serike: emri i portit, shpejtësia e transmetimit, shpejtësia e bitit. Kjo është e dobishme për shtimin e kontrolleve në dritaren e aplikacionit, për ndryshimin e këtyre cilësimeve në çdo kohë, pa e rikompiluar programin. Kam përdorur vetëm opsionin e zgjedhjes së portit.

Pas kërkimit të porteve serike të disponueshme, porta e parë zgjidhet si parazgjedhje. Si është bërë:

varg< String ^>^SerialPorts=nullptr;

serialPorts = serialPort1->GetPortNames();

this->comboBox1->Items->AddRange(SerialPorts);

this->comboBox1->SelectedIndex=0;

Porta serike në një PC mund të përdoret vetëm nga një aplikacion në të njëjtën kohë, kështu që porti duhet të jetë i hapur përpara përdorimit dhe jo i mbyllur. Komanda të thjeshta për këtë:

serialPort1->Open();

serialPort1->Close();

Për të lexuar saktë të dhënat nga porti serial, duhet të përdorni ngjarje (në rastin tonë, ndërprerje). Zgjidhni llojin e ngjarjes:

Lista rënëse kur klikoni dy herë "Data Received".

Kodi i ngjarjes gjenerohet automatikisht:

Nëse bajt-i i parë i mbërritur në portën serike është 0xAB, nëse kjo do të thotë se pjesa tjetër e bajtit bartin të dhëna të tensionit.

private: Sistemi::Seriali i pavlefshëmPort1_Data Received(Sistemi::Objekt^ dërguesi, Sistemi::IO::Portet::SerialDataReceivedEventArgs^ e) (

e panënshkruar char data0, data1;

nëse (serialPort1->ReadByte()==0xAB) (

data0=SerialPort1->ReadByte();

data1=SerialPort1->ReadByte();

voltage=Math::Round((float(data0*256+data1)/1024*5.00),2);

numërimi i të dhënave ++;

serialPort1->ReadByte();

Shkrimi dhe leximi i të dhënave të portit serik

Për mua, një problem i vogël ishte dërgimi i të dhënave hex RAW përmes portës serike. Është përdorur komanda Write(); por me tre argumente: grup, numri i bajtit të fillimit, numri i bajteve për t'u shkruar.

private: Sistemi:: Butoni i zbrazët2_Click_1(Sistemi::Object^ dërguesi, Sistemi::EventArgs^ e) (

kanal char i panënshkruar=0;

kanal=this->listBox1->SelectedIndex;

grupi^fillimi =(0xAC,(0x10+kanali));

grupi^stop =(0xAC,0x00);

serialPort1->Write(start,0,2);

this->button2->Text="Stop";

) tjeter (

serialPort1->Write(stop,0,2);

this->button2->Text="Start";

Kjo eshte e gjitha!

Artikulli origjinal në anglisht (përkthim: Alexander Kasyanov për faqen cxem.net)

Përshkruhet se si të ndërtoni një voltmetër të dyfishtë shtëpiak bazuar në platformën Arduino UNO duke përdorur LCD 1602A. Në disa raste, është e nevojshme të maten dy tensione DC njëkohësisht dhe t'i krahasojnë ato. Kjo mund të kërkohet, për shembull, kur riparoni ose vendosni një stabilizues të tensionit DC për të matur tensionin në hyrje dhe dalje të tij, ose në raste të tjera.

diagrami i qarkut

Duke përdorur modulin universal të mikrokontrolluesit ARDUINO UNO dhe një LCD me dy linja të tipit 1602A (bazuar në kontrolluesin HD44780), mund të bëni lehtësisht një pajisje të tillë. Në njërën linjë do të tregojë tensionin U1, në tjetrin do të tregojë tensionin U2.

Oriz. 1. Diagrami skematik i një voltmetri të dyfishtë me ekran 1602A në Arduino UNO.

Por, para së gjithash, dua t'ju kujtoj se ARDUINO UNO është një modul i gatshëm relativisht i lirë - një bord i vogël qark i printuar në të cilin ndodhet mikrokontrolluesi ATMEGA328, si dhe të gjitha "lidhjet" e tij të nevojshme për funksionimin e tij, duke përfshirë një programues USB dhe furnizim me energji elektrike.

Për ata që nuk janë të njohur me ARDUINO UNO, ju këshilloj që së pari të lexoni artikujt L.1 dhe L.2. Qarku i voltmetrit të dyfishtë është paraqitur në fig. 1. Është projektuar për të matur dy tensione nga 0 në 100V (praktikisht deri në 90V).

Siç mund të shihet nga diagrami, një modul tregues i kristalit të lëngshëm të tipit 1602A H1 është i lidhur me portat dixhitale D2-D7 të tabelës ARDUINO UNO. Treguesi LCD mundësohet nga një rregullator i tensionit 5V, i cili disponohet në tabelën e rregullatorit të tensionit 5V.

Tensionet e matura furnizohen në dy hyrje analoge A1 dhe A2. Gjithsej janë gjashtë hyrje analoge, - A0-A5, ju mund të zgjidhni çdo dy prej tyre. Në këtë rast, zgjidhen A1 dhe A2. Tensioni në portat analoge mund të jetë vetëm pozitiv dhe vetëm brenda intervalit nga zero në tensionin e furnizimit të mikrokontrolluesit, domethënë nominalisht deri në 5 V.

Dalja e portës analoge konvertohet nga ADC e mikrokontrolluesit në formë dixhitale. Për të marrë rezultatin në njësi volt, duhet ta shumëzoni atë me 5 (me tensionin e referencës, domethënë me tensionin e furnizimit të mikrokontrolluesit) dhe ta ndani me 1024.

Për të qenë në gjendje të matni një tension prej më shumë se 5 V, ose më mirë, më shumë se tensioni i furnizimit të mikrokontrolluesit, sepse voltazhi real në daljen e rregullatorit 5 volt në tabelën ARDUINO UNO mund të ndryshojë nga 5V, dhe zakonisht pak më poshtë, duhet të përdorni ndarës të zakonshëm rezistent në hyrje. Këtu, këta janë ndarës të tensionit nëpër rezistorët R1, R3 dhe R2, R4.

Në të njëjtën kohë, për të sjellë leximet e instrumentit në vlerën reale të tensionit të hyrjes, është e nevojshme të vendosni ndarjen e rezultatit të matjes me faktorin e ndarjes së ndarësit rezistent në program. Dhe faktori i ndarjes, le ta shënojmë "K", mund të llogaritet duke përdorur formulën e mëposhtme:

K \u003d R3 / (R1 + R3) ose K \u003d R4 / (R2 + R4),

përkatësisht për hyrjet e ndryshme të voltmetrit të dyfishtë.

Është shumë kurioze që rezistorët në ndarës nuk duhet të jenë fare me saktësi të lartë. Ju mund të merrni rezistorë të zakonshëm, pastaj të matni rezistencën e tyre aktuale me një ohmmetër të saktë dhe t'i zëvendësoni këto vlera të matura në formulë. Do të merret vlera "K" për një pjesëtues specifik, i cili do të duhet të zëvendësohet në formulë.

Programi i voltmetrit

Programi C++ është paraqitur në figurën 2.

Oriz. 2. Kodi burimor i programit.

Për të kontrolluar treguesin LCD, u vendos që të përdoren portat D2 deri në D7 të bordit ARDUINO UNO. Në parim, porte të tjera janë të mundshme, por unë sapo vendosa t'i përdor ato.

Në mënyrë që treguesi të ndërveprojë me ARDUINO UNO, duhet të ngarkoni një nënprogram në program për ta kontrolluar atë. Rutina të tilla quhen "biblioteka", dhe ka shumë "biblioteka" të ndryshme në paketën e softuerit për ARDUINO UNO. Ekrani LCD me bazë HD44780 kërkon bibliotekën LiquidCrystal. Prandaj, programi (Tabela 1) fillon duke ngarkuar këtë bibliotekë:

Kjo linjë udhëzon për të ngarkuar këtë bibliotekë në ARDUINO UNO. Më pas, duhet të caktoni portat ARDUINO UNO që do të punojnë me treguesin LCD. Unë kam zgjedhur portet nga D2 në D7. Ju mund të zgjidhni të tjerët. Këto porte caktohen nga vargu:

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

Pas kësaj, programi vazhdon në funksionimin aktual të voltmetrit. Për të matur tensionin, u vendos të përdoreshin hyrjet analoge A1 dhe A2. Këto inpute jepen në rreshtat:

int analogInput=1;

int analogInput1=2;

Funksioni analogRead përdoret për të lexuar të dhëna nga portat analoge. Leximi i të dhënave nga portet analoge ndodh në rreshtat:

vout=analogLeximi(analogInput);

voutl=analogLeximi(analogInput1);

Pastaj, voltazhi aktual llogaritet duke marrë parasysh faktorin e ndarjes së ndarësit të tensionit të hyrjes:

volt=vout*5.0/1024.0/0.048;

volt1=vout1*5.0/1024.0/0.048;

Në këto rreshta, numri 5.0 është voltazhi në daljen e stabilizatorit të tabelës ARDUINO UNO. Idealisht, duhet të jetë 5 V, por për funksionimin e saktë të voltmetrit, fillimisht duhet të matet ky tension. Lidhni furnizimin me energji elektrike dhe matni tensionin +5V në lidhësin POWER të tabelës me një voltmetër mjaft të saktë. Çfarë do të ndodhë, atëherë futni në këto rreshta në vend të 5.0, për shembull, nëse është 4.85 V, linjat do të duken kështu:

volt=vout*4.85/1024.0/0.048;

volt1=vout1*4.85/1024.0/0.048;

Në fazën tjetër, do të jetë e nevojshme të matni rezistencat aktuale të rezistorëve R1-R4 dhe të përcaktoni koeficientët K (tregohen 0.048) për këto rreshta duke përdorur formulat:

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

Le të themi K1 = 0,046, dhe K2 = 0,051, kështu që shkruajmë:

volt=vout*4.85/1024.0/0.046;

volt1=vout1*4.85/1024.0/0.051;

Kështu, teksti i programit duhet të ndryshohet sipas tensionit aktual në daljen e stabilizatorit 5 volt të tabelës ARDUINO UNO dhe sipas raporteve aktuale të ndarjes së ndarësve rezistent. Pas kësaj, pajisja do të funksionojë me saktësi dhe nuk do të kërkojë asnjë rregullim ose kalibrim.

Duke ndryshuar koeficientët e ndarjes së ndarësve rezistues (dhe, në përputhje me rrethanat, koeficientët "K"), mund të bëni kufij të tjerë matëse, dhe jo domosdoshmërisht të njëjta për të dy hyrjet.

Karavkin V. RK-2017-01.

Literatura:

  1. Karavkin V. - Flasher i Krishtlindjeve në ARDUINO si një ilaç për frikën e mikrokontrolluesve. RK-11-2016.
  2. Karavkin V. - Matësi i frekuencës në ARDUINO. RK-12-2016.

Të dhënat fillestare dhe rishikimi

Pra, në këtë pikë kemi një voltmetër DC me një kufi prej 0..20 V (shih pjesën e mëparshme). Tani i shtojmë një ampermetër 0..5a. Për ta bërë këtë, ne e modifikojmë pak qarkun - ai do të bëhet një kalim, domethënë ka një hyrje dhe një dalje.

Kam hequr pjesën në lidhje me ekranin në LCD - nuk do të ndryshojë. Në parim, elementi kryesor i ri është një shunt Rx 0.1 ohm. Zinxhiri R1-C1-VD1 shërben për të mbrojtur hyrjen analoge. Ka kuptim të vendosni të njëjtën gjë në hyrjen A0. Meqenëse supozojmë rryma mjaft të mëdha, ekzistojnë kërkesa për instalim - linjat e energjisë duhet të bëhen me një tel mjaft të trashë dhe të lidhen drejtpërdrejt me terminalet e shuntit (me fjalë të tjera, të bashkuara), përndryshe leximet do të jenë larg realitetit. Ekziston gjithashtu një koment për rrymën - në parim, voltazhi i referencës prej 1.1v ju lejon të regjistroheni në shunt Rryma 0,1 ohm deri në 11 amper me një saktësi pak më të keqe se 0,01A, por kur një tension i tillë bie në Rx, fuqia e lëshuar do të kalojë 10 W, gjë që nuk është aspak argëtuese. Për të zgjidhur problemin, mund të përdoret një përforcues me një fitim 11 në një op-amp cilësor dhe një shunt 10 mΩ (0.01Ω). Por tani për tani, ne nuk do ta komplikojmë jetën tonë dhe thjesht do ta kufizojmë rrymën në 5A (në të njëjtën kohë, fuqia Rx mund të zgjidhet në rendin prej 3-5 W).

Në këtë fazë, më priste një surprizë - doli që ADC e kontrolluesit ka një kompensim mjaft të madh zero - rreth -3mV. Kjo do të thotë, ADC thjesht nuk sheh sinjale më pak se 3mV, dhe sinjalet e një niveli pak më të lartë janë të dukshme me një pasaktësi karakteristike prej -3mV, gjë që prish linearitetin në fillim të diapazonit. Një kërkim i përciptë nuk dha referenca të qarta për një problem të tillë (zhvendosja zero është normale, por duhet të jetë dukshëm më pak), kështu që është mjaft e mundur që ky të jetë problemi i një shembulli specifik Atmega 328. 0,06 volt), rrymë - tërheq -Ngritja e rezistencës në autobusin 5v. Rezistenca tregohet me një vijë me pika.

Burimi

Versioni i plotë i këtij volt-ampermetri (në versionin I2C) mund të shkarkohet nga lidhja në fund të artikullit. Më pas, unë do të tregoj ndryshimet në kodin burimor. Leximi i shtuar i hyrjes analoge A1 me të njëjtin mesatare si për voltmetrin. Në fakt, ky është i njëjti voltmetër, vetëm pa ndarës, dhe marrim amper duke përdorur formulën Ohm: I \u003d U / Rx (për shembull, nëse rënia e tensionit në Rx \u003d 0,01 V, atëherë rryma është 0,1A ). Prezantova gjithashtu konstanten e fitimit aktual AmpMult - për të ardhmen. Konstanta AmpRx me rezistencën e shuntit ndoshta do të duhet të rregullohet për të marrë parasysh pasaktësinë e rezistencës së shuntit. Epo, meqenëse ky tashmë është një metër volt-amper dhe ka ende vend në ekranin 1602, mbetet të shfaqet konsumi aktual i energjisë në vat, duke marrë një funksion shtesë të pakomplikuar.

.... // Hyrja analoge #define PIN_VOLT A0 #define PIN_AMP A1 // Referenca e tensionit të brendshëm (zgjidh) const float VRef = 1.10; // Raporti i ndarësit rezistues në hyrje (Rh + Rl) / Rl. IN 0.2) Involt += 3; // Konverto në volt (Në: 0..1023 -> (0..VRef) shkallëzuar nga Mult) float Volt = InVolt * VoltMult * VRef / 1023; float Amp = InAmp * VRef / AmpMult / AmpRx / 1023; // Për të marrë parasysh rënien në shunt, hiqni komentin 2 rreshta //float RxVolt = InAmp * VRef / 1023 / AmpMult; // Volt -= RxVolt; float Watt = Volt * Amp; // Shfaq të dhënat lcd.setCursor(8, 0); printim LCD (Watt); lcd.print ("W"); lcd.setCursor(0, 1); LCD.print(Volt); lcd.print("V"); lcd.setCursor(8, 1); LCD.print(amp); lcd.print("A"); )

Lidhjet

  • Biblioteka LiquidCrystal_I2C, e cila ju lejon të vendosni pinout

Hej Habr! Sot dua të vazhdoj temën e "kalimit" arduino dhe android. Në një botim të mëparshëm, unë fola, dhe sot do të flasim për një voltmetër Bluetooth DIY. Një tjetër pajisje e tillë mund të quhet një voltmetër inteligjent, voltmetër "i zgjuar" ose thjesht një voltmetër inteligjent, pa thonjëza. Mbiemri është i pasaktë nga pikëpamja e gramatikës së gjuhës ruse, megjithatë, shpesh gjendet në media. Votimi për këtë temë do të jetë në fund të artikullit dhe unë propozoj të fillojmë duke demonstruar funksionimin e pajisjes për të kuptuar se për çfarë do të bëhet fjalë artikulli.


Mohim përgjegjësie: artikulli është menduar për tifozin mesatar të arduino, i cili zakonisht nuk është i njohur me programimin android, prandaj, si në artikullin e mëparshëm, ne do të bëjmë një aplikacion për smartphone duke përdorur mjedisin e zhvillimit vizual të App Inventor 2 për aplikacionet android.
Për të bërë një voltmetër bluetooth DIY, duhet të shkruajmë dy programe relativisht të pavarura: një skicë arduino dhe një aplikacion android. Le të fillojmë me një skicë.
Për të filluar, duhet të dini se ekzistojnë tre opsione kryesore për matjen e tensionit duke përdorur arduino, pavarësisht se ku duhet të nxirrni informacionin: në një com-port, në një ekran të lidhur me arduino ose në një smartphone.
Rasti i parë: matje tensioni deri në 5 volt. Një ose dy rreshta kodi janë të mjaftueshme këtu dhe voltazhi aplikohet drejtpërdrejt në pinin A0:
vlera int = analogLeximi(0);// leximi i leximeve nga A0
tension = (vlera / 1023.0) * 5; // e vërtetë vetëm nëse Vcc = 5.0 volt
Rasti i dytë: një ndarës tensioni përdoret për të matur tensionet mbi 5 volt. Skema është shumë e thjeshtë, kodi gjithashtu.

Skicë

int analogInput = A0;
vlera notuese = 0.0;
tension notues = 0,0;
noton R1 = 100000.0; //Bateria Vin -> 100K -> A0
noton R2 = 10000.0; //Bateria Gnd -> Arduino Gnd dhe Arduino Gnd -> 10K -> A0
vlera int = 0;

Konfigurimi i pavlefshëm() (
Seriali.fillim(9600);
pinMode (hyrje analoge, INPUT);
}

void loop() (
vlera = analogLeximi(analogInput);
val = (vlera * 4.7) / 1024.0;
tension = val / (R2/(R1+R2));
Println serike (tensioni);
vonesë (500);
}


Arduino Uno
moduli bluetooth
Rasti i tretë. Kur duhet të jeni më të saktë në lidhje me tensionin, si tension referencë, nuk duhet të përdorni tensionin e furnizimit, i cili mund të ndryshojë pak kur furnizohet nga bateria, për shembull, por tensioni i stabilizatorit të brendshëm arduino është 1.1 volt. Këtu qarku është i njëjtë, por kodi është pak më i gjatë. Unë nuk do ta analizoj këtë opsion në detaje, pasi tashmë është përshkruar mirë në artikuj tematikë, por metoda e dytë është mjaft e mjaftueshme për mua, pasi furnizimi im me energji elektrike është i qëndrueshëm, nga porta USB e laptopit.
Pra, ne kuptuam matjen e tensionit, tani le të kalojmë në gjysmën e dytë të projektit: krijimin e një aplikacioni android. Ne do ta bëjmë aplikacionin direkt nga shfletuesi në mjedisin e zhvillimit vizual të App Inventor 2 për aplikacionet android. Shkojmë në sajtin appinventor.mit.edu/explore, identifikohemi duke përdorur një llogari Google, shtypim butonin "krijo, projekti i ri" dhe thjesht duke zvarritur dhe hedhur elementë ne krijojmë diçka si ky dizajn:

E bëra grafikën shumë të thjeshtë, nëse dikush dëshiron grafikë më interesante, më lejoni t'ju kujtoj se për këtë duhet të përdorni në vend të skedarëve .jpeg, skedarë .png me sfond transparent.
Tani shkoni te skeda Blocks dhe krijoni logjikën e aplikacionit atje si kjo:


Nëse gjithçka funksionoi, mund të klikoni butonin Build dhe të ruani .apk në kompjuterin tim dhe më pas të shkarkoni dhe instaloni aplikacionin në smartphone tuaj, megjithëse ka mënyra të tjera për të ngarkuar aplikacionin. këtu është më e përshtatshme për dikë. Si rezultat, mora këtë aplikacion:


E kuptoj që pak njerëz përdorin mjedisin e zhvillimit vizual të App Inventor 2 për aplikacionet Android në projektet e tyre, kështu që mund të lindin shumë pyetje rreth punës në të. Për të hequr disa nga këto pyetje, bëra një video të detajuar se si të bëni një aplikacion të tillë nga e para (duhet të shkoni në YouTube për ta parë):

P.S. Një koleksion me mbi 100 mësime arduino për fillestarët dhe profesionistët

Artikujt kryesorë të lidhur