Pergala berhevkirina daneya xweser a herêmî

Pargîdanî postên çavdêriyê yên NEKST-M kirî, ku li hundurê ji hêla Teknolojiyên Next ve hatî hilberandin. Ji bo ku dîtbariya xebata yekîneyên pompê piştrast bikin,
alarmên agir û ewlehiyê, hebûna voltaja di destpêkê de, germahiya odeyê, asta avê ya acîl. Dilê NEKST-M ATMEGA 1280 e û ev rastî di warê îmkana afirandina kîteya xwe ya ji bo hewcedariyên taybetî de teşwîq dike.

Erk hate danîn ku ji bo hewcedariyên taybetî di demek herî kurt de û bi lêçûnek hindiktirîn de pergalek belavkirina herêmî ya bi tevahî xweser were afirandin. Bingehek mîkrokontrolker e. Pêşketin, çêkirin, ji hêla karmendan ve hatî afirandin.

Pêdivî ye ku pergal bêyî girêdayîbûna bi torên hucreyî, pêşkêşker, Internetnternetê û pergala lîsansê ya ji bo karanîna çavkaniyên frekansa radyoyê bixebite, di xebata pergala şopandin û kontrolê de komputeran bikar neyîne an, herî zêde, demkî laptopan bikar bîne, bêyî gihîştina tiştên ji bo demeke dirêj (6-9 meh). Veavakirina torê xwedan avahiyek radial e. Daneyên li yek nuqteyê têne berhev kirin û dûv re ji bo pêvajoyê bi kanalên ragihandinê yên birêkûpêk an wekî kopiyek hişk têne şandin.

Pergal divê peyda bike:

  • çavdêriya xebata yekîneyên pompkirinê
  • automation teknolojîk
  • parastina ji encamên şert û mercên awarte
  • sînyala acîl
  • hesabkirina dema xebatê
  • hesabkirina mîqdara elektrîkê ku tê xerckirin
  • kontrola germahiya amûrê
  • alarma ewlehiyê û agir
  • tomara dûr a peryodîk a agahdariyê
  • pêdiviyên pêşerojê nenas

Mercên karkirinê:

  • qada vegirtinê 1 km çargoşe.
  • xuyabûna rasterast di navbera tiştan de
  • germahî ji +50 heta -50 C
  • şilbûna heya %100
  • depoyên biyolojîkî yên çalak (qelp, bakteriyên ku sulfate kêm dikin)
  • lerizîna makîneyên çînên 1-2, nema, li gorî GOST ISO 10816-1-97
  • hawîrdora elektromagnetîk - guheztina motorên elektrîkê yên bi têkilîkerên KT 6053, alavên destpêkirina nerm RVS-DN, alavên kontrolê yên SIEMENS MICROMASTER PID, tîrêjên di nav rêza ISM û GSM de li gorî hewcedariyên van amûran, welkirina kemerê ya bi destan li ser malperê
  • voltaja zêde ya torê, qutbûna demkurt di dabînkirina elektrîkê de, voltaja birûskê, nehevsengiya qonaxê dema ku têlek xeta jorîn di torên belavkirinê yên 6-10 kV de diqete.

Tevî van hewcedariyên hişk, dema ku pirsgirêk gav bi gav çareser dibe, pêkanîn pir hêsan e.

Li gorî her tiştî, panela "Arduino Nano 3.0" bû "mejiyê" planê. Lijneya robotdyn xwedan kontrolkerek ATMEGA 328 e, ji bo stabilîzatora voltaja 3,3V ya pêwîst e.
niha 800 mA û veguherîner bo CH340G UART-USB.

Berî her tiştî, jimarvanên demjimêrên xebatê wekî yên herî nûjen hatin afirandin. Metreyên pîşesaziyê yên berê hatine bikar anîn ku li ser PIC-ên bi çerxa dabînkirina hêzê ya bê transformer hatine berhev kirin ji ber bilindbûna voltaja di nav salek xebitandinê de têk çû. Tenê yên ku bi karanîna dabînkirina elektrîkê ya 5V ya xwemalî ve girêdayî ne sax mane. Ji bo lezkirina sazkirinê û pirrengiya girêdanê, îşaretek li ser rewşa yekîneyan ji termînalên cîhazên guheztinê tê girtin, ango. qeydkirina hebûna voltaja qonaxa 1-emîn bi dabînkirina hêza sê-qonaxê ya 380V. Ji bo koordînasyona bi kontrolkerê re, relayek navîn bi pêleka 220V an optocouplerek ku ji LED û wênekêşek GL5516 an optocouplerek PC817 pêk tê tê bikar anîn. Hemû vebijêrk hatin ceribandin. LED bi voltaja rastkirî ya bi tixûbdarkirina niha ve bi karanîna du kondensatorên SVV22 ve hatî çêkirin ku ji bo voltaja 630V ji rêzê ve girêdayî ye ji bo ewlehiyê di dema ceribandina bêserûber a çerxên bi megohmmetre de hatî çêkirin.
Xwendina xwendinên dema xebitandinê bi karanîna ekrana LCD ya ST7735S, veguheztina daneya rast-ê bi radyoyê ve bi karanîna modula E01-ML01DP05 bi frekansa 2,4 MHz ve tê bikar anîn. Di vê cîhazê de çîpê nRF24L01+ û amplifikatora RFX2401C veguheztin/wergirtin heye,
hêza hilberînê heya 100 mW. Antên helîk ji bo rêza xwestinê di hesabkera serhêl de hatine çêkirin malperê. Hilbijartina celebê antenna ji hêla dûrxistina wergirtina pêlên yekane yên ronîkirî yên ji strukturên metal ên derdorê ve tê destnîşankirin. Parçeyên antenna li ser çapkerek 3D têne çap kirin. Rewşa heyî ya jimarvanan di EEPROM-a kontrolkerê bixwe de tê hilanîn û di bûyerek qutbûna elektrîkê ya neçaverêkirî de tê nûve kirin. Navberên demê ji bo jimartinê ji hêla çîpa RTC DS3231 ve di forma modulek bi pîlê hilanînê de têne peyda kirin. Dabînkirina hêzê 3 modul bikar tîne, çavkaniya pêlê ya rastîn 220/5V HLK-PM01 600mA, veguherînerek ji 1-5V ber 5V HW-553 и 03962A - kontrolkerê pîlê bi scheme parastina li dijî çerxa kurt, zêdebarkirin û barkirinê. Hemî pêkhate li ser malpera Aliexpress hatin kirîn.

Lijneya nanPergala berhevkirina daneya xweser a herêmî
4-kanal counter. Li têketinan fîlterên LC hene ku li hember destwerdanê li ser xeta ragihandinê ya cotek ziravî biparêzin. Daneyên li ser rewşa tiştên kontrolê bi domdarî di çirkeyê de carekê têne xwendin û bi reng li ser LCD-ê têne xuyang kirin. Xwendin her 1 saniyeyan carekê di bîra neguhar de têne nûve kirin û tomar kirin. 36 saniye 36/1 saetê ye, ev forma ku tê de dane hewce ye. Her 100 saniye. agahdarî li ser hejmara saniyeyên xebatê ji bo her yekîneya kontrolê têne şandin. Bîra EEPROM li gorî hilberîner, 12 carî hejmareke sînorkirî ya çerxên nivîsandin-hilbirînê heye. Vebijarka herî xirab ew e ku bi kêmî ve yek hucreyek bi domdarî were nûve kirin. Hêjmara jimarvana 100000emîn 1 byte ye, ev jimarek formatek dirêj e, 4 hejmarker, bi tevahî 4 byte ji hêla yek tomar ve tê dagirtin. Dirêjahiya bîra çîpê 16 byte ye; piştî 1024 têketinên 64 jimarvan, tomarkirin dê ji nû ve dest pê bike. Di pirtûkxaneya EEPROM-ê de, rêbaza EEPROM.put nanivîse; heke nirxa şaneyê û agahdariya ku têne nivîsandin li hev bikin, dê şaneyan hilweşîne. Wekî encamek, dema xebitandina bîranîna garantîkirî dê ji 4 salan zêdetir be. Wextê xebata mumkin lê ne garantîkirî dikare pir dirêjtir be.

Circuit diagramPergala berhevkirina daneya xweser a herêmî
Bername di Arduino IDE de//12 bytes (328%)

#linavxistin // Pirtûkxaneya grafîkê ya bingehîn
#linavxistin // Pirtûkxaneya taybet-hardware
#linavxistin
#linavxistin
#linavxistin
#linavxistin
#linavxistin
radyo RF24 (9, 10); // objekta radyoyê ji bo xebata bi pirtûkxaneya RF24,
// û hejmarên pin nRF24L01+ (CE, CSN)
#linavxistin
DS3231 rtc (SDA, SCL);
Dem t;

//# define TFT_CS 10
# define TFT_CS 8
#define TFT_RST -1 // hûn dikarin vê jî bi vesazkirina Arduino ve girêdin
// di vê rewşê de, vê pînê #define bike -1!
//#define TFT_DC 9 // DC=RS=A0 - Vebijarkên binavkirinê ji bo hilbijartina fermanek an tomarek daneyê.
#TFT_DC 3 diyar bike

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

// Vebijêrk 2: her pinek lê hinekî hêdîtir bikar bînin!
#define TFT_SCLK 13 // vana saz bikin ku hûn çi pîneyan dixwazin!
#define TFT_MOSI 11 // vana saz bikin ku hûn pîneyên ku hûn jê hez dikin bin!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#linavxistin

byte shift = 52;
byte pinState;
pompeya dirêj a bêîmze [4];// array bi 4 saniye nirxên hejmartinê
float m = 3600.0;
navnîşana int ya bê îmze = 0;
int rc;// guherbar ji bo jimarvan
sumprim dirêj a bê îmze = 0;
sumsec dirêj a bê îmze = 0;
byte i = 0;
byte k = 34;
unsigned int z = 0;
byte b = B00000001;
byte pumrcounter[4]; // array ji bo hilanîna rewşên tiştan, 1 - off, 0 - on.
int start = 0; //

sazkirina betal () {

rtc.begin();
radio.begin(); // Karê nRF24L01+ bidin destpêkirin
radio.setChannel(120); // kanala daneyê (ji 0 heta 127).
radio.setDataRate(RF24_250KBPS); // rêjeya veguhastina daneyan (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // hêza veguhestinê (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Ji bo veguheztina daneyan boriyek bi nasnameyek vekin

// Ji bo danîna demê, rêzikên pêwîst ji şîrovekirinê derxînin
//rtc.setDOW(1); // Roja hefteyê
//rtc.setTime(21, 20, 0); // Dem, di forma 24 saetan de.
//rtc.setDate(29, 10, 2018); // Dîrok, 29

tft.initR(INITR_BLACKTAB); // çîpek ST7735S, tabloyek reş dest pê bike
// Heke hûn TFT-ya 1.44" bikar tînin, vê destpêkerê (bê şîrovekirinê) bikar bînin
//tft.initR(INITR_144GREENTAB); // çîpek ST7735S, tabloya rcB RED dest pê bike
tft.setTextWrap(derew); // Destûrê bide ku nivîs ji milê rastê derkeve
tft.setRotation(2); // ji bo PCB BLACK û RED tft.setRotation(0) an na.
tft.fillScreen(ST7735_BLACK); // ekrana zelal

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // hişkkirina nermalavê dixebite, asta bilind -
// Tiştên kontrolkirî "xebitin", "4" li her 1 portên mezin D tê nivîsandin, hejmartin çênabe.

ji bo (rc = 0; rc <4; rc++)
{
tft.setCursor (3, rc * 10 + shift); // nîşandana jimareyên pozîsyona tiştên kontrolê
tft.print(rc + 1);
}

tft.setCursor(12, 0); // 3 rêzên nivîsê derdixe
tft.println("PÊŞKEVEK Û AVAKIRIN"); // pesnê xwe bidin hezkiriyên xwe
tft.setCursor(24, 10); // an jî mafê telîfê xerab
tft.print("DEVELOPER MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//vegerandina daneyan///////////////////////////////////////////////////////////////////// ////////////

ji bo (z = 0; z <1023; z += 16) { // Di nav hemî şaneyên pîşesaziyê de dubare dibe
//û li komek ji 4 guherbarên pompê, 4 byte ji bo her jimarvanek dinivîse, ji ber
// guherbara dirêj a bê îmze. 4 jimarvan hene, tomarek ji her 4 kesan 16 byte digire.
EEPROM.get(z, pomp[0]); // ji ber vê yekê, bêyî lûleya for, volta kêmtir
EEPROM.get(z+4, pompe[1]);
EEPROM.get(z+8, pompe[2]);
EEPROM.get(z+12, pompe[3]);

// ji bo kombûna 4 jimarvanan nirxek din a nû destnîşan dike
sumprim = (pompe [0] + pompe [1] + pompe [2] + pompe [3]);

// nirxa nû ya kombûna 4 jimarvanan di guherbara sumprim de bi nirxa berê ya di guherbarê de dide ber hev.
// sumsec û heke berhevoka berê ji berhevoka nû kêmtir an wekhev be, ya nû mezintir an wekhev tê destnîşankirin.
// nirxa sumsec.

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

//û nirxa niha z ji guhêrbara navnîşanê re tê destnîşankirin, z navnîşana destpêka bloka 16-byte ya 4 nirxan e.
// jimarvan di heman demê de hatine tomar kirin (ji ber ku dema dengdana benderekê, hemî 8 bitên wê bi hevdemî têne nivîsandin,
// tevî 4 bitsên meya bilind ên port D).
navnîşan = z;
}
}

// careke din xwe bigihîne bîra eeprom li navnîşana destpêka bloka 16-byte ya 4 nirxên hejmarên tomarkirî
// dawî, yanî. nirxên berî girtin an ji nû ve destpêkirinê ji ber cemidandinê. Tomarkirina herî dawî
// nirxên jimarvan di nav komek 4 guherbaran de pomp dikin.

EEPROM.get(navnîşan, pompe[0]);
EEPROM.get(navnîşan + 4, pompe[1]);
EEPROM.get(navnîşan + 8, pompe[2]);
EEPROM.get(navnîşan + 12, pompe[3]);

navnîşan += 16; //Zêdekirina navnîşana ji bo nivîsandina bloka paşîn bêyî nivîsandina daneyên qeyda paşîn

//dawiya vegerandina daneyan/////////////////////////////////////////////////////////////////// //////////////////

attachInterrupt(0, hejmartin, RISING); // pin D2, navberan çalak bike, her saniye were
// pêlên ji RTC DS3231 ji derana SQW

wdt_enable(WDTO_8S); // demjimêra nobedar dest pê bike, di bûyera cemidandinê de kontrolker ji nû ve saz bike, dem,
// ji bo ku hûn hewce ne ku emrê vesazkirina demjimêrê wdt_reset (û di dema xebata normal de ji nû ve destpêkirinê dûr bixin - 8 saniye.
// ji bo ceribandinan nayê pêşniyar kirin ku nirx ji 8 çirkeyan kêmtir were danîn.
// diqewime, û her saniye diqewime.

}

betal loop () {
// çerxa vala, li vir dê kontrola operasyona qonaxa vekirî ya motora elektrîkê hebe
}

hejmara vala () {

tft.setTextColor(ST7735_WHITE); // rengê tîpan destnîşan bike
t = rtc.getTime(); // dema xwendinê
tft.setCursor(5, 120); // danîna pozîsyona kursorê
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // paqijkirina qada derketina demê
tft.print(rtc.getTimeStr()); // xwendina saetê derdixe

wdt_reset(); // her çerxekê, ango saniyeyê, nobedarê ji nû ve bike

ji bo (rc = 0; rc <4; rc ++) // destpêka çerxa ji bo kontrolkirina lihevhatina rewşa têketinê
// bitikên portê berbi rewşa xwendina berê ya bitên port D
{
pinState = (PIND >> 4) & ( b << rc );

heke (pumrcounter [rc] != pinState) { // û heke li hev nebe, wê hingê
pumrcounter[rc] = pinState; // guhêrbar statûya bit-a portê nirxek nû 1/0 destnîşan dike
}
// nîşana rewşa tiştên kontrolkirina rengan
// BLUE xeletiyek piçûk a dîmendera heyî ye (an pirtûkxane?), RGB û BGR tevlihev dibin.
heke (pinState == (b << rc)) {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // ji bo hejmartina asta nizm GREEN bi SHÎN biguherînin
} Else {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // ji bo hejmartina asta nizm ŞÎN bibe KESK
pompe [rc] += 1; // 1 çirke li jimareya dema xebatê zêde bike
}
}

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

tft.fillRect(30, shift, 97, 40, ST7735_BLACK); // paqijkirina qada nîşana dema xebitandinê
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // û tarîx

tft.setCursor(60, 120); // danîna pozîsyona kursorê
tft.print(rtc.getDateStr()); // tarîxê li ser ekrana LCD nîşan bide

ji bo (rc = 0; rc <4; rc ++) // saetên xebatê bi tevahî, deh û
{
tft.setCursor ( 30, rc * 10 + guheztin ); // sedên saetekê bi guheztina ekranê bi 10 pixelan
tft.println(pompa [rc] / m);
}

// ji EEPROM re nirxên demjimêrên xebitandinê yên "raw" (di çirkeyan de) dinivîsin ////////////////////////////

ji bo (rc = 0; rc <4; rc++)
{
EEPROM.put(navnîşan, pompe [rc]);
navnîşan += sizeof(float); // guherbara navnîşana nivîsandinê zêde bike
}
}

// Daneyên li ser kanala radyoyê bişînin ji daneyên ku destnîşan dikin ku çend byte divê werin şandin.
heke ((k == 6) || (k == 18) || (k == 30)) {

Daneyên dirêj ên bê îmze;

radio.write(&destpêk, sizeof(destpêk));

ji bo (i = 0; i <4; i++) {
data = pompe [i];
radio.write( &data, sizeof(dane));
}
}
}

Di dawiyê de çend têbînî. Hejmartin di asteke mentiqî ya nizm de li têketinan pêk tê.

Ji bo vebijarka bi fotoresîstorên GL2 re berxwedanên kişandina R5-R36 5516 kOhm in. Di doza optocoupler û relayek fototransîstor de, li ser 4,7-5,1 kOhm were danîn. Bootloader Arduino Nano v3.0 bi Arduino Uno bi karanîna bernameçêkera TL866A ji bo xebata rast a demjimêra çavdêriyê hate guheztin. Sîgorte têne rast kirin ku di voltaja jorîn 4,3 V de bixebitin. Qada resetkirina derveyî R6 C3 nehat bikar anîn. Di bernameya nimûneyê de, frekansa veguhêz bi rêza bê destûr nagire; Rêjeya 2,4 MHz bi frekansên 2400.0-2483.5 MHz ve sînorkirî ye.

Rêjeya ragihana E01-ML01DP05 2400-2525 MHz e. Berfirehiya kanalekê 1 MHz e, dema ku lezê wekî "RF24_2MBPS" were danîn kanala radio.setChannel(120) ya diyarkirî û ya din dê were dagir kirin, yanî. band dê bibe 2 MHz.

Source: www.habr.com

Add a comment