Miestny autonómny systém získavania údajov (pokračovanie)

Začnite na tejto stránke по ссылке.
Ako najpohodlnejšia možnosť na získanie informácií o zapnutí štartéra sa ukázala možnosť s optočlenom PC817. Schematický diagramMiestny autonómny systém získavania údajov (pokračovanie)Dosky obsahujú tri rovnaké obvody, všetko je umiestnené v plastových boxoch ABS veľkosti 100x100 mm. Foto optočlenovMiestny autonómny systém získavania údajov (pokračovanie) Pri pripojení k štartovacím zariadeniam s polovodičovými ventilmi je ich zvodový prúd dostatočný na otvorenie PC817 a počítadlo sa spustí nesprávne. Aby sa takáto situácia vylúčila do obvodu LED optočlena a LED indikácie prevádzky sa v sérii pridá ešte jedna. Za týmto účelom sa otvorí prepojka J1 a pripája sa prídavná LED LED1.
Prijímacia časť je vyrobená na strana 1Miestny autonómny systém získavania údajov (pokračovanie)strana 2Miestny autonómny systém získavania údajov (pokračovanie)vývojová doska pripojená k ARDUINO MEGA 2560. Na to je na konci použitý dvojradový konektor. Ako informačné zobrazovacie zariadenie sa používa obrazovka s rozlíšením 240 x 400 s odporovým dotykovým displejom a snímačom teploty. HX8352B.Miestny autonómny systém získavania údajov (pokračovanie) Okrem toho je konektor k ICSP na doske obrazovky odstránený a slot micro SD sa nepoužíva. Faktom je, že „natívnu“ zásuvku SD nemožno použiť z dôvodu konfliktu na zbernici SPI. Pre flash kartu bola použitá samostatná čítačka kariet, ktorá obsahovala 3,3V stabilizátor a vyrovnávací čip s tromi výstupnými stavmi 74LVS125A. Tu ma čakali hrable. Trojstavová vyrovnávacia pamäť, ale fungovala buď E01-ML01DP5 alebo čítačka kariet. V komentároch knižnice SdFat videl varovanie o nekompatibilite s inými zariadeniami. Prevodník úrovní na TXS0108E bol odstránený a nahradený prepojkami, pretože E01-ML01DP5 je tolerantný voči 5V signálom - nepomohlo. Pomocou osciloskopu bola zistená strata signálu na linke MISO pri pripojení čítačky kariet. Po dôkladnom preskúmaní sa zistilo, že vstupy povoľovacích signálov OE 4 kanálov 74LVS125A boli jednoducho prispájkované na spoločný vodič a o žiadnom treťom stave nemôže byť ani reči. Vyrovnávací čip bol použitý ako primitívny prevodník úrovne z 5V na 3.3V pomocou 3,3 KΩ rezistorov zapojených do série so signálnymi vedeniami. Okrem linky MISO. Jeho výstupný spodný spínač pravdepodobne priťahoval signály na úroveň zeme. Po zistení, že povoľovací signál linky MISO bol kolík 13, bol odtrhnutý od stopy aspájkovanéMiestny autonómny systém získavania údajov (pokračovanie)medzi zariadením 9LVS74A CS vyberte vstupný kolík (125) a ukončovací odpor. Teraz, ak nie je prístup k pamäťovej karte, vyrovnávacia pamäť MISO sa deaktivuje a neruší činnosť iného zariadenia.Schéma vývojovej doskyMiestny autonómny systém získavania údajov (pokračovanie)Prijímač v prevádzkeMiestny autonómny systém získavania údajov (pokračovanie)DS3231 používa na pripojenie hodín softvérovú I2C zbernicu (TWI).
Program Arduino IDE// DÔLEŽITÉ: KNIŽNICA Adafruit_TFTLCD MUSÍ BYŤ KONKRÉTNE
// KONFIGUROVANÉ BUĎ PRE TFT ŠTÍT ALEBO ROZLOŽIČKU.
// NASTAVENIE POZRITE SI RELEVANTNÉ KOMENTÁRE V Adafruit_TFTLCD.h.
//od Open-Smart Team a Catalex Team
//[chránené e-mailom]
//Uložiť: dx.com
// open-smart.aliexpress.com/store/1199788
// Funkcia ukážky: Zobrazenie grafiky, znakov
//Arduino IDE: 1.6.5
// Doska: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

// Doska: 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

#include // Základná grafická knižnica
//#include // Knižnica špecifická pre hardvér
#include
MCUFRIEND_kbv tft;
#include "SdFat.h" // Použite knižnicu SdFat
SdFat SD;
súbor SdFile;
Súbor myFile;
#define SD_CS_PIN SS

#include // Pripojte knižnicu na prácu so zbernicou SPI
#include // Pripojte súbor nastavení z knižnice RF24
#include // Pripojte knižnicu na prácu s nRF24L24+
rádio RF24 (47, 49);

#include

DS3231 rtc(27, 25);
čas t;

uint16_t r = 6000;
uint32_t k = 0;

nestále dlhé dáta bez znamienka;
float leb_1;
float leb_2;
float leb_3;
float leb_4;

uint8_t potrubie;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//***************************************************** ***************/ /
// Ak používate OPEN-SMART TFT breakout board //
// Odporúčame vám pridať obvod na konverziu úrovne 5V-3.3V.
// Samozrejme môžete použiť verziu OPEN-SMART UNO Black s vypínačom 5V/3.3V,
// stačí prepnúť na 3.3V.
// Ovládacie piny pre LCD je možné priradiť ľubovoľnému digitálnemu resp
// analógové kolíky...ale použijeme analógové kolíky, pretože nám to umožňuje
//——————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO Black
// 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

// Priraďte ľuďom čitateľné názvy k niektorým bežným 16-bitovým hodnotám farieb:
#define BLACK 0x0000
#define MODRÁ 0x001F
#define RED 0xF800
#define ZELENÁ 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define ŽLTÁ 0xFFE0
#define WHITE 0xFFFF
#define GREY 0x8C51
#define GREYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Ak používate štít, všetky riadiace a dátové linky sú pevné a
// voliteľne je možné použiť jednoduchšiu deklaráciu:
// Adafruit_TFTLCD tft;
uint16_t g_identifikátor;

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

void setup (void) {

rtc.begin();

// Ak chcete nastaviť čas, odkomentujte potrebné riadky
// rtc.setDOW(6); // Deň v týždni
// rtc.setTime(22, 04, 0); // Čas v 24-hodinovom formáte.
// rtc.setDate(4, 5, 2019); // Dátum, 29. október 2018

Serial.egegin (2000000);
//////// Inicializácia obrazovky
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(pravda);
//////////////////Výstup mien, príslušenstva zariadení, názvu organizácie
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("VÝVOJÁRI A BUDOVANIE");
tft.setCursor(30, 20);
tft.print (utf8rus("Konštruktor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
oneskorenie (2000);

radio.begin(); // Spustite prácu nRF24L01+
radio.setChannel(120); // Zadajte kanál príjmu údajov (od 0 do 127)
radio.setDataRate(RF24_250KBPS); // Zadajte rýchlosť prenosu dát (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Zadajte výkon vysielača (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Otvorte 1 kanál s identifikátorom 1 vysielača 0xAABBCCDD11 na príjem dát
// Otvorte potrubie 2 s ID vysielača 2xAABBCCDD0 na príjem údajov
radio.startListening(); // Zapnite prijímač, začnite počúvať otvorené potrubia
// radio.stopListening();
////////Výstup servisných informácií
tft.fillScreen(BLACK);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Začnite inicializovať SD kartu
Serial.println("Počiatočná karta SD");
tft.println("Počiatočná karta SD");
tft.setCursor(8, 10);
////////Inicializácia karty
if (!SD.begin(SD_CS_PIN)) {
Serial.println("počiatočné zlyhanie!");
tft.fillRect(8, 10, 85, 7, ČERVENÁ);
tft.setTextColor(BLACK);
tft.println("Začiatok zlyhal!");
návrat;
}
tft.setTextColor(WHITE);
Serial.println("inicializácia dokončená");
tft.println("Inicializácia dokončená");
oneskorenie (2000);
////////Čítanie času a dátumu a ich priraďovanie k premenným
t = rtc.getTime();
time_sec_prev = t.sec;
time_day_prev = t.date;
////////Vynútený výstup dátumu, aby sa nečakalo, kým sa dátum zmení
tft.setCursor(180, 0); // nastavenie polohy kurzora
tft.fillRect(178, 0, 65, 7, GREY); // vymazanie oblasti výstupu času
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Vypíše názov riadiacich objektov
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Winches I"));
////////Vytvorenie protokolového súboru a výstup výsledku pokusu o vytvorenie
tft.setTextSize(1);
tft.setCursor(130, 10); // ak sa vytvorí log súbor 2.txt, zápis do súboru bude pokračovať
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Else {
myFile = SD.open(perv, FILE_WRITE); // ak súbor 2.txt neexistuje, vytvorí sa
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loop (void) {
////////Kontrola existencie požiadavky na výstup protokolu na monitor COM portu
if (Serial.available() > 0) {
if (1 == Serial.read());
////////A ak je akceptované „1“, potom výstup
Súbor myFile = SD.open(perv);
// ak je súbor dostupný, napíšte doň:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("chyba pri otváraní .txt");
}
}
////////Čas čítania
t = rtc.getTime();
tft.setTextColor(WHITE);
////////Ak sa čas zmenil, zobrazte nové hodiny
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // nastavenie polohy kurzora
tft.fillRect(118, 0, 50, 7, GREY); // vymazanie oblasti výstupu času
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // výstupné hodnoty hodín
time_sec_prev = t.sec;
}
////////Ak sa dátum zmenil, zobrazte nový dátum
if ( time_day_prev != t.date) {
tft.setCursor(180, 0); // nastavenie polohy kurzora
tft.fillRect(178, 0, 65, 7, GREY); // vymazanie oblasti zobrazenia dátumu
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // zobrazenie údajov o dátume
time_day_prev = t.date;
}
////////Ak je k dispozícii rádiový príjem, potom
if (radio.available(&pipe)) {
////////kontrola, či je prijímacia vyrovnávacia pamäť plná,
radio.read(&data, sizeof(data));
////////ak je požadovaná adresa vysielača dostupná, potom
if (pipe == 1) {
////////čakáme na určenie synchronizačnej sekvencie núl
//začiatok bloku údajov
if (údaje == 0000) {
rc = 0;
} Else {
rc++;
}
////////Zaznamenávanie hodnôt počítadla a ich výpočet v 10. a 100. hodine
if (rc == 1) {
leb_1 = údaje / 3600.0;
}

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

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

if (rc == 4) {
leb_4 = údaje / 3600.0;
}
}
}
r++;
k++; // len počítadlo
//////// Aktualizácia údajov s určitou periodicitou
if ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, SIVÁ);
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;
}
////////Zapisovať údaje do denníka na SD každých 10 minút.
if ((t.min % 10 == 0) && (t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////Vytvorenie reťazca vo formáte .csv
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////Zápis do súboru a výstup výsledkov procesu zápisu
myFile = SD.open(perv, FILE_WRITE); // ak neexistuje súbor s názvom „2.txt“, vytvorí sa.
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, ZELENÁ);
tft.println("SD OK");
Serial.println("SD OK");
oneskorenie(900); // oneskorenie, inak zaznamená 13 rovnakých meraní, kým neuplynie sekunda
} Else {
tft.fillRect(198, 8, 42, 10, ČERVENÁ);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Program na konverziu znakov/* Prekódovanie ruských fontov z UTF-8 na Windows-1251 */

Reťazec utf8rus (zdroj reťazca)
{
int i,k;
strunový terč;
unsigned char n;
char m[2] = { '0', ' ' };

k = zdroj.dĺžka(); i = 0;

zatiaľ čo (i < k) {
n = zdroj[i]; i++;

if (n >= 0xC0) {
prepínač (n) {
prípad 0xD0: {
n = zdroj[i]; i++;
if (n == 0x81) { n = 0xA8; prestávka; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
break;
}
prípad 0xD1: {
n = zdroj[i]; i++;
if (n == 0x91) { n = 0xB8; prestávka; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
break;
}
}
}
m[0] = n; cieľ = cieľ + reťazec (m);
}
návratový cieľ;
} Program na prekódovanie znakov pre výstup cyriliky pomocou knižnice Adafruit_GFX je umiestnený v rovnakom priečinku ako hlavný program. Musíte tiež nahradiť súbor glcdfont.c v Adafruit_GFX iným písmom. Tu knižnica s požadovanou náhradou. Viac informácií o rusifikácii možno ľahko nájsť na internete.
Aby som to zhrnul, poviem, že systém splnil očakávania, bolo jednoduchšie sledovať prevádzkový čas zariadenia. Aj keď je všetko namontované na doskách, nie sú žiadne okamžité sťažnosti na prácu. Prvé prvky fungujú už viac ako šesť mesiacov a prežili zimu. Najnovší dizajn Od 9. marca jazdí pre 5 riadených blokov a prevádzková doba sa ním oficiálne eviduje.

Zdroj: hab.com

Pridať komentár