Plaaslike outonome dataverkrygingstelsel

Die maatskappy het NEKST-M-moniteringsposte gekoop, wat plaaslik deur Next Technologies vervaardig is. Om visualisering van die werking van pompeenhede te verseker,
brand- en sekuriteitsalarms, spanning teenwoordigheid by aansitters, kamertemperatuur, noodwatervlak. Die hart van NEKST-M is ATMEGA 1280 en hierdie feit is bemoedigend in terme van die moontlikheid om jou eie kit vir spesifieke behoeftes te skep.

Die taak is gestel om 'n ten volle outonome plaaslike versendingstelsel vir spesifieke behoeftes in die kortste moontlike tyd en teen minimale koste te skep. Die basis is 'n mikrobeheerder. Ontwikkeling, vervaardiging, geskep deur die personeel self.

Die stelsel moet werk sonder afhanklikheid van sellulêre netwerke, bedieners, die internet en die toelaatstelsel vir die gebruik van radiofrekwensiehulpbronne, nie rekenaars in die werking van die monitering- en beheerstelsel gebruik nie, of maksimum periodieke gebruik van skootrekenaars, sonder toegang tot voorwerpe vir 'n lang tyd (6-9 maande). Die netwerkkonfigurasie het 'n radiale struktuur. Data word op 'n stadium ingesamel en dan vir verwerking via gereelde kommunikasiekanale of as 'n hardekopie gestuur.

Die stelsel moet voorsiening maak vir:

  • monitering van die werking van pompeenhede
  • tegnologiese outomatisering
  • beskerming teen die gevolge van noodtoestande
  • noodsein
  • bedryfstyd berekening
  • berekening van die hoeveelheid elektrisiteit wat verbruik word
  • toerusting temperatuurbeheer
  • sekuriteit en brandalarm
  • periodieke afstandopname van inligting
  • onbekende toekomstige vereistes

Werksomstandighede:

  • dekkingsgebied 1 vk km.
  • direkte sigbaarheid tussen voorwerpe
  • temperatuur van +50 tot -50 C
  • humiditeit tot 100%
  • biologies aktiewe afsettings (skimmel, sulfaat-verminderende bakterieë)
  • vibrasie, nie meer nie, van masjiene van klasse 1-2 volgens GOST ISO 10816-1-97
  • elektromagnetiese omgewing - skakeling van elektriese motors met KT 6053-kontaktors, RVS-DN-sagtestart-toerusting, SIEMENS MICROMASTER PID-beheertoerusting, straling in die ISM- en GSM-reeks volgens die vereistes vir hierdie toestelle, handboogsweis op die terrein
  • oormatige netwerkspanning, korttermyn onderbrekings in kragtoevoer, weerlig oorspannings, fasewanbalans wanneer 'n oorhoofse lyndraad in 6-10 kV verspreidingsnetwerke breek.

Ten spyte van sulke streng vereistes, is implementering redelik eenvoudig wanneer die probleem stap vir stap opgelos word.

As alles in ag geneem word, het die "Arduino Nano 3.0"-bord die "brein" van die plan geword. Die Robotdyn-bord het 'n ATMEGA 328-beheerder, die nodige 3,3V-spanningsstabilisator vir
stroom 800 mA en omskakelaar na CH340G UART-USB.

In die eerste plek is werksure-tellers geskep as die mees bygewerkte. Voorheen gebruikte industriële meters wat op PIC's saamgestel is met 'n transformatorlose kragtoevoerkring het misluk as gevolg van spanningstuwings binne 'n jaar na werking. Slegs diegene wat met tuisgemaakte 5V-kragbronne gekoppel is, het ongeskonde gebly. Om die installasie en veelsydigheid van verbinding te bespoedig, word 'n sein oor die toestand van die eenhede van die terminale van die skakeltoestelle geneem, d.w.s. registrasie van die teenwoordigheid van die 1ste fase spanning met 'n drie-fase kragtoevoer van 380V. Om met die kontroleerder te koördineer, word 'n tussenrelais met 'n 220V-wikkeling of 'n optokoppelaar wat bestaan ​​uit 'n LED en 'n GL5516-fotoweerstand of 'n PC817-optokoppelaar gebruik. Alle opsies is getoets. Die LED word aangedryf deur 'n gelykgerigte spanning met stroombeperking deur gebruik te maak van twee SVV22 kapasitors wat ontwerp is vir 'n spanning van 630V wat in serie gekoppel is vir veiligheid tydens toevallige toetsing van die stroombane met 'n megohmmeter.
Lees bedryfstydlesings met behulp van die ST7735S LCD-skerm, intydse data-oordrag via radio met die E01-ML01DP05-module teen 'n frekwensie van 2,4 MHz. Hierdie toestel bevat die nRF24L01+-skyfie en die RFX2401C-stuur-/ontvangversterker,
uitsetkrag tot 100 mW. Heliese antennas ontwerp vir die verlangde reeks in die aanlyn sakrekenaar werf. Die keuse van antennatipe word bepaal deur die uitsluiting van die ontvangs van enkelgereflekteerde golwe van omliggende metaalstrukture. Antenna-onderdele word op 'n 3D-drukker gedruk. Die huidige toestand van die tellers word in die EEPROM van die beheerder self gestoor en word herstel in die geval van 'n onverwagte kragonderbreking. Tydintervalle vir tel word verskaf deur die RTC-skyfie DS3231 in die vorm van 'n module met 'n rugsteunbattery. Die kragtoevoer gebruik 3 modules, die werklike pulsbron 220/5V HLK-PM01 600mA, 'n omsetter van 1-5V na 5V HW-553 и 03962A - battery kontroleerder met skema beskerming teen kortsluiting, oorontlading en oorlading. Alle komponente is op die Aliexpress-webwerf gekoop.

BroodbordPlaaslike outonome dataverkrygingstelsel
4-kanaal toonbank. Daar is LC-filters by die insette om teen steuring oor 'n gedraaide paar kommunikasielyn te beskerm. Data oor die toestand van beheervoorwerpe word voortdurend een keer per sekonde gelees en in kleur op die LCD vertoon. Lesings word elke 1 sekondes opgedateer en in nie-vlugtige geheue aangeteken. 36 sekondes is 36/1 van 'n uur, dit is die formaat waarin die data vereis word. Elke 100 sek. inligting oor die aantal sekondes van werking vir elke beheereenheid oorgedra word. EEPROM-geheue het 'n beperkte aantal skryf-vee-siklusse, volgens die vervaardiger, 12 100000 keer. Die ergste opsie is wanneer ten minste een sel voortdurend opgedateer word. Die volume van die 1ste teller is 4 grepe, dit is 'n lang formaat getal, 4 tellers, 'n totaal van 16 grepe word deur een rekord beset. Die lengte van die chip se geheue is 1024 grepe; na 64 inskrywings van 4 tellers, sal opname oor begin. In die EEPROM-biblioteek skryf die EEPROM.put-metode nie; as die waarde van die sel en die inligting wat geskryf word ooreenstem, sal daar geen agteruitgang van die selle wees nie. As gevolg hiervan sal die gewaarborgde geheue-bedryfstyd meer as 7 jaar wees. Die tyd van moontlike maar nie gewaarborgde werk nie kan baie langer wees.

StroombaandiagramPlaaslike outonome dataverkrygingstelsel
Program in Arduino IDE//12 328 grepe (38%)

#insluit // Kern grafiese biblioteek
#insluit // Hardeware-spesifieke biblioteek
#insluit
#insluit
#insluit
#insluit
#insluit
RF24 radio(9, 10); // radio-voorwerp om met die RF24-biblioteek te werk,
// en pinnommers nRF24L01+ (CE, CSN)
#insluit
DS3231 rtc(SDA, SCL);
Tyd t;

//#definieer TFT_CS 10
#definieer TFT_CS 8
#define TFT_RST -1 // jy kan dit ook koppel aan die Arduino-terugstelling
// in welke geval, stel hierdie #definieer pen na -1!
//#define TFT_DC 9 // DC=RS=A0 - aanwysingsopsies vir die keuse van 'n opdrag of dataregister.
#definieer TFT_DC 3

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

// Opsie 2: gebruik enige penne maar 'n bietjie stadiger!
#define TFT_SCLK 13 // stel dit op watter penne jy ook al wil!
#definieer TFT_MOSI 11 // stel dit op watter penne jy ook al wil!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#insluit

greepverskuiwing = 52;
greep pinState;
ongetekende lang pomp[4];// skikking met 4 sekondes tellerwaardes
float m = 3600.0;
ongetekende int-adres = 0;
int rc;// veranderlike vir tellers
ongetekende lang sumprim = 0;
ongetekende lang somsek = 0;
greep i = 0;
greep k = 34;
ongetekende int z = 0;
greep b = B00000001;
byte pumrcounter[4]; // skikking vir die stoor van voorwerptoestande, 1 - af, 0 - aan.
int begin = 0; //

nietige opstelling () {

rtc.begin();
radio.begin(); // Inisieer werk nRF24L01+
radio.setChannel(120); // datakanaal (van 0 tot 127).
radio.setDataRate(RF24_250KBPS); // data-oordragtempo (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // senderkrag (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Maak 'n pyp oop met 'n identifiseerder vir data-oordrag

// Om die tyd in te stel, maak die nodige reëls uit
//rtc.setDOW(1); // Dag van die week
//rtc.setTime(21, 20, 0); // Tyd, in 24 uur-formaat.
//rtc.setDate(29, 10, 2018); // Datum, 29 Oktober 2018

tft.initR(INITR_BLACKTAB); // inisialiseer 'n ST7735S-skyfie, swart oortjie
// Gebruik hierdie initialiseerder (ontmerk) as jy 'n 1.44" TFT gebruik
//tft.initR(INITR_144GREENTAB); // inisialiseer 'n ST7735S-skyfie, ROOI rcB-oortjie
tft.setTextWrap(vals); // Laat teks toe om van die regterkant af te loop
tft.setRotation( 2 ); // vir SWART PCB en ROOI tft.setRotation(0) of nie.
tft.fillScreen(ST7735_SWART); // maak skerm skoon

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // sagteware-versnelling werk, hoë vlak -
// beheerde voorwerpe “werk nie”, “4” word na al 1 senior poorte D geskryf, geen telling vind plaas nie.

vir (rc = 0; rc < 4; rc++)
{
tft.setCursor ( 3, rc * 10 + shift ); // vertoon posisienommers van beheervoorwerpe
tft.print(rc + 1);
}

tft.setCursor(12, 0); // voer 3 reëls teks uit
tft.println("ONTWIKKELAARS & BOU"); // om jouself geliefdes te prys
tft.setCursor(24, 10); // of bose kopiereg
tft.print("ONTWIKKELAAR MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//dataherwinning//////////////////////////////////////////// ///////////

for ( z = 0; z < 1023; z += 16 ) { // Itereer deur alle selle van die industrie
//en skryf na 'n skikking van 4 pomp veranderlikes, 4 grepe vir elke teller, want
// ongetekende lang veranderlike. Daar is 4 tellers, een rekord van al 4 neem 16 grepe.
EEPROM.get(z, pomp[0]); // dus, sonder die for-lus, minder volume
EEPROM.get(z+4, pomp[1]);
EEPROM.get(z+8, pomp[2]);
EEPROM.get(z+12, pomp[3]);

// die toekenning van 'n nuwe volgende waarde vir die som van 4 tellers
sumprim = (pomp [0] + pomp [1] + pomp [2] + pomp [3]);

// vergelyk die nuwe waarde van die som van 4 tellers in die sumprim veranderlike met die vorige waarde in die veranderlike
// sumsek en as die vorige som minder as of gelyk aan die nuwe som is, word die nuwe groter of gelyk toegeken
// sumsec waarde.

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

//en die huidige waarde z word aan die adresveranderlike toegeken, z is die adres van die begin van 'n 16-grepe blok van 4 waardes
// tellers op dieselfde tyd aangeteken (aangesien wanneer 'n poort gepols word, word al 8 bisse daarvan gelyktydig geskryf,
// insluitend ons nodige hoë 4 stukkies poort D).
adres = z;
}
}

// weer toegang tot die eeprom-geheue by die adres van die begin van 'n blok van 16 grepe van 4 aangetekende tellerwaardes
// laaste, d.w.s. waardes voordat dit afgeskakel of herlaai word as gevolg van vries. Neem die nuutste op
// tellerwaardes in 'n skikking van 4 veranderlikes pomp.

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

adres += 16; //verhoog die adres vir die skryf van die volgende blok sonder om die data van die laaste rekord te oorskryf

//einde van dataherwinning////////////////////////////////////////// //////////////////

attachInterrupt(0, count, RISING); // pen D2, aktiveer onderbrekings, kom elke sekonde
// pulse van RTC DS3231 vanaf SQW-uitset

wdt_enable(WDTO_8S); // begin die waghond timer, herlaai die kontroleerder in geval van vries, tyd,
// waarvoor jy die timer-terugstel-opdrag moet uitreik wdt_reset (en vermy herlaai tydens normale werking - 8 sek.
// vir toetse word dit nie aanbeveel om die waarde op minder as 8 sekondes te stel nie. In hierdie geval word die timer verkieslik teruggestel
// ruk, en dit gebeur elke sekonde.

}

nietige lus () {
// leë siklus, hier sal daar beheer wees oor die oopfase werking van die elektriese motor
}

leemte telling() {

tft.setTextColor(ST7735_WHITE); // stel die lettertipe kleur
t = rtc.getTime(); // lees tyd
tft.setCursor(5, 120); // stel die wyserposisie in
tft.fillRect(5, 120, 50, 7, ST7735_SWART); // die tyduitset area skoon te maak
tft.print(rtc.getTimeStr()); // uitvoer kloklesings

wdt_reset(); // stel die waghond elke siklus terug, d.w.s. sekonde

vir (rc = 0; rc < 4; rc ++) // begin van die siklus vir die kontrolering van die nakoming van die insettoestand
// port bisse na die vorige lees toestand van port D bisse
{
pinState = (PIND >> 4) & ( b << rc );

if (pumrcounter [rc] != pinState) { // en as nie ooreenstem nie, dan
pumrcounter[rc] = pinState; // die toekenning van die poortbis-statusveranderlike 'n nuwe waarde 1/0
}
// aanduiding van die toestand van kleurbeheervoorwerpe
// BLOU is 'n klein foutjie van die bestaande skerm (of biblioteek?), RGB en BGR is deurmekaar.
if (pinState == (b << rc)) {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // vir lae vlak telling verander GROEN na BLOU
} Else {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_GROEN); // vir lae vlak telling verander BLOU na GROEN
pomp [rc] += 1; // voeg 1 sekonde by die werktydteller
}
}

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

tft.fillRect(30, shift, 97, 40, ST7735_SWART); // die skoonmaak van die bedryfstydvertoonarea
tft.fillRect(60, 120, 73, 7, ST7735_SWART); // en datums

tft.setCursor(60, 120); // stel die wyserposisie in
tft.print(rtc.getDateStr()); // vertoon datum op LCD-skerm

vir (rc = 0; rc < 4; rc ++) //uitvoer werksure in geheel, tiendes en
{
tft.setCursor ( 30, rc * 10 + shift ); // honderdstes van 'n uur met 'n skermskuif met 10 pieksels af
tft.println(pomp [rc] / m);
}

// skryf "rou" bedryfsure waardes (in sekondes) na EEPROM ////////////////////////////////////////////////

vir (rc = 0; rc < 4; rc++)
{
EEPROM.put(adres, pomp [rc]);
adres += sizeof(float); // verhoog die skryfadresveranderlike
}
}

// stuur data oor die radiokanaal vanaf data wat aandui hoeveel grepe gestuur moet word.
if ((k == 6 ) || (k == 18 ) || (k == 30 )) {

ongetekende lang data;

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

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

'n Paar notas aan die einde. Telling vind plaas op 'n lae logiese vlak by die insette.

Optrekweerstande R2-R5 is 36 kOhm vir die opsie met fotoweerstande GL5516. In die geval van 'n fototransistor optokoppelaar en aflos, stel dit op 4,7-5,1 kOhm. Die Arduino Nano v3.0 selflaailaaier is vervang met die Arduino Uno met behulp van die TL866A programmeerder vir die korrekte werking van die waghond timer. Die versmeltings word reggestel om teen spanning bo 4,3 V te werk. Die eksterne terugstelkring R6 C3 is nie gebruik nie. In die voorbeeldprogram stem die senderfrekwensie nie ooreen met die ongelisensieerde reeks nie; die 2,4 MHz-reeks is beperk tot frekwensies 2400.0-2483.5 MHz.

Die reeks van die E01-ML01DP05-sender is 2400-2525 MHz. Die bandwydte van een kanaal is 1 MHz, wanneer die spoed as “RF24_2MBPS” gestel word, sal die gespesifiseerde radio.setChannel(120) kanaal en die volgende een beset word, m.a.w. die band sal 2 MHz wees.

Bron: will.com

Voeg 'n opmerking