Inkqubo yokuqokelela idatha ezizimeleyo zasekuhlaleni

Inkampani ithenge izithuba zokubeka iliso ze-NEKST-M, eziveliswe ngaphakathi yi-Next Technologies. Ukuqinisekisa ukubonwa kokusebenza kweeyunithi zokumpompa,
iialamu zomlilo kunye nokhuseleko, ubukho bombane kwiziqalisi, ubushushu begumbi, inqanaba lamanzi likaxakeka. Intliziyo ye-NEKST-M yi-ATMEGA 1280 kwaye le nyaniso iyakhuthaza malunga nokwenzeka kokwenza ikhithi yakho kwiimfuno ezithile.

Umsebenzi wawumiselwe ukudala inkqubo yokuthunyelwa kwendawo yokuzimela ngokupheleleyo kwiimfuno ezithile ngexesha elifutshane kunye neendleko ezincinci. Isiseko sisilawuli esincinci. Uphuhliso, ukuveliswa, okwenziwe ngabasebenzi ngokwabo.

Inkqubo kufuneka isebenze ngaphandle kokuxhomekeka kwiinethiwekhi zeselula, iiseva, i-Intanethi kunye nenkqubo yelayisenisi yokusetyenziswa kwezixhobo zerediyo, ingasebenzisi iikhompyuter ekusebenzeni kwenkqubo yolawulo nolawulo okanye, uninzi, isebenzise iilaptops ngamaxesha athile, ngaphandle kokufikelela izinto ixesha elide (6-9 iinyanga). Ubumbeko lwenethiwekhi lunolwakhiwo lweradial. Idatha iqokelelwa ngexesha elinye kwaye emva koko ithunyelwe ukuba iqhutywe kusetyenziswa amajelo onxibelelwano rhoqo okanye njengekopi eprintiweyo.

Inkqubo kufuneka ibonelele:

  • ukubeka esweni ukusebenza kweeyunithi zokumpompa
  • automation yetekhnoloji
  • ukukhuselwa kwiziphumo zeemeko zonxunguphalo
  • umqondiso kaxakeka
  • ixesha lokusebenza ukubala
  • ukubala umthamo wombane osetyenzisiweyo
  • ulawulo lobushushu besixhobo
  • ukhuseleko kunye ne-alam yomlilo
  • ukurekhodwa kolwazi ngamaxesha athile
  • iimfuno ezingaziwayo kwixesha elizayo

Iimeko zokusebenza:

  • indawo yokugubungela i-1 sq. km.
  • ukubonakala ngqo phakathi kwezinto
  • iqondo lobushushu ukusuka +50 ukuya -50 C
  • ukufuma ukuya kuthi ga kwi-100%
  • iidipozithi ezisebenza ngokwebhayoloji (umngundo, iibhaktheriya ezinciphisa isulfate)
  • ukungcangcazela, akusekho, koomatshini beeklasi 1-2 ngokweGOST ISO 10816-1-97
  • Ubume be-electromagnetic-ukutshintsha kweemotor zombane ezine-KT 6053 zoqhagamshelwano, iRVS-DN izixhobo zokuqala ezithambileyo, izixhobo zokulawula i-SIEMENS MICROMASTER PID, i-radiation kwi-ISM kunye noluhlu lwe-GSM ngokweemfuno zezi zixhobo, ukuwelda kwe-arc ngesandla kwindawo
  • umbane ogqithisayo womnatha, ukuphazamiseka kwexesha elifutshane kunikezelo lwamandla, umbane ogqithisayo, ukungalingani kwesigaba xa intambo yombane ongaphezulu igqabhuka kwi-6-10 kV network networks.

Nangona ezi mfuno zingqongqo, ukuphunyezwa kulula kakhulu xa usombulula ingxaki ngenyathelo.

Ukuthatha yonke into, ibhodi "Arduino Nano 3.0" yaba "yingqondo" yesicwangciso. Ibhodi ye-robotdyn inomlawuli we-ATMEGA 328, i-3,3V eyimfuneko yokuqina kwamandla ombane
yangoku 800 mA kunye converter ukuba CH340G UART-USB.

Okokuqala, izixhobo zokubala iiyure zokusebenza zenziwe njengezona zihlaziyiweyo. Iimitha zemizi-mveliso ebezikade zisetyenziswa ngaphambili ebezidityaniswe kwiiPICs kunye nesekethe yonikezelo lwamandla engenasiguquli ayiphumelelanga ngenxa yokunyuka kwamandla ombane kunyaka wokusebenza. Kuphela ngabo baqhagamshelwe kusetyenziswa izixhobo zasekhaya ze-5V ezihlala zinjalo. Ukukhawulezisa ukufakela kunye nokuxhamla koqhagamshelwano, isignali malunga nemo yeeyunithi ithathwa kwii-terminals zezixhobo zokutshintsha, i.e. ukubhaliswa kobukho be-voltage yesigaba se-1 kunye nesigaba sesithathu sokunikezelwa kwamandla ka-380V. Ukulungelelanisa kunye nomlawuli, i-relay ephakathi kunye ne-220V yomoya okanye i-optocoupler eyenziwe yi-LED kunye ne-GL5516 photoresistor okanye i-PC817 optocoupler isetyenziswa. Zonke iinketho zavavanywa. I-LED inikwe amandla ombane olungisiweyo kunye nokukhawulelana kwangoku usebenzisa i-SVV22 capacitors ezimbini ezenzelwe i-voltage ye-630V exhunywe kwichungechunge lokhuseleko ngexesha lokuvavanya ngengozi kwiisekethe nge-megohmmeter.
Ukufunda ukufundwa kwexesha lokusebenza usebenzisa isikrini se-LCD se-ST7735S, ukuhanjiswa kwedatha yexesha langempela ngerediyo usebenzisa imodyuli ye-E01-ML01DP05 kwi-frequency ye-2,4 MHz. Esi sixhobo sine-nRF24L01+ chip kunye ne-RFX2401C yokuhambisa / ukufumana iamplifier,
amandla emveliso ukuya kuthi ga kwi-100 mW. Ii-eriyali ze-Helical ziyilelwe uluhlu olufunekayo kwisibali se-intanethi indawo. Ukukhethwa kohlobo lwe-eriyali luchongwa kukungabandakanywa kokufunyanwa kwamaza abonakaliswe ngokukodwa kwizakhiwo zetsimbi ezijikelezayo. Iindawo ze-eriyali ziprintwa kwiprinta ye-3D. Ubume bangoku bezinto zokubala zigcinwe kwi-EEPROM yomlawuli ngokwawo kwaye ibuyiselwe xa kwenzeka umbane ongalindelekanga. Ixesha lexesha lokubala linikezelwa yi-RTC chip DS3231 ngendlela yemodyuli enebhetri yokugcina. Ukunikezelwa kwamandla kusebenzisa iimodyuli ze-3, umthombo wangempela we-pulse 220/5V HLK-PM01 600mA, umguquleli ukusuka kwi-1-5V ukuya kwi-5V HW-553 и 03962A - isilawuli sebhetri nge umzobo ukukhuselwa kwisiphaluka esifutshane, ukukhutshwa ngokugqithiseleyo kunye nokugqithiswa. Onke amacandelo athengwa kwiwebhusayithi ye-Aliexpress.

Ibhodi yesonkaInkqubo yokuqokelela idatha ezizimeleyo zasekuhlaleni
4-ichaneli counter. Kukho izihluzi ze-LC kumagalelo okukhusela ngokuchasene nokuphazamiseka kumgca wonxibelelwano olujijekileyo. Idatha kwimeko yokulawula izinto zihlala zifundwa kanye ngomzuzwana kwaye ziboniswe ngombala kwi-LCD. Ufundo luyahlaziywa kwaye lurekhodwa kwimemori engaguquguqukiyo rhoqo kwimizuzwana engama-1. Imizuzwana engama-36 yi-36/1 yeyure, le yifomathi apho idatha ifunwa khona. Rhoqo nge 100 sec. ulwazi luhanjiswa malunga nenani lemizuzwana yokusebenza kwiyunithi yolawulo nganye. Imemori ye-EEPROM inenani elilinganiselweyo lemijikelo yokucima ukubhala, ngokutsho komenzi, amaxesha angama-12. Eyona ndlela imbi kuxa iseli enye isoloko ihlaziywa. Umthamo we-counter counter yi-100000 bytes, le nombolo ende yefomathi, i-1 counters, i-4 bytes iyonke ihlala kwirekhodi enye. Ubude bememori yetshiphu yi-4 bytes, emva kongeniso lwe-16 lwezixhobo zokubala ezi-1024, ukurekhoda kuya kuqalisa kwakhona. Kwilayibrari ye-EEPROM, indlela ye-EEPROM.put ayibhali; ukuba ixabiso leseli kunye nolwazi olubhaliweyo luyahambelana, akuyi kubakho ukuthotywa kweeseli. Ngenxa yoko, ixesha lokusebenza kwememori eqinisekisiweyo iya kuba ngaphezu kweminyaka eyi-64. Ixesha elinokwenzeka kodwa elingaqinisekisiweyo lomsebenzi linokuba lide kakhulu.

Umzobo weseketheInkqubo yokuqokelela idatha ezizimeleyo zasekuhlaleni
Inkqubo kwi-Arduino IDE//12 bytes (328%)

#zibandakanya // Ithala leencwadi lemizobo engundoqo
#zibandakanya // Ithala leencwadi elingqale kwihardware
# kuquka
#zibandakanya
# kuquka
#zibandakanya
#zibandakanya
Irediyo yeRF24(9, 10); // into kanomathotholo yokusebenza nethala leencwadi leRF24,
// kunye neenombolo zepin nRF24L01+ (CE, CSN)
#zibandakanya
I-DS3231 rtc(SDA, SCL);
Ixesha t;

//#chaza i-TFT_CS 10
#chaza TFT_CS 8
#define TFT_RST -1 // ungadibanisa oku kwakhona Arduino
// apho ke, seta le #define pin ku -1!
//#chaza TFT_DC 9 // DC=RS=A0 - iinketho zokutyumba ukukhetha umyalelo okanye irejista yedatha.
#chaza TFT_DC 3

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

// Ukhetho lwesi-2: sebenzisa naziphi na izikhonkwane kodwa kancinci kancinci!
#chaza TFT_SCLK 13 // seta ezi zibe zizo naziphi na izikhonkwane ozithandayo!
#chaza TFT_MOSI 11 // seta ezi zibe zizo naziphi na izikhonkwane ozithandayo!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#zibandakanya

byte shift = 52;
byte pinState;
impompo ende engatyikitywanga[4];// uluhlu olunemizuzwana emi-4 yamaxabiso okubala
i-float m = 3600.0;
idilesi engatyikitywanga = 0;
int rc;// utshintsho lwezixhobo zokubala
i-sumprim ende engatyikitywanga = 0;
engatyikitywanga sumsec ende = 0;
ibhayithi i = 0;
byte k = 34;
unsigned int z = 0;
byte b = B00000001;
byte pumrcounter[4]; // uluhlu lokugcina izinto, 1 - off, 0 - on.
int start = 0; //

ukuseta okungasebenziyo () {

rtc.qala ();
irediyo.qala (); // Qalisa umsebenzi nRF24L01+
radio.setChannel(120); // ishaneli yedatha (ukusuka kwi-0 ukuya kwi-127).
radio.setDataRate(RF24_250KBPS); // izinga lokudluliselwa kwedatha (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // amandla okuhambisa (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Vula umbhobho onesazisi sokudlulisa idatha

// Ukuseta ixesha, uncomment imigca eyimfuneko
//rtc.setDOW(1); // Usuku lweveki
//rtc.setTime(21, 20, 0); // Ixesha, kwifomati yeyure ezingama-24.
//rtc.setDate(29, 10, 2018); // Umhla, ngo-Oktobha 29, 2018

tft.initR(INITR_BLACKTAB); // qalisa i-chip ye-ST7735S, ithebhu emnyama
// Sebenzisa esi siqalisi (uncomment) ukuba usebenzisa i-1.44" TFT
//tft.initR(INITR_144GREENTAB); // qalisa i-chip ye-ST7735S, i-RED rcB tab
tft.setTextWrap(bubuxoki); // Vumela okubhaliweyo ukubaleka kumda wasekunene
tft.setRotation ( 2); // ye-PCB EMNYAMA kunye ne-RED tft.setRotation (0) okanye hayi.
tft.fillScreen(ST7735_BLACK); // ecacileyo isikrini

I-DDRD = i-DDRD | B00000000;
I-PORTD = I-PORTD | B11110000; // ukuqiniswa kwesoftware kuyasebenza, kwinqanaba eliphezulu -
// izinto ezilawulwayo "azisebenzi", "4" ibhaliwe kuzo zonke i-1 izibuko eziphezulu ze-D, akukho kubalwa kwenzeka.

ye ( rc = 0; rc < 4; rc++)
{
tft.setCursor ( 3, rc * 10 + shift ); // ukubonisa amanani eendawo zezinto zokulawula
tft.print(rc + 1);
}

tft.setCursor(12, 0); // isiphumo imigca emi-3 yombhalo
tft.println("ABAPHUHLISI & BAKHA"); // ukuzincoma zithandwa
tft.setCursor(24, 10); // okanye ilungelo lokushicilela elibi
tft.print("UPHUHLISO MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//ukubuyisela idatha///////////////////////////////////////// ///////////

kuba ( z = 0; z < 1023; z += 16 ) {// Iiterates kuzo zonke iiseli zeshishini
//kwaye ubhalela uluhlu lweepompo eziguquguqukayo ezi-4, iibhayithi ezi-4 kwikhawuntara nganye, kuba
// utshintsho olude olungatyikitywanga. Kukho izinto zokubala ezi-4, irekhodi enye yazo zonke ezi-4 ithatha i-16 bytes.
EEPROM.get(z, impompo[0]); // ngoko, ngaphandle kwe-loop, umthamo omncinci
EEPROM.get(z+4, impompo[1]);
EEPROM.get(z+8, impompo[2]);
EEPROM.get(z+12, impompo[3]);

// ukwabela ixabiso elitsha elilandelayo kwisambuku sezinto zokubala ezi-4
suprim = (impompo [0] + impompo [1] + impompo [2] + impompo [3]);

// ithelekisa ixabiso elitsha lenani lezinto zokubala ezi-4 kwi-variable ye-suprim kunye nexabiso langaphambili kuguquguquko
// sumsec kwaye ukuba isixa sangaphambili singaphantsi okanye silingana nesixa esitsha, entsha enkulu okanye elinganayo iyabelwa.
// ixabiso le-sumsec.

ukuba ( sumsec <= suprim ) {
sumsec = suprim; //

//kwaye ixabiso langoku u-z wabelwe ukuguquguquka kwedilesi, z yidilesi yesiqalo sebhloko ye-16-byte yamaxabiso ama-4.
// izixhobo zokubala ezirekhodwe ngaxeshanye (ukusukela xa kuvotwa izibuko, zonke iibhithi ezisi-8 zibhalwa ngaxeshanye,
// kuquka iibhithi zethu eziyimfuneko eziphezulu ze-4 zezibuko D).
idilesi = z;
}
}

// kwakhona ukufikelela kwimemori ye-eeprom kwidilesi yokuqala yebhloko ye-16 bytes ye-4 erekhodiweyo yamaxabiso okubala
// okokugqibela, okt. amaxabiso phambi kokuvala okanye ukuqalisa kwakhona ngenxa yomkhenkce. Ukurekhoda yamva nje
// amaxabiso ekhawuntari kuluhlu lweepompo eziguquguqukayo ezi-4.

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

idilesi += 16; // ukwandisa idilesi yokubhala ibhloko elandelayo ngaphandle kokubhala ngaphezulu idatha yerekhodi yokugqibela

//ukuphela kokubuyiswa kwedatha/////////////////////////////////////// //////////////////

attachInterrupt(0, count, RISING); // pin D2, vumela ukuphazamisa, yiza yonke isekhondi
// iipulses ezivela kwi-RTC DS3231 ukusuka kwimveliso ye-SQW

wdt_enable(WDTO_8S); // qalisa isibali-xesha sokubukela, qalisa kwakhona isilawuli kwimeko yokukhenkceza, ixesha,
// apho kufuneka ukhuphe umyalelo wokusetha kwakhona isibali-xesha wdt_reset (kwaye unqande ukuqalisa kwakhona ngexesha lokusebenza okuqhelekileyo - 8 sec.
// kwiimvavanyo akukhuthazwa ukuseta ixabiso libe ngaphantsi kwemizuzwana ye-8. Kulo mzekelo, isibali-xesha sisetwa ngokutsha ngokufanelekileyo.
// ukungcangcazela, kwaye kwenzeka rhoqo ngesibini.

}

iluphu engasebenziyo () {
// umjikelo ongenanto, apha kuya kuba nolawulo malunga nokusebenza kwesigaba esivulekileyo sombane wombane
}

inani elingenanto () {

tft.setTextColor(ST7735_WHITE); // seta umbala wefonti
t = rtc.getTime (); // ixesha lokufunda
tft.setCursor(5, 120); // ukuseta indawo yekhesa
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // ukucoca indawo yokuphuma kwexesha
tft.print(rtc.getTimeStr()); // ukufundwa kwewotshi yemveliso

wdt_reset(); // setha kwakhona i-watchdog yonke imijikelo, oko kukuthi isibini

kuba (rc = 0; rc <4; rc ++) // isiqalo somjikelo wokukhangela ukuthotyelwa kwemeko yegalelo
// amasuntswana ezibuko ukuya kwimeko yokufunda yangaphambili yezibuko D
{
pinState = (PIND >> 4) & ( b << rc);

ukuba (pumrcounter [rc] != pinState) {// kwaye ukuba ayihambelani, ngoko
pumrcounter[rc] = pinState; // ukwabela ubume bebume bebume ixabiso elitsha 1/0
}
// isibonakaliso semeko yezinto zokulawula umbala
// BLUE yi-glitch encinci yesikrini ekhoyo (okanye ilayibrari?), I-RGB kunye ne-BGR zixutywe.
ukuba (pinState == ( b << rc )) {
tft.fillRect (15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // kwizinga eliphantsi lokubala utshintsho LULULUHLAZA ukuya kwiBLUE
} Enye {
tft.fillRect (15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // kwizinga eliphantsi lokubala utshintsho BULULU ukuya LULULU
impompo [rc] += 1; // yongeza i-1 yesibini kwikhawunta yexesha lokusebenza
}
}

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

tft.fillRect(30, shift, 97, 40, ST7735_BLACK); // ukucima indawo yokubonisa ixesha lokusebenza
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // kunye nemihla

tft.setCursor(60, 120); // ukuseta indawo yekhesa
tft.print(rtc.getDateStr()); // bonisa umhla kwiscreen seLCD

kuba (rc = 0; rc <4; rc ++) //imveliso yeeyure zokusebenza ngokupheleleyo, okweshumi kunye
{
tft.setCursor ( 30, rc * 10 + shift ); // hundredths yeyure enescreen shift nge 10 pixels
tft.println(impompo [rc] / m);
}

// ukubhala amaxabiso eeyure zokusebenza “ekrwada” (ngemizuzwana) ukuya kwi-EEPROM ///////////////////////////

ye (rc = 0; rc <4; rc++)
{
EEPROM.put(idilesi, impompo [rc]);
idilesi += ubukhulu be(float); // yongeza umahluko wedilesi yokubhala
}
}

// thumela idatha kwisitishi sikanomathotholo ukusuka kwidatha ebonisa ukuba zingaphi ii-byte ezifanele ukuthunyelwa.
ukuba ((k == 6 ) || (k == 18 ) || (k == 30 )) {

idatha ende engatyikitywanga;

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

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

Amanqaku ambalwa ekugqibeleni. Ukubala kwenzeka kwinqanaba eliphantsi lengqiqo kumagalelo.

Ukutsalwa kwe-R2-R5 yi-36 kOhm yokhetho kunye ne-photoresistors GL5516. Kwimeko ye-phototransistor optocoupler kunye ne-relay, ibekwe kwi-4,7-5,1 kOhm. I-Arduino Nano v3.0 i-bootloader yatshintshwa nge-Arduino Uno usebenzisa i-TL866A umdwelisi womsebenzi ochanekileyo we-watchdog timer. I-fuses ilungiswa ukuba isebenze kwii-voltages ezingaphezulu kwe-4,3 V. I-reset reset circuit yangaphandle i-R6 C3 ayizange isetyenziswe. Kwinkqubo yomzekelo, i-frequency transmitter ayihambelani noluhlu olungagunyaziswanga; uluhlu lwe-2,4 MHz lukhawulelwe kwiifrikhwensi ze-2400.0-2483.5 MHz.

Uluhlu lwe-E01-ML01DP05 i-transmitter yi-2400-2525 MHz. I-bandwidth yesinye ishaneli yi-1 MHz, xa ubeka isantya njenge "RF24_2MBPS" ishaneli ye-radio.setChannel (120) echaziweyo kunye nelandelayo iya kuhlala, okt. ibhendi iya kuba 2 MHz.

umthombo: www.habr.com

Yongeza izimvo