Sistem pendataan otonom lokal

Perusahaan ngagaleuh tulisan ngawaskeun NEKST-M, diproduksi sacara domestik ku Next Technologies. Pikeun mastikeun visualisasi operasi unit pompa,
alarm seuneu jeung kaamanan, ayana tegangan di starters, suhu kamar, tingkat cai darurat. Jantung NEKST-M nyaéta ATMEGA 1280 sareng kanyataan ieu nyorong dina hal kamungkinan nyiptakeun kit anjeun nyalira pikeun kabutuhan khusus.

Tugasna disetél pikeun nyiptakeun sistem pangiriman lokal anu otonom pikeun kabutuhan khusus dina waktos anu paling pondok sareng biaya minimal. Dasarna nyaéta mikrokontroler. Pangwangunan, manufaktur, dijieun ku staf sorangan.

Sistem kedah beroperasi tanpa gumantungna kana jaringan sélulér, server, Internét sareng sistem lisénsi pikeun panggunaan sumber frekuensi radio, henteu nganggo komputer dina operasi sistem monitoring sareng kontrol atanapi, paling sering, nganggo laptop périodik, tanpa aksés ka objék pikeun lila (6-9 bulan). Konfigurasi jaringan mibanda struktur radial. Data dikumpulkeun dina hiji waktos lajeng dikirim pikeun diolah ngaliwatan saluran komunikasi biasa atawa salaku hard copy.

Sistim kudu nyadiakeun:

  • ngawaskeun operasi unit pompa
  • automation téhnologis
  • panyalindungan tina konsékuansi tina kaayaan darurat
  • sinyal darurat
  • itungan waktos operasi
  • ngitung jumlah listrik anu dikonsumsi
  • alat kontrol suhu
  • kaamanan jeung alarm seuneu
  • ngarékam jauh périodik inpormasi
  • syarat hareup kanyahoan

Kaayaan gawé:

  • aréa sinyalna 1 km sq.
  • pisibilitas langsung antara objék
  • suhu ti +50 nepi ka -50 C
  • kalembaban nepi ka 100%
  • deposit sacara biologis aktip (kapang, baktéri pangurangan sulfat)
  • Geter, teu langkung, tina mesin kelas 1-2 numutkeun GOST ISO 10816-1-97
  • lingkungan éléktromagnétik - switching motor listrik kalawan KT 6053 contactors, RVS-DN soft start equipment, SIEMENS MICROMASTER PID alat kontrol, radiasi dina rentang ISM jeung GSM nurutkeun sarat pikeun alat ieu, las arc manual dina situs.
  • tegangan jaringan kaleuleuwihan, interruptions jangka pondok dina catu daya, overvoltages kilat, saimbangna fase nalika hiji kawat garis overhead megatkeun dina jaringan distribusi 6-10 kV.

Sanaos syarat anu ketat sapertos kitu, palaksanaan cukup saderhana nalika ngarengsekeun masalah léngkah-léngkah.

Nyandak sadayana kana akun, papan "Arduino Nano 3.0" janten "otak" tina rencana éta. dewan robotdyn boga ATMEGA 328 controller, nu diperlukeun 3,3V tegangan penstabil pikeun
ayeuna 800 mA jeung converter mun CH340G UART-USB.

Anu mimiti, konter jam operasi diciptakeun salaku anu paling énggal. Méter industri anu saacanna dianggo dirakit dina PIC kalayan sirkuit catu daya transformerless gagal kusabab lonjakan tegangan dina sataun operasi. Ngan anu disambungkeun nganggo catu daya 5V homemade tetep gembleng. Pikeun nyepetkeun pamasangan sareng versatility sambungan, sinyal ngeunaan kaayaan unit dicokot tina terminal alat switching, i.e. pendaptaran ayana tegangan fase 1st kalawan catu daya tilu-fase 380V. Pikeun koordinat kalawan controller dipaké hiji relay panengah jeung 220V pungkal atawa optocoupler diwangun ku hiji LED sarta photoresistor GL5516 atawa optocoupler PC817 dipaké. Sadaya pilihan diuji. LED ieu Powered by tegangan rectified kalawan watesan ayeuna ngagunakeun dua kapasitor SVV22 dirancang pikeun tegangan 630V disambungkeun dina runtuyan pikeun kaamanan salila nguji kahaja tina sirkuit jeung megohmmeter a.
Maca bacaan waktos operasi ngagunakeun layar LCD ST7735S, pangiriman data real-time via radio ngagunakeun modul E01-ML01DP05 dina frékuénsi 2,4 MHz. Alat ieu ngandung chip nRF24L01+ sareng RFX2401C ngirimkeun / nampi amplifier,
kakuatan kaluaran nepi ka 100 mW. anteneu hélik dirancang pikeun rentang dipikahoyong dina kalkulator online situs. Pilihan jenis anteneu ditangtukeun ku pangaluaran tina panarimaan gelombang tunggal reflected tina struktur logam sabudeureun. Bagian anteneu dicitak dina printer 3D. Kaayaan ayeuna tina counters disimpen dina EEPROM controller sorangan sarta disimpen deui dina acara hiji outage kakuatan kaduga. Interval waktu keur cacah disadiakeun ku chip RTC DS3231 dina bentuk modul jeung batré cadangan. Catu daya ngagunakeun 3 modul, sumber pulsa sabenerna 220/5V HLK-PM01 600mA, konverter ti 1-5V ka 5V HW-553 и 03962A - batré controller jeung skéma panyalindungan ngalawan sirkuit pondok, overdischarge na overcharge. Sadaya komponén dipésér dina situs wéb Aliexpress.

Papan rotiSistem pendataan otonom lokal
4-kanal counter. Aya saringan LC dina input pikeun ngajagaan tina gangguan dina jalur komunikasi pasangan twisted. Data ngeunaan kaayaan objék kontrol terus dibaca sakali per detik sarta dipintonkeun dina warna dina LCD. Bacaan diropéa sarta dirékam dina mémori non-volatile unggal 1 detik. 36 detik nyaéta 36/1 jam, ieu mangrupikeun format dimana data diperyogikeun. Unggal 100 detik. informasi dikirimkeun ngeunaan jumlah detik operasi pikeun tiap unit kontrol. Memori EEPROM gaduh jumlah kawates siklus ngahapus-tulis, nurutkeun produsén, 12 kali. Pilihan anu paling awon nyaéta nalika sahenteuna hiji sél terus diropéa. Volume counter 100000st nyaéta 1 bait, ieu téh jumlah format panjang, 4 counters, jumlahna aya 4 bait ditempatan ku hiji rékaman. Panjang mémori chip nyaéta 16 bait; saatos 1024 éntri tina 64 counter, ngarékam bakal ngamimitian deui. Dina perpustakaan EEPROM, metode EEPROM.put henteu nyerat; upami nilai sél sareng inpormasi anu ditulis cocog, moal aya degradasi sél. Hasilna, waktu operasi memori dijamin bakal leuwih ti 4 taun. Waktos padamelan anu mungkin tapi henteu dijamin tiasa langkung lami.

Diagram sirkuitSistem pendataan otonom lokal
Program dina Arduino IDE//12 bait (328%)

#kaasup // Perpustakaan grafik inti
#kaasup // Perpustakaan husus hardware
#kaasup
#kaasup
#lebetkeun
#kaasup
#kaasup
Radio RF24(9, 10); // objék radio pikeun gawé bareng perpustakaan RF24,
// sareng nomer pin nRF24L01+ (CE, CSN)
#kaasup
DS3231 rtc(SDA, SCL);
Waktos t;

//#define TFT_CS 10
#define TFT_CS 8
#define TFT_RST -1 // anjeun ogé tiasa nyambungkeun ieu ka Arduino reset
// dina hal ieu, set ieu #define pin ka -1!
//#define TFT_DC 9 // DC = RS = A0 - pilihan designation pikeun milih paréntah atawa data register.
#define TFT_DC 3

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

// Pilihan 2: nganggo pin naon waé tapi rada laun!
#define TFT_SCLK 13 // set ieu janten pin naon anu anjeun resep!
#define TFT_MOSI 11 // set ieu janten pin naon anu anjeun resep!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#kaasup

bait shift = 52;
bait pinState;
pompa panjang unsigned [4]; // Asép Sunandar Sunarya kalawan nilai counter 4 detik
ngambang m = 3600.0;
alamat int unsigned = 0;
int rc; // variabel pikeun counters
unsigned long sumprim = 0;
unsigned long sumsec = 0;
bait i = 0;
bait k = 34;
unsigned int z = 0;
bait b = B00000001;
bait pumrcounter [4]; // Asép Sunandar Sunarya pikeun nyimpen kaayaan objék, 1 - off, 0 - on.
int ngamimitian = 0; //

batal setelan () {

rtc.begin();
radio.begin(); // Initiate karya nRF24L01+
radio.setChannel(120); // saluran data (ti 0 nepi ka 127).
radio.setDataRate(RF24_250KBPS); // laju mindahkeun data (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // kakuatan pamancar (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Buka pipa kalawan identifier pikeun mindahkeun data

// Pikeun nyetel waktos, uncomment garis perlu
//rtc.setDOW(1); // Poé minggu
//rtc.setTime(21, 20, 0); // Waktos, dina format 24 jam.
//rtc.setDate(29, 10, 2018); // Kaping, 29 Oktober 2018

tft.initR(INITR_BLACKTAB); // initialize a chip ST7735S, tab hideung
// Paké initializer ieu (uncomment) lamun nuju ngagunakeun 1.44 "TFT
//tft.initR(INITR_144GREENTAB); // initialize a chip ST7735S, RED rcB tab
tft.setTextWrap(palsu); // Ngidinan téks ngajalankeun kaluar ujung katuhu
tft.setRotation(2); // pikeun PCB BLACK sareng RED tft.setRotation (0) atanapi henteu.
tft.fillScreen (ST7735_BLACK); // layar jelas

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // tightening software jalan, tingkat luhur -
// objék dikawasa "teu dianggo", "4" ditulis ka sadaya 1 palabuhan senior D, euweuh cacah lumangsung.

pikeun (rc = 0; rc <4; rc++)
{
tft.setCursor (3, rc * 10 + shift); // mintonkeun nomer posisi objék kontrol
tft.print(rc + 1);
}

tft.setCursor(12, 0); // kaluaran 3 garis téks
tft.println("Pamekar & BANGUNAN"); // muji diri nu dipikacinta
tft.setCursor(24, 10); // atanapi hak cipta jahat
tft.print("Pamekar MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

// pamulihan data /////////////////////////////////////////// ///////////

pikeun (z = 0; z <1023; z += 16) {// Iterates ngaliwatan sakabéh sél industri
// jeung nulis ka Asép Sunandar Sunarya 4 variabel pompa, 4 bait pikeun tiap counter, sabab
// variabel lila unsigned. Aya 4 counters, hiji catetan sadaya 4 nyokot 16 bait.
EEPROM.get(z, pompa [0]); // janten, tanpa for loop, volume kirang
EEPROM.get(z+4, pompa [1]);
EEPROM.get(z+8, pompa [2]);
EEPROM.get(z+12, pompa [3]);

// assigning hiji nilai salajengna anyar pikeun jumlah 4 counters
sumprim = (pompa [0] + pompa [1] + pompa [2] + pompa [3]);

// ngabandingkeun nilai anyar tina jumlah 4 counters dina variabel sumprim jeung nilai saméméhna dina variabel
// sumsec jeung lamun jumlah saméméhna kurang atawa sarua jeung jumlah anyar, nu anyar leuwih gede atawa sarua ditugaskeun
// nilai sumsec.

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

//sarta nilai ayeuna z ditugaskeun ka variabel alamat, z nyaéta alamat awal blok 16-bait tina 4 nilai.
// counters dirékam dina waktos anu sareng (saprak nalika polling port a, sadaya 8 bit eta ditulis sakaligus,
// kaasup kami perlu tinggi 4 bit port D).
alamat = z;
}
}

// sakali deui ngaksés mémori eeprom di alamat awal blok 16 bait tina 4 nilai kontra anu dirékam
// panungtungan, i.e. nilai sateuacan mareuman atanapi rebooting kusabab katirisan. Ngarekam panganyarna
// nilai counter kana susunan 4 variabel pompa.

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

alamat += 16; // Ngaronjatkeun alamat pikeun nulis blok salajengna tanpa overwriting data tina catetan panungtungan

//tungtung pamulihan data ///////////////////////////////////////// /////////////////

attachInterrupt(0, cacah, RISING); // pin D2, ngaktifkeun interrupts, datangna unggal detik
// pulsa ti RTC DS3231 ti kaluaran SQW

wdt_enable (WDTO_8S); // ngamimitian timer pangawas, reboot controller bisi katirisan, waktu,
// nu Anjeun kudu ngaluarkeun timer reset paréntah wdt_reset (jeung ulah rebooting salila operasi normal - 8 detik.
// pikeun tés henteu disarankeun pikeun ngeset nilai kirang ti detik 8. Dina hal ieu, timer direset preferably
// jerking, sarta eta kajadian unggal detik.

}

batal loop () {
// siklus kosong, di dieu bakal aya kadali kana operasi buka-fase tina motor listrik
}

jumlah void() {

tft.setTextColor(ST7735_WHITE); // Nyetél warna font
t = rtc.getTime (); // waktos maca
tft.setCursor(5, 120); // netepkeun posisi kursor
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // ngabersihan wewengkon kaluaran waktos
tft.print(rtc.getTimeStr()); // bacaan jam kaluaran

wdt_reset(); // ngareset watchdog unggal siklus, nyaéta kadua

pikeun (rc = 0; rc <4; rc ++) // awal siklus pikeun mariksa minuhan kaayaan input
// bit port ka kaayaan maca saméméhna tina port D bit
{
pinState = (PIND >> 4) & (b << rc);

lamun (pumrcounter [rc]!= pinState) {// jeung lamun teu cocog, teras
pumrcounter [rc] = pinState; // assigning variabel status bit port hiji nilai anyar 1/0
}
// indikasi kaayaan objék kontrol warna
// BLUE mangrupakeun glitch leutik layar aya (atanapi perpustakaan?), RGB sarta BGR dicampurkeun up.
lamun (pinState == (b << rc)) {
tft.fillRect (15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // pikeun tingkat low cacah robah Héjo ka BLUE
} Sejenna {
tft.fillRect (15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // pikeun tingkat low cacah robah BLUE ka Héjo
ngompa [rc] += 1; // nambahkeun 1 detik ka counter waktu operasi
}
}

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

tft.fillRect(30, shift, 97, 40, ST7735_BLACK); // ngabersihan wewengkon tampilan waktos operasi
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // jeung kaping

tft.setCursor(60, 120); // netepkeun posisi kursor
tft.print(rtc.getDateStr()); // mintonkeun tanggal dina layar LCD

pikeun (rc = 0; rc <4; rc ++) // output jam operasi sakabéhna, tenths jeung
{
tft.setCursor ( 30, rc * 10 + shift ); // saratus sajam kalayan layar shift handap ku 10 piksel
tft.println(pompa [rc] / m);
}

// nulis nilai jam operasi "atah" (dina detik) kana EEPROM ///////////////////////////

pikeun (rc = 0; rc < 4; rc++)
{
EEPROM.put (alamat, pompa [rc]);
alamat += ukuran (ngambang); // increment variabel alamat nulis
}
}

// ngirim data ngaliwatan saluran radio ti data nunjukkeun sabaraha bait kudu dikirim.
lamun ((k == 6 ) || (k == 18 ) || (k == 30 )) {

data panjang unsigned;

radio.write (& ngamimitian, sizeof (mimitian));

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

Sababaraha catetan dina tungtungna. Cacah lumangsung dina tingkat logis low di inputs.

Résistansi tarik-up R2-R5 nyaéta 36 kOhm pikeun pilihan sareng photoresistors GL5516. Dina kasus optocoupler phototransistor na relay, disetel ka 4,7-5,1 kOhm. Arduino Nano v3.0 bootloader diganti ku Arduino Uno ngagunakeun programmer TL866A pikeun operasi bener tina timer watchdog. Fuses dilereskeun pikeun beroperasi dina tegangan luhur 4,3 V. The éksternal reset circuit R6 C3 teu dipaké. Dina program sampel, frékuénsi pamancar teu pakait jeung rentang unlicensed; rentang 2,4 MHz dugi ka frékuénsi 2400.0-2483.5 MHz.

Kisaran pamancar E01-ML01DP05 nyaéta 2400-2525 MHz. Bandwidth tina hiji saluran nyaéta 1 MHz, nalika netepkeun laju salaku "RF24_2MBPS" saluran radio.setChannel (120) anu ditangtukeun sareng anu salajengna bakal dijajah, nyaéta. band bakal 2 MHz.

sumber: www.habr.com

Tambahkeun komentar