Lokaal autonome gegevensferwervingssysteem (ferfolch)

Begjin op dizze side link.
De meast handige opsje foar it opheljen fan ynformaasje oer it ynskeakeljen fan de starter die bliken de opsje te wêzen mei de PC817 optocoupler. Circuit diagramLokaal autonome gegevensferwervingssysteem (ferfolch)De planken befetsje trije identike circuits, alles wurdt pleatst yn ABS plestik doazen, grutte 100x100 mm. Foto fan optocouplersLokaal autonome gegevensferwervingssysteem (ferfolch) As se ferbûn binne mei startapparaten mei semiconductor-kleppen, is har lekstroom genôch om de PC817 te iepenjen en de teller sil falsk trigger. Om sa'n situaasje út te sluten ien mear wurdt tafoege yn rige oan it circuit fan de optocoupler LED en de operaasje oantsjutting LED. Om dit te dwaan, wurdt de jumper J1 iepene en in ekstra LED LED1 wurdt ynsoldere.
It ûntfangende diel wurdt makke op kant 1Lokaal autonome gegevensferwervingssysteem (ferfolch)kant 2Lokaal autonome gegevensferwervingssysteem (ferfolch)ûntwikkeling board ferbûn oan ARDUINO MEGA 2560. Hjirfoar wurdt in dûbele-rige Connector brûkt oan 'e ein. In skerm mei in resolúsje fan 240x400, mei in resistive touchscreen en in temperatuersensor, wurdt brûkt as ynformaasjewerjefteapparaat. HX8352B.Lokaal autonome gegevensferwervingssysteem (ferfolch) Boppedat, de ferbining mei de ICSP op it skerm board wurdt fuortsmiten en de micro SD slot wurdt net brûkt. It feit is dat de "native" SD socket kin net brûkt wurde fanwege in konflikt op de SPI bus. Foar de flitskaart waard in aparte kaartlêzer brûkt, dy't in 3,3V-stabilisator en in bufferchip mei trije útfiersteaten 74LVS125A omfette. Dit is wêr't de hark op my wachte. In trije-state buffer, mar of de E01-ML01DP5 of de kaart lêzer wurke. Yn 'e biblioteekkommentaren seach SdFat in warskôging oer ynkompatibiliteit mei oare apparaten. It nivo converter op de TXS0108E waard fuorthelle en ferfongen troch jumpers, omdat E01-ML01DP5 is tolerant foar 5V-sinjalen - it hat net holpen. Mei in oscilloskoop waard in sinjaalferlies ûntdutsen op 'e MISO-line as in kaartlêzer ferbûn wie. By soarchfâldich ûndersyk waard fûn dat de yngongen fan 'e ynskeakeljende sinjalen fan' e OE 4-kanalen fan 'e 74LVS125A gewoan oan in mienskiplike draad solderearre wiene en der koe gjin sprake wêze fan in tredde steat. De bufferchip waard brûkt as in primitive nivo-konverter fan 5V nei 3.3V mei 3,3 KΩ wjerstannen ferbûn yn searje mei de sinjaallinen. Utsein de MISO-line. Syn útfier ûnderste switch luts wierskynlik sinjalen nei it grûnnivo. Nei't bepaald waard dat it ynskeakeljensinjaal fan 'e MISO-line pin 13 wie, waard it fan it spoar ôfskuord ensolderedLokaal autonome gegevensferwervingssysteem (ferfolch)tusken de 9LVS74A CS apparaat selektearje input pin (125) en de beëiniging wjerstân. No, as der gjin tagong is ta de ûnthâldkaart, is de MISO-buffer útskeakele en bemuoit de wurking fan in oar apparaat net.Untwikkeling board diagramLokaal autonome gegevensferwervingssysteem (ferfolch)Untfanger yn wurkingLokaal autonome gegevensferwervingssysteem (ferfolch)De DS3231 brûkt in software I2C bus (TWI) om de klok te ferbinen.
Arduino IDE-programma// WICHTICH: Adafruit_TFTLCD BIBLIOTEK MOET SPESIFIEK WêS
// KONFIGUREERD FOAR OF DE TFT-SKILD OF DE BREAKOUT BOARD.
// SJE RELEVANTE OPMERKINGEN YN Adafruit_TFTLCD.h FOAR SETUP.
// troch Open-Smart Team en Catalex Team
//[e-post beskerme]
//Winkel: dx.com
// open-smart.aliexpress.com/store/1199788
// Demo Funksje: Display graphics, karakters
// Arduino IDE: 1.6.5
// Board: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

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

#ynklusyf // Core graphics bibleteek
//#omfette // Hardware-spesifike bibleteek
#ynklusyf
MCUFRIEND_kbv tft;
#include "SdFat.h" // Brûk de SdFat-bibleteek
SdFat SD;
SdFile triem;
Triem myFile;
#define SD_CS_PIN SS

#ynklusyf // Ferbine de bibleteek om te wurkjen mei de SPI bus
#ynklusyf // Ferbine it ynstellingsbestân fan 'e RF24-bibleteek
#ynklusyf // Ferbine de bibleteek om te wurkjen mei nRF24L24+
RF24 radio(47, 49);

#ynklusyf

DS3231 rtc(27, 25);
tiid t;

uint16_t r = 6000;
uint32_t k = 0;

flechtich net ûndertekene lange gegevens;
float leb_1;
float leb_2;
float leb_3;
float leb_4;

uint8_t pipe;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//********************************************* ***************/ /
// As jo ​​​​OPEN-SMART TFT breakout board brûke //
// Oanrikkemandearje jo ta te foegjen 5V-3.3V nivo konvertearjen circuit.
// Fansels kinne jo OPEN-SMART UNO Swarte ferzje brûke mei 5V / 3.3V power switch,
// jo moatte gewoan oerskeakelje nei 3.3V.
// De kontrôle pins foar de LCD kin wurde tawiisd oan eltse digitale of
// analoge pinnen ... mar wy sille de analoge pinnen brûke as dit ús kin
//———————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO Swart
// 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

// Tawize minsklik lêsbere nammen oan guon mienskiplike 16-bit kleur wearden:
#define SWART 0x0000
#define BLAU 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WIT 0xFFFF
#define GREY 0x8C51
#define GREYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// As jo ​​brûke it skyld, alle kontrôle- en gegevens rigels fêst, en
// in ienfâldiger deklaraasje kin opsjoneel brûkt wurde:
// 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();

// Om de tiid yn te stellen, uncommentearje de nedige rigels
// rtc.setDOW(6); // Dei fan de wike
// rtc.setTime(22, 04, 0); // Tiid, yn 24 oere opmaak.
// rtc.setDate(4, 5, 2019); // Datum, 29 oktober 2018

Serial.begin (2000000);
//////// Skerminitialisaasje
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(wier);
///////Z album de album de output fan nammen, apparatueraccessoires, organisaasjenamme
tft.fillScreen(SWART);
tft.setTextColor(WIT);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("DEVELOPERS & BUILD");
tft.setCursor(30, 20);
tft.print (utf8rus ("Constructor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
fertraging (2000);

radio.begin(); // Initiate wurk nRF24L01+
radio.setChannel(120); // Spesifisearje it gegevensûntfangstkanaal (fan 0 oant 127)
radio.setDataRate(RF24_250KBPS); // Spesifisearje de gegevens oerdracht taryf (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Spesifisearje de stjoerderkrêft (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Iepenje 1 piip mei de identifier fan 1 stjoerder 0xAABBCCDD11, om gegevens te ûntfangen
// Iepenje pipe 2 mei stjoerder ID 2xAABBCCDD0 om gegevens te ûntfangen
radio.startListening(); // De ûntfanger oansette, begjinne te harkjen nei iepen pipen
// radio.stopListening();
////////Utfier fan tsjinstynformaasje
tft.fillScreen(SWART);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////////// Start Initialisearje de SD-kaart
Serial.println("Initial SD card");
tft.println("Earste SD-kaart");
tft.setCursor(8, 10);
////////Inisjalisearjen fan de kaart
if (!SD.begin(SD_CS_PIN)) {
Serial.println("initiaal mislearre!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(SWART);
tft.println("Inisjele mislearre!");
weromkomme;
}
tft.setTextColor(WIT);
Serial.println("inisjalisaasje dien");
tft.println("Inisjalisaasje dien");
fertraging (2000);
//////// Lêze tiid en datum en tawize se oan fariabelen
t = rtc.getTime();
time_sec_prev = t.sek;
time_day_prev = t.date;
//////// De datum mei geweld útfiere om net te wachtsjen oant de datum feroaret foar werjefte
tft.setCursor(180, 0); // it ynstellen fan de rinnerke posysje
tft.fillRect(178, 0, 65, 7, GREY); // it tiidútfiergebiet wiskje
tft.setTextSize(1);
tft.print(rtc.getDateStr());
//////// Utfier de namme fan kontrôle objekten
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Winches I"));
/////////////////// As it meitsjen fan in logbestân en útfiert it resultaat fan it oanfreegjen fan besykjen
tft.setTextSize(1);
tft.setCursor(130, 10); // as log triem 2.txt wurdt oanmakke, dan sil it skriuwen nei de triem trochgean
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Else {
myFile = SD.open(perv, FILE_WRITE); // as triem 2.txt net bestiet, sil oanmakke wurde
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loop (void) {
//////// Kontrolearje it bestean fan in fersyk om in loch út te fieren nei de COM-poartemonitor
if (Serial.available() > 0) {
if (1 == Serial.read());
////////En as "1" wurdt akseptearre, dan de útfier
File myFile = SD.open(perv);
// as it bestân beskikber is, skriuw it dan:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
oars {
Serial.println("flater by it iepenjen fan .txt");
}
}
////////Lêstiid
t = rtc.getTime();
tft.setTextColor(WIT);
////////As de tiid feroare is, lit dan de nije kloklêzingen sjen
if (time_sec_prev != t.sec) {
tft.setCursor(120, 0); // it ynstellen fan de rinnerke posysje
tft.fillRect(118, 0, 50, 7, GREY); // it tiidútfiergebiet wiskje
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // útfier klok lêzingen
time_sec_prev = t.sek;
}
////////As de datum feroare is, lit dan de nije datum sjen
if (time_day_prev != t.date) {
tft.setCursor(180, 0); // it ynstellen fan de rinnerke posysje
tft.fillRect(178, 0, 65, 7, GREY); // wiskje datum werjefte gebiet
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // werjaan date lêzingen
time_day_prev = t.date;
}
//////// As radio ûntfangst is beskikber, dan
if (radio.available(&pipe)) {
//////// kontrolearje oft de ûntfangende buffer fol is,
radio.read(&data, sizeof(data));
//////// as it fereaske stjoerderadres beskikber is, dan
if (pipe == 1) {
//////// wachtsje op in syngronisearjende folchoarder fan nullen te bepalen
// begjin fan de gegevens blok
if (data == 0000) {
rc = 0;
} Else {
rc++;
}
//////// Tellerwearden opnimme en se berekkenje yn 10e en 100ste fan in oere
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++; // gewoan in teller
//////// Gegevens bywurkje mei in bepaalde periodiciteit
if (r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, GREYD);
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;
}
//////// Skriuw gegevens nei it log op SD elke 10 minuten.
if ((t.min % 10 == 0) && (t.sek == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(SWART);
////////In tekenrige oanmeitsje yn .csv-formaat
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
//////// Skriuw nei in bestân en útfier de resultaten fan it skriuwproses
myFile = SD.open(perv, FILE_WRITE); // as der gjin triem mei de namme "2.txt" is, sil it oanmakke wurde.
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, GREEN);
tft.println("SD OK");
Serial.println("SD OK");
fertraging (900); // fertraging, oars records 13 identike lêzings oant in twadde is foarby
} Else {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Karakter konverzje programma/* Russyske lettertypen opnij koade fan UTF-8 nei Windows-1251 */

String utf8rus(String source)
{
yn,k;
String doel;
net ûndertekene char n;
char m[2] = { '0', ' ' };

k = source.length(); ik = 0;

wylst (ik < k) {
n = boarne[i]; ik++;

if (n >= 0xC0) {
switch (n) {
gefal 0xD0: {
n = boarne[i]; ik++;
if (n == 0x81) { n = 0xA8; brekke; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
brekke;
}
gefal 0xD1: {
n = boarne[i]; ik++;
if (n == 0x91) { n = 0xB8; brekke; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
brekke;
}
}
}
m[0] = n; target = target + String(m);
}
werom doel;
} It programma foar transkodearjen fan karakters foar Syrillyske útfier mei de Adafruit_GFX-bibleteek wurdt pleatst yn deselde map mei it haadprogramma. Jo moatte ek it glcdfont.c-bestân yn Adafruit_GFX ferfange troch in oar lettertype. it is bibleteek mei de fereaske ferfanging. Mear ynformaasje oer Russification is maklik te finen op it ynternet.
Om gearfetsje, sil ik sizze dat it systeem foldie oan ferwachtingen, it is makliker wurden om de wurktiid fan 'e apparatuer te kontrolearjen. Ek al is alles op breaboards gearstald, der binne net fuortendaliks klachten oer it wurk. De earste eleminten wurkje al mear as seis moanne en hawwe de winter oerlibbe. Lêste ûntwerp It rint sûnt 9 maart foar 5 kontroleare ienheden en de operaasjetiid wurdt offisjeel registrearre mei it.

Boarne: www.habr.com

Add a comment