سیستم جمع آوری داده های مستقل محلی (ادامه)

از این سایت شروع کنید по ссылке.
راحت ترین گزینه برای بازیابی اطلاعات در مورد روشن کردن استارت گزینه ای با اپتوکوپلر PC817 بود. نمودار شماتیکسیستم جمع آوری داده های مستقل محلی (ادامه)تخته ها شامل سه مدار یکسان هستند، همه چیز در جعبه های پلاستیکی ABS، اندازه 100x100 میلی متر قرار می گیرد. عکس کوپلرهای نوریسیستم جمع آوری داده های مستقل محلی (ادامه) هنگام اتصال به دستگاه های راه اندازی با شیرهای نیمه هادی، جریان نشتی آنها برای باز کردن PC817 کافی است و شمارنده به طور کاذب فعال می شود. برای حذف چنین وضعیتی یکی دیگر به صورت سری به مدار LED اپتوکوپلر و LED نشانگر عملکرد اضافه می شود. برای انجام این کار، جامپر J1 باز می شود و یک LED LED اضافی به آن لحیم می شود.
قسمت دریافت کننده بر روی ساخته شده است سمت 1سیستم جمع آوری داده های مستقل محلی (ادامه)سمت 2سیستم جمع آوری داده های مستقل محلی (ادامه)برد توسعه متصل به ARDUINO MEGA 2560. برای این کار از یک کانکتور دو ردیفه در انتهای آن استفاده شده است. صفحه نمایش با رزولوشن 240x400 دارای صفحه نمایش لمسی مقاومتی و سنسور دما به عنوان دستگاه نمایش اطلاعات استفاده می شود. HX8352B.سیستم جمع آوری داده های مستقل محلی (ادامه) علاوه بر این، اتصال به ICSP روی برد صفحه نمایش حذف شده و از اسلات micro SD استفاده نمی شود. واقعیت این است که سوکت SD "بومی" به دلیل درگیری در گذرگاه SPI قابل استفاده نیست. برای فلش کارت از کارت خوان جداگانه ای استفاده شد که شامل یک تثبیت کننده 3,3 ولت و یک تراشه بافر با سه حالت خروجی 74LVS125A بود. اینجا جایی بود که چنگک منتظر من بود. یک بافر سه حالته، اما E01-ML01DP5 یا کارتخوان کار می کرد. در نظرات کتابخانه، SdFat هشداری در مورد ناسازگاری با دستگاه های دیگر مشاهده کرد. مبدل سطح در TXS0108E حذف شد و با جامپرها جایگزین شد، زیرا E01-ML01DP5 نسبت به سیگنال های 5 ولت متحمل است - کمکی نکرد. با استفاده از یک اسیلوسکوپ، هنگام اتصال یک کارت خوان، از دست دادن سیگنال در خط MISO تشخیص داده شد. با بررسی دقیق، مشخص شد که ورودی سیگنال های فعال کننده OE 4 کانال 74LVS125A به سادگی به یک سیم مشترک لحیم شده است و نمی توان در مورد حالت سوم صحبت کرد. تراشه بافر به عنوان یک مبدل سطح اولیه از 5 ولت به 3.3 ولت با استفاده از مقاومت های 3,3 KΩ که به صورت سری با خطوط سیگنال متصل می شوند، استفاده شد. به جز خط MISO. سوئیچ پایین خروجی آن احتمالا سیگنال ها را به سطح زمین جذب می کند. با تشخیص اینکه سیگنال فعال خط MISO پایه 13 است، از مسیر جدا شد ولحیم شدهسیستم جمع آوری داده های مستقل محلی (ادامه)بین دستگاه 9LVS74A CS پین ورودی (125) و مقاومت پایانی را انتخاب کنید. حال در صورت عدم دسترسی به کارت حافظه، بافر MISO غیرفعال شده و در عملکرد دستگاه دیگری اختلال ایجاد نمی کند.نمودار تخته توسعهسیستم جمع آوری داده های مستقل محلی (ادامه)گیرنده در حال کارسیستم جمع آوری داده های مستقل محلی (ادامه)DS3231 از یک گذرگاه نرم افزار I2C (TWI) برای اتصال ساعت استفاده می کند.
برنامه آردوینو IDE// مهم: کتابخانه Adafruit_TFTLCD باید به طور خاص باشد
// برای TFT SHIELD یا BREAKout board پیکربندی شده است.
// برای راه اندازی به نظرات مربوطه در Adafruit_TFTLCD.h مراجعه کنید.
//توسط تیم Open-Smart و تیم Catalex
//[ایمیل محافظت شده]
//فروشگاه: 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;
فایل SdFile;
فایل myFile;
#define SD_CS_PIN SS

#عبارتند از // کتابخانه را برای کار با گذرگاه SPI وصل کنید
#عبارتند از // فایل تنظیمات را از کتابخانه RF24 وصل کنید
#عبارتند از // کتابخانه را برای کار با nRF24L24+ وصل کنید
رادیو RF24 (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 را اضافه کنید.
// البته می توانید از نسخه OPEN-SMART UNO Black با کلید برق 5V/3.3V استفاده کنید.
// فقط باید به 3.3 ولت سوئیچ کنید.
// پین های کنترل برای LCD را می توان به هر دیجیتال یا اختصاص داد
// پین های آنالوگ...اما ما از پین های آنالوگ استفاده می کنیم که این امکان را به ما می دهد
//——————————————-|
// شکست TFT - Arduino UNO / Mega2560 / OPEN-SMART UNO مشکی
// GND - GND
// 3V3 - 3.3V
//CS - A3
// RS - A2
// WR - A1
// RD - A0
// RST - RESET
// LED - GND
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7

// نام های قابل خواندن توسط انسان را به برخی از مقادیر رنگی 16 بیتی رایج اختصاص دهید:
#BLACK 0x0000 را تعریف کنید
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#تعریف زرد 0xFFE0
#define WHITE 0xFFFF
#define GRAY 0x8C51
#define 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"};
//رشته *numfileMonth="1.txt" (sizeof (numfileMonth));
///////////////////////////////////////////////////////////////////////// /////////////////

راه اندازی باطل (باطل) {

rtc.begin();

// برای تنظیم زمان، خطوط لازم را از نظر خارج کنید
// rtc.setDOW(6); // روز هفته
// rtc.setTime(22, 04, 0); // زمان، در قالب 24 ساعته.
// rtc.setDate(4، 5، 2019)؛ // تاریخ، 29 اکتبر 2018

Serial.begin (2000000)؛
//////// مقداردهی اولیه صفحه
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(true);
//////////////////خروجی نام ها، لوازم جانبی تجهیزات، نام سازمان
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
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("Turner 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 را با شناسه فرستنده 2xAABBCCDD0 برای دریافت داده باز کنید
radio.startListening(); // گیرنده را روشن کنید، شروع به گوش دادن به لوله های باز کنید
// radio.stopListening();
////////خروجی اطلاعات سرویس
tft.fillScreen(BLACK);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////شروع اولیه کردن کارت SD
Serial.println("کارت SD اولیه");
tft.println ("کارت SD اولیه");
tft.setCursor(8, 10);
////////آغاز کردن کارت
if (!SD.begin(SD_CS_PIN)) {
Serial.println("initial شکست!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(BLACK)؛
tft.println("Initial Fail!");
بازگشت؛
}
tft.setTextColor(WHITE);
Serial.println("initialization انجام شد");
tft.println("Initialization انجام شد");
تاخیر (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 ایجاد شود، نوشتن در فایل ادامه خواهد یافت
if (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
if (Serial.available() > 0) {
if (1 == Serial.read());
////////و اگر "1" پذیرفته شد، خروجی
فایل myFile = SD.open(perv);
// اگر فایل موجود است، در آن بنویسید:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
دیگر {
Serial.println("خطا در باز کردن .txt");
}
}
////////زمان خواندن
t = rtc.getTime();
tft.setTextColor(WHITE);
////////اگر زمان تغییر کرده است، خوانش های ساعت جدید را نمایش دهید
if (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;
}
////////اگر تاریخ تغییر کرده است، تاریخ جدید را نمایش دهید
if (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;
}
////////اگر دریافت رادیویی در دسترس است، پس
if (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
رشته dataString = رشته (rtc.getDateStr()) + "، "+(rtc.getTimeStr()) + "، " + (leb_1) + "، " + (leb_2)
+ "، " + (leb_3) + "، " + (leb_4) + "، ";
////////در یک فایل بنویسید و نتایج فرآیند نوشتن را خروجی بگیرید
myFile = SD.open(perv, FILE_WRITE); // اگر فایلی با نام 2.txt وجود نداشته باشد، ایجاد خواهد شد.
if (myFile) {
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 */

رشته utf8rus (منبع رشته)
{
int i,k;
هدف رشته؛
بدون امضا char n;
char m[2] = { '0', ' ' };

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

در حالی که (i < k) {
n = منبع[i]; i++;

اگر (n >= 0xC0) {
سوئیچ (n) {
مورد 0xD0: {
n = منبع[i]; i++;
if (n == 0x81) {n = 0xA8; زنگ تفريح؛ }
اگر (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
زنگ تفريح؛
}
مورد 0xD1: {
n = منبع[i]; i++;
if (n == 0x91) {n = 0xB8; زنگ تفريح؛ }
اگر (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
زنگ تفريح؛
}
}
}
m[0] = n; هدف = هدف + رشته (m);
}
هدف بازگشت؛
}برنامه رمزگذاری کاراکتر برای خروجی سیریلیک با استفاده از کتابخانه Adafruit_GFX در همان پوشه با برنامه اصلی قرار می گیرد. همچنین باید فایل glcdfont.c را در Adafruit_GFX با فونت دیگری جایگزین کنید. اینجا کتابخانه با جایگزین مورد نیاز اطلاعات بیشتر در مورد Russification را می توان به راحتی در اینترنت یافت.
به طور خلاصه، من می گویم که سیستم انتظارات را برآورده کرد، نظارت بر زمان عملکرد تجهیزات آسان تر شده است. حتی با وجود اینکه همه چیز روی تخته های نان مونتاژ شده است، هیچ شکایتی در مورد کار وجود ندارد. اولین عناصر بیش از شش ماه است که کار می کنند و از زمستان جان سالم به در برده اند. جدیدترین طرح از 9 اسفندماه برای 5 واحد کنترلی راه اندازی شده و زمان بهره برداری با استفاده از آن به صورت رسمی ثبت می شود.

منبع: www.habr.com

اضافه کردن نظر