Жергілікті автономды деректерді жинау жүйесі (жалғасы)

Осы сайттан бастаңыз байланыс.
Стартерді қосу туралы ақпаратты алудың ең қолайлы нұсқасы PC817 оптикалық қосқышы бар опция болды. Схема диаграммасыЖергілікті автономды деректерді жинау жүйесі (жалғасы)Тақталарда үш бірдей схема бар, барлығы 100x100 мм өлшемі ABS пластикалық қораптарға салынған. Оптикалық қосқыштардың фотосыЖергілікті автономды деректерді жинау жүйесі (жалғасы) Жартылай өткізгіш клапандары бар іске қосу құрылғыларына қосылған кезде олардың ағып кету тогы PC817 ашу үшін жеткілікті және есептегіш жалған іске қосылады. Мұндай жағдайды болдырмау үшін тағы біреуі оптикалық қосқыштың жарық диоды мен жұмыс индикаторының жарық диоды тізбегіне тізбектей қосылады. Ол үшін J1 секіргіші ашылып, қосымша жарық диодты LED1 дәнекерленген.
Қабылдау бөлігі жасалған 1 жағыЖергілікті автономды деректерді жинау жүйесі (жалғасы)2 жағыЖергілікті автономды деректерді жинау жүйесі (жалғасы)ARDUINO MEGA 2560 жалғанған әзірлеу тақтасы. Ол үшін соңында екі қатарлы қосқыш қолданылады. Ақпаратты көрсету құрылғысы ретінде резистивті сенсорлық экраны және температура сенсоры бар рұқсаты 240x400 экран пайдаланылады. HX8352B.Жергілікті автономды деректерді жинау жүйесі (жалғасы) Сонымен қатар, экран тақтасындағы ICSP қосқышы алынып тасталады және micro SD ұясы пайдаланылмайды. Өйткені, SPI шинасындағы қақтығысқа байланысты «туған» SD ұясын пайдалану мүмкін емес. Флэш-карта үшін 3,3 В тұрақтандырғышы мен 74LVS125A үш шығыс күйі бар буферлік чипті қамтитын жеке карта оқу құралы пайдаланылды. Бұл жерде мені тырма күтіп тұрды. Үш күйлі буфер, бірақ E01-ML01DP5 немесе картаны оқу құрылғысы жұмыс істеді. Кітапхананың түсініктемелерінде SdFat басқа құрылғылармен үйлесімсіздік туралы ескертуді көрді. TXS0108E деңгейіндегі түрлендіргіш алынып тасталды және ауыстырғыштармен ауыстырылды, өйткені E01-ML01DP5 5V сигналдарына төзімді - бұл көмектеспеді. Осциллографты пайдаланып, карта оқу құралы қосылған кезде MISO желісінде сигнал жоғалуы анықталды. Мұқият тексеруден кейін 4LVS74A OE 125 арналарының қосу сигналдарының кірістері қарапайым сымға дәнекерленгені және ешқандай үшінші күй туралы әңгіме болмауы мүмкін екендігі анықталды. Буферлік чип сигнал желілерімен тізбектей жалғанған 5 КОм резисторларды пайдаланып, 3.3В-тан 3,3В-қа дейінгі қарабайыр деңгей түрлендіргіші ретінде пайдаланылды. MISO желісін қоспағанда. Оның шығыс төменгі қосқышы сигналдарды жер деңгейіне тартқан болуы мүмкін. MISO желісінің қосу сигналы 13 түйреуіш екенін анықтап, ол жолдан жұлып алынды жәнедәнекерленгенЖергілікті автономды деректерді жинау жүйесі (жалғасы)9LVS74A CS құрылғысы арасында кіріс істікшесін (125) және тоқтату резисторын таңдаңыз. Енді жад картасына кіру мүмкіндігі болмаса, MISO буфері өшірілген және басқа құрылғының жұмысына кедергі жасамайды.Даму тақтасының диаграммасыЖергілікті автономды деректерді жинау жүйесі (жалғасы)Қабылдағыш жұмыс істеп тұрЖергілікті автономды деректерді жинау жүйесі (жалғасы)DS3231 сағатты қосу үшін бағдарламалық құрал I2C шинасын (TWI) пайдаланады.
Arduino IDE бағдарламасы// МАҢЫЗДЫ: Adafruit_TFTLCD КІТАПХАНАСЫ АРНАЙЫ БОЛУ КЕРЕК
// TFT ҚАЛҚАНЫНА НЕМЕСЕ ОЗУ ТАҚТАСЫНЫҢ КОНФИГУРАСЫ.
// ОРНАТУ ҮШІН Adafruit_TFTLCD.h НЕГІЗГІНДЕГІ ҚАТЫСТЫ ПІКІРЛЕМДЕРДІ ҚАРАҢЫЗ.
//Open-Smart Team және 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;
#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 ажырату тақтасын пайдалансаңыз //
// 5В-3.3В деңгейлі түрлендіру тізбегін қосуды ұсынамыз.
// Әрине, 5V/3.3V қуат қосқышы бар OPEN-SMART UNO қара нұсқасын пайдалануға болады,
// сізге тек 3.3 В-қа ауысу қажет.
// СКД үшін басқару істікшелері кез келген сандық немесе
// аналогтық түйреуіштер...бірақ аналогтық түйреуіштерді қолданамыз, себебі бұл бізге мүмкіндік береді
//———————————————-|
// TFT Breakout - 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 биттік түс мәндеріне адам оқи алатын атауларды тағайындаңыз:
#ҚАРА 0x0000 анықтаңыз
#КӨК 0x001F анықтаңыз
#ҚЫЗЫЛ 0xF800 анықтаңыз
#ЖАСЫЛ 0x07E0 анықтаңыз
#CYAN 0x07FF анықтау
#ҚҮШІН 0xF81F анықтаңыз
#САРЫ 0xFFE0 анықтаңыз
#АҚ 0xFFFF анықтаңыз
#сұр 0x8C51 анықтаңыз
#ГРАЙD 0x39E7 анықтау

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Егер қалқан пайдаланылса, барлық басқару және деректер жолдары бекітіледі және
// қарапайым мәлімдемені міндетті түрде пайдалануға болады:
// Adafruit_TFTLCD tft;
uint16_t g_идентификаторы;

String dataString;
//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(шын);
//////////////////Аттарды, жабдық керек-жарақтарын, ұйым атауын шығару
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("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 таратқыш 1xAABBCCDD0 идентификаторымен 11 құбырды ашыңыз
// Деректерді қабылдау үшін таратқыш идентификаторы 2xAABBCCDD2 бар құбырды 0 ашыңыз
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, ҚЫЗЫЛ);
tft.setTextColor(ҚАРА);
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, СҰР); // уақыт шығару аймағын тазалау
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Басқару объектілерінің атын шығару
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Винчестер 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);
// егер файл қол жетімді болса, оған жазыңыз:
егер (менің файлым) {
while (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, СҰР); // уақыт шығару аймағын тазалау
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, СҰР); // күнді көрсету аймағын тазалау
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // күн көрсеткіштерін көрсету
time_day_prev = t.date;
}
////////Егер радио қабылдау қолжетімді болса, онда
егер (radio.available(&pipe)) {
////////қабылдау буферінің толғанын тексеру,
radio.read(&деректер, sizeof(деректер));
////////егер қажетті таратқыш мекенжайы бар болса, онда
егер (құбыр == 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;
}
////////Деректерді SD жүйесіндегі журналға әр 10 минут сайын жазу.
егер ((т.мин % 10 == 0) && ( т.сек == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(ҚАРА);
////////.csv пішімінде жолды жасау
Жол dataString = Жол (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, ЖАСЫЛ);
tft.println("SD жарайды");
Serial.println("SD OK");
кешіктіру(900); // кешіктіру, әйтпесе секунд өткенше 13 бірдей көрсеткішті жазады
} Тағы {
tft.fillRect(198, 8, 42, 10, ҚЫЗЫЛ);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Таңбаларды түрлендіру бағдарламасы/* Орыс қаріптерін UTF-8-ден Windows-1251-ге қайта кодтау */

utf8rus жолы(жол көзі)
{
int i,k;
Жолдық мақсат;
unsigned char 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 файлын басқа қаріппен ауыстыру қажет. Бұл қажетті ауыстырумен кітапхана. Орыстандыру туралы қосымша ақпаратты Интернеттен оңай табуға болады.
Қорытындылай келе, жүйе үмітті ақтады, жабдықтың жұмыс уақытын бақылау оңайырақ болды. Барлығы нан тақталарына жиналса да, жұмысқа бірден шағымдар жоқ. Алғашқы элементтер алты айдан астам жұмыс істеп, қыстан аман шықты. Соңғы дизайн Ол 9 наурыздан бастап 5 басқарылатын блок үшін жұмыс істейді және жұмыс уақыты оны пайдалану арқылы ресми түрде тіркеледі.

Ақпарат көзі: www.habr.com

пікір қалдыру