Staðbundið sjálfstætt gagnasöfnunarkerfi

Fyrirtækið keypti NEKST-M eftirlitsstöðvar, framleiddar innanlands af Next Technologies. Til að tryggja sýn á starfsemi dælueininga,
bruna- og öryggisviðvörun, spenna við ræsir, stofuhita, neyðarvatnshæð. Hjarta NEKST-M er ATMEGA 1280 og þessi staðreynd er uppörvandi hvað varðar möguleikann á að búa til þitt eigið sett fyrir sérstakar þarfir.

Verkefnið var sett á að búa til fullkomlega sjálfstætt staðbundið afgreiðslukerfi fyrir sérstakar þarfir á sem skemmstum tíma og með lágmarks kostnaði. Grunnurinn er örstýringur. Þróun, framleiðsla, búin til af starfsfólkinu sjálfu.

Kerfið verður að starfa án þess að vera háð farsímakerfum, netþjónum, internetinu og leyfiskerfi fyrir notkun á útvarpsbylgjum, ekki nota tölvur í rekstri eftirlits- og eftirlitskerfisins eða hámarks reglubundin notkun fartölva, án aðgangs að hlutum í langan tíma (6-9 mánuðir). Netuppsetningin hefur geislamyndaða uppbyggingu. Gögnum er safnað á einum stað og síðan send til vinnslu eftir venjulegum samskiptaleiðum eða sem útprentuð afrit.

Kerfið verður að veita:

  • eftirlit með rekstri dælueininga
  • tæknilegri sjálfvirkni
  • vernd gegn afleiðingum neyðaraðstæðna
  • neyðarmerki
  • rekstrartímaútreikningur
  • að reikna út magn raforku sem neytt er
  • hitastýring búnaðar
  • öryggis- og brunaviðvörun
  • reglubundin fjarskráning upplýsinga
  • óþekktar framtíðarkröfur

Vinnuaðstæður:

  • þekjusvæði 1 sq km.
  • beint skyggni á milli hluta
  • hitastig frá +50 til -50 C
  • raki allt að 100%
  • líffræðilega virkar útfellingar (mygla, súlfat-afoxandi bakteríur)
  • titringur, ekki lengur, í vélum í flokkum 1-2 samkvæmt GOST ISO 10816-1-97
  • rafsegulumhverfi - skipting á rafmótorum með KT 6053 tengibúnaði, RVS-DN mjúkræsibúnaði, SIEMENS MICROMASTER PID stýribúnaði, geislun á ISM og GSM sviðinu samkvæmt kröfum um þessi tæki, handvirk ljósbogasuðu á staðnum
  • of mikil netspenna, skammtíma truflun á aflgjafa, eldingarofspennur, fasaójafnvægi þegar loftlínuvír slitnar í 6-10 kV dreifikerfi.

Þrátt fyrir svo strangar kröfur er innleiðingin frekar einföld þegar vandamálið er leyst skref fyrir skref.

Að teknu tilliti til alls varð „Arduino Nano 3.0“ borðið „heila“ áætlunarinnar. Robotdyn borðið er með ATMEGA 328 stjórnandi, nauðsynlegum 3,3V spennujafnari fyrir
straumur 800 mA og breytir í CH340G UART-USB.

Í fyrsta lagi voru vinnutímateljarar búnir til sem þeir nýjustu. Áður notaðir iðnaðarmælar settir saman á PIC með spennulausri aflgjafarás biluðu vegna spennuhækkunar innan árs frá notkun. Aðeins þeir sem tengdir voru með heimagerðum 5V aflgjafa héldust ósnortnir. Til að flýta fyrir uppsetningu og fjölhæfni tengingar er merki um ástand eininga tekið frá skautum skiptibúnaðarins, þ.e. skráning á tilvist 1. fasa spennu með þriggja fasa aflgjafa 380V. Til að samræma við stjórnandann er notað milligengi með 220V vindi eða optocoupler sem samanstendur af LED og GL5516 ljósviðnám eða PC817 optocoupler. Allir valkostir voru prófaðir. Ljósdíóðan er knúin af leiðréttri spennu með straumtakmörkun með því að nota tvo SVV22 þétta sem eru hannaðir fyrir spennu upp á 630V sem eru tengdir í röð til öryggis við slysaprófun á rafrásunum með megohmmeter.
Lestur vinnslutíma með því að nota ST7735S LCD skjáinn, rauntíma gagnasending í gegnum útvarp með E01-ML01DP05 einingunni á tíðninni 2,4 MHz. Þetta tæki inniheldur nRF24L01+ flöguna og RFX2401C sendi/móttöku magnara,
úttaksafl allt að 100 mW. Hringlaga loftnet hönnuð fyrir viðkomandi svið í reiknivélinni á netinu síða. Val á gerð loftnets ræðst af því að útiloka móttöku einvarpsbylgna frá nærliggjandi málmbyggingum. Loftnetshlutar eru prentaðir á þrívíddarprentara. Núverandi ástand teljara er geymt í EEPROM stjórnandans sjálfs og er endurheimt ef óvænt rafmagnsleysi verður. Tímabil fyrir talningu er veitt af RTC flís DS3 í formi eininga með vararafhlöðu. Aflgjafinn notar 3231 einingar, raunverulegur púlsgjafi 3/220V HLK-PM5 01mA, breytir frá 600-1V til 5V HW-553 и 03962A - rafhlöðu stjórnandi með áætlun vörn gegn skammhlaupi, ofhleðslu og ofhleðslu. Allir íhlutir voru keyptir á Aliexpress vefsíðunni.

BrauðbrettiStaðbundið sjálfstætt gagnasöfnunarkerfi
4 rása teljari. Það eru LC síur við inntak til að vernda gegn truflunum yfir brenglaða samskiptalínu. Gögn um stöðu stjórnhluta eru stöðugt lesin einu sinni á sekúndu og birt í lit á LCD-skjánum. Álestur er uppfærður og skráð í óstöðugt minni á 1 sekúndna fresti. 36 sekúndur er 36/1 úr klukkustund, þetta er sniðið sem gögnin eru nauðsynleg á. Á 100 sek fresti. upplýsingar eru sendar um fjölda sekúndna í notkun fyrir hverja stjórneiningu. EEPROM minni hefur takmarkaðan fjölda skrifa-eyðingarlota, samkvæmt framleiðanda, 12 sinnum. Versti kosturinn er þegar að minnsta kosti einn reit er stöðugt uppfærður. Rúmmál 100000. teljara er 1 bæti, þetta er langt sniðnúmer, 4 teljara, alls 4 bæti er upptekið af einni skrá. Lengd minnis flísarinnar er 16 bæti; eftir 1024 færslur af 64 teljara mun upptaka byrja aftur. Í EEPROM bókasafninu skrifar EEPROM.put aðferðin ekki; ef gildi frumunnar og upplýsingarnar sem verið er að skrifa passa saman verður engin niðurbrot á frumunum. Þar af leiðandi verður tryggður minnisnotkunartími meira en 4 ár. Tími mögulegrar en ekki tryggðrar vinnu getur verið mun lengri.

HringrásarmyndStaðbundið sjálfstætt gagnasöfnunarkerfi
Forrit í Arduino IDE//12 bæti (328%)

#meðfylgja // Kjarna grafíksafn
#innihalda // Vélbúnaðarsérstakt bókasafn
# innifalið
#innihalda
# innifalið
#innihalda
#innihalda
RF24 útvarp(9, 10); // útvarpshlutur til að vinna með RF24 bókasafninu,
// og pinnanúmer nRF24L01+ (CE, CSN)
#innihalda
DS3231 rtc(SDA, SCL);
Tími t;

//#define TFT_CS 10
#define TFT_CS 8
#define TFT_RST -1 // þú getur líka tengt þetta við Arduino endurstillinguna
// í því tilviki, stilltu þennan #define pin á -1!
//#define TFT_DC 9 // DC=RS=A0 - tilnefningarvalkostir til að velja skipun eða gagnaskrá.
#skilgreina TFT_DC 3

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Valkostur 2: notaðu hvaða pinna sem er en aðeins hægar!
#define TFT_SCLK 13 // stilltu þetta til að vera hvaða pinna sem þú vilt!
#define TFT_MOSI 11 // stilltu þetta til að vera hvaða pinna sem þú vilt!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#innihalda

bætibreyting = 52;
bæti pinState;
ómerkt löng dæla[4];// fylki með 4 sekúndna teljaragildum
flot m = 3600.0;
unsigned int heimilisfang = 0;
int rc;// breyta fyrir teljara
unsigned long sumprim = 0;
unsigned long sumsec = 0;
bæti i = 0;
bæti k = 34;
unsigned int z = 0;
bæti b = B00000001;
bæta pumrcounter[4]; // fylki til að geyma stöðu hluta, 1 - slökkt, 0 - kveikt.
int byrjun = 0; //

ógilt uppsetning () {

rtc.begin();
radio.begin(); // Hefja vinnu nRF24L01+
radio.setChannel(120); // gagnarás (frá 0 til 127).
radio.setDataRate(RF24_250KBPS); // gagnaflutningshraði (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // afl sendis (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Opnaðu pípu með auðkenni fyrir gagnaflutning

// Til að stilla tímann skaltu afskrifa nauðsynlegar línur
//rtc.setDOW(1); // Dagur vikunnar
//rtc.setTime(21, 20, 0); // Tími, í 24 tíma sniði.
//rtc.setDate(29, 10, 2018); // Dagsetning 29. október 2018

tft.initR(INITR_BLACKTAB); // frumstilla ST7735S flís, svartur flipi
// Notaðu þennan frumstilli (aflýsa athugasemdum) ef þú ert að nota 1.44" TFT
//tft.initR(INITR_144GREENTAB); // frumstilla ST7735S flís, RED rcB flipa
tft.setTextWrap(false); // Leyfa texta að renna af hægri brún
tft.setRotation( 2 ); // fyrir SVART PCB og RAUTT tft.setRotation(0) eða ekki.
tft.fillScreen(ST7735_BLACK); // hreinsa skjáinn

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // aðhald hugbúnaðar virkar, hátt stig -
// stýrðir hlutir „virka ekki“, „4“ er skrifað á allar 1 eldri höfnin D, engin talning á sér stað.

fyrir ( rc = 0; rc < 4; rc++)
{
tft.setBendill ( 3, rc * 10 + shift ); // sýnir stöðunúmer stjórnunarhluta
tft.print(rc + 1);
}

tft.setCursor(12, 0); // úttak 3 línur af texta
tft.println("ÞRÓNARAR & BYGGJA"); // að hrósa sjálfum sér ástvinum
tft.setCursor(24, 10); // eða vondur höfundarréttur
tft.print("ÞRÁÐARI MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//gagnabata/////////////////////////////////////////// ///////////

for ( z = 0; z < 1023; z += 16 ) { // Gengur í gegnum allar frumur iðnaðarins
//og skrifar í fylki með 4 dælubreytum, 4 bæti fyrir hvern teljara, því
// unsigned long variable. Það eru 4 teljarar, ein skrá af öllum 4 tekur 16 bæti.
EEPROM.get(z, dæla[0]); // svo, án for lykkjunnar, minna magn
EEPROM.get(z+4, dæla[1]);
EEPROM.get(z+8, dæla[2]);
EEPROM.get(z+12, dæla[3]);

// að úthluta nýju næsta gildi fyrir summan af 4 teljara
sumprim = (dæla [0] + dæla [1] + dæla [2] + dæla [3]);

// ber saman nýtt gildi summan af 4 teljara í sumprim breytunni við fyrra gildið í breytunni
// sumsec og ef fyrri summan er minni en eða jöfn nýju summunni, er nýju hærri eða jöfnu úthlutað
// sumsec gildi.

if (sumsec <= sumprim) {
sumsec = sumprim; //

//og núverandi gildi z er úthlutað vistfangsbreytunni, z er heimilisfangið á byrjun 16 bæta blokk með 4 gildum
// teljarar skráðir á sama tíma (þar sem þegar verið er að skoða gátt eru allir 8 bitar hennar skrifaðir samtímis,
// þar á meðal nauðsynlegu háu 4 bitana okkar af port D).
heimilisfang = z;
}
}

// enn og aftur aðgangur að eeprom-minninu á heimilisfangi upphafs blokkar með 16 bætum af 4 skráðum teljaragildum
// síðast, þ.e. gildi áður en slökkt er á eða endurræst vegna frystingar. Tekur upp það nýjasta
// teljaragildi í fylki af 4 breytum dælu.

EEPROM.get(heimilisfang, dæla[0]);
EEPROM.get(heimilisfang + 4, dæla[1]);
EEPROM.get(heimilisfang + 8, dæla[2]);
EEPROM.get(heimilisfang + 12, dæla[3]);

heimilisfang += 16; //hækka heimilisfangið til að skrifa næsta kubb án þess að skrifa yfir gögn síðustu færslu

//lok gagnabata///////////////////////////////////////// //////////////////

attachInterrupt(0, telja, RISING); // pinna D2, virkja truflanir, koma á hverri sekúndu
// púlsar frá RTC DS3231 frá SQW útgangi

wdt_enable(WDTO_8S); // ræstu varðhundatímann, endurræstu stjórnandann ef frjósi, tími,
// sem þú þarft að gefa út tímastilla endurstillingarskipunina wdt_reset( og forðast endurræsingu við venjulega notkun - 8 sek.
// fyrir próf er ekki mælt með því að stilla gildið á minna en 8 sekúndur. Í þessu tilviki er tímastillinn helst endurstilltur
// hikandi, og það gerist á hverri sekúndu.

}

ógild lykkja () {
// tóm hringrás, hér verður stjórn á opnum fasa rekstri rafmótors
}

ógildur talning() {

tft.setTextColor(ST7735_WHITE); // stilltu leturlitinn
t = rtc.getTime(); // lestími
tft.setCursor(5, 120); // stillir bendilinn
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // hreinsar tímaúttakssvæðið
tft.print(rtc.getTimeStr()); // gefa út klukkuaflestur

wdt_endurstilla(); // endurstilltu varðhundinn í hverri lotu, þ.e.a.s. sekúndu

fyrir (rc = 0; rc < 4; rc ++) // upphaf lotu til að athuga samræmi inntaksstöðu
// gáttarbita í fyrra lestrarástand ports D bita
{
pinState = (PIND >> 4) & ( b << rc );

if (pumrcounter [rc] != pinState) { // og ef passar ekki, þá
pumrcounter[rc] = pinState; // úthlutar stöðubreytu portbita nýju gildi 1/0
}
// vísbending um ástand litastýringarhluta
// BLÁR er lítill galli á núverandi skjá (eða bókasafni?), RGB og BGR er blandað saman.
if (pinState == (b << rc)) {
tft.fillRect(15, ((rc * 10 + vakt)), 7, 7, ST7735_BLUE); // fyrir lága talningu breyttu GRÆNT í BLÁTT
} Else {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // fyrir lága talningu breyttu BLÁU í GRÆNN
dæla [rc] += 1; // bættu 1 sekúndu við vinnslutímateljarann
}
}

k++;
ef (k == 36) {
k = 0;

tft.fillRect(30, shift, 97, 40, ST7735_BLACK); // hreinsar skjásvæðið fyrir notkunartíma
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // og dagsetningar

tft.setCursor(60, 120); // stillir bendilinn
tft.print(rtc.getDateStr()); // birta dagsetninguna á LCD skjánum

fyrir (rc = 0; rc < 4; rc ++) //úttak vinnutíma í heild, tíundu og
{
tft.setCursor ( 30, rc * 10 + shift ); // hundraðustu úr klukkustund með skjáfærslu niður um 10 pixla
tft.println(dæla [rc] / m);
}

// skrifa „hrá“ rekstrartímagildi (í sekúndum) í EEPROM ///////////////////////////////////////////////

fyrir (rc = 0; rc < 4; rc++)
{
EEPROM.put(heimilisfang, dæla [rc]);
heimilisfang += sizeof(float); // aukið breytu skrifa heimilisfangsins
}
}

// sendu gögn yfir útvarpsrásina úr gögnum sem gefa til kynna hversu mörg bæti á að senda.
ef ((k == 6 ) || (k == 18 ) || (k == 30 )) {

óundirrituð löng gögn;

radio.write(&byrja, sizeof(byrjun));

fyrir (i = 0; i < 4; i++) {
gögn = dæla [i ];
radio.write(&gögn, stærð(gögn));
}
}
}

Nokkrar athugasemdir í lokin. Talning á sér stað á lágu rökréttu stigi við inntak.

Uppdráttarviðnám R2-R5 er 36 kOhm fyrir valkostinn með ljósviðnám GL5516. Ef um er að ræða ljóstransistor optocoupler og relay, stillt á 4,7-5,1 kOhm. Arduino Nano v3.0 ræsiforritinu var skipt út fyrir Arduino Uno með því að nota TL866A forritara fyrir rétta notkun varðhundatímamælisins. Öryggin eru leiðrétt þannig að þau virki við spennu yfir 4,3 V. Ytri endurstillingarrás R6 C3 var ekki notuð. Í sýnishorninu samsvarar tíðni sendisins ekki óleyfissviðinu; 2,4 MHz sviðið er takmarkað við tíðni 2400.0-2483.5 MHz.

Drægni E01-ML01DP05 sendisins er 2400-2525 MHz. Bandbreidd einnar rásar er 1 MHz, þegar hraðinn er stilltur sem “RF24_2MBPS” er tilgreind radio.setChannel(120) rás og sú næsta verður upptekin, þ.e. bandið verður 2 MHz.

Heimild: www.habr.com

Bæta við athugasemd