مقامی خود مختار ڈیٹا ایکوزیشن سسٹم (جاری ہے)

اس سائٹ پر شروع کریں۔ ссылке по.
سٹارٹر کو آن کرنے کے بارے میں معلومات حاصل کرنے کا سب سے آسان آپشن PC817 آپٹوکوپلر کے ساتھ آپشن نکلا۔ اسکیمیٹک آریگراممقامی خود مختار ڈیٹا ایکوزیشن سسٹم (جاری ہے)بورڈز میں تین ایک جیسے سرکٹس ہیں، ہر چیز ABS پلاسٹک کے ڈبوں میں رکھی گئی ہے، جس کا سائز 100x100 ملی میٹر ہے۔ آپٹوکوپلرز کی تصویرمقامی خود مختار ڈیٹا ایکوزیشن سسٹم (جاری ہے) سیمی کنڈکٹر والوز کے ساتھ شروع ہونے والے آلات سے منسلک ہونے پر، ان کا رساو کرنٹ PC817 کو کھولنے کے لیے کافی ہے اور کاؤنٹر غلط طور پر متحرک ہو جائے گا۔ ایسی صورت حال کو خارج کرنے کے لیے آپٹوکوپلر LED کے سرکٹ اور آپریشن کے اشارے LED میں سیریز میں ایک اور شامل کیا گیا ہے۔ ایسا کرنے کے لیے، جمپر J1 کھولا جاتا ہے اور ایک اضافی LED LED1 کو سولڈر کیا جاتا ہے۔
وصول کرنے والا حصہ بنایا گیا ہے۔ سائیڈ 1مقامی خود مختار ڈیٹا ایکوزیشن سسٹم (جاری ہے)سائیڈ 2مقامی خود مختار ڈیٹا ایکوزیشن سسٹم (جاری ہے)ARDUINO MEGA 2560 سے منسلک ترقیاتی بورڈ۔ اس کے لیے آخر میں ایک ڈبل رو کنیکٹر استعمال کیا جاتا ہے۔ 240x400 ریزولوشن والی اسکرین، جس میں مزاحمتی ٹچ اسکرین اور درجہ حرارت کا سینسر ہوتا ہے، معلومات ڈسپلے ڈیوائس کے طور پر استعمال ہوتا ہے۔ HX8352B۔مقامی خود مختار ڈیٹا ایکوزیشن سسٹم (جاری ہے) مزید یہ کہ اسکرین بورڈ پر موجود ICSP سے کنیکٹر ہٹا دیا جاتا ہے اور مائیکرو SD سلاٹ استعمال نہیں کیا جاتا ہے۔ حقیقت یہ ہے کہ "مقامی" SD ساکٹ SPI بس میں تنازعہ کی وجہ سے استعمال نہیں کیا جا سکتا۔ فلیش کارڈ کے لیے، ایک علیحدہ کارڈ ریڈر استعمال کیا گیا، جس میں ایک 3,3V سٹیبلائزر اور ایک بفر چپ شامل تھی جس میں تین آؤٹ پٹ سٹیٹس 74LVS125A تھی۔ یہ وہ جگہ ہے جہاں ریک میرا انتظار کر رہی تھی۔ تین ریاستوں کا بفر، لیکن یا تو E01-ML01DP5 یا کارڈ ریڈر کام کرتا ہے۔ لائبریری کے تبصروں میں، SdFat نے دیگر آلات کے ساتھ عدم مطابقت کے بارے میں ایک انتباہ دیکھا۔ TXS0108E پر لیول کنورٹر کو ہٹا دیا گیا اور اس کی جگہ جمپر لگا دی گئی، کیونکہ E01-ML01DP5 5V سگنلز کو برداشت کرتا ہے - اس سے کوئی فائدہ نہیں ہوا۔ ایک آسیلوسکوپ کا استعمال کرتے ہوئے، 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 شیلڈ یا بریک آؤٹ بورڈ کے لیے تشکیل شدہ۔
// سیٹ اپ کے لیے Adafruit_TFTLCD.h میں متعلقہ تبصرے دیکھیں۔
اوپن سمارٹ ٹیم اور کیٹیلیکس ٹیم کے ذریعہ //
//[ای میل محفوظ]
//سٹور: dx.com
// open-smart.aliexpress.com/store/1199788
//ڈیمو فنکشن: ڈسپلے گرافکس، حروف
//Arduino IDE: 1.6.5
// بورڈ: Arduino UNO R3، Arduino Mega2560، Arduino Leonardo

// بورڈ: OPEN-SMART 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
//OPEN-SMART 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؛
ایس ڈی فائل فائل؛
فائل myFile؛
#SD_CS_PIN SS کی وضاحت کریں۔

#شامل // SPI بس کے ساتھ کام کرنے کے لیے لائبریری کو جوڑیں۔
#شامل // RF24 لائبریری سے سیٹنگ فائل کو جوڑیں۔
#شامل // nRF24L24+ کے ساتھ کام کرنے کے لیے لائبریری کو مربوط کریں۔
آر ایف 24 ریڈیو (47، 49)؛

#شامل

DS3231 rtc(27, 25);
وقت t;

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 لیول کنورٹنگ سرکٹ شامل کرنے کا مشورہ دیں۔
// یقیناً آپ 5V/3.3V پاور سوئچ کے ساتھ OPEN-SMART UNO بلیک ورژن استعمال کر سکتے ہیں،
// آپ کو صرف 3.3V پر سوئچ کرنے کی ضرورت ہے۔
// LCD کے لیے کنٹرول پن کسی بھی ڈیجیٹل یا کو تفویض کیا جا سکتا ہے۔
// اینالاگ پن...لیکن ہم اینالاگ پن استعمال کریں گے کیونکہ یہ ہمیں اجازت دیتا ہے۔
//——————————————-|
// TFT بریک آؤٹ - Arduino UNO / Mega2560 / OPEN-SMART UNO سیاہ
// GND - GND
// 3V3 - 3.3V
//CS - A3
// RS - A2
// WR - A1
// RD - A0
// RST - دوبارہ ترتیب دیں۔
// ایل ای ڈی - جی این ڈی
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7

// کچھ عام 16 بٹ رنگ کی قدروں کو انسانی پڑھنے کے قابل نام تفویض کریں:
#BLACK 0x0000 کی وضاحت کریں۔
# بلیو 0x001F کی وضاحت کریں۔
# RED 0xF800 کی وضاحت کریں۔
# GREEN 0x07E0 کی وضاحت کریں۔
# CYAN 0x07FF کی وضاحت کریں۔
#MAGENTA 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؛

String dataString;
//String numfileMonth = "1.txt";
char perv [] = {"2.txt"};
//String *numfileMonth="1.txt" (sizeof (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(WHITE)؛
tft.setTextSize(2)؛
tft.setCursor(8, 0)؛
tft.println("ڈویلپرز اینڈ بلڈ")؛
tft.setCursor(30, 20)؛
tft.print (utf8rus("کنسٹرکٹر 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 ٹرانسمیٹر 1xAABBCCDD0 کے شناخت کنندہ کے ساتھ 11 پائپ کھولیں۔
// ڈیٹا حاصل کرنے کے لیے پائپ 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(WHITE)؛
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)؛ // اگر log فائل 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) {
if (1 == Serial.read())؛
//////// اور اگر "1" کو قبول کیا جاتا ہے، تو آؤٹ پٹ
فائل myFile = SD.open(perv)؛
// اگر فائل دستیاب ہے تو اسے لکھیں:
اگر (میری فائل) {
جبکہ (myFile.available()) {
Serial.write(myFile.read())؛
}
myFile.close();
}
اور {
Serial.println("غلطی کھولنے .txt")؛
}
}
////////پڑھنے کا وقت
t = rtc.getTime();
tft.setTextColor(WHITE)؛
//////// اگر وقت بدل گیا ہے تو نئی گھڑی کی ریڈنگ دکھائیں۔
اگر ( 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;
}
}
}
r++;
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)؛
r = 0;
}
//////// ہر 10 منٹ بعد SD لاگ پر ڈیٹا لکھیں۔
اگر ((t.min% 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1)؛
tft.setCursor(200, 10)؛
tft.setTextColor(BLACK)؛
//////// .csv فارمیٹ میں سٹرنگ بنانا
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + "," + (leb_1) + "," + (leb_2)
+ "، " + (leb_3) + "، " + (leb_4) + "، "؛
//////// فائل پر لکھیں اور تحریری عمل کے نتائج کو آؤٹ پٹ کریں۔
myFile = SD.open(perv, FILE_WRITE)؛ // اگر "2.txt" نام کی کوئی فائل نہیں ہے، تو یہ بن جائے گی۔
اگر (میری فائل) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, GREEN);
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 سے Windows-1251 تک دوبارہ کوڈ کریں */

String utf8rus (سٹرنگ سورس)
{
int i,k;
سٹرنگ ہدف؛
غیر دستخط شدہ چار n;
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 لائبریری کا استعمال کرتے ہوئے سیریلک آؤٹ پٹ کے لیے کریکٹر ٹرانسکوڈنگ پروگرام کو مرکزی پروگرام کے ساتھ اسی فولڈر میں رکھا گیا ہے۔ آپ کو Adafruit_GFX میں glcdfont.c فائل کو مختلف فونٹ سے تبدیل کرنے کی بھی ضرورت ہے۔ یہاں مطلوبہ متبادل کے ساتھ لائبریری۔ Russification کے بارے میں مزید معلومات انٹرنیٹ پر آسانی سے مل سکتی ہیں۔
خلاصہ کرنے کے لئے، میں یہ کہوں گا کہ نظام توقعات پر پورا اترتا ہے، آلات کے آپریٹنگ وقت کی نگرانی کرنا آسان ہو گیا ہے۔ اگرچہ سب کچھ روٹی بورڈ پر جمع ہے، کام کے بارے میں فوری طور پر کوئی شکایت نہیں ہے. پہلے عناصر چھ ماہ سے زیادہ عرصے سے کام کر رہے ہیں اور سردیوں سے بچ گئے ہیں۔ تازہ ترین ڈیزائن یہ 9 مارچ سے 5 کنٹرولڈ یونٹس کے لیے چل رہا ہے اور آپریٹنگ ٹائم اسے استعمال کرتے ہوئے باضابطہ طور پر رجسٹر کیا جا رہا ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں