System casglu data ymreolaethol leol

Prynodd y cwmni swyddi monitro NEKST-M, a gynhyrchwyd yn ddomestig gan Next Technologies. Er mwyn sicrhau delweddu gweithrediad unedau pwmpio,
larymau tân a diogelwch, presenoldeb foltedd wrth gychwyn, tymheredd ystafell, lefel dŵr brys. Calon NEKST-M yw ATMEGA 1280 ac mae'r ffaith hon yn galonogol o ran y posibilrwydd o greu eich cit eich hun ar gyfer anghenion penodol.

Gosodwyd y dasg i greu system anfon leol gwbl ymreolaethol ar gyfer anghenion penodol yn yr amser byrraf posibl ac am gost fach iawn. Y sail yw microreolydd. Datblygu, gweithgynhyrchu, a grëwyd gan y staff eu hunain.

Rhaid i'r system weithredu heb ddibyniaeth ar rwydweithiau cellog, gweinyddwyr, y Rhyngrwyd a'r system drwyddedu ar gyfer defnyddio adnoddau amledd radio, peidio â defnyddio cyfrifiaduron wrth weithredu'r system monitro a rheoli neu, ar y mwyaf, defnyddio gliniaduron o bryd i'w gilydd, heb fynediad i gwrthrychau am amser hir (6-9 mis). Mae gan gyfluniad y rhwydwaith strwythur rheiddiol. Cesglir data ar un adeg ac yna'i anfon i'w brosesu trwy sianeli cyfathrebu rheolaidd neu fel copi caled.

Rhaid i'r system ddarparu:

  • monitro gweithrediad unedau pwmpio
  • awtomeiddio technolegol
  • amddiffyniad rhag canlyniadau amodau brys
  • signalau brys
  • cyfrifo amser gweithredu
  • cyfrifo faint o drydan a ddefnyddir
  • rheoli tymheredd offer
  • diogelwch a larwm tân
  • cofnodi gwybodaeth o bell o bryd i'w gilydd
  • gofynion anhysbys yn y dyfodol

Amodau gwaith:

  • ardal ddarlledu 1 km sgwâr.
  • gwelededd uniongyrchol rhwng gwrthrychau
  • tymheredd o +50 i -50 C
  • lleithder hyd at 100%
  • dyddodion sy'n weithredol yn fiolegol (llwydni, bacteria sy'n lleihau sylffad)
  • dirgryniad, dim mwy, o beiriannau dosbarthiadau 1-2 yn ôl GOST ISO 10816-1-97
  • amgylchedd electromagnetig - newid moduron trydan gyda chysylltwyr KT 6053, offer cychwyn meddal RVS-DN, offer rheoli PID SIEMENS MICROMASTER, ymbelydredd yn yr ystod ISM a GSM yn unol â'r gofynion ar gyfer y dyfeisiau hyn, weldio arc â llaw ar y safle
  • foltedd rhwydwaith gormodol, ymyriadau tymor byr yn y cyflenwad pŵer, gor-foltedd mellt, anghydbwysedd cyfnod pan fydd gwifren llinell uwchben yn torri mewn rhwydweithiau dosbarthu 6-10 kV.

Er gwaethaf gofynion mor llym, mae gweithredu yn eithaf syml wrth ddatrys y broblem gam wrth gam.

Gan gymryd popeth i ystyriaeth, daeth bwrdd “Arduino Nano 3.0” yn “ymennydd” y cynllun. Mae gan y bwrdd robotdyn reolwr ATMEGA 328, y sefydlogwr foltedd 3,3V angenrheidiol ar gyfer
cyfredol 800 mA a trawsnewidydd i CH340G UART-USB.

Yn gyntaf oll, crëwyd cownteri oriau gweithredu fel y rhai mwyaf diweddar. Methodd mesuryddion diwydiannol a ddefnyddiwyd yn flaenorol ymgynnull ar PICs gyda chylched cyflenwad pŵer transformerless oherwydd ymchwyddiadau foltedd o fewn blwyddyn o weithredu. Dim ond y rhai a oedd wedi'u cysylltu gan ddefnyddio cyflenwadau pŵer 5V cartref oedd ar ôl yn gyfan. Er mwyn cyflymu gosodiad ac amlbwrpasedd cysylltiad, cymerir signal am gyflwr yr unedau o derfynellau'r dyfeisiau newid, h.y. cofrestru presenoldeb y foltedd cam 1af gyda chyflenwad pŵer tri cham o 380V. I gydlynu gyda'r rheolydd, defnyddir ras gyfnewid ganolraddol gyda weindio 220V neu optocoupler sy'n cynnwys LED a ffotoresistor GL5516 neu optocoupler PC817. Profwyd pob opsiwn. Mae'r LED yn cael ei bweru gan foltedd unioni gyda chyfyngiad cerrynt gan ddefnyddio dau gynhwysydd SVV22 a gynlluniwyd ar gyfer foltedd o 630V wedi'i gysylltu mewn cyfres ar gyfer diogelwch yn ystod profion damweiniol o'r cylchedau gyda megohmmeter.
Darllen darlleniadau amser gweithredu gan ddefnyddio sgrin LCD ST7735S, trosglwyddo data amser real trwy radio gan ddefnyddio'r modiwl E01-ML01DP05 ar amledd o 2,4 MHz. Mae'r ddyfais hon yn cynnwys y sglodyn nRF24L01 + a'r mwyhadur trosglwyddo / derbyn RFX2401C,
pŵer allbwn hyd at 100 mW. Antenâu helical wedi'u cynllunio ar gyfer yr ystod a ddymunir yn y gyfrifiannell ar-lein safle. Pennir y dewis o fath antena trwy eithrio derbyniad tonnau a adlewyrchir yn unigol o strwythurau metel cyfagos. Mae rhannau antena yn cael eu hargraffu ar argraffydd 3D. Mae cyflwr presennol y cownteri yn cael ei storio yn EEPROM y rheolydd ei hun ac yn cael ei adfer os bydd toriad pŵer annisgwyl. Darperir cyfnodau amser ar gyfer cyfrif gan y sglodyn RTC DS3231 ar ffurf modiwl gyda batri wrth gefn. Mae'r cyflenwad pŵer yn defnyddio 3 modiwl, y ffynhonnell pwls gwirioneddol 220/5V HLK-PM01 600mA, trawsnewidydd o 1-5V i 5V HW-553 и 03962A - rheolydd batri gyda cynllun amddiffyniad rhag cylched byr, gor-ollwng a gor-wefru. Prynwyd yr holl gydrannau ar wefan Aliexpress.

Bwrdd baraSystem casglu data ymreolaethol leol
Cownter 4-sianel. Mae hidlwyr LC wrth y mewnbynnau i amddiffyn rhag ymyrraeth dros linell gyfathrebu pâr troellog. Mae data ar gyflwr gwrthrychau rheoli yn cael ei ddarllen yn gyson unwaith yr eiliad a'i arddangos mewn lliw ar yr LCD. Caiff darlleniadau eu diweddaru a'u cofnodi mewn cof anweddol bob 1 eiliad. Mae 36 eiliad yn 36/1 o awr, dyma'r fformat y mae angen y data ynddo. Bob 100 eiliad. mae gwybodaeth yn cael ei throsglwyddo am nifer yr eiliadau gweithredu ar gyfer pob uned reoli. Mae gan gof EEPROM nifer gyfyngedig o gylchoedd ysgrifennu-dileu, yn ôl y gwneuthurwr, 12 o weithiau. Yr opsiwn gwaethaf yw pan fydd o leiaf un gell yn cael ei diweddaru'n gyson. Cyfaint y rhifydd 100000af yw 1 beit, mae hwn yn rif fformat hir, 4 rhifydd, mae cyfanswm o 4 beit yn cael ei feddiannu gan un cofnod. Hyd cof y sglodyn yw 16 beit; ar ôl 1024 cofnod o 64 rhifydd, bydd y recordio yn dechrau drosodd. Yn y llyfrgell EEPROM, nid yw'r dull EEPROM.put yn ysgrifennu; os yw gwerth y gell a'r wybodaeth sy'n cael ei hysgrifennu yn cyfateb, ni fydd y celloedd yn diraddio. O ganlyniad, bydd yr amser gweithredu cof gwarantedig yn fwy na 4 mlynedd. Gall amser gwaith posibl ond heb ei warantu fod yn llawer hirach.

Diagram cylchedSystem casglu data ymreolaethol leol
Rhaglen yn Arduino IDE//12 beit (328%)

#cynnwys // Llyfrgell graffeg graidd
#cynnwys // Llyfrgell caledwedd-benodol
#cynnwys
#cynnwys
#cynnwys
#cynnwys
#cynnwys
radio RF24(9, 10); // gwrthrych radio ar gyfer gweithio gyda'r llyfrgell RF24,
// a rhifau pin nRF24L01+ (CE, CSN)
#cynnwys
DS3231 rtc(SDA, SCL);
Amser t;

//#define TFT_CS 10
#diffinio TFT_CS 8
#define TFT_RST -1 // gallwch hefyd gysylltu hyn â'r ailosod Arduino
// ac os felly, gosodwch y #define pin hwn i -1!
//#define TFT_DC 9 // DC=RS=A0 - opsiynau dynodi ar gyfer dewis gorchymyn neu gofrestr data.
#diffinio TFT_DC 3

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

// Opsiwn 2: defnyddio unrhyw binnau ond ychydig yn arafach!
#define TFT_SCLK 13 // gosodwch y rhain i fod pa bynnag binnau yr ydych yn hoffi!
#define TFT_MOSI 11 // gosodwch y rhain i fod yn ba bynnag binnau yr hoffech chi!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#cynnwys

shifft beit = 52;
pinState beit;
pwmp hir heb ei arwyddo[4];// arae gyda gwerthoedd cownter 4 eiliad
arnofio m = 3600.0;
cyfeiriad int heb ei lofnodi = 0;
int rc;// amrywiol ar gyfer cownteri
sumprim hir heb ei arwyddo = 0;
swmsec hir heb ei lofnodi = 0;
beit i = 0;
beit k = 34;
heb ei lofnodi int z = 0;
beit b = B00000001;
cyfrifydd pwmp beit[4]; // arae ar gyfer storio cyflyrau gwrthrych, 1 - i ffwrdd, 0 - ymlaen.
int cychwyn = 0; //

setup gwag () {

rtc.begin();
radio.dechrau(); // Cychwyn gwaith nRF24L01+
radio.setChannel(120); // sianel ddata (o 0 i 127).
radio.setDataRate(RF24_250KBPS); // cyfradd trosglwyddo data (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // pŵer trosglwyddydd (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Agor pibell gyda dynodwr ar gyfer trosglwyddo data

// I osod yr amser, dadwneud y llinellau angenrheidiol
//rtc.setDOW(1); // Diwrnod yr wythnos
//rtc.setTime(21, 20, 0); // Amser, mewn fformat 24 awr.
//rtc.setDate(29, 10, 2018); // Dyddiad, Hydref 29, 2018

tft.initR(INITR_BLACKTAB); // cychwyn sglodion ST7735S, tab du
// Defnyddiwch y cychwynnwr hwn (heb sylw) os ydych chi'n defnyddio TFT 1.44 "
//tft.initR(INITR_144GREENTAB); // cychwyn sglodyn ST7735S, tab rcB COCH
tft.setTextWrap(ffug); // Caniatáu i destun redeg oddi ar yr ymyl dde
tft.setRotation( 2 ); // ar gyfer PCB DU a COCH tft.setRotation(0) neu beidio.
tft.fillScreen(ST7735_BLACK); // sgrin glir

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // tynhau meddalwedd yn gweithio, lefel uchel -
// gwrthrychau rheoledig "ddim yn gweithio", "4" wedi'i ysgrifennu i bob un o'r 1 porthladd uwch D, nid oes unrhyw gyfrif yn digwydd.

ar gyfer ( rc = 0; rc < 4; rc++)
{
tft.setCursor ( 3, rc * 10 + shifft ); // yn dangos lleoliad nifer y gwrthrychau rheoli
tft.print(rc + 1);
}

tft.setCursor(12, 0); // allbwn 3 llinell o destun
tft.println("DATBLYGWYR AC ADEILADU"); // i ganmol dy hun anwyliaid
tft.setCursor(24, 10); // neu hawlfraint drwg
tft.print("DATBLYGWR MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

// adfer data///////////////////////////////////////// ///////////

ar gyfer ( z = 0; z < 1023; z + = 16 ) {// Yn ailadrodd trwy holl gelloedd y diwydiant
// ac yn ysgrifennu at amrywiaeth o 4 newidyn pwmp, 4 beit ar gyfer pob cownter, oherwydd
// newidyn hir heb ei lofnodi. Mae yna 4 cownter, mae un cofnod o bob un o'r 4 yn cymryd 16 beit.
EEPROM.get(z, pwmp[0]); // felly, heb y ddolen ar gyfer, llai o gyfaint
EEPROM.get(z+4, pwmp[1]);
EEPROM.get(z+8, pwmp[2]);
EEPROM.get(z+12, pwmp[3]);

// aseinio gwerth nesaf newydd ar gyfer y swm o 4 cownter
sumprim = (pwmp [0] + pwmp [1] + pwmp [2] + pwmp [3] );

// yn cymharu gwerth newydd y swm o 4 rhifydd yn y newidyn sumprim â'r gwerth blaenorol yn y newidyn
// sumsec ac os yw'r swm blaenorol yn llai neu'n hafal i'r swm newydd, mae'r swm newydd yn fwy neu'n hafal yn cael ei neilltuo
// gwerth swmsec.

os ( swmsec < = sumprim ) {
sumsec = sumprim; //

// ac mae'r gwerth cyfredol z wedi'i neilltuo i'r newidyn cyfeiriad, z yw cyfeiriad dechrau bloc 16-beit o 4 gwerth
// cownteri wedi'u recordio ar yr un pryd (oherwydd wrth bleidleisio porthladd, mae pob un o'r 8 did ohono'n cael eu hysgrifennu ar yr un pryd,
// gan gynnwys ein 4 did uchel angenrheidiol o borthladd D).
cyfeiriad = z;
}
}

// unwaith eto cyrchu'r cof eeprom yng nghyfeiriad dechrau bloc o 16 beit o 4 gwerth cownter a gofnodwyd
// olaf, h.y. gwerthoedd cyn cau i lawr neu rebooting oherwydd rhewi. Recordio'r diweddaraf
// gwerthoedd cownter i mewn i amrywiaeth o 4 newidynnau pwmp.

EEPROM.get(cyfeiriad, pwmp[0]);
EEPROM.get(cyfeiriad + 4, pwmp[1]);
EEPROM.get(cyfeiriad + 8, pwmp[2]);
EEPROM.get(cyfeiriad + 12, pwmp[3]);

cyfeiriad += 16; //cynyddu'r cyfeiriad ar gyfer ysgrifennu'r bloc nesaf heb drosysgrifo data'r cofnod diwethaf

//diwedd adferiad data////////////////////////////////////// /////////////////

attachInterrupt(0, cyfrif, CODI); // pin D2, galluogi ymyriadau, dewch bob eiliad
// corbys o RTC DS3231 o allbwn SQW

wdt_enable(WDTO_8S); // cychwyn yr amserydd corff gwarchod, ailgychwyn y rheolydd rhag ofn y bydd rhewi, amser,
// y mae angen i chi gyhoeddi'r gorchymyn ailosod amserydd wdt_reset ( ac osgoi ailgychwyn yn ystod gweithrediad arferol - 8 eiliad.
// ar gyfer profion ni argymhellir gosod y gwerth i lai nag eiliad 8. Yn yr achos hwn, mae'n well ailosod yr amserydd
// jerking, ac mae'n digwydd bob eiliad.

}

dolen gwag () {
// cylch gwag, yma bydd rheolaeth dros weithrediad cyfnod agored y modur trydan
}

cyfrif unedau gwag () {

tft.setTextColor(ST7735_WHITE); // gosod lliw y ffont
t = rtc.getTime(); // darllen amser
tft.setCursor(5, 120); // gosod safle'r cyrchwr
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // clirio'r ardal allbwn amser
tft.print(rtc.getTimeStr()); // darlleniadau cloc allbwn

wdt_reset(); // ailosod y corff gwarchod bob cylch, h.y. eiliad

ar gyfer (rc = 0; rc < 4; rc ++) // dechrau'r cylch ar gyfer gwirio cydymffurfiad y cyflwr mewnbwn
// didau porthladd i gyflwr darlleniad blaenorol didau porthladd D
{
pinState = (PIND >> 4) & ( b << rc );

os (pumrcounter [rc] != pinState) {// ac os nad yw'n cyfateb, yna
pumrcounter[rc] = pinState; // aseinio'r newidyn statws did porthladd â gwerth newydd 1/0
}
// arwydd o gyflwr gwrthrychau rheoli lliw
// Mae BLUE yn glitch bach o'r sgrin bresennol (neu'r llyfrgell?), RGB a BGR yn gymysg.
os (pinState == ( b << rc )) {
tft.fillRect(15, ((rc * 10 + shifft)), 7, 7, ST7735_BLUE); // ar gyfer cyfrif lefel isel newid GWYRDD i LAS
} {Arall
tft.fillRect(15, ((rc * 10 + shifft)), 7, 7, ST7735_GREEN); // ar gyfer cyfrif lefel isel newid BLUE i WERDD
pwmp [rc] += 1; // ychwanegu 1 eiliad at y cownter amser gweithredu
}
}

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

tft.fillRect(30, shifft, 97, 40, ST7735_BLACK); // clirio'r ardal arddangos amser gweithredu
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // a dyddiadau

tft.setCursor(60, 120); // gosod safle'r cyrchwr
tft.print(rtc.getDateStr()); // arddangos y dyddiad ar y sgrin LCD

ar gyfer (rc = 0; rc < 4; rc ++) // oriau gweithredu allbwn yn gyfan, degfedau a
{
tft.setCursor ( 30, rc * 10 + shifft ); // canfedau o awr gyda shifft sgrin i lawr 10 picsel
tft.println(pwmp [rc] / m);
}

// ysgrifennu gwerthoedd oriau gweithredu “amrwd” (mewn eiliadau) i EEPROM /////////////////////////

ar gyfer (rc = 0; rc < 4; rc++)
{
EEPROM.put(cyfeiriad, pwmp [rc]);
cyfeiriad += sizeof(arnofio); // hicyn y newidyn ysgrifennu cyfeiriad
}
}

// anfon data dros y sianel radio o ddata yn nodi faint o beit y dylid ei anfon.
os ( ( k == 6 ) || ( k == 18 ) || ( k == 30 )) {

data hir heb ei lofnodi;

radio.write(&cychwyn, sizeof(cychwyn));

ar gyfer (i = 0; i < 4; i ++) {
data = pwmp [ i ] ;
radio.write(&data, sizeof(data));
}
}
}

Ychydig o nodiadau ar y diwedd. Mae cyfrif yn digwydd ar lefel resymegol isel yn y mewnbynnau.

Gwrthiannau tynnu i fyny R2-R5 yw 36 kOhm ar gyfer yr opsiwn gyda photoresistors GL5516. Yn achos optocoupler ffototransistor a ras gyfnewid, gosodwch i 4,7-5,1 kOhm. Disodlwyd y cychwynnwr Arduino Nano v3.0 gyda'r Arduino Uno gan ddefnyddio'r rhaglennydd TL866A ar gyfer gweithrediad cywir amserydd y corff gwarchod. Mae'r ffiwsiau'n cael eu cywiro i weithredu ar folteddau uwchlaw 4,3 V. Ni ddefnyddiwyd y gylched ailosod allanol R6 C3. Yn y rhaglen sampl, nid yw amlder y trosglwyddydd yn cyfateb i'r ystod ddidrwydded; mae'r ystod 2,4 MHz wedi'i gyfyngu i amleddau 2400.0-2483.5 MHz.

Amrediad y trosglwyddydd E01-ML01DP05 yw 2400-2525 MHz. Lled band un sianel yw 1 MHz, wrth osod y cyflymder fel “RF24_2MBPS” bydd y sianel radio.setChannel(120) penodedig a'r un nesaf yn cael ei meddiannu, h.y. bydd y band yn 2 MHz.

Ffynhonnell: hab.com

Ychwanegu sylw