Mfumo wa ukusanyaji wa data wa uhuru wa ndani

Kampuni ilinunua machapisho ya ufuatiliaji ya NEKST-M, yaliyotolewa nchini na Next Technologies. Ili kuhakikisha taswira ya uendeshaji wa vitengo vya kusukumia,
kengele za moto na usalama, uwepo wa voltage kwenye vianzishi, joto la kawaida, kiwango cha maji ya dharura. Moyo wa NEKST-M ni ATMEGA 1280 na ukweli huu ni wa kutia moyo katika suala la uwezekano wa kuunda kit yako mwenyewe kwa mahitaji maalum.

Kazi iliwekwa kuunda mfumo wa utumaji wa ndani unaojiendesha kikamilifu kwa mahitaji maalum kwa muda mfupi iwezekanavyo na kwa gharama ndogo. Msingi ni microcontroller. Maendeleo, utengenezaji, iliyoundwa na wafanyikazi wenyewe.

Mfumo lazima ufanye kazi bila kutegemea mitandao ya rununu, seva, Mtandao na mfumo wa leseni kwa matumizi ya rasilimali za masafa ya redio, usitumie kompyuta katika uendeshaji wa mfumo wa ufuatiliaji na udhibiti au, zaidi, utumie kompyuta za mkononi mara kwa mara, bila kupata vitu kwa muda mrefu (miezi 6-9). Usanidi wa mtandao una muundo wa radial. Data inakusanywa kwa wakati mmoja na kisha kutumwa kwa usindikaji kupitia njia za kawaida za mawasiliano au kama nakala ngumu.

Mfumo lazima utoe:

  • ufuatiliaji wa uendeshaji wa vitengo vya kusukuma maji
  • otomatiki ya kiteknolojia
  • ulinzi kutokana na matokeo ya hali ya dharura
  • kengele kuhusu hali ya dharura
  • hesabu ya wakati wa kufanya kazi
  • kuhesabu kiasi cha umeme kinachotumiwa
  • udhibiti wa joto la vifaa
  • kengele ya usalama na moto
  • kurekodi habari kwa mbali mara kwa mara
  • mahitaji yasiyojulikana ya siku zijazo

Masharti ya kazi:

  • eneo la chanjo 1 sq.
  • mwonekano wa moja kwa moja kati ya vitu
  • joto kutoka +50 hadi -50 C
  • unyevu hadi 100%
  • amana za kibayolojia (uvimbe, bakteria zinazopunguza salfati)
  • vibration, hakuna zaidi, ya mashine za darasa 1-2 kulingana na GOST ISO 10816-1-97
  • mazingira ya sumakuumeme - ubadilishaji wa motors za umeme na kontakt KT 6053, vifaa vya kuanza laini vya RVS-DN, vifaa vya kudhibiti SIEMENS MICROMASTER PID, mionzi katika safu ya ISM na GSM kulingana na mahitaji ya vifaa hivi, kulehemu kwa arc kwenye tovuti.
  • voltage nyingi za mtandao, usumbufu wa muda mfupi katika usambazaji wa umeme, kuongezeka kwa umeme, usawa wa awamu wakati waya wa mstari wa juu unapokatika katika mitandao ya usambazaji ya kV 6-10.

Licha ya mahitaji magumu kama haya, utekelezaji ni rahisi sana wakati wa kutatua shida hatua kwa hatua.

Kuzingatia kila kitu, bodi ya "Arduino Nano 3.0" ikawa "ubongo" wa mpango huo. Bodi ya robotdyn ina kidhibiti cha ATMEGA 328, kiimarishaji cha voltage cha 3,3V kinachohitajika kwa
sasa 800 mA na kubadilisha fedha kwa CH340G UART-USB.

Kwanza kabisa, kaunta za saa za kazi ziliundwa kama zile za kisasa zaidi. Mita za viwandani zilizotumika hapo awali zilizokusanywa kwenye PIC na mzunguko wa usambazaji wa umeme usio na kibadilishaji hazikufaulu kwa sababu ya kuongezeka kwa voltage ndani ya mwaka mmoja wa operesheni. Ni zile tu zilizounganishwa kwa kutumia vifaa vya umeme vya kujitengenezea vya 5V vilivyosalia. Ili kuharakisha ufungaji na uchangamano wa uunganisho, ishara kuhusu hali ya vitengo inachukuliwa kutoka kwenye vituo vya vifaa vya kubadili, i.e. usajili wa uwepo wa voltage ya awamu ya 1 na umeme wa awamu ya tatu ya 380V. Ili kuratibu na mtawala, relay ya kati yenye upepo wa 220V au optocoupler inayojumuisha LED na photoresistor GL5516 au PC817 optocoupler hutumiwa. Chaguzi zote zilijaribiwa. LED inatumiwa na voltage iliyorekebishwa na upungufu wa sasa kwa kutumia capacitors mbili za SVV22 iliyoundwa kwa voltage ya 630V iliyounganishwa katika mfululizo kwa usalama wakati wa kupima kwa ajali ya nyaya na megohmmeter.
Kusoma usomaji wa wakati wa kufanya kazi kwa kutumia skrini ya ST7735S LCD, upitishaji wa data ya wakati halisi kupitia redio kwa kutumia moduli ya E01-ML01DP05 kwa mzunguko wa 2,4 MHz. Kifaa hiki kina chipu ya nRF24L01+ na amplifier ya RFX2401C ya kusambaza/kupokea,
nguvu ya pato hadi 100 mW. Antena za helical iliyoundwa kwa anuwai inayotaka katika kikokotoo cha mkondoni tovuti. Uchaguzi wa aina ya antenna imedhamiriwa na kutengwa kwa mapokezi ya mawimbi yaliyoonyeshwa moja kwa moja kutoka kwa miundo ya chuma inayozunguka. Sehemu za antena huchapishwa kwenye kichapishi cha 3D. Hali ya sasa ya vihesabio huhifadhiwa kwenye EEPROM ya mtawala yenyewe na hurejeshwa katika tukio la kukatika kwa umeme bila kutarajiwa. Vipindi vya muda vya kuhesabu vinatolewa na RTC chip DS3231 katika mfumo wa moduli yenye betri ya chelezo. Ugavi wa umeme hutumia moduli 3, chanzo halisi cha kunde 220/5V HLK-PM01 600mA, kibadilishaji kutoka 1-5V hadi 5V HW-553 ΠΈ 03962A - mtawala wa betri na mpango ulinzi dhidi ya mzunguko mfupi, kutokwa na malipo kupita kiasi. Vipengele vyote vilinunuliwa kwenye tovuti ya Aliexpress.

Bodi ya mkateMfumo wa ukusanyaji wa data wa uhuru wa ndani
4-channel counter. Kuna vichujio vya LC kwenye pembejeo ili kulinda dhidi ya kuingiliwa kwa laini ya mawasiliano ya jozi iliyopotoka. Data juu ya hali ya vitu vya kudhibiti inasomwa mara kwa mara mara moja kwa sekunde na kuonyeshwa kwa rangi kwenye LCD. Usomaji husasishwa na kurekodiwa katika kumbukumbu isiyo na tete kila sekunde 1. Sekunde 36 ni 36/1 ya saa, huu ndio umbizo ambalo data inahitajika. Kila sekunde 100. habari hupitishwa kuhusu idadi ya sekunde za operesheni kwa kila kitengo cha kudhibiti. Kumbukumbu ya EEPROM ina idadi ndogo ya mizunguko ya kufuta-kuandika, kulingana na mtengenezaji, mara 12. Chaguo mbaya zaidi ni wakati angalau seli moja inasasishwa kila mara. Kiasi cha counter ya 100000 ni ka 1, hii ni nambari ya muundo mrefu, vihesabu 4, jumla ya ka 4 inachukuliwa na rekodi moja. Urefu wa kumbukumbu ya chip ni baiti 16; baada ya maingizo 1024 ya kaunta 64, kurekodi kutaanza upya. Katika maktaba ya EEPROM, mbinu ya EEPROM.put haiandiki; ikiwa thamani ya seli na taarifa inayoandikwa inalingana, hakutakuwa na uharibifu wa seli. Kama matokeo, wakati wa uendeshaji wa kumbukumbu uliohakikishwa utakuwa zaidi ya miaka 4. Wakati wa kazi inayowezekana lakini isiyohakikishwa inaweza kuwa ndefu zaidi.

Mchoro wa mzungukoMfumo wa ukusanyaji wa data wa uhuru wa ndani
Programu katika Arduino IDE// baiti 12 (328%)

#pamoja na // Maktaba ya michoro ya msingi
#pamoja na // Maktaba maalum ya vifaa
#jumuisha
#pamoja na
#jumuisha
#pamoja na
#pamoja na
redio ya RF24(9, 10); // kitu cha redio cha kufanya kazi na maktaba ya RF24,
// na nambari za siri nRF24L01+ (CE, CSN)
#pamoja na
DS3231 rtc(SDA, SCL);
Muda t;

//#fafanua TFT_CS 10
#fafanua TFT_CS 8
#fafanua TFT_RST -1 // unaweza pia kuunganisha hii kwenye uwekaji upya wa Arduino
// kwa hali gani, weka #define pin hadi -1!
//#fafanua TFT_DC 9 // DC=RS=A0 - chaguzi za uteuzi za kuchagua amri au rejista ya data.
#fafanua TFT_DC 3

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

// Chaguo 2: tumia pini zozote lakini polepole kidogo!
#fafanua TFT_SCLK 13 // weka hizi ziwe pini zozote unazopenda!
#fafanua TFT_MOSI 11 // weka hizi ziwe pini zozote unazopenda!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#pamoja na

byte shift = 52;
byte pinState;
pampu ndefu isiyo na saini[4];// safu yenye thamani za kaunta za sekunde 4
kuelea m = 3600.0;
anwani ya int isiyotiwa saini = 0;
int rc;// kutofautisha kwa vihesabio
unsigned long suprim = 0;
sumsec ndefu isiyosajiliwa = 0;
byte i = 0;
byte k = 34;
unsigned int z = 0;
byte b = B00000001;
byte pumrcounter[4]; // safu ya kuhifadhi majimbo ya kitu, 1 - imezimwa, 0 - imewashwa.
int start = 0; //

usanidi batili () {

rtc.anza();
redio.anza(); // Anzisha kazi nRF24L01+
radio.setChannel(120); // kituo cha data (kutoka 0 hadi 127).
radio.setDataRate(RF24_250KBPS); // kiwango cha uhamisho wa data (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS).
radio.setPALevel(RF24_PA_MAX); // nguvu ya kisambaza data (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,
// RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // Fungua bomba na kitambulisho cha kuhamisha data

// Ili kuweka wakati, futa mistari muhimu
//rtc.setDOW(1); // Siku ya wiki
//rtc.setTime(21, 20, 0); // Muda, katika muundo wa saa 24.
//rtc.setDate(29, 10, 2018); // Tarehe, Oktoba 29, 2018

tft.initR(INITR_BLACKTAB); // anzisha chipu ya ST7735S, kichupo cheusi
// Tumia kianzilishi hiki (toa maoni) ikiwa unatumia 1.44" TFT
//tft.initR(INITR_144GREENTAB); // anzisha chipu ya ST7735S, kichupo RED rcB
tft.setTextWrap(uongo); // Ruhusu maandishi kwenda nje ya ukingo wa kulia
tft.setRotation(2); // kwa PCB NYEUSI na RED tft.setRotation(0) au la.
tft.fillScreen(ST7735_BLACK); // futa skrini

DDRD = DDRD | B00000000;
PORTD = BANDARI | B11110000; // uimarishaji wa programu unafanya kazi, kiwango cha juu -
// vitu vilivyodhibitiwa "havifanyi kazi", "4" imeandikwa kwa bandari zote 1 za juu D, hakuna kuhesabu hutokea.

kwa ( rc = 0; rc <4; rc++)
{
tft.setCursor ( 3, rc * 10 + shift); // kuonyesha nambari za nafasi za vitu vya kudhibiti
tft.print(rc + 1);
}

tft.setCursor(12, 0); // pato mistari 3 ya maandishi
tft.println("WAENDELEZI & KUJENGA"); // kujisifu wapendwa
tft.setCursor(24, 10); // au hakimiliki mbaya
tft.print("DEVELOPER MM");
tft.setCursor(28, 20);
tft.print("BUILD-ER DD");

//kurejesha data///////////////////////////////////////////// ////////////

kwa ( z = 0; z < 1023; z += 16 ) {// Inarudia kupitia seli zote za sekta
// na huandika kwa safu ya anuwai 4 za pampu, baiti 4 kwa kila kihesabu, kwa sababu
// tofauti ndefu isiyo na saini. Kuna vihesabio 4, rekodi moja ya zote 4 inachukua ka 16.
EEPROM.get(z, pampu[0]); // hivyo, bila kitanzi, kiasi kidogo
EEPROM.get(z+4, pampu[1]);
EEPROM.get(z+8, pampu[2]);
EEPROM.get(z+12, pampu[3]);

// kukabidhi thamani mpya inayofuata kwa jumla ya vihesabio 4
suprim = (pampu [0] + pampu [1] + pampu [2] + pampu [3]);

// inalinganisha thamani mpya ya jumla ya vihesabio 4 katika kigezo cha suprim na thamani ya awali katika kigezo
// sumsec na ikiwa jumla ya awali ni chini ya au sawa na jumla mpya, kubwa zaidi au sawa hupewa.
// thamani ya sumsec.

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

// na thamani ya sasa z imetolewa kwa utofauti wa anwani, z ni anwani ya mwanzo wa block ya 16-byte ya maadili 4.
// vihesabio vilivyorekodiwa kwa wakati mmoja (tangu wakati wa kupigia kura bandari, bits zake zote 8 zimeandikwa wakati huo huo,
// ikijumuisha biti zetu 4 za juu za bandari D).
anwani = z;
}
}

// kwa mara nyingine tena kupata kumbukumbu ya eeprom kwenye anwani ya mwanzo wa kizuizi cha byte 16 za maadili 4 yaliyorekodiwa.
// mwisho, i.e. thamani kabla ya kuzima au kuwasha upya kwa sababu ya kuganda. Inarekodi ya hivi punde
// thamani za kaunta katika safu ya pampu 4 za vigezo.

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

anwani += 16; // kuongeza anwani ya kuandika kizuizi kinachofuata bila kufuta data ya rekodi ya mwisho

//mwisho wa urejeshaji data//////////////////////////////////////////// ///////////////////

ambatishaKukatiza(0, hesabu, KUINUKA); // piga D2, wezesha kukatizwa, njoo kila sekunde
// mipigo kutoka kwa RTC DS3231 kutoka kwa pato la SQW

wdt_enable(WDTO_8S); // anza kipima saa, anzisha tena kidhibiti ikiwa ni kufungia, wakati,
// ambayo unahitaji kutoa amri ya kuweka upya timer wdt_reset ( na epuka kuwasha upya wakati wa operesheni ya kawaida - 8 sec.
// kwa vipimo haipendekezi kuweka thamani kwa chini ya sekunde 8. Katika kesi hii, kipima saa kinawekwa upya ikiwezekana.
// kutetemeka, na hufanyika kila sekunde.

}

kitanzi batili () {
// mzunguko tupu, hapa kutakuwa na udhibiti juu ya uendeshaji wa awamu ya wazi ya motor umeme
}

utupu count() {

tft.setTextColor(ST7735_WHITE); // weka rangi ya fonti
t = rtc.getTime(); // wakati wa kusoma
tft.setCursor(5, 120); // kuweka nafasi ya mshale
tft.fillRect(5, 120, 50, 7, ST7735_BLACK); // kusafisha eneo la pato la wakati
tft.print(rtc.getTimeStr()); // usomaji wa saa ya pato

wdt_reset(); // weka upya mlinzi kila mzunguko, yaani sekunde

kwa (rc = 0; rc <4; rc ++) // mwanzo wa mzunguko wa kuangalia kufuata kwa hali ya uingizaji.
// bits za bandari kwa hali ya awali iliyosomwa ya bits za bandari D
{
pinState = (PIND >> 4) & ( b << rc );

ikiwa (pumrcounter [rc] != pinState) { // na ikiwa hailingani, basi
pumrcounter[rc] = pinState; // kupeana utofauti wa hadhi ya bandari thamani mpya 1/0
}
// dalili ya hali ya vitu vya kudhibiti rangi
// BLUE ni hitilafu ndogo ya skrini iliyopo (au maktaba?), RGB na BGR zimechanganywa.
ikiwa (pinState == ( b << rc )) {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_BLUE); // kwa kuhesabu kiwango cha chini badilisha KIJANI hadi BLUE
} Mwingine {
tft.fillRect(15, ((rc * 10 + shift)), 7, 7, ST7735_GREEN); // kwa kuhesabu kiwango cha chini badilisha BLUE hadi KIJANI
pampu [rc] += 1; // ongeza sekunde 1 kwenye kihesabu cha wakati wa kufanya kazi
}
}

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

tft.fillRect(30, shift, 97, 40, ST7735_BLACK); // kusafisha eneo la kuonyesha wakati wa uendeshaji
tft.fillRect(60, 120, 73, 7, ST7735_BLACK); // na tarehe

tft.setCursor(60, 120); // kuweka nafasi ya mshale
tft.print(rtc.getDateStr()); // onyesha tarehe kwenye skrini ya LCD

kwa (rc = 0; rc <4; rc ++) //saa za kufanya kazi kwa jumla, kumi na
{
tft.setCursor ( 30, rc * 10 + shift); // mia ya saa na mabadiliko ya skrini chini kwa pikseli 10
tft.println(pampu [rc] / m);
}

// kuandika thamani za saa za uendeshaji "mbichi" (kwa sekunde) hadi EEPROM /////////////////////////////

kwa (rc = 0; rc <4; rc++)
{
EEPROM.put(anwani, pampu [rc]);
anwani += saizi ya(kuelea); // ongeza utofauti wa anwani ya uandishi
}
}

// tuma data kupitia idhaa ya redio kutoka kwa data inayoonyesha ni baiti ngapi zinapaswa kutumwa.
ikiwa ((k == 6 ) || (k == 18 ) || (k == 30 )) {

data ndefu isiyosajiliwa;

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

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

Vidokezo vichache mwishoni. Kuhesabu hutokea kwa kiwango cha chini cha mantiki kwenye pembejeo.

Upinzani wa kuvuta R2-R5 ni 36 kOhm kwa chaguo na photoresistors GL5516. Katika kesi ya optocoupler phototransistor na relay, kuweka 4,7-5,1 kOhm. Kidhibiti cha bootloader cha Arduino Nano v3.0 kilibadilishwa na Arduino Uno kwa kutumia programu ya TL866A kwa uendeshaji sahihi wa kipima saa cha walinzi. Fuses hurekebishwa kufanya kazi kwa voltages juu ya 4,3 V. Mzunguko wa nje wa upya R6 C3 haukutumiwa. Katika mpango wa mfano, mzunguko wa kisambazaji hailingani na safu isiyo na leseni; safu ya 2,4 MHz ni mdogo kwa masafa 2400.0-2483.5 MHz.

Upeo wa kisambazaji cha E01-ML01DP05 ni 2400-2525 MHz. Bandwidth ya kituo kimoja ni 1 MHz, wakati wa kuweka kasi kama "RF24_2MBPS" kituo maalum cha radio.setChannel(120) na kinachofuata kitachukuliwa, i.e. bendi itakuwa 2 MHz.

Chanzo: mapenzi.com

Kuongeza maoni