Yerli avtonom məlumat toplama sistemi

Şirkət Next Technologies tərəfindən yerli istehsal olan NEKST-M monitorinq postlarını alıb. Nasos qurğularının işinin vizuallaşdırılmasını təmin etmək,
yanğın və təhlükəsizlik siqnalları, başlanğıclarda gərginliyin olması, otaq temperaturu, təcili su səviyyəsi. NEKST-M-in ürəyi ATMEGA 1280-dir və bu fakt xüsusi ehtiyaclar üçün öz dəstinizi yaratmaq imkanı baxımından ümidvericidir.

Ən qısa müddətdə və minimum xərclə konkret ehtiyaclar üçün tam muxtar yerli dispetçer sisteminin yaradılması vəzifəsi qoyulmuşdu. Əsası mikrokontrollerdir. İnkişaf, istehsal, kadrların özləri tərəfindən yaradılmışdır.

Sistem mobil şəbəkələrdən, serverlərdən, İnternetdən və radiotezlik resurslarının istifadəsi üçün lisenziya sistemindən asılı olmadan işləməli, idarəetmə və idarəetmə sisteminin işində kompüterlərdən istifadə etməməli və ya ən çox vaxtaşırı noutbuklardan istifadə etməməlidir. obyektlər uzun müddət (6-9 ay). Şəbəkə konfiqurasiyası radial quruluşa malikdir. Məlumatlar bir nöqtədə toplanır və sonra adi rabitə kanalları vasitəsilə və ya kağız nüsxə kimi emal üçün göndərilir.

Sistem təmin etməlidir:

  • nasos aqreqatlarının işinə nəzarət
  • texnoloji avtomatlaşdırma
  • fövqəladə vəziyyətlərin nəticələrindən qorunma
  • təcili siqnalizasiya
  • əməliyyat vaxtının hesablanması
  • istehlak olunan elektrik enerjisinin miqdarının hesablanması
  • avadanlıqların temperaturuna nəzarət
  • təhlükəsizlik və yanğın siqnalizasiyası
  • məlumatların vaxtaşırı uzaqdan qeydə alınması
  • bilinməyən gələcək tələblər

İş şəraiti:

  • əhatə dairəsi 1 kv.km.
  • obyektlər arasında birbaşa görünürlük
  • temperatur +50 ilə -50 C arasında
  • rütubət 100%-ə qədər
  • bioloji aktiv çöküntülər (küf, sulfat reduksiya edən bakteriyalar)
  • GOST ISO 1-2-10816-ə uyğun olaraq 1-97 sinif maşınlarının vibrasiyası, artıq deyil
  • elektromaqnit mühiti - KT 6053 kontaktorları ilə elektrik mühərriklərinin dəyişdirilməsi, RVS-DN yumşaq işəsalma avadanlığı, SIEMENS MICROMASTER PID idarəetmə avadanlığı, bu cihazlara olan tələblərə uyğun olaraq ISM və GSM diapazonunda şüalanma, yerində əl ilə qövs qaynağı
  • həddindən artıq şəbəkə gərginliyi, enerji təchizatında qısamüddətli fasilələr, ildırımların həddindən artıq gərginliyi, 6-10 kV-luq paylayıcı şəbəkələrdə hava xətti naqili qırıldığında faza balansının pozulması.

Belə ciddi tələblərə baxmayaraq, problemi addım-addım həll edərkən həyata keçirmək olduqca sadədir.

Hər şeyi nəzərə alaraq, “Arduino Nano 3.0” lövhəsi planın “beyni” oldu. Robotdyn lövhəsində ATMEGA 328 nəzarətçi, lazımi 3,3V gərginlik stabilizatoru var.
cari 800 mA və çevirici CH340G UART-USB.

İlk növbədə, ən müasir sayğaclar kimi iş saatları sayğacları yaradılmışdır. Transformatorsuz enerji təchizatı sxemi ilə PIC-lərdə yığılmış əvvəllər istifadə olunan sənaye sayğacları bir il ərzində gərginlik artımı səbəbindən uğursuz oldu. Yalnız evdə hazırlanmış 5V enerji təchizatı ilə qoşulanlar toxunulmaz qaldı. Quraşdırmanı və əlaqənin çox yönlülüyünü sürətləndirmək üçün kommutasiya cihazlarının terminallarından bölmələrin vəziyyəti haqqında bir siqnal alınır, yəni. 1V üç fazalı enerji təchizatı ilə 380-ci faza gərginliyinin mövcudluğunun qeydiyyatı. Nəzarətçi ilə koordinasiya etmək üçün 220V sarğı olan ara rele və ya LED və GL5516 fotorezistor və ya PC817 optokupllarından ibarət optokuplör istifadə olunur. Bütün variantlar sınaqdan keçirildi. LED, dövrələrin bir meqaohmmetr ilə təsadüfi sınaqdan keçirilməsi zamanı təhlükəsizlik üçün ardıcıl qoşulmuş 22V gərginlik üçün nəzərdə tutulmuş iki SVV630 kondensatorundan istifadə edərək cərəyan məhdudiyyəti ilə düzəldilmiş gərginliklə təchiz edilmişdir.
ST7735S LCD ekranından istifadə edərək iş vaxtı oxunuşlarının oxunması, 01 MHz tezliyində E01-ML05DP2,4 modulundan istifadə edərək radio vasitəsilə real vaxt rejimində məlumat ötürülməsi. Bu cihazda nRF24L01+ çipi və RFX2401C ötürücü/qəbul gücləndiricisi var,
çıxış gücü 100 mVt-a qədər. Onlayn kalkulyatorda istədiyiniz diapazon üçün nəzərdə tutulmuş spiral antenalar сайта. Antena növünün seçimi ətrafdakı metal konstruksiyalardan tək əks olunan dalğaların qəbulunun istisna edilməsi ilə müəyyən edilir. Anten hissələri 3D printerdə çap olunur. Sayğacların cari vəziyyəti nəzarətçinin özünün EEPROM-da saxlanılır və gözlənilməz elektrik kəsilməsi halında bərpa olunur. Hesablama üçün vaxt intervalları ehtiyat batareyası olan modul şəklində RTC çipi DS3231 tərəfindən təmin edilir. Enerji təchizatı 3 moduldan istifadə edir, faktiki impuls mənbəyi 220/5V HLK-PM01 600mA, 1-5V-dən 5V-ə qədər çevirici HW-553 и 03962A - batareya nəzarətçisi ilə nümunə qısaqapanmadan, həddindən artıq boşalmadan və həddindən artıq yükləmədən qorunma. Bütün komponentlər Aliexpress saytında alınıb.

Çörək lövhəsiYerli avtonom məlumat toplama sistemi
4 kanallı sayğac. Bükülmüş cüt rabitə xətti üzərində müdaxilədən qorumaq üçün girişlərdə LC filtrləri var. İdarəetmə obyektlərinin vəziyyəti haqqında məlumatlar daim saniyədə bir dəfə oxunur və LCD-də rəngli göstərilir. Oxumalar hər 1 saniyədən bir yenilənir və qeyri-sabit yaddaşda qeyd olunur. 36 saniyə saatın 36/1 hissəsidir, bu məlumatların tələb olunduğu formatdır. Hər 100 saniyədən bir. hər bir idarəetmə blokunun işləmə saniyələrinin sayı haqqında məlumat ötürülür. EEPROM yaddaşında, istehsalçıya görə, 12 dəfə məhdud sayda yazma silmə dövrü var. Ən pis seçim, ən azı bir hüceyrənin daim yenilənməsidir. 100000-ci sayğacın həcmi 1 baytdır, bu uzun formatlı nömrədir, 4 sayğac, cəmi 4 bayt bir rekord tutur. Çipin yaddaşının uzunluğu 16 baytdır, 1024 sayğacın 64 girişindən sonra qeyd yenidən başlayacaq. EEPROM kitabxanasında EEPROM.put metodu yazmır, əgər xananın dəyəri və yazılan məlumat uyğun gəlirsə, xanaların deqradasiyası baş verməyəcək. Nəticədə yaddaşın zəmanətli işləmə müddəti 4 ildən çox olacaq. Mümkün, lakin zəmanət verilməyən işin vaxtı daha uzun ola bilər.

Dövrə diaqramıYerli avtonom məlumat toplama sistemi
Arduino IDE-də proqram//12 bayt (328%)

#daxildir // Əsas qrafik kitabxanası
#daxildir // Aparat üçün xüsusi kitabxana
# daxil edin
#daxildir
# daxil edin
#daxildir
#daxildir
RF24 radio(9, 10); // RF24 kitabxanası ilə işləmək üçün radio obyekti,
// və pin nömrələri nRF24L01+ (CE, CSN)
#daxildir
DS3231 rtc(SDA, SCL);
Vaxt t;

//#TFT_CS 10 təyin edin
#TFT_CS 8-u təyin edin
#define TFT_RST -1 // siz bunu Arduino resetinə də qoşa bilərsiniz
// bu halda bu #define pinini -1-ə təyin edin!
//#define TFT_DC 9 // DC=RS=A0 - əmr və ya verilənlər registrinin seçilməsi üçün təyinetmə variantları.
#TFT_DC 3-u təyin edin

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

// Seçim 2: istənilən sancaqlardan istifadə edin, lakin bir az yavaş!
#define TFT_SCLK 13 // bunları istədiyiniz pinlər kimi təyin edin!
#define TFT_MOSI 11 // bunları istədiyiniz pinlər kimi təyin edin!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#daxildir

bayt sürüşməsi = 52;
bayt pinState;
imzasız uzun nasos[4];// 4 saniyə sayğac dəyərləri olan massiv
float m = 3600.0;
imzasız int ünvanı = 0;
int rc;// sayğaclar üçün dəyişən
imzasız uzun sumprim = 0;
imzasız uzun sumsek = 0;
bayt i = 0;
bayt k = 34;
imzasız int z = 0;
bayt b = B00000001;
byte pumrcounter[4]; // obyekt vəziyyətlərinin saxlanması üçün massiv, 1 - off, 0 - açıq.
int başlanğıc = 0; //

boş quraşdırma () {

rtc.begin();
radio.begin(); // nRF24L01+ işə başlayın
radio.setChannel(120); // məlumat kanalı (0-dan 127-yə qədər).
radio.setDataRate(RF24_250KBPS); // məlumat ötürmə sürəti (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // ötürücü gücü (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Məlumat ötürülməsi üçün identifikatoru olan boru açın

// Vaxtı təyin etmək üçün lazım olan sətirləri şərhdən çıxarın
//rtc.setDOW(1); // Həftənin günü
//rtc.setTime(21, 20, 0); // Vaxt, 24 saat formatında.
//rtc.setDate(29, 10, 2018); // Tarix, 29 oktyabr 2018-ci il

tft.initR(INITR_BLACKTAB); // ST7735S çipini işə salın, qara nişan
// 1.44" TFT istifadə edirsinizsə, bu başlatıcıdan istifadə edin (şərhdən çıxarın).
//tft.initR(INITR_144GREENTAB); // ST7735S çipini, RED rcB nişanını işə salın
tft.setTextWrap(yanlış); // Mətnin sağ kənardan axmasına icazə verin
tft.setRotation( 2 ); // BLACK PCB və RED tft.setRotation(0) üçün və ya yox.
tft.fillScreen(ST7735_BLACK); // təmiz ekran

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // proqram təminatının bərkidilməsi işləyir, yüksək səviyyə -
// idarə olunan obyektlər “işləmir”, “4” bütün 1 böyük D portuna yazılır, heç bir hesablama baş vermir.

üçün ( rc = 0; rc < 4; rc++)
{
tft.setCursor ( 3, rc * 10 + shift ); // idarəetmə obyektlərinin mövqe nömrələrinin göstərilməsi
tft.print(rc + 1);
}

tft.setCursor(12, 0); // 3 sətir mətn çıxarın
tft.println("İnkişaf edənlər və qurun"); // sevdiklərinizi tərifləmək
tft.setCursor(24, 10); // və ya pis müəllif hüququ
tft.print("DEVELOPER MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//məlumatların bərpası//////////////////////////////////////////// ///////////

for ( z = 0; z < 1023; z += 16 ) { // Sənayenin bütün xanalarını təkrarlayır
//və hər sayğac üçün 4 bayt olan 4 nasos dəyişəni massivinə yazır, çünki
// işarəsiz uzun dəyişən. 4 sayğac var, bütün 4-dən bir qeyd 16 bayt tutur.
EEPROM.get(z, nasos[0]); // belə, for loop olmadan, daha az həcm
EEPROM.get(z+4, nasos[1]);
EEPROM.get(z+8, nasos[2]);
EEPROM.get(z+12, nasos[3]);

// 4 sayğacın cəmi üçün yeni növbəti dəyər təyin edilməsi
sumprim = (nasos [0] + nasos [1] + nasos [2] + nasos [3]);

// sumprim dəyişənindəki 4 sayğacın cəminin yeni dəyərini dəyişəndəki əvvəlki qiymətlə müqayisə edir
// sumsek və əvvəlki cəmi yeni cəmdən kiçik və ya ona bərabərdirsə, yeni böyük və ya bərabər təyin edilir
// sumsek dəyəri.

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

//və cari dəyər z ünvan dəyişəninə təyin edilir, z 16 dəyərdən ibarət 4 baytlıq blokun başlanğıcının ünvanıdır.
// eyni vaxtda qeydə alınan sayğaclar (çünki port sorğusu zamanı onun bütün 8 biti eyni vaxtda yazılır,
// lazımi yüksək 4 bit port D daxil olmaqla).
ünvan = z;
}
}

// 16 qeydə alınmış sayğac dəyərinin 4 baytlıq blokunun başlanğıc ünvanında eeprom yaddaşına bir daha daxil olmaq
// sonuncu, yəni. donma səbəbindən bağlanmadan və ya yenidən başlamazdan əvvəl dəyərlər. Ən son qeyd olunur
// dəyərləri 4 dəyişəndən ibarət bir sıraya çevirin.

EEPROM.get(ünvan, nasos[0]);
EEPROM.get(ünvan + 4, nasos[1]);
EEPROM.get(ünvan + 8, nasos[2]);
EEPROM.get(ünvan + 12, nasos[3]);

ünvan += 16; //son qeydin məlumatlarının üzərinə yazmadan növbəti blokun yazılması üçün ünvanın artırılması

//məlumatların bərpasının sonu///////////////////////////////////////// //////////////////

attachInterrupt(0, saymaq, RISING); // pin D2, fasilələri aktivləşdir, hər saniyə gəl
// SQW çıxışından RTC DS3231-dən impulslar

wdt_enable(WDTO_8S); // gözətçi taymerini işə salın, donma halında nəzarətçini yenidən başladın, vaxt,
// bunun üçün wdt_reset (taymer sıfırlama) əmrini verməli və normal iş zamanı yenidən yükləmədən çəkinin - 8 san.
// testlər üçün dəyəri 8 saniyədən az təyin etmək tövsiyə edilmir.Bu halda, taymerin sıfırlanması daha məqsədəuyğundur.
// sarsılır və bu hər saniyə olur.

}

boş halqa () {
// boş dövrə, burada elektrik mühərrikinin açıq faza işinə nəzarət olacaq
}

boşluq sayı () {

tft.setTextColor(ST7735_WHITE); // şriftin rəngini təyin edin
t = rtc.getTime(); // oxuma vaxtı
tft.setCursor(5, 120); // kursorun yerini təyin etmək
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // vaxtın çıxış sahəsinin təmizlənməsi
tft.print(rtc.getTimeStr()); // saat oxunuşları

wdt_reset(); // nəzarətçi iti hər dövrədə, yəni saniyədə sıfırlayın

üçün (rc = 0; rc < 4; rc ++) // giriş vəziyyətinin uyğunluğunu yoxlamaq üçün dövrün başlanğıcı
// port bitləri port D bitlərinin əvvəlki oxunma vəziyyətinə
{
pinState = (PIND >> 4) & ( b << rc );

if (pumrcounter [rc] != pinState) { // və uyğun gəlmirsə, onda
pumrcounter[rc] = pinState; // port bit statusu dəyişəninə yeni dəyər 1/0 təyin edilməsi
}
// rəng nəzarət obyektlərinin vəziyyətinin göstəricisi
// BLUE mövcud ekranın (yaxud kitabxananın?) kiçik qüsurudur, RGB və BGR qarışdırılıb.
əgər (pinState == ( b << rc )) {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // aşağı səviyyəli hesablama üçün YAŞIL rəngi MAVİ rəngə dəyişin
} Else {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // aşağı səviyyəli hesablama üçün MAVİ rəngi YAŞIL rəngə dəyişin
nasos [rc] += 1; // iş vaxtı sayğacına 1 saniyə əlavə edin
}
}

k++;
əgər (k == 36) {
k = 0;

tft.fillRect(30, sürüşmə, 97, 40, ST7735_BLACK); // əməliyyat vaxtının göstərilməsi sahəsinin təmizlənməsi
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // və tarixlər

tft.setCursor(60, 120); // kursorun yerini təyin etmək
tft.print(rtc.getDateStr()); // LCD ekranda tarixi göstərin

üçün (rc = 0; rc < 4; rc ++) //çıxış iş saatlarını tam, onda bir və
{
tft.setCursor ( 30, rc * 10 + shift ); // ekranın 10 piksel aşağı sürüşməsi ilə saatın yüzdə biri
tft.println(nasos [rc] / m);
}

// EEPROM-a "xam" iş saatlarının (saniyədə) yazılması ////////////////////////////

üçün (rc = 0; rc < 4; rc++)
{
EEPROM.put(ünvan, nasos [rc]);
ünvan += sizeof(float); // yazı ünvanı dəyişənini artırın
}
}

// neçə bayt göndərilməli olduğunu göstərən verilənlərdən radio kanalı üzərindən məlumat göndərin.
əgər ((k == 6 ) || (k == 18 ) || (k == 30 )) {

imzalanmamış uzun məlumatlar;

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

üçün (i = 0; i < 4; i++) {
data = nasos [i ];
radio.write( &data, sizeof(data));
}
}
}

Sonda bir neçə qeyd. Hesablama girişlərdə aşağı məntiqi səviyyədə baş verir.

R2-R5 çəkmə müqavimətləri GL36 fotorezistorları olan seçim üçün 5516 kOhm təşkil edir. Fototransistor optokupl və rele vəziyyətində 4,7-5,1 kOhm-a təyin edin. Arduino Nano v3.0 yükləyicisi, gözətçi taymerinin düzgün işləməsi üçün TL866A proqramçısından istifadə edərək Arduino Uno ilə əvəz olundu. Sigortalar 4,3 V-dan yuxarı gərginliklərdə işləmək üçün düzəldilir. Xarici sıfırlama sxemi R6 C3 istifadə edilməmişdir. Nümunə proqramda ötürücü tezliyi lisenziyasız diapazona uyğun gəlmir, 2,4 MHz diapazonu 2400.0-2483.5 MHz tezliklərlə məhdudlaşır.

E01-ML01DP05 ötürücü diapazonu 2400-2525 MHz-dir. Bir kanalın bant genişliyi 1 MHz-dir, sürəti “RF24_2MBPS” olaraq təyin edərkən göstərilən radio.setChannel(120) kanalı və növbətisi işğal ediləcək, yəni. diapazon 2 MHz olacaq.

Mənbə: www.habr.com

Добавить комментарий