Vietējā autonomā datu vākÅ”anas sistēma

Uzņēmums iegādājās NEKST-M uzraudzÄ«bas stabus, ko vietējā tirgÅ« ražo uzņēmums Next Technologies. Lai nodroÅ”inātu sÅ«knÄ“Å”anas iekārtu darbÄ«bas vizualizāciju,
ugunsdzēsÄ«bas un apsardzes signalizācija, sprieguma klātbÅ«tne starteros, telpas temperatÅ«ra, avārijas Å«dens lÄ«menis. NEKST-M sirds ir ATMEGA 1280, un Å”is fakts ir iepriecinoÅ”s attiecÄ«bā uz iespēju izveidot savu komplektu konkrētām vajadzÄ«bām.

Tika izvirzÄ«ts uzdevums pēc iespējas Ä«sākā laikā un ar minimālām izmaksām izveidot pilnÄ«bā autonomu lokālo dispečeru sistēmu specifiskām vajadzÄ«bām. Pamats ir mikrokontrolleris. Izstrāde, ražoÅ”ana, ko veido paÅ”i darbinieki.

Sistēmai jādarbojas bez atkarÄ«bas no mobilo sakaru tÄ«kliem, serveriem, interneta un radiofrekvenču resursu izmantoÅ”anas licencÄ“Å”anas sistēmas, nedrÄ«kst izmantot datorus uzraudzÄ«bas un kontroles sistēmas darbÄ«bā vai, maksimums, periodiski izmantot klēpjdatorus, bez piekļuves objektus uz ilgu laiku (6-9 mēneÅ”i). TÄ«kla konfigurācijai ir radiāla struktÅ«ra. Dati tiek savākti vienā punktā un pēc tam nosÅ«tÄ«ti apstrādei, izmantojot parastos saziņas kanālus vai papÄ«ra formātā.

Sistēmai jānodroÅ”ina:

  • sÅ«knÄ“Å”anas iekārtu darbÄ«bas uzraudzÄ«ba
  • tehnoloÄ£iskā automatizācija
  • aizsardzÄ«ba pret ārkārtas apstākļu sekām
  • avārijas signalizācija
  • darbÄ«bas laika aprēķins
  • aprēķinot patērētās elektroenerÄ£ijas daudzumu
  • aprÄ«kojuma temperatÅ«ras kontrole
  • apsardzes un ugunsdzēsÄ«bas signalizācija
  • periodiska attālināta informācijas ierakstÄ«Å”ana
  • nezināmas nākotnes prasÄ«bas

Darba apstākļi:

  • pārklājuma platÄ«ba 1 kv.km.
  • tieÅ”a redzamÄ«ba starp objektiem
  • temperatÅ«ra no +50 lÄ«dz -50 C
  • mitrums lÄ«dz 100%
  • bioloÄ£iski aktÄ«vi nogulsnes (pelējums, sulfātus reducējoŔās baktērijas)
  • vibrācija, ne vairāk, 1-2 klases maŔīnām saskaņā ar GOST ISO 10816-1-97
  • elektromagnētiskā vide - elektromotoru pārslēgÅ”ana ar KT 6053 kontaktoriem, RVS-DN mÄ«kstās palaiÅ”anas iekārta, SIEMENS MICROMASTER PID vadÄ«bas iekārta, starojums ISM un GSM diapazonā atbilstoÅ”i Å”o ierīču prasÄ«bām, manuāla loka metināŔana uz vietas.
  • pārmērÄ«gs tÄ«kla spriegums, Ä«slaicÄ«gi elektroapgādes pārtraukumi, zibens pārspriegumi, fāzes nelÄ«dzsvarotÄ«ba, pārraujot gaisvadu lÄ«nijas vadu 6-10 kV sadales tÄ«klos.

Neskatoties uz tik stingrām prasÄ«bām, soli pa solim risinot problēmu, ievieÅ”ana ir diezgan vienkārÅ”a.

Ņemot vērā visu, "Arduino Nano 3.0" plate kļuva par plāna "smadzenēm". Robotdyn platei ir ATMEGA 328 kontrolieris, nepiecieÅ”amais 3,3V sprieguma stabilizators priekÅ”
strāva 800 mA un pārveidotājs uz CH340G UART-USB.

Pirmkārt, darba stundu skaitÄ«tāji tika izveidoti kā visjaunākie. IepriekÅ” izmantotie rÅ«pnieciskie skaitÄ«tāji, kas samontēti uz PIC ar beztransformatora baroÅ”anas ķēdi, neizdevās sprieguma pārspriegumu dēļ ekspluatācijas gada laikā. Tikai tie, kas bija savienoti, izmantojot paÅ”taisÄ«tus 5 V baroÅ”anas avotus, palika neskarti. Lai paātrinātu uzstādÄ«Å”anu un savienojuma daudzpusÄ«bu, no komutācijas ierīču spailēm tiek ņemts signāls par vienÄ«bu stāvokli, t.i. 1. fāzes sprieguma klātbÅ«tnes reÄ£istrācija ar trÄ«sfāzu baroÅ”anas avotu 380 V. SaskaņoÅ”anai ar kontrolieri tiek izmantots starprelejs ar 220V tinumu vai optronu, kas sastāv no LED un GL5516 fotorezistora vai PC817 optrona. Visas iespējas tika pārbaudÄ«tas. Gaismas diode tiek darbināta ar rektificētu spriegumu ar strāvas ierobežojumu, izmantojot divus SVV22 kondensatorus, kas paredzēti 630 V spriegumam, kas savienoti virknē droŔības nolÅ«kos nejauÅ”as ķēžu pārbaudes laikā ar megohmetru.
DarbÄ«bas laika rādÄ«jumu nolasÄ«Å”ana, izmantojot ST7735S LCD ekrānu, reāllaika datu pārraide pa radio, izmantojot moduli E01-ML01DP05 ar frekvenci 2,4 MHz. Å ajā ierÄ«cē ir nRF24L01+ mikroshēma un RFX2401C raidÄ«Å”anas/uztvērēja pastiprinātājs,
izejas jauda lÄ«dz 100 mW. Spirālveida antenas, kas paredzētas vēlamajam diapazonam tieÅ”saistes kalkulatorā сŠ°Š¹Ń‚Š°. Antenas veida izvēli nosaka atseviŔķi atstaroto viļņu uztverÅ”anas izslēgÅ”ana no apkārtējām metāla konstrukcijām. Antenas daļas tiek izdrukātas uz 3D printera. PaÅ”reizējais skaitÄ«tāju stāvoklis tiek saglabāts paÅ”a kontrollera EEPROM un tiek atjaunots neparedzēta strāvas padeves pārtraukuma gadÄ«jumā. Laika intervālus skaitÄ«Å”anai nodroÅ”ina RTC mikroshēma DS3231 moduļa veidā ar rezerves akumulatoru. BaroÅ”anas blokā tiek izmantoti 3 moduļi, faktiskais impulsa avots 220/5V HLK-PM01 600mA, pārveidotājs no 1-5V uz 5V HW-553 Šø 03962A - akumulatora kontrolieris ar shēma aizsardzÄ«ba pret Ä«ssavienojumu, pārmērÄ«gu izlādi un pārlādÄ“Å”anu. Visas sastāvdaļas tika iegādātas Aliexpress vietnē.

Maizes dēlisVietējā autonomā datu vākÅ”anas sistēma
4 kanālu skaitÄ«tājs. Ieejās ir LC filtri, lai aizsargātu pret traucējumiem vÄ«tā pāra sakaru lÄ«nijā. Dati par vadÄ«bas objektu stāvokli tiek pastāvÄ«gi nolasÄ«ti reizi sekundē un krāsaini tiek parādÄ«ti LCD ekrānā. RādÄ«jumi tiek atjaunināti un ierakstÄ«ti nemainÄ«gā atmiņā ik pēc 1 sekundēm. 36 sekundes ir 36/1 no stundas, tas ir formāts, kurā dati ir nepiecieÅ”ami. Ik pēc 100 sek. tiek pārraidÄ«ta informācija par katras vadÄ«bas bloka darbÄ«bas sekunžu skaitu. EEPROM atmiņā ir ierobežots rakstÄ«Å”anas un dzÄ“Å”anas ciklu skaits, saskaņā ar ražotāja teikto, 12 100000 reižu. Sliktākā iespēja ir tad, ja vismaz viena Ŕūna tiek pastāvÄ«gi atjaunināta. 1. skaitÄ«tāja apjoms ir 4 baiti, tas ir gara formāta skaitlis, 4 skaitÄ«tāji, kopā viens ieraksts aizņem 16 baitus. Mikroshēmas atmiņas garums ir 1024 baiti, pēc 64 4 skaitÄ«tāju ievadÄ«Å”anas ierakstÄ«Å”ana tiks sākta no jauna. EEPROM bibliotēkā EEPROM.put metode neraksta; ja Ŕūnas vērtÄ«ba un rakstāmā informācija sakrÄ«t, Ŕūnu degradācija nenotiks. Tā rezultātā garantētais atmiņas darbÄ«bas laiks bÅ«s vairāk nekā 7 gadi. Iespējamā, bet negarantētā darba laiks var bÅ«t daudz ilgāks.

Shēmas shēmaVietējā autonomā datu vākÅ”anas sistēma
Programma Arduino IDE//12 328 baiti (38%)

#iekļauts // Grafikas galvenā bibliotēka
#iekļauts // Aparatūrai raksturīga bibliotēka
# iekļaut
#iekļauts
# iekļaut
#iekļauts
#iekļauts
RF24 radio (9, 10); // radio objekts darbam ar RF24 bibliotēku,
// un pin numuri nRF24L01+ (CE, CSN)
#iekļauts
DS3231 rtc (SDA, SCL);
Laiks t;

//#define TFT_CS 10
#define TFT_CS 8
#define TFT_RST -1 // to var arī savienot ar Arduino atiestatīŔanu
// Tādā gadījumā iestatiet Ŕo #define tap uz -1!
//#define TFT_DC 9 // DC=RS=A0 - apzīmējuma opcijas komandas vai datu reģistra izvēlei.
#define TFT_DC 3

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

// 2. iespēja: izmantojiet jebkuras tapas, bet nedaudz lēnāk!
#define TFT_SCLK 13 // iestatiet Ŕīs tapas, kas jums patīk!
#define TFT_MOSI 11 // iestatiet Ŕīs tapas, kas jums patīk!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#iekļauts

baitu maiņa = 52;
baits pinState;
neparakstÄ«ts garÅ” sÅ«knis[4];// masÄ«vs ar 4 sekunžu skaitÄ«tāja vērtÄ«bām
pludiņa m = 3600.0;
neparakstÄ«ta iekŔējā adrese = 0;
int rc;// mainīgais skaitītājiem
unsigned long suprim = 0;
neparakstīts garŔ summasec = 0;
baits i = 0;
baits k = 34;
neparakstīts int z = 0;
baits b = B00000001;
baitu pumrskaitÄ«tājs[4]; // masÄ«vs objekta stāvokļu glabāŔanai, 1 - izslēgts, 0 - ieslēgts.
int sākums = 0; //

anulēt iestatÄ«Å”anu () {

rtc.begin();
radio.begin(); // Uzsākt darbu nRF24L01+
radio.setChannel(120); // datu kanāls (no 0 līdz 127).
radio.setDataRate(RF24_250KBPS); // datu pārraides ātrums (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // raidītāja jauda (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Atveriet cauruli ar identifikatoru datu pārsūtīŔanai

// Lai iestatītu laiku, atņemiet komentārus no vajadzīgās rindiņas
//rtc.setDOW(1); // Nedēļas diena
//rtc.setTime(21, 20, 0); // Laiks, 24 stundu formātā.
//rtc.setDate(29, 10, 2018); // Datums, 29. gada 2018. oktobris

tft.initR(INITR_BLACKTAB); // inicializēt ST7735S mikroshēmu, melna cilne
// Izmantojiet Å”o inicializētāju (bez komentāra), ja izmantojat 1.44 collu TFT
//tft.initR(INITR_144GREENAB); // inicializējiet ST7735S mikroshēmu, RED rcB cilni
tft.setTextWrap(false); // Ļauj tekstam noplūst no labās malas
tft.setRotation( 2 ); // BLACK PCB un RED tft.setRotation(0) vai ne.
tft.fillScreen(ST7735_BLACK); // notīrīt ekrānu

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // programmatūras pievilkŔana darbojas, augsts līmenis -
// kontrolētie objekti ā€œnedarbojasā€, ā€œ4ā€ tiek rakstÄ«ts uz visiem 1 vecākajiem portiem D, skaitÄ«Å”ana nenotiek.

for ( rc = 0; rc < 4; rc++)
{
tft.setCursor ( 3, rc * 10 + shift ); // parāda vadības objektu pozīciju numurus
tft.print(rc + 1);
}

tft.setCursor(12, 0); // izvada 3 teksta rindiņas
tft.println ("IZSTRĀDĀTĀJI UN BÅŖVE"); // slavēt sevi mīļos
tft.setCursor(24, 10); // vai ļaunas autortiesības
tft.print("IZSTRĀDĀTĀJA MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//datu atgūŔana//////////////////////////////////////////////// ///////////

for (z = 0; z < 1023; z += 16) { // Atkārtojas visās nozares Ŕūnās
//un raksta uz 4 sūkņa mainīgo masīvu, 4 baiti katram skaitītājam, jo
// neparakstÄ«ts garÅ” mainÄ«gais. Ir 4 skaitÄ«tāji, viens ieraksts no visiem 4 aizņem 16 baitus.
EEPROM.get(z, sūknis[0]); // tātad, bez for cilpas, mazāks skaļums
EEPROM.get(z+4, sūknis[1]);
EEPROM.get(z+8, sūknis[2]);
EEPROM.get(z+12, sūknis[3]);

// jaunas nākamās vērtÄ«bas pieŔķirÅ”ana 4 skaitÄ«tāju summai
sūknis = (sūknis [0] + sūknis [1] + sūknis [2] + sūknis [3]);

// salÄ«dzina jauno 4 skaitÄ«tāju summas vērtÄ«bu sumprim mainÄ«gajā ar iepriekŔējo vērtÄ«bu mainÄ«gajā
// summasec un ja iepriekŔējā summa ir mazāka vai vienāda ar jauno summu, tiek pieŔķirta jaunā lielākā vai vienāda summa
// summasec vērtība.

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

//un paÅ”reizējā vērtÄ«ba z tiek pieŔķirta adreses mainÄ«gajam, z ir 16 baitu bloka sākuma adrese ar 4 vērtÄ«bām
// vienlaicīgi ierakstīti skaitītāji (jo, aptaujājot portu, visi 8 biti tiek ierakstīti vienlaicīgi,
// ieskaitot mÅ«su nepiecieÅ”amos lielos 4 bitus porta D).
adrese = z;
}
}

// vēlreiz piekļūstot eeprom atmiņai 16 ierakstītu skaitītāja vērtību 4 baitu bloka sākuma adresē
// pēdējais, t.i. vērtÄ«bas pirms izslēgÅ”anas vai pārstartÄ“Å”anas sasalÅ”anas dēļ. Jaunākā ierakstÄ«Å”ana
// skaitītāja vērtības 4 mainīgo lielumu masīvā.

EEPROM.get(adrese, sūknis[0]);
EEPROM.get(adrese + 4, sūknis[1]);
EEPROM.get(adrese + 8, sūknis[2]);
EEPROM.get(adrese + 12, sūknis[3]);

adrese += 16; //adreses palielināŔana nākamā bloka rakstÄ«Å”anai, nepārrakstot pēdējā ieraksta datus

//datu atkopŔanas beigas///////////////////////////////////////////// //////////////////

attachInterrupt(0, skaits, RISING); // tapa D2, iespējot pārtraukumus, nāk katru sekundi
// impulsi no RTC DS3231 no SQW izejas

wdt_enable(WDTO_8S); // iedarbiniet sargsuņa taimeri, pārstartējiet kontrolieri sasalÅ”anas gadÄ«jumā, laiks,
// kam jāizdod taimera atiestatÄ«Å”anas komanda wdt_reset( un jāizvairās no pārstartÄ“Å”anas normālas darbÄ«bas laikā - 8 sek.
// testiem nav ieteicams iestatīt vērtību, kas ir mazāka par 8 sekundēm. Šajā gadījumā ir vēlams atiestatīt taimeri
// raustīŔanās, un tas notiek katru sekundi.

}

void loop () {
// tukÅ”s cikls, Å”eit bÅ«s kontrole pār elektromotora atvērtās fāzes darbÄ«bu
}

spēkā neesoÅ”s skaits() {

tft.setTextColor(ST7735_WHITE); // iestatiet fonta krāsu
t = rtc.getTime(); // lasīŔanas laiks
tft.setCursor(5, 120); // kursora pozīcijas iestatīŔana
tft.fillRect(5, 120, 50, 7, ST7735_MELNS); // laika izvades apgabala notīrīŔana
tft.print(rtc.getTimeStr()); // izejas pulksteņa rādījumi

wdt_reset(); // atiestatīt sargsuni katrā ciklā, t.i., sekundē

for (rc = 0; rc < 4; rc ++) // cikla sākums ievades stāvokļa atbilstības pārbaudei
// porta biti uz iepriekŔējo porta D bitu lasÄ«Å”anas stāvokli
{
pinState = (PIND >> 4) & ( b << rc );

if (pumrcounter [rc] != pinState) { // un ja neatbilst, tad
pumrcounter[rc] = pinState; // pieŔķirot porta bitu statusa mainÄ«gajam jaunu vērtÄ«bu 1/0
}
// krāsu kontroles objektu stāvokļa norāde
// BLUE ir neliela esoŔā ekrāna (vai bibliotēkas?) kļūme, RGB un BGR ir sajaukti.
if (pinState == ( b << rc )) {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // zema lÄ«meņa skaitÄ«Å”anai mainiet ZAÄ»U uz ZILU
} Vēl {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // zema lÄ«meņa skaitÄ«Å”anai mainiet BLUE uz ZAÄ»U
sūknis [rc] += 1; // pievieno 1 sekundi darbības laika skaitītājam
}
}

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

tft.fillRect(30, maiņa, 97, 40, ST7735_MELNS); // darbÄ«bas laika displeja zonas notÄ«rÄ«Å”ana
tft.fillRect(60, 120, 73, 7, ST7735_MELNS); // un datumi

tft.setCursor(60, 120); // kursora pozīcijas iestatīŔana
tft.print(rtc.getDateStr()); // parāda datumu LCD ekrānā

priekŔ (rc = 0; rc < 4; rc ++) //izejas darba stundas kopumā, desmitdaļas un
{
tft.setCursor ( 30, rc * 10 + shift ); // stundas simtdaļas ar ekrāna nobīdi uz leju par 10 pikseļiem
tft.println(sūknis [rc] / m);
}

// ā€œneapstrādātoā€ darba stundu vērtÄ«bu (sekundēs) ierakstÄ«Å”ana EEPROM //////////////////////////////

priekÅ” (rc = 0; rc < 4; rc++)
{
EEPROM.put(adrese, sūknis [rc]);
adrese += sizeof(float); // palielināt rakstīŔanas adreses mainīgo
}
}

// sūtīt datus pa radio kanālu no datiem, norādot, cik baitu jānosūta.
if ((k == 6 ) || (k == 18 ) || (k == 30 )) {

neparakstīti gari dati;

radio.write(&sākt, izmērsof(sākt));

ja (i = 0; i < 4; i++) {
dati = sūknis[i];
radio.write( &data, sizeof( data));
}
}
}

Beigās dažas piezīmes. SkaitīŔana notiek zemā loģiskā līmenī ieejās.

UzvilkÅ”anas pretestÄ«bas R2-R5 ir 36 kOhm opcijai ar fotorezistoriem GL5516. Fototranzistora optrona un releja gadÄ«jumā iestatiet uz 4,7-5,1 kOhm. Arduino Nano v3.0 sāknÄ“Å”anas ielādētājs tika aizstāts ar Arduino Uno, izmantojot programmētāju TL866A, lai pareizi darbotos sargsuņa taimeris. DroÅ”inātāji ir koriģēti, lai tie darbotos pie sprieguma virs 4,3 V. Ārējā atiestatÄ«Å”anas ķēde R6 C3 netika izmantota. Programmas paraugā raidÄ«tāja frekvence neatbilst nelicencētajam diapazonam, 2,4 MHz diapazons ir ierobežots lÄ«dz frekvencēm 2400.0-2483.5 MHz.

RaidÄ«tāja E01-ML01DP05 diapazons ir 2400-2525 MHz. Viena kanāla joslas platums ir 1 MHz, iestatot ātrumu ā€œRF24_2MBPSā€ norādÄ«tais radio.setChannel(120) kanāls un nākamais tiks aizņemts, t.i. josla bÅ«s 2 MHz.

Avots: www.habr.com

Pievieno komentāru