Ilgalaikiams procesams, išreiškiamiems srove ir įtampa, tokiems kaip akumuliatorių ir akumuliatorių įkrovimas, matuoti ir laiku fiksuoti atmintyje. Tai galima vienu metu įrašyti temperatūrą.
Įvesties signalo parametrai:
srovė I = 25mka - 2a
įtampa U = 0 - 5V
temperatūra T = -30 - + 120grS
laiką nustato vidinis įmontuotas kvarco laikrodis
Mityba:
iš 12V / 0.3A šaltinis
Aš vartoju <70ma
Konstrukcija:
Skaitiklis yra sumontuotas ant dviejų modulių Arduino „Nano“ prijungtas per „ModBus“ protokolą, žr. Diagramą. Vienas „Arduino“ sumontuotas ant keltuvo su gnybtų blokais. Moduliai yra prijungtas per jungtys. Laidai ir patys moduliai yra izoliuoti nuo šiluminės kambrinės gedimų.
Įvesties signalai yra tiekiamas per gnybtus
Priekiniame skydelyje yra išmatuotų parametrų skystųjų kristalų indikatorius ir šviesos diodai, rodantys diapazono ar diapazono perjungimą.
Skaitiklis surenkamas į korpusą 145x85x40.
Temperatūros jutiklis ryškus išoriškai per angą. Signalo perdavimo organizuojamas pagal dviejų laidų linija. Įkrauti rezistorius į jungtį.
Kad būtų lengviau programuoti, „Arduino“ USB jungtys yra išorinės.
Schema
Schema galima atsisiųsti iš failo Metras.rar
Du „Arduino“ buvo pasirinkti dėl dviejų priežasčių: „Arduino Nano“ buvo prieinami ir jų neužteko vienoje atmintyje, o jutiklius planuojama pridėti dar. Be to, norėjau įsisavinti „Arduino“ asociaciją, tam buvo pasirinktas „ModBus“ tinklo protokolas. „ModBus“ apibrėžia vieną pagrindinį procesorių - pagrindinį ir kelis vergus - „Slave“. Šiame darbe yra vienas vergas, ant kurio yra matuojama temperatūra, įtampa ir srovė. On Master - laikrodis ir įrašas į failą. Kūno atmintis turi būti mažesnė nei 4 GB ir suformatuota FAT formatu.
Kadangi buvo planuota matuoti sroves nuo μA iki A, srovės matuojamos 4 diapazonuose (žr. Diapazono lentelę), „Arduino Slave“ stebi perėjimą iš vieno diapazono į kitą, suformuodamas atitinkamą šunto kodą išmatuotai srovei iš M1-2. Kai artėjate prie diapazono krašto, įjungiamas kitas diapazonas, tai yra, dabartinis klavišas iš T1-1 --- T2-2 yra išjungtas, o kitas - įjungtas. Šiuo atveju maksimalus šuntas = 100ohm yra nuolat įjungtas. Jei diapazonas viršija vertę, šviesos diodai D8, D9 užsidega.
Atitvarų srovės matavimas diapazonuose
Uout_max = 5v KusOU = 20 Δ = Ish / 1024
Operatyvinio stiprintuvo M1-2 stiprinimas nustatomas = 20 ir tada nesikeičia. (Priekiniame skydelyje jis sumontuotas klaidingai).
Įtampa matuojama per OU M1-1 sekiklį.„Op-amp“ ir „Arduino“ įvesties grandinės yra apsaugotos diodais („Zener“ diodai yra Arduino, bet aš nežinau parametrų, todėl geriau jį persistengti).
Kaip indikatorius pasirinktas LCD1602. Jis prijungtas prie „Arduino Master“. Be to, indikatorių galima prijungti prie abiejų „Arduino“ tiesiog perjungiant „Arduino“ jungtis. (Kai maitinimas išjungtas.) Ryšys su „Arduino Slave“ parodytas brūkšniuota linija (kuri buvo naudojama rašant programas). Pagrindiniame LCD1602 jungtyje (prie pagrindinio) galite parodyti 4 ekranus, perjungdami slinkties jungiklio slankiklį p1-p2.
1 ekranas: iš viršaus mainų tarp Arduino tarnybinė informacija: C yra mainų tarp Arduino skaičius, E yra klaidų skaičius keičiantis šunto Sh numeriu;
dugno diena - mėnesio laikas.
2 ekranas: U1, I1, šunto Nr. (0,00 apačioje, dešinėje, rezervas)
3 ekranas: U2, temperatūra, (laukimo režimas)
4 ekranas: įjungtas SD įrašymas, įrašymo laikas valandomis, failo eilutės numeris,
00- dabartinės srovės diapazono būsena1 0-normali 1 diapazono ribos, įtampos diapazono1 būsena, fiksuota išorinio šaltinio galia
Kai prijungtas prie „Slave - 2“ ekranų. Jungiklis p3 leidžia įrašyti į „Micro Flesh“ atmintį.
Maitinimo šaltinis pasirenkamas 12v, kad būtų gautos optinės stiprintuvo tiesinės charakteristikos (kad būtų išvengta užsikimšimų diapazono kraštuose). Dėl tos pačios priežasties buvo naudojama neigiama formavimo įtampa iš KR1006VI1. Naudojant „Arduino“ generatorių, sukuriama ne tokia stabili įtampa. Norint sugeneruoti 5 V galią, buvo naudojamas keitiklis, kuris palaipsniui mažinamas, tačiau jūs galite apsieiti be jo, tiekdami +12 V į VIN „Arduino Nano“ įvestis.
Bendras „Arduino“ programavimas turi savybių, nes ryšį su kompiuteriu užima „ModBus“ protokolas. Norėdami įkelti eskizą į vieną iš „Arduino“, kitame turite įgalinti „RST reset“ signalą. Norėdami tai padaryti, naudokite trumpiklius Block S, Block M. Arba paspauskite ir laikykite nuspaudę „Arduino“ modulių atstatymo mygtukus, kol atsisiuntimas bus baigtas. Tai yra mažiau patogu ir yra galimybė sugadinti atsisiuntimą. Kadangi planuoju išplėsti savo įrenginio „Arduino“ USB jungtis, išsitraukiau dėklą.
Manoma, kad tranzistorius T5 (FR024N) turi būti naudojamas procesui įjungti / išjungti, pavyzdžiui, įkrauti ir iškrauti akumuliatorių. Kol ji nedalyvauja.
Programinė įranga.
Maksimaliai kramtoma, kad pradedantieji (ir aš pats) nepakenksiu ir gali tarnauti kaip pamatinė medžiaga, tačiau nepretenduoja į optimalumą.
Bibliotekos ir programų kodai yra „Izmeritel PRO.rar“ faile.
Pagrindinio „ModBus_Master10_SD_T_10_2“ eskizas. „ModBus-Slave10_T_UI_10_2“ vergo eskizas. Likusi biblioteka.
Programaujama „Arduino1.6.0“ aplinkoje. Jame yra SD, „LiquidCrystal“, „Wire“ bibliotekų atsisiųsti nereikia.
Laikas valandomis nustatomas sąrankoje taip. Nustatykite realų laiką ir įkelkite eskizą. Tada pakomentuokite datos ir laiko nustatymo eilutes ir iš naujo įdėkite eskizą.
Programos rezultatas bus laiko ir datos (valandomis), srovės, įtampos, temperatūros nurodymas LCD1602 ekrane ir šių parametrų įrašymas į „IZMER1.TXT“ failą „Micro Flesh“ atmintyje. Faile bus šios rūšies lentelė:
0; 2016-04-13; 00:11:10; Zap (h) = 0,05; tc = 29,31; U1 = 1,71; I1 = 0,00; P1 = 0,00; U2 = 0,14; DiaI norma; DiaU norma; C = 762
1; 2016-04-13; 00:11:16; Zap (h) = 0,05; tc = 29,38; U1 = 1,79; I1 = 0,00; P1 = 0,00; U2 = 0,19; DiaI norma; DiaU norma; C = 788
2; 2016-04-13; 00:11:22; Zap (h) = 0,05; tc = 29,38; U1 = 1,54; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 813
3; 2016-04-13; 00:11:28; Zap (h) = 0,05; tc = 29,31; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 839
4; 2016-04-13; 00:11:34; Zap (h) = 0,05; tc = 29,31; U1 = 1,90; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 864
5; 2016-04-13; 00:11:40; Zap (h) = 0,05; tc = 29,25; U1 = 1,53; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 890
6; 2016-04-13; 00:11:46; Zap (h) = 0,05; tc = 29,19; U1 = 2,03; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 915
7; 2016-04-13; 00:11:52; Zap (h) = 0,05; tc = 29,13; U1 = 1,81; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 941
8; 2016-04-13; 00:11:58; Zap (h) = 0,05; tc = 29,00; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 966
9; 2016-04-13; 00:12:04; Zap (h) = 0,07; tc = 28,94; U1 = 1,25; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 992
10; 2016-04-13; 00:12:10; Zap (h) = 0,07; tc = 29,00; U1 = 1,85; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 1017
11; 2016-04-13; 00:12:16; Zap (h) = 0,07; tc = 29,00; U1 = 1,21; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1043
12; 2016-04-13; 00:12:23; Zap (h) = 0,07; tc = 28,94; U1 = 1,55; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1068
13; 2016-04-13; 00:12:29; Zap (h) = 0,07; tc = 28,88; U1 = 1,82; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 1094
14; 2016-04-13; 00:12:35; Zap (h) = 0,07; tc = 28,88; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1119
kur yra stulpeliai, n / a; Data laikas įrašymo laikas valandomis; temperatūra išmatuota įtampa U1; išmatuota srovė I1; antroji išmatuota įtampa U2; informacija apie matavimo diapazono išėjimą / nebuvimą; paslaugų informacija apie mainų tarp Arduino skaičių.
Matavimo įrašymo intervalas buvo pasirinktas 6 sekundėms, nesunku jį pakeisti pakeičiant #define CYCLE_TIME_F 3000 konstantos reikšmę kita formule Tsec = Pastovi (ms) * 2/1000 Master.
Toliau šią lentelę galima pateikti gražių grafikų pavidalu.
Rašydamas programas naudojau medžiagą. Reiškiu dėkingumą autoriui.