Vietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums)

Sāciet Å”ajā vietnē ŠæŠ¾ ссыŠ»ŠŗŠµ.
Ērtākā iespēja izgÅ«t informāciju par startera ieslēgÅ”anu izrādÄ«jās opcija ar PC817 optronu. Shematiska diagrammaVietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums)Plātnēs ir trÄ«s identiskas shēmas, viss ievietots ABS plastmasas kastēs, izmērs 100x100 mm. Fotoattēls no optroniemVietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums) Ja tas ir savienots ar palaiÅ”anas ierÄ«cēm ar pusvadÄ«tāju vārstiem, to noplÅ«des strāva ir pietiekama, lai atvērtu PC817, un skaitÄ«tājs iedarbināsies kļūdaini. Lai izslēgtu Ŕādu situāciju vēl viens tiek pievienots virknē optrona gaismas diodes un darbÄ«bas indikācijas LED ķēdei. Lai to izdarÄ«tu, tiek atvērts džemperis J1 un tiek ielodēts papildu LED LED1.
SaņemoŔā daļa ir izgatavota uz 1. puseVietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums)2. puseVietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums)izstrādes plate savienota ar ARDUINO MEGA 2560. Å im nolÅ«kam tiek izmantots divrindu savienotājs galā. Kā informācijas displeja ierÄ«ce tiek izmantots ekrāns ar izŔķirtspēju 240x400 ar rezistÄ«vu skārienekrānu un temperatÅ«ras sensoru. HX8352B.Vietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums) Turklāt ekrāna plates savienotājs ar ICSP ir noņemts un micro SD slots netiek izmantots. Fakts ir tāds, ka ā€œvietējoā€ SD ligzdu nevar izmantot SPI kopnes konflikta dēļ. Flash kartei tika izmantots atseviŔķs karÅ”u lasÄ«tājs, kas ietvēra 3,3V stabilizatoru un bufera mikroshēmu ar trim izejas stāvokļiem 74LVS125A. Å eit mani gaidÄ«ja grābeklis. TrÄ«s stāvokļu buferis, taču strādāja vai nu E01-ML01DP5, vai karÅ”u lasÄ«tājs. Bibliotēkas komentāros SdFat redzēja brÄ«dinājumu par nesaderÄ«bu ar citām ierÄ«cēm. TXS0108E lÄ«meņa pārveidotājs tika noņemts un aizstāts ar džemperiem, jo E01-ML01DP5 ir izturÄ«gs pret 5V signāliem - tas nepalÄ«dzēja. Izmantojot osciloskopu, tika konstatēts signāla zudums MISO lÄ«nijā, kad tika pievienots karÅ”u lasÄ«tājs. RÅ«pÄ«gi pārbaudot, tika konstatēts, ka 4LVS74A OE 125 kanālu ieslēdzoÅ”o signālu ieejas ir vienkārÅ”i pielodētas pie kopējā vada un par kādu treÅ”o stāvokli nevarēja bÅ«t ne runas. Bufera mikroshēma tika izmantota kā primitÄ«vs lÄ«meņa pārveidotājs no 5V lÄ«dz 3.3V, izmantojot 3,3 KĪ© rezistorus, kas savienoti virknē ar signāla lÄ«nijām. Izņemot MISO lÄ«niju. Tās izejas apakŔējais slēdzis, iespējams, piesaistÄ«ja signālus zemes lÄ«menÄ«. Konstatējot, ka MISO lÄ«nijas ieslēgÅ”anas signāls ir 13. tapa, tā tika norauta no trases unpielodētsVietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums)starp 9LVS74A CS ierÄ«ci izvēlieties ievades tapu (125) un beigu rezistoru. Tagad, ja nav piekļuves atmiņas kartei, MISO buferis ir atspējots un netraucē citas ierÄ«ces darbÄ«bu.AttÄ«stÄ«bas dēļa diagrammaVietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums)Uztvērējs darbojasVietējā autonomā datu iegÅ«Å”anas sistēma (turpinājums)DS3231 izmanto programmatÅ«ras I2C kopni (TWI), lai savienotu pulksteni.
Arduino IDE programma// SVARÄŖGI: Adafruit_TFTLCD BIBLIOTĒKAI JĀBÅŖT KONKRĒTI
// KONFIGURĒTS TFT VAIROGAM VAI IZLAUKŠANAS PLĀLEI.
// SKATÄŖT ATTIECÄŖGOS KOMENTĀRUS Adafruit_TFTLCD.h LAI IESTATÄŖT.
//no Open-Smart Team un Catalex Team
//[e-pasts aizsargāts]
//Veikals: dx.com
// open-smart.aliexpress.com/store/1199788
//Demonstrācijas funkcija: displeja grafika, rakstzīmes
//Arduino IDE: 1.6.5
// Valde: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

// Valde: OPEN-SMART UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2 INCH 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

#iekļauts // Grafikas galvenā bibliotēka
//#iekļauts // Aparatūrai raksturīga bibliotēka
#iekļauts
MCUFRIEND_kbv tft;
#include "SdFat.h" // Izmantojiet SdFat bibliotēku
SdFat SD;
SdFile fails;
Fails myFile;
#define SD_CS_PIN SS

#iekļauts // Savienojiet bibliotēku darbam ar SPI kopni
#iekļauts // Pievienojiet iestatījumu failu no RF24 bibliotēkas
#iekļauts // Pievienojiet bibliotēku darbam ar nRF24L24+
RF24 radio (47, 49);

#iekļauts

DS3231 rtc(27, 25);
Laiks t;

uint16_t r = 6000;
uint32_t k = 0;

gaistoŔi neparakstīti garie dati;
pludiņŔ leb_1;
pludiņŔ leb_2;
pludiņŔ leb_3;
pludiņŔ leb_4;

uint8_t caurule;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//**************************************************** ****************/ /
// Ja izmantojat OPEN-SMART TFT sadalīŔanas paneli //
// Iesakām pievienot 5V-3.3V lÄ«meņa konvertÄ“Å”anas ķēdi.
// Protams, var izmantot OPEN-SMART UNO Black versiju ar 5V/3.3V strāvas slēdzi,
// jums vienkārÅ”i jāpārslēdzas uz 3.3 V.
// LCD vadības tapas var pieŔķirt jebkurai digitālajai vai
// analogās tapas...bet mēs izmantosim analogās tapas, jo tas mums ļauj
//ā€”ā€”ā€”ā€”ā€”ā€”ā€”ā€”ā€”ā€”ā€”ā€”ā€”--|
// TFT Breakout ā€” Arduino UNO / Mega2560 / OPEN-SMART UNO melns
// 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

// PieŔķiriet cilvēkiem lasāmus nosaukumus dažām izplatÄ«tākajām 16 bitu krāsu vērtÄ«bām:
#define MELNĀ 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define DZELTENS 0xFFE0
#define BALTS 0xFFFF
#define GREY 0x8C51
#define GRAYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Izmantojot vairogu, visas vadības un datu līnijas ir fiksētas un
// pēc izvēles var izmantot vienkārŔāku deklarāciju:
// Adafruit_TFTLCD tft;
uint16_t g_identifier;

String dataString;
//String numfileMonth = "1.txt";
char perv [] = {"2.txt"};
//String *numfileMonth="1.txt" (sizeof (numfileMonth));
////////////////////////////////////////////////////// /////////////////

void setup (void) {

rtc.begin();

// Lai iestatītu laiku, atņemiet komentārus no vajadzīgās rindiņas
// rtc.setDOW(6); // Nedēļas diena
// rtc.setTime(22, 04, 0); // Laiks, 24 stundu formātā.
// rtc.setDate(4, 5, 2019); // Datums, 29. gada 2018. oktobris

Serial.begin (2000000);
//////// Ekrāna inicializācija
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(true);
//////////////////Nosaukumi, aprīkojuma piederumi, organizācijas nosaukums
tft.fillScreen(MELNS);
tft.setTextColor(BALTĀ);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println ("IZSTRĀDĀTĀJI UN BÅŖVE");
tft.setCursor(30, 20);
tft.print (utf8rus("Constructor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
kavÄ“Å”anās (2000);

radio.begin(); // Uzsākt darbu nRF24L01+
radio.setChannel(120); // Norādiet datu saņemÅ”anas kanālu (no 0 lÄ«dz 127)
radio.setDataRate(RF24_250KBPS); // Norādiet datu pārraides ātrumu (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Norādiet raidītāja jaudu (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Atveriet 1 cauruli ar 1 raidītāja identifikatoru 0xAABBCCDD11, lai saņemtu datus
// Atveriet 2. cauruli ar raidītāja ID 2xAABBCCDD0, lai saņemtu datus
radio.startListening(); // Ieslēdziet uztvērēju, sāciet klausīties atvērtās caurules
// radio.stopListening();
////////Pakalpojuma informācijas izvade
tft.fillScreen(MELNS);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Sāciet inicializēt SD karti
Serial.println ("Sākotnējā SD karte");
tft.println ("Sākotnējā SD karte");
tft.setCursor(8, 10);
////////Kartes inicializācija
if (!SD.begin(SD_CS_PIN)) {
Serial.println("sākotnēji neizdevās!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(BLACK);
tft.println("Sākotnējā neizdevās!");
atgriezties;
}
tft.setTextColor(BALTĀ);
Serial.println("inicializācija veikta");
tft.println ("Inicializācija pabeigta");
kavÄ“Å”anās (2000);
////////Laika un datuma nolasīŔana un to pieŔķirŔana mainīgajiem
t = rtc.getTime();
time_sec_prev = t.sec;
time_day_prev = t.date;
////////Piespiedu kārtā izvadiet datumu, lai negaidītu, kad datums mainīsies parādīŔanai
tft.setCursor(180, 0); // kursora pozīcijas iestatīŔana
tft.fillRect(178, 0, 65, 7, GREY); // laika izvades apgabala notīrīŔana
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Izvadiet vadības objektu nosaukumus
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Vinčas I"));
////////Žurnāla faila izveide un izveides mēģinājuma rezultāta izvadÄ«Å”ana
tft.setTextSize(1);
tft.setCursor(130, 10); // ja ir izveidots žurnālfails 2.txt, tad ierakstīŔana failā turpināsies
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Vēl {
mansFails = SD.open(perv, FILE_WRITE); // ja fails 2.txt neeksistē, tas tiks izveidots
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loop (void) {
////////Pārbauda, ā€‹ā€‹vai ir pieprasÄ«jums izvadÄ«t žurnālu COM porta monitoram
if (Serial.available() > 0) {
if (1 == Serial.lasīt());
////////Un ja tiek pieņemts ā€œ1ā€, tad izvade
Fails myFile = SD.open(perv);
// ja fails ir pieejams, rakstiet tam:
if (mans fails) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("kļūda atverot .txt");
}
}
////////LasīŔanas laiks
t = rtc.getTime();
tft.setTextColor(BALTĀ);
////////Ja laiks ir mainījies, tad parādiet jaunos pulksteņa rādījumus
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // kursora pozīcijas iestatīŔana
tft.fillRect(118, 0, 50, 7, GREY); // laika izvades apgabala notīrīŔana
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // izejas pulksteņa rādījumi
time_sec_prev = t.sec;
}
////////Ja datums ir mainījies, tad parādiet jauno datumu
if ( time_day_prev != t.date) {
tft.setCursor(180, 0); // kursora pozīcijas iestatīŔana
tft.fillRect(178, 0, 65, 7, GREY); // notīrīt datuma displeja apgabalu
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // parādīt datuma rādījumus
time_day_prev = t.date;
}
////////Ja ir pieejama radio uztverŔana, tad
if (radio.available(&pipe)) {
////////pārbaudot, vai saņemÅ”anas buferis ir pilns,
radio.read(&data, sizeof(data));
////////ja ir pieejama vajadzīgā raidītāja adrese, tad
if (caurule == 1) {
////////gaida sinhronizācijas nulles secību, lai noteiktu
//datu bloka sākums
if (dati == 0000) {
rc = 0;
} Vēl {
rc++;
}
////////Stundas 10. un 100. daļās reģistrē skaitītāju vērtības un aprēķina tos
if (rc == 1) {
leb_1 = dati / 3600.0;
}

if (rc == 2) {
leb_2 = dati / 3600.0;
}

if (rc == 3) {
leb_3 = dati / 3600.0;
}

if (rc == 4) {
leb_4 = dati / 3600.0;
}
}
}
r++;
k++; // tikai skaitītājs
//////// Datu atjaunoŔana ar noteiktu periodiskumu
if ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, PELĒKS);
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;
}
////////Ik pēc 10 minūtēm ierakstiet datus žurnālā SD.
if ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////Virknes izveide .csv formātā
String dataString = Virkne (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////Ierakstiet failā un izvadiet rakstīŔanas procesa rezultātus
mansFails = SD.open(perv, FILE_WRITE); // ja nav faila ar nosaukumu ā€œ2.txtā€, tas tiks izveidots.
if (mans fails) {
myFile.println(datu virkne);
myFile.close();
tft.fillRect(198, 8, 42, 10, ZAĻS);
tft.println("SD OK");
Serial.println("SD OK");
kavÄ“Å”anās (900); // kavÄ“Å”anās, pretējā gadÄ«jumā reÄ£istrē 13 identiskus rādÄ«jumus, lÄ«dz ir pagājusi sekunde
} Vēl {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}RakstzÄ«mju konvertÄ“Å”anas programma/* Pārkodēt krievu fontus no UTF-8 uz Windows-1251 */

Virkne utf8rus (virknes avots)
{
int i,k;
Stīgu mērķis;
neparakstīts char n;
char m[2] = { '0', ' ' };

k = avots.garums(); i = 0;

kamēr (i < k) {
n = avots [i]; i++;

if (n >= 0xC0) {
slēdzis (n) {
case 0xD0: {
n = avots [i]; i++;
ja (n == 0x81) { n = 0xA8; pārtraukums; }
ja (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
pārtraukuma;
}
case 0xD1: {
n = avots [i]; i++;
ja (n == 0x91) { n = 0xB8; pārtraukums; }
ja (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
pārtraukuma;
}
}
}
m[0] = n; mērķis = mērķis + String(m);
}
atgrieÅ”anās mērÄ·is;
}RakstzÄ«mju pārkodÄ“Å”anas programma kirilicas izvadei, izmantojot bibliotēku Adafruit_GFX, tiek ievietota tajā paŔā mapē ar galveno programmu. Jums arÄ« jāaizstāj fails glcdfont.c Adafruit_GFX ar citu fontu. Å eit bibliotēka ar nepiecieÅ”amo nomaiņu. PlaŔāku informāciju par rusifikāciju var viegli atrast internetā.
Rezumējot, teikÅ”u, ka sistēma attaisnoja uz sevi liktās cerÄ«bas, ir kļuvis vieglāk uzraudzÄ«t iekārtu darbÄ«bas laiku. Lai arÄ« viss ir salikts uz maizes dēļiem, par darbu uzreiz sÅ«dzÄ«bu nav. Pirmie elementi darbojas vairāk nekā seÅ”us mēneÅ”us un ir izturējuÅ”i ziemu. Jaunākais dizains KopÅ” 9. marta tas darbojas 5 kontrolētajām vienÄ«bām, un, izmantojot to, tiek oficiāli reÄ£istrēts darbÄ«bas laiks.

Avots: www.habr.com

Pievieno komentāru