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Ä
Maizes dÄlis
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Ä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