Místní autonomní systém získávání dat (pokračování)

Začněte na tomto webu по ссылке.
Jako nejpohodlnější možnost pro načtení informací o zapnutí startéru se ukázala možnost s optočlenem PC817. Obvodový diagramMístní autonomní systém získávání dat (pokračování)Desky obsahují tři stejné obvody, vše je umístěno v plastových boxech ABS o rozměru 100x100 mm. Fotografie optočlenůMístní autonomní systém získávání dat (pokračování) Při připojení ke spouštěcím zařízením s polovodičovými ventily je jejich svodový proud dostatečný k otevření PC817 a čítač se spustí falešně. Abychom takovou situaci vyloučili do obvodu LED optočlenu a LED indikace provozu je přidána další sériově. K tomu se otevře propojka J1 a zapájejí se přídavná LED LED1.
Přijímací část je vyrobena na strana 1Místní autonomní systém získávání dat (pokračování)strana 2Místní autonomní systém získávání dat (pokračování)vývojová deska připojená k ARDUINO MEGA 2560. K tomu je na konci použit dvouřadý konektor. Jako informační zobrazovací zařízení se používá obrazovka s rozlišením 240x400 s odporovým dotykovým displejem a teplotním senzorem. HX8352B.Místní autonomní systém získávání dat (pokračování) Navíc je odstraněn konektor k ICSP na desce obrazovky a slot pro micro SD se nepoužívá. Faktem je, že „nativní“ zásuvku SD nelze použít kvůli konfliktu na sběrnici SPI. Pro flash kartu byla použita samostatná čtečka karet, která obsahovala 3,3V stabilizátor a vyrovnávací čip se třemi výstupními stavy 74LVS125A. Tady na mě čekaly hrábě. Třístavová vyrovnávací paměť, ale fungovala buď E01-ML01DP5 nebo čtečka karet. V komentářích knihovny SdFat viděl varování o nekompatibilitě s jinými zařízeními. Převodník úrovní na TXS0108E byl odstraněn a nahrazen propojkami, protože E01-ML01DP5 je tolerantní k 5V signálům - nepomohlo. Pomocí osciloskopu byla detekována ztráta signálu na lince MISO při připojení čtečky karet. Po pečlivém zkoumání bylo zjištěno, že vstupy povolovacích signálů OE 4 kanálů 74LVS125A byly jednoduše připájeny ke společnému vodiči a o nějakém třetím stavu nemůže být ani řeč. Vyrovnávací čip byl použit jako primitivní převodník úrovně z 5V na 3.3V pomocí rezistorů 3,3 KΩ zapojených do série se signálovými linkami. Kromě řady MISO. Jeho výstupní spodní spínač pravděpodobně přitahoval signály do úrovně země. Po zjištění, že povolovací signál linky MISO byl kolík 13, byl odtržen od stopy apájenéMístní autonomní systém získávání dat (pokračování)mezi zařízením 9LVS74A CS vyberte vstupní kolík (125) a zakončovací odpor. Nyní, pokud není přístup k paměťové kartě, vyrovnávací paměť MISO je deaktivována a neovlivňuje činnost jiného zařízení.Schéma vývojové deskyMístní autonomní systém získávání dat (pokračování)Přijímač v provozuMístní autonomní systém získávání dat (pokračování)DS3231 používá k připojení hodin softwarovou sběrnici I2C (TWI).
Program Arduino IDE// DŮLEŽITÉ: KNIHOVNA Adafruit_TFTLCD MUSÍ BÝT SPECIFICKÉ
// KONFIGUROVÁNO BUĎ PRO TFT SHIELD, NEBO PRO PŘEPÍNACÍ DESKU.
// NASTAVENÍ VIZ PŘÍSLUŠNÉ KOMENTÁŘE V Adafruit_TFTLCD.h.
//od Open-Smart Team a Catalex Team
//[chráněno e-mailem]
//Obchod: dx.com
// open-smart.aliexpress.com/store/1199788
//Ukázková funkce: Zobrazení grafiky, znaků
//Arduino IDE: 1.6.5
// Deska: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

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

#zahrnout // Základní grafická knihovna
//#zahrnout // Knihovna specifická pro hardware
#zahrnout
MCUFRIEND_kbv tft;
#include "SdFat.h" // Použijte knihovnu SdFat
SdFat SD;
soubor SdFile;
Soubor myFile;
#define SD_CS_PIN SS

#zahrnout // Připojte knihovnu pro práci se sběrnicí SPI
#zahrnout // Připojte soubor nastavení z knihovny RF24
#zahrnout // Připojte knihovnu pro práci s nRF24L24+
radiostanice RF24(47, 49);

#zahrnout

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

uint16_t r = 6000;
uint32_t k = 0;

nestálá dlouhá data bez znaménka;
float leb_1;
float leb_2;
float leb_3;
float leb_4;

uint8_t potrubí;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//********************************************************** **************/ /
// Pokud používáte OPEN-SMART TFT breakout board //
// Doporučujeme přidat obvod pro převod úrovně 5V-3.3V.
// Samozřejmě můžete použít verzi OPEN-SMART UNO Black s vypínačem 5V/3.3V,
// stačí přepnout na 3.3V.
// Ovládací piny pro LCD lze přiřadit libovolnému digitálnímu popř
// analogové kolíky...ale použijeme analogové kolíky, jak nám to umožní
//——————————————-|
// 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

// Přiřaďte lidem čitelné názvy k některým běžným 16bitovým hodnotám barev:
#define BLACK 0x0000
#define MODRÁ 0x001F
#define RED 0xF800
#define ZELENÁ 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define ŽLUTÁ 0xFFE0
#define BÍLÁ 0xFFFF
#define ŠEDÁ 0x8C51
#define GREYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Při použití štítu jsou všechny řídicí a datové linky pevné a
// volitelně lze použít jednodušší deklaraci:
// Adafruit_TFTLCD tft;
uint16_t g_identifikátor;

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

neplatné nastavení (neplatné) {

rtc.begin();

// Chcete-li nastavit čas, odkomentujte potřebné řádky
// rtc.setDOW(6); // Den v týdnu
// rtc.setTime(22, 04, 0); // Čas ve 24hodinovém formátu.
// rtc.setDate(4, 5, 2019); // Datum, 29. října 2018

Serial.begin (2000000);
//////// Inicializace obrazovky
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(pravda);
//////////////////Výstup jmen, příslušenství zařízení, název organizace
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("VÝVOJÁŘI A STAVIT");
tft.setCursor(30, 20);
tft.print (utf8rus("Konstruktor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
zpoždění (2000);

radio.begin(); // Zahájení práce nRF24L01+
radio.setChannel(120); // Určete kanál příjmu dat (od 0 do 127)
radio.setDataRate(RF24_250KBPS); // Zadejte rychlost přenosu dat (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Určete výkon vysílače (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Otevřete 1 kanál s identifikátorem 1 vysílače 0xAABBCCDD11 pro příjem dat
// Otevřete potrubí 2 s ID vysílače 2xAABBCCDD0 pro příjem dat
radio.startListening(); // Zapněte přijímač, začněte poslouchat otevřené potrubí
// radio.stopListening();
////////Výstup servisních informací
tft.fillScreen(BLACK);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Začněte inicializovat SD kartu
Serial.println("Počáteční karta SD");
tft.println("Počáteční karta SD");
tft.setCursor(8, 10);
////////Inicializace karty
if (!SD.begin(SD_CS_PIN)) {
Serial.println("počáteční se nezdařilo!");
tft.fillRect(8, 10, 85, 7, ČERVENÁ);
tft.setTextColor(BLACK);
tft.println("Inicializace se nezdařila!");
návrat;
}
tft.setTextColor(WHITE);
Serial.println("inicializace provedena");
tft.println("Inicializace provedena");
zpoždění (2000);
////////Čtení času a data a jejich přiřazení k proměnným
t = rtc.getTime();
time_sec_prev = t.sec;
time_day_prev = t.date;
////////Nuceně vytisknout datum, aby se nemuselo čekat, až se datum změní
tft.setCursor(180, 0); // nastavení pozice kurzoru
tft.fillRect(178, 0, 65, 7, ŠEDÁ); // vymazání oblasti výstupu času
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Vypíše název řídicích objektů
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Winches I"));
////////Vytvoření souboru protokolu a výstup výsledku pokusu o vytvoření
tft.setTextSize(1);
tft.setCursor(130, 10); // pokud je vytvořen log soubor 2.txt, zápis do souboru bude pokračovat
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Else {
myFile = SD.open(perv, FILE_WRITE); // pokud soubor 2.txt neexistuje, bude vytvořen
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loop (void) {
////////Kontrola existence požadavku na výstup protokolu na monitor COM portu
if (Serial.available() > 0) {
if (1 == Serial.read());
////////A pokud je přijato „1“, pak výstup
Soubor myFile = SD.open(perv);
// pokud je soubor dostupný, zapište do něj:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("chyba při otevírání .txt");
}
}
////////Čas na čtení
t = rtc.getTime();
tft.setTextColor(WHITE);
////////Pokud se čas změnil, zobrazte nové hodnoty hodin
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // nastavení pozice kurzoru
tft.fillRect(118, 0, 50, 7, ŠEDÁ); // vymazání oblasti výstupu času
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // výstupní hodnoty hodin
time_sec_prev = t.sec;
}
////////Pokud se datum změnilo, zobrazte nové datum
if ( time_day_prev != t.date) {
tft.setCursor(180, 0); // nastavení pozice kurzoru
tft.fillRect(178, 0, 65, 7, ŠEDÁ); // vymazání oblasti zobrazení data
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // zobrazení údajů o datu
time_day_prev = t.date;
}
////////Pokud je k dispozici příjem rádia, pak
if (radio.available(&pipe)) {
////////kontrola, zda je přijímací vyrovnávací paměť plná,
radio.read(&data, sizeof(data));
////////pokud je k dispozici požadovaná adresa vysílače, pak
if (pipe == 1) {
////////čeká na určení synchronizační sekvence nul
//začátek datového bloku
if (data == 0000) {
rc = 0;
} Else {
rc++;
}
////////Zaznamenání hodnot počítadla a jejich výpočet v 10. a 100. hodině
if (rc == 1) {
leb_1 = data / 3600.0;
}

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

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

if (rc == 4) {
leb_4 = data / 3600.0;
}
}
}
r++;
k++; // jen počítadlo
//////// Aktualizace dat s určitou periodicitou
if ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, ŠEDÁ);
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;
}
////////Zápis dat do logu na SD každých 10 minut.
if ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////Vytvoření řetězce ve formátu .csv
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////Zápis do souboru a výstup výsledků procesu zápisu
myFile = SD.open(perv, FILE_WRITE); // pokud neexistuje soubor s názvem „2.txt“, bude vytvořen.
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, ZELENÁ);
tft.println("SD OK");
Serial.println("SD OK");
zpoždění(900); // zpoždění, jinak zaznamená 13 stejných měření, dokud neuplyne sekunda
} Else {
tft.fillRect(198, 8, 42, 10, ČERVENÁ);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Program pro konverzi postav/* Překódování ruských písem z UTF-8 na Windows-1251 */

Řetězec utf8rus (zdroj řetězce)
{
int i,k;
Provázkový terč;
unsigned char n;
char m[2] = { '0', ' ' };

k = zdroj.délka(); i = 0;

zatímco (i < k) {
n = zdroj[i]; i++;

if (n >= 0xC0) {
přepínač (n) {
případ 0xD0: {
n = zdroj[i]; i++;
if (n == 0x81) { n = 0xA8; přestávka; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
break;
}
případ 0xD1: {
n = zdroj[i]; i++;
if (n == 0x91) { n = 0xB8; přestávka; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
break;
}
}
}
m[0] = n; cíl = cíl + řetězec(m);
}
návratový cíl;
} Program pro překódování znaků pro výstup v azbuce pomocí knihovny Adafruit_GFX je umístěn ve stejné složce jako hlavní program. Musíte také nahradit soubor glcdfont.c v Adafruit_GFX jiným písmem. Zde knihovna s požadovanou náhradou. Více informací o rusifikaci lze snadno najít na internetu.
Abych to shrnul, řeknu, že systém splnil očekávání, bylo snazší sledovat provozní dobu zařízení. I když je vše smontováno na prkénkách, nejsou žádné okamžité stížnosti na práci. První prvky fungují více než šest měsíců a přečkaly zimu. Nejnovější design Od 9. března běží pro 5 řízených bloků a oficiálně se s ním eviduje provozní doba.

Zdroj: www.habr.com

Přidat komentář