Helyi autonóm adatgyűjtő rendszer (folytatás)

Kezdje ezen az oldalon по ссылке.
Az önindító bekapcsolásával kapcsolatos információk lekérésének legkényelmesebb módja a PC817 optocsatolóval való opció. Sematikus ábrájaHelyi autonóm adatgyűjtő rendszer (folytatás)A lapok három egyforma áramkört tartalmaznak, minden 100x100 mm-es ABS műanyag dobozban van elhelyezve. Fotó az optocsatolókrólHelyi autonóm adatgyűjtő rendszer (folytatás) Félvezető szelepes indítóeszközökhöz csatlakoztatva a szivárgó áramuk elegendő a PC817 kinyitásához, és a számláló hamisan aktiválódik. Kizárni egy ilyen helyzetet még egy sorba kerül az optocsatoló LED és a működésjelző LED áramkörébe. Ehhez a J1 jumpert kinyitják és egy további LED1 LED-et beforrasztanak.
A fogadó rész készül oldal 1Helyi autonóm adatgyűjtő rendszer (folytatás)oldal 2Helyi autonóm adatgyűjtő rendszer (folytatás)ARDUINO MEGA 2560-hoz csatlakoztatott fejlesztőkártya. Ehhez egy kétsoros csatlakozót használnak a végén. Információmegjelenítő eszközként egy 240x400-as felbontású, rezisztív érintőképernyővel és hőmérséklet-érzékelővel rendelkező képernyőt használnak. HX8352B.Helyi autonóm adatgyűjtő rendszer (folytatás) Ezenkívül a képernyőpanelen lévő ICSP-csatlakozó eltávolításra került, és a micro SD-nyílás nincs használatban. A helyzet az, hogy a „natív” SD-aljzat nem használható az SPI-busz ütközése miatt. A flash kártyához külön kártyaolvasót használtak, ami egy 3,3 V-os stabilizátort és egy puffer chipet tartalmazott három kimeneti állapottal 74LVS125A. Itt várt rám a gereblye. Három állapotú puffer, de vagy az E01-ML01DP5 vagy a kártyaolvasó működött. A könyvtári megjegyzésekben az SdFat figyelmeztetést látott a más eszközökkel való összeférhetetlenségről. A TXS0108E szintváltóját eltávolítottuk és jumperekre cseréltük, mert Az E01-ML01DP5 tolerálja az 5V-os jeleket - ez nem segített. Oszcilloszkóp segítségével jelvesztést észleltek a MISO vonalon, amikor kártyaolvasót csatlakoztattak. Alapos vizsgálat során kiderült, hogy a 4LVS74A OE 125 csatornáinak engedélyező jeleinek bemenetei egyszerűen egy közös vezetékre voltak forrasztva, és szó sem lehetett harmadik állapotról. A puffer chipet primitív szintátalakítóként használták 5 V-ról 3.3 V-ra, 3,3 KΩ-os ellenállásokkal, amelyek sorba kapcsolták a jelvezetékekkel. Kivéve a MISO vonalat. Kimeneti alsó kapcsolója valószínűleg jeleket vonzott a talajszintre. Miután megállapították, hogy a MISO vonal engedélyező jele a 13-as érintkező, leszakadt a pályáról ésforrasztottHelyi autonóm adatgyűjtő rendszer (folytatás)a 9LVS74A CS eszköz kiválasztása bemeneti érintkező (125) és a lezáró ellenállás között. Most, ha nincs hozzáférés a memóriakártyához, a MISO puffer le van tiltva, és nem zavarja egy másik eszköz működését.Fejlesztési tábla diagramHelyi autonóm adatgyűjtő rendszer (folytatás)Vevő üzembenHelyi autonóm adatgyűjtő rendszer (folytatás)A DS3231 szoftveres I2C buszt (TWI) használ az óra csatlakoztatásához.
Arduino IDE program// FONTOS: Az Adafruit_TFTLCD KÖNYVTÁR KONKRÉTAN KELL
// VAGY A TFT PAJZSHOZ, VAGY A KITÖRŐTÁBLÁHOZ KONFIGURÁLVA.
// A BEÁLLÍTÁSHOZ TEKINTSE MEG A VONATKOZÓ MEGJEGYZÉSEKET: Adafruit_TFTLCD.h.
//az Open-Smart Team és a Catalex Team által
//[e-mail védett]
//Bolt: dx.com
// open-smart.aliexpress.com/store/1199788
//Demo funkció: Grafika, karakterek megjelenítése
//Arduino IDE: 1.6.5
// Tábla: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

// Tábla: OPEN-SMART UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2 hüvelykes 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

#beleértve // Grafikus alapkönyvtár
//#include // Hardver-specifikus könyvtár
#beleértve
MCUFRIEND_kbv tft;
#include "SdFat.h" // Az SdFat könyvtár használata
SdFat SD;
SdFile fájl;
Fájl myFile;
#define SD_CS_PIN SS

#beleértve // Csatlakoztassa a könyvtárat az SPI busszal való működéshez
#beleértve // Csatlakoztassa a beállításfájlt az RF24 könyvtárból
#beleértve // Csatlakoztassa a könyvtárat az nRF24L24+ használatához
RF24 rádió(47, 49);

#beleértve

DS3231 rtc(27, 25);
Idő t;

uint16_t r = 6000;
uint32_t k = 0;

illékony, előjel nélküli hosszú adatok;
úszó leb_1;
úszó leb_2;
úszó leb_3;
úszó leb_4;

uint8_t cső;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//**************************************************** ****************/ /
// Ha OPEN-SMART TFT breakout boardot használ //
// Javasoljuk, hogy adjon hozzá 5V-3.3V szintátalakító áramkört.
// Természetesen használhatod az OPEN-SMART UNO Black verziót 5V/3.3V tápkapcsolóval,
// csak át kell kapcsolni 3.3V-ra.
// Az LCD vezérlőtüskéi bármilyen digitális ill
// analóg lábak...de az analóg lábakat fogjuk használni, mivel ez lehetővé teszi számunkra
//—————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO fekete
// 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

// Ember által olvasható nevek hozzárendelése néhány gyakori 16 bites színértékhez:
#define FEKETE 0x0000
#define KÉK 0x001F
#define RED 0xF800
#define ZÖLD 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define SÁRGA 0xFFE0
#define FEHÉR 0xFFFF
#define GREY 0x8C51
#define GRAYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// A pajzs használatakor minden vezérlő és adatvonal rögzített, és
// opcionálisan egyszerűbb deklaráció is használható:
// 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();

// Az idő beállításához törölje a megjegyzéseket a szükséges sorokból
// rtc.setDOW(6); // A hét napja
// rtc.setTime(22, 04, 0); // Idő, 24 órás formátumban.
// rtc.setDate(4, 5, 2019); // Dátum, 29. október 2018

Serial.begin (2000000);
//////// Képernyő inicializálása
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(true);
//////////////////Nevek, berendezések tartozékai, szervezet neve
tft.fillScreen(FEKETE);
tft.setTextColor(FEHÉR);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("FEJLESZTŐK ÉS ÉPÍTÉS");
tft.setCursor(30, 20);
tft.print (utf8rus("Constructor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
késleltetés (2000);

rádió.begin(); // Munka megkezdése nRF24L01+
radio.setChannel(120); // Adja meg az adatvételi csatornát (0 és 127 között)
radio.setDataRate(RF24_250KBPS); // Adja meg az adatátviteli sebességet (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Adja meg az adó teljesítményét (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Nyisson meg 1 csövet 1 0xAABBCCDD11 adó azonosítójával az adatok fogadásához
// Nyissa meg a 2. csövet 2xAABBCCDD0 adóazonosítóval az adatok fogadásához
radio.startListening(); // Kapcsolja be a vevőt, kezdje el hallgatni a nyitott csöveket
// radio.stopListening();
////////Szolgáltatási információk kimenete
tft.fillScreen(FEKETE);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Kezdje el az SD-kártya inicializálását
Serial.println("Kezdeti SD-kártya");
tft.println("Kezdeti SD-kártya");
tft.setCursor(8, 10);
////////A kártya inicializálása
if (!SD.begin(SD_CS_PIN)) {
Serial.println("kezdeti sikertelen!");
tft.fillRect(8, 10, 85, 7, PIROS);
tft.setTextColor(FEKETE);
tft.println("Kezdet sikertelen!");
vissza;
}
tft.setTextColor(FEHÉR);
Serial.println("inicializálás kész");
tft.println("Inicializálás kész");
késleltetés (2000);
////////Idő és dátum beolvasása és hozzárendelése változókhoz
t = rtc.getTime();
time_sec_prev = t.sec;
idő_nap_előző = t.dátum;
////////Kényszerítette a dátumot, hogy ne várja meg a dátum változását a megjelenítéshez
tft.setCursor(180, 0); // a kurzor pozíciójának beállítása
tft.fillRect(178, 0, 65, 7, GREY); // az időkimeneti terület törlése
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Kiírja a vezérlőobjektumok nevét
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Csörlők I"));
////////Naplófájl létrehozása és a létrehozási kísérlet eredményének kiadása
tft.setTextSize(1);
tft.setCursor(130, 10); // ha létrejön a 2.txt naplófájl, akkor folytatódik az írás a fájlba
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Else {
myFile = SD.open(perv, FÁJL_ÍRÁS); // ha a 2.txt fájl nem létezik, akkor létrejön
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loop (void) {
////////A COM port figyelőhöz való napló kiadására irányuló kérelem meglétének ellenőrzése
if (Serial.available() > 0) {
if (1 == Serial.read());
////////És ha az „1” elfogadásra kerül, akkor a kimenet
Fájl myFile = SD.open(perv);
// ha elérhető a fájl, írd rá:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("hiba a .txt megnyitásakor");
}
}
////////Olvasási idő
t = rtc.getTime();
tft.setTextColor(FEHÉR);
////////Ha az idő megváltozott, akkor jelenítse meg az új óra állását
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // a kurzor pozíciójának beállítása
tft.fillRect(118, 0, 50, 7, GREY); // az időkimeneti terület törlése
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // kimeneti órajelek
time_sec_prev = t.sec;
}
////////Ha a dátum megváltozott, akkor jelenítse meg az új dátumot
if ( idő_nap_előző != t.dátum) {
tft.setCursor(180, 0); // a kurzor pozíciójának beállítása
tft.fillRect(178, 0, 65, 7, GREY); // dátum megjelenítési terület törlése
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // dátumleolvasások megjelenítése
idő_nap_előző = t.dátum;
}
////////Ha elérhető rádióvétel, akkor
if (radio.available(&pipe)) {
////////ellenőrzi, hogy a vételi puffer megtelt-e,
radio.read(&data, sizeof(data));
////////ha rendelkezésre áll a szükséges adócím, akkor
if (pipe == 1) {
////////várakozik a nullák szinkronizáló sorozatára a meghatározásához
//adatblokk eleje
if (adat == 0000) {
rc = 0;
} Else {
rc++;
}
////////Számláló értékek rögzítése és kiszámítása az óra 10. és 100. részében
if (rc == 1) {
leb_1 = adat / 3600.0;
}

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

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

if (rc == 4) {
leb_4 = adat / 3600.0;
}
}
}
r++;
k++; // csak egy számláló
//////// Adatfrissítés bizonyos gyakorisággal
if ( r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, SZÜRKE);
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;
}
////////Adatok írása a naplóba SD-n 10 percenként.
if ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(FEKETE);
////////Karakterlánc létrehozása .csv formátumban
String dataString = Karakterlánc (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////Írjon egy fájlba, és adja ki az írási folyamat eredményeit
myFile = SD.open(perv, FÁJL_ÍRÁS); // ha nincs „2.txt” nevű fájl, akkor az létrejön.
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, ZÖLD);
tft.println("SD OK");
Serial.println("SD OK");
késleltetés (900); // késleltetés, egyébként 13 azonos leolvasást rögzít, amíg el nem telik egy másodperc
} Else {
tft.fillRect(198, 8, 42, 10, PIROS);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Karakter konvertáló program/* Orosz betűtípusok átkódolása UTF-8-ról Windows-1251-re */

Karakterlánc utf8rus (karakterlánc forrása)
{
int i,k;
String target;
előjel nélküli char n;
char m[2] = { '0', ' ' };

k = forrás.length(); i = 0;

míg (i < k) {
n = forrás[i]; i++;

if (n >= 0xC0) {
kapcsoló (n) {
eset 0xD0: {
n = forrás[i]; i++;
if (n == 0x81) { n = 0xA8; szünet; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
break;
}
eset 0xD1: {
n = forrás[i]; i++;
if (n == 0x91) { n = 0xB8; szünet; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
break;
}
}
}
m[0] = n; cél = cél + Karakterlánc(m);
}
visszatérési cél;
}Az Adafruit_GFX könyvtárat használó cirill kimenet karakterátkódoló programja ugyanabba a mappába kerül a főprogrammal. Ezenkívül le kell cserélnie a glcdfont.c fájlt az Adafruit_GFX-ben egy másik betűtípusra. Itt könyvtár a szükséges pótlással. Az oroszosításról további információk könnyen megtalálhatók az interneten.
Összefoglalva elmondom, hogy a rendszer beváltotta a hozzá fűzött reményeket, könnyebbé vált a berendezések üzemidejének nyomon követése. Annak ellenére, hogy mindent kenyérsütőre szerelnek össze, a munkára nincs azonnali panasz. Az első elemek több mint hat hónapja működnek, és túlélték a telet. Legújabb dizájn Március 9. óta 5 ellenőrzött egységen üzemel, és ezzel hivatalosan is regisztrálják az üzemidőt.

Forrás: will.com

Hozzászólás