ဒေသဆိုင်ရာ ကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရဒေတာ စုဆောင်းမှုစနစ်

ကုမ္ပဏီသည် Next Technologies မှ ပြည်တွင်း၌ ထုတ်လုပ်သည့် NEKST-M စောင့်ကြည့်ရေးပို့စ်များကို ဝယ်ယူခဲ့သည်။ ရေစုပ်ယူနစ်များ၏ လည်ပတ်မှုကို ပုံဖော်နိုင်စေရန်၊
မီးနှင့် လုံခြုံရေး အချက်ပေးချက်များ၊ စတင်ချိန်တွင် ဗို့အားရှိနေခြင်း၊ အခန်းအပူချိန်၊ အရေးပေါ်ရေအဆင့်။ NEKST-M ၏ နှလုံးသားမှာ ATMEGA 1280 ဖြစ်ပြီး တိကျသောလိုအပ်ချက်များအတွက် သင့်ကိုယ်ပိုင်ကိရိယာအစုံကို ဖန်တီးနိုင်ခြေနှင့်ပတ်သက်၍ ဤအချက်က အားတက်စရာဖြစ်သည်။

အတိုဆုံးဖြစ်နိုင်သောအချိန်နှင့် အနည်းဆုံးကုန်ကျစရိတ်ဖြင့် သီးခြားလိုအပ်ချက်များအတွက် အပြည့်အဝကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရဒေသဆိုင်ရာ ပို့ဆောင်ရေးစနစ်တစ်ခု ဖန်တီးရန် တာဝန်ကို သတ်မှတ်ထားပါသည်။ အခြေခံသည် မိုက်ခရိုကွန်ထရိုလာတစ်ခုဖြစ်သည်။ ဖွံ့ဖြိုးရေး၊ ကုန်ထုတ်၊ ဝန်ထမ်းကိုယ်တိုင် ဖန်တီးတယ်။

စနစ်သည် ဆယ်လူလာကွန်ရက်များ၊ ဆာဗာများ၊ အင်တာနက်နှင့် ရေဒီယိုကြိမ်နှုန်းရင်းမြစ်များကို အသုံးပြုရန်အတွက် လိုင်စင်စနစ်အား မှီခိုခြင်းမရှိဘဲ လည်ပတ်ရမည်ဖြစ်ပြီး စောင့်ကြည့်ခြင်းနှင့် ထိန်းချုပ်မှုစနစ်၏ လုပ်ဆောင်မှုတွင် ကွန်ပျူတာများကို အသုံးမပြုဘဲ သို့မဟုတ် အများစုမှာ လက်ပ်တော့များကို အချိန်အခါအလိုက် အသုံးပြုခွင့်မရှိဘဲ၊ အရာဝတ္ထုများကို အချိန်ကြာမြင့်စွာ (၆-၉ လ)။ ကွန်ရက်ဖွဲ့စည်းပုံသည် အစွန်းကွက်ဖွဲ့စည်းပုံ ရှိသည်။ ဒေတာများကို တစ်ချိန်တည်းတွင် စုဆောင်းပြီး ပုံမှန်ဆက်သွယ်ရေးလမ်းကြောင်းများမှတစ်ဆင့် လုပ်ဆောင်ရန် သို့မဟုတ် hard copy အဖြစ် ပေးပို့သည်။

စနစ်က ပေးဆောင်ရမည်-

  • ရေစုပ်ယူနစ်များ၏ လည်ပတ်မှုကို စောင့်ကြည့်ခြင်း။
  • နည်းပညာအလိုအလျောက်စနစ်
  • အရေးပေါ်အခြေအနေများ၏ နောက်ဆက်တွဲဆိုးကျိုးများမှ ကာကွယ်ပေးခြင်း။
  • အရေးပေါ်အချက်ပြခြင်း။
  • လည်ပတ်ချိန်တွက်ချက်ခြင်း။
  • လျှပ်စစ်သုံးစွဲမှုပမာဏကို တွက်ချက်ခြင်း။
  • စက်ပစ္စည်း အပူချိန်ထိန်း
  • လုံခြုံရေးနှင့် မီးအချက်ပေးသံ
  • အချိန်အပိုင်းအခြားအလိုက် သတင်းအချက်အလက်များ မှတ်တမ်းတင်ခြင်း။
  • မသိသောအနာဂတ်လိုအပ်ချက်များ

လုပ်ငန်းအခြေအနေများ

  • လွှမ်းခြုံဧရိယာ 1 စတုရန်းကီလိုမီတာ။
  • အရာဝတ္ထုများကြား တိုက်ရိုက်မြင်နိုင်မှု
  • အပူချိန် +50 မှ -50 C
  • စိုထိုင်းဆ 100% အထိ
  • ဇီဝဗေဒဆိုင်ရာ အနည်အနှစ်များ (မှို၊ ဆာလဖိတ်-လျှော့ချဘက်တီးရီးယား)
  • GOST ISO 1-2-10816 အရ class 1-97 ၏စက်များ၏တုန်ခါမှုမရှိတော့ပါ။
  • လျှပ်စစ်သံလိုက်ပတ်ဝန်းကျင် - KT 6053 contactors နှင့် လျှပ်စစ်မော်တာများကို ကူးပြောင်းခြင်း၊ RVS-DN ပျော့ပျောင်းသော စတင်ကိရိယာ၊ SIEMENS MICROMASTER PID ထိန်းချုပ်ကိရိယာများ၊ ISM နှင့် GSM အကွာအဝေးရှိ ဓါတ်ရောင်ခြည်များသည် အဆိုပါကိရိယာများအတွက် လိုအပ်ချက်များနှင့်အညီ၊ ဆိုက်တွင် manual arc ဂဟေဆော်ခြင်း
  • ကွန်ရက်ဗို့အား အလွန်အကျွံ၊ ပါဝါထောက်ပံ့မှုတွင် ရေတိုပြတ်တောက်မှုများ၊ လျှပ်စီးကြောင်းများ လွန်ကဲခြင်း၊ 6-10 kV ဖြန့်ဖြူးမှုကွန်ရက်များတွင် အပေါ်စီးမှ ဝါယာကြိုးပြတ်တောက်သည့်အခါ အဆင့်မညီမျှခြင်း။

ထိုသို့သော တင်းကျပ်သော လိုအပ်ချက်များ ရှိသော်လည်း၊ အဆင့်ဆင့် ဖြေရှင်းရာတွင် အကောင်အထည်ဖော်မှုသည် အလွန်ရိုးရှင်းပါသည်။

အရာအားလုံးကိုထည့်သွင်းစဉ်းစားခြင်းဖြင့် "Arduino Nano 3.0" ဘုတ်သည် အစီအစဉ်၏ "ဦးနှောက်" ဖြစ်လာခဲ့သည်။ စက်ရုပ်ဘုတ်တွင် လိုအပ်သော 328V ဗို့အားထိန်းကိရိယာ ATMEGA 3,3 ပါရှိသည်။
လက်ရှိ 800 mA နှင့် CH340G UART-USB သို့ ပြောင်းပေးသည်။

ပထမဦးစွာ၊ လည်ပတ်မှုနာရီကောင်တာများကို ခေတ်အမီဆုံးအရာများအဖြစ် ဖန်တီးခဲ့သည်။ လည်ပတ်မှု တစ်နှစ်အတွင်း ဗို့အားတက်လာမှုကြောင့် Transformerless power supply circuit ဖြင့် PICs တွင် တပ်ဆင်အသုံးပြုခဲ့သော စက်မှုမီတာများ မအောင်မြင်ပါ။ အိမ်လုပ် 5V ပါဝါထောက်ပံ့မှုများကို အသုံးပြု၍ ချိတ်ဆက်ထားသူများသာ ကျန်ရှိတော့သည်။ တပ်ဆင်မှုနှင့် ချိတ်ဆက်မှု၏ ဘက်စုံအသုံးပြုနိုင်မှုကို အရှိန်မြှင့်ရန်၊ switching devices များ၏ terminals များမှ ယူနစ်များ၏ အခြေအနေနှင့်ပတ်သက်သည့် အချက်ပြချက်ကို ယူနစ်၊ ဆိုလိုသည်မှာ၊ 1V သုံးဆင့်ပါဝါထောက်ပံ့မှုနှင့်အတူ 380st အဆင့်ဗို့အား၏ရှေ့မှောက်တွင်မှတ်ပုံတင်ခြင်း။ ထိန်းချုပ်ကိရိယာနှင့် ညှိနှိုင်းဆောင်ရွက်ရန်၊ LED နှင့် ဖွဲ့စည်းထားသည့် 220V အကွေ့အကောက်ရှိသော အလယ်အလတ် relay သို့မဟုတ် optocoupler နှင့် GL5516 photoresistor သို့မဟုတ် PC817 optocoupler ကို အသုံးပြုထားသည်။ ရွေးချယ်စရာအားလုံးကို စမ်းသပ်ပြီးပါပြီ။ LED သည် megohmmeter ဖြင့် ဆားကစ်များကို မတော်တဆ စမ်းသပ်စဉ် ဘေးကင်းစေရန်အတွက် 22V ဆက်တိုက်ချိတ်ဆက်ထားသော ဗို့အားအတွက် ဒီဇိုင်းထုတ်ထားသော SVV630 capacitors နှစ်ခုကို အသုံးပြု၍ ပြုပြင်ထားသော ဗို့အားဖြင့် ပါဝါပေးပါသည်။
ST7735S LCD ဖန်သားပြင်ကို အသုံးပြု၍ လည်ပတ်ချိန်ဖတ်ခြင်း၊ E01-ML01DP05 module ကို အသုံးပြု၍ ရေဒီယိုမှတစ်ဆင့် အချိန်နှင့်တစ်ပြေးညီ ဒေတာထုတ်လွှင့်ခြင်းများကို 2,4 MHz ရှိသော ကြိမ်နှုန်းဖြင့်ဖတ်ခြင်း။ ဤစက်ပစ္စည်းတွင် nRF24L01+ ချစ်ပ်နှင့် RFX2401C ထုတ်လွှင့်မှု/လက်ခံအသံချဲ့စက်တို့ပါရှိသည်။
output ပါဝါ 100 mW အထိ။ အွန်လိုင်းဂဏန်းတွက်စက်ရှိ လိုချင်သောအကွာအဝေးအတွက် ဖန်တီးထားသော Helical အင်တင်နာများ site ကို. အင်တင်နာအမျိုးအစား၏ရွေးချယ်မှုသည် ပတ်ဝန်းကျင်ရှိသတ္တုဖွဲ့စည်းပုံများမှ တစ်ကိုယ်တည်းထင်ဟပ်သောလှိုင်းများကိုလက်ခံခြင်းမှဖယ်ထုတ်ခြင်းမှဆုံးဖြတ်သည်။ Antenna အစိတ်အပိုင်းများကို 3D ပရင်တာပေါ်တွင် ရိုက်နှိပ်ထားသည်။ ကောင်တာများ၏ လက်ရှိအခြေအနေအား ထိန်းချုပ်ကိရိယာ၏ EEPROM တွင် သိမ်းဆည်းထားပြီး မမျှော်လင့်ထားသော ဓာတ်အားပြတ်တောက်မှုဖြစ်သည့်အခါတွင် ပြန်လည်ရရှိမည်ဖြစ်သည်။ ရေတွက်ခြင်းအတွက် အချိန်ကြားကာလများကို အရန်ဘက်ထရီပါသည့် မော်ဂျူးပုံစံဖြင့် RTC ချစ်ပ် DS3231 မှ ပံ့ပိုးပေးပါသည်။ ပါဝါထောက်ပံ့မှုတွင် မော်ဂျူး ၃ ခု၊ အမှန်တကယ် သွေးခုန်နှုန်းရင်းမြစ် 3/220V HLK-PM5 01mA၊ 600-1V မှ 5V သို့ ပြောင်းသည့်ကိရိယာ HW-၀၉၂ и 03962A - ဘက်ထရီထိန်းချုပ်ကိရိယာနှင့်အတူ အစီအစဉ် ဝါယာရှော့၊ ပိုလျှံခြင်းနှင့် အားပိုလျှံခြင်းမှ ကာကွယ်ပေးခြင်း။ အစိတ်အပိုင်းအားလုံးကို Aliexpress ဝဘ်ဆိုဒ်တွင် ဝယ်ယူခဲ့သည်။

မုန့်ပုန်းဒေသဆိုင်ရာ ကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရဒေတာ စုဆောင်းမှုစနစ်
4-channel ကောင်တာ။ လိမ်စုံတွဲဆက်သွယ်ရေးလိုင်းတစ်ခုအပေါ် အနှောင့်အယှက်မှကာကွယ်ရန် အဝင်များတွင် LC စစ်ထုတ်မှုများ ရှိပါသည်။ ထိန်းချုပ်သည့်အရာဝတ္ထုများ၏ အခြေအနေကို တစ်စက္ကန့်လျှင် တစ်ကြိမ် အဆက်မပြတ်ဖတ်ရှုပြီး LCD တွင် အရောင်ဖြင့်ပြသသည်။ စာဖတ်ခြင်းကို 1 စက္ကန့်တိုင်းတွင် မတည်ငြိမ်သောမှတ်ဉာဏ်တွင် အပ်ဒိတ်လုပ်ပြီး မှတ်တမ်းတင်ပါသည်။ 36 စက္ကန့်သည် တစ်နာရီ၏ 36/1 ဖြစ်ပြီး၊ ၎င်းသည် ဒေတာလိုအပ်သည့် ဖော်မတ်ဖြစ်သည်။ 100 စက္ကန့်တိုင်း ထိန်းချုပ်ယူနစ်တစ်ခုစီအတွက် လည်ပတ်မှုစက္ကန့်အရေအတွက်နှင့်ပတ်သက်သော အချက်အလက်များကို ပေးပို့သည်။ ထုတ်လုပ်သူအဆိုအရ EEPROM မမ်မိုရီတွင် အကြိမ်ရေ 12 ကန့်သတ်ထားသော စာရေး-ဖျက်ခြင်းစက်ဝန်းများရှိသည်။ အဆိုးဆုံးရွေးချယ်မှုမှာ အနည်းဆုံး ဆဲလ်တစ်ခု အဆက်မပြတ် မွမ်းမံနေချိန်ဖြစ်သည်။ 100000st counter ၏ volume သည် 1 bytes ဖြစ်ပြီး၊ ၎င်းသည် long format နံပါတ်ဖြစ်သည်၊ 4 counters၊ စုစုပေါင်း 4 bytes သည် one record ဖြင့် သိမ်းပိုက်ထားသည်။ ချစ်ပ်၏ မမ်မိုရီ၏ အရှည်မှာ 16 bytes ဖြစ်သည်၊ ကောင်တာ 1024 ခု၏ ထည့်သွင်းမှု 64 ခုပြီးနောက်၊ မှတ်တမ်းတင်ခြင်း ပြန်လည်စတင်ပါမည်။ EEPROM ဒစ်ဂျစ်တိုက်တွင်၊ EEPROM.put နည်းလမ်းသည် မရေးထားဘဲ၊ ဆဲလ်၏တန်ဖိုးနှင့် ရေးထားသည့်အချက်အလက်များ ကိုက်ညီပါက၊ ဆဲလ်များ ပျက်စီးခြင်းရှိမည်မဟုတ်ပါ။ ရလဒ်အနေဖြင့် အာမခံချက်ရှိသော မမ်မိုရီလည်ပတ်ချိန်သည် 4 နှစ်ကျော်ရှိမည်ဖြစ်သည်။ ဖြစ်နိုင်သော်လည်း အာမခံချက်မရှိသော အလုပ်၏အချိန်သည် ပို၍ကြာနိုင်သည်။

circuit diagramဒေသဆိုင်ရာ ကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရဒေတာ စုဆောင်းမှုစနစ်
Arduino IDE ရှိ ပရိုဂရမ်//12 bytes (328%)

#ပါဝင်ပါတယ်။ // အဓိကဂရပ်ဖစ်စာကြည့်တိုက်
#ပါဝင်ပါတယ်။ // ဟာ့ဒ်ဝဲ သီးသန့်စာကြည့်တိုက်
#include
#ပါဝင်ပါတယ်။
#include
#ပါဝင်ပါတယ်။
#ပါဝင်ပါတယ်။
RF24 ရေဒီယို(၉၊ ၁၀); // ရေဒီယိုအရာဝတ္ထုသည် RF9 စာကြည့်တိုက်နှင့် အလုပ်လုပ်ရန်၊
// နှင့် ပင်နံပါတ်များ nRF24L01+ (CE, CSN)
#ပါဝင်ပါတယ်။
DS3231 rtc(SDA၊ SCL);
အချိန် t;

//#define TFT_CS 10
#Define TFT_CS 8
#define TFT_RST -1 // သင်သည် ၎င်းကို Arduino ပြန်လည်သတ်မှတ်ခြင်းသို့လည်း ချိတ်ဆက်နိုင်သည်။
// မည်သို့ပင်ဆိုစေ၊ ဤ #define pin ကို -1 ဟု သတ်မှတ်ပါ။
//#define TFT_DC 9 // DC=RS=A0 - ကွန်မန်းတစ်ခု သို့မဟုတ် ဒေတာစာရင်းသွင်းခြင်းကို ရွေးချယ်ခြင်းအတွက် သတ်မှတ်ရွေးချယ်စရာများ။
#define TFT_DC ၉

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

// ရွေးချယ်မှု 2- မည်သည့် pins ကိုမဆို အသုံးပြုပါ သို့သော် အနည်းငယ်နှေးပါသည်။
#define TFT_SCLK 13 // ၎င်းတို့ကို သင်နှစ်သက်သည့် ပင်နံပါတ်များအဖြစ် သတ်မှတ်ပါ။
#define TFT_MOSI 11 // ၎င်းတို့ကို သင်နှစ်သက်သည့် ပင်နံပါတ်များအဖြစ် သတ်မှတ်ပါ။
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS၊ TFT_DC၊ TFT_MOSI၊ TFT_SCLK၊ TFT_RST);
#ပါဝင်ပါတယ်။

byte shift = 52;
byte pinState;
လက်မှတ်မထိုးထားသော ရှည်လျားသောစုပ်စက်[4];// 4 စက္ကန့်တန်ပြန်တန်ဖိုးများပါသည့် ခင်းကျင်း
float m = 3600.0;
လက်မှတ်မထိုးထားသည့် int လိပ်စာ = 0;
ကောင်တာများအတွက် int rc;// variable
လက်မှတ်မထိုးထားသော long sumprim = 0;
လက်မှတ်မထိုးထားသော long sumsec = 0;
byte i = 0;
byte k = 34;
လက်မှတ်မထိုးထားသည့် int z = 0;
byte b = B00000001;
byte pumrcounter[4]; // အရာဝတ္ထုပြည်နယ်များကို သိမ်းဆည်းရန်၊ 1 - ပိတ်၊ 0 - ဖွင့်သည်။
int start = 0; //

ပျက်ပြယ် setup ကို () {

rtc.begin();
radio.begin(); // nRF24L01+ ကို စတင်လုပ်ဆောင်ပါ။
radio.setChannel(120); // ဒေတာချန်နယ် (0 မှ 127)။
radio.setDataRate(RF24_250KBPS); // ဒေတာလွှဲပြောင်းမှုနှုန်း (RF24_250KBPS၊ RF24_1MBPS၊ RF24_2MBPS)။
radio.setPALevel(RF24_PA_MAX); // transmitter ပါဝါ (RF24_PA_MIN=-18dBm၊ RF24_PA_LOW=-12dBm၊
// RF24_PA_HIGH=-6dBm၊ RF24_PA_MAX=0dBm)
radio.openWritingPipe(0xAABBCCDD11LL); // ဒေတာလွှဲပြောင်းမှုအတွက် အထောက်အထားတစ်ခုဖြင့် ပိုက်တစ်ခုကို ဖွင့်ပါ။

// အချိန်သတ်မှတ်ရန် လိုအပ်သော လိုင်းများကို မှတ်ချက်ရေးပါ။
//rtc.setDOW(1); // ရက်သတ္တပတ်၏နေ့
//rtc.setTime(21၊ 20၊ 0); // အချိန်၊ 24 နာရီပုံစံ။
//rtc.setDate(29၊ 10၊ 2018); // ရက်စွဲ၊ အောက်တိုဘာ ၂၉၊ ၂၀၁၈

tft.initR(INITR_BLACKTAB); // ST7735S ချစ်ပ်၊ အနက်ရောင် တက်ဘ်ကို စတင်ပါ။
// သင်သည် 1.44" TFT ကိုအသုံးပြုနေပါက ဤကနဦးစနစ် (မှတ်ချက်ပေးခြင်း) ကို အသုံးပြုပါ။
//tft.initR(INITR_144GREENTAB); // ST7735S ချစ်ပ်၊ RED rcB တက်ဘ်ကို စတင်ပါ။
tft.setTextWrap(false); // ညာဘက်အစွန်းမှ စာသားကို run ရန် ခွင့်ပြုပါ။
tft.setRotation(2 ); // အနက်ရောင် PCB နှင့် RED tft.setRotation(0) သို့မဟုတ် မဟုတ်ပါ ။
tft.fillScreen(ST7735_BLACK); // ကြည်လင်သော မျက်နှာပြင်

DDRD = DDRD | B00000000;
PORTD = PORTD | B11110000; // ဆော့ဖ်ဝဲတင်းကျပ်ခြင်းသည် အလုပ်လုပ်သည်၊ အဆင့်မြင့်မားသည် -
// ထိန်းချုပ်ထားသော အရာဝတ္ထုများ "အလုပ်မလုပ်ပါ"၊ "4" သည် အကြီးတန်း port 1 ခု D တွင် စာရေးထားသောကြောင့် ရေတွက်ခြင်းမဖြစ်ပေါ်ပါ။

အတွက် (rc = 0; rc < 4; rc++)
{
tft.setCursor ( 3၊ rc * 10 + shift ); // ထိန်းချုပ်အရာဝတ္ထုများ၏ တည်နေရာနံပါတ်များကို ပြသခြင်း။
tft.print(rc + 1);
}

tft.setCursor(12, 0); // စာသား ၃ ကြောင်းကို ထုတ်ပါ။
tft.println("တီထွင်သူများနှင့် တည်ဆောက်မှုများ"); // ကိုယ်ချစ်ရသူတွေကို ချီးကျူးပါ။
tft.setCursor(24၊ 10); // သို့မဟုတ် မကောင်းသော မူပိုင်ခွင့်
tft.print("Developer MM");
tft.setCursor(28၊ 20);
tft.print("BUILD-ER DD");

//ဒေတာပြန်လည်ရယူခြင်း////////////////////////////////////////////// ////////////

for ( z = 0; z < 1023; z += 16 ) { // လုပ်ငန်း၏ ဆဲလ်များအားလုံးမှတဆင့် ထပ်လောင်းလုပ်ဆောင်သည်
// နှင့် ကောင်တာတစ်ခုစီအတွက် 4 bytes ရှိသော pump variable 4 ခု၏ array တစ်ခုသို့ စာရေးသည်။
// လက်မှတ်မထိုးထားသော long variable ကောင်တာ 4 ခုရှိပြီး 4 ခုစလုံး၏စံချိန်တစ်ခုသည် 16 bytes ယူသည်။
EEPROM.get(z၊ pump[0]); // ဒါကြောင့် for loop မပါရင် volume နည်းပါတယ်။
EEPROM.get(z+4၊ pump[1]);
EEPROM.get(z+8၊ pump[2]);
EEPROM.get(z+12၊ pump[3]);

// ကောင်တာ 4 ခု၏ ပေါင်းလဒ်အတွက် နောက်ထပ်တန်ဖိုးအသစ်တစ်ခုကို သတ်မှတ်ပေးသည်။
suprim = (pump [0] + pump [1] + pump [2] + pump [3]);

// ကိန်းရှင်ရှိ ယခင်တန်ဖိုးနှင့် suprim variable ရှိ ကောင်တာ 4 ခု၏ ပေါင်းလဒ်တန်ဖိုးအသစ်ကို နှိုင်းယှဉ်သည်
// sumsec နှင့် ယခင်ပေါင်းလဒ်သည် ပေါင်းလဒ်အသစ်ထက် လျော့နည်းပါက သို့မဟုတ် ညီမျှပါက၊ ကြီးသည် သို့မဟုတ် တူညီသောအသစ်ကို သတ်မှတ်ပေးသည်
// sumsec တန်ဖိုး။

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

// လက်ရှိတန်ဖိုး z ကို လိပ်စာပြောင်းနိုင်သော ကိန်းရှင်သို့ သတ်မှတ်ထားသည်၊ z သည် တန်ဖိုး 16 ခုရှိသော 4-byte ဘလောက်တစ်ခု၏အစ၏လိပ်စာဖြစ်သည်။
// တစ်ချိန်တည်းတွင် မှတ်တမ်းတင်ထားသော ကောင်တာများ (ဆိပ်ကမ်းတစ်ခုကို မဲဆွယ်စဉ်ကတည်းက၊ ၎င်း 8 bits အားလုံးကို တပြိုင်နက်တည်း ရေးထားသည်၊
// ကျွန်ုပ်တို့၏ လိုအပ်သော high 4 bits port D အပါအဝင်)။
လိပ်စာ = z;
}
}

// မှတ်တမ်းတင်ထားသော တန်ပြန်တန်ဖိုး 16 ခုရှိသော ဘလောက် 4 bytes ၏အစ၏လိပ်စာရှိ eeprom memory ကို တစ်ဖန်ဝင်ရောက်ကြည့်ရှုခြင်း
// နောက်ဆုံး၊ i.e. အေးခဲခြင်းကြောင့် ပိတ်ခြင်း သို့မဟုတ် ပြန်လည်စတင်ခြင်းမပြုမီ တန်ဖိုးများ။ နောက်ဆုံးပေါ် မှတ်တမ်းတင်ခြင်း။
// တန်ပြန်တန်ဖိုးများကို 4 variables တစ်ခု၏ array သို့ စုပ်သည်။

EEPROM.get(လိပ်စာ၊ ပန့်[0]);
EEPROM.get(လိပ်စာ + 4၊ pump[1]);
EEPROM.get(လိပ်စာ + 8၊ pump[2]);
EEPROM.get(လိပ်စာ + 12၊ pump[3]);

လိပ်စာ += 16; // နောက်ဆုံးမှတ်တမ်း၏ဒေတာကို ထပ်မရေးဘဲ နောက်ဘလောက်ကိုရေးရန်အတွက် လိပ်စာကို တိုးစေသည်။

//ဒေတာပြန်လည်ရယူခြင်း၏အဆုံး//////////////////////////////////////////// ////////////////////

attachInterrupt(0၊ count, RISING); // ပင်နံပါတ် D2၊ ကြားဖြတ်များကိုဖွင့်ပါ၊ စက္ကန့်တိုင်းလာပါ။
// SQW အထွက်မှ RTC DS3231 မှပဲမျိုးစုံ

wdt_enable(WDTO_8S); // ကင်းစောင့်ချိန်စက်ကို စတင်ပါ၊ အေးခဲသွားသည့်အခါ ထိန်းချုပ်ကိရိယာကို ပြန်လည်စတင်ပါ၊
// သင်သည် timer reset command ကိုထုတ်ရန်လိုအပ်သည့်အတွက် wdt_reset(ပုံမှန်လည်ပတ်နေစဉ်အတွင်း ပြန်လည်စတင်ခြင်းကို ရှောင်ကြဉ်ပါ - 8 စက္ကန့်။
// စမ်းသပ်မှုများအတွက် 8 စက္ကန့်ထက်နည်းသော တန်ဖိုးကို သတ်မှတ်ရန် အကြံပြုထားခြင်း မရှိပါ။ ဤကိစ္စတွင်၊ အချိန်တိုင်းကိရိယာကို ပိုမိုကောင်းမွန်စွာ ပြန်လည်သတ်မှတ်ထားသည်။
// တဆတ်ဆတ်တုန်ပြီး စက္ကန့်တိုင်း ဖြစ်ပျက်နေသည်။

}

ပျက်ပြယ်ကွင်းဆက် () {
// အလွတ်စက်ဝန်း၊ ဤနေရာတွင် လျှပ်စစ်မော်တာ၏ အဖွင့်အဆင့်လုပ်ဆောင်မှုကို ထိန်းချုပ်နိုင်မည်ဖြစ်သည်။
}

void count() {

tft.setTextColor(ST7735_WHITE); // ဖောင့်အရောင်သတ်မှတ်ပါ။
t = rtc.getTime(); // အချိန်ပေးဖတ်ပါ။
tft.setCursor(5၊ 120); // cursor အနေအထားကို သတ်မှတ်ခြင်း။
tft.fillRect(5၊ 120၊ 50၊ 7၊ ST7735_BLACK); // အချိန်အထွက်ဧရိယာကို ရှင်းလင်းခြင်း။
tft.print(rtc.getTimeStr()); // အထွက်နာရီများဖတ်ခြင်း။

wdt_reset(); // သံသရာတိုင်းတွင် စောင့်ကြည့်ခွေးအား ပြန်လည်သတ်မှတ်ရန်၊ ဆိုလိုသည်မှာ ဒုတိယ

for (rc = 0; rc < 4; rc ++) // ထည့်သွင်းမှုအခြေအနေအား စစ်ဆေးရန်အတွက် စက်ဝိုင်း၏အစ၊
// port bits များသည် ယခင်ဖတ်ထားသော port D bits ၏ အခြေအနေသို့ ဖြစ်သည်။
{
pinState = (PIND >> 4) & ( b << rc );

if (pumrcounter [rc] != pinState) { // နှင့် မကိုက်ညီပါက၊ ထို့နောက်
pumrcounter[rc] = pinState; // port bit status variable ကို value အသစ် 1/0 ကို သတ်မှတ်ပေးခြင်း
}
// အရောင်ထိန်းချုပ်သည့် အရာဝတ္ထုများ၏ အခြေအနေကို ညွှန်ပြခြင်း။
// BLUE သည် ရှိပြီးသား စခရင် (သို့မဟုတ် ဒစ်ဂျစ်တိုက်?), RGB နှင့် BGR ၏ သေးငယ်သော ချို့ယွင်းချက်တစ်ခုဖြစ်သည်။
if (pinState == ( b << rc )) {
tft.fillRect(15၊ ((rc * 10 + shift)), 7၊ 7၊ ST7735_BLUE); // အဆင့်နိမ့်ရေတွက်မှုအတွက် အစိမ်းရောင်မှ အပြာရောင်သို့ ပြောင်းပါ။
} သည်အခြား {
tft.fillRect(15၊ ((rc * 10 + shift)), 7၊ 7၊ ST7735_GREEN); // အဆင့်နိမ့်ရေတွက်မှုအတွက် အပြာမှ အစိမ်းရောင်သို့ ပြောင်းပါ။
pump [rc] += 1; // လည်ပတ်ချိန်ကောင်တာသို့ 1 စက္ကန့်ထည့်ပါ။
}
}

k++;
(ဋ == ၃၆) {
= = ၁၅;

tft.fillRect(30၊ shift၊ 97၊ 40၊ ST7735_BLACK); // လည်ပတ်ချိန်ပြသမှုဧရိယာကို ရှင်းလင်းခြင်း။
tft.fillRect(60၊ 120၊ 73၊ 7၊ ST7735_BLACK); // နှင့်ရက်စွဲများ

tft.setCursor(60၊ 120); // cursor အနေအထားကို သတ်မှတ်ခြင်း။
tft.print(rtc.getDateStr()); // LCD မျက်နှာပြင်ပေါ်တွင် ရက်စွဲကို ပြသပါ။

for (rc = 0; rc < 4; rc ++) // output operating hours တစ်ခုလုံး၊ ဒသမ နှင့်၊
{
tft.setCursor ( 30၊ rc * 10 + shift ); // မျက်နှာပြင် 10 ပစ်ဇယ်ဖြင့် အောက်သို့ ရွှေ့ခြင်းဖြင့် တစ်နာရီ၏ ရာပေါင်းများစွာ
tft.println(pump [rc] / m);
}

// “ကုန်ကြမ်း” လည်ပတ်မှုနာရီတန်ဖိုးများ (စက္ကန့်အတွင်း) EEPROM //////////////////////////////

အတွက် (rc = 0; rc < 4; rc++)
{
EEPROM.put(လိပ်စာ၊ ပန့် [rc]);
လိပ်စာ += sizeof(float); // write address variable ကို တိုးပေးပါ။
}
}

// ဘိုက်မည်မျှ ပေးပို့ရမည်ကို ညွှန်ပြသော ဒေတာမှ ရေဒီယိုချန်နယ်သို့ ဒေတာပေးပို့ပါ။
if ((k == 6 ) || (k == 18 ) || (k == 30 )) {

လက်မှတ်မထိုးထားသော ရှည်လျားသောဒေတာ၊

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

အတွက် (i = 0; i < 4; i++) {
data = pump [i];
radio.write(&data၊ sizeof(ဒေတာ));
}
}
}

အဆုံးတွင် မှတ်ချက်အချို့။ သွင်းအားစုများတွင် ရေတွက်ခြင်းသည် ယုတ္တိနည်းသောအဆင့်တွင် ဖြစ်ပေါ်သည်။

Pull-up resistances R2-R5 သည် photoresistors GL36 ပါသော ရွေးချယ်မှုအတွက် 5516 kOhm ဖြစ်သည်။ phototransistor optocoupler နှင့် relay တွင် 4,7-5,1 kOhm ဟုသတ်မှတ်ထားသည်။ Arduino Nano v3.0 bootloader ကို watchdog timer ၏မှန်ကန်သောလည်ပတ်မှုအတွက် TL866A ပရိုဂရမ်မာကိုအသုံးပြု၍ Arduino Uno ဖြင့်အစားထိုးခဲ့သည်။ fuses များသည် 4,3 V အထက်ဗို့အားတွင်လည်ပတ်ရန် ပြုပြင်ထားပါသည်။ ပြင်ပပြန်လည်သတ်မှတ်ပတ်လမ်း R6 C3 ကို အသုံးမပြုပါ။ နမူနာပရိုဂရမ်တွင်၊ ထုတ်လွှင့်သည့်ကြိမ်နှုန်းသည် လိုင်စင်မဲ့အကွာအဝေးနှင့် သက်ဆိုင်ခြင်းမရှိပါ၊ 2,4 MHz အကွာအဝေးကို ကြိမ်နှုန်း 2400.0-2483.5 MHz တွင် ကန့်သတ်ထားသည်။

E01-ML01DP05 transmitter ၏အကွာအဝေးသည် 2400-2525 MHz ဖြစ်သည်။ သတ်မှတ်ထားသော radio.setChannel(1) ချန်နယ်ကို “RF24_2MBPS” အဖြစ် အမြန်နှုန်းသတ်မှတ်သောအခါတွင် ချန်နယ်တစ်ခု၏ bandwidth သည် 120 MHz ဖြစ်ပြီး နောက်တစ်ခုအား သိမ်းပိုက်မည်၊ ဆိုလိုသည်မှာ၊ Band သည် 2 MHz ဖြစ်လိမ့်မည်။

source: www.habr.com

မှတ်ချက် Add