مقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري)

هن سائيٽ تي شروع ڪريو لنڪ.
اسٽارٽر کي چالو ڪرڻ بابت معلومات حاصل ڪرڻ لاء سڀ کان وڌيڪ آسان اختيار PC817 optocoupler سان اختيار ٿي ويو. سرڪٽ ڊاگرمقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري)بورڊ ۾ ٽي هڪجهڙا سرڪٽ شامل آهن، هر شي ABS پلاسٽڪ باڪس ۾ رکيل آهي، سائيز 100x100 ملي ايم. Optocouplers جو فوٽومقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري) جڏهن سيمي ڪنڊڪٽر والوز سان شروع ٿيندڙ ڊوائيسز سان ڳنڍيو وڃي ٿو، انهن جي لڪيج موجوده PC817 کي کولڻ لاءِ ڪافي آهي ۽ ڪائونٽر غلط طور تي ٽاريندو. اهڙي صورتحال کي ختم ڪرڻ لاء هڪ وڌيڪ شامل ڪيو ويو آهي سيريز ۾ optocoupler LED جي سرڪٽ ۽ آپريشن اشارو LED. هن کي ڪرڻ لاء، جمپر J1 کوليو ويو آهي ۽ هڪ اضافي LED LED1 ۾ سولڊر ٿيل آهي.
وصول ڪندڙ حصو تي ٺهيل آهي پاسي 1مقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري)پاسي 2مقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري)ڊولپمينٽ بورڊ ARDUINO MEGA 2560 سان ڳنڍيل آهي. ان لاءِ، آخر ۾ ڊبل قطار ڪنيڪٽر استعمال ڪيو ويندو آهي. 240x400 جي ريزوليوشن سان هڪ اسڪرين، جنهن ۾ مزاحمتي ٽچ اسڪرين ۽ گرمي پد سينسر هجي، انفارميشن ڊسپلي ڊيوائس طور استعمال ڪيو ويندو آهي. HX8352B.مقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري) ان کان علاوه، اسڪرين بورڊ تي ICSP کي کنیکٹر هٽايو ويو آهي ۽ مائڪرو ايس ڊي سلاٽ استعمال نه ڪيو ويو آهي. حقيقت اها آهي ته "ملي" ايس ڊي ساکٽ استعمال نه ٿي ڪري سگھجي SPI بس تي تڪرار جي ڪري. فليش ڪارڊ لاءِ، هڪ الڳ ڪارڊ ريڊر استعمال ڪيو ويو، جنهن ۾ هڪ 3,3V اسٽيبلائيزر ۽ هڪ بفر چپ شامل آهي ٽي آئوٽ اسٽيٽس 74LVS125A سان. هي اهو آهي جتي ريڪ منهنجو انتظار ڪري رهيو هو. هڪ ٽي-رياست بفر، پر يا ته E01-ML01DP5 يا ڪارڊ ريڊر ڪم ڪيو. لائبريري تبصرن ۾، SdFat ٻين ڊوائيسز سان مطابقت جي باري ۾ هڪ ڊيڄاريندڙ ڏٺو. TXS0108E تي سطح ڪنورٽر هٽايو ويو ۽ جمپر سان تبديل ڪيو ويو، ڇاڪاڻ ته E01-ML01DP5 5V سگنلن کي برداشت ڪري ٿو - اهو مدد نه ڪيو. هڪ oscilloscope استعمال ڪندي، MISO لائن تي هڪ سگنل نقصان معلوم ڪيو ويو جڏهن هڪ ڪارڊ پڙهندڙ ڳنڍيل هو. محتاط امتحان تي، اهو معلوم ٿيو ته 4LVS74A جي OE 125 چينلز جي فعال سگنلن جي ان پٽن کي صرف هڪ عام تار ۾ سولڊر ڪيو ويو ۽ ڪنهن به ٽئين رياست جي ڪا به ڳالهه نه ٿي سگهي. بفر چپ 5V کان 3.3V تائين 3,3 KΩ رزسٽرز استعمال ڪندي ابتدائي سطح جي ڪنورٽر طور استعمال ڪئي وئي جيڪا سگنل لائنن سان سيريز ۾ ڳنڍيل هئي. MISO لائن کان سواء. ان جي ٻاھرين ٻاھرين سوئچ شايد زمين جي سطح ڏانھن سگنلن کي ڪشش ڪيو. اهو طئي ڪرڻ تي ته MISO لائن جو فعال سگنل پن 13 هو، اهو ٽريڪ تان ڀڄي ويو ۽سولڊر ٿيلمقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري)9LVS74A CS ڊوائيس جي وچ ۾ ان پٽ پن (125) ۽ ختم ٿيڻ واري رزسٽر کي چونڊيو. هاڻي، جيڪڏهن ميموري ڪارڊ تائين ڪا به رسائي ناهي، MISO بفر غير فعال آهي ۽ ڪنهن ٻئي ڊوائيس جي آپريشن سان مداخلت نٿو ڪري.ڊولپمينٽ بورڊ ڊراگراممقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري)آپريشن ۾ وصول ڪندڙمقامي خودمختيار ڊيٽا حاصل ڪرڻ وارو نظام (جاري)DS3231 هڪ سافٽ ويئر I2C بس (TWI) استعمال ڪري ٿو گھڙي کي ڳنڍڻ لاء.
Arduino IDE پروگرام// اهم: Adafruit_TFTLCD لائبريري خاص طور تي هجڻ گهرجي
// يا ته TFT شيلڊ يا بريڪ آئوٽ بورڊ لاءِ ترتيب ڏنل.
// Setup لاء Adafruit_TFTLCD.h ۾ لاڳاپيل تبصرا ڏسو.
// اوپن-سمارٽ ٽيم ۽ ڪيٽيليڪس ٽيم پاران
//[ايميل محفوظ ٿيل]
// اسٽور: ڊي ايڪس. com
// open-smart.aliexpress.com/store/1199788
// ڊيمو فنڪشن: ڏيکاريو گرافڪس، ڪردار
//Arduino IDE: 1.6.5
// بورڊ: Arduino UNO R3، Arduino Mega2560، Arduino Leonardo

// بورڊ: اوپن-اسمارٽ UNO R3 5V / 3.3V، Arduino UNO R3، Arduino Mega2560
//3.2 انچ TFT:
// www.aliexpress.com/store/product/3-2-TFT-LCD-Display-module-Touch-Screen-Shield-board-onboard-temperature-sensor-w-Touch-Pen/1199788_32755473754.html?spm=2114.12010615.0.0.bXDdc3
//اوپن-اسمارٽ UNO R3 5V / 3.3V:
// www.aliexpress.com/store/product/OPEN-SMART-5V-3-3V-Compatible-UNO-R3-CH340G-ATMEGA328P-Development-Board-with-USB-Cable-for/1199788_32758607490.html?spm=2114.12010615.0.0.ckMTaN

#شامل // ڪور گرافڪس لائبريري
//#شامل // هارڊويئر-مخصوص لائبريري
#شامل
MCUFRIEND_kbv tft;
#include "SdFat.h" // استعمال ڪريو SdFat لائبريري
SdFat SD؛
SdFile فائل؛
فائل myFile؛
# وضاحت ڪريو SD_CS_PIN SS

#شامل // SPI بس سان ڪم ڪرڻ لاءِ لائبريري سان ڳنڍيو
#شامل // RF24 لائبريري مان سيٽنگون فائل ڳنڍيو
#شامل // nRF24L24+ سان ڪم ڪرڻ لاءِ لائبريري جوڙيو
RF24 ريڊيو (47, 49)؛

#شامل

DS3231 rtc (27, 25);
وقت ٽي؛

uint16_t r = 6000؛
uint32_t k = 0 ;

غير دستخط ٿيل ڊگهو ڊيٽا؛
float leb_1;
float leb_2;
float leb_3;
float leb_4;

uint8_t پائپ؛
int rc = 0;

uint8_t time_sec_prev؛
uint8_t time_day_prev؛

//**************************************************** ****************//
// جيڪڏھن توھان استعمال ڪريو OPEN-SMART TFT بريڪ آئوٽ بورڊ //
// توهان کي 5V-3.3V سطح تبديل ڪرڻ وارو سرڪٽ شامل ڪرڻ جي صلاح ڏيو.
// يقينا توهان استعمال ڪري سگهو ٿا OPEN-SMART UNO ڪارو نسخو 5V / 3.3V پاور سوئچ سان،
// توھان کي صرف 3.3V ڏانھن سوئچ ڪرڻ جي ضرورت آھي.
// LCD لاء ڪنٽرول پن ڪنهن به ڊجيٽل يا مقرر ڪري سگهجي ٿو
// اينالاگ پن... پر اسين اينالاگ پنن کي استعمال ڪنداسين جيئن هي اسان کي اجازت ڏئي
//—————————————-|
// TFT بريڪ آئوٽ - Arduino UNO / Mega2560 / OPEN-SMART UNO ڪارو
// جي اين ڊي - جي اين ڊي
// 3V3 - 3.3V
//CS - A3
// آر ايس - A2
// WR - A1
// آر ڊي - A0
// RST - ري سيٽ
// LED - GND
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7

// ڪجھ عام 16-bit رنگن جي قدرن لاءِ انساني پڙھڻ جا نالا مقرر ڪريو:
# وضاحت ڪريو ڪارو 0x0000
# وضاحت ڪريو BLUE 0x001F
# وضاحت ڪريو RED 0xF800
# وضاحت ڪريو گرين 0x07E0
# CYAN 0x07FF وضاحت ڪريو
# وضاحت ڪريو MGENTA 0xF81F
# وضاحت ڪريو Yellow 0xFFE0
# وائٹ 0xFFFF وضاحت ڪريو
وضاحت ڪريو گرين 0x8C51
وضاحت ڪريو GRAYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET)؛
// جيڪڏهن شيلڊ استعمال ڪندي، سڀ ڪنٽرول ۽ ڊيٽا لائينون مقرر ٿيل آهن، ۽
// ھڪڙو آسان اعلان اختياري طور استعمال ڪري سگھجي ٿو:
// Adafruit_TFTLCD tft؛
uint16_t g_identifier؛

اسٽرنگ dataString؛
//String numfileMonth = "1.txt"؛
char perv [] = {"2.txt"}؛
//String *numfileMonth="1.txt" (سائز جو (numfileMonth))؛
/////////////////////////////////////// //////////////

باطل جوڙ (باطل) {

rtc.begin();

// وقت مقرر ڪرڻ لاء، ضروري لائنن کي غير تبصرو ڪريو
// rtc.setDOW(6)؛ // هفتي جو ڏينهن
// rtc.setTime(22, 04, 0); // وقت، 24 ڪلاڪ فارميٽ ۾.
// rtc.setDate(4، 5، 2019)؛ // تاريخ، آڪٽوبر 29، 2018

سيرالي.پن (2000000) ؛
//////// اسڪرين جي شروعات
tft.begin(0x65);
tft.reset();
tft.setRotation(0)؛
tft.cp437 (سچو)؛
///////////////// نالن جي پيداوار، سامان جي لوازمات، تنظيم جو نالو
tft.fillScreen(ڪارو)؛
tft.setTextColor(اڇو)؛
tft.setTextSize(2)؛
tft.setCursor(8, 0)؛
tft.println("ڊيولپرز ۽ بلڊ")؛
tft.setCursor(30, 20)؛
tft.print (utf8rus("Constructor V.V."))؛
tft.setCursor(40, 40)؛
tft.print (utf8rus("ٽرنر I.I"))؛
دير (2000)؛

radio.begin(); // ڪم شروع ڪريو nRF24L01+
radio.setChannel(120)؛ // ڊيٽا وصول ڪندڙ چينل بيان ڪريو (0 کان 127 تائين)
radio.setDataRate(RF24_250KBPS)؛ // ڊيٽا جي منتقلي جي شرح بيان ڪريو (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX)؛ // ٽرانسميٽر پاور جي وضاحت ڪريو (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // کوليو 1 پائپ 1 ٽرانسميٽر جي سڃاڻپ ڪندڙ سان 0xAABBCCDD11، ڊيٽا حاصل ڪرڻ لاء
// کوليو پائپ 2 سان ٽرانسميٽر ID 2xAABBCCDD0 ڊيٽا حاصل ڪرڻ لاءِ
radio.startListening(); // رسيور آن ڪريو، کليل پائپ ٻڌڻ شروع ڪريو
// radio.stopListening();
//////// خدمت جي معلومات جي پيداوار
tft.fillScreen(ڪارو)؛
tft.setCursor(8, 0)؛
tft.setTextSize(1)؛
//////// SD ڪارڊ شروع ڪرڻ شروع ڪريو
Serial.println("ابتدائي SD ڪارڊ")؛
tft.println("ابتدائي SD ڪارڊ")؛
tft.setCursor(8, 10)؛
//////// ڪارڊ جي شروعات
جيڪڏھن (!SD.begin(SD_CS_PIN)) {
Serial.println("ابتدائي ناڪام!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(BLACK)؛
tft.println("ابتدائي ناڪام!");
موٽڻ؛
}
tft.setTextColor(اڇو)؛
Serial.println("شروعات مڪمل")؛
tft.println("شروعات مڪمل")؛
دير (2000)؛
//////// پڙهڻ جو وقت ۽ تاريخ ۽ انهن کي متغيرن کي تفويض ڪرڻ
t = rtc.getTime();
time_sec_prev = t.sec؛
time_day_prev = t.date؛
//////// زبردستي تاريخ کي ٻاھر ڏيو ته جيئن ڊسپلي لاء تبديل ٿيڻ جي تاريخ جو انتظار نه ڪيو وڃي
tft.setCursor(180, 0)؛ // سيٽنگ ڪرسر پوزيشن
tft.fillRect(178, 0, 65, 7, GRAY); // وقت جي پيداوار واري علائقي کي صاف ڪرڻ
tft.setTextSize(1)؛
tft.print(rtc.getDateStr())؛
//////// آئوٽ پٽ ڪنٽرول آبجیکٹ جو نالو
tft.setTextSize(2)؛
tft.setCursor(60, 25)؛
tft.println (utf8rus("Winches I"))؛
//////// لاگ فائل ٺاهڻ ۽ تخليق جي ڪوشش جو نتيجو ڪڍڻ
tft.setTextSize(1)؛
tft.setCursor(130, 10)؛ // جيڪڏهن لاگ فائل 2.txt ٺاهي وئي ته پوءِ فائل ۾ لکڻ جاري رهندو
جيڪڏهن (SD.exists(perv)) {
//tft.setCursor(0، 90)؛
tft.println(perv);
Serial.println(perv);
} ٻيو {
myFile = SD.open(perv, FILE_WRITE)؛ // جيڪڏهن فائل 2.txt موجود ناهي، اها ٺاهي ويندي
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

باطل لوپ (باطل) {
//////// COM بندرگاهن مانيٽر تي لاگ ان ڪرڻ لاءِ درخواست جي وجود جي جانچ ڪندي
جيڪڏھن (Serial.available() > 0) {
جيڪڏھن (1 == Serial.read())؛
//////// ۽ جيڪڏهن "1" قبول ڪيو وڃي ته پوءِ آئوٽ
فائل myFile = SD.open(perv)؛
// جيڪڏهن فائل موجود آهي، ان ڏانهن لکو:
جيڪڏھن (myFile) {
جڏهن ته (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
ٻيو {
Serial.println("غلطي کولڻ .txt")؛
}
}
//////// پڙهڻ جو وقت
t = rtc.getTime();
tft.setTextColor(اڇو)؛
////////جيڪڏهن وقت بدلجي ويو آهي، ته پوءِ ڏيکاريو نئين ڪلاڪ پڙهڻ
جيڪڏھن ( time_sec_prev != t.sec) {
tft.setCursor(120, 0)؛ // سيٽنگ ڪرسر پوزيشن
tft.fillRect(118, 0, 50, 7, GRAY); // وقت جي پيداوار واري علائقي کي صاف ڪرڻ
tft.setTextSize(1)؛
tft.print(rtc.getTimeStr())؛ // ٻاھرين گھڙي پڙھڻ
time_sec_prev = t.sec؛
}
////////جيڪڏهن تاريخ تبديل ٿي وئي آهي ته پوءِ نئين تاريخ ڏيکاريو
جيڪڏهن ( time_day_prev != t.date) {
tft.setCursor(180, 0)؛ // سيٽنگ ڪرسر پوزيشن
tft.fillRect(178, 0, 65, 7, GRAY); // صاف تاريخ ڊسپلي علائقو
tft.setTextSize(1)؛
tft.print(rtc.getDateStr())؛ // ڊسپلي جي تاريخ پڙهڻ
time_day_prev = t.date؛
}
////////جيڪڏهن ريڊيو رسيپشن موجود هجي ته پوءِ
جيڪڏھن (radio.available(&pipe)) {
//////// چيڪ ڪرڻ ته ڇا وصولي بفر مڪمل آهي،
radio.read(&data, sizeof(data));
//////// جيڪڏهن گهربل ٽرانسميٽر ايڊريس موجود آهي، پوء
جيڪڏهن (پائپ == 1) {
//////// زيرو جي هم وقت سازي جي ترتيب جو انتظار ڪرڻ لاء
// ڊيٽا بلاڪ جي شروعات
جيڪڏهن (ڊيٽا == 0000) {
rc = 0؛
} ٻيو {
rc++;
}
////////ڪائونٽر ويلز کي رڪارڊ ڪرڻ ۽ انهن کي هڪ ڪلاڪ جي 10هين ۽ 100هين ۾ ڳڻڻ
جيڪڏهن (rc == 1) {
leb_1 = ڊيٽا / 3600.0؛
}

جيڪڏهن (rc == 2) {
leb_2 = ڊيٽا / 3600.0؛
}

جيڪڏهن (rc == 3) {
leb_3 = ڊيٽا / 3600.0؛
}

جيڪڏهن (rc == 4) {
leb_4 = ڊيٽا / 3600.0؛
}
}
}
ر ++؛
k++; // صرف هڪ انسداد
//////// ڊيٽا تازه ڪاري هڪ خاص مدت سان
جيڪڏهن ( r > = 6500) {
tft.setTextSize(2)؛
tft.fillRect(0, 41, 180, 64, GRAYD)؛
Serial.println("Lebedki I")؛
tft.setCursor(0, 41)؛
tft.println(leb_1)؛
Serial.println(leb_1);
tft.println(leb_2)؛
Serial.println(leb_2);
tft.println(leb_3)؛
Serial.println(leb_3);
tft.println(leb_4)؛
Serial.println(leb_4);
Serial.println(k)؛
ر = 0؛
}
//////// هر 10 منٽ SD تي لاگ ان ڊيٽا لکو.
جيڪڏهن ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1)؛
tft.setCursor(200, 10)؛
tft.setTextColor(BLACK)؛
//////// .csv فارميٽ ۾ اسٽرنگ ٺاهڻ
اسٽرنگ dataString = اسٽرنگ (rtc.getDateStr()) + "، "+(rtc.getTimeStr()) + "، " + (leb_1) + "، " + (leb_2)
+ "، " + (leb_3) + "، " + (leb_4) + "، "؛
//////// فائل ڏانهن لکو ۽ لکڻ جي عمل جا نتيجا ڪڍيو
myFile = SD.open(perv, FILE_WRITE)؛ // جيڪڏهن "2.txt" نالي ڪا به فائل ناهي، اها ٺاهي ويندي.
جيڪڏھن (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, گرين)؛
tft.println("SD OK")؛
Serial.println("SD OK")؛
دير (900)؛ // دير، ٻي صورت ۾ رڪارڊ 13 هڪجهڙائي پڙهائي جيستائين هڪ سيڪنڊ گذري چڪو آهي
} ٻيو {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD ERR")؛
Serial.println("SD ERR")؛
}
}
}ڪردار جي تبديلي جو پروگرام/* UTF-8 کان ونڊوز-1251 تائين روسي فانٽ ٻيهر ڪوڊ ڪريو */

String utf8rus (اسٽرنگ جو ذريعو)
{
int i،k؛
اسٽرنگ ٽارگيٽ؛
غير دستخط ٿيل چار ن؛
char m[2] = { '0'، '' }؛

k = source.length(); i = 0؛

جڏهن ته (i < k) {
n = ذريعو [i]؛ i++;

جيڪڏهن (n >= 0xC0) {
سوئچ (n) {
ڪيس 0xD0: {
n = ذريعو [i]؛ i++;
جيڪڏهن (n == 0x81) { n = 0xA8؛ وقفو }
جيڪڏهن (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
ڀڃندا آھن.
}
ڪيس 0xD1: {
n = ذريعو [i]؛ i++;
جيڪڏهن (n == 0x91) { n = 0xB8؛ وقفو؛ }
جيڪڏهن (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
ڀڃندا آھن.
}
}
}
m[0] = n؛ ٽارگيٽ = ٽارگيٽ + اسٽرنگ (م)؛
}
واپسي جو مقصد؛
} Adafruit_GFX لائبريري استعمال ڪندي سيريلڪ آئوٽ پٽ لاءِ ڪردار ٽرانسڪوڊنگ پروگرام ساڳئي فولڊر ۾ مکيه پروگرام سان گڏ رکيل آهي. توھان کي پڻ تبديل ڪرڻ جي ضرورت آھي glcdfont.c فائل کي Adafruit_GFX ۾ مختلف فونٽ سان. اهو آهي گهربل متبادل سان لائبريري. Russification بابت وڌيڪ معلومات انٽرنيٽ تي آساني سان ملي سگهي ٿي.
اختصار ڪرڻ لاء، مان چوان ٿو ته سسٽم اميدن تي پورو ٿيو، اهو سامان جي آپريٽنگ وقت جي نگراني ڪرڻ آسان ٿي چڪو آهي. جيتوڻيڪ سڀڪنھن شيء کي breadboards تي گڏ ڪيو ويو آهي، اتي ڪم جي باري ۾ ڪا به فوري شڪايتون نه آهن. پهرين عناصر ڇهن مهينن کان وڌيڪ ڪم ڪري رهيا آهن ۽ سياري کان بچي ويا آهن. جديد ڊيزائن اهو 9 مارچ کان وٺي 5 ڪنٽرول يونٽن لاءِ هلائي رهيو آهي ۽ آپريٽنگ وقت ان کي استعمال ڪندي سرڪاري طور تي رجسٽر ٿي رهيو آهي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو